diff --git a/404.html b/404.html new file mode 100644 index 00000000..486e1e6e --- /dev/null +++ b/404.html @@ -0,0 +1,625 @@ + + + + + + + + + + + + + + + + + + + + Semver Gradle Plugin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ +

404 - Not found

+ +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/CHANGELOG/index.html b/CHANGELOG/index.html new file mode 100644 index 00000000..53dd95f2 --- /dev/null +++ b/CHANGELOG/index.html @@ -0,0 +1,868 @@ + + + + + + + + + + + + + + + + + + + + Changelog - Semver Gradle Plugin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + +

Changelog

+

0.5.0 - 2024-02-10

+

Updated

+
    +
  • com.javiersc.hubdle:com.javiersc.hubdle.gradle.plugin -> 0.6.2
  • +
  • gradle -> 8.6
  • +
  • com.javiersc.hubdle:com.javiersc.hubdle.gradle.plugin -> 0.5.0-beta.15
  • +
  • gradle -> 8.5
  • +
  • com.javiersc.hubdle:com.javiersc.hubdle.gradle.plugin -> 0.5.0-beta.6
  • +
  • com.javiersc.hubdle:com.javiersc.hubdle.gradle.plugin -> 0.5.0-beta.4
  • +
  • gradle -> 8.2.1
  • +
  • com.javiersc.hubdle:com.javiersc.hubdle.gradle.plugin -> 0.5.0-alpha.26
  • +
  • gradle -> 8.1.1
  • +
  • com.javiersc.hubdle:com.javiersc.hubdle.gradle.plugin -> 0.5.0-alpha.6
  • +
  • org.eclipse.jgit:org.eclipse.jgit -> 6.5.0.202303070854-r
  • +
  • gradle -> 8.0.2
  • +
  • com.javiersc.semver:semver-core -> 0.1.0-beta.13
  • +
+

Added

+
    +
  • mapVersion which expose GitData to semver extension
  • +
  • mapVersion to semver extension
  • +
  • version to semver extension
  • +
  • map function to LazyVersion
  • +
  • follow Gradle version ordering
  • +
  • settings plugin to apply semver plugin to all projects
  • +
  • gitDir property to SemverExtension
  • +
  • printSemver task depends on prepareKotlinIdeaImport task
  • +
  • commits: Provider<Commit> to SemverExtension
  • +
  • commitsMaxCount: Provider<Int> to SemverExtension
  • +
  • semver.commitsMaxCount property
  • +
+

Fixed

+
    +
  • GitHub output and environment variables in the printSemver task
  • +
  • the stage SNAPSHOT is not appended at the end of the version in all cases
  • +
  • metadata doesn’t allow ., -, or _ characters
  • +
  • multiple regexes invalidating valid versions
  • +
  • default logger uses LIFECYCLE instead of QUIET
  • +
+

Removed

+
    +
  • LazyVersion
  • +
+

Changed

+
    +
  • Version to GradleVersion
  • +
  • plugin id from com.javiersc.semver.gradle.plugin to com.javiersc.semver
  • +
  • com.javiersc.semver:semver-core dependency from implementation to api
  • +
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 00000000..e38e5fea --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +semver-gradle-plugin.javiersc.com \ No newline at end of file diff --git a/api/index.html b/api/index.html new file mode 100644 index 00000000..8cc5432a --- /dev/null +++ b/api/index.html @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version-exception/-gradle-version-exception.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version-exception/-gradle-version-exception.html new file mode 100644 index 00000000..c60aae8b --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version-exception/-gradle-version-exception.html @@ -0,0 +1,76 @@ + + + + + GradleVersionException + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

GradleVersionException

+
+
constructor(message: String)
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version-exception/index.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version-exception/index.html new file mode 100644 index 00000000..5675ed95 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version-exception/index.html @@ -0,0 +1,258 @@ + + + + + GradleVersionException + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

GradleVersionException

+ +
+
+
+
+
+

Constructors

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
constructor(message: String)
+
+
+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
open val cause: Throwable?
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override val message: String
+
+
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+ +
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+ +
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version-exception/message.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version-exception/message.html new file mode 100644 index 00000000..9d6d6145 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version-exception/message.html @@ -0,0 +1,76 @@ + + + + + message + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

message

+
+
open override val message: String
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-check-mode/-insignificant/index.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-check-mode/-insignificant/index.html new file mode 100644 index 00000000..dcb9d339 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-check-mode/-insignificant/index.html @@ -0,0 +1,115 @@ + + + + + Insignificant + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Insignificant

+ +
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-check-mode/-none/index.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-check-mode/-none/index.html new file mode 100644 index 00000000..794c89ab --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-check-mode/-none/index.html @@ -0,0 +1,115 @@ + + + + + None + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

None

+ +
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-check-mode/-significant/index.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-check-mode/-significant/index.html new file mode 100644 index 00000000..b56eb3c8 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-check-mode/-significant/index.html @@ -0,0 +1,115 @@ + + + + + Significant + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Significant

+ +
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-check-mode/entries.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-check-mode/entries.html new file mode 100644 index 00000000..46814917 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-check-mode/entries.html @@ -0,0 +1,76 @@ + + + + + entries + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

entries

+
+

Returns a representation of an immutable list of all enum entries, in the order they're declared.

This method may be used to iterate over the enum entries.

+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-check-mode/index.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-check-mode/index.html new file mode 100644 index 00000000..53708a3e --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-check-mode/index.html @@ -0,0 +1,213 @@ + + + + + CheckMode + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

CheckMode

+ +
+
+
+
+
+

Entries

+
+
+
+
+ + +
Link copied to clipboard
+
+
+ +
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+ +
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+

Returns a representation of an immutable list of all enum entries, in the order they're declared.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+

Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+

Returns an array containing the constants of this enum type, in the order they're declared.

+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-check-mode/value-of.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-check-mode/value-of.html new file mode 100644 index 00000000..690e7ac2 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-check-mode/value-of.html @@ -0,0 +1,76 @@ + + + + + valueOf + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

valueOf

+
+

Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

Throws

if this enum type has no constant with the specified name

+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-check-mode/values.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-check-mode/values.html new file mode 100644 index 00000000..61990659 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-check-mode/values.html @@ -0,0 +1,76 @@ + + + + + values + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

values

+
+

Returns an array containing the constants of this enum type, in the order they're declared.

This method may be used to iterate over the constants.

+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/commits-hash-regex.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/commits-hash-regex.html new file mode 100644 index 00000000..a7bfd9bf --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/commits-hash-regex.html @@ -0,0 +1,76 @@ + + + + + commitsHashRegex + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

commitsHashRegex

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/commits-plus-metadata-regex.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/commits-plus-metadata-regex.html new file mode 100644 index 00000000..a80e5bf6 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/commits-plus-metadata-regex.html @@ -0,0 +1,76 @@ + + + + + commitsPlusMetadataRegex + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

commitsPlusMetadataRegex

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/dot-commits-hash-regex.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/dot-commits-hash-regex.html new file mode 100644 index 00000000..7c203e36 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/dot-commits-hash-regex.html @@ -0,0 +1,76 @@ + + + + + dotCommitsHashRegex + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

dotCommitsHashRegex

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/dot-commits-plus-metadata-regex.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/dot-commits-plus-metadata-regex.html new file mode 100644 index 00000000..d9fd7ef1 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/dot-commits-plus-metadata-regex.html @@ -0,0 +1,76 @@ + + + + + dotCommitsPlusMetadataRegex + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

dotCommitsPlusMetadataRegex

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/get-or-null.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/get-or-null.html new file mode 100644 index 00000000..1c6b6325 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/get-or-null.html @@ -0,0 +1,76 @@ + + + + + getOrNull + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

getOrNull

+
+
fun getOrNull(major: Int, minor: Int, patch: Int, stageName: String?, stageNum: Int?, commits: Int?, hash: String?, metadata: String?, checkMode: GradleVersion.CheckMode = Insignificant): GradleVersion?
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/hash-regex.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/hash-regex.html new file mode 100644 index 00000000..63b87d6d --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/hash-regex.html @@ -0,0 +1,76 @@ + + + + + hashRegex + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

hashRegex

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/hyphen-stage-regex.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/hyphen-stage-regex.html new file mode 100644 index 00000000..ae12a746 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/hyphen-stage-regex.html @@ -0,0 +1,76 @@ + + + + + hyphenStageRegex + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

hyphenStageRegex

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/index.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/index.html new file mode 100644 index 00000000..a821933e --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/index.html @@ -0,0 +1,359 @@ + + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Companion

+
object Companion
+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+ +
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+ +
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+ +
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+ +
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+ +
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun getOrNull(major: Int, minor: Int, patch: Int, stageName: String?, stageNum: Int?, commits: Int?, hash: String?, metadata: String?, checkMode: GradleVersion.CheckMode = Insignificant): GradleVersion?
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
operator fun invoke(value: String, checkMode: GradleVersion.CheckMode = Insignificant): GradleVersion
operator fun invoke(version: String, stage: String?, checkMode: GradleVersion.CheckMode = Insignificant): GradleVersion
operator fun invoke(major: Int, minor: Int, patch: Int, stageName: String?, stageNum: Int?, checkMode: GradleVersion.CheckMode = Insignificant): GradleVersion
operator fun invoke(major: Int, minor: Int, patch: Int, stageName: String?, stageNum: Int?, commits: Int?, hash: String?, metadata: String?, checkMode: GradleVersion.CheckMode = Insignificant): GradleVersion
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun safe(value: String, checkMode: GradleVersion.CheckMode = Insignificant): Result<GradleVersion>
fun safe(version: String, stage: String?, checkMode: GradleVersion.CheckMode = Insignificant): Result<GradleVersion>
fun safe(major: Int, minor: Int, patch: Int, stageName: String?, stageNum: Int?, commits: Int?, hash: String?, metadata: String?, checkMode: GradleVersion.CheckMode = Insignificant): Result<GradleVersion>
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/insignificant-regex.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/insignificant-regex.html new file mode 100644 index 00000000..7da3aaf6 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/insignificant-regex.html @@ -0,0 +1,76 @@ + + + + + insignificantRegex + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

insignificantRegex

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/invoke.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/invoke.html new file mode 100644 index 00000000..88bf8e2b --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/invoke.html @@ -0,0 +1,76 @@ + + + + + invoke + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

invoke

+
+
operator fun invoke(value: String, checkMode: GradleVersion.CheckMode = Insignificant): GradleVersion
operator fun invoke(version: String, stage: String?, checkMode: GradleVersion.CheckMode = Insignificant): GradleVersion
operator fun invoke(major: Int, minor: Int, patch: Int, stageName: String?, stageNum: Int?, checkMode: GradleVersion.CheckMode = Insignificant): GradleVersion
operator fun invoke(major: Int, minor: Int, patch: Int, stageName: String?, stageNum: Int?, commits: Int?, hash: String?, metadata: String?, checkMode: GradleVersion.CheckMode = Insignificant): GradleVersion
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/metadata-regex-with-plus.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/metadata-regex-with-plus.html new file mode 100644 index 00000000..8ba11018 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/metadata-regex-with-plus.html @@ -0,0 +1,76 @@ + + + + + metadataRegexWithPlus + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

metadataRegexWithPlus

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/metadata-regex.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/metadata-regex.html new file mode 100644 index 00000000..28d53cc5 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/metadata-regex.html @@ -0,0 +1,76 @@ + + + + + metadataRegex + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

metadataRegex

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/num-regex.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/num-regex.html new file mode 100644 index 00000000..6fb85fa0 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/num-regex.html @@ -0,0 +1,76 @@ + + + + + numRegex + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

numRegex

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/safe.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/safe.html new file mode 100644 index 00000000..d7897a67 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/safe.html @@ -0,0 +1,76 @@ + + + + + safe + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

safe

+
+
fun safe(value: String, checkMode: GradleVersion.CheckMode = Insignificant): Result<GradleVersion>
fun safe(version: String, stage: String?, checkMode: GradleVersion.CheckMode = Insignificant): Result<GradleVersion>
fun safe(major: Int, minor: Int, patch: Int, stageName: String?, stageNum: Int?, commits: Int?, hash: String?, metadata: String?, checkMode: GradleVersion.CheckMode = Insignificant): Result<GradleVersion>
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/scope-regex.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/scope-regex.html new file mode 100644 index 00000000..aa7898f8 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/scope-regex.html @@ -0,0 +1,76 @@ + + + + + scopeRegex + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

scopeRegex

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/significant-regex.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/significant-regex.html new file mode 100644 index 00000000..1b9f38f8 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/significant-regex.html @@ -0,0 +1,76 @@ + + + + + significantRegex + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

significantRegex

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/snapshot-regex.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/snapshot-regex.html new file mode 100644 index 00000000..c1eb69cd --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/snapshot-regex.html @@ -0,0 +1,76 @@ + + + + + snapshotRegex + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

snapshotRegex

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/stage-no-snapshot-regex.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/stage-no-snapshot-regex.html new file mode 100644 index 00000000..e8566d7b --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/stage-no-snapshot-regex.html @@ -0,0 +1,76 @@ + + + + + stageNoSnapshotRegex + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

stageNoSnapshotRegex

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/stage-regex.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/stage-regex.html new file mode 100644 index 00000000..9fae31d6 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-companion/stage-regex.html @@ -0,0 +1,76 @@ + + + + + stageRegex + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

stageRegex

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-increase/-major/index.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-increase/-major/index.html new file mode 100644 index 00000000..4735f1ae --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-increase/-major/index.html @@ -0,0 +1,80 @@ + + + + + Major + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Major

+ +
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-increase/-minor/index.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-increase/-minor/index.html new file mode 100644 index 00000000..3633ea77 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-increase/-minor/index.html @@ -0,0 +1,80 @@ + + + + + Minor + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Minor

+ +
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-increase/-patch/index.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-increase/-patch/index.html new file mode 100644 index 00000000..f2957707 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-increase/-patch/index.html @@ -0,0 +1,80 @@ + + + + + Patch + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Patch

+ +
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-increase/index.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-increase/index.html new file mode 100644 index 00000000..6cf899c0 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-increase/index.html @@ -0,0 +1,130 @@ + + + + + Increase + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Increase

+
interface Increase

Inheritors

+
+
+
+
+
+

Types

+
+
+
+
+ + +
Link copied to clipboard
+
+
+ +
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+ +
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-stage/-companion/index.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-stage/-companion/index.html new file mode 100644 index 00000000..aed794e2 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-stage/-companion/index.html @@ -0,0 +1,100 @@ + + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Companion

+
object Companion
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
operator fun invoke(stage: String): GradleVersion.Stage
operator fun invoke(name: String, num: Int?): GradleVersion.Stage
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-stage/-companion/invoke.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-stage/-companion/invoke.html new file mode 100644 index 00000000..c667b1fc --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-stage/-companion/invoke.html @@ -0,0 +1,76 @@ + + + + + invoke + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

invoke

+
+
operator fun invoke(stage: String): GradleVersion.Stage
operator fun invoke(name: String, num: Int?): GradleVersion.Stage
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-stage/compare-to.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-stage/compare-to.html new file mode 100644 index 00000000..79718065 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-stage/compare-to.html @@ -0,0 +1,76 @@ + + + + + compareTo + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

compareTo

+
+
open operator override fun compareTo(other: GradleVersion.Stage): Int
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-stage/equals.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-stage/equals.html new file mode 100644 index 00000000..07faf935 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-stage/equals.html @@ -0,0 +1,76 @@ + + + + + equals + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

equals

+
+
open operator override fun equals(other: Any?): Boolean
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-stage/hash-code.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-stage/hash-code.html new file mode 100644 index 00000000..25f80234 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-stage/hash-code.html @@ -0,0 +1,76 @@ + + + + + hashCode + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

hashCode

+
+
open override fun hashCode(): Int
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-stage/index.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-stage/index.html new file mode 100644 index 00000000..16287c33 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-stage/index.html @@ -0,0 +1,198 @@ + + + + + Stage + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Stage

+ +
+
+
+
+
+

Types

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
object Companion
+
+
+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
val num: Int?
+
+
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
open operator override fun compareTo(other: GradleVersion.Stage): Int
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open operator override fun equals(other: Any?): Boolean
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun hashCode(): Int
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun toString(): String
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-stage/name.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-stage/name.html new file mode 100644 index 00000000..352980d9 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-stage/name.html @@ -0,0 +1,76 @@ + + + + + name + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

name

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-stage/num.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-stage/num.html new file mode 100644 index 00000000..b8a74ed9 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-stage/num.html @@ -0,0 +1,76 @@ + + + + + num + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

num

+
+
val num: Int?
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-stage/to-string.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-stage/to-string.html new file mode 100644 index 00000000..03cca9f0 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/-stage/to-string.html @@ -0,0 +1,76 @@ + + + + + toString + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

toString

+
+
open override fun toString(): String
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/commits.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/commits.html new file mode 100644 index 00000000..8de0bfd0 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/commits.html @@ -0,0 +1,76 @@ + + + + + commits + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

commits

+
+
val commits: Int?
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/compare-to.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/compare-to.html new file mode 100644 index 00000000..6b31a675 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/compare-to.html @@ -0,0 +1,76 @@ + + + + + compareTo + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

compareTo

+
+
open operator override fun compareTo(other: GradleVersion): Int
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/copy.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/copy.html new file mode 100644 index 00000000..3174f57b --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/copy.html @@ -0,0 +1,76 @@ + + + + + copy + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

copy

+
+
fun copy(major: Int = this.major, minor: Int = this.minor, patch: Int = this.patch, stageName: String? = this.stage?.name, stageNum: Int? = this.stage?.num, commits: Int? = this.commits, hash: String? = this.hash, metadata: String? = this.metadata, checkMode: GradleVersion.CheckMode = Insignificant): GradleVersion
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/equals.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/equals.html new file mode 100644 index 00000000..4645f5f1 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/equals.html @@ -0,0 +1,76 @@ + + + + + equals + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

equals

+
+
open operator override fun equals(other: Any?): Boolean
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/hash-code.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/hash-code.html new file mode 100644 index 00000000..b28f51d0 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/hash-code.html @@ -0,0 +1,76 @@ + + + + + hashCode + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

hashCode

+
+
open override fun hashCode(): Int
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/hash.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/hash.html new file mode 100644 index 00000000..470a3fe8 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/hash.html @@ -0,0 +1,76 @@ + + + + + hash + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

hash

+
+
val hash: String?
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/inc.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/inc.html new file mode 100644 index 00000000..e6ca0b1f --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/inc.html @@ -0,0 +1,76 @@ + + + + + inc + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

inc

+
+
fun inc(number: GradleVersion.Increase? = null, stageName: String = ""): GradleVersion
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/index.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/index.html new file mode 100644 index 00000000..7672afed --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/index.html @@ -0,0 +1,543 @@ + + + + + GradleVersion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

GradleVersion

+ +
+
+
+
+
+

Types

+
+
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
object Companion
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
interface Increase
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
val commits: Int?
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
val hash: String?
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+ +
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+ +
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+ +
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+ +
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
val major: Int
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
val minor: Int
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
val patch: Int
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+ +
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
open operator override fun compareTo(other: GradleVersion): Int
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun copy(major: Int = this.major, minor: Int = this.minor, patch: Int = this.patch, stageName: String? = this.stage?.name, stageNum: Int? = this.stage?.num, commits: Int? = this.commits, hash: String? = this.hash, metadata: String? = this.metadata, checkMode: GradleVersion.CheckMode = Insignificant): GradleVersion
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open operator override fun equals(other: Any?): Boolean
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun hashCode(): Int
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun inc(number: GradleVersion.Increase? = null, stageName: String = ""): GradleVersion
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun toString(): String
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/is-insignificant.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/is-insignificant.html new file mode 100644 index 00000000..0fa88f88 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/is-insignificant.html @@ -0,0 +1,76 @@ + + + + + isInsignificant + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

isInsignificant

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/is-invalid.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/is-invalid.html new file mode 100644 index 00000000..16642b3e --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/is-invalid.html @@ -0,0 +1,76 @@ + + + + + isInvalid + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

isInvalid

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/is-significant.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/is-significant.html new file mode 100644 index 00000000..60f5b958 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/is-significant.html @@ -0,0 +1,76 @@ + + + + + isSignificant + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

isSignificant

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/major.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/major.html new file mode 100644 index 00000000..a22e616c --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/major.html @@ -0,0 +1,76 @@ + + + + + major + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

major

+
+
val major: Int
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/metadata.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/metadata.html new file mode 100644 index 00000000..c6e031b0 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/metadata.html @@ -0,0 +1,76 @@ + + + + + metadata + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

metadata

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/minor.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/minor.html new file mode 100644 index 00000000..d10ded9a --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/minor.html @@ -0,0 +1,76 @@ + + + + + minor + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

minor

+
+
val minor: Int
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/patch.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/patch.html new file mode 100644 index 00000000..3da5bb01 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/patch.html @@ -0,0 +1,76 @@ + + + + + patch + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

patch

+
+
val patch: Int
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/stage.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/stage.html new file mode 100644 index 00000000..06f84ab1 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/stage.html @@ -0,0 +1,76 @@ + + + + + stage + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

stage

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/to-string.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/to-string.html new file mode 100644 index 00000000..3fbb97b4 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/-gradle-version/to-string.html @@ -0,0 +1,76 @@ + + + + + toString + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

toString

+
+
open override fun toString(): String
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/index.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/index.html new file mode 100644 index 00000000..8b3aab46 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/index.html @@ -0,0 +1,268 @@ + + + + + com.javiersc.gradle.version + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Package-level declarations

+
+
+
+
+
+

Types

+
+
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/is-alpha.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/is-alpha.html new file mode 100644 index 00000000..4dcfef69 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/is-alpha.html @@ -0,0 +1,76 @@ + + + + + isAlpha + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

isAlpha

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/is-beta.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/is-beta.html new file mode 100644 index 00000000..ba067810 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/is-beta.html @@ -0,0 +1,76 @@ + + + + + isBeta + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

isBeta

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/is-dev.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/is-dev.html new file mode 100644 index 00000000..e72fd539 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/is-dev.html @@ -0,0 +1,76 @@ + + + + + isDev + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

isDev

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/is-not-alpha.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/is-not-alpha.html new file mode 100644 index 00000000..b670ef4b --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/is-not-alpha.html @@ -0,0 +1,76 @@ + + + + + isNotAlpha + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

isNotAlpha

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/is-not-beta.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/is-not-beta.html new file mode 100644 index 00000000..3e046e5c --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/is-not-beta.html @@ -0,0 +1,76 @@ + + + + + isNotBeta + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

isNotBeta

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/is-not-dev.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/is-not-dev.html new file mode 100644 index 00000000..0484521a --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/is-not-dev.html @@ -0,0 +1,76 @@ + + + + + isNotDev + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

isNotDev

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/is-not-r-c.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/is-not-r-c.html new file mode 100644 index 00000000..433c7f5c --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/is-not-r-c.html @@ -0,0 +1,76 @@ + + + + + isNotRC + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

isNotRC

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/is-not-snapshot.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/is-not-snapshot.html new file mode 100644 index 00000000..d6b17815 --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/is-not-snapshot.html @@ -0,0 +1,76 @@ + + + + + isNotSnapshot + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

isNotSnapshot

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/is-r-c.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/is-r-c.html new file mode 100644 index 00000000..9ab1187c --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/is-r-c.html @@ -0,0 +1,76 @@ + + + + + isRC + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

isRC

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/com.javiersc.gradle.version/is-snapshot.html b/api/snapshot/gradle-version/com.javiersc.gradle.version/is-snapshot.html new file mode 100644 index 00000000..b070554d --- /dev/null +++ b/api/snapshot/gradle-version/com.javiersc.gradle.version/is-snapshot.html @@ -0,0 +1,76 @@ + + + + + isSnapshot + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

isSnapshot

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/index.html b/api/snapshot/gradle-version/index.html new file mode 100644 index 00000000..4ef17a4c --- /dev/null +++ b/api/snapshot/gradle-version/index.html @@ -0,0 +1,96 @@ + + + + + gradle-version + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

gradle-version

+

Semantic versioning implementation with Gradle version ordering rules

+
+

Packages

+
+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/gradle-version/navigation.html b/api/snapshot/gradle-version/navigation.html new file mode 100644 index 00000000..41baba62 --- /dev/null +++ b/api/snapshot/gradle-version/navigation.html @@ -0,0 +1,327 @@ +
+
+ +
+ +
+ +
+
+ CheckMode +
+
+ +
+
+ +
+
+
+ None +
+
+
+
+
+ Companion +
+
+
+
+ Increase +
+
+
+ Major +
+
+
+
+ Minor +
+
+
+
+ Patch +
+
+
+
+
+ Stage +
+
+
+ Companion +
+
+
+
+ +
+
+ isAlpha +
+
+
+
+ isBeta +
+
+
+
+ isDev +
+
+
+ +
+
+
+ isNotBeta +
+
+
+
+ isNotDev +
+
+
+
+ isNotRC +
+
+
+ +
+
+
+ isRC +
+
+
+ +
+
+
+
+ + +
+
+ +
+ +
+
+ Commit +
+
+
+ +
+
+ Companion +
+
+
+
+ GitData +
+
+
+ Branch +
+
+
+
+ Commit +
+
+
+
+ Tag +
+
+
+
+ +
+
+ Tag +
+
+
+ +
+
+
+ +
+
+ isAlpha +
+
+
+
+ isBeta +
+
+
+
+ isDev +
+
+
+ +
+
+
+ isNotBeta +
+
+
+
+ isNotDev +
+
+
+
+ isNotRC +
+
+
+ +
+
+
+ isRC +
+
+
+ +
+
+ + +
+
+ + +
+
diff --git a/api/snapshot/images/anchor-copy-button.svg b/api/snapshot/images/anchor-copy-button.svg new file mode 100644 index 00000000..19c1fa3f --- /dev/null +++ b/api/snapshot/images/anchor-copy-button.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/api/snapshot/images/arrow_down.svg b/api/snapshot/images/arrow_down.svg new file mode 100644 index 00000000..639aaf12 --- /dev/null +++ b/api/snapshot/images/arrow_down.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/api/snapshot/images/burger.svg b/api/snapshot/images/burger.svg new file mode 100644 index 00000000..fcca732b --- /dev/null +++ b/api/snapshot/images/burger.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/api/snapshot/images/copy-icon.svg b/api/snapshot/images/copy-icon.svg new file mode 100644 index 00000000..2cb02ec6 --- /dev/null +++ b/api/snapshot/images/copy-icon.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/api/snapshot/images/copy-successful-icon.svg b/api/snapshot/images/copy-successful-icon.svg new file mode 100644 index 00000000..c4b95383 --- /dev/null +++ b/api/snapshot/images/copy-successful-icon.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/api/snapshot/images/footer-go-to-link.svg b/api/snapshot/images/footer-go-to-link.svg new file mode 100644 index 00000000..a87add7a --- /dev/null +++ b/api/snapshot/images/footer-go-to-link.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/api/snapshot/images/go-to-top-icon.svg b/api/snapshot/images/go-to-top-icon.svg new file mode 100644 index 00000000..abc3d1ce --- /dev/null +++ b/api/snapshot/images/go-to-top-icon.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/api/snapshot/images/logo-icon.svg b/api/snapshot/images/logo-icon.svg new file mode 100644 index 00000000..e42f9570 --- /dev/null +++ b/api/snapshot/images/logo-icon.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + diff --git a/api/snapshot/images/nav-icons/abstract-class-kotlin.svg b/api/snapshot/images/nav-icons/abstract-class-kotlin.svg new file mode 100644 index 00000000..19d6148c --- /dev/null +++ b/api/snapshot/images/nav-icons/abstract-class-kotlin.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/api/snapshot/images/nav-icons/abstract-class.svg b/api/snapshot/images/nav-icons/abstract-class.svg new file mode 100644 index 00000000..60182030 --- /dev/null +++ b/api/snapshot/images/nav-icons/abstract-class.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/api/snapshot/images/nav-icons/annotation-kotlin.svg b/api/snapshot/images/nav-icons/annotation-kotlin.svg new file mode 100644 index 00000000..b90f508c --- /dev/null +++ b/api/snapshot/images/nav-icons/annotation-kotlin.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/api/snapshot/images/nav-icons/annotation.svg b/api/snapshot/images/nav-icons/annotation.svg new file mode 100644 index 00000000..b80c54b4 --- /dev/null +++ b/api/snapshot/images/nav-icons/annotation.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/api/snapshot/images/nav-icons/class-kotlin.svg b/api/snapshot/images/nav-icons/class-kotlin.svg new file mode 100644 index 00000000..797a2423 --- /dev/null +++ b/api/snapshot/images/nav-icons/class-kotlin.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/api/snapshot/images/nav-icons/class.svg b/api/snapshot/images/nav-icons/class.svg new file mode 100644 index 00000000..3f1ad167 --- /dev/null +++ b/api/snapshot/images/nav-icons/class.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/api/snapshot/images/nav-icons/enum-kotlin.svg b/api/snapshot/images/nav-icons/enum-kotlin.svg new file mode 100644 index 00000000..775a7cc9 --- /dev/null +++ b/api/snapshot/images/nav-icons/enum-kotlin.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/api/snapshot/images/nav-icons/enum.svg b/api/snapshot/images/nav-icons/enum.svg new file mode 100644 index 00000000..fa7f2476 --- /dev/null +++ b/api/snapshot/images/nav-icons/enum.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/api/snapshot/images/nav-icons/exception-class.svg b/api/snapshot/images/nav-icons/exception-class.svg new file mode 100644 index 00000000..c0b2bdeb --- /dev/null +++ b/api/snapshot/images/nav-icons/exception-class.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/api/snapshot/images/nav-icons/field-value.svg b/api/snapshot/images/nav-icons/field-value.svg new file mode 100644 index 00000000..2771ee56 --- /dev/null +++ b/api/snapshot/images/nav-icons/field-value.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/api/snapshot/images/nav-icons/field-variable.svg b/api/snapshot/images/nav-icons/field-variable.svg new file mode 100644 index 00000000..e2d2bbd0 --- /dev/null +++ b/api/snapshot/images/nav-icons/field-variable.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/api/snapshot/images/nav-icons/function.svg b/api/snapshot/images/nav-icons/function.svg new file mode 100644 index 00000000..f0da64a0 --- /dev/null +++ b/api/snapshot/images/nav-icons/function.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/api/snapshot/images/nav-icons/interface-kotlin.svg b/api/snapshot/images/nav-icons/interface-kotlin.svg new file mode 100644 index 00000000..5e163260 --- /dev/null +++ b/api/snapshot/images/nav-icons/interface-kotlin.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/api/snapshot/images/nav-icons/interface.svg b/api/snapshot/images/nav-icons/interface.svg new file mode 100644 index 00000000..32063ba2 --- /dev/null +++ b/api/snapshot/images/nav-icons/interface.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/api/snapshot/images/nav-icons/object.svg b/api/snapshot/images/nav-icons/object.svg new file mode 100644 index 00000000..31f0ee3e --- /dev/null +++ b/api/snapshot/images/nav-icons/object.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/api/snapshot/images/nav-icons/typealias-kotlin.svg b/api/snapshot/images/nav-icons/typealias-kotlin.svg new file mode 100644 index 00000000..f4bb238b --- /dev/null +++ b/api/snapshot/images/nav-icons/typealias-kotlin.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/api/snapshot/images/theme-toggle.svg b/api/snapshot/images/theme-toggle.svg new file mode 100644 index 00000000..df86202b --- /dev/null +++ b/api/snapshot/images/theme-toggle.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/api/snapshot/index.html b/api/snapshot/index.html new file mode 100644 index 00000000..3514a1f1 --- /dev/null +++ b/api/snapshot/index.html @@ -0,0 +1,128 @@ + + + + + All modules + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

All modules:

+
+
+
+
+ + +
Link copied to clipboard
+
+
+

Semantic versioning implementation with Gradle version ordering rules

+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+

On projects:

+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+

Check the README.md for more info

+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+

Check the README.md for more info

+
+
+
+
+
+
+ +
+
+
+ + diff --git a/api/snapshot/navigation.html b/api/snapshot/navigation.html new file mode 100644 index 00000000..120526bc --- /dev/null +++ b/api/snapshot/navigation.html @@ -0,0 +1,327 @@ +
+
+ +
+ +
+ +
+
+ CheckMode +
+
+ +
+
+ +
+
+
+ None +
+
+
+
+
+ Companion +
+
+
+
+ Increase +
+
+
+ Major +
+
+
+
+ Minor +
+
+
+
+ Patch +
+
+
+
+
+ Stage +
+
+
+ Companion +
+
+
+
+ +
+
+ isAlpha +
+
+
+
+ isBeta +
+
+
+
+ isDev +
+
+
+ +
+
+
+ isNotBeta +
+
+
+
+ isNotDev +
+
+
+
+ isNotRC +
+
+
+ +
+
+
+ isRC +
+
+
+ +
+
+
+
+ + +
+
+ +
+ +
+
+ Commit +
+
+
+ +
+
+ Companion +
+
+
+
+ GitData +
+
+
+ Branch +
+
+
+
+ Commit +
+
+
+
+ Tag +
+
+
+
+ +
+
+ Tag +
+
+
+ +
+
+
+ +
+
+ isAlpha +
+
+
+
+ isBeta +
+
+
+
+ isDev +
+
+
+ +
+
+
+ isNotBeta +
+
+
+
+ isNotDev +
+
+
+
+ isNotRC +
+
+
+ +
+
+
+ isRC +
+
+
+ +
+
+ + +
+
+ + +
+
diff --git a/api/snapshot/package-list b/api/snapshot/package-list new file mode 100644 index 00000000..7899b72a --- /dev/null +++ b/api/snapshot/package-list @@ -0,0 +1,14 @@ +$dokka.format:html-v1 +$dokka.linkExtension:html + +module:gradle-version +com.javiersc.gradle.version +module:semver-gradle-plugin +com.javiersc.semver.gradle.plugin +module:semver-project-gradle-plugin +com.javiersc.semver.project.gradle.plugin +com.javiersc.semver.project.gradle.plugin.extensions +com.javiersc.semver.project.gradle.plugin.services +com.javiersc.semver.project.gradle.plugin.tasks +module:semver-settings-gradle-plugin +com.javiersc.semver.settings.gradle.plugin diff --git a/api/snapshot/scripts/clipboard.js b/api/snapshot/scripts/clipboard.js new file mode 100644 index 00000000..7a4f33c5 --- /dev/null +++ b/api/snapshot/scripts/clipboard.js @@ -0,0 +1,56 @@ +/* + * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. + */ + +window.addEventListener('load', () => { + document.querySelectorAll('span.copy-icon').forEach(element => { + element.addEventListener('click', (el) => copyElementsContentToClipboard(element)); + }) + + document.querySelectorAll('span.anchor-icon').forEach(element => { + element.addEventListener('click', (el) => { + if(element.hasAttribute('pointing-to')){ + const location = hrefWithoutCurrentlyUsedAnchor() + '#' + element.getAttribute('pointing-to') + copyTextToClipboard(element, location) + } + }); + }) +}) + +const copyElementsContentToClipboard = (element) => { + const selection = window.getSelection(); + const range = document.createRange(); + range.selectNodeContents(element.parentNode.parentNode); + selection.removeAllRanges(); + selection.addRange(range); + + copyAndShowPopup(element, () => selection.removeAllRanges()) +} + +const copyTextToClipboard = (element, text) => { + var textarea = document.createElement("textarea"); + textarea.textContent = text; + textarea.style.position = "fixed"; + document.body.appendChild(textarea); + textarea.select(); + + copyAndShowPopup(element, () => document.body.removeChild(textarea)) +} + +const copyAndShowPopup = (element, after) => { + try { + document.execCommand('copy'); + element.nextElementSibling.classList.add('active-popup'); + setTimeout(() => { + element.nextElementSibling.classList.remove('active-popup'); + }, 1200); + } catch (e) { + console.error('Failed to write to clipboard:', e) + } + finally { + if(after) after() + } +} + +const hrefWithoutCurrentlyUsedAnchor = () => window.location.href.split('#')[0] + diff --git a/api/snapshot/scripts/main.js b/api/snapshot/scripts/main.js new file mode 100644 index 00000000..ba6c3473 --- /dev/null +++ b/api/snapshot/scripts/main.js @@ -0,0 +1,44 @@ +(()=>{var e={8527:e=>{e.exports=''},5570:e=>{e.exports=''},107:e=>{e.exports=''},7224:e=>{e.exports=''},538:e=>{e.exports=''},1924:(e,n,t)=>{"use strict";var r=t(210),o=t(5559),i=o(r("String.prototype.indexOf"));e.exports=function(e,n){var t=r(e,!!n);return"function"==typeof t&&i(e,".prototype.")>-1?o(t):t}},5559:(e,n,t)=>{"use strict";var r=t(8612),o=t(210),i=o("%Function.prototype.apply%"),a=o("%Function.prototype.call%"),l=o("%Reflect.apply%",!0)||r.call(a,i),c=o("%Object.getOwnPropertyDescriptor%",!0),u=o("%Object.defineProperty%",!0),s=o("%Math.max%");if(u)try{u({},"a",{value:1})}catch(e){u=null}e.exports=function(e){var n=l(r,a,arguments);if(c&&u){var t=c(n,"length");t.configurable&&u(n,"length",{value:1+s(0,e.length-(arguments.length-1))})}return n};var f=function(){return l(r,i,arguments)};u?u(e.exports,"apply",{value:f}):e.exports.apply=f},4184:(e,n)=>{var t; +/*! + Copyright (c) 2018 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames +*/!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e=[],n=0;n{"use strict";e.exports=function(e,n){var t=this,r=t.constructor;return t.options=Object.assign({storeInstancesGlobally:!0},n||{}),t.callbacks={},t.directMap={},t.sequenceLevels={},t.resetTimer=null,t.ignoreNextKeyup=!1,t.ignoreNextKeypress=!1,t.nextExpectedAction=!1,t.element=e,t.addEvents(),t.options.storeInstancesGlobally&&r.instances.push(t),t},e.exports.prototype.bind=t(2207),e.exports.prototype.bindMultiple=t(3396),e.exports.prototype.unbind=t(9208),e.exports.prototype.trigger=t(9855),e.exports.prototype.reset=t(6214),e.exports.prototype.stopCallback=t(3450),e.exports.prototype.handleKey=t(3067),e.exports.prototype.addEvents=t(718),e.exports.prototype.bindSingle=t(8763),e.exports.prototype.getKeyInfo=t(5825),e.exports.prototype.pickBestAction=t(8608),e.exports.prototype.getReverseMap=t(3956),e.exports.prototype.getMatches=t(3373),e.exports.prototype.resetSequences=t(3346),e.exports.prototype.fireCallback=t(2684),e.exports.prototype.bindSequence=t(7103),e.exports.prototype.resetSequenceTimer=t(7309),e.exports.prototype.detach=t(7554),e.exports.instances=[],e.exports.reset=t(1822),e.exports.REVERSE_MAP=null},718:(e,n,t)=>{"use strict";e.exports=function(){var e=this,n=t(4323),r=e.element;e.eventHandler=t(9646).bind(e),n(r,"keypress",e.eventHandler),n(r,"keydown",e.eventHandler),n(r,"keyup",e.eventHandler)}},2207:e=>{"use strict";e.exports=function(e,n,t){return e=e instanceof Array?e:[e],this.bindMultiple(e,n,t),this}},3396:e=>{"use strict";e.exports=function(e,n,t){for(var r=0;r{"use strict";e.exports=function(e,n,r,o){var i=this;function a(n){return function(){i.nextExpectedAction=n,++i.sequenceLevels[e],i.resetSequenceTimer()}}function l(n){var a;i.fireCallback(r,n,e),"keyup"!==o&&(a=t(6770),i.ignoreNextKeyup=a(n)),setTimeout((function(){i.resetSequences()}),10)}i.sequenceLevels[e]=0;for(var c=0;c{"use strict";e.exports=function(e,n,t,r,o){var i=this;i.directMap[e+":"+t]=n;var a,l=(e=e.replace(/\s+/g," ")).split(" ");l.length>1?i.bindSequence(e,l,n,t):(a=i.getKeyInfo(e,t),i.callbacks[a.key]=i.callbacks[a.key]||[],i.getMatches(a.key,a.modifiers,{type:a.action},r,e,o),i.callbacks[a.key][r?"unshift":"push"]({callback:n,modifiers:a.modifiers,action:a.action,seq:r,level:o,combo:e}))}},7554:(e,n,t)=>{var r=t(4323).off;e.exports=function(){var e=this,n=e.element;r(n,"keypress",e.eventHandler),r(n,"keydown",e.eventHandler),r(n,"keyup",e.eventHandler)}},4323:e=>{function n(e,n,t,r){return!e.addEventListener&&(n="on"+n),(e.addEventListener||e.attachEvent).call(e,n,t,r),t}e.exports=n,e.exports.on=n,e.exports.off=function(e,n,t,r){return!e.removeEventListener&&(n="on"+n),(e.removeEventListener||e.detachEvent).call(e,n,t,r),t}},2684:(e,n,t)=>{"use strict";e.exports=function(e,n,r,o){this.stopCallback(n,n.target||n.srcElement,r,o)||!1===e(n,r)&&(t(1350)(n),t(6103)(n))}},5825:(e,n,t)=>{"use strict";e.exports=function(e,n){var r,o,i,a,l,c,u=[];for(r=t(4520)(e),a=t(7549),l=t(5355),c=t(8581),i=0;i{"use strict";e.exports=function(e,n,r,o,i,a){var l,c,u,s,f=this,p=[],d=r.type;"keypress"!==d||r.code&&"Arrow"===r.code.slice(0,5)||(f.callbacks["any-character"]||[]).forEach((function(e){p.push(e)}));if(!f.callbacks[e])return p;for(u=t(8581),"keyup"===d&&u(e)&&(n=[e]),l=0;l{"use strict";e.exports=function(){var e,n=this.constructor;if(!n.REVERSE_MAP)for(var r in n.REVERSE_MAP={},e=t(4766))r>95&&r<112||e.hasOwnProperty(r)&&(n.REVERSE_MAP[e[r]]=r);return n.REVERSE_MAP}},3067:(e,n,t)=>{"use strict";e.exports=function(e,n,r){var o,i,a,l,c=this,u={},s=0,f=!1;for(o=c.getMatches(e,n,r),i=0;i{"use strict";e.exports=function(e){var n,r=this;"number"!=typeof e.which&&(e.which=e.keyCode);var o=t(6770)(e);void 0!==o&&("keyup"!==e.type||r.ignoreNextKeyup!==o?(n=t(4610),r.handleKey(o,n(e),e)):r.ignoreNextKeyup=!1)}},5532:e=>{"use strict";e.exports=function(e,n){return e.sort().join(",")===n.sort().join(",")}},8608:e=>{"use strict";e.exports=function(e,n,t){return t||(t=this.getReverseMap()[e]?"keydown":"keypress"),"keypress"===t&&n.length&&(t="keydown"),t}},6214:e=>{"use strict";e.exports=function(){return this.callbacks={},this.directMap={},this}},7309:e=>{"use strict";e.exports=function(){var e=this;clearTimeout(e.resetTimer),e.resetTimer=setTimeout((function(){e.resetSequences()}),1e3)}},3346:e=>{"use strict";e.exports=function(e){var n=this;e=e||{};var t,r=!1;for(t in n.sequenceLevels)e[t]?r=!0:n.sequenceLevels[t]=0;r||(n.nextExpectedAction=!1)}},3450:e=>{"use strict";e.exports=function(e,n){if((" "+n.className+" ").indexOf(" combokeys ")>-1)return!1;var t=n.tagName.toLowerCase();return"input"===t||"select"===t||"textarea"===t||n.isContentEditable}},9855:e=>{"use strict";e.exports=function(e,n){return this.directMap[e+":"+n]&&this.directMap[e+":"+n]({},e),this}},9208:e=>{"use strict";e.exports=function(e,n){return this.bind(e,(function(){}),n)}},1822:e=>{"use strict";e.exports=function(){this.instances.forEach((function(e){e.reset()}))}},6770:(e,n,t)=>{"use strict";e.exports=function(e){var n,r;if(n=t(4766),r=t(5295),"keypress"===e.type){var o=String.fromCharCode(e.which);return e.shiftKey||(o=o.toLowerCase()),o}return void 0!==n[e.which]?n[e.which]:void 0!==r[e.which]?r[e.which]:String.fromCharCode(e.which).toLowerCase()}},4610:e=>{"use strict";e.exports=function(e){var n=[];return e.shiftKey&&n.push("shift"),e.altKey&&n.push("alt"),e.ctrlKey&&n.push("ctrl"),e.metaKey&&n.push("meta"),n}},8581:e=>{"use strict";e.exports=function(e){return"shift"===e||"ctrl"===e||"alt"===e||"meta"===e}},4520:e=>{"use strict";e.exports=function(e){return"+"===e?["+"]:e.split("+")}},1350:e=>{"use strict";e.exports=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1}},5355:e=>{"use strict";e.exports={"~":"`","!":"1","@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=",":":";",'"':"'","<":",",">":".","?":"/","|":"\\"}},7549:e=>{"use strict";e.exports={option:"alt",command:"meta",return:"enter",escape:"esc",mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"meta":"ctrl"}},5295:e=>{"use strict";e.exports={106:"*",107:"plus",109:"minus",110:".",111:"/",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"}},4766:e=>{"use strict";e.exports={8:"backspace",9:"tab",13:"enter",16:"shift",17:"ctrl",18:"alt",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"ins",46:"del",91:"meta",93:"meta",173:"minus",187:"plus",189:"minus",224:"meta"};for(var n=1;n<20;++n)e.exports[111+n]="f"+n;for(n=0;n<=9;++n)e.exports[n+96]=n},6103:e=>{"use strict";e.exports=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}},3362:()=>{var e;!function(){var e=Math.PI,n=2*e,t=e/180,r=document.createElement("div");document.head.appendChild(r);var o=self.ConicGradient=function(e){o.all.push(this),e=e||{},this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.repeating=!!e.repeating,this.size=e.size||Math.max(innerWidth,innerHeight),this.canvas.width=this.canvas.height=this.size;var n=e.stops;this.stops=(n||"").split(/\s*,(?![^(]*\))\s*/),this.from=0;for(var t=0;t0){var i=this.stops[0].clone();i.pos=0,this.stops.unshift(i)}if(void 0===this.stops[this.stops.length-1].pos)this.stops[this.stops.length-1].pos=1;else if(!this.repeating&&this.stops[this.stops.length-1].pos<1){var a=this.stops[this.stops.length-1].clone();a.pos=1,this.stops.push(a)}if(this.stops.forEach((function(e,n){if(void 0===e.pos){for(var t=n+1;this[t];t++)if(void 0!==this[t].pos){e.pos=this[n-1].pos+(this[t].pos-this[n-1].pos)/(t-n+1);break}}else n>0&&(e.pos=Math.max(e.pos,this[n-1].pos))}),this.stops),this.repeating){var l=(n=this.stops.slice())[n.length-1].pos-n[0].pos;for(t=0;this.stops[this.stops.length-1].pos<1&&t<1e4;t++)for(var c=0;c'},get png(){return this.canvas.toDataURL()},get r(){return Math.sqrt(2)*this.size/2},paint:function(){var e,n,r,o=this.context,i=this.r,a=this.size/2,l=0,c=this.stops[l];o.translate(this.size/2,this.size/2),o.rotate(-90*t),o.rotate(this.from*t),o.translate(-this.size/2,-this.size/2);for(var u=0;u<360;){if(u/360+1e-5>=c.pos){do{e=c,l++,c=this.stops[l]}while(c&&c!=e&&c.pos===e.pos);if(!c)break;var s=e.color+""==c.color+""&&e!=c;n=e.color.map((function(e,n){return c.color[n]-e}))}r=(u/360-e.pos)/(c.pos-e.pos);var f=s?c.color:n.map((function(n,t){var o=n*r+e.color[t];return t<3?255&o:o}));if(o.fillStyle="rgba("+f.join(",")+")",o.beginPath(),o.moveTo(a,a),s)var p=360*(c.pos-e.pos);else p=.5;var d=u*t,h=(d=Math.min(360*t,d))+p*t;h=Math.min(360*t,h+.02),o.arc(a,a,i,d,h),o.closePath(),o.fill(),u+=p}}},o.ColorStop=function(e,t){if(this.gradient=e,t){var r=t.match(/^(.+?)(?:\s+([\d.]+)(%|deg|turn|grad|rad)?)?(?:\s+([\d.]+)(%|deg|turn|grad|rad)?)?\s*$/);if(this.color=o.ColorStop.colorToRGBA(r[1]),r[2]){var i=r[3];"%"==i||"0"===r[2]&&!i?this.pos=r[2]/100:"turn"==i?this.pos=+r[2]:"deg"==i?this.pos=r[2]/360:"grad"==i?this.pos=r[2]/400:"rad"==i&&(this.pos=r[2]/n)}r[4]&&(this.next=new o.ColorStop(e,r[1]+" "+r[4]+r[5]))}},o.ColorStop.prototype={clone:function(){var e=new o.ColorStop(this.gradient);return e.color=this.color,e.pos=this.pos,e},toString:function(){return"rgba("+this.color.join(", ")+") "+100*this.pos+"%"}},o.ColorStop.colorToRGBA=function(e){if(!Array.isArray(e)&&-1==e.indexOf("from")){r.style.color=e;var n=getComputedStyle(r).color.match(/rgba?\(([\d.]+), ([\d.]+), ([\d.]+)(?:, ([\d.]+))?\)/);return n&&(n.shift(),(n=n.map((function(e){return+e})))[3]=isNaN(n[3])?1:n[3]),n||[0,0,0,0]}return e}}(),self.StyleFix&&((e=document.createElement("p")).style.backgroundImage="conic-gradient(white, black)",e.style.backgroundImage=PrefixFree.prefix+"conic-gradient(white, black)",e.style.backgroundImage||StyleFix.register((function(e,n){return e.indexOf("conic-gradient")>-1&&(e=e.replace(/(?:repeating-)?conic-gradient\(\s*((?:\([^()]+\)|[^;()}])+?)\)/g,(function(e,n){return new ConicGradient({stops:n,repeating:e.indexOf("repeating-")>-1})}))),e})))},9662:(e,n,t)=>{var r=t(7854),o=t(614),i=t(6330),a=r.TypeError;e.exports=function(e){if(o(e))return e;throw a(i(e)+" is not a function")}},9483:(e,n,t)=>{var r=t(7854),o=t(4411),i=t(6330),a=r.TypeError;e.exports=function(e){if(o(e))return e;throw a(i(e)+" is not a constructor")}},6077:(e,n,t)=>{var r=t(7854),o=t(614),i=r.String,a=r.TypeError;e.exports=function(e){if("object"==typeof e||o(e))return e;throw a("Can't set "+i(e)+" as a prototype")}},1223:(e,n,t)=>{var r=t(5112),o=t(30),i=t(3070),a=r("unscopables"),l=Array.prototype;null==l[a]&&i.f(l,a,{configurable:!0,value:o(null)}),e.exports=function(e){l[a][e]=!0}},1530:(e,n,t)=>{"use strict";var r=t(8710).charAt;e.exports=function(e,n,t){return n+(t?r(e,n).length:1)}},5787:(e,n,t)=>{var r=t(7854),o=t(7976),i=r.TypeError;e.exports=function(e,n){if(o(n,e))return e;throw i("Incorrect invocation")}},9670:(e,n,t)=>{var r=t(7854),o=t(111),i=r.String,a=r.TypeError;e.exports=function(e){if(o(e))return e;throw a(i(e)+" is not an object")}},7556:(e,n,t)=>{var r=t(7293);e.exports=r((function(){if("function"==typeof ArrayBuffer){var e=new ArrayBuffer(8);Object.isExtensible(e)&&Object.defineProperty(e,"a",{value:8})}}))},8533:(e,n,t)=>{"use strict";var r=t(2092).forEach,o=t(9341)("forEach");e.exports=o?[].forEach:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}},8457:(e,n,t)=>{"use strict";var r=t(7854),o=t(9974),i=t(6916),a=t(7908),l=t(3411),c=t(7659),u=t(4411),s=t(6244),f=t(6135),p=t(8554),d=t(1246),h=r.Array;e.exports=function(e){var n=a(e),t=u(this),r=arguments.length,g=r>1?arguments[1]:void 0,v=void 0!==g;v&&(g=o(g,r>2?arguments[2]:void 0));var A,b,m,y,E,_,C=d(n),w=0;if(!C||this==h&&c(C))for(A=s(n),b=t?new this(A):h(A);A>w;w++)_=v?g(n[w],w):n[w],f(b,w,_);else for(E=(y=p(n,C)).next,b=t?new this:[];!(m=i(E,y)).done;w++)_=v?l(y,g,[m.value,w],!0):m.value,f(b,w,_);return b.length=w,b}},1318:(e,n,t)=>{var r=t(5656),o=t(1400),i=t(6244),a=function(e){return function(n,t,a){var l,c=r(n),u=i(c),s=o(a,u);if(e&&t!=t){for(;u>s;)if((l=c[s++])!=l)return!0}else for(;u>s;s++)if((e||s in c)&&c[s]===t)return e||s||0;return!e&&-1}};e.exports={includes:a(!0),indexOf:a(!1)}},2092:(e,n,t)=>{var r=t(9974),o=t(1702),i=t(8361),a=t(7908),l=t(6244),c=t(5417),u=o([].push),s=function(e){var n=1==e,t=2==e,o=3==e,s=4==e,f=6==e,p=7==e,d=5==e||f;return function(h,g,v,A){for(var b,m,y=a(h),E=i(y),_=r(g,v),C=l(E),w=0,x=A||c,k=n?x(h,C):t||p?x(h,0):void 0;C>w;w++)if((d||w in E)&&(m=_(b=E[w],w,y),e))if(n)k[w]=m;else if(m)switch(e){case 3:return!0;case 5:return b;case 6:return w;case 2:u(k,b)}else switch(e){case 4:return!1;case 7:u(k,b)}return f?-1:o||s?s:k}};e.exports={forEach:s(0),map:s(1),filter:s(2),some:s(3),every:s(4),find:s(5),findIndex:s(6),filterReject:s(7)}},1194:(e,n,t)=>{var r=t(7293),o=t(5112),i=t(7392),a=o("species");e.exports=function(e){return i>=51||!r((function(){var n=[];return(n.constructor={})[a]=function(){return{foo:1}},1!==n[e](Boolean).foo}))}},9341:(e,n,t)=>{"use strict";var r=t(7293);e.exports=function(e,n){var t=[][e];return!!t&&r((function(){t.call(null,n||function(){throw 1},1)}))}},3671:(e,n,t)=>{var r=t(7854),o=t(9662),i=t(7908),a=t(8361),l=t(6244),c=r.TypeError,u=function(e){return function(n,t,r,u){o(t);var s=i(n),f=a(s),p=l(s),d=e?p-1:0,h=e?-1:1;if(r<2)for(;;){if(d in f){u=f[d],d+=h;break}if(d+=h,e?d<0:p<=d)throw c("Reduce of empty array with no initial value")}for(;e?d>=0:p>d;d+=h)d in f&&(u=t(u,f[d],d,s));return u}};e.exports={left:u(!1),right:u(!0)}},206:(e,n,t)=>{var r=t(1702);e.exports=r([].slice)},4362:(e,n,t)=>{var r=t(206),o=Math.floor,i=function(e,n){var t=e.length,c=o(t/2);return t<8?a(e,n):l(e,i(r(e,0,c),n),i(r(e,c),n),n)},a=function(e,n){for(var t,r,o=e.length,i=1;i0;)e[r]=e[--r];r!==i++&&(e[r]=t)}return e},l=function(e,n,t,r){for(var o=n.length,i=t.length,a=0,l=0;a{var r=t(7854),o=t(3157),i=t(4411),a=t(111),l=t(5112)("species"),c=r.Array;e.exports=function(e){var n;return o(e)&&(n=e.constructor,(i(n)&&(n===c||o(n.prototype))||a(n)&&null===(n=n[l]))&&(n=void 0)),void 0===n?c:n}},5417:(e,n,t)=>{var r=t(7475);e.exports=function(e,n){return new(r(e))(0===n?0:n)}},3411:(e,n,t)=>{var r=t(9670),o=t(9212);e.exports=function(e,n,t,i){try{return i?n(r(t)[0],t[1]):n(t)}catch(n){o(e,"throw",n)}}},7072:(e,n,t)=>{var r=t(5112)("iterator"),o=!1;try{var i=0,a={next:function(){return{done:!!i++}},return:function(){o=!0}};a[r]=function(){return this},Array.from(a,(function(){throw 2}))}catch(e){}e.exports=function(e,n){if(!n&&!o)return!1;var t=!1;try{var i={};i[r]=function(){return{next:function(){return{done:t=!0}}}},e(i)}catch(e){}return t}},4326:(e,n,t)=>{var r=t(1702),o=r({}.toString),i=r("".slice);e.exports=function(e){return i(o(e),8,-1)}},648:(e,n,t)=>{var r=t(7854),o=t(1694),i=t(614),a=t(4326),l=t(5112)("toStringTag"),c=r.Object,u="Arguments"==a(function(){return arguments}());e.exports=o?a:function(e){var n,t,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(t=function(e,n){try{return e[n]}catch(e){}}(n=c(e),l))?t:u?a(n):"Object"==(r=a(n))&&i(n.callee)?"Arguments":r}},5631:(e,n,t)=>{"use strict";var r=t(3070).f,o=t(30),i=t(2248),a=t(9974),l=t(5787),c=t(408),u=t(654),s=t(6340),f=t(9781),p=t(2423).fastKey,d=t(9909),h=d.set,g=d.getterFor;e.exports={getConstructor:function(e,n,t,u){var s=e((function(e,r){l(e,d),h(e,{type:n,index:o(null),first:void 0,last:void 0,size:0}),f||(e.size=0),null!=r&&c(r,e[u],{that:e,AS_ENTRIES:t})})),d=s.prototype,v=g(n),A=function(e,n,t){var r,o,i=v(e),a=b(e,n);return a?a.value=t:(i.last=a={index:o=p(n,!0),key:n,value:t,previous:r=i.last,next:void 0,removed:!1},i.first||(i.first=a),r&&(r.next=a),f?i.size++:e.size++,"F"!==o&&(i.index[o]=a)),e},b=function(e,n){var t,r=v(e),o=p(n);if("F"!==o)return r.index[o];for(t=r.first;t;t=t.next)if(t.key==n)return t};return i(d,{clear:function(){for(var e=v(this),n=e.index,t=e.first;t;)t.removed=!0,t.previous&&(t.previous=t.previous.next=void 0),delete n[t.index],t=t.next;e.first=e.last=void 0,f?e.size=0:this.size=0},delete:function(e){var n=this,t=v(n),r=b(n,e);if(r){var o=r.next,i=r.previous;delete t.index[r.index],r.removed=!0,i&&(i.next=o),o&&(o.previous=i),t.first==r&&(t.first=o),t.last==r&&(t.last=i),f?t.size--:n.size--}return!!r},forEach:function(e){for(var n,t=v(this),r=a(e,arguments.length>1?arguments[1]:void 0);n=n?n.next:t.first;)for(r(n.value,n.key,this);n&&n.removed;)n=n.previous},has:function(e){return!!b(this,e)}}),i(d,t?{get:function(e){var n=b(this,e);return n&&n.value},set:function(e,n){return A(this,0===e?0:e,n)}}:{add:function(e){return A(this,e=0===e?0:e,e)}}),f&&r(d,"size",{get:function(){return v(this).size}}),s},setStrong:function(e,n,t){var r=n+" Iterator",o=g(n),i=g(r);u(e,n,(function(e,n){h(this,{type:r,target:e,state:o(e),kind:n,last:void 0})}),(function(){for(var e=i(this),n=e.kind,t=e.last;t&&t.removed;)t=t.previous;return e.target&&(e.last=t=t?t.next:e.state.first)?"keys"==n?{value:t.key,done:!1}:"values"==n?{value:t.value,done:!1}:{value:[t.key,t.value],done:!1}:(e.target=void 0,{value:void 0,done:!0})}),t?"entries":"values",!t,!0),s(n)}}},9320:(e,n,t)=>{"use strict";var r=t(1702),o=t(2248),i=t(2423).getWeakData,a=t(9670),l=t(111),c=t(5787),u=t(408),s=t(2092),f=t(2597),p=t(9909),d=p.set,h=p.getterFor,g=s.find,v=s.findIndex,A=r([].splice),b=0,m=function(e){return e.frozen||(e.frozen=new y)},y=function(){this.entries=[]},E=function(e,n){return g(e.entries,(function(e){return e[0]===n}))};y.prototype={get:function(e){var n=E(this,e);if(n)return n[1]},has:function(e){return!!E(this,e)},set:function(e,n){var t=E(this,e);t?t[1]=n:this.entries.push([e,n])},delete:function(e){var n=v(this.entries,(function(n){return n[0]===e}));return~n&&A(this.entries,n,1),!!~n}},e.exports={getConstructor:function(e,n,t,r){var s=e((function(e,o){c(e,p),d(e,{type:n,id:b++,frozen:void 0}),null!=o&&u(o,e[r],{that:e,AS_ENTRIES:t})})),p=s.prototype,g=h(n),v=function(e,n,t){var r=g(e),o=i(a(n),!0);return!0===o?m(r).set(n,t):o[r.id]=t,e};return o(p,{delete:function(e){var n=g(this);if(!l(e))return!1;var t=i(e);return!0===t?m(n).delete(e):t&&f(t,n.id)&&delete t[n.id]},has:function(e){var n=g(this);if(!l(e))return!1;var t=i(e);return!0===t?m(n).has(e):t&&f(t,n.id)}}),o(p,t?{get:function(e){var n=g(this);if(l(e)){var t=i(e);return!0===t?m(n).get(e):t?t[n.id]:void 0}},set:function(e,n){return v(this,e,n)}}:{add:function(e){return v(this,e,!0)}}),s}}},7710:(e,n,t)=>{"use strict";var r=t(2109),o=t(7854),i=t(1702),a=t(4705),l=t(1320),c=t(2423),u=t(408),s=t(5787),f=t(614),p=t(111),d=t(7293),h=t(7072),g=t(8003),v=t(9587);e.exports=function(e,n,t){var A=-1!==e.indexOf("Map"),b=-1!==e.indexOf("Weak"),m=A?"set":"add",y=o[e],E=y&&y.prototype,_=y,C={},w=function(e){var n=i(E[e]);l(E,e,"add"==e?function(e){return n(this,0===e?0:e),this}:"delete"==e?function(e){return!(b&&!p(e))&&n(this,0===e?0:e)}:"get"==e?function(e){return b&&!p(e)?void 0:n(this,0===e?0:e)}:"has"==e?function(e){return!(b&&!p(e))&&n(this,0===e?0:e)}:function(e,t){return n(this,0===e?0:e,t),this})};if(a(e,!f(y)||!(b||E.forEach&&!d((function(){(new y).entries().next()})))))_=t.getConstructor(n,e,A,m),c.enable();else if(a(e,!0)){var x=new _,k=x[m](b?{}:-0,1)!=x,S=d((function(){x.has(1)})),O=h((function(e){new y(e)})),B=!b&&d((function(){for(var e=new y,n=5;n--;)e[m](n,n);return!e.has(-0)}));O||((_=n((function(e,n){s(e,E);var t=v(new y,e,_);return null!=n&&u(n,t[m],{that:t,AS_ENTRIES:A}),t}))).prototype=E,E.constructor=_),(S||B)&&(w("delete"),w("has"),A&&w("get")),(B||k)&&w(m),b&&E.clear&&delete E.clear}return C[e]=_,r({global:!0,forced:_!=y},C),g(_,e),b||t.setStrong(_,e,A),_}},9920:(e,n,t)=>{var r=t(2597),o=t(3887),i=t(1236),a=t(3070);e.exports=function(e,n){for(var t=o(n),l=a.f,c=i.f,u=0;u{var r=t(5112)("match");e.exports=function(e){var n=/./;try{"/./"[e](n)}catch(t){try{return n[r]=!1,"/./"[e](n)}catch(e){}}return!1}},8544:(e,n,t)=>{var r=t(7293);e.exports=!r((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},4230:(e,n,t)=>{var r=t(1702),o=t(4488),i=t(1340),a=/"/g,l=r("".replace);e.exports=function(e,n,t,r){var c=i(o(e)),u="<"+n;return""!==t&&(u+=" "+t+'="'+l(i(r),a,""")+'"'),u+">"+c+""}},4994:(e,n,t)=>{"use strict";var r=t(3383).IteratorPrototype,o=t(30),i=t(9114),a=t(8003),l=t(7497),c=function(){return this};e.exports=function(e,n,t){var u=n+" Iterator";return e.prototype=o(r,{next:i(1,t)}),a(e,u,!1,!0),l[u]=c,e}},8880:(e,n,t)=>{var r=t(9781),o=t(3070),i=t(9114);e.exports=r?function(e,n,t){return o.f(e,n,i(1,t))}:function(e,n,t){return e[n]=t,e}},9114:e=>{e.exports=function(e,n){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:n}}},6135:(e,n,t)=>{"use strict";var r=t(4948),o=t(3070),i=t(9114);e.exports=function(e,n,t){var a=r(n);a in e?o.f(e,a,i(0,t)):e[a]=t}},8709:(e,n,t)=>{"use strict";var r=t(7854),o=t(9670),i=t(2140),a=r.TypeError;e.exports=function(e){if(o(this),"string"===e||"default"===e)e="string";else if("number"!==e)throw a("Incorrect hint");return i(this,e)}},654:(e,n,t)=>{"use strict";var r=t(2109),o=t(6916),i=t(1913),a=t(6530),l=t(614),c=t(4994),u=t(9518),s=t(7674),f=t(8003),p=t(8880),d=t(1320),h=t(5112),g=t(7497),v=t(3383),A=a.PROPER,b=a.CONFIGURABLE,m=v.IteratorPrototype,y=v.BUGGY_SAFARI_ITERATORS,E=h("iterator"),_="keys",C="values",w="entries",x=function(){return this};e.exports=function(e,n,t,a,h,v,k){c(t,n,a);var S,O,B,I=function(e){if(e===h&&R)return R;if(!y&&e in j)return j[e];switch(e){case _:case C:case w:return function(){return new t(this,e)}}return function(){return new t(this)}},T=n+" Iterator",P=!1,j=e.prototype,z=j[E]||j["@@iterator"]||h&&j[h],R=!y&&z||I(h),M="Array"==n&&j.entries||z;if(M&&(S=u(M.call(new e)))!==Object.prototype&&S.next&&(i||u(S)===m||(s?s(S,m):l(S[E])||d(S,E,x)),f(S,T,!0,!0),i&&(g[T]=x)),A&&h==C&&z&&z.name!==C&&(!i&&b?p(j,"name",C):(P=!0,R=function(){return o(z,this)})),h)if(O={values:I(C),keys:v?R:I(_),entries:I(w)},k)for(B in O)(y||P||!(B in j))&&d(j,B,O[B]);else r({target:n,proto:!0,forced:y||P},O);return i&&!k||j[E]===R||d(j,E,R,{name:h}),g[n]=R,O}},7235:(e,n,t)=>{var r=t(857),o=t(2597),i=t(6061),a=t(3070).f;e.exports=function(e){var n=r.Symbol||(r.Symbol={});o(n,e)||a(n,e,{value:i.f(e)})}},9781:(e,n,t)=>{var r=t(7293);e.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},317:(e,n,t)=>{var r=t(7854),o=t(111),i=r.document,a=o(i)&&o(i.createElement);e.exports=function(e){return a?i.createElement(e):{}}},8324:e=>{e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},8509:(e,n,t)=>{var r=t(317)("span").classList,o=r&&r.constructor&&r.constructor.prototype;e.exports=o===Object.prototype?void 0:o},8886:(e,n,t)=>{var r=t(8113).match(/firefox\/(\d+)/i);e.exports=!!r&&+r[1]},256:(e,n,t)=>{var r=t(8113);e.exports=/MSIE|Trident/.test(r)},5268:(e,n,t)=>{var r=t(4326),o=t(7854);e.exports="process"==r(o.process)},8113:(e,n,t)=>{var r=t(5005);e.exports=r("navigator","userAgent")||""},7392:(e,n,t)=>{var r,o,i=t(7854),a=t(8113),l=i.process,c=i.Deno,u=l&&l.versions||c&&c.version,s=u&&u.v8;s&&(o=(r=s.split("."))[0]>0&&r[0]<4?1:+(r[0]+r[1])),!o&&a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(o=+r[1]),e.exports=o},8008:(e,n,t)=>{var r=t(8113).match(/AppleWebKit\/(\d+)\./);e.exports=!!r&&+r[1]},748:e=>{e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},2109:(e,n,t)=>{var r=t(7854),o=t(1236).f,i=t(8880),a=t(1320),l=t(3505),c=t(9920),u=t(4705);e.exports=function(e,n){var t,s,f,p,d,h=e.target,g=e.global,v=e.stat;if(t=g?r:v?r[h]||l(h,{}):(r[h]||{}).prototype)for(s in n){if(p=n[s],f=e.noTargetGet?(d=o(t,s))&&d.value:t[s],!u(g?s:h+(v?".":"#")+s,e.forced)&&void 0!==f){if(typeof p==typeof f)continue;c(p,f)}(e.sham||f&&f.sham)&&i(p,"sham",!0),a(t,s,p,e)}}},7293:e=>{e.exports=function(e){try{return!!e()}catch(e){return!0}}},7007:(e,n,t)=>{"use strict";t(4916);var r=t(1702),o=t(1320),i=t(2261),a=t(7293),l=t(5112),c=t(8880),u=l("species"),s=RegExp.prototype;e.exports=function(e,n,t,f){var p=l(e),d=!a((function(){var n={};return n[p]=function(){return 7},7!=""[e](n)})),h=d&&!a((function(){var n=!1,t=/a/;return"split"===e&&((t={}).constructor={},t.constructor[u]=function(){return t},t.flags="",t[p]=/./[p]),t.exec=function(){return n=!0,null},t[p](""),!n}));if(!d||!h||t){var g=r(/./[p]),v=n(p,""[e],(function(e,n,t,o,a){var l=r(e),c=n.exec;return c===i||c===s.exec?d&&!a?{done:!0,value:g(n,t,o)}:{done:!0,value:l(t,n,o)}:{done:!1}}));o(String.prototype,e,v[0]),o(s,p,v[1])}f&&c(s[p],"sham",!0)}},6677:(e,n,t)=>{var r=t(7293);e.exports=!r((function(){return Object.isExtensible(Object.preventExtensions({}))}))},2104:e=>{var n=Function.prototype,t=n.apply,r=n.bind,o=n.call;e.exports="object"==typeof Reflect&&Reflect.apply||(r?o.bind(t):function(){return o.apply(t,arguments)})},9974:(e,n,t)=>{var r=t(1702),o=t(9662),i=r(r.bind);e.exports=function(e,n){return o(e),void 0===n?e:i?i(e,n):function(){return e.apply(n,arguments)}}},7065:(e,n,t)=>{"use strict";var r=t(7854),o=t(1702),i=t(9662),a=t(111),l=t(2597),c=t(206),u=r.Function,s=o([].concat),f=o([].join),p={},d=function(e,n,t){if(!l(p,n)){for(var r=[],o=0;o{var n=Function.prototype.call;e.exports=n.bind?n.bind(n):function(){return n.apply(n,arguments)}},6530:(e,n,t)=>{var r=t(9781),o=t(2597),i=Function.prototype,a=r&&Object.getOwnPropertyDescriptor,l=o(i,"name"),c=l&&"something"===function(){}.name,u=l&&(!r||r&&a(i,"name").configurable);e.exports={EXISTS:l,PROPER:c,CONFIGURABLE:u}},1702:e=>{var n=Function.prototype,t=n.bind,r=n.call,o=t&&t.bind(r);e.exports=t?function(e){return e&&o(r,e)}:function(e){return e&&function(){return r.apply(e,arguments)}}},5005:(e,n,t)=>{var r=t(7854),o=t(614),i=function(e){return o(e)?e:void 0};e.exports=function(e,n){return arguments.length<2?i(r[e]):r[e]&&r[e][n]}},1246:(e,n,t)=>{var r=t(648),o=t(8173),i=t(7497),a=t(5112)("iterator");e.exports=function(e){if(null!=e)return o(e,a)||o(e,"@@iterator")||i[r(e)]}},8554:(e,n,t)=>{var r=t(7854),o=t(6916),i=t(9662),a=t(9670),l=t(6330),c=t(1246),u=r.TypeError;e.exports=function(e,n){var t=arguments.length<2?c(e):n;if(i(t))return a(o(t,e));throw u(l(e)+" is not iterable")}},8173:(e,n,t)=>{var r=t(9662);e.exports=function(e,n){var t=e[n];return null==t?void 0:r(t)}},647:(e,n,t)=>{var r=t(1702),o=t(7908),i=Math.floor,a=r("".charAt),l=r("".replace),c=r("".slice),u=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,s=/\$([$&'`]|\d{1,2})/g;e.exports=function(e,n,t,r,f,p){var d=t+e.length,h=r.length,g=s;return void 0!==f&&(f=o(f),g=u),l(p,g,(function(o,l){var u;switch(a(l,0)){case"$":return"$";case"&":return e;case"`":return c(n,0,t);case"'":return c(n,d);case"<":u=f[c(l,1,-1)];break;default:var s=+l;if(0===s)return o;if(s>h){var p=i(s/10);return 0===p?o:p<=h?void 0===r[p-1]?a(l,1):r[p-1]+a(l,1):o}u=r[s-1]}return void 0===u?"":u}))}},7854:(e,n,t)=>{var r=function(e){return e&&e.Math==Math&&e};e.exports=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof t.g&&t.g)||function(){return this}()||Function("return this")()},2597:(e,n,t)=>{var r=t(1702),o=t(7908),i=r({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,n){return i(o(e),n)}},3501:e=>{e.exports={}},490:(e,n,t)=>{var r=t(5005);e.exports=r("document","documentElement")},4664:(e,n,t)=>{var r=t(9781),o=t(7293),i=t(317);e.exports=!r&&!o((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},8361:(e,n,t)=>{var r=t(7854),o=t(1702),i=t(7293),a=t(4326),l=r.Object,c=o("".split);e.exports=i((function(){return!l("z").propertyIsEnumerable(0)}))?function(e){return"String"==a(e)?c(e,""):l(e)}:l},9587:(e,n,t)=>{var r=t(614),o=t(111),i=t(7674);e.exports=function(e,n,t){var a,l;return i&&r(a=n.constructor)&&a!==t&&o(l=a.prototype)&&l!==t.prototype&&i(e,l),e}},2788:(e,n,t)=>{var r=t(1702),o=t(614),i=t(5465),a=r(Function.toString);o(i.inspectSource)||(i.inspectSource=function(e){return a(e)}),e.exports=i.inspectSource},2423:(e,n,t)=>{var r=t(2109),o=t(1702),i=t(3501),a=t(111),l=t(2597),c=t(3070).f,u=t(8006),s=t(1156),f=t(2050),p=t(9711),d=t(6677),h=!1,g=p("meta"),v=0,A=function(e){c(e,g,{value:{objectID:"O"+v++,weakData:{}}})},b=e.exports={enable:function(){b.enable=function(){},h=!0;var e=u.f,n=o([].splice),t={};t[g]=1,e(t).length&&(u.f=function(t){for(var r=e(t),o=0,i=r.length;o{var r,o,i,a=t(8536),l=t(7854),c=t(1702),u=t(111),s=t(8880),f=t(2597),p=t(5465),d=t(6200),h=t(3501),g="Object already initialized",v=l.TypeError,A=l.WeakMap;if(a||p.state){var b=p.state||(p.state=new A),m=c(b.get),y=c(b.has),E=c(b.set);r=function(e,n){if(y(b,e))throw new v(g);return n.facade=e,E(b,e,n),n},o=function(e){return m(b,e)||{}},i=function(e){return y(b,e)}}else{var _=d("state");h[_]=!0,r=function(e,n){if(f(e,_))throw new v(g);return n.facade=e,s(e,_,n),n},o=function(e){return f(e,_)?e[_]:{}},i=function(e){return f(e,_)}}e.exports={set:r,get:o,has:i,enforce:function(e){return i(e)?o(e):r(e,{})},getterFor:function(e){return function(n){var t;if(!u(n)||(t=o(n)).type!==e)throw v("Incompatible receiver, "+e+" required");return t}}}},7659:(e,n,t)=>{var r=t(5112),o=t(7497),i=r("iterator"),a=Array.prototype;e.exports=function(e){return void 0!==e&&(o.Array===e||a[i]===e)}},3157:(e,n,t)=>{var r=t(4326);e.exports=Array.isArray||function(e){return"Array"==r(e)}},614:e=>{e.exports=function(e){return"function"==typeof e}},4411:(e,n,t)=>{var r=t(1702),o=t(7293),i=t(614),a=t(648),l=t(5005),c=t(2788),u=function(){},s=[],f=l("Reflect","construct"),p=/^\s*(?:class|function)\b/,d=r(p.exec),h=!p.exec(u),g=function(e){if(!i(e))return!1;try{return f(u,s,e),!0}catch(e){return!1}};e.exports=!f||o((function(){var e;return g(g.call)||!g(Object)||!g((function(){e=!0}))||e}))?function(e){if(!i(e))return!1;switch(a(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}return h||!!d(p,c(e))}:g},4705:(e,n,t)=>{var r=t(7293),o=t(614),i=/#|\.prototype\./,a=function(e,n){var t=c[l(e)];return t==s||t!=u&&(o(n)?r(n):!!n)},l=a.normalize=function(e){return String(e).replace(i,".").toLowerCase()},c=a.data={},u=a.NATIVE="N",s=a.POLYFILL="P";e.exports=a},111:(e,n,t)=>{var r=t(614);e.exports=function(e){return"object"==typeof e?null!==e:r(e)}},1913:e=>{e.exports=!1},7850:(e,n,t)=>{var r=t(111),o=t(4326),i=t(5112)("match");e.exports=function(e){var n;return r(e)&&(void 0!==(n=e[i])?!!n:"RegExp"==o(e))}},2190:(e,n,t)=>{var r=t(7854),o=t(5005),i=t(614),a=t(7976),l=t(3307),c=r.Object;e.exports=l?function(e){return"symbol"==typeof e}:function(e){var n=o("Symbol");return i(n)&&a(n.prototype,c(e))}},408:(e,n,t)=>{var r=t(7854),o=t(9974),i=t(6916),a=t(9670),l=t(6330),c=t(7659),u=t(6244),s=t(7976),f=t(8554),p=t(1246),d=t(9212),h=r.TypeError,g=function(e,n){this.stopped=e,this.result=n},v=g.prototype;e.exports=function(e,n,t){var r,A,b,m,y,E,_,C=t&&t.that,w=!(!t||!t.AS_ENTRIES),x=!(!t||!t.IS_ITERATOR),k=!(!t||!t.INTERRUPTED),S=o(n,C),O=function(e){return r&&d(r,"normal",e),new g(!0,e)},B=function(e){return w?(a(e),k?S(e[0],e[1],O):S(e[0],e[1])):k?S(e,O):S(e)};if(x)r=e;else{if(!(A=p(e)))throw h(l(e)+" is not iterable");if(c(A)){for(b=0,m=u(e);m>b;b++)if((y=B(e[b]))&&s(v,y))return y;return new g(!1)}r=f(e,A)}for(E=r.next;!(_=i(E,r)).done;){try{y=B(_.value)}catch(e){d(r,"throw",e)}if("object"==typeof y&&y&&s(v,y))return y}return new g(!1)}},9212:(e,n,t)=>{var r=t(6916),o=t(9670),i=t(8173);e.exports=function(e,n,t){var a,l;o(e);try{if(!(a=i(e,"return"))){if("throw"===n)throw t;return t}a=r(a,e)}catch(e){l=!0,a=e}if("throw"===n)throw t;if(l)throw a;return o(a),t}},3383:(e,n,t)=>{"use strict";var r,o,i,a=t(7293),l=t(614),c=t(30),u=t(9518),s=t(1320),f=t(5112),p=t(1913),d=f("iterator"),h=!1;[].keys&&("next"in(i=[].keys())?(o=u(u(i)))!==Object.prototype&&(r=o):h=!0),null==r||a((function(){var e={};return r[d].call(e)!==e}))?r={}:p&&(r=c(r)),l(r[d])||s(r,d,(function(){return this})),e.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:h}},7497:e=>{e.exports={}},6244:(e,n,t)=>{var r=t(7466);e.exports=function(e){return r(e.length)}},133:(e,n,t)=>{var r=t(7392),o=t(7293);e.exports=!!Object.getOwnPropertySymbols&&!o((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},8536:(e,n,t)=>{var r=t(7854),o=t(614),i=t(2788),a=r.WeakMap;e.exports=o(a)&&/native code/.test(i(a))},3929:(e,n,t)=>{var r=t(7854),o=t(7850),i=r.TypeError;e.exports=function(e){if(o(e))throw i("The method doesn't accept regular expressions");return e}},1574:(e,n,t)=>{"use strict";var r=t(9781),o=t(1702),i=t(6916),a=t(7293),l=t(1956),c=t(5181),u=t(5296),s=t(7908),f=t(8361),p=Object.assign,d=Object.defineProperty,h=o([].concat);e.exports=!p||a((function(){if(r&&1!==p({b:1},p(d({},"a",{enumerable:!0,get:function(){d(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},n={},t=Symbol(),o="abcdefghijklmnopqrst";return e[t]=7,o.split("").forEach((function(e){n[e]=e})),7!=p({},e)[t]||l(p({},n)).join("")!=o}))?function(e,n){for(var t=s(e),o=arguments.length,a=1,p=c.f,d=u.f;o>a;)for(var g,v=f(arguments[a++]),A=p?h(l(v),p(v)):l(v),b=A.length,m=0;b>m;)g=A[m++],r&&!i(d,v,g)||(t[g]=v[g]);return t}:p},30:(e,n,t)=>{var r,o=t(9670),i=t(6048),a=t(748),l=t(3501),c=t(490),u=t(317),s=t(6200),f=s("IE_PROTO"),p=function(){},d=function(e){return" + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

SemverPlugin

+
+
constructor()
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-gradle-plugin/com.javiersc.semver.gradle.plugin/-semver-plugin/apply.html b/api/snapshot/semver-gradle-plugin/com.javiersc.semver.gradle.plugin/-semver-plugin/apply.html new file mode 100644 index 00000000..62f57794 --- /dev/null +++ b/api/snapshot/semver-gradle-plugin/com.javiersc.semver.gradle.plugin/-semver-plugin/apply.html @@ -0,0 +1,76 @@ + + + + + apply + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

apply

+
+
open override fun apply(target: PluginAware)
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-gradle-plugin/com.javiersc.semver.gradle.plugin/-semver-plugin/index.html b/api/snapshot/semver-gradle-plugin/com.javiersc.semver.gradle.plugin/-semver-plugin/index.html new file mode 100644 index 00000000..aa0a281d --- /dev/null +++ b/api/snapshot/semver-gradle-plugin/com.javiersc.semver.gradle.plugin/-semver-plugin/index.html @@ -0,0 +1,119 @@ + + + + + SemverPlugin + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

SemverPlugin

+
class SemverPlugin : Plugin<PluginAware>
+
+
+
+
+
+

Constructors

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
constructor()
+
+
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun apply(target: PluginAware)
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-gradle-plugin/com.javiersc.semver.gradle.plugin/index.html b/api/snapshot/semver-gradle-plugin/com.javiersc.semver.gradle.plugin/index.html new file mode 100644 index 00000000..51fdb246 --- /dev/null +++ b/api/snapshot/semver-gradle-plugin/com.javiersc.semver.gradle.plugin/index.html @@ -0,0 +1,99 @@ + + + + + com.javiersc.semver.gradle.plugin + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Package-level declarations

+
+
+
+
+
+

Types

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
class SemverPlugin : Plugin<PluginAware>
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-gradle-plugin/index.html b/api/snapshot/semver-gradle-plugin/index.html new file mode 100644 index 00000000..208b443b --- /dev/null +++ b/api/snapshot/semver-gradle-plugin/index.html @@ -0,0 +1,96 @@ + + + + + semver-gradle-plugin + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

semver-gradle-plugin

+

Apply the plugin

On projects:

// build.gradle.kts
plugins {
id("com.javiersc.semver") version "$version"
}

On settings:

// settings.gradle.kts
plugins {
id("com.javiersc.semver") version "$version"
}

Check the README.md for more info

+
+

Packages

+
+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-gradle-plugin/navigation.html b/api/snapshot/semver-gradle-plugin/navigation.html new file mode 100644 index 00000000..41baba62 --- /dev/null +++ b/api/snapshot/semver-gradle-plugin/navigation.html @@ -0,0 +1,327 @@ +
+
+ +
+ +
+ +
+
+ CheckMode +
+
+ +
+
+ +
+
+
+ None +
+
+
+
+
+ Companion +
+
+
+
+ Increase +
+
+
+ Major +
+
+
+
+ Minor +
+
+
+
+ Patch +
+
+
+
+
+ Stage +
+
+
+ Companion +
+
+
+
+ +
+
+ isAlpha +
+
+
+
+ isBeta +
+
+
+
+ isDev +
+
+
+ +
+
+
+ isNotBeta +
+
+
+
+ isNotDev +
+
+
+
+ isNotRC +
+
+
+ +
+
+
+ isRC +
+
+
+ +
+
+
+ +
+ +
+ +
+
+ Commit +
+
+
+ +
+
+ Companion +
+
+
+
+ GitData +
+
+
+ Branch +
+
+
+
+ Commit +
+
+
+
+ Tag +
+
+
+
+ +
+
+ Tag +
+
+
+ +
+
+
+ +
+
+ isAlpha +
+
+
+
+ isBeta +
+
+
+
+ isDev +
+
+
+ +
+
+
+ isNotBeta +
+
+
+
+ isNotDev +
+
+
+
+ isNotRC +
+
+
+ +
+
+
+ isRC +
+
+
+ +
+
+ + +
+ +
diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/index.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/index.html new file mode 100644 index 00000000..3d56fad7 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/index.html @@ -0,0 +1,234 @@ + + + + + com.javiersc.semver.project.gradle.plugin.extensions + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Package-level declarations

+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
val Project.isAlpha: Provider<Boolean>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
val Project.isBeta: Provider<Boolean>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
val Project.isDev: Provider<Boolean>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
val Project.isNotAlpha: Provider<Boolean>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
val Project.isNotBeta: Provider<Boolean>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
val Project.isNotDev: Provider<Boolean>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
val Project.isNotRC: Provider<Boolean>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
val Project.isNotSnapshot: Provider<Boolean>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
val Project.isRC: Provider<Boolean>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
val Project.isSnapshot: Provider<Boolean>
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-alpha.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-alpha.html new file mode 100644 index 00000000..94f54282 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-alpha.html @@ -0,0 +1,76 @@ + + + + + isAlpha + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

isAlpha

+
+
val Project.isAlpha: Provider<Boolean>
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-beta.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-beta.html new file mode 100644 index 00000000..42603bef --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-beta.html @@ -0,0 +1,76 @@ + + + + + isBeta + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

isBeta

+
+
val Project.isBeta: Provider<Boolean>
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-dev.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-dev.html new file mode 100644 index 00000000..93121105 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-dev.html @@ -0,0 +1,76 @@ + + + + + isDev + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

isDev

+
+
val Project.isDev: Provider<Boolean>
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-not-alpha.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-not-alpha.html new file mode 100644 index 00000000..dd1732cb --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-not-alpha.html @@ -0,0 +1,76 @@ + + + + + isNotAlpha + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

isNotAlpha

+
+
val Project.isNotAlpha: Provider<Boolean>
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-not-beta.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-not-beta.html new file mode 100644 index 00000000..114a890b --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-not-beta.html @@ -0,0 +1,76 @@ + + + + + isNotBeta + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

isNotBeta

+
+
val Project.isNotBeta: Provider<Boolean>
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-not-dev.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-not-dev.html new file mode 100644 index 00000000..0a25664c --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-not-dev.html @@ -0,0 +1,76 @@ + + + + + isNotDev + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

isNotDev

+
+
val Project.isNotDev: Provider<Boolean>
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-not-r-c.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-not-r-c.html new file mode 100644 index 00000000..51f545e7 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-not-r-c.html @@ -0,0 +1,76 @@ + + + + + isNotRC + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

isNotRC

+
+
val Project.isNotRC: Provider<Boolean>
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-not-snapshot.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-not-snapshot.html new file mode 100644 index 00000000..33a4a81a --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-not-snapshot.html @@ -0,0 +1,76 @@ + + + + + isNotSnapshot + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

isNotSnapshot

+
+
val Project.isNotSnapshot: Provider<Boolean>
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-r-c.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-r-c.html new file mode 100644 index 00000000..75387066 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-r-c.html @@ -0,0 +1,76 @@ + + + + + isRC + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

isRC

+
+
val Project.isRC: Provider<Boolean>
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-snapshot.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-snapshot.html new file mode 100644 index 00000000..34040148 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.extensions/is-snapshot.html @@ -0,0 +1,76 @@ + + + + + isSnapshot + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

isSnapshot

+
+
val Project.isSnapshot: Provider<Boolean>
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.services/-git-build-service/-git-build-service.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.services/-git-build-service/-git-build-service.html new file mode 100644 index 00000000..b8f70614 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.services/-git-build-service/-git-build-service.html @@ -0,0 +1,76 @@ + + + + + GitBuildService + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

GitBuildService

+
+
@Inject
constructor(execOperations: ExecOperations)
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.services/-git-build-service/close.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.services/-git-build-service/close.html new file mode 100644 index 00000000..1d01ea03 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.services/-git-build-service/close.html @@ -0,0 +1,76 @@ + + + + + close + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

close

+
+
open override fun close()
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.services/-git-build-service/index.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.services/-git-build-service/index.html new file mode 100644 index 00000000..9b75db90 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.services/-git-build-service/index.html @@ -0,0 +1,134 @@ + + + + + GitBuildService + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

GitBuildService

+
abstract class GitBuildService @Inject constructor(execOperations: ExecOperations) : BuildService<GitBuildService.Params> , AutoCloseable
+
+
+
+
+
+

Constructors

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
@Inject
constructor(execOperations: ExecOperations)
+
+
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun close()
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@Inject
abstract fun getParameters(): GitBuildService.Params
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.services/index.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.services/index.html new file mode 100644 index 00000000..9d17c1ad --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.services/index.html @@ -0,0 +1,99 @@ + + + + + com.javiersc.semver.project.gradle.plugin.services + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Package-level declarations

+
+
+
+
+
+

Types

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
abstract class GitBuildService @Inject constructor(execOperations: ExecOperations) : BuildService<GitBuildService.Params> , AutoCloseable
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-create-semver-tag-task/-companion/-n-a-m-e.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-create-semver-tag-task/-companion/-n-a-m-e.html new file mode 100644 index 00000000..23753de2 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-create-semver-tag-task/-companion/-n-a-m-e.html @@ -0,0 +1,76 @@ + + + + + NAME + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

NAME

+
+
const val NAME: String
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-create-semver-tag-task/-companion/index.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-create-semver-tag-task/-companion/index.html new file mode 100644 index 00000000..9e0d3bed --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-create-semver-tag-task/-companion/index.html @@ -0,0 +1,100 @@ + + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Companion

+
object Companion
+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
const val NAME: String
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-create-semver-tag-task/-create-semver-tag-task.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-create-semver-tag-task/-create-semver-tag-task.html new file mode 100644 index 00000000..f81a89a8 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-create-semver-tag-task/-create-semver-tag-task.html @@ -0,0 +1,76 @@ + + + + + CreateSemverTagTask + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

CreateSemverTagTask

+
+
constructor()
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-create-semver-tag-task/index.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-create-semver-tag-task/index.html new file mode 100644 index 00000000..139818a8 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-create-semver-tag-task/index.html @@ -0,0 +1,1162 @@ + + + + + CreateSemverTagTask + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

CreateSemverTagTask

+
abstract class CreateSemverTagTask : DefaultTask
+
+
+
+
+
+

Constructors

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
constructor()
+
+
+
+
+
+
+
+

Types

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
object Companion
+
+
+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
@get:Internal
var enabled: Boolean
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+ +
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
val state: TaskStateInternal
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
val timeout: Property<Duration>
+
+
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun acceptServiceReferences(serviceReferences: MutableSet<ServiceReferenceSpec>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun appendParallelSafeAction(action: Action<in Task>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open operator override fun compareTo(other: Task): Int
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun configure(closure: Closure<Any>): Task
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun dependsOn(vararg paths: Any): Task
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun doFirst(action: Closure<Any>): Task
open override fun doFirst(action: Action<in Task>): Task
open override fun doFirst(actionName: String, action: Action<in Task>): Task
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun doLast(action: Closure<Any>): Task
open override fun doLast(action: Action<in Task>): Task
open override fun doLast(actionName: String, action: Action<in Task>): Task
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun doNotTrackState(reasonNotToTrackState: String)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun finalizedBy(vararg paths: Any): Task
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getActions(): MutableList<Action<in Task>>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getAnt(): AntBuilder
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@Internal
open override fun getAsDynamicObject(): DynamicObject
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@Internal
open override fun getConvention(): Convention
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getDependsOn(): MutableSet<Any>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getDescription(): String?
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getDestroyables(): TaskDestroyables
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getDidWork(): Boolean
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getExtensions(): ExtensionContainer
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getFinalizedBy(): TaskDependency
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getGroup(): String?
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getIdentityPath(): Path
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getInputs(): TaskInputsInternal
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@Internal
open override fun getLifecycleDependencies(): TaskDependencyInternal
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getLocalState(): TaskLocalState
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getLogger(): Logger
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getLogging(): LoggingManager
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getMustRunAfter(): TaskDependency
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getName(): String
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getOnlyIf(): Spec<in TaskInternal>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getOutputs(): TaskOutputsInternal
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getPath(): String
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getProject(): Project
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+ +
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getRequiredServices(): TaskRequiredServices
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getSharedResources(): MutableList<ResourceLock>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getShouldRunAfter(): TaskDependency
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getStandardOutputCapture(): StandardOutputCapture
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getTaskActions(): MutableList<InputChangesAwareTaskAction>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getTaskDependencies(): TaskDependencyInternal
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getTaskIdentity(): TaskIdentity<*>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getTemporaryDir(): File
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getTemporaryDirFactory(): Factory<File>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun hasProperty(propertyName: String): Boolean
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun hasTaskActions(): Boolean
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun mustRunAfter(vararg paths: Any): Task
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun notCompatibleWithConfigurationCache(reason: String)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun onlyIf(onlyIfClosure: Closure<Any>)
open override fun onlyIf(spec: Spec<in Task>)
open override fun onlyIf(onlyIfReason: String, spec: Spec<in Task>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun prependParallelSafeAction(action: Action<in Task>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun property(propertyName: String): Any?
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun run()
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setActions(replacements: MutableList<Action<in Task>>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setDependsOn(dependsOn: MutableIterable<*>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setDescription(description: String?)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setDidWork(didWork: Boolean)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setFinalizedBy(finalizedByTasks: MutableIterable<*>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setGroup(group: String?)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setMustRunAfter(mustRunAfterTasks: MutableIterable<*>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setOnlyIf(onlyIfClosure: Closure<Any>)
open override fun setOnlyIf(spec: Spec<in Task>)
open override fun setOnlyIf(onlyIfReason: String, spec: Spec<in Task>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setProperty(name: String, value: Any)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setShouldRunAfter(shouldRunAfterTasks: MutableIterable<*>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun shouldRunAfter(vararg paths: Any): TaskDependency
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun usesService(service: Provider<out BuildService<*>>)
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-create-semver-tag-task/run.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-create-semver-tag-task/run.html new file mode 100644 index 00000000..24c4fb22 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-create-semver-tag-task/run.html @@ -0,0 +1,76 @@ + + + + + run + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

run

+
+
fun run()
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/-companion/-n-a-m-e.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/-companion/-n-a-m-e.html new file mode 100644 index 00000000..eaac259f --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/-companion/-n-a-m-e.html @@ -0,0 +1,76 @@ + + + + + NAME + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

NAME

+
+
const val NAME: String
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/-companion/index.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/-companion/index.html new file mode 100644 index 00000000..83ac5ec1 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/-companion/index.html @@ -0,0 +1,100 @@ + + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Companion

+
object Companion
+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
const val NAME: String
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/-print-semver-task.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/-print-semver-task.html new file mode 100644 index 00000000..7415c187 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/-print-semver-task.html @@ -0,0 +1,76 @@ + + + + + PrintSemverTask + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

PrintSemverTask

+
+
@Inject
constructor(isRootProject: Boolean, projectName: String, objects: ObjectFactory)
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/github-env-tag.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/github-env-tag.html new file mode 100644 index 00000000..2ba734ac --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/github-env-tag.html @@ -0,0 +1,76 @@ + + + + + githubEnvTag + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

githubEnvTag

+
+
@Input
val githubEnvTag: Property<Boolean>
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/github-env-version.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/github-env-version.html new file mode 100644 index 00000000..8b11806e --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/github-env-version.html @@ -0,0 +1,76 @@ + + + + + githubEnvVersion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

githubEnvVersion

+
+
@Input
val githubEnvVersion: Property<Boolean>
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/github-env.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/github-env.html new file mode 100644 index 00000000..b8d2c3ce --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/github-env.html @@ -0,0 +1,76 @@ + + + + + githubEnv + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

githubEnv

+
+
@Input
val githubEnv: Property<Boolean>
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/github-only-root.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/github-only-root.html new file mode 100644 index 00000000..bb90433c --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/github-only-root.html @@ -0,0 +1,76 @@ + + + + + githubOnlyRoot + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

githubOnlyRoot

+
+
@Input
val githubOnlyRoot: Property<Boolean>
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/github-output-tag.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/github-output-tag.html new file mode 100644 index 00000000..c3bdf9cf --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/github-output-tag.html @@ -0,0 +1,76 @@ + + + + + githubOutputTag + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

githubOutputTag

+
+
@Input
val githubOutputTag: Property<Boolean>
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/github-output-version.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/github-output-version.html new file mode 100644 index 00000000..69fbfcaf --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/github-output-version.html @@ -0,0 +1,76 @@ + + + + + githubOutputVersion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

githubOutputVersion

+
+
@Input
val githubOutputVersion: Property<Boolean>
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/github-output.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/github-output.html new file mode 100644 index 00000000..d6d78bf5 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/github-output.html @@ -0,0 +1,76 @@ + + + + + githubOutput + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

githubOutput

+
+
@Input
val githubOutput: Property<Boolean>
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/index.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/index.html new file mode 100644 index 00000000..67007f57 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/index.html @@ -0,0 +1,1297 @@ + + + + + PrintSemverTask + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

PrintSemverTask

+
@UntrackedTask(because = "It must always print the version")
abstract class PrintSemverTask @Inject constructor(isRootProject: Boolean, projectName: String, objects: ObjectFactory) : DefaultTask
+
+
+
+
+
+

Constructors

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
@Inject
constructor(isRootProject: Boolean, projectName: String, objects: ObjectFactory)
+
+
+
+
+
+
+
+

Types

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
object Companion
+
+
+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
@get:Internal
var enabled: Boolean
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@Input
val githubEnv: Property<Boolean>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@Input
val githubEnvTag: Property<Boolean>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@Input
val githubEnvVersion: Property<Boolean>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@Input
val githubOnlyRoot: Property<Boolean>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@Input
val githubOutput: Property<Boolean>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@Input
val githubOutputTag: Property<Boolean>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@Input
val githubOutputVersion: Property<Boolean>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+ +
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
val state: TaskStateInternal
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@get:Input
abstract val tagPrefix: Property<String>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
val timeout: Property<Duration>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@get:Input
abstract val version: Property<String>
+
+
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun acceptServiceReferences(serviceReferences: MutableSet<ServiceReferenceSpec>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun appendParallelSafeAction(action: Action<in Task>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open operator override fun compareTo(other: Task): Int
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun configure(closure: Closure<Any>): Task
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun dependsOn(vararg paths: Any): Task
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun doFirst(action: Closure<Any>): Task
open override fun doFirst(action: Action<in Task>): Task
open override fun doFirst(actionName: String, action: Action<in Task>): Task
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun doLast(action: Closure<Any>): Task
open override fun doLast(action: Action<in Task>): Task
open override fun doLast(actionName: String, action: Action<in Task>): Task
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun doNotTrackState(reasonNotToTrackState: String)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun finalizedBy(vararg paths: Any): Task
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getActions(): MutableList<Action<in Task>>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getAnt(): AntBuilder
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@Internal
open override fun getAsDynamicObject(): DynamicObject
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@Internal
open override fun getConvention(): Convention
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getDependsOn(): MutableSet<Any>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getDescription(): String?
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getDestroyables(): TaskDestroyables
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getDidWork(): Boolean
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getExtensions(): ExtensionContainer
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getFinalizedBy(): TaskDependency
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getGroup(): String?
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getIdentityPath(): Path
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getInputs(): TaskInputsInternal
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@Internal
open override fun getLifecycleDependencies(): TaskDependencyInternal
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getLocalState(): TaskLocalState
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getLogger(): Logger
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getLogging(): LoggingManager
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getMustRunAfter(): TaskDependency
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getName(): String
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getOnlyIf(): Spec<in TaskInternal>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getOutputs(): TaskOutputsInternal
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getPath(): String
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getProject(): Project
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+ +
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getRequiredServices(): TaskRequiredServices
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getSharedResources(): MutableList<ResourceLock>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getShouldRunAfter(): TaskDependency
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getStandardOutputCapture(): StandardOutputCapture
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getTaskActions(): MutableList<InputChangesAwareTaskAction>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getTaskDependencies(): TaskDependencyInternal
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getTaskIdentity(): TaskIdentity<*>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getTemporaryDir(): File
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getTemporaryDirFactory(): Factory<File>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun hasProperty(propertyName: String): Boolean
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun hasTaskActions(): Boolean
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun mustRunAfter(vararg paths: Any): Task
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun notCompatibleWithConfigurationCache(reason: String)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun onlyIf(onlyIfClosure: Closure<Any>)
open override fun onlyIf(spec: Spec<in Task>)
open override fun onlyIf(onlyIfReason: String, spec: Spec<in Task>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun prependParallelSafeAction(action: Action<in Task>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun property(propertyName: String): Any?
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun run()
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setActions(replacements: MutableList<Action<in Task>>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setDependsOn(dependsOn: MutableIterable<*>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setDescription(description: String?)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setDidWork(didWork: Boolean)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setFinalizedBy(finalizedByTasks: MutableIterable<*>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setGroup(group: String?)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setMustRunAfter(mustRunAfterTasks: MutableIterable<*>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setOnlyIf(onlyIfClosure: Closure<Any>)
open override fun setOnlyIf(spec: Spec<in Task>)
open override fun setOnlyIf(onlyIfReason: String, spec: Spec<in Task>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setProperty(name: String, value: Any)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setShouldRunAfter(shouldRunAfterTasks: MutableIterable<*>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun shouldRunAfter(vararg paths: Any): TaskDependency
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun usesService(service: Provider<out BuildService<*>>)
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/run.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/run.html new file mode 100644 index 00000000..bfe99143 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/run.html @@ -0,0 +1,76 @@ + + + + + run + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

run

+
+
fun run()
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/tag-prefix.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/tag-prefix.html new file mode 100644 index 00000000..81de1d03 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/tag-prefix.html @@ -0,0 +1,76 @@ + + + + + tagPrefix + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

tagPrefix

+
+
@get:Input
abstract val tagPrefix: Property<String>
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/version.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/version.html new file mode 100644 index 00000000..03bb0baa --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-print-semver-task/version.html @@ -0,0 +1,76 @@ + + + + + version + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

version

+
+
@get:Input
abstract val version: Property<String>
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-push-semver-tag-task/-companion/-n-a-m-e.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-push-semver-tag-task/-companion/-n-a-m-e.html new file mode 100644 index 00000000..5a642198 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-push-semver-tag-task/-companion/-n-a-m-e.html @@ -0,0 +1,76 @@ + + + + + NAME + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

NAME

+
+
const val NAME: String
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-push-semver-tag-task/-companion/index.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-push-semver-tag-task/-companion/index.html new file mode 100644 index 00000000..7549750f --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-push-semver-tag-task/-companion/index.html @@ -0,0 +1,100 @@ + + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Companion

+
object Companion
+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
const val NAME: String
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-push-semver-tag-task/-push-semver-tag-task.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-push-semver-tag-task/-push-semver-tag-task.html new file mode 100644 index 00000000..4fc33a05 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-push-semver-tag-task/-push-semver-tag-task.html @@ -0,0 +1,76 @@ + + + + + PushSemverTagTask + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

PushSemverTagTask

+
+
constructor()
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-push-semver-tag-task/index.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-push-semver-tag-task/index.html new file mode 100644 index 00000000..a4551e96 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-push-semver-tag-task/index.html @@ -0,0 +1,1162 @@ + + + + + PushSemverTagTask + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

PushSemverTagTask

+
abstract class PushSemverTagTask : DefaultTask
+
+
+
+
+
+

Constructors

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
constructor()
+
+
+
+
+
+
+
+

Types

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
object Companion
+
+
+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
@get:Internal
var enabled: Boolean
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+ +
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
val state: TaskStateInternal
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
val timeout: Property<Duration>
+
+
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun acceptServiceReferences(serviceReferences: MutableSet<ServiceReferenceSpec>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun appendParallelSafeAction(action: Action<in Task>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open operator override fun compareTo(other: Task): Int
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun configure(closure: Closure<Any>): Task
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun dependsOn(vararg paths: Any): Task
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun doFirst(action: Closure<Any>): Task
open override fun doFirst(action: Action<in Task>): Task
open override fun doFirst(actionName: String, action: Action<in Task>): Task
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun doLast(action: Closure<Any>): Task
open override fun doLast(action: Action<in Task>): Task
open override fun doLast(actionName: String, action: Action<in Task>): Task
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun doNotTrackState(reasonNotToTrackState: String)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun finalizedBy(vararg paths: Any): Task
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getActions(): MutableList<Action<in Task>>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getAnt(): AntBuilder
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@Internal
open override fun getAsDynamicObject(): DynamicObject
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@Internal
open override fun getConvention(): Convention
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getDependsOn(): MutableSet<Any>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getDescription(): String?
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getDestroyables(): TaskDestroyables
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getDidWork(): Boolean
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getExtensions(): ExtensionContainer
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getFinalizedBy(): TaskDependency
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getGroup(): String?
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getIdentityPath(): Path
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getInputs(): TaskInputsInternal
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@Internal
open override fun getLifecycleDependencies(): TaskDependencyInternal
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getLocalState(): TaskLocalState
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getLogger(): Logger
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getLogging(): LoggingManager
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getMustRunAfter(): TaskDependency
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getName(): String
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getOnlyIf(): Spec<in TaskInternal>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getOutputs(): TaskOutputsInternal
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getPath(): String
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getProject(): Project
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+ +
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getRequiredServices(): TaskRequiredServices
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getSharedResources(): MutableList<ResourceLock>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getShouldRunAfter(): TaskDependency
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getStandardOutputCapture(): StandardOutputCapture
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getTaskActions(): MutableList<InputChangesAwareTaskAction>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getTaskDependencies(): TaskDependencyInternal
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getTaskIdentity(): TaskIdentity<*>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getTemporaryDir(): File
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getTemporaryDirFactory(): Factory<File>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun hasProperty(propertyName: String): Boolean
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun hasTaskActions(): Boolean
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun mustRunAfter(vararg paths: Any): Task
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun notCompatibleWithConfigurationCache(reason: String)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun onlyIf(onlyIfClosure: Closure<Any>)
open override fun onlyIf(spec: Spec<in Task>)
open override fun onlyIf(onlyIfReason: String, spec: Spec<in Task>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun prependParallelSafeAction(action: Action<in Task>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun property(propertyName: String): Any?
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun run()
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setActions(replacements: MutableList<Action<in Task>>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setDependsOn(dependsOn: MutableIterable<*>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setDescription(description: String?)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setDidWork(didWork: Boolean)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setFinalizedBy(finalizedByTasks: MutableIterable<*>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setGroup(group: String?)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setMustRunAfter(mustRunAfterTasks: MutableIterable<*>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setOnlyIf(onlyIfClosure: Closure<Any>)
open override fun setOnlyIf(spec: Spec<in Task>)
open override fun setOnlyIf(onlyIfReason: String, spec: Spec<in Task>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setProperty(name: String, value: Any)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setShouldRunAfter(shouldRunAfterTasks: MutableIterable<*>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun shouldRunAfter(vararg paths: Any): TaskDependency
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun usesService(service: Provider<out BuildService<*>>)
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-push-semver-tag-task/run.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-push-semver-tag-task/run.html new file mode 100644 index 00000000..10de6599 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-push-semver-tag-task/run.html @@ -0,0 +1,76 @@ + + + + + run + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

run

+
+
fun run()
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-write-semver-task/-companion/-n-a-m-e.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-write-semver-task/-companion/-n-a-m-e.html new file mode 100644 index 00000000..afe12637 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-write-semver-task/-companion/-n-a-m-e.html @@ -0,0 +1,76 @@ + + + + + NAME + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

NAME

+
+
const val NAME: String
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-write-semver-task/-companion/index.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-write-semver-task/-companion/index.html new file mode 100644 index 00000000..c96d1a9a --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-write-semver-task/-companion/index.html @@ -0,0 +1,100 @@ + + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Companion

+
object Companion
+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
const val NAME: String
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-write-semver-task/-write-semver-task.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-write-semver-task/-write-semver-task.html new file mode 100644 index 00000000..eb7f5120 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-write-semver-task/-write-semver-task.html @@ -0,0 +1,76 @@ + + + + + WriteSemverTask + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

WriteSemverTask

+
+
@Inject
constructor(objects: ObjectFactory, layout: ProjectLayout)
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-write-semver-task/index.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-write-semver-task/index.html new file mode 100644 index 00000000..cce97141 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-write-semver-task/index.html @@ -0,0 +1,1207 @@ + + + + + WriteSemverTask + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

WriteSemverTask

+
@CacheableTask
abstract class WriteSemverTask @Inject constructor(objects: ObjectFactory, layout: ProjectLayout) : DefaultTask
+
+
+
+
+
+

Constructors

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
@Inject
constructor(objects: ObjectFactory, layout: ProjectLayout)
+
+
+
+
+
+
+
+

Types

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
object Companion
+
+
+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
@get:Internal
var enabled: Boolean
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+ +
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@OutputFile
val semverFile: RegularFileProperty
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
val state: TaskStateInternal
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@get:Input
abstract val tagPrefix: Property<String>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
val timeout: Property<Duration>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@get:Input
abstract val version: Property<String>
+
+
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun acceptServiceReferences(serviceReferences: MutableSet<ServiceReferenceSpec>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun appendParallelSafeAction(action: Action<in Task>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open operator override fun compareTo(other: Task): Int
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun configure(closure: Closure<Any>): Task
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun dependsOn(vararg paths: Any): Task
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun doFirst(action: Closure<Any>): Task
open override fun doFirst(action: Action<in Task>): Task
open override fun doFirst(actionName: String, action: Action<in Task>): Task
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun doLast(action: Closure<Any>): Task
open override fun doLast(action: Action<in Task>): Task
open override fun doLast(actionName: String, action: Action<in Task>): Task
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun doNotTrackState(reasonNotToTrackState: String)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun finalizedBy(vararg paths: Any): Task
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getActions(): MutableList<Action<in Task>>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getAnt(): AntBuilder
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@Internal
open override fun getAsDynamicObject(): DynamicObject
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@Internal
open override fun getConvention(): Convention
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getDependsOn(): MutableSet<Any>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getDescription(): String?
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getDestroyables(): TaskDestroyables
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getDidWork(): Boolean
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getExtensions(): ExtensionContainer
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getFinalizedBy(): TaskDependency
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getGroup(): String?
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getIdentityPath(): Path
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getInputs(): TaskInputsInternal
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@Internal
open override fun getLifecycleDependencies(): TaskDependencyInternal
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getLocalState(): TaskLocalState
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getLogger(): Logger
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getLogging(): LoggingManager
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getMustRunAfter(): TaskDependency
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getName(): String
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getOnlyIf(): Spec<in TaskInternal>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getOutputs(): TaskOutputsInternal
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getPath(): String
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getProject(): Project
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+ +
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getRequiredServices(): TaskRequiredServices
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getSharedResources(): MutableList<ResourceLock>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getShouldRunAfter(): TaskDependency
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getStandardOutputCapture(): StandardOutputCapture
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getTaskActions(): MutableList<InputChangesAwareTaskAction>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getTaskDependencies(): TaskDependencyInternal
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getTaskIdentity(): TaskIdentity<*>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getTemporaryDir(): File
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getTemporaryDirFactory(): Factory<File>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun hasProperty(propertyName: String): Boolean
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun hasTaskActions(): Boolean
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun mustRunAfter(vararg paths: Any): Task
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun notCompatibleWithConfigurationCache(reason: String)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun onlyIf(onlyIfClosure: Closure<Any>)
open override fun onlyIf(spec: Spec<in Task>)
open override fun onlyIf(onlyIfReason: String, spec: Spec<in Task>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun prependParallelSafeAction(action: Action<in Task>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun property(propertyName: String): Any?
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun run()
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setActions(replacements: MutableList<Action<in Task>>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setDependsOn(dependsOn: MutableIterable<*>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setDescription(description: String?)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setDidWork(didWork: Boolean)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setFinalizedBy(finalizedByTasks: MutableIterable<*>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setGroup(group: String?)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setMustRunAfter(mustRunAfterTasks: MutableIterable<*>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setOnlyIf(onlyIfClosure: Closure<Any>)
open override fun setOnlyIf(spec: Spec<in Task>)
open override fun setOnlyIf(onlyIfReason: String, spec: Spec<in Task>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setProperty(name: String, value: Any)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun setShouldRunAfter(shouldRunAfterTasks: MutableIterable<*>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun shouldRunAfter(vararg paths: Any): TaskDependency
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun usesService(service: Provider<out BuildService<*>>)
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-write-semver-task/run.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-write-semver-task/run.html new file mode 100644 index 00000000..a5e024ae --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-write-semver-task/run.html @@ -0,0 +1,76 @@ + + + + + run + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

run

+
+
fun run()
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-write-semver-task/semver-file.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-write-semver-task/semver-file.html new file mode 100644 index 00000000..6401bdf5 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-write-semver-task/semver-file.html @@ -0,0 +1,76 @@ + + + + + semverFile + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

semverFile

+
+
@OutputFile
val semverFile: RegularFileProperty
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-write-semver-task/tag-prefix.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-write-semver-task/tag-prefix.html new file mode 100644 index 00000000..9ed4e040 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-write-semver-task/tag-prefix.html @@ -0,0 +1,76 @@ + + + + + tagPrefix + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

tagPrefix

+
+
@get:Input
abstract val tagPrefix: Property<String>
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-write-semver-task/version.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-write-semver-task/version.html new file mode 100644 index 00000000..ae887192 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/-write-semver-task/version.html @@ -0,0 +1,76 @@ + + + + + version + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

version

+
+
@get:Input
abstract val version: Property<String>
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/index.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/index.html new file mode 100644 index 00000000..654000cb --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin.tasks/index.html @@ -0,0 +1,144 @@ + + + + + com.javiersc.semver.project.gradle.plugin.tasks + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Package-level declarations

+
+
+
+
+
+

Types

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
abstract class CreateSemverTagTask : DefaultTask
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@UntrackedTask(because = "It must always print the version")
abstract class PrintSemverTask @Inject constructor(isRootProject: Boolean, projectName: String, objects: ObjectFactory) : DefaultTask
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
abstract class PushSemverTagTask : DefaultTask
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
@CacheableTask
abstract class WriteSemverTask @Inject constructor(objects: ObjectFactory, layout: ProjectLayout) : DefaultTask
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-commit/-commit.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-commit/-commit.html new file mode 100644 index 00000000..a699f2bb --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-commit/-commit.html @@ -0,0 +1,76 @@ + + + + + Commit + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Commit

+
+
constructor(message: String, fullMessage: String, hash: String, timestampEpochSecond: Long, tags: List<Tag>)

Parameters

message

The short message of the commit

fullMessage

The full message of the commit including the body

hash

The hash of the commit

timestampEpochSecond

The timestamp of the commit in epoch seconds

tags

The tags associated with the commit

+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-commit/full-message.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-commit/full-message.html new file mode 100644 index 00000000..cc2acab2 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-commit/full-message.html @@ -0,0 +1,76 @@ + + + + + fullMessage + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

fullMessage

+
+

Parameters

fullMessage

The full message of the commit including the body

+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-commit/hash.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-commit/hash.html new file mode 100644 index 00000000..a9118dcb --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-commit/hash.html @@ -0,0 +1,76 @@ + + + + + hash + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

hash

+
+

Parameters

hash

The hash of the commit

+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-commit/index.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-commit/index.html new file mode 100644 index 00000000..d39dbd26 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-commit/index.html @@ -0,0 +1,198 @@ + + + + + Commit + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Commit

+
data class Commit(val message: String, val fullMessage: String, val hash: String, val timestampEpochSecond: Long, val tags: List<Tag>)

Parameters

message

The short message of the commit

fullMessage

The full message of the commit including the body

hash

The hash of the commit

timestampEpochSecond

The timestamp of the commit in epoch seconds

tags

The tags associated with the commit

+
+
+
+
+
+

Constructors

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
constructor(message: String, fullMessage: String, hash: String, timestampEpochSecond: Long, tags: List<Tag>)
+
+
+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
val tags: List<Tag>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+ +
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun toString(): String
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-commit/message.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-commit/message.html new file mode 100644 index 00000000..82f65624 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-commit/message.html @@ -0,0 +1,76 @@ + + + + + message + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

message

+
+

Parameters

message

The short message of the commit

+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-commit/tags.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-commit/tags.html new file mode 100644 index 00000000..bc816126 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-commit/tags.html @@ -0,0 +1,76 @@ + + + + + tags + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

tags

+
+
val tags: List<Tag>

Parameters

tags

The tags associated with the commit

+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-commit/timestamp-epoch-second.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-commit/timestamp-epoch-second.html new file mode 100644 index 00000000..f95cb10e --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-commit/timestamp-epoch-second.html @@ -0,0 +1,76 @@ + + + + + timestampEpochSecond + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

timestampEpochSecond

+
+

Parameters

timestampEpochSecond

The timestamp of the commit in epoch seconds

+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-commit/to-string.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-commit/to-string.html new file mode 100644 index 00000000..a537dc7f --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-commit/to-string.html @@ -0,0 +1,76 @@ + + + + + toString + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

toString

+
+
open override fun toString(): String
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-companion/-extension-name.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-companion/-extension-name.html new file mode 100644 index 00000000..b30908ee --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-companion/-extension-name.html @@ -0,0 +1,76 @@ + + + + + ExtensionName + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

ExtensionName

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-companion/index.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-companion/index.html new file mode 100644 index 00000000..52842ca3 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-companion/index.html @@ -0,0 +1,100 @@ + + + + + Companion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Companion

+
object Companion
+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-branch/-branch.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-branch/-branch.html new file mode 100644 index 00000000..5a2e78ea --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-branch/-branch.html @@ -0,0 +1,76 @@ + + + + + Branch + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Branch

+
+
constructor(name: String, refName: String, commits: List<SemverExtension.GitData.Commit>, tags: List<SemverExtension.GitData.Tag>)
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-branch/commits.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-branch/commits.html new file mode 100644 index 00000000..f9968bbf --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-branch/commits.html @@ -0,0 +1,76 @@ + + + + + commits + + + + + + + + + + + + + + + + + +
+ + +
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-branch/index.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-branch/index.html new file mode 100644 index 00000000..3843ece0 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-branch/index.html @@ -0,0 +1,164 @@ + + + + + Branch + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Branch

+
data class Branch(val name: String, val refName: String, val commits: List<SemverExtension.GitData.Commit>, val tags: List<SemverExtension.GitData.Tag>)
+
+
+
+
+
+

Constructors

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
constructor(name: String, refName: String, commits: List<SemverExtension.GitData.Commit>, tags: List<SemverExtension.GitData.Tag>)
+
+
+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+

The list of commits in the branch.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+

The name of the branch. Example: main.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+

The reference name of the branch. Example: refs/heads/main.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+

The list of tags in the branch.

+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-branch/name.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-branch/name.html new file mode 100644 index 00000000..6581921b --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-branch/name.html @@ -0,0 +1,76 @@ + + + + + name + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

name

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-branch/ref-name.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-branch/ref-name.html new file mode 100644 index 00000000..30bb4646 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-branch/ref-name.html @@ -0,0 +1,76 @@ + + + + + refName + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

refName

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-branch/tags.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-branch/tags.html new file mode 100644 index 00000000..89f51db5 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-branch/tags.html @@ -0,0 +1,76 @@ + + + + + tags + + + + + + + + + + + + + + + + + +
+ + +
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-commit/-commit.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-commit/-commit.html new file mode 100644 index 00000000..3467059f --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-commit/-commit.html @@ -0,0 +1,76 @@ + + + + + Commit + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Commit

+
+
constructor(message: String, fullMessage: String, hash: String)
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-commit/full-message.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-commit/full-message.html new file mode 100644 index 00000000..c1dad3f6 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-commit/full-message.html @@ -0,0 +1,76 @@ + + + + + fullMessage + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

fullMessage

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-commit/hash.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-commit/hash.html new file mode 100644 index 00000000..6b29f670 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-commit/hash.html @@ -0,0 +1,76 @@ + + + + + hash + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

hash

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-commit/index.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-commit/index.html new file mode 100644 index 00000000..6c799388 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-commit/index.html @@ -0,0 +1,149 @@ + + + + + Commit + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Commit

+
data class Commit(val message: String, val fullMessage: String, val hash: String)
+
+
+
+
+
+

Constructors

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
constructor(message: String, fullMessage: String, hash: String)
+
+
+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+

The full commit message, including any additional details.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+

The unique hash that identifies the commit.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+

The commit message.

+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-commit/message.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-commit/message.html new file mode 100644 index 00000000..90f56c53 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-commit/message.html @@ -0,0 +1,76 @@ + + + + + message + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

message

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-git-data.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-git-data.html new file mode 100644 index 00000000..96283126 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-git-data.html @@ -0,0 +1,76 @@ + + + + + GitData + + + + + + + + + + + + + + + + + +
+ +
+ + +
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-tag/-tag.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-tag/-tag.html new file mode 100644 index 00000000..e8183d2b --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-tag/-tag.html @@ -0,0 +1,76 @@ + + + + + Tag + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Tag

+
+
constructor(name: String, refName: String, commit: SemverExtension.GitData.Commit)
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-tag/commit.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-tag/commit.html new file mode 100644 index 00000000..8b7b4a80 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-tag/commit.html @@ -0,0 +1,76 @@ + + + + + commit + + + + + + + + + + + + + + + + + +
+ +
+ + +
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-tag/index.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-tag/index.html new file mode 100644 index 00000000..7791512f --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-tag/index.html @@ -0,0 +1,149 @@ + + + + + Tag + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Tag

+
data class Tag(val name: String, val refName: String, val commit: SemverExtension.GitData.Commit)
+
+
+
+
+
+

Constructors

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
constructor(name: String, refName: String, commit: SemverExtension.GitData.Commit)
+
+
+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+

The commit associated with the tag.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+

The name of the tag.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+

The reference name of the tag.

+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-tag/name.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-tag/name.html new file mode 100644 index 00000000..99a88075 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-tag/name.html @@ -0,0 +1,76 @@ + + + + + name + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

name

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-tag/ref-name.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-tag/ref-name.html new file mode 100644 index 00000000..8d89f306 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/-tag/ref-name.html @@ -0,0 +1,76 @@ + + + + + refName + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

refName

+
+ +
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/branch.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/branch.html new file mode 100644 index 00000000..80a66097 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/branch.html @@ -0,0 +1,76 @@ + + + + + branch + + + + + + + + + + + + + + + + + +
+ +
+ + +
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/commit.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/commit.html new file mode 100644 index 00000000..dc0d94d1 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/commit.html @@ -0,0 +1,76 @@ + + + + + commit + + + + + + + + + + + + + + + + + +
+ +
+ + +
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/index.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/index.html new file mode 100644 index 00000000..96a1eb5c --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/index.html @@ -0,0 +1,198 @@ + + + + + GitData + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

GitData

+ +
+
+
+
+
+

Constructors

+
+
+
+
+ + +
Link copied to clipboard
+
+ +
+
+
+
+
+

Types

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
data class Branch(val name: String, val refName: String, val commits: List<SemverExtension.GitData.Commit>, val tags: List<SemverExtension.GitData.Tag>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
data class Commit(val message: String, val fullMessage: String, val hash: String)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
data class Tag(val name: String, val refName: String, val commit: SemverExtension.GitData.Commit)
+
+
+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+

The branch information.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+

The commit information.

+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+

The tag information, if available.

+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/tag.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/tag.html new file mode 100644 index 00000000..48f215de --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-git-data/tag.html @@ -0,0 +1,76 @@ + + + + + tag + + + + + + + + + + + + + + + + + +
+ +
+ + +
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-semver-extension.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-semver-extension.html new file mode 100644 index 00000000..af614e33 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/-semver-extension.html @@ -0,0 +1,76 @@ + + + + + SemverExtension + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

SemverExtension

+
+
@Inject
constructor(objects: ObjectFactory, providers: ProviderFactory)
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/commits-max-count.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/commits-max-count.html new file mode 100644 index 00000000..35d230c2 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/commits-max-count.html @@ -0,0 +1,76 @@ + + + + + commitsMaxCount + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

commitsMaxCount

+
+
val commitsMaxCount: Property<Int>
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/commits.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/commits.html new file mode 100644 index 00000000..1f5f927f --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/commits.html @@ -0,0 +1,76 @@ + + + + + commits + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

commits

+
+
val commits: Provider<List<Commit>>
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/git-dir.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/git-dir.html new file mode 100644 index 00000000..37977f0f --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/git-dir.html @@ -0,0 +1,76 @@ + + + + + gitDir + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

gitDir

+
+
abstract val gitDir: RegularFileProperty
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/index.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/index.html new file mode 100644 index 00000000..1d3a070a --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/index.html @@ -0,0 +1,247 @@ + + + + + SemverExtension + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

SemverExtension

+
abstract class SemverExtension @Inject constructor(objects: ObjectFactory, providers: ProviderFactory)
+
+
+
+
+
+

Constructors

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
@Inject
constructor(objects: ObjectFactory, providers: ProviderFactory)
+
+
+
+
+
+
+
+

Types

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
object Companion
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+ +
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
val commits: Provider<List<Commit>>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
val commitsMaxCount: Property<Int>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
abstract val gitDir: RegularFileProperty
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
val isEnabled: Property<Boolean>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
val tagPrefix: Property<String>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
val version: Property<String>
+
+
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
fun mapVersion(transform: (GradleVersion) -> String)
fun mapVersion(transform: (version: GradleVersion, git: SemverExtension.GitData) -> String)
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/is-enabled.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/is-enabled.html new file mode 100644 index 00000000..cbaec97c --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/is-enabled.html @@ -0,0 +1,76 @@ + + + + + isEnabled + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

isEnabled

+
+
val isEnabled: Property<Boolean>
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/map-version.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/map-version.html new file mode 100644 index 00000000..7b1f793c --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/map-version.html @@ -0,0 +1,76 @@ + + + + + mapVersion + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

mapVersion

+
+
fun mapVersion(transform: (GradleVersion) -> String)
fun mapVersion(transform: (version: GradleVersion, git: SemverExtension.GitData) -> String)
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/tag-prefix.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/tag-prefix.html new file mode 100644 index 00000000..b8563c0b --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/tag-prefix.html @@ -0,0 +1,76 @@ + + + + + tagPrefix + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

tagPrefix

+
+
val tagPrefix: Property<String>
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/version.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/version.html new file mode 100644 index 00000000..0ce9be7a --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-extension/version.html @@ -0,0 +1,76 @@ + + + + + version + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

version

+
+
val version: Property<String>
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-project-plugin/-semver-project-plugin.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-project-plugin/-semver-project-plugin.html new file mode 100644 index 00000000..ecc4a28f --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-project-plugin/-semver-project-plugin.html @@ -0,0 +1,76 @@ + + + + + SemverProjectPlugin + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

SemverProjectPlugin

+
+
constructor()
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-project-plugin/apply.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-project-plugin/apply.html new file mode 100644 index 00000000..6eaf5faf --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-project-plugin/apply.html @@ -0,0 +1,76 @@ + + + + + apply + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

apply

+
+
open override fun apply(target: Project)
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-project-plugin/index.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-project-plugin/index.html new file mode 100644 index 00000000..f8581bce --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-semver-project-plugin/index.html @@ -0,0 +1,119 @@ + + + + + SemverProjectPlugin + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

SemverProjectPlugin

+
class SemverProjectPlugin : Plugin<Project>
+
+
+
+
+
+

Constructors

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
constructor()
+
+
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun apply(target: Project)
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-tag/-tag.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-tag/-tag.html new file mode 100644 index 00000000..3f7beb8b --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-tag/-tag.html @@ -0,0 +1,76 @@ + + + + + Tag + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Tag

+
+
constructor(name: String, refName: String)

Parameters

name

The name of the tag, example: v1.0.0

refName

The name of the ref, example: refs/tags/v1.0.0

+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-tag/index.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-tag/index.html new file mode 100644 index 00000000..92be3014 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-tag/index.html @@ -0,0 +1,153 @@ + + + + + Tag + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Tag

+
data class Tag(val name: String, val refName: String)

Parameters

name

The name of the tag, example: v1.0.0

refName

The name of the ref, example: refs/tags/v1.0.0

+
+
+
+
+
+

Constructors

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
constructor(name: String, refName: String)
+
+
+
+
+
+
+
+

Properties

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun toString(): String
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-tag/name.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-tag/name.html new file mode 100644 index 00000000..686bae78 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-tag/name.html @@ -0,0 +1,76 @@ + + + + + name + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

name

+
+

Parameters

name

The name of the tag, example: v1.0.0

+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-tag/ref-name.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-tag/ref-name.html new file mode 100644 index 00000000..fe5c41b3 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-tag/ref-name.html @@ -0,0 +1,76 @@ + + + + + refName + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

refName

+
+

Parameters

refName

The name of the ref, example: refs/tags/v1.0.0

+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-tag/to-string.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-tag/to-string.html new file mode 100644 index 00000000..e689ec48 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-tag/to-string.html @@ -0,0 +1,76 @@ + + + + + toString + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

toString

+
+
open override fun toString(): String
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-version-property/-version-property.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-version-property/-version-property.html new file mode 100644 index 00000000..e0283cd8 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-version-property/-version-property.html @@ -0,0 +1,76 @@ + + + + + VersionProperty + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

VersionProperty

+
+
constructor(version: Provider<String>)
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-version-property/index.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-version-property/index.html new file mode 100644 index 00000000..a0cebc47 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-version-property/index.html @@ -0,0 +1,269 @@ + + + + + VersionProperty + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

VersionProperty

+
class VersionProperty(version: Provider<String>) : Provider<String>
+
+
+
+
+
+

Constructors

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
constructor(version: Provider<String>)
+
+
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
@Incubating
open override fun filter(spec: Spec<in String>): Provider<String>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun <S : Any> flatMap(transformer: Transformer<out @Nullable Provider<out S>, in String>): Provider<S>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun forUseAtConfigurationTime(): Provider<String>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun get(): String
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getOrElse(defaultValue: String): String
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun getOrNull(): String?
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun isPresent(): Boolean
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun <S : Any> map(transformer: Transformer<out @Nullable S, in String>): Provider<S>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun orElse(value: String): Provider<String>
open override fun orElse(provider: Provider<out String>): Provider<String>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun toString(): String
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun <U : Any, R : Any> zip(right: Provider<U>, combiner: BiFunction<in String, in U, out @Nullable R>): Provider<R>
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-version-property/to-string.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-version-property/to-string.html new file mode 100644 index 00000000..b468a373 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/-version-property/to-string.html @@ -0,0 +1,76 @@ + + + + + toString + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

toString

+
+
open override fun toString(): String
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/index.html b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/index.html new file mode 100644 index 00000000..c09ab75f --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/com.javiersc.semver.project.gradle.plugin/index.html @@ -0,0 +1,159 @@ + + + + + com.javiersc.semver.project.gradle.plugin + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Package-level declarations

+
+
+
+
+
+

Types

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
data class Commit(val message: String, val fullMessage: String, val hash: String, val timestampEpochSecond: Long, val tags: List<Tag>)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
abstract class SemverExtension @Inject constructor(objects: ObjectFactory, providers: ProviderFactory)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
class SemverProjectPlugin : Plugin<Project>
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
data class Tag(val name: String, val refName: String)
+
+
+
+
+ +
+
+
+ + +
Link copied to clipboard
+
+
+
+
class VersionProperty(version: Provider<String>) : Provider<String>
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/index.html b/api/snapshot/semver-project-gradle-plugin/index.html new file mode 100644 index 00000000..4af26ecc --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/index.html @@ -0,0 +1,150 @@ + + + + + semver-project-gradle-plugin + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

semver-project-gradle-plugin

+

Apply the plugin

// build.gradle.kts
plugins {
id("com.javiersc.semver") version "$version"
}

Check the README.md for more info

+
+

Packages

+
+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-project-gradle-plugin/navigation.html b/api/snapshot/semver-project-gradle-plugin/navigation.html new file mode 100644 index 00000000..41baba62 --- /dev/null +++ b/api/snapshot/semver-project-gradle-plugin/navigation.html @@ -0,0 +1,327 @@ +
+
+ +
+ +
+ +
+
+ CheckMode +
+
+ +
+
+ +
+
+
+ None +
+
+
+
+
+ Companion +
+
+
+
+ Increase +
+
+
+ Major +
+
+
+
+ Minor +
+
+
+
+ Patch +
+
+
+
+
+ Stage +
+
+
+ Companion +
+
+
+
+ +
+
+ isAlpha +
+
+
+
+ isBeta +
+
+
+
+ isDev +
+
+
+ +
+
+
+ isNotBeta +
+
+
+
+ isNotDev +
+
+
+
+ isNotRC +
+
+
+ +
+
+
+ isRC +
+
+
+ +
+
+
+ +
+ +
+ +
+
+ Commit +
+
+
+ +
+
+ Companion +
+
+
+
+ GitData +
+
+
+ Branch +
+
+
+
+ Commit +
+
+
+
+ Tag +
+
+
+
+ +
+
+ Tag +
+
+
+ +
+
+
+ +
+
+ isAlpha +
+
+
+
+ isBeta +
+
+
+
+ isDev +
+
+
+ +
+
+
+ isNotBeta +
+
+
+
+ isNotDev +
+
+
+
+ isNotRC +
+
+
+ +
+
+
+ isRC +
+
+
+ +
+
+ + +
+ +
diff --git a/api/snapshot/semver-settings-gradle-plugin/com.javiersc.semver.settings.gradle.plugin/-semver-settings-plugin/-semver-settings-plugin.html b/api/snapshot/semver-settings-gradle-plugin/com.javiersc.semver.settings.gradle.plugin/-semver-settings-plugin/-semver-settings-plugin.html new file mode 100644 index 00000000..e470ceba --- /dev/null +++ b/api/snapshot/semver-settings-gradle-plugin/com.javiersc.semver.settings.gradle.plugin/-semver-settings-plugin/-semver-settings-plugin.html @@ -0,0 +1,76 @@ + + + + + SemverSettingsPlugin + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

SemverSettingsPlugin

+
+
constructor()
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-settings-gradle-plugin/com.javiersc.semver.settings.gradle.plugin/-semver-settings-plugin/apply.html b/api/snapshot/semver-settings-gradle-plugin/com.javiersc.semver.settings.gradle.plugin/-semver-settings-plugin/apply.html new file mode 100644 index 00000000..5335e83a --- /dev/null +++ b/api/snapshot/semver-settings-gradle-plugin/com.javiersc.semver.settings.gradle.plugin/-semver-settings-plugin/apply.html @@ -0,0 +1,76 @@ + + + + + apply + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

apply

+
+
open override fun apply(target: Settings)
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-settings-gradle-plugin/com.javiersc.semver.settings.gradle.plugin/-semver-settings-plugin/index.html b/api/snapshot/semver-settings-gradle-plugin/com.javiersc.semver.settings.gradle.plugin/-semver-settings-plugin/index.html new file mode 100644 index 00000000..8eb51ead --- /dev/null +++ b/api/snapshot/semver-settings-gradle-plugin/com.javiersc.semver.settings.gradle.plugin/-semver-settings-plugin/index.html @@ -0,0 +1,119 @@ + + + + + SemverSettingsPlugin + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

SemverSettingsPlugin

+
class SemverSettingsPlugin : Plugin<Settings>
+
+
+
+
+
+

Constructors

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
constructor()
+
+
+
+
+
+
+
+

Functions

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
open override fun apply(target: Settings)
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-settings-gradle-plugin/com.javiersc.semver.settings.gradle.plugin/index.html b/api/snapshot/semver-settings-gradle-plugin/com.javiersc.semver.settings.gradle.plugin/index.html new file mode 100644 index 00000000..a787722b --- /dev/null +++ b/api/snapshot/semver-settings-gradle-plugin/com.javiersc.semver.settings.gradle.plugin/index.html @@ -0,0 +1,99 @@ + + + + + com.javiersc.semver.settings.gradle.plugin + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

Package-level declarations

+
+
+
+
+
+

Types

+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+
class SemverSettingsPlugin : Plugin<Settings>
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-settings-gradle-plugin/index.html b/api/snapshot/semver-settings-gradle-plugin/index.html new file mode 100644 index 00000000..7965eb2e --- /dev/null +++ b/api/snapshot/semver-settings-gradle-plugin/index.html @@ -0,0 +1,96 @@ + + + + + semver-settings-gradle-plugin + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +
+

semver-settings-gradle-plugin

+

Apply the plugin

// settings.gradle.kts
plugins {
id("com.javiersc.semver") version "$version"
}

Check the README.md for more info

+
+

Packages

+
+
+
+
+
+ + +
Link copied to clipboard
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+ + + diff --git a/api/snapshot/semver-settings-gradle-plugin/navigation.html b/api/snapshot/semver-settings-gradle-plugin/navigation.html new file mode 100644 index 00000000..41baba62 --- /dev/null +++ b/api/snapshot/semver-settings-gradle-plugin/navigation.html @@ -0,0 +1,327 @@ +
+
+ +
+ +
+ +
+
+ CheckMode +
+
+ +
+
+ +
+
+
+ None +
+
+
+
+
+ Companion +
+
+
+
+ Increase +
+
+
+ Major +
+
+
+
+ Minor +
+
+
+
+ Patch +
+
+
+
+
+ Stage +
+
+
+ Companion +
+
+
+
+ +
+
+ isAlpha +
+
+
+
+ isBeta +
+
+
+
+ isDev +
+
+
+ +
+
+
+ isNotBeta +
+
+
+
+ isNotDev +
+
+
+
+ isNotRC +
+
+
+ +
+
+
+ isRC +
+
+
+ +
+
+
+ +
+ +
+ +
+
+ Commit +
+
+
+ +
+
+ Companion +
+
+
+
+ GitData +
+
+
+ Branch +
+
+
+
+ Commit +
+
+
+
+ Tag +
+
+
+
+ +
+
+ Tag +
+
+
+ +
+
+
+ +
+
+ isAlpha +
+
+
+
+ isBeta +
+
+
+
+ isDev +
+
+
+ +
+
+
+ isNotBeta +
+
+
+
+ isNotDev +
+
+
+
+ isNotRC +
+
+
+ +
+
+
+ isRC +
+
+
+ +
+
+ + +
+ +
diff --git a/api/snapshot/styles/font-jb-sans-auto.css b/api/snapshot/styles/font-jb-sans-auto.css new file mode 100644 index 00000000..bdc68723 --- /dev/null +++ b/api/snapshot/styles/font-jb-sans-auto.css @@ -0,0 +1,36 @@ +/* + * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. + */ + +/* Light weight */ +@font-face { + font-family: 'JetBrains Sans'; + src: url('https://resources.jetbrains.com/storage/jetbrains-sans/JetBrainsSans-Light.woff2') format('woff2'), url('https://resources.jetbrains.com/storage/jetbrains-sans/JetBrainsSans-Light.woff') format('woff'); + font-weight: 300; + font-style: normal; +} +/* Regular weight */ +@font-face { + font-family: 'JetBrains Sans'; + src: url('https://resources.jetbrains.com/storage/jetbrains-sans/JetBrainsSans-Regular.woff2') format('woff2'), url('https://resources.jetbrains.com/storage/jetbrains-sans/JetBrainsSans-Regular.woff') format('woff'); + font-weight: 400; + font-style: normal; +} +/* SemiBold weight */ +@font-face { + font-family: 'JetBrains Sans'; + src: url('https://resources.jetbrains.com/storage/jetbrains-sans/JetBrainsSans-SemiBold.woff2') format('woff2'), url('https://resources.jetbrains.com/storage/jetbrains-sans/JetBrainsSans-SemiBold.woff') format('woff'); + font-weight: 600; + font-style: normal; +} + +@supports (font-variation-settings: normal) { + @font-face { + font-family: 'JetBrains Sans'; + src: url('https://resources.jetbrains.com/storage/jetbrains-sans/JetBrainsSans.woff2') format('woff2 supports variations'), + url('https://resources.jetbrains.com/storage/jetbrains-sans/JetBrainsSans.woff2') format('woff2-variations'), + url('https://resources.jetbrains.com/storage/jetbrains-sans/JetBrainsSans.woff') format('woff-variations'); + font-weight: 100 900; + font-style: normal; + } +} diff --git a/api/snapshot/styles/logo-styles.css b/api/snapshot/styles/logo-styles.css new file mode 100644 index 00000000..69804e46 --- /dev/null +++ b/api/snapshot/styles/logo-styles.css @@ -0,0 +1,9 @@ +/* + * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. + */ + +:root { + --dokka-logo-image-url: url('../images/logo-icon.svg'); + --dokka-logo-height: 50px; + --dokka-logo-width: 50px; +} diff --git a/api/snapshot/styles/main.css b/api/snapshot/styles/main.css new file mode 100644 index 00000000..ebe1ce12 --- /dev/null +++ b/api/snapshot/styles/main.css @@ -0,0 +1,124 @@ +/*! + * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. + */#pages-search{cursor:pointer;border:none;border-radius:50%;background:transparent;fill:#fff;fill:var(--dark-mode-and-search-icon-color)}#pages-search:focus{outline:none}#pages-search:hover{background:var(--white-10)}.search,.search [data-test=ring-select],.search [data-test=ring-tooltip],.search [data-test=ring-select_focus],.search #pages-search{display:inline-block;padding:0;margin:0;font-size:0;line-height:0}.search-hotkey-popup{background-color:var(--background-color) !important;padding:4px}.popup-wrapper{min-width:calc(100% - 322px) !important;border:1px solid rgba(255,255,255,.2) !important;background-color:#27282c !important}.popup-wrapper [class^=filterWrapper]{border-bottom:1px solid rgba(255,255,255,.2)}.popup-wrapper input{color:rgba(255,255,255,.8) !important;font-weight:normal !important}.popup-wrapper span[data-test-custom=ring-select-popup-filter-icon]{color:#fff}.popup-wrapper button[data-test=ring-input-clear]{color:#fff !important}@media screen and (max-width: 759px){.popup-wrapper{min-width:100% !important}}.template-wrapper{display:grid;height:32px;grid-template-columns:auto auto}.template-wrapper strong{color:rgba(255,255,255,.8)}.template-wrapper span{color:rgba(255,255,255,.8);line-height:32px}.template-wrapper span.template-description{color:rgba(255,255,255,.6);justify-self:end}@media screen and (max-width: 759px){.template-wrapper{display:flex;flex-direction:column;height:auto}.template-wrapper span{line-height:unset}}.template-name{justify-self:start}[class^=fade]{display:none}[class*=hover]{background-color:rgba(255,255,255,.1) !important} +/* stylelint-disable color-no-hex */ + +:root { + --ring-unit: 8px; + + /* Element */ + --ring-line-color: #dfe5eb; + --ring-dark-line-color: #475159; + --ring-borders-color: #b8d1e5; + --ring-dark-borders-color: #406380; + --ring-icon-color: var(--ring-borders-color); + --ring-icon-secondary-color: #999; + --ring-border-disabled-color: #dbdbdb; + --ring-icon-disabled-color: #bbb; + --ring-border-hover-color: #80c6ff; + --ring-dark-border-hover-color: #70b1e6; + --ring-icon-hover-color: var(--ring-link-hover-color); + --ring-main-color: #008eff; + --ring-main-hover-color: #007ee5; + --ring-icon-error-color: #db5860; + --ring-icon-warning-color: #eda200; + --ring-icon-success-color: #59a869; + --ring-pale-control-color: #cfdbe5; + --ring-popup-border-components: 0, 42, 76; + --ring-popup-border-color: rgba(var(--ring-popup-border-components), 0.1); + --ring-popup-shadow-color: rgba(var(--ring-popup-border-components), 0.15); + --ring-message-shadow-color: rgba(var(--ring-popup-border-components), 0.3); + --ring-pinned-shadow-color: #737577; + + /* Text */ + --ring-search-color: #669ecc; + --ring-hint-color: #406380; + --ring-link-color: #0f5b99; + --ring-link-hover-color: #ff008c; + --ring-error-color: #c22731; + --ring-warning-color: #cc8b00; + --ring-success-color: #1b8833; + --ring-text-color: #1f2326; + --ring-dark-text-color: #fff; + --ring-heading-color: var(--ring-text-color); + --ring-secondary-color: #737577; + --ring-dark-secondary-color: #888; + --ring-disabled-color: #999; + --ring-dark-disabled-color: #444; + --ring-dark-active-color: #ccc; + + /* Background */ + --ring-content-background-color: #fff; + --ring-popup-background-color: #fff; + --ring-sidebar-background-color: #f7f9fa; + --ring-selected-background-color: #d4edff; + --ring-hover-background-color: #ebf6ff; + --ring-dark-selected-background-color: #002a4d; + --ring-message-background-color: #111314; + --ring-navigation-background-color: #000; + --ring-tag-background-color: #e6ecf2; + --ring-removed-background-color: #ffd5cb; + --ring-warning-background-color: #faeccd; + --ring-added-background-color: #bce8bb; + + /* Code */ + --ring-code-background-color: var(--ring-content-background-color); + --ring-code-color: #000; + --ring-code-comment-color: #707070; + --ring-code-meta-color: #707070; + --ring-code-keyword-color: #000080; + --ring-code-tag-background-color: #efefef; + --ring-code-tag-color: var(--ring-code-keyword-color); + --ring-code-tag-font-weight: bold; + --ring-code-field-color: #660e7a; + --ring-code-attribute-color: #00f; + --ring-code-number-color: var(--ring-code-attribute-color); + --ring-code-string-color: #007a00; + --ring-code-addition-color: #aadeaa; + --ring-code-deletion-color: #c8c8c8; + + /* Metrics */ + --ring-border-radius: 3px; + --ring-border-radius-small: 2px; + --ring-font-size-larger: 14px; + --ring-font-size: 13px; + --ring-font-size-smaller: 12px; + --ring-line-height-taller: 21px; + --ring-line-height: 20px; + --ring-line-height-lower: 18px; + --ring-line-height-lowest: 16px; + --ring-ease: 0.3s ease-out; + --ring-fast-ease: 0.15s ease-out; + --ring-font-family: system-ui, Arial, sans-serif; + --ring-font-family-monospace: + Menlo, + "Bitstream Vera Sans Mono", + "Ubuntu Mono", + Consolas, + "Courier New", + Courier, + monospace; + + /* Common z-index-values */ + + /* Invisible element is an absolutely positioned element which should be below */ + /* all other elements on the page */ + --ring-invisible-element-z-index: -1; + + /* z-index for position: fixed elements */ + --ring-fixed-z-index: 1; + + /* Elements that should overlay all other elements on the page */ + --ring-overlay-z-index: 5; + + /* Alerts should de displayed above overlays */ + --ring-alert-z-index: 6; +} + +/*! + * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. + *//*! + * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. + */html,.app-root{height:100%}.search-root{margin:0;padding:0;background:var(--ring-content-background-color);font-family:var(--ring-font-family);font-size:var(--ring-font-size);line-height:var(--ring-line-height)}.search-content{z-index:8} + +/*# sourceMappingURL=main.css.map*/ \ No newline at end of file diff --git a/api/snapshot/styles/prism.css b/api/snapshot/styles/prism.css new file mode 100644 index 00000000..2d3a091e --- /dev/null +++ b/api/snapshot/styles/prism.css @@ -0,0 +1,217 @@ +/* + * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. + */ + +/* + * Custom Dokka styles + */ +code .token { + white-space: pre; +} + +/** + * Styles based on webhelp's prism.js styles + * Changes: + * - Since webhelp's styles are in .pcss, they use nesting which is not achievable in native CSS + * so nested css blocks have been unrolled (like dark theme). + * - Webhelp uses "Custom Class" prism.js plugin, so all of their prism classes are prefixed with "--prism". + * Dokka doesn't seem to need this plugin at the moment, so all "--prism" prefixes have been removed. + * - Removed all styles related to `pre` and `code` tags. Kotlinlang's resulting styles are so spread out and complicated + * that it's difficult to gather in one place. Instead use code styles defined in the main Dokka styles, + * which at the moment looks fairly similar. + * + * Based on prism.js default theme + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #8c8c8c; +} + +.token.punctuation { + color: #999; +} + +.token.namespace { + opacity: 0.7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #871094; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #067d17; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + /* This background color was intended by the author of this theme. */ + background: hsla(0, 0%, 100%, 0.5); +} + +.token.atrule, +.token.attr-value, +.token.keyword { + font-size: inherit; /* to override .keyword */ + color: #0033b3; +} + +.token.function { + color: #00627a; +} + +.token.class-name { + color: #000000; +} + +.token.regex, +.token.important, +.token.variable { + color: #871094; +} + +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + +.token.operator { + background: none; +} + +/* + * DARK THEME + */ +:root.theme-dark .token.comment, +:root.theme-dark .token.prolog, +:root.theme-dark .token.cdata { + color: #808080; +} + +:root.theme-dark .token.delimiter, +:root.theme-dark .token.boolean, +:root.theme-dark .token.keyword, +:root.theme-dark .token.selector, +:root.theme-dark .token.important, +:root.theme-dark .token.atrule { + color: #cc7832; +} + +:root.theme-dark .token.operator, +:root.theme-dark .token.punctuation, +:root.theme-dark .token.attr-name { + color: #a9b7c6; +} + +:root.theme-dark .token.tag, +:root.theme-dark .token.tag .punctuation, +:root.theme-dark .token.doctype, +:root.theme-dark .token.builtin { + color: #e8bf6a; +} + +:root.theme-dark .token.entity, +:root.theme-dark .token.number, +:root.theme-dark .token.symbol { + color: #6897bb; +} + +:root.theme-dark .token.property, +:root.theme-dark .token.constant, +:root.theme-dark .token.variable { + color: #9876aa; +} + +:root.theme-dark .token.string, +:root.theme-dark .token.char { + color: #6a8759; +} + +:root.theme-dark .token.attr-value, +:root.theme-dark .token.attr-value .punctuation { + color: #a5c261; +} + +:root.theme-dark .token.attr-value .punctuation:first-child { + color: #a9b7c6; +} + +:root.theme-dark .token.url { + text-decoration: underline; + + color: #287bde; + background: transparent; +} + +:root.theme-dark .token.function { + color: #ffc66d; +} + +:root.theme-dark .token.regex { + background: #364135; +} + +:root.theme-dark .token.deleted { + background: #484a4a; +} + +:root.theme-dark .token.inserted { + background: #294436; +} + +:root.theme-dark .token.class-name { + color: #a9b7c6; +} + +:root.theme-dark .token.function { + color: #ffc66d; +} + +:root.theme-darkcode .language-css .token.property, +:root.theme-darkcode .language-css, +:root.theme-dark .token.property + .token.punctuation { + color: #a9b7c6; +} + +code.language-css .token.id { + color: #ffc66d; +} + +:root.theme-dark code.language-css .token.selector > .token.class, +:root.theme-dark code.language-css .token.selector > .token.attribute, +:root.theme-dark code.language-css .token.selector > .token.pseudo-class, +:root.theme-dark code.language-css .token.selector > .token.pseudo-element { + color: #ffc66d; +} + +:root.theme-dark .language-plaintext .token { + /* plaintext code should be colored as article text */ + color: inherit !important; +} diff --git a/api/snapshot/styles/style.css b/api/snapshot/styles/style.css new file mode 100644 index 00000000..67a899a5 --- /dev/null +++ b/api/snapshot/styles/style.css @@ -0,0 +1,1483 @@ +/* + * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. + */ + +@import url('./font-jb-sans-auto.css'); +@import url('https://fonts.googleapis.com/css?family=JetBrains+Mono'); + +/* --- root styles --- */ +:root { + --default-gray: #f4f4f4; + --default-font-color: black; + --header-font-color: var(--default-font-color); + + --breadcrumb-font-color: #637282; + --breadcrumb-margin: 24px; + --hover-link-color: #5B5DEF; + + --footer-height: 64px; + --footer-padding-top: 48px; + --footer-background: var(--default-gray); + --footer-font-color: var(--average-color); + --footer-go-to-top-color: white; + + --horizontal-spacing-for-content: 16px; + --bottom-spacing: 16px; + --color-scrollbar: rgba(39, 40, 44, 0.40); + --color-scrollbar-track: var(--default-gray); + --default-white: #fff; + --background-color: var(--default-white); + --dark-mode-and-search-icon-color: var(--default-white); + --color-dark: #27282c; + --default-font-family: JetBrains Sans, Inter, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI,Roboto, Oxygen, Ubuntu,Cantarell, Droid Sans, Helvetica Neue, Arial, sans-serif; + --default-monospace-font-family: JetBrains Mono, SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace; + --default-font-size: 15px; + --average-color: var(--color-dark); + --brief-color: var(--average-color); + --copy-icon-color: rgba(39, 40, 44, .7); + --copy-icon-hover-color: var(--color-dark); + --code-background: rgba(39, 40, 44, .05); + --border-color: rgba(39, 40, 44, .2); + --navigation-highlight-color: rgba(39, 40, 44, 0.05); + --top-navigation-height: 73px; + --max-width: 1160px; + --white-10: hsla(0, 0%, 100%, .1); + + --active-tab-border-color: #7F52FF; + --inactive-tab-border-color: rgba(164, 164, 170, 0.7); + + --active-section-color: #7F52FF; + --inactive-section-color: rgba(25, 25, 28, .7); + + --sidebar-width: 280px; + --sidemenu-section-active-color: #7F52FF; +} + +html { + height: 100%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + scrollbar-color: rgba(39, 40, 44, 0.40) #F4F4F4; + scrollbar-color: var(--color-scrollbar) var(--color-scrollbar-track); + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + color: var(--default-font-color); +} + +html ::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +html ::-webkit-scrollbar-track { + background-color: var(--color-scrollbar-track); +} + +html ::-webkit-scrollbar-thumb { + width: 8px; + border-radius: 6px; + background: rgba(39, 40, 44, 0.40); + background: var(--color-scrollbar); +} + +html, body { + margin: 0; + padding: 0; + height: 100%; + width: 100%; +} +/* /--- root styles --- */ + +/* --- global tags styles --- */ +body, table { + background: var(--background-color); + font-family: var(--default-font-family); + font-style: normal; + font-weight: normal; + font-size: var(--default-font-size); + line-height: 1.6; + margin: 0; +} + +h1 { + font-size: 40px; + line-height: 48px; + letter-spacing: -1px; +} + +h2 { + font-size: 31px; + line-height: 40px; + letter-spacing: -0.5px; +} + +h3 { + font-size: 20px; + line-height: 28px; + letter-spacing: -0.2px; +} + +p, ul, ol, table, pre, dl { + margin: 0; +} + +a { + text-decoration: none; +} + +u { + text-decoration: none; + padding-bottom: 2px; + border-bottom: 1px solid var(--border-color); +} + +blockquote { + border-left: 1ch solid var(--default-gray); + margin: 0; + padding-left: 1ch; + font-style: italic; + color: var(--average-color); +} + +.theme-dark blockquote { + color: var(--default-font-color); + border-left-color: var(--code-background); +} + +pre { + display: block; +} + +dt { + color: #444; + font-weight: 530; +} + +img { + max-width: 100%; +} + +small { + font-size: 11px; +} + +table { + width: 100%; + border-collapse: collapse; + padding: 5px; +} + +th, td { + padding: 12px 10px 11px; + text-align: left; + vertical-align: top; +} + +tbody > tr { + min-height: 56px; +} + +td:first-child { + width: 20vw; +} +/* /--- global tags styles --- */ + +/* --- utils classes --- */ +.w-100 { + width: 100%; +} + +.no-gutters { + margin: 0; + padding: 0; +} + +.d-flex { + display: flex; +} + +.floating-right { + float: right; +} + +.pull-right { + float: right; + margin-left: auto +} + +.clearfix::after { + display: block; + content: ''; + clear: both; + height: 0; +} +/* /--- utils classes --- */ + +/* ---dark theme --- */ +.theme-dark { + --background-color: #27282c; + --color-dark: #3d3d41; + --default-font-color: hsla(0, 0%, 100%, 0.8); + --border-color: hsla(0, 0%, 100%, 0.2); + --code-background: hsla(0, 0%, 100%, 0.05); + --breadcrumb-font-color: #8c8c8e; + --brief-color: hsla(0, 0%, 100%, 0.4); + --copy-icon-color: hsla(0, 0%, 100%, 0.6); + --copy-icon-hover-color: #fff; + + --active-tab-border-color: var(--default-font-color); + --inactive-tab-border-color: hsla(0, 0%, 100%, 0.4); + + --active-section-color: var(--default-font-color); + --inactive-section-color: hsla(0, 0%, 100%, 0.4); + + --navigation-highlight-color: rgba(255, 255, 255, 0.05); + --footer-background: hsla(0, 0%, 100%, 0.05); + --footer-font-color: hsla(0, 0%, 100%, 0.6); + --footer-go-to-top-color: var(--footer-font-color); + + --sidemenu-section-active-color: var(--color-dark); +} +/* /---dark theme --- */ + +.root { + display: flex; + flex-direction: column; + height: 100%; +} + +/* --- Navigation styles --- */ +.navigation { + display: flex; + justify-content: space-between; + + color: #fff; + background-color: var(--color-dark); + font-family: var(--default-font-family); + letter-spacing: -0.1px; + + /* Reset margin and use padding for border */ + margin-left: 0; + margin-right: 0; + padding: 10px var(--horizontal-spacing-for-content); + + z-index: 4; +} + +.navigation--inner { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + flex: 1 1 auto; +} + +.navigation--inner, .navigation-title { + min-height: 40px; +} + +.navigation-title, .filter-section { + align-items: center; +} + +.navigation-title { + display: flex; + align-items: center; +} + +/* --- Navigation MENU --- */ +.menu-toggle { + color: var(--background-color); + line-height: 0; + font-size: 0; + text-indent: -9999px; + + background: transparent; + border: none; + padding: 0; + margin-right: 16px; + outline: none; + + transition: margin .2s ease-out; + z-index: 5; +} + +@media (min-width: 760px) { + .menu-toggle { + display: none; + } +} + +.menu-toggle::before { + display: block; + content: ''; + background: url('../images/burger.svg') no-repeat center; + height: 28px; + width: 28px; +} +/* /--- Navigation MENU --- */ + +.library-version { + position: relative; + top: -4px; + margin-left: 3px; + + color: rgba(255,255,255,.7); + font-size: 13px; + font-weight: normal; + line-height: 16px; +} + +.filter-section { + z-index: 0; +} + +.no-js .filter-section { + display: none; +} + +@media (min-width: 760px) { + .filter-section { + padding: 5px 0 5px; + } +} +/* --- Navigation controls --- */ +.navigation-controls { + display: flex; +} + +@media (min-width: 760px) { + .navigation-controls { + align-items: center; + } +} + +.no-js .navigation-controls { + display: none; +} + +/* --- Navigation THEME --- */ +.navigation-controls--search { + display: inline-flex; + font-size: 0; + line-height: 0; +} + +.navigation-controls--theme { + display: block; + border-radius: 50%; + background-color: inherit; + margin-left: 4px; + padding: 0; + border: none; + cursor: pointer; + font-size: 0; + line-height: 0; +} + +.navigation-controls--theme::before { + height: 40px; + width: 40px; +} + +.navigation-controls--theme:hover { + background: var(--white-10); +} + +.navigation-controls--theme::before { + display: block; + content: url("../images/theme-toggle.svg"); +} + +@media (max-width: 759px) { + .navigation-controls--theme { + display: none; + } +} +/* /--- Navigation THEME --- */ + +.navigation .platform-selector:not([data-active]) { + color: #fff; +} +/* /--- Navigation controls --- */ +/* /--- Navigation styles --- */ + +/* --- Layout styles --- */ + +#container { + display: flex; + flex: 1 1 auto; + min-height: 0; /* full height exclude header */ +} + +#container > .sidebar, #container > #main { + overflow: auto; +} + +#main { + display: flex; + flex-direction: column; + flex: 1 1 0; /* full width, but no affects for sidebar */ +} + +.sidebar { + display: flex; + flex-direction: column; + box-sizing: border-box; + border-right: 1px solid var(--border-color); + width: var(--sidebar-width); +} + +.no-js .sidebar { + display: none; +} + +@media (max-width: 759px) { + #container { + position: relative; + } + + .sidebar { + position: absolute; + top: 0; + bottom: 0; + box-sizing: border-box; + background: var(--background-color); + margin-left: calc(-1 * var(--sidebar-width)); + transition: margin .2s ease-out; + z-index: 4; + } + + .sidebar.open { + margin-left: 0; + } + + .sidebar.open ~ #main .navigation-controls--search { + display: none; + } + + .sidebar.open ~ #main .menu-toggle { + margin-left: var(--sidebar-width); + } +} + +.sidebar--inner { + font-size: 12px; + font-weight: 400; + line-height: 16px; + padding-top: 22px; + padding-bottom: 16px; +} +/* /--- Layout styles --- */ + +/* --- Main Content styles --- */ +.main-content { + padding-bottom: var(--bottom-spacing); + margin-left: auto; + margin-right: auto; + max-width: var(--max-width); + width: 100%; + z-index: 0; +} + +.main-content > * { + margin-left: var(--horizontal-spacing-for-content); + margin-right: var(--horizontal-spacing-for-content); +} + +.main-content .content > hr { + margin: 30px 0; + border-top: 3px double #8c8b8b; +} + +.main-content :is(h1, h2) { + font-weight: 530; +} +/* /--- Main Content styles --- */ + +/* /--- Breadcrumbs styles --- */ +.breadcrumbs, .breadcrumbs a, .breadcrumbs a:hover { + margin-top: var(--breadcrumb-margin); + color: var(--breadcrumb-font-color); + overflow-wrap: break-word; +} + +.breadcrumbs .delimiter { + margin: auto 2px; +} + +.breadcrumbs .current { + color: var(--default-font-color); +} +/* /--- Breadcrumbs styles --- */ + +.tabs-section, +.platform-hinted > .platform-bookmarks-row { + margin-left: -8px; + margin-right: -8px; +} + +.section-tab, +.platform-hinted > .platform-bookmarks-row > .platform-bookmark { + border: 0; + padding: 11px 3px; + margin: 0 8px; + cursor: pointer; + outline: none; + font-size: var(--default-font-size); + background-color: transparent; + color: var(--inactive-section-color); + border-bottom: 1px solid var(--inactive-tab-border-color); +} + +.platform-hinted > .platform-bookmarks-row { + margin-bottom: 16px; +} + +.no-js .platform-bookmarks-row + .sourceset-dependent-content { + margin-top: 8px; +} + +.no-js .platform-bookmarks-row + .sourceset-dependent-content:last-of-type { + margin-top: 0; +} + +.section-tab:hover { + color: var(--default-font-color); + border-bottom: 2px solid var(--default-font-color); +} + +.section-tab[data-active=''] { + color: var(--active-section-color); + border-bottom: 2px solid var(--active-tab-border-color); +} + +.tabs-section-body > div { + margin-top: 12px; +} + +.tabs-section-body .with-platform-tabs { + padding-top: 12px; + padding-bottom: 12px; +} + +.cover > .platform-hinted { + padding-bottom: 12px; +} + +.cover { + display: flex; + flex-direction: column; +} + +.cover .platform-hinted.with-platform-tabs .sourceset-dependent-content > .block ~ .symbol { + padding-top: 16px; + padding-left: 0; +} + +.cover .sourceset-dependent-content > .block { + padding: 16px 0; + font-size: 18px; + line-height: 28px; +} + +.cover .platform-hinted.with-platform-tabs .sourceset-dependent-content > .block { + padding: 0; + font-size: var(--default-font-size); +} + +.cover ~ .divergent-group { + margin-top: 24px; + padding: 24px 8px 8px 8px; +} + +.cover ~ .divergent-group .main-subrow .symbol { + width: 100%; +} + +.main-content p.paragraph, +.sample-container, blockquote, +.content > .symbol { + margin-top: 8px; +} + +blockquote, +.content > .symbol:first-of-type, +p.paragraph:first-child, +.brief p.paragraph { + margin-top: 0; +} + +.content .kdoc-tag > p.paragraph { + margin-top: 0; +} + +.content h4 { + margin-bottom: 0; +} + +.divergent-group { + background-color: var(--background-color); + padding: 16px 0 8px 0; + margin-bottom: 2px; +} + +.divergent-group .table-row, tbody > tr { + border-bottom: 1px solid var(--border-color); +} + +.divergent-group .table-row:last-of-type, tbody > tr:last-of-type { + border-bottom: none; +} + +.title > .divergent-group:first-of-type { + padding-top: 0; +} + +.sample-container, div.CodeMirror { + position: relative; + display: flex; + flex-direction: column; +} + +code.paragraph { + display: block; +} + +.overview > .navButton { + position: absolute; + align-items: center; + display: flex; + justify-content: flex-end; + padding: 2px 2px 2px 0; + margin-right: 5px; + cursor: pointer; +} + +.strikethrough { + text-decoration: line-through; +} + +.symbol:empty { + padding: 0; +} + +.symbol:not(.token), code { + background-color: var(--code-background); + align-items: center; + box-sizing: border-box; + white-space: pre-wrap; + font-family: var(--default-monospace-font-family); + font-size: var(--default-font-size); +} + +.symbol:not(.token), code.block { + display: block; + padding: 12px 32px 12px 12px; + border-radius: 8px; + line-height: 24px; + position: relative; +} + +code { + overflow-x: auto; + max-width: 100%; +} + +code:not(.block) { + display: inline-block; + vertical-align: middle; +} + +.symbol > a { + color: var(--hover-link-color); +} + +.copy-icon { + cursor: pointer; +} + +.sample-container span.copy-icon { + display: none; +} + +.js .sample-container:hover span.copy-icon { + display: inline-block; +} + +.sample-container span.copy-icon::before { + width: 24px; + height: 24px; + display: inline-block; + content: ''; + /* masks are required if you want to change color of the icon dynamically instead of using those provided with the SVG */ + -webkit-mask: url("../images/copy-icon.svg") no-repeat 50% 50%; + mask: url("../images/copy-icon.svg") no-repeat 50% 50%; + -webkit-mask-size: cover; + mask-size: cover; + background-color: var(--copy-icon-color); +} + +.sample-container span.copy-icon:hover::before { + background-color: var(--copy-icon-hover-color); +} + +.copy-popup-wrapper { + display: none; + align-items: center; + position: absolute; + z-index: 1000; + background: var(--background-color); + font-weight: normal; + font-family: var(--default-font-family); + width: max-content; + font-size: var(--default-font-size); + cursor: default; + border: 1px solid #D8DCE1; + box-sizing: border-box; + box-shadow: 0 5px 10px var(--ring-popup-shadow-color); + border-radius: 3px; + color: var(--default-font-color); +} + +.copy-popup-wrapper > .copy-popup-icon::before { + content: url("../images/copy-successful-icon.svg"); + padding: 8px; +} + +.copy-popup-wrapper > .copy-popup-icon { + position: relative; + top: 3px; +} + +.copy-popup-wrapper.popup-to-left { + /* since it is in position absolute we can just move it to the left to make it always appear on the left side of the icon */ + left: -15em; +} + +.table-row:hover .copy-popup-wrapper.active-popup, +.sample-container:hover .copy-popup-wrapper.active-popup { + display: flex !important; +} + +.copy-popup-wrapper:hover { + font-weight: normal; +} + +.copy-popup-wrapper > span:last-child { + padding-right: 14px; +} + +.symbol .top-right-position, .sample-container .top-right-position { + /* it is important for a parent to have a position: relative */ + position: absolute; + top: 8px; + right: 8px; +} + +.sideMenuPart > .overview { + display: flex; + align-items: center; + position: relative; + user-select: none; /* there's a weird bug with text selection */ + padding: 8px 0; +} + +.sideMenuPart a { + display: block; + align-items: center; + color: var(--default-font-color); + overflow: hidden; + padding-left: 23px; +} + +.sideMenuPart a:hover { + text-decoration: none; + color: var(--default-font-color); +} + +.sideMenuPart > .overview:before { + box-sizing: border-box; + content: ''; + top: 0; + width: var(--sidebar-width); + right: 0; + bottom: 0; + position: absolute; + z-index: -1; +} + +.overview:hover:before { + background-color: var(--navigation-highlight-color); +} + +#nav-submenu { + padding-left: 24px; +} + +.sideMenuPart { + padding-left: 12px; + box-sizing: border-box; +} + +.sideMenuPart.hidden > .overview .navButtonContent::before { + transform: rotate(0deg); +} + +.sideMenuPart > .overview .navButtonContent::before { + content: ''; + + -webkit-mask: url("../images/arrow_down.svg") no-repeat 50% 50%; + mask: url("../images/arrow_down.svg") no-repeat 50% 50%; + -webkit-mask-size: cover; + mask-size: cover; + background-color: var(--default-font-color); + + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + transform: rotate(90deg); + width: 16px; + height: 16px; +} + +.sideMenuPart[data-active] > .overview .navButtonContent::before { + background-color: var(--default-white); +} + +.sideMenuPart.hidden > .navButton .navButtonContent::after { + content: '\02192'; +} + +.sideMenuPart.hidden > .sideMenuPart { + display: none; +} + +.overview .nav-link-grid { + display: grid; + grid-template-columns: 16px auto; /* first is the icon, then name */ + grid-gap: 6px; + align-items: center; +} + +.nav-icon { + width: 16px; + height: 16px; +} + +.nav-icon.class::before { + content: url("../images/nav-icons/class.svg"); +} + +.nav-icon.class-kt::before { + content: url("../images/nav-icons/class-kotlin.svg"); +} + +.nav-icon.function::before { + content: url("../images/nav-icons/function.svg"); +} + +.nav-icon.enum-class::before { + content: url("../images/nav-icons/enum.svg"); +} + +.nav-icon.enum-class-kt::before { + content: url("../images/nav-icons/enum-kotlin.svg"); +} + +.nav-icon.annotation-class::before { + content: url("../images/nav-icons/annotation.svg"); +} + +.nav-icon.annotation-class-kt::before { + content: url("../images/nav-icons/annotation-kotlin.svg"); +} + +.nav-icon.abstract-class::before { + content: url("../images/nav-icons/abstract-class.svg"); +} + +.nav-icon.abstract-class-kt::before { + content: url("../images/nav-icons/abstract-class-kotlin.svg"); +} + +.nav-icon.exception-class::before { + content: url("../images/nav-icons/exception-class.svg"); +} + +.nav-icon.interface::before { + content: url("../images/nav-icons/interface.svg"); +} + +.nav-icon.interface-kt::before { + content: url("../images/nav-icons/interface-kotlin.svg"); +} + +.nav-icon.object::before { + content: url("../images/nav-icons/object.svg"); +} + +.nav-icon.typealias-kt::before { + content: url("../images/nav-icons/typealias-kotlin.svg"); +} + +.nav-icon.val::before { + content: url("../images/nav-icons/field-value.svg"); +} + +.nav-icon.var::before { + content: url("../images/nav-icons/field-variable.svg"); +} + +.filtered > a, .filtered > .navButton { + display: none; +} + + +.brief { + white-space: pre-wrap; + overflow: hidden; +} + +h1.cover { + font-size: 52px; + line-height: 56px; + letter-spacing: -1.5px; + margin-bottom: 0; + padding-bottom: 32px; + display: block; +} + +@media (max-width: 1119px) { + h1.cover { + font-size: 48px; + line-height: 48px; + padding-bottom: 8px; + } +} + +@media (max-width: 759px) { + h1.cover { + font-size: 32px; + line-height: 32px; + } +} + +.UnderCoverText { + font-size: 16px; + line-height: 28px; +} + +.UnderCoverText code { + font-size: inherit; +} + +.UnderCoverText table { + margin: 8px 0 8px 0; + word-break: break-word; +} + +@media (max-width: 960px) { + .UnderCoverText table { + display: block; + word-break: normal; + overflow: auto; + } +} + +.main-content a:not([data-name]) { + padding-bottom: 2px; + border-bottom: 1px solid var(--border-color); + cursor: pointer; + text-decoration: none; + color: inherit; + font-size: inherit; + line-height: inherit; + transition: color .1s, border-color .1s; +} + +.main-content a:hover { + border-bottom-color: unset; + color: inherit +} + +a small { + font-size: 11px; + margin-top: -0.6em; + display: block; +} + +p.paragraph img { + display: block; +} + +.deprecation-content { + margin: 20px 10px; + border:1px solid var(--border-color); + padding: 13px 15px 16px 15px; +} + +.deprecation-content > h3 { + margin-top: 0; + margin-bottom: 0; +} + +.deprecation-content > h4 { + font-size: 16px; + margin-top: 15px; + margin-bottom: 0; +} + +.deprecation-content code.block { + padding: 5px 10px; + display: inline-block; +} + +.deprecation-content .footnote { + margin-left: 25px; + font-size: 13px; + font-weight: bold; + display: block; +} + +.deprecation-content .footnote > p { + margin: 0; +} + +[data-filterable-current=''] { + display: none !important; +} + +.platform-tags, .filter-section { + display: flex; + flex-wrap: wrap; + margin-bottom: -8px; + margin-left: -4px; +} + +.platform-tag { + --platform-tag-color: #bababb; + border: 0 none; + margin-right: 4px; + margin-bottom: 8px; + + font-family: var(--default-font-family); + font-size: 13px; + line-height: 1.5; + text-transform: capitalize; +} + +.platform-tag.js-like, .platform-tag.jvm-like, .platform-tag.wasm-like { + text-transform: uppercase; +} + +.filter-section .platform-tag { + cursor: pointer; + border-radius: 4px; + padding: 2px 16px; +} + +.filter-section .platform-tag.jvm-like[data-active], .platform-tags .platform-tag.jvm-like { + --platform-tag-color: #4dbb5f; +} + +.filter-section .platform-tag.js-like[data-active], .platform-tags .platform-tag.js-like { + --platform-tag-color: #ffc700; +} + +.filter-section .platform-tag.native-like[data-active], .platform-tags .platform-tag.native-like { + --platform-tag-color: #E082F3; +} + +.filter-section .platform-tag.wasm-like[data-active], .platform-tags .platform-tag.wasm-like { + --platform-tag-color: #9585F9; +} + +.filter-section .platform-tag[data-active]:hover { + color: #fff; + background-color: rgba(186, 186, 187, .7); +} + +.filter-section .platform-tag:not([data-active]) { + color: #fff; + /* Safari doesn't work correctly for `outline` with `border-radius` */ + /* outline: 1px solid rgba(255,255,255,.6); */ + /* ...use `box-shadow` instead: */ + box-shadow: 0 0 0 1px rgb(255 255 255 / 60%); + background-color: rgba(255,255,255,.05); +} + +.filter-section .platform-tag[data-active] { + color: #19191c; + background-color: var(--platform-tag-color); +} + +.platform-tags .platform-tag { + display: flex; + align-items: center; +} + +.platform-tags .platform-tag::before { + display: inline-block; + content: ''; + border-radius: 50%; + background: var(--platform-tag-color); + margin: 0 4px 0 8px; + height: 8px; + width: 8px; + + font-size: 13px; + line-height: 1.6; +} + +td.content { + padding-left: 24px; + padding-top: 16px; + display: flex; + flex-direction: column; +} + +.main-subrow { + display: flex; + flex-direction: row; + padding: 0; + flex-wrap: wrap; +} + +.main-subrow > div { + margin-bottom: 8px; +} + +.main-subrow > div > span { + display: flex; + position: relative; +} + +.js .main-subrow:hover .anchor-icon { + opacity: 1; + transition: 0.2s; +} + +.main-subrow .anchor-icon { + opacity: 0; + transition: 0.2s 0.5s; +} + +.main-subrow .anchor-icon::before { + content: url("../images/anchor-copy-button.svg"); +} + +.main-subrow .anchor-icon:hover { + cursor: pointer; +} + +.main-subrow .anchor-icon:hover > svg path { + fill: var(--hover-link-color); +} + +@media (hover: none) { + .main-subrow .anchor-icon { + display: none; + } +} + +.main-subrow .anchor-wrapper { + position: relative; + width: 24px; + height: 16px; + margin-left: 3px; +} + +.inline-flex { + display: inline-flex; +} + +.platform-hinted { + flex: auto; + display: block; +} + +.platform-hinted > .platform-bookmarks-row > .platform-bookmark { + min-width: 64px; + background: inherit; + flex: none; + order: 5; + align-self: flex-start; +} + +.platform-hinted > .platform-bookmarks-row > .platform-bookmark:hover { + color: var(--default-font-color); + border-bottom: 2px solid var(--default-font-color); +} + +.platform-hinted > .platform-bookmarks-row > .platform-bookmark[data-active=''] { + border-bottom: 2px solid var(--active-tab-border-color); + color: var(--active-section-color); +} + +.no-js .platform-bookmarks-row, .no-js .tabs-section { + display: none; +} + +.js .platform-hinted > .content:not([data-active]), +.js .tabs-section-body *[data-togglable]:not([data-active]) { + display: none; +} + +/* Work around an issue: https://github.com/JetBrains/kotlin-playground/issues/91 +Applies for main description blocks with platform tabs. +Just in case of possible performance degradation it excluding tabs with briefs on classlike page */ +#content > div:not(.tabbedcontent) .sourceset-dependent-content:not([data-active]) { + display: block !important; + visibility: hidden; + height: 0; + position: fixed; + top: 0; +} + +.with-platform-tags { + display: flex; +} + +.with-platform-tags ~ .main-subrow { + padding-top: 8px; +} + +.cover .with-platform-tabs { + font-size: var(--default-font-size); +} + +.cover > .with-platform-tabs > .content { + padding: 8px 16px; + border: 1px solid var(--border-color); +} + +.cover > .block { + padding-top: 48px; + padding-bottom: 24px; + font-size: 18px; + line-height: 28px; +} + +.cover > .block:empty { + padding-bottom: 0; +} + +.parameters.wrapped > .parameter { + display: block; +} + +.table-row .inline-comment { + padding-top: 8px; + padding-bottom: 8px; +} + +.table-row .platform-hinted .sourceset-dependent-content .brief, +.table-row .platform-hinted .sourceset-dependent-content .inline-comment { + padding: 8px; +} + +.sideMenuPart[data-active] > .overview:before { + background: var(--sidemenu-section-active-color); +} + +.sideMenuPart[data-active] > .overview > a { + color: var(--default-white); +} + +.table { + display: flex; + flex-direction: column; +} + +.table-row { + display: flex; + flex-direction: column; + border-bottom: 1px solid var(--border-color); + padding: 11px 0 12px 0; + background-color: var(--background-color); +} + +.table-row:last-of-type { + border-bottom: none; +} + +.table-row .brief-comment { + color: var(--brief-color); +} + +.platform-dependent-row { + display: grid; + padding-top: 8px; +} + +.title-row { + display: grid; + grid-template-columns: auto auto 7em; + width: 100%; +} + +@media print, (min-width: 960px) { + .title-row { + grid-template-columns: 20% auto 7em; + } +} + +.keyValue { + display: grid; + grid-gap: 8px; +} + +@media print, (min-width: 960px) { + .keyValue { + grid-template-columns: 20% 80%; + } + .keyValue > div:first-child { + word-break: break-word; + } +} + +@media print, (max-width: 960px) { + div.wrapper { + width: auto; + margin: 0; + } + + header, section, footer { + float: none; + position: static; + width: auto; + } + + header { + padding-right: 320px; + } + + section { + border: 1px solid #e5e5e5; + border-width: 1px 0; + padding: 20px 0; + margin: 0 0 20px; + } + + header a small { + display: inline; + } + + header ul { + position: absolute; + right: 50px; + top: 52px; + } +} + +.anchor-highlight { + border: 1px solid var(--hover-link-color) !important; + box-shadow: 0 0 0 0.2em #c8e1ff; + margin-top: 0.2em; + margin-bottom: 0.2em; +} + +.filtered-message { + margin: 25px; + font-size: 20px; + font-weight: bolder; +} + +div.runnablesample { + height: fit-content; +} + +/* --- footer --- */ +.footer { + clear: both; + display: flex; + align-items: center; + position: relative; + min-height: var(--footer-height); + font-size: 12px; + line-height: 16px; + letter-spacing: 0.2px; + color: var(--footer-font-color); + margin-top: auto; + background-color: var(--footer-background); +} + +.footer span.go-to-top-icon { + border-radius: 2em; + padding: 11px 10px !important; + background-color: var(--footer-go-to-top-color); +} + +.footer span.go-to-top-icon > a::before { + content: url("../images/go-to-top-icon.svg"); +} + +.footer > span:first-child { + margin-left: var(--horizontal-spacing-for-content); + padding-left: 0; +} + +.footer > span:last-child { + margin-right: var(--horizontal-spacing-for-content); + padding-right: 0; +} + +.footer > span { + padding: 0 16px; +} + +.footer a { + color: var(--breadcrumb-font-color); +} + +.footer span.go-to-top-icon > #go-to-top-link { + padding: 0; + border: none; +} + +.footer .padded-icon { + padding-left: 0.5em; +} + +.footer .padded-icon::before { + content: url("../images/footer-go-to-link.svg"); +} +/* /--- footer --- */ + +/* Logo styles */ +:root { + --dokka-logo-image-url: url('../images/logo-icon.svg'); + --dokka-logo-height: 50px; + --dokka-logo-width: 50px; +} + +.library-name--link { + display: flex; + align-items: center; + color: #fff; + font-weight: 530; +} + +.library-name--link::before { + content: ''; + background: var(--dokka-logo-image-url) center no-repeat; + background-size: var(--dokka-logo-height) var(--dokka-logo-width); + margin-right: 5px; + width: var(--dokka-logo-height); + height: var(--dokka-logo-width); +} + +@media (max-width: 759px) { + .library-name--link::before { + display: none; + } +} +/* / Logo styles */ + +/* +the hack to hide the headers inside tabs for a package page because each tab +has only one header, and the header text is the same as the tab name, so no point in showing it +*/ +.main-content[data-page-type="package"] .tabs-section-body h2 { + display: none; +} diff --git a/assets/favicon.png b/assets/favicon.png new file mode 100644 index 00000000..abad3cb5 Binary files /dev/null and b/assets/favicon.png differ diff --git a/assets/images/favicon.png b/assets/images/favicon.png new file mode 100644 index 00000000..1cf13b9f Binary files /dev/null and b/assets/images/favicon.png differ diff --git a/assets/javascripts/bundle.8492ddcf.min.js b/assets/javascripts/bundle.8492ddcf.min.js new file mode 100644 index 00000000..e606437c --- /dev/null +++ b/assets/javascripts/bundle.8492ddcf.min.js @@ -0,0 +1,29 @@ +"use strict";(()=>{var aa=Object.create;var wr=Object.defineProperty;var sa=Object.getOwnPropertyDescriptor;var ca=Object.getOwnPropertyNames,kt=Object.getOwnPropertySymbols,fa=Object.getPrototypeOf,Er=Object.prototype.hasOwnProperty,fn=Object.prototype.propertyIsEnumerable;var cn=(e,t,r)=>t in e?wr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,H=(e,t)=>{for(var r in t||(t={}))Er.call(t,r)&&cn(e,r,t[r]);if(kt)for(var r of kt(t))fn.call(t,r)&&cn(e,r,t[r]);return e};var un=(e,t)=>{var r={};for(var n in e)Er.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&kt)for(var n of kt(e))t.indexOf(n)<0&&fn.call(e,n)&&(r[n]=e[n]);return r};var yt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var ua=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ca(t))!Er.call(e,o)&&o!==r&&wr(e,o,{get:()=>t[o],enumerable:!(n=sa(t,o))||n.enumerable});return e};var Ye=(e,t,r)=>(r=e!=null?aa(fa(e)):{},ua(t||!e||!e.__esModule?wr(r,"default",{value:e,enumerable:!0}):r,e));var ln=yt((Sr,pn)=>{(function(e,t){typeof Sr=="object"&&typeof pn!="undefined"?t():typeof define=="function"&&define.amd?define(t):t()})(Sr,function(){"use strict";function e(r){var n=!0,o=!1,i=null,s={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function a(_){return!!(_&&_!==document&&_.nodeName!=="HTML"&&_.nodeName!=="BODY"&&"classList"in _&&"contains"in _.classList)}function c(_){var We=_.type,Fe=_.tagName;return!!(Fe==="INPUT"&&s[We]&&!_.readOnly||Fe==="TEXTAREA"&&!_.readOnly||_.isContentEditable)}function f(_){_.classList.contains("focus-visible")||(_.classList.add("focus-visible"),_.setAttribute("data-focus-visible-added",""))}function u(_){!_.hasAttribute("data-focus-visible-added")||(_.classList.remove("focus-visible"),_.removeAttribute("data-focus-visible-added"))}function p(_){_.metaKey||_.altKey||_.ctrlKey||(a(r.activeElement)&&f(r.activeElement),n=!0)}function l(_){n=!1}function d(_){!a(_.target)||(n||c(_.target))&&f(_.target)}function h(_){!a(_.target)||(_.target.classList.contains("focus-visible")||_.target.hasAttribute("data-focus-visible-added"))&&(o=!0,window.clearTimeout(i),i=window.setTimeout(function(){o=!1},100),u(_.target))}function b(_){document.visibilityState==="hidden"&&(o&&(n=!0),U())}function U(){document.addEventListener("mousemove",W),document.addEventListener("mousedown",W),document.addEventListener("mouseup",W),document.addEventListener("pointermove",W),document.addEventListener("pointerdown",W),document.addEventListener("pointerup",W),document.addEventListener("touchmove",W),document.addEventListener("touchstart",W),document.addEventListener("touchend",W)}function G(){document.removeEventListener("mousemove",W),document.removeEventListener("mousedown",W),document.removeEventListener("mouseup",W),document.removeEventListener("pointermove",W),document.removeEventListener("pointerdown",W),document.removeEventListener("pointerup",W),document.removeEventListener("touchmove",W),document.removeEventListener("touchstart",W),document.removeEventListener("touchend",W)}function W(_){_.target.nodeName&&_.target.nodeName.toLowerCase()==="html"||(n=!1,G())}document.addEventListener("keydown",p,!0),document.addEventListener("mousedown",l,!0),document.addEventListener("pointerdown",l,!0),document.addEventListener("touchstart",l,!0),document.addEventListener("visibilitychange",b,!0),U(),r.addEventListener("focus",d,!0),r.addEventListener("blur",h,!0),r.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&r.host?r.host.setAttribute("data-js-focus-visible",""):r.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if(typeof window!="undefined"&&typeof document!="undefined"){window.applyFocusVisiblePolyfill=e;var t;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(r){t=document.createEvent("CustomEvent"),t.initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}typeof document!="undefined"&&e(document)})});var mn=yt(Or=>{(function(e){var t=function(){try{return!!Symbol.iterator}catch(f){return!1}},r=t(),n=function(f){var u={next:function(){var p=f.shift();return{done:p===void 0,value:p}}};return r&&(u[Symbol.iterator]=function(){return u}),u},o=function(f){return encodeURIComponent(f).replace(/%20/g,"+")},i=function(f){return decodeURIComponent(String(f).replace(/\+/g," "))},s=function(){var f=function(p){Object.defineProperty(this,"_entries",{writable:!0,value:{}});var l=typeof p;if(l!=="undefined")if(l==="string")p!==""&&this._fromString(p);else if(p instanceof f){var d=this;p.forEach(function(G,W){d.append(W,G)})}else if(p!==null&&l==="object")if(Object.prototype.toString.call(p)==="[object Array]")for(var h=0;hd[0]?1:0}),f._entries&&(f._entries={});for(var p=0;p1?i(d[1]):"")}})})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Or);(function(e){var t=function(){try{var o=new e.URL("b","http://a");return o.pathname="c d",o.href==="http://a/c%20d"&&o.searchParams}catch(i){return!1}},r=function(){var o=e.URL,i=function(c,f){typeof c!="string"&&(c=String(c)),f&&typeof f!="string"&&(f=String(f));var u=document,p;if(f&&(e.location===void 0||f!==e.location.href)){f=f.toLowerCase(),u=document.implementation.createHTMLDocument(""),p=u.createElement("base"),p.href=f,u.head.appendChild(p);try{if(p.href.indexOf(f)!==0)throw new Error(p.href)}catch(_){throw new Error("URL unable to set base "+f+" due to "+_)}}var l=u.createElement("a");l.href=c,p&&(u.body.appendChild(l),l.href=l.href);var d=u.createElement("input");if(d.type="url",d.value=c,l.protocol===":"||!/:/.test(l.href)||!d.checkValidity()&&!f)throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:l});var h=new e.URLSearchParams(this.search),b=!0,U=!0,G=this;["append","delete","set"].forEach(function(_){var We=h[_];h[_]=function(){We.apply(h,arguments),b&&(U=!1,G.search=h.toString(),U=!0)}}),Object.defineProperty(this,"searchParams",{value:h,enumerable:!0});var W=void 0;Object.defineProperty(this,"_updateSearchParams",{enumerable:!1,configurable:!1,writable:!1,value:function(){this.search!==W&&(W=this.search,U&&(b=!1,this.searchParams._fromString(this.search),b=!0))}})},s=i.prototype,a=function(c){Object.defineProperty(s,c,{get:function(){return this._anchorElement[c]},set:function(f){this._anchorElement[c]=f},enumerable:!0})};["hash","host","hostname","port","protocol"].forEach(function(c){a(c)}),Object.defineProperty(s,"search",{get:function(){return this._anchorElement.search},set:function(c){this._anchorElement.search=c,this._updateSearchParams()},enumerable:!0}),Object.defineProperties(s,{toString:{get:function(){var c=this;return function(){return c.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(c){this._anchorElement.href=c,this._updateSearchParams()},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(c){this._anchorElement.pathname=c},enumerable:!0},origin:{get:function(){var c={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],f=this._anchorElement.port!=c&&this._anchorElement.port!=="";return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(f?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(c){},enumerable:!0},username:{get:function(){return""},set:function(c){},enumerable:!0}}),i.createObjectURL=function(c){return o.createObjectURL.apply(o,arguments)},i.revokeObjectURL=function(c){return o.revokeObjectURL.apply(o,arguments)},e.URL=i};if(t()||r(),e.location!==void 0&&!("origin"in e.location)){var n=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:n,enumerable:!0})}catch(o){setInterval(function(){e.location.origin=n()},100)}}})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Or)});var Pn=yt((Ks,$t)=>{/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */var dn,hn,bn,vn,gn,yn,xn,wn,En,Ht,_r,Sn,On,_n,rt,Tn,Mn,Ln,An,Cn,Rn,kn,Hn,Pt;(function(e){var t=typeof global=="object"?global:typeof self=="object"?self:typeof this=="object"?this:{};typeof define=="function"&&define.amd?define("tslib",["exports"],function(n){e(r(t,r(n)))}):typeof $t=="object"&&typeof $t.exports=="object"?e(r(t,r($t.exports))):e(r(t));function r(n,o){return n!==t&&(typeof Object.create=="function"?Object.defineProperty(n,"__esModule",{value:!0}):n.__esModule=!0),function(i,s){return n[i]=o?o(i,s):s}}})(function(e){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])};dn=function(n,o){if(typeof o!="function"&&o!==null)throw new TypeError("Class extends value "+String(o)+" is not a constructor or null");t(n,o);function i(){this.constructor=n}n.prototype=o===null?Object.create(o):(i.prototype=o.prototype,new i)},hn=Object.assign||function(n){for(var o,i=1,s=arguments.length;i=0;u--)(f=n[u])&&(c=(a<3?f(c):a>3?f(o,i,c):f(o,i))||c);return a>3&&c&&Object.defineProperty(o,i,c),c},gn=function(n,o){return function(i,s){o(i,s,n)}},yn=function(n,o){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,o)},xn=function(n,o,i,s){function a(c){return c instanceof i?c:new i(function(f){f(c)})}return new(i||(i=Promise))(function(c,f){function u(d){try{l(s.next(d))}catch(h){f(h)}}function p(d){try{l(s.throw(d))}catch(h){f(h)}}function l(d){d.done?c(d.value):a(d.value).then(u,p)}l((s=s.apply(n,o||[])).next())})},wn=function(n,o){var i={label:0,sent:function(){if(c[0]&1)throw c[1];return c[1]},trys:[],ops:[]},s,a,c,f;return f={next:u(0),throw:u(1),return:u(2)},typeof Symbol=="function"&&(f[Symbol.iterator]=function(){return this}),f;function u(l){return function(d){return p([l,d])}}function p(l){if(s)throw new TypeError("Generator is already executing.");for(;i;)try{if(s=1,a&&(c=l[0]&2?a.return:l[0]?a.throw||((c=a.return)&&c.call(a),0):a.next)&&!(c=c.call(a,l[1])).done)return c;switch(a=0,c&&(l=[l[0]&2,c.value]),l[0]){case 0:case 1:c=l;break;case 4:return i.label++,{value:l[1],done:!1};case 5:i.label++,a=l[1],l=[0];continue;case 7:l=i.ops.pop(),i.trys.pop();continue;default:if(c=i.trys,!(c=c.length>0&&c[c.length-1])&&(l[0]===6||l[0]===2)){i=0;continue}if(l[0]===3&&(!c||l[1]>c[0]&&l[1]=n.length&&(n=void 0),{value:n&&n[s++],done:!n}}};throw new TypeError(o?"Object is not iterable.":"Symbol.iterator is not defined.")},_r=function(n,o){var i=typeof Symbol=="function"&&n[Symbol.iterator];if(!i)return n;var s=i.call(n),a,c=[],f;try{for(;(o===void 0||o-- >0)&&!(a=s.next()).done;)c.push(a.value)}catch(u){f={error:u}}finally{try{a&&!a.done&&(i=s.return)&&i.call(s)}finally{if(f)throw f.error}}return c},Sn=function(){for(var n=[],o=0;o1||u(b,U)})})}function u(b,U){try{p(s[b](U))}catch(G){h(c[0][3],G)}}function p(b){b.value instanceof rt?Promise.resolve(b.value.v).then(l,d):h(c[0][2],b)}function l(b){u("next",b)}function d(b){u("throw",b)}function h(b,U){b(U),c.shift(),c.length&&u(c[0][0],c[0][1])}},Mn=function(n){var o,i;return o={},s("next"),s("throw",function(a){throw a}),s("return"),o[Symbol.iterator]=function(){return this},o;function s(a,c){o[a]=n[a]?function(f){return(i=!i)?{value:rt(n[a](f)),done:a==="return"}:c?c(f):f}:c}},Ln=function(n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var o=n[Symbol.asyncIterator],i;return o?o.call(n):(n=typeof Ht=="function"?Ht(n):n[Symbol.iterator](),i={},s("next"),s("throw"),s("return"),i[Symbol.asyncIterator]=function(){return this},i);function s(c){i[c]=n[c]&&function(f){return new Promise(function(u,p){f=n[c](f),a(u,p,f.done,f.value)})}}function a(c,f,u,p){Promise.resolve(p).then(function(l){c({value:l,done:u})},f)}},An=function(n,o){return Object.defineProperty?Object.defineProperty(n,"raw",{value:o}):n.raw=o,n};var r=Object.create?function(n,o){Object.defineProperty(n,"default",{enumerable:!0,value:o})}:function(n,o){n.default=o};Cn=function(n){if(n&&n.__esModule)return n;var o={};if(n!=null)for(var i in n)i!=="default"&&Object.prototype.hasOwnProperty.call(n,i)&&Pt(o,n,i);return r(o,n),o},Rn=function(n){return n&&n.__esModule?n:{default:n}},kn=function(n,o,i,s){if(i==="a"&&!s)throw new TypeError("Private accessor was defined without a getter");if(typeof o=="function"?n!==o||!s:!o.has(n))throw new TypeError("Cannot read private member from an object whose class did not declare it");return i==="m"?s:i==="a"?s.call(n):s?s.value:o.get(n)},Hn=function(n,o,i,s,a){if(s==="m")throw new TypeError("Private method is not writable");if(s==="a"&&!a)throw new TypeError("Private accessor was defined without a setter");if(typeof o=="function"?n!==o||!a:!o.has(n))throw new TypeError("Cannot write private member to an object whose class did not declare it");return s==="a"?a.call(n,i):a?a.value=i:o.set(n,i),i},e("__extends",dn),e("__assign",hn),e("__rest",bn),e("__decorate",vn),e("__param",gn),e("__metadata",yn),e("__awaiter",xn),e("__generator",wn),e("__exportStar",En),e("__createBinding",Pt),e("__values",Ht),e("__read",_r),e("__spread",Sn),e("__spreadArrays",On),e("__spreadArray",_n),e("__await",rt),e("__asyncGenerator",Tn),e("__asyncDelegator",Mn),e("__asyncValues",Ln),e("__makeTemplateObject",An),e("__importStar",Cn),e("__importDefault",Rn),e("__classPrivateFieldGet",kn),e("__classPrivateFieldSet",Hn)})});var Br=yt((At,Yr)=>{/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */(function(t,r){typeof At=="object"&&typeof Yr=="object"?Yr.exports=r():typeof define=="function"&&define.amd?define([],r):typeof At=="object"?At.ClipboardJS=r():t.ClipboardJS=r()})(At,function(){return function(){var e={686:function(n,o,i){"use strict";i.d(o,{default:function(){return ia}});var s=i(279),a=i.n(s),c=i(370),f=i.n(c),u=i(817),p=i.n(u);function l(j){try{return document.execCommand(j)}catch(T){return!1}}var d=function(T){var O=p()(T);return l("cut"),O},h=d;function b(j){var T=document.documentElement.getAttribute("dir")==="rtl",O=document.createElement("textarea");O.style.fontSize="12pt",O.style.border="0",O.style.padding="0",O.style.margin="0",O.style.position="absolute",O.style[T?"right":"left"]="-9999px";var k=window.pageYOffset||document.documentElement.scrollTop;return O.style.top="".concat(k,"px"),O.setAttribute("readonly",""),O.value=j,O}var U=function(T,O){var k=b(T);O.container.appendChild(k);var $=p()(k);return l("copy"),k.remove(),$},G=function(T){var O=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},k="";return typeof T=="string"?k=U(T,O):T instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(T==null?void 0:T.type)?k=U(T.value,O):(k=p()(T),l("copy")),k},W=G;function _(j){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?_=function(O){return typeof O}:_=function(O){return O&&typeof Symbol=="function"&&O.constructor===Symbol&&O!==Symbol.prototype?"symbol":typeof O},_(j)}var We=function(){var T=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},O=T.action,k=O===void 0?"copy":O,$=T.container,q=T.target,Te=T.text;if(k!=="copy"&&k!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(q!==void 0)if(q&&_(q)==="object"&&q.nodeType===1){if(k==="copy"&&q.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(k==="cut"&&(q.hasAttribute("readonly")||q.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(Te)return W(Te,{container:$});if(q)return k==="cut"?h(q):W(q,{container:$})},Fe=We;function Pe(j){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Pe=function(O){return typeof O}:Pe=function(O){return O&&typeof Symbol=="function"&&O.constructor===Symbol&&O!==Symbol.prototype?"symbol":typeof O},Pe(j)}function Ji(j,T){if(!(j instanceof T))throw new TypeError("Cannot call a class as a function")}function sn(j,T){for(var O=0;O0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof $.action=="function"?$.action:this.defaultAction,this.target=typeof $.target=="function"?$.target:this.defaultTarget,this.text=typeof $.text=="function"?$.text:this.defaultText,this.container=Pe($.container)==="object"?$.container:document.body}},{key:"listenClick",value:function($){var q=this;this.listener=f()($,"click",function(Te){return q.onClick(Te)})}},{key:"onClick",value:function($){var q=$.delegateTarget||$.currentTarget,Te=this.action(q)||"copy",Rt=Fe({action:Te,container:this.container,target:this.target(q),text:this.text(q)});this.emit(Rt?"success":"error",{action:Te,text:Rt,trigger:q,clearSelection:function(){q&&q.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function($){return xr("action",$)}},{key:"defaultTarget",value:function($){var q=xr("target",$);if(q)return document.querySelector(q)}},{key:"defaultText",value:function($){return xr("text",$)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function($){var q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return W($,q)}},{key:"cut",value:function($){return h($)}},{key:"isSupported",value:function(){var $=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],q=typeof $=="string"?[$]:$,Te=!!document.queryCommandSupported;return q.forEach(function(Rt){Te=Te&&!!document.queryCommandSupported(Rt)}),Te}}]),O}(a()),ia=oa},828:function(n){var o=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function s(a,c){for(;a&&a.nodeType!==o;){if(typeof a.matches=="function"&&a.matches(c))return a;a=a.parentNode}}n.exports=s},438:function(n,o,i){var s=i(828);function a(u,p,l,d,h){var b=f.apply(this,arguments);return u.addEventListener(l,b,h),{destroy:function(){u.removeEventListener(l,b,h)}}}function c(u,p,l,d,h){return typeof u.addEventListener=="function"?a.apply(null,arguments):typeof l=="function"?a.bind(null,document).apply(null,arguments):(typeof u=="string"&&(u=document.querySelectorAll(u)),Array.prototype.map.call(u,function(b){return a(b,p,l,d,h)}))}function f(u,p,l,d){return function(h){h.delegateTarget=s(h.target,p),h.delegateTarget&&d.call(u,h)}}n.exports=c},879:function(n,o){o.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},o.nodeList=function(i){var s=Object.prototype.toString.call(i);return i!==void 0&&(s==="[object NodeList]"||s==="[object HTMLCollection]")&&"length"in i&&(i.length===0||o.node(i[0]))},o.string=function(i){return typeof i=="string"||i instanceof String},o.fn=function(i){var s=Object.prototype.toString.call(i);return s==="[object Function]"}},370:function(n,o,i){var s=i(879),a=i(438);function c(l,d,h){if(!l&&!d&&!h)throw new Error("Missing required arguments");if(!s.string(d))throw new TypeError("Second argument must be a String");if(!s.fn(h))throw new TypeError("Third argument must be a Function");if(s.node(l))return f(l,d,h);if(s.nodeList(l))return u(l,d,h);if(s.string(l))return p(l,d,h);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function f(l,d,h){return l.addEventListener(d,h),{destroy:function(){l.removeEventListener(d,h)}}}function u(l,d,h){return Array.prototype.forEach.call(l,function(b){b.addEventListener(d,h)}),{destroy:function(){Array.prototype.forEach.call(l,function(b){b.removeEventListener(d,h)})}}}function p(l,d,h){return a(document.body,l,d,h)}n.exports=c},817:function(n){function o(i){var s;if(i.nodeName==="SELECT")i.focus(),s=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var a=i.hasAttribute("readonly");a||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),a||i.removeAttribute("readonly"),s=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var c=window.getSelection(),f=document.createRange();f.selectNodeContents(i),c.removeAllRanges(),c.addRange(f),s=c.toString()}return s}n.exports=o},279:function(n){function o(){}o.prototype={on:function(i,s,a){var c=this.e||(this.e={});return(c[i]||(c[i]=[])).push({fn:s,ctx:a}),this},once:function(i,s,a){var c=this;function f(){c.off(i,f),s.apply(a,arguments)}return f._=s,this.on(i,f,a)},emit:function(i){var s=[].slice.call(arguments,1),a=((this.e||(this.e={}))[i]||[]).slice(),c=0,f=a.length;for(c;c{"use strict";/*! + * escape-html + * Copyright(c) 2012-2013 TJ Holowaychuk + * Copyright(c) 2015 Andreas Lubbe + * Copyright(c) 2015 Tiancheng "Timothy" Gu + * MIT Licensed + */var Ms=/["'&<>]/;Si.exports=Ls;function Ls(e){var t=""+e,r=Ms.exec(t);if(!r)return t;var n,o="",i=0,s=0;for(i=r.index;i0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var n=this,o=this,i=o.hasError,s=o.isStopped,a=o.observers;return i||s?Tr:(this.currentObservers=null,a.push(r),new $e(function(){n.currentObservers=null,Ue(a,r)}))},t.prototype._checkFinalizedStatuses=function(r){var n=this,o=n.hasError,i=n.thrownError,s=n.isStopped;o?r.error(i):s&&r.complete()},t.prototype.asObservable=function(){var r=new F;return r.source=this,r},t.create=function(r,n){return new Qn(r,n)},t}(F);var Qn=function(e){ne(t,e);function t(r,n){var o=e.call(this)||this;return o.destination=r,o.source=n,o}return t.prototype.next=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.next)===null||o===void 0||o.call(n,r)},t.prototype.error=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.error)===null||o===void 0||o.call(n,r)},t.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},t.prototype._subscribe=function(r){var n,o;return(o=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&o!==void 0?o:Tr},t}(E);var wt={now:function(){return(wt.delegate||Date).now()},delegate:void 0};var Et=function(e){ne(t,e);function t(r,n,o){r===void 0&&(r=1/0),n===void 0&&(n=1/0),o===void 0&&(o=wt);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=n,i._timestampProvider=o,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=n===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,n),i}return t.prototype.next=function(r){var n=this,o=n.isStopped,i=n._buffer,s=n._infiniteTimeWindow,a=n._timestampProvider,c=n._windowTime;o||(i.push(r),!s&&i.push(a.now()+c)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var n=this._innerSubscribe(r),o=this,i=o._infiniteTimeWindow,s=o._buffer,a=s.slice(),c=0;c0?e.prototype.requestAsyncId.call(this,r,n,o):(r.actions.push(this),r._scheduled||(r._scheduled=at.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,n,o){var i;if(o===void 0&&(o=0),o!=null?o>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,n,o);var s=r.actions;n!=null&&((i=s[s.length-1])===null||i===void 0?void 0:i.id)!==n&&(at.cancelAnimationFrame(n),r._scheduled=void 0)},t}(zt);var Gn=function(e){ne(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var n=this._scheduled;this._scheduled=void 0;var o=this.actions,i;r=r||o.shift();do if(i=r.execute(r.state,r.delay))break;while((r=o[0])&&r.id===n&&o.shift());if(this._active=!1,i){for(;(r=o[0])&&r.id===n&&o.shift();)r.unsubscribe();throw i}},t}(Nt);var xe=new Gn(Bn);var R=new F(function(e){return e.complete()});function qt(e){return e&&L(e.schedule)}function Hr(e){return e[e.length-1]}function Ve(e){return L(Hr(e))?e.pop():void 0}function Ee(e){return qt(Hr(e))?e.pop():void 0}function Kt(e,t){return typeof Hr(e)=="number"?e.pop():t}var st=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function Qt(e){return L(e==null?void 0:e.then)}function Yt(e){return L(e[it])}function Bt(e){return Symbol.asyncIterator&&L(e==null?void 0:e[Symbol.asyncIterator])}function Gt(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function ya(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Jt=ya();function Xt(e){return L(e==null?void 0:e[Jt])}function Zt(e){return jn(this,arguments,function(){var r,n,o,i;return It(this,function(s){switch(s.label){case 0:r=e.getReader(),s.label=1;case 1:s.trys.push([1,,9,10]),s.label=2;case 2:return[4,jt(r.read())];case 3:return n=s.sent(),o=n.value,i=n.done,i?[4,jt(void 0)]:[3,5];case 4:return[2,s.sent()];case 5:return[4,jt(o)];case 6:return[4,s.sent()];case 7:return s.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function er(e){return L(e==null?void 0:e.getReader)}function z(e){if(e instanceof F)return e;if(e!=null){if(Yt(e))return xa(e);if(st(e))return wa(e);if(Qt(e))return Ea(e);if(Bt(e))return Jn(e);if(Xt(e))return Sa(e);if(er(e))return Oa(e)}throw Gt(e)}function xa(e){return new F(function(t){var r=e[it]();if(L(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function wa(e){return new F(function(t){for(var r=0;r=2,!0))}function ie(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new E}:t,n=e.resetOnError,o=n===void 0?!0:n,i=e.resetOnComplete,s=i===void 0?!0:i,a=e.resetOnRefCountZero,c=a===void 0?!0:a;return function(f){var u,p,l,d=0,h=!1,b=!1,U=function(){p==null||p.unsubscribe(),p=void 0},G=function(){U(),u=l=void 0,h=b=!1},W=function(){var _=u;G(),_==null||_.unsubscribe()};return g(function(_,We){d++,!b&&!h&&U();var Fe=l=l!=null?l:r();We.add(function(){d--,d===0&&!b&&!h&&(p=Dr(W,c))}),Fe.subscribe(We),!u&&d>0&&(u=new Ge({next:function(Pe){return Fe.next(Pe)},error:function(Pe){b=!0,U(),p=Dr(G,o,Pe),Fe.error(Pe)},complete:function(){h=!0,U(),p=Dr(G,s),Fe.complete()}}),z(_).subscribe(u))})(f)}}function Dr(e,t){for(var r=[],n=2;ne.next(document)),e}function Q(e,t=document){return Array.from(t.querySelectorAll(e))}function K(e,t=document){let r=pe(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function pe(e,t=document){return t.querySelector(e)||void 0}function Ie(){return document.activeElement instanceof HTMLElement&&document.activeElement||void 0}function nr(e){return A(v(document.body,"focusin"),v(document.body,"focusout")).pipe(Re(1),m(()=>{let t=Ie();return typeof t!="undefined"?e.contains(t):!1}),N(e===Ie()),B())}function qe(e){return{x:e.offsetLeft,y:e.offsetTop}}function yo(e){return A(v(window,"load"),v(window,"resize")).pipe(Ae(0,xe),m(()=>qe(e)),N(qe(e)))}function or(e){return{x:e.scrollLeft,y:e.scrollTop}}function pt(e){return A(v(e,"scroll"),v(window,"resize")).pipe(Ae(0,xe),m(()=>or(e)),N(or(e)))}var wo=function(){if(typeof Map!="undefined")return Map;function e(t,r){var n=-1;return t.some(function(o,i){return o[0]===r?(n=i,!0):!1}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(r){var n=e(this.__entries__,r),o=this.__entries__[n];return o&&o[1]},t.prototype.set=function(r,n){var o=e(this.__entries__,r);~o?this.__entries__[o][1]=n:this.__entries__.push([r,n])},t.prototype.delete=function(r){var n=this.__entries__,o=e(n,r);~o&&n.splice(o,1)},t.prototype.has=function(r){return!!~e(this.__entries__,r)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(r,n){n===void 0&&(n=null);for(var o=0,i=this.__entries__;o0},e.prototype.connect_=function(){!qr||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),Ka?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!qr||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var r=t.propertyName,n=r===void 0?"":r,o=qa.some(function(i){return!!~n.indexOf(i)});o&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),Eo=function(e,t){for(var r=0,n=Object.keys(t);r0},e}(),Oo=typeof WeakMap!="undefined"?new WeakMap:new wo,_o=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var r=Qa.getInstance(),n=new ns(t,r,this);Oo.set(this,n)}return e}();["observe","unobserve","disconnect"].forEach(function(e){_o.prototype[e]=function(){var t;return(t=Oo.get(this))[e].apply(t,arguments)}});var os=function(){return typeof ir.ResizeObserver!="undefined"?ir.ResizeObserver:_o}(),To=os;var Mo=new E,is=P(()=>I(new To(e=>{for(let t of e)Mo.next(t)}))).pipe(S(e=>A(Se,I(e)).pipe(C(()=>e.disconnect()))),X(1));function he(e){return{width:e.offsetWidth,height:e.offsetHeight}}function ve(e){return is.pipe(w(t=>t.observe(e)),S(t=>Mo.pipe(x(({target:r})=>r===e),C(()=>t.unobserve(e)),m(()=>he(e)))),N(he(e)))}function mt(e){return{width:e.scrollWidth,height:e.scrollHeight}}function cr(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}var Lo=new E,as=P(()=>I(new IntersectionObserver(e=>{for(let t of e)Lo.next(t)},{threshold:0}))).pipe(S(e=>A(Se,I(e)).pipe(C(()=>e.disconnect()))),X(1));function fr(e){return as.pipe(w(t=>t.observe(e)),S(t=>Lo.pipe(x(({target:r})=>r===e),C(()=>t.unobserve(e)),m(({isIntersecting:r})=>r))))}function Ao(e,t=16){return pt(e).pipe(m(({y:r})=>{let n=he(e),o=mt(e);return r>=o.height-n.height-t}),B())}var ur={drawer:K("[data-md-toggle=drawer]"),search:K("[data-md-toggle=search]")};function Co(e){return ur[e].checked}function Ke(e,t){ur[e].checked!==t&&ur[e].click()}function dt(e){let t=ur[e];return v(t,"change").pipe(m(()=>t.checked),N(t.checked))}function ss(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function Ro(){return v(window,"keydown").pipe(x(e=>!(e.metaKey||e.ctrlKey)),m(e=>({mode:Co("search")?"search":"global",type:e.key,claim(){e.preventDefault(),e.stopPropagation()}})),x(({mode:e,type:t})=>{if(e==="global"){let r=Ie();if(typeof r!="undefined")return!ss(r,t)}return!0}),ie())}function Oe(){return new URL(location.href)}function pr(e){location.href=e.href}function ko(){return new E}function Ho(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)Ho(e,r)}function M(e,t,...r){let n=document.createElement(e);if(t)for(let o of Object.keys(t))typeof t[o]!="undefined"&&(typeof t[o]!="boolean"?n.setAttribute(o,t[o]):n.setAttribute(o,""));for(let o of r)Ho(n,o);return n}function Po(e,t){let r=t;if(e.length>r){for(;e[r]!==" "&&--r>0;);return`${e.substring(0,r)}...`}return e}function lr(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function $o(){return location.hash.substring(1)}function Io(e){let t=M("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function cs(){return v(window,"hashchange").pipe(m($o),N($o()),x(e=>e.length>0),X(1))}function jo(){return cs().pipe(m(e=>pe(`[id="${e}"]`)),x(e=>typeof e!="undefined"))}function Kr(e){let t=matchMedia(e);return rr(r=>t.addListener(()=>r(t.matches))).pipe(N(t.matches))}function Fo(){let e=matchMedia("print");return A(v(window,"beforeprint").pipe(m(()=>!0)),v(window,"afterprint").pipe(m(()=>!1))).pipe(N(e.matches))}function Qr(e,t){return e.pipe(S(r=>r?t():R))}function mr(e,t={credentials:"same-origin"}){return ue(fetch(`${e}`,t)).pipe(ce(()=>R),S(r=>r.status!==200?Ot(()=>new Error(r.statusText)):I(r)))}function je(e,t){return mr(e,t).pipe(S(r=>r.json()),X(1))}function Uo(e,t){let r=new DOMParser;return mr(e,t).pipe(S(n=>n.text()),m(n=>r.parseFromString(n,"text/xml")),X(1))}function Do(e){let t=M("script",{src:e});return P(()=>(document.head.appendChild(t),A(v(t,"load"),v(t,"error").pipe(S(()=>Ot(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(m(()=>{}),C(()=>document.head.removeChild(t)),oe(1))))}function Wo(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function Vo(){return A(v(window,"scroll",{passive:!0}),v(window,"resize",{passive:!0})).pipe(m(Wo),N(Wo()))}function zo(){return{width:innerWidth,height:innerHeight}}function No(){return v(window,"resize",{passive:!0}).pipe(m(zo),N(zo()))}function qo(){return Y([Vo(),No()]).pipe(m(([e,t])=>({offset:e,size:t})),X(1))}function dr(e,{viewport$:t,header$:r}){let n=t.pipe(J("size")),o=Y([n,r]).pipe(m(()=>qe(e)));return Y([r,t,o]).pipe(m(([{height:i},{offset:s,size:a},{x:c,y:f}])=>({offset:{x:s.x-c,y:s.y-f+i},size:a})))}function Ko(e,{tx$:t}){let r=v(e,"message").pipe(m(({data:n})=>n));return t.pipe(Lt(()=>r,{leading:!0,trailing:!0}),w(n=>e.postMessage(n)),S(()=>r),ie())}var fs=K("#__config"),ht=JSON.parse(fs.textContent);ht.base=`${new URL(ht.base,Oe())}`;function le(){return ht}function Z(e){return ht.features.includes(e)}function re(e,t){return typeof t!="undefined"?ht.translations[e].replace("#",t.toString()):ht.translations[e]}function _e(e,t=document){return K(`[data-md-component=${e}]`,t)}function te(e,t=document){return Q(`[data-md-component=${e}]`,t)}function us(e){let t=K(".md-typeset > :first-child",e);return v(t,"click",{once:!0}).pipe(m(()=>K(".md-typeset",e)),m(r=>({hash:__md_hash(r.innerHTML)})))}function Qo(e){return!Z("announce.dismiss")||!e.childElementCount?R:P(()=>{let t=new E;return t.pipe(N({hash:__md_get("__announce")})).subscribe(({hash:r})=>{var n;r&&r===((n=__md_get("__announce"))!=null?n:r)&&(e.hidden=!0,__md_set("__announce",r))}),us(e).pipe(w(r=>t.next(r)),C(()=>t.complete()),m(r=>H({ref:e},r)))})}function ps(e,{target$:t}){return t.pipe(m(r=>({hidden:r!==e})))}function Yo(e,t){let r=new E;return r.subscribe(({hidden:n})=>{e.hidden=n}),ps(e,t).pipe(w(n=>r.next(n)),C(()=>r.complete()),m(n=>H({ref:e},n)))}var ii=Ye(Br());function Gr(e){return M("div",{class:"md-tooltip",id:e},M("div",{class:"md-tooltip__inner md-typeset"}))}function Bo(e,t){if(t=t?`${t}_annotation_${e}`:void 0,t){let r=t?`#${t}`:void 0;return M("aside",{class:"md-annotation",tabIndex:0},Gr(t),M("a",{href:r,class:"md-annotation__index",tabIndex:-1},M("span",{"data-md-annotation-id":e})))}else return M("aside",{class:"md-annotation",tabIndex:0},Gr(t),M("span",{class:"md-annotation__index",tabIndex:-1},M("span",{"data-md-annotation-id":e})))}function Go(e){return M("button",{class:"md-clipboard md-icon",title:re("clipboard.copy"),"data-clipboard-target":`#${e} > code`})}function Jr(e,t){let r=t&2,n=t&1,o=Object.keys(e.terms).filter(a=>!e.terms[a]).reduce((a,c)=>[...a,M("del",null,c)," "],[]).slice(0,-1),i=new URL(e.location);Z("search.highlight")&&i.searchParams.set("h",Object.entries(e.terms).filter(([,a])=>a).reduce((a,[c])=>`${a} ${c}`.trim(),""));let{tags:s}=le();return M("a",{href:`${i}`,class:"md-search-result__link",tabIndex:-1},M("article",{class:["md-search-result__article",...r?["md-search-result__article--document"]:[]].join(" "),"data-md-score":e.score.toFixed(2)},r>0&&M("div",{class:"md-search-result__icon md-icon"}),M("h1",{class:"md-search-result__title"},e.title),n>0&&e.text.length>0&&M("p",{class:"md-search-result__teaser"},Po(e.text,320)),e.tags&&M("div",{class:"md-typeset"},e.tags.map(a=>{let c=a.replace(/<[^>]+>/g,""),f=s?c in s?`md-tag-icon md-tag-icon--${s[c]}`:"md-tag-icon":"";return M("span",{class:`md-tag ${f}`},a)})),n>0&&o.length>0&&M("p",{class:"md-search-result__terms"},re("search.result.term.missing"),": ",...o)))}function Jo(e){let t=e[0].score,r=[...e],n=r.findIndex(f=>!f.location.includes("#")),[o]=r.splice(n,1),i=r.findIndex(f=>f.scoreJr(f,1)),...a.length?[M("details",{class:"md-search-result__more"},M("summary",{tabIndex:-1},a.length>0&&a.length===1?re("search.result.more.one"):re("search.result.more.other",a.length)),...a.map(f=>Jr(f,1)))]:[]];return M("li",{class:"md-search-result__item"},c)}function Xo(e){return M("ul",{class:"md-source__facts"},Object.entries(e).map(([t,r])=>M("li",{class:`md-source__fact md-source__fact--${t}`},typeof r=="number"?lr(r):r)))}function Xr(e){let t=`tabbed-control tabbed-control--${e}`;return M("div",{class:t,hidden:!0},M("button",{class:"tabbed-button",tabIndex:-1}))}function Zo(e){return M("div",{class:"md-typeset__scrollwrap"},M("div",{class:"md-typeset__table"},e))}function ls(e){let t=le(),r=new URL(`../${e.version}/`,t.base);return M("li",{class:"md-version__item"},M("a",{href:`${r}`,class:"md-version__link"},e.title))}function ei(e,t){return M("div",{class:"md-version"},M("button",{class:"md-version__current","aria-label":re("select.version.title")},t.title),M("ul",{class:"md-version__list"},e.map(ls)))}function ms(e,t){let r=P(()=>Y([yo(e),pt(t)])).pipe(m(([{x:n,y:o},i])=>{let{width:s,height:a}=he(e);return{x:n-i.x+s/2,y:o-i.y+a/2}}));return nr(e).pipe(S(n=>r.pipe(m(o=>({active:n,offset:o})),oe(+!n||1/0))))}function ti(e,t,{target$:r}){let[n,o]=Array.from(e.children);return P(()=>{let i=new E,s=i.pipe(de(1));return i.subscribe({next({offset:a}){e.style.setProperty("--md-tooltip-x",`${a.x}px`),e.style.setProperty("--md-tooltip-y",`${a.y}px`)},complete(){e.style.removeProperty("--md-tooltip-x"),e.style.removeProperty("--md-tooltip-y")}}),fr(e).pipe(ee(s)).subscribe(a=>{e.toggleAttribute("data-md-visible",a)}),A(i.pipe(x(({active:a})=>a)),i.pipe(Re(250),x(({active:a})=>!a))).subscribe({next({active:a}){a?e.prepend(n):n.remove()},complete(){e.prepend(n)}}),i.pipe(Ae(16,xe)).subscribe(({active:a})=>{n.classList.toggle("md-tooltip--active",a)}),i.pipe(zr(125,xe),x(()=>!!e.offsetParent),m(()=>e.offsetParent.getBoundingClientRect()),m(({x:a})=>a)).subscribe({next(a){a?e.style.setProperty("--md-tooltip-0",`${-a}px`):e.style.removeProperty("--md-tooltip-0")},complete(){e.style.removeProperty("--md-tooltip-0")}}),v(o,"click").pipe(ee(s),x(a=>!(a.metaKey||a.ctrlKey))).subscribe(a=>a.preventDefault()),v(o,"mousedown").pipe(ee(s),ae(i)).subscribe(([a,{active:c}])=>{var f;if(a.button!==0||a.metaKey||a.ctrlKey)a.preventDefault();else if(c){a.preventDefault();let u=e.parentElement.closest(".md-annotation");u instanceof HTMLElement?u.focus():(f=Ie())==null||f.blur()}}),r.pipe(ee(s),x(a=>a===n),ke(125)).subscribe(()=>e.focus()),ms(e,t).pipe(w(a=>i.next(a)),C(()=>i.complete()),m(a=>H({ref:e},a)))})}function ds(e){let t=[];for(let r of Q(".c, .c1, .cm",e)){let n=[],o=document.createNodeIterator(r,NodeFilter.SHOW_TEXT);for(let i=o.nextNode();i;i=o.nextNode())n.push(i);for(let i of n){let s;for(;s=/(\(\d+\))(!)?/.exec(i.textContent);){let[,a,c]=s;if(typeof c=="undefined"){let f=i.splitText(s.index);i=f.splitText(a.length),t.push(f)}else{i.textContent=a,t.push(i);break}}}}return t}function ri(e,t){t.append(...Array.from(e.childNodes))}function ni(e,t,{target$:r,print$:n}){let o=t.closest("[id]"),i=o==null?void 0:o.id,s=new Map;for(let a of ds(t)){let[,c]=a.textContent.match(/\((\d+)\)/);pe(`li:nth-child(${c})`,e)&&(s.set(c,Bo(c,i)),a.replaceWith(s.get(c)))}return s.size===0?R:P(()=>{let a=new E,c=[];for(let[f,u]of s)c.push([K(".md-typeset",u),K(`li:nth-child(${f})`,e)]);return n.pipe(ee(a.pipe(de(1)))).subscribe(f=>{e.hidden=!f;for(let[u,p]of c)f?ri(u,p):ri(p,u)}),A(...[...s].map(([,f])=>ti(f,t,{target$:r}))).pipe(C(()=>a.complete()),ie())})}var hs=0;function ai(e){if(e.nextElementSibling){let t=e.nextElementSibling;if(t.tagName==="OL")return t;if(t.tagName==="P"&&!t.children.length)return ai(t)}}function oi(e){return ve(e).pipe(m(({width:t})=>({scrollable:mt(e).width>t})),J("scrollable"))}function si(e,t){let{matches:r}=matchMedia("(hover)"),n=P(()=>{let o=new E;if(o.subscribe(({scrollable:s})=>{s&&r?e.setAttribute("tabindex","0"):e.removeAttribute("tabindex")}),ii.default.isSupported()){let s=e.closest("pre");s.id=`__code_${++hs}`,s.insertBefore(Go(s.id),e)}let i=e.closest(".highlight");if(i instanceof HTMLElement){let s=ai(i);if(typeof s!="undefined"&&(i.classList.contains("annotate")||Z("content.code.annotate"))){let a=ni(s,e,t);return oi(e).pipe(w(c=>o.next(c)),C(()=>o.complete()),m(c=>H({ref:e},c)),et(ve(i).pipe(m(({width:c,height:f})=>c&&f),B(),S(c=>c?a:R))))}}return oi(e).pipe(w(s=>o.next(s)),C(()=>o.complete()),m(s=>H({ref:e},s)))});return Z("content.lazy")?fr(e).pipe(x(o=>o),oe(1),S(()=>n)):n}var ci=".node circle,.node ellipse,.node path,.node polygon,.node rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}marker{fill:var(--md-mermaid-edge-color)!important}.edgeLabel .label rect{fill:transparent}.label{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.label foreignObject{line-height:normal;overflow:visible}.label div .edgeLabel{color:var(--md-mermaid-label-fg-color)}.edgeLabel,.edgeLabel rect,.label div .edgeLabel{background-color:var(--md-mermaid-label-bg-color)}.edgeLabel,.edgeLabel rect{fill:var(--md-mermaid-label-bg-color);color:var(--md-mermaid-edge-color)}.edgePath .path,.flowchart-link{stroke:var(--md-mermaid-edge-color)}.edgePath .arrowheadPath{fill:var(--md-mermaid-edge-color);stroke:none}.cluster rect{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}.cluster span{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}defs #flowchart-circleEnd,defs #flowchart-circleStart,defs #flowchart-crossEnd,defs #flowchart-crossStart,defs #flowchart-pointEnd,defs #flowchart-pointStart{stroke:none}g.classGroup line,g.classGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.classGroup text{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.classLabel .box{fill:var(--md-mermaid-label-bg-color);background-color:var(--md-mermaid-label-bg-color);opacity:1}.classLabel .label{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.node .divider{stroke:var(--md-mermaid-node-fg-color)}.relation{stroke:var(--md-mermaid-edge-color)}.cardinality{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.cardinality text{fill:inherit!important}defs #classDiagram-compositionEnd,defs #classDiagram-compositionStart,defs #classDiagram-dependencyEnd,defs #classDiagram-dependencyStart,defs #classDiagram-extensionEnd,defs #classDiagram-extensionStart{fill:var(--md-mermaid-edge-color)!important;stroke:var(--md-mermaid-edge-color)!important}defs #classDiagram-aggregationEnd,defs #classDiagram-aggregationStart{fill:var(--md-mermaid-label-bg-color)!important;stroke:var(--md-mermaid-edge-color)!important}g.stateGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.stateGroup .state-title{fill:var(--md-mermaid-label-fg-color)!important;font-family:var(--md-mermaid-font-family)}g.stateGroup .composit{fill:var(--md-mermaid-label-bg-color)}.nodeLabel{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.node circle.state-end,.node circle.state-start,.start-state{fill:var(--md-mermaid-edge-color);stroke:none}.end-state-inner,.end-state-outer{fill:var(--md-mermaid-edge-color)}.end-state-inner,.node circle.state-end{stroke:var(--md-mermaid-label-bg-color)}.transition{stroke:var(--md-mermaid-edge-color)}[id^=state-fork] rect,[id^=state-join] rect{fill:var(--md-mermaid-edge-color)!important;stroke:none!important}.statediagram-cluster.statediagram-cluster .inner{fill:var(--md-default-bg-color)}.statediagram-cluster rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}.statediagram-state rect.divider{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}defs #statediagram-barbEnd{stroke:var(--md-mermaid-edge-color)}.entityBox{fill:var(--md-mermaid-label-bg-color);stroke:var(--md-mermaid-node-fg-color)}.entityLabel{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.relationshipLabelBox{fill:var(--md-mermaid-label-bg-color);fill-opacity:1;background-color:var(--md-mermaid-label-bg-color);opacity:1}.relationshipLabel{fill:var(--md-mermaid-label-fg-color)}.relationshipLine{stroke:var(--md-mermaid-edge-color)}defs #ONE_OR_MORE_END *,defs #ONE_OR_MORE_START *,defs #ONLY_ONE_END *,defs #ONLY_ONE_START *,defs #ZERO_OR_MORE_END *,defs #ZERO_OR_MORE_START *,defs #ZERO_OR_ONE_END *,defs #ZERO_OR_ONE_START *{stroke:var(--md-mermaid-edge-color)!important}.actor,defs #ZERO_OR_MORE_END circle,defs #ZERO_OR_MORE_START circle{fill:var(--md-mermaid-label-bg-color)}.actor{stroke:var(--md-mermaid-node-fg-color)}text.actor>tspan{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}line{stroke:var(--md-default-fg-color--lighter)}.messageLine0,.messageLine1{stroke:var(--md-mermaid-edge-color)}.loopText>tspan,.messageText,.noteText>tspan{font-family:var(--md-mermaid-font-family)!important}#arrowhead path,.loopText>tspan,.messageText,.noteText>tspan{fill:var(--md-mermaid-edge-color);stroke:none}.loopLine{stroke:var(--md-mermaid-node-fg-color)}.labelBox,.loopLine{fill:var(--md-mermaid-node-bg-color)}.labelBox{stroke:none}.labelText,.labelText>span{fill:var(--md-mermaid-node-fg-color);font-family:var(--md-mermaid-font-family)}";var Zr,vs=0;function gs(){return typeof mermaid=="undefined"||mermaid instanceof Element?Do("https://unpkg.com/mermaid@9.1.7/dist/mermaid.min.js"):I(void 0)}function fi(e){return e.classList.remove("mermaid"),Zr||(Zr=gs().pipe(w(()=>mermaid.initialize({startOnLoad:!1,themeCSS:ci,sequence:{actorFontSize:"16px",messageFontSize:"16px",noteFontSize:"16px"}})),m(()=>{}),X(1))),Zr.subscribe(()=>{e.classList.add("mermaid");let t=`__mermaid_${vs++}`,r=M("div",{class:"mermaid"});mermaid.mermaidAPI.render(t,e.textContent,n=>{let o=r.attachShadow({mode:"closed"});o.innerHTML=n,e.replaceWith(r)})}),Zr.pipe(m(()=>({ref:e})))}function ys(e,{target$:t,print$:r}){let n=!0;return A(t.pipe(m(o=>o.closest("details:not([open])")),x(o=>e===o),m(()=>({action:"open",reveal:!0}))),r.pipe(x(o=>o||!n),w(()=>n=e.open),m(o=>({action:o?"open":"close"}))))}function ui(e,t){return P(()=>{let r=new E;return r.subscribe(({action:n,reveal:o})=>{e.toggleAttribute("open",n==="open"),o&&e.scrollIntoView()}),ys(e,t).pipe(w(n=>r.next(n)),C(()=>r.complete()),m(n=>H({ref:e},n)))})}var pi=M("table");function li(e){return e.replaceWith(pi),pi.replaceWith(Zo(e)),I({ref:e})}function xs(e){let t=Q(":scope > input",e),r=t.find(n=>n.checked)||t[0];return A(...t.map(n=>v(n,"change").pipe(m(()=>K(`label[for="${n.id}"]`))))).pipe(N(K(`label[for="${r.id}"]`)),m(n=>({active:n})))}function mi(e,{viewport$:t}){let r=Xr("prev");e.append(r);let n=Xr("next");e.append(n);let o=K(".tabbed-labels",e);return P(()=>{let i=new E,s=i.pipe(de(1));return Y([i,ve(e)]).pipe(Ae(1,xe),ee(s)).subscribe({next([{active:a},c]){let f=qe(a),{width:u}=he(a);e.style.setProperty("--md-indicator-x",`${f.x}px`),e.style.setProperty("--md-indicator-width",`${u}px`);let p=or(o);(f.xp.x+c.width)&&o.scrollTo({left:Math.max(0,f.x-16),behavior:"smooth"})},complete(){e.style.removeProperty("--md-indicator-x"),e.style.removeProperty("--md-indicator-width")}}),Y([pt(o),ve(o)]).pipe(ee(s)).subscribe(([a,c])=>{let f=mt(o);r.hidden=a.x<16,n.hidden=a.x>f.width-c.width-16}),A(v(r,"click").pipe(m(()=>-1)),v(n,"click").pipe(m(()=>1))).pipe(ee(s)).subscribe(a=>{let{width:c}=he(o);o.scrollBy({left:c*a,behavior:"smooth"})}),Z("content.tabs.link")&&i.pipe(He(1),ae(t)).subscribe(([{active:a},{offset:c}])=>{let f=a.innerText.trim();if(a.hasAttribute("data-md-switching"))a.removeAttribute("data-md-switching");else{let u=e.offsetTop-c.y;for(let l of Q("[data-tabs]"))for(let d of Q(":scope > input",l)){let h=K(`label[for="${d.id}"]`);if(h!==a&&h.innerText.trim()===f){h.setAttribute("data-md-switching",""),d.click();break}}window.scrollTo({top:e.offsetTop-u});let p=__md_get("__tabs")||[];__md_set("__tabs",[...new Set([f,...p])])}}),xs(e).pipe(w(a=>i.next(a)),C(()=>i.complete()),m(a=>H({ref:e},a)))}).pipe(Je(fe))}function di(e,{viewport$:t,target$:r,print$:n}){return A(...Q("pre:not(.mermaid) > code",e).map(o=>si(o,{target$:r,print$:n})),...Q("pre.mermaid",e).map(o=>fi(o)),...Q("table:not([class])",e).map(o=>li(o)),...Q("details",e).map(o=>ui(o,{target$:r,print$:n})),...Q("[data-tabs]",e).map(o=>mi(o,{viewport$:t})))}function ws(e,{alert$:t}){return t.pipe(S(r=>A(I(!0),I(!1).pipe(ke(2e3))).pipe(m(n=>({message:r,active:n})))))}function hi(e,t){let r=K(".md-typeset",e);return P(()=>{let n=new E;return n.subscribe(({message:o,active:i})=>{e.classList.toggle("md-dialog--active",i),r.textContent=o}),ws(e,t).pipe(w(o=>n.next(o)),C(()=>n.complete()),m(o=>H({ref:e},o)))})}function Es({viewport$:e}){if(!Z("header.autohide"))return I(!1);let t=e.pipe(m(({offset:{y:o}})=>o),Ce(2,1),m(([o,i])=>[oMath.abs(i-o.y)>100),m(([,[o]])=>o),B()),n=dt("search");return Y([e,n]).pipe(m(([{offset:o},i])=>o.y>400&&!i),B(),S(o=>o?r:I(!1)),N(!1))}function bi(e,t){return P(()=>Y([ve(e),Es(t)])).pipe(m(([{height:r},n])=>({height:r,hidden:n})),B((r,n)=>r.height===n.height&&r.hidden===n.hidden),X(1))}function vi(e,{header$:t,main$:r}){return P(()=>{let n=new E,o=n.pipe(de(1));return n.pipe(J("active"),Ze(t)).subscribe(([{active:i},{hidden:s}])=>{e.classList.toggle("md-header--shadow",i&&!s),e.hidden=s}),r.subscribe(n),t.pipe(ee(o),m(i=>H({ref:e},i)))})}function Ss(e,{viewport$:t,header$:r}){return dr(e,{viewport$:t,header$:r}).pipe(m(({offset:{y:n}})=>{let{height:o}=he(e);return{active:n>=o}}),J("active"))}function gi(e,t){return P(()=>{let r=new E;r.subscribe(({active:o})=>{e.classList.toggle("md-header__title--active",o)});let n=pe("article h1");return typeof n=="undefined"?R:Ss(n,t).pipe(w(o=>r.next(o)),C(()=>r.complete()),m(o=>H({ref:e},o)))})}function yi(e,{viewport$:t,header$:r}){let n=r.pipe(m(({height:i})=>i),B()),o=n.pipe(S(()=>ve(e).pipe(m(({height:i})=>({top:e.offsetTop,bottom:e.offsetTop+i})),J("bottom"))));return Y([n,o,t]).pipe(m(([i,{top:s,bottom:a},{offset:{y:c},size:{height:f}}])=>(f=Math.max(0,f-Math.max(0,s-c,i)-Math.max(0,f+c-a)),{offset:s-i,height:f,active:s-i<=c})),B((i,s)=>i.offset===s.offset&&i.height===s.height&&i.active===s.active))}function Os(e){let t=__md_get("__palette")||{index:e.findIndex(r=>matchMedia(r.getAttribute("data-md-color-media")).matches)};return I(...e).pipe(se(r=>v(r,"change").pipe(m(()=>r))),N(e[Math.max(0,t.index)]),m(r=>({index:e.indexOf(r),color:{scheme:r.getAttribute("data-md-color-scheme"),primary:r.getAttribute("data-md-color-primary"),accent:r.getAttribute("data-md-color-accent")}})),X(1))}function xi(e){return P(()=>{let t=new E;t.subscribe(n=>{document.body.setAttribute("data-md-color-switching","");for(let[o,i]of Object.entries(n.color))document.body.setAttribute(`data-md-color-${o}`,i);for(let o=0;o{document.body.removeAttribute("data-md-color-switching")});let r=Q("input",e);return Os(r).pipe(w(n=>t.next(n)),C(()=>t.complete()),m(n=>H({ref:e},n)))})}var en=Ye(Br());function _s(e){e.setAttribute("data-md-copying","");let t=e.innerText;return e.removeAttribute("data-md-copying"),t}function wi({alert$:e}){en.default.isSupported()&&new F(t=>{new en.default("[data-clipboard-target], [data-clipboard-text]",{text:r=>r.getAttribute("data-clipboard-text")||_s(K(r.getAttribute("data-clipboard-target")))}).on("success",r=>t.next(r))}).pipe(w(t=>{t.trigger.focus()}),m(()=>re("clipboard.copied"))).subscribe(e)}function Ts(e){if(e.length<2)return[""];let[t,r]=[...e].sort((o,i)=>o.length-i.length).map(o=>o.replace(/[^/]+$/,"")),n=0;if(t===r)n=t.length;else for(;t.charCodeAt(n)===r.charCodeAt(n);)n++;return e.map(o=>o.replace(t.slice(0,n),""))}function hr(e){let t=__md_get("__sitemap",sessionStorage,e);if(t)return I(t);{let r=le();return Uo(new URL("sitemap.xml",e||r.base)).pipe(m(n=>Ts(Q("loc",n).map(o=>o.textContent))),ce(()=>R),De([]),w(n=>__md_set("__sitemap",n,sessionStorage,e)))}}function Ei({document$:e,location$:t,viewport$:r}){let n=le();if(location.protocol==="file:")return;"scrollRestoration"in history&&(history.scrollRestoration="manual",v(window,"beforeunload").subscribe(()=>{history.scrollRestoration="auto"}));let o=pe("link[rel=icon]");typeof o!="undefined"&&(o.href=o.href);let i=hr().pipe(m(f=>f.map(u=>`${new URL(u,n.base)}`)),S(f=>v(document.body,"click").pipe(x(u=>!u.metaKey&&!u.ctrlKey),S(u=>{if(u.target instanceof Element){let p=u.target.closest("a");if(p&&!p.target){let l=new URL(p.href);if(l.search="",l.hash="",l.pathname!==location.pathname&&f.includes(l.toString()))return u.preventDefault(),I({url:new URL(p.href)})}}return Se}))),ie()),s=v(window,"popstate").pipe(x(f=>f.state!==null),m(f=>({url:new URL(location.href),offset:f.state})),ie());A(i,s).pipe(B((f,u)=>f.url.href===u.url.href),m(({url:f})=>f)).subscribe(t);let a=t.pipe(J("pathname"),S(f=>mr(f.href).pipe(ce(()=>(pr(f),Se)))),ie());i.pipe(ut(a)).subscribe(({url:f})=>{history.pushState({},"",`${f}`)});let c=new DOMParser;a.pipe(S(f=>f.text()),m(f=>c.parseFromString(f,"text/html"))).subscribe(e),e.pipe(He(1)).subscribe(f=>{for(let u of["title","link[rel=canonical]","meta[name=author]","meta[name=description]","[data-md-component=announce]","[data-md-component=container]","[data-md-component=header-topic]","[data-md-component=outdated]","[data-md-component=logo]","[data-md-component=skip]",...Z("navigation.tabs.sticky")?["[data-md-component=tabs]"]:[]]){let p=pe(u),l=pe(u,f);typeof p!="undefined"&&typeof l!="undefined"&&p.replaceWith(l)}}),e.pipe(He(1),m(()=>_e("container")),S(f=>Q("script",f)),Ir(f=>{let u=M("script");if(f.src){for(let p of f.getAttributeNames())u.setAttribute(p,f.getAttribute(p));return f.replaceWith(u),new F(p=>{u.onload=()=>p.complete()})}else return u.textContent=f.textContent,f.replaceWith(u),R})).subscribe(),A(i,s).pipe(ut(e)).subscribe(({url:f,offset:u})=>{f.hash&&!u?Io(f.hash):window.scrollTo(0,(u==null?void 0:u.y)||0)}),r.pipe(Mt(i),Re(250),J("offset")).subscribe(({offset:f})=>{history.replaceState(f,"")}),A(i,s).pipe(Ce(2,1),x(([f,u])=>f.url.pathname===u.url.pathname),m(([,f])=>f)).subscribe(({offset:f})=>{window.scrollTo(0,(f==null?void 0:f.y)||0)})}var As=Ye(tn());var Oi=Ye(tn());function rn(e,t){let r=new RegExp(e.separator,"img"),n=(o,i,s)=>`${i}${s}`;return o=>{o=o.replace(/[\s*+\-:~^]+/g," ").trim();let i=new RegExp(`(^|${e.separator})(${o.replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&").replace(r,"|")})`,"img");return s=>(t?(0,Oi.default)(s):s).replace(i,n).replace(/<\/mark>(\s+)]*>/img,"$1")}}function _i(e){return e.split(/"([^"]+)"/g).map((t,r)=>r&1?t.replace(/^\b|^(?![^\x00-\x7F]|$)|\s+/g," +"):t).join("").replace(/"|(?:^|\s+)[*+\-:^~]+(?=\s+|$)/g,"").trim()}function bt(e){return e.type===1}function Ti(e){return e.type===2}function vt(e){return e.type===3}function Rs({config:e,docs:t}){e.lang.length===1&&e.lang[0]==="en"&&(e.lang=[re("search.config.lang")]),e.separator==="[\\s\\-]+"&&(e.separator=re("search.config.separator"));let n={pipeline:re("search.config.pipeline").split(/\s*,\s*/).filter(Boolean),suggestions:Z("search.suggest")};return{config:e,docs:t,options:n}}function Mi(e,t){let r=le(),n=new Worker(e),o=new E,i=Ko(n,{tx$:o}).pipe(m(s=>{if(vt(s))for(let a of s.data.items)for(let c of a)c.location=`${new URL(c.location,r.base)}`;return s}),ie());return ue(t).pipe(m(s=>({type:0,data:Rs(s)}))).subscribe(o.next.bind(o)),{tx$:o,rx$:i}}function Li({document$:e}){let t=le(),r=je(new URL("../versions.json",t.base)).pipe(ce(()=>R)),n=r.pipe(m(o=>{let[,i]=t.base.match(/([^/]+)\/?$/);return o.find(({version:s,aliases:a})=>s===i||a.includes(i))||o[0]}));r.pipe(m(o=>new Map(o.map(i=>[`${new URL(`../${i.version}/`,t.base)}`,i]))),S(o=>v(document.body,"click").pipe(x(i=>!i.metaKey&&!i.ctrlKey),ae(n),S(([i,s])=>{if(i.target instanceof Element){let a=i.target.closest("a");if(a&&!a.target&&o.has(a.href)){let c=a.href;return!i.target.closest(".md-version")&&o.get(c)===s?R:(i.preventDefault(),I(c))}}return R}),S(i=>{let{version:s}=o.get(i);return hr(new URL(i)).pipe(m(a=>{let f=Oe().href.replace(t.base,"");return a.includes(f.split("#")[0])?new URL(`../${s}/${f}`,t.base):new URL(i)}))})))).subscribe(o=>pr(o)),Y([r,n]).subscribe(([o,i])=>{K(".md-header__topic").appendChild(ei(o,i))}),e.pipe(S(()=>n)).subscribe(o=>{var s;let i=__md_get("__outdated",sessionStorage);if(i===null){let a=((s=t.version)==null?void 0:s.default)||"latest";i=!o.aliases.includes(a),__md_set("__outdated",i,sessionStorage)}if(i)for(let a of te("outdated"))a.hidden=!1})}function ks(e,{rx$:t}){let r=(__search==null?void 0:__search.transform)||_i,{searchParams:n}=Oe();n.has("q")&&Ke("search",!0);let o=t.pipe(x(bt),oe(1),m(()=>n.get("q")||""));dt("search").pipe(x(a=>!a),oe(1)).subscribe(()=>{let a=new URL(location.href);a.searchParams.delete("q"),history.replaceState({},"",`${a}`)}),o.subscribe(a=>{a&&(e.value=a,e.focus())});let i=nr(e),s=A(v(e,"keyup"),v(e,"focus").pipe(ke(1)),o).pipe(m(()=>r(e.value)),N(""),B());return Y([s,i]).pipe(m(([a,c])=>({value:a,focus:c})),X(1))}function Ai(e,{tx$:t,rx$:r}){let n=new E,o=n.pipe(de(1));return n.pipe(J("value"),m(({value:i})=>({type:2,data:i}))).subscribe(t.next.bind(t)),n.pipe(J("focus")).subscribe(({focus:i})=>{i?(Ke("search",i),e.placeholder=""):e.placeholder=re("search.placeholder")}),v(e.form,"reset").pipe(ee(o)).subscribe(()=>e.focus()),ks(e,{tx$:t,rx$:r}).pipe(w(i=>n.next(i)),C(()=>n.complete()),m(i=>H({ref:e},i)),ie())}function Ci(e,{rx$:t},{query$:r}){let n=new E,o=Ao(e.parentElement).pipe(x(Boolean)),i=K(":scope > :first-child",e),s=K(":scope > :last-child",e),a=t.pipe(x(bt),oe(1));return n.pipe(ae(r),Mt(a)).subscribe(([{items:f},{value:u}])=>{if(u)switch(f.length){case 0:i.textContent=re("search.result.none");break;case 1:i.textContent=re("search.result.one");break;default:i.textContent=re("search.result.other",lr(f.length))}else i.textContent=re("search.result.placeholder")}),n.pipe(w(()=>s.innerHTML=""),S(({items:f})=>A(I(...f.slice(0,10)),I(...f.slice(10)).pipe(Ce(4),Nr(o),S(([u])=>u))))).subscribe(f=>s.appendChild(Jo(f))),t.pipe(x(vt),m(({data:f})=>f)).pipe(w(f=>n.next(f)),C(()=>n.complete()),m(f=>H({ref:e},f)))}function Hs(e,{query$:t}){return t.pipe(m(({value:r})=>{let n=Oe();return n.hash="",n.searchParams.delete("h"),n.searchParams.set("q",r),{url:n}}))}function Ri(e,t){let r=new E;return r.subscribe(({url:n})=>{e.setAttribute("data-clipboard-text",e.href),e.href=`${n}`}),v(e,"click").subscribe(n=>n.preventDefault()),Hs(e,t).pipe(w(n=>r.next(n)),C(()=>r.complete()),m(n=>H({ref:e},n)))}function ki(e,{rx$:t},{keyboard$:r}){let n=new E,o=_e("search-query"),i=A(v(o,"keydown"),v(o,"focus")).pipe(Le(fe),m(()=>o.value),B());return n.pipe(Ze(i),m(([{suggestions:a},c])=>{let f=c.split(/([\s-]+)/);if((a==null?void 0:a.length)&&f[f.length-1]){let u=a[a.length-1];u.startsWith(f[f.length-1])&&(f[f.length-1]=u)}else f.length=0;return f})).subscribe(a=>e.innerHTML=a.join("").replace(/\s/g," ")),r.pipe(x(({mode:a})=>a==="search")).subscribe(a=>{switch(a.type){case"ArrowRight":e.innerText.length&&o.selectionStart===o.value.length&&(o.value=e.innerText);break}}),t.pipe(x(vt),m(({data:a})=>a)).pipe(w(a=>n.next(a)),C(()=>n.complete()),m(()=>({ref:e})))}function Hi(e,{index$:t,keyboard$:r}){let n=le();try{let o=(__search==null?void 0:__search.worker)||n.search,i=Mi(o,t),s=_e("search-query",e),a=_e("search-result",e),{tx$:c,rx$:f}=i;c.pipe(x(Ti),ut(f.pipe(x(bt))),oe(1)).subscribe(c.next.bind(c)),r.pipe(x(({mode:l})=>l==="search")).subscribe(l=>{let d=Ie();switch(l.type){case"Enter":if(d===s){let h=new Map;for(let b of Q(":first-child [href]",a)){let U=b.firstElementChild;h.set(b,parseFloat(U.getAttribute("data-md-score")))}if(h.size){let[[b]]=[...h].sort(([,U],[,G])=>G-U);b.click()}l.claim()}break;case"Escape":case"Tab":Ke("search",!1),s.blur();break;case"ArrowUp":case"ArrowDown":if(typeof d=="undefined")s.focus();else{let h=[s,...Q(":not(details) > [href], summary, details[open] [href]",a)],b=Math.max(0,(Math.max(0,h.indexOf(d))+h.length+(l.type==="ArrowUp"?-1:1))%h.length);h[b].focus()}l.claim();break;default:s!==Ie()&&s.focus()}}),r.pipe(x(({mode:l})=>l==="global")).subscribe(l=>{switch(l.type){case"f":case"s":case"/":s.focus(),s.select(),l.claim();break}});let u=Ai(s,i),p=Ci(a,i,{query$:u});return A(u,p).pipe(et(...te("search-share",e).map(l=>Ri(l,{query$:u})),...te("search-suggest",e).map(l=>ki(l,i,{keyboard$:r}))))}catch(o){return e.hidden=!0,Se}}function Pi(e,{index$:t,location$:r}){return Y([t,r.pipe(N(Oe()),x(n=>!!n.searchParams.get("h")))]).pipe(m(([n,o])=>rn(n.config,!0)(o.searchParams.get("h"))),m(n=>{var s;let o=new Map,i=document.createNodeIterator(e,NodeFilter.SHOW_TEXT);for(let a=i.nextNode();a;a=i.nextNode())if((s=a.parentElement)!=null&&s.offsetHeight){let c=a.textContent,f=n(c);f.length>c.length&&o.set(a,f)}for(let[a,c]of o){let{childNodes:f}=M("span",null,c);a.replaceWith(...Array.from(f))}return{ref:e,nodes:o}}))}function Ps(e,{viewport$:t,main$:r}){let n=e.parentElement,o=n.offsetTop-n.parentElement.offsetTop;return Y([r,t]).pipe(m(([{offset:i,height:s},{offset:{y:a}}])=>(s=s+Math.min(o,Math.max(0,a-i))-o,{height:s,locked:a>=i+o})),B((i,s)=>i.height===s.height&&i.locked===s.locked))}function nn(e,n){var o=n,{header$:t}=o,r=un(o,["header$"]);let i=K(".md-sidebar__scrollwrap",e),{y:s}=qe(i);return P(()=>{let a=new E;return a.pipe(Ae(0,xe),ae(t)).subscribe({next([{height:c},{height:f}]){i.style.height=`${c-2*s}px`,e.style.top=`${f}px`},complete(){i.style.height="",e.style.top=""}}),a.pipe(Le(xe),oe(1)).subscribe(()=>{for(let c of Q(".md-nav__link--active[href]",e)){let f=cr(c);if(typeof f!="undefined"){let u=c.offsetTop-f.offsetTop,{height:p}=he(f);f.scrollTo({top:u-p/2})}}}),Ps(e,r).pipe(w(c=>a.next(c)),C(()=>a.complete()),m(c=>H({ref:e},c)))})}function $i(e,t){if(typeof t!="undefined"){let r=`https://api.github.com/repos/${e}/${t}`;return _t(je(`${r}/releases/latest`).pipe(ce(()=>R),m(n=>({version:n.tag_name})),De({})),je(r).pipe(ce(()=>R),m(n=>({stars:n.stargazers_count,forks:n.forks_count})),De({}))).pipe(m(([n,o])=>H(H({},n),o)))}else{let r=`https://api.github.com/users/${e}`;return je(r).pipe(m(n=>({repositories:n.public_repos})),De({}))}}function Ii(e,t){let r=`https://${e}/api/v4/projects/${encodeURIComponent(t)}`;return je(r).pipe(ce(()=>R),m(({star_count:n,forks_count:o})=>({stars:n,forks:o})),De({}))}function ji(e){let t=e.match(/^.+github\.com\/([^/]+)\/?([^/]+)?/i);if(t){let[,r,n]=t;return $i(r,n)}if(t=e.match(/^.+?([^/]*gitlab[^/]+)\/(.+?)\/?$/i),t){let[,r,n]=t;return Ii(r,n)}return R}var $s;function Is(e){return $s||($s=P(()=>{let t=__md_get("__source",sessionStorage);if(t)return I(t);if(te("consent").length){let n=__md_get("__consent");if(!(n&&n.github))return R}return ji(e.href).pipe(w(n=>__md_set("__source",n,sessionStorage)))}).pipe(ce(()=>R),x(t=>Object.keys(t).length>0),m(t=>({facts:t})),X(1)))}function Fi(e){let t=K(":scope > :last-child",e);return P(()=>{let r=new E;return r.subscribe(({facts:n})=>{t.appendChild(Xo(n)),t.classList.add("md-source__repository--active")}),Is(e).pipe(w(n=>r.next(n)),C(()=>r.complete()),m(n=>H({ref:e},n)))})}function js(e,{viewport$:t,header$:r}){return ve(document.body).pipe(S(()=>dr(e,{header$:r,viewport$:t})),m(({offset:{y:n}})=>({hidden:n>=10})),J("hidden"))}function Ui(e,t){return P(()=>{let r=new E;return r.subscribe({next({hidden:n}){e.hidden=n},complete(){e.hidden=!1}}),(Z("navigation.tabs.sticky")?I({hidden:!1}):js(e,t)).pipe(w(n=>r.next(n)),C(()=>r.complete()),m(n=>H({ref:e},n)))})}function Fs(e,{viewport$:t,header$:r}){let n=new Map,o=Q("[href^=\\#]",e);for(let a of o){let c=decodeURIComponent(a.hash.substring(1)),f=pe(`[id="${c}"]`);typeof f!="undefined"&&n.set(a,f)}let i=r.pipe(J("height"),m(({height:a})=>{let c=_e("main"),f=K(":scope > :first-child",c);return a+.8*(f.offsetTop-c.offsetTop)}),ie());return ve(document.body).pipe(J("height"),S(a=>P(()=>{let c=[];return I([...n].reduce((f,[u,p])=>{for(;c.length&&n.get(c[c.length-1]).tagName>=p.tagName;)c.pop();let l=p.offsetTop;for(;!l&&p.parentElement;)p=p.parentElement,l=p.offsetTop;return f.set([...c=[...c,u]].reverse(),l)},new Map))}).pipe(m(c=>new Map([...c].sort(([,f],[,u])=>f-u))),Ze(i),S(([c,f])=>t.pipe(Ur(([u,p],{offset:{y:l},size:d})=>{let h=l+d.height>=Math.floor(a.height);for(;p.length;){let[,b]=p[0];if(b-f=l&&!h)p=[u.pop(),...p];else break}return[u,p]},[[],[...c]]),B((u,p)=>u[0]===p[0]&&u[1]===p[1])))))).pipe(m(([a,c])=>({prev:a.map(([f])=>f),next:c.map(([f])=>f)})),N({prev:[],next:[]}),Ce(2,1),m(([a,c])=>a.prev.length{let o=new E,i=o.pipe(de(1));if(o.subscribe(({prev:s,next:a})=>{for(let[c]of a)c.classList.remove("md-nav__link--passed"),c.classList.remove("md-nav__link--active");for(let[c,[f]]of s.entries())f.classList.add("md-nav__link--passed"),f.classList.toggle("md-nav__link--active",c===s.length-1)}),Z("toc.follow")){let s=A(t.pipe(Re(1),m(()=>{})),t.pipe(Re(250),m(()=>"smooth")));o.pipe(x(({prev:a})=>a.length>0),ae(s)).subscribe(([{prev:a},c])=>{let[f]=a[a.length-1];if(f.offsetHeight){let u=cr(f);if(typeof u!="undefined"){let p=f.offsetTop-u.offsetTop,{height:l}=he(u);u.scrollTo({top:p-l/2,behavior:c})}}})}return Z("navigation.tracking")&&t.pipe(ee(i),J("offset"),Re(250),He(1),ee(n.pipe(He(1))),Tt({delay:250}),ae(o)).subscribe(([,{prev:s}])=>{let a=Oe(),c=s[s.length-1];if(c&&c.length){let[f]=c,{hash:u}=new URL(f.href);a.hash!==u&&(a.hash=u,history.replaceState({},"",`${a}`))}else a.hash="",history.replaceState({},"",`${a}`)}),Fs(e,{viewport$:t,header$:r}).pipe(w(s=>o.next(s)),C(()=>o.complete()),m(s=>H({ref:e},s)))})}function Us(e,{viewport$:t,main$:r,target$:n}){let o=t.pipe(m(({offset:{y:s}})=>s),Ce(2,1),m(([s,a])=>s>a&&a>0),B()),i=r.pipe(m(({active:s})=>s));return Y([i,o]).pipe(m(([s,a])=>!(s&&a)),B(),ee(n.pipe(He(1))),Fr(!0),Tt({delay:250}),m(s=>({hidden:s})))}function Wi(e,{viewport$:t,header$:r,main$:n,target$:o}){let i=new E,s=i.pipe(de(1));return i.subscribe({next({hidden:a}){e.hidden=a,a?(e.setAttribute("tabindex","-1"),e.blur()):e.removeAttribute("tabindex")},complete(){e.style.top="",e.hidden=!0,e.removeAttribute("tabindex")}}),r.pipe(ee(s),J("height")).subscribe(({height:a})=>{e.style.top=`${a+16}px`}),Us(e,{viewport$:t,main$:n,target$:o}).pipe(w(a=>i.next(a)),C(()=>i.complete()),m(a=>H({ref:e},a)))}function Vi({document$:e,tablet$:t}){e.pipe(S(()=>Q(".md-toggle--indeterminate, [data-md-state=indeterminate]")),w(r=>{r.indeterminate=!0,r.checked=!1}),se(r=>v(r,"change").pipe(Wr(()=>r.classList.contains("md-toggle--indeterminate")),m(()=>r))),ae(t)).subscribe(([r,n])=>{r.classList.remove("md-toggle--indeterminate"),n&&(r.checked=!1)})}function Ds(){return/(iPad|iPhone|iPod)/.test(navigator.userAgent)}function zi({document$:e}){e.pipe(S(()=>Q("[data-md-scrollfix]")),w(t=>t.removeAttribute("data-md-scrollfix")),x(Ds),se(t=>v(t,"touchstart").pipe(m(()=>t)))).subscribe(t=>{let r=t.scrollTop;r===0?t.scrollTop=1:r+t.offsetHeight===t.scrollHeight&&(t.scrollTop=r-1)})}function Ni({viewport$:e,tablet$:t}){Y([dt("search"),t]).pipe(m(([r,n])=>r&&!n),S(r=>I(r).pipe(ke(r?400:100))),ae(e)).subscribe(([r,{offset:{y:n}}])=>{if(r)document.body.setAttribute("data-md-scrolllock",""),document.body.style.top=`-${n}px`;else{let o=-1*parseInt(document.body.style.top,10);document.body.removeAttribute("data-md-scrolllock"),document.body.style.top="",o&&window.scrollTo(0,o)}})}Object.entries||(Object.entries=function(e){let t=[];for(let r of Object.keys(e))t.push([r,e[r]]);return t});Object.values||(Object.values=function(e){let t=[];for(let r of Object.keys(e))t.push(e[r]);return t});typeof Element!="undefined"&&(Element.prototype.scrollTo||(Element.prototype.scrollTo=function(e,t){typeof e=="object"?(this.scrollLeft=e.left,this.scrollTop=e.top):(this.scrollLeft=e,this.scrollTop=t)}),Element.prototype.replaceWith||(Element.prototype.replaceWith=function(...e){let t=this.parentNode;if(t){e.length===0&&t.removeChild(this);for(let r=e.length-1;r>=0;r--){let n=e[r];typeof n=="string"?n=document.createTextNode(n):n.parentNode&&n.parentNode.removeChild(n),r?t.insertBefore(this.previousSibling,n):t.replaceChild(n,this)}}}));document.documentElement.classList.remove("no-js");document.documentElement.classList.add("js");var tt=go(),vr=ko(),gt=jo(),on=Ro(),we=qo(),gr=Kr("(min-width: 960px)"),Ki=Kr("(min-width: 1220px)"),Qi=Fo(),Yi=le(),Bi=document.forms.namedItem("search")?(__search==null?void 0:__search.index)||je(new URL("search/search_index.json",Yi.base)):Se,an=new E;wi({alert$:an});Z("navigation.instant")&&Ei({document$:tt,location$:vr,viewport$:we});var qi;((qi=Yi.version)==null?void 0:qi.provider)==="mike"&&Li({document$:tt});A(vr,gt).pipe(ke(125)).subscribe(()=>{Ke("drawer",!1),Ke("search",!1)});on.pipe(x(({mode:e})=>e==="global")).subscribe(e=>{switch(e.type){case"p":case",":let t=pe("[href][rel=prev]");typeof t!="undefined"&&t.click();break;case"n":case".":let r=pe("[href][rel=next]");typeof r!="undefined"&&r.click();break}});Vi({document$:tt,tablet$:gr});zi({document$:tt});Ni({viewport$:we,tablet$:gr});var Qe=bi(_e("header"),{viewport$:we}),br=tt.pipe(m(()=>_e("main")),S(e=>yi(e,{viewport$:we,header$:Qe})),X(1)),Ws=A(...te("consent").map(e=>Yo(e,{target$:gt})),...te("dialog").map(e=>hi(e,{alert$:an})),...te("header").map(e=>vi(e,{viewport$:we,header$:Qe,main$:br})),...te("palette").map(e=>xi(e)),...te("search").map(e=>Hi(e,{index$:Bi,keyboard$:on})),...te("source").map(e=>Fi(e))),Vs=P(()=>A(...te("announce").map(e=>Qo(e)),...te("content").map(e=>di(e,{viewport$:we,target$:gt,print$:Qi})),...te("content").map(e=>Z("search.highlight")?Pi(e,{index$:Bi,location$:vr}):R),...te("header-title").map(e=>gi(e,{viewport$:we,header$:Qe})),...te("sidebar").map(e=>e.getAttribute("data-md-type")==="navigation"?Qr(Ki,()=>nn(e,{viewport$:we,header$:Qe,main$:br})):Qr(gr,()=>nn(e,{viewport$:we,header$:Qe,main$:br}))),...te("tabs").map(e=>Ui(e,{viewport$:we,header$:Qe})),...te("toc").map(e=>Di(e,{viewport$:we,header$:Qe,target$:gt})),...te("top").map(e=>Wi(e,{viewport$:we,header$:Qe,main$:br,target$:gt})))),Gi=tt.pipe(S(()=>Vs),et(Ws),X(1));Gi.subscribe();window.document$=tt;window.location$=vr;window.target$=gt;window.keyboard$=on;window.viewport$=we;window.tablet$=gr;window.screen$=Ki;window.print$=Qi;window.alert$=an;window.component$=Gi;})(); +//# sourceMappingURL=bundle.8492ddcf.min.js.map + diff --git a/assets/javascripts/bundle.8492ddcf.min.js.map b/assets/javascripts/bundle.8492ddcf.min.js.map new file mode 100644 index 00000000..94913558 --- /dev/null +++ b/assets/javascripts/bundle.8492ddcf.min.js.map @@ -0,0 +1,8 @@ +{ + "version": 3, + "sources": ["node_modules/focus-visible/dist/focus-visible.js", "node_modules/url-polyfill/url-polyfill.js", "node_modules/rxjs/node_modules/tslib/tslib.js", "node_modules/clipboard/dist/clipboard.js", "node_modules/escape-html/index.js", "node_modules/array-flat-polyfill/index.mjs", "src/assets/javascripts/bundle.ts", "node_modules/unfetch/polyfill/index.js", "node_modules/rxjs/node_modules/tslib/modules/index.js", "node_modules/rxjs/src/internal/util/isFunction.ts", "node_modules/rxjs/src/internal/util/createErrorClass.ts", "node_modules/rxjs/src/internal/util/UnsubscriptionError.ts", "node_modules/rxjs/src/internal/util/arrRemove.ts", "node_modules/rxjs/src/internal/Subscription.ts", "node_modules/rxjs/src/internal/config.ts", "node_modules/rxjs/src/internal/scheduler/timeoutProvider.ts", "node_modules/rxjs/src/internal/util/reportUnhandledError.ts", "node_modules/rxjs/src/internal/util/noop.ts", "node_modules/rxjs/src/internal/NotificationFactories.ts", "node_modules/rxjs/src/internal/util/errorContext.ts", "node_modules/rxjs/src/internal/Subscriber.ts", "node_modules/rxjs/src/internal/symbol/observable.ts", "node_modules/rxjs/src/internal/util/identity.ts", "node_modules/rxjs/src/internal/util/pipe.ts", "node_modules/rxjs/src/internal/Observable.ts", "node_modules/rxjs/src/internal/util/lift.ts", "node_modules/rxjs/src/internal/operators/OperatorSubscriber.ts", "node_modules/rxjs/src/internal/scheduler/animationFrameProvider.ts", "node_modules/rxjs/src/internal/util/ObjectUnsubscribedError.ts", "node_modules/rxjs/src/internal/Subject.ts", "node_modules/rxjs/src/internal/scheduler/dateTimestampProvider.ts", "node_modules/rxjs/src/internal/ReplaySubject.ts", "node_modules/rxjs/src/internal/scheduler/Action.ts", "node_modules/rxjs/src/internal/scheduler/intervalProvider.ts", "node_modules/rxjs/src/internal/scheduler/AsyncAction.ts", "node_modules/rxjs/src/internal/Scheduler.ts", "node_modules/rxjs/src/internal/scheduler/AsyncScheduler.ts", "node_modules/rxjs/src/internal/scheduler/async.ts", "node_modules/rxjs/src/internal/scheduler/AnimationFrameAction.ts", "node_modules/rxjs/src/internal/scheduler/AnimationFrameScheduler.ts", "node_modules/rxjs/src/internal/scheduler/animationFrame.ts", "node_modules/rxjs/src/internal/observable/empty.ts", "node_modules/rxjs/src/internal/util/isScheduler.ts", "node_modules/rxjs/src/internal/util/args.ts", "node_modules/rxjs/src/internal/util/isArrayLike.ts", "node_modules/rxjs/src/internal/util/isPromise.ts", "node_modules/rxjs/src/internal/util/isInteropObservable.ts", "node_modules/rxjs/src/internal/util/isAsyncIterable.ts", "node_modules/rxjs/src/internal/util/throwUnobservableError.ts", "node_modules/rxjs/src/internal/symbol/iterator.ts", "node_modules/rxjs/src/internal/util/isIterable.ts", "node_modules/rxjs/src/internal/util/isReadableStreamLike.ts", "node_modules/rxjs/src/internal/observable/innerFrom.ts", "node_modules/rxjs/src/internal/util/executeSchedule.ts", "node_modules/rxjs/src/internal/operators/observeOn.ts", "node_modules/rxjs/src/internal/operators/subscribeOn.ts", "node_modules/rxjs/src/internal/scheduled/scheduleObservable.ts", "node_modules/rxjs/src/internal/scheduled/schedulePromise.ts", "node_modules/rxjs/src/internal/scheduled/scheduleArray.ts", "node_modules/rxjs/src/internal/scheduled/scheduleIterable.ts", "node_modules/rxjs/src/internal/scheduled/scheduleAsyncIterable.ts", "node_modules/rxjs/src/internal/scheduled/scheduleReadableStreamLike.ts", "node_modules/rxjs/src/internal/scheduled/scheduled.ts", "node_modules/rxjs/src/internal/observable/from.ts", "node_modules/rxjs/src/internal/observable/of.ts", "node_modules/rxjs/src/internal/observable/throwError.ts", "node_modules/rxjs/src/internal/util/isDate.ts", "node_modules/rxjs/src/internal/operators/map.ts", "node_modules/rxjs/src/internal/util/mapOneOrManyArgs.ts", "node_modules/rxjs/src/internal/util/argsArgArrayOrObject.ts", "node_modules/rxjs/src/internal/util/createObject.ts", "node_modules/rxjs/src/internal/observable/combineLatest.ts", "node_modules/rxjs/src/internal/operators/mergeInternals.ts", "node_modules/rxjs/src/internal/operators/mergeMap.ts", "node_modules/rxjs/src/internal/operators/mergeAll.ts", "node_modules/rxjs/src/internal/operators/concatAll.ts", "node_modules/rxjs/src/internal/observable/concat.ts", "node_modules/rxjs/src/internal/observable/defer.ts", "node_modules/rxjs/src/internal/observable/fromEvent.ts", "node_modules/rxjs/src/internal/observable/fromEventPattern.ts", "node_modules/rxjs/src/internal/observable/timer.ts", "node_modules/rxjs/src/internal/observable/merge.ts", "node_modules/rxjs/src/internal/observable/never.ts", "node_modules/rxjs/src/internal/util/argsOrArgArray.ts", "node_modules/rxjs/src/internal/operators/filter.ts", "node_modules/rxjs/src/internal/observable/zip.ts", "node_modules/rxjs/src/internal/operators/audit.ts", "node_modules/rxjs/src/internal/operators/auditTime.ts", "node_modules/rxjs/src/internal/operators/bufferCount.ts", "node_modules/rxjs/src/internal/operators/catchError.ts", "node_modules/rxjs/src/internal/operators/scanInternals.ts", "node_modules/rxjs/src/internal/operators/combineLatest.ts", "node_modules/rxjs/src/internal/operators/combineLatestWith.ts", "node_modules/rxjs/src/internal/operators/concatMap.ts", "node_modules/rxjs/src/internal/operators/debounceTime.ts", "node_modules/rxjs/src/internal/operators/defaultIfEmpty.ts", "node_modules/rxjs/src/internal/operators/take.ts", "node_modules/rxjs/src/internal/operators/ignoreElements.ts", "node_modules/rxjs/src/internal/operators/mapTo.ts", "node_modules/rxjs/src/internal/operators/delayWhen.ts", "node_modules/rxjs/src/internal/operators/delay.ts", "node_modules/rxjs/src/internal/operators/distinctUntilChanged.ts", "node_modules/rxjs/src/internal/operators/distinctUntilKeyChanged.ts", "node_modules/rxjs/src/internal/operators/endWith.ts", "node_modules/rxjs/src/internal/operators/finalize.ts", "node_modules/rxjs/src/internal/operators/takeLast.ts", "node_modules/rxjs/src/internal/operators/merge.ts", "node_modules/rxjs/src/internal/operators/mergeWith.ts", "node_modules/rxjs/src/internal/operators/repeat.ts", "node_modules/rxjs/src/internal/operators/sample.ts", "node_modules/rxjs/src/internal/operators/scan.ts", "node_modules/rxjs/src/internal/operators/share.ts", "node_modules/rxjs/src/internal/operators/shareReplay.ts", "node_modules/rxjs/src/internal/operators/skip.ts", "node_modules/rxjs/src/internal/operators/skipUntil.ts", "node_modules/rxjs/src/internal/operators/startWith.ts", "node_modules/rxjs/src/internal/operators/switchMap.ts", "node_modules/rxjs/src/internal/operators/takeUntil.ts", "node_modules/rxjs/src/internal/operators/takeWhile.ts", "node_modules/rxjs/src/internal/operators/tap.ts", "node_modules/rxjs/src/internal/operators/throttle.ts", "node_modules/rxjs/src/internal/operators/throttleTime.ts", "node_modules/rxjs/src/internal/operators/withLatestFrom.ts", "node_modules/rxjs/src/internal/operators/zip.ts", "node_modules/rxjs/src/internal/operators/zipWith.ts", "src/assets/javascripts/browser/document/index.ts", "src/assets/javascripts/browser/element/_/index.ts", "src/assets/javascripts/browser/element/focus/index.ts", "src/assets/javascripts/browser/element/offset/_/index.ts", "src/assets/javascripts/browser/element/offset/content/index.ts", "node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js", "src/assets/javascripts/browser/element/size/_/index.ts", "src/assets/javascripts/browser/element/size/content/index.ts", "src/assets/javascripts/browser/element/visibility/index.ts", "src/assets/javascripts/browser/toggle/index.ts", "src/assets/javascripts/browser/keyboard/index.ts", "src/assets/javascripts/browser/location/_/index.ts", "src/assets/javascripts/utilities/h/index.ts", "src/assets/javascripts/utilities/string/index.ts", "src/assets/javascripts/browser/location/hash/index.ts", "src/assets/javascripts/browser/media/index.ts", "src/assets/javascripts/browser/request/index.ts", "src/assets/javascripts/browser/script/index.ts", "src/assets/javascripts/browser/viewport/offset/index.ts", "src/assets/javascripts/browser/viewport/size/index.ts", "src/assets/javascripts/browser/viewport/_/index.ts", "src/assets/javascripts/browser/viewport/at/index.ts", "src/assets/javascripts/browser/worker/index.ts", "src/assets/javascripts/_/index.ts", "src/assets/javascripts/components/_/index.ts", "src/assets/javascripts/components/announce/index.ts", "src/assets/javascripts/components/consent/index.ts", "src/assets/javascripts/components/content/code/_/index.ts", "src/assets/javascripts/templates/tooltip/index.tsx", "src/assets/javascripts/templates/annotation/index.tsx", "src/assets/javascripts/templates/clipboard/index.tsx", "src/assets/javascripts/templates/search/index.tsx", "src/assets/javascripts/templates/source/index.tsx", "src/assets/javascripts/templates/tabbed/index.tsx", "src/assets/javascripts/templates/table/index.tsx", "src/assets/javascripts/templates/version/index.tsx", "src/assets/javascripts/components/content/annotation/_/index.ts", "src/assets/javascripts/components/content/annotation/list/index.ts", "src/assets/javascripts/components/content/code/mermaid/index.ts", "src/assets/javascripts/components/content/details/index.ts", "src/assets/javascripts/components/content/table/index.ts", "src/assets/javascripts/components/content/tabs/index.ts", "src/assets/javascripts/components/content/_/index.ts", "src/assets/javascripts/components/dialog/index.ts", "src/assets/javascripts/components/header/_/index.ts", "src/assets/javascripts/components/header/title/index.ts", "src/assets/javascripts/components/main/index.ts", "src/assets/javascripts/components/palette/index.ts", "src/assets/javascripts/integrations/clipboard/index.ts", "src/assets/javascripts/integrations/sitemap/index.ts", "src/assets/javascripts/integrations/instant/index.ts", "src/assets/javascripts/integrations/search/document/index.ts", "src/assets/javascripts/integrations/search/highlighter/index.ts", "src/assets/javascripts/integrations/search/query/transform/index.ts", "src/assets/javascripts/integrations/search/worker/message/index.ts", "src/assets/javascripts/integrations/search/worker/_/index.ts", "src/assets/javascripts/integrations/version/index.ts", "src/assets/javascripts/components/search/query/index.ts", "src/assets/javascripts/components/search/result/index.ts", "src/assets/javascripts/components/search/share/index.ts", "src/assets/javascripts/components/search/suggest/index.ts", "src/assets/javascripts/components/search/_/index.ts", "src/assets/javascripts/components/search/highlight/index.ts", "src/assets/javascripts/components/sidebar/index.ts", "src/assets/javascripts/components/source/facts/github/index.ts", "src/assets/javascripts/components/source/facts/gitlab/index.ts", "src/assets/javascripts/components/source/facts/_/index.ts", "src/assets/javascripts/components/source/_/index.ts", "src/assets/javascripts/components/tabs/index.ts", "src/assets/javascripts/components/toc/index.ts", "src/assets/javascripts/components/top/index.ts", "src/assets/javascripts/patches/indeterminate/index.ts", "src/assets/javascripts/patches/scrollfix/index.ts", "src/assets/javascripts/patches/scrolllock/index.ts", "src/assets/javascripts/polyfills/index.ts"], + "sourceRoot": "../../../..", + "sourcesContent": ["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (factory());\n}(this, (function () { 'use strict';\n\n /**\n * Applies the :focus-visible polyfill at the given scope.\n * A scope in this case is either the top-level Document or a Shadow Root.\n *\n * @param {(Document|ShadowRoot)} scope\n * @see https://github.com/WICG/focus-visible\n */\n function applyFocusVisiblePolyfill(scope) {\n var hadKeyboardEvent = true;\n var hadFocusVisibleRecently = false;\n var hadFocusVisibleRecentlyTimeout = null;\n\n var inputTypesAllowlist = {\n text: true,\n search: true,\n url: true,\n tel: true,\n email: true,\n password: true,\n number: true,\n date: true,\n month: true,\n week: true,\n time: true,\n datetime: true,\n 'datetime-local': true\n };\n\n /**\n * Helper function for legacy browsers and iframes which sometimes focus\n * elements like document, body, and non-interactive SVG.\n * @param {Element} el\n */\n function isValidFocusTarget(el) {\n if (\n el &&\n el !== document &&\n el.nodeName !== 'HTML' &&\n el.nodeName !== 'BODY' &&\n 'classList' in el &&\n 'contains' in el.classList\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} el\n * @return {boolean}\n */\n function focusTriggersKeyboardModality(el) {\n var type = el.type;\n var tagName = el.tagName;\n\n if (tagName === 'INPUT' && inputTypesAllowlist[type] && !el.readOnly) {\n return true;\n }\n\n if (tagName === 'TEXTAREA' && !el.readOnly) {\n return true;\n }\n\n if (el.isContentEditable) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Add the `focus-visible` class to the given element if it was not added by\n * the author.\n * @param {Element} el\n */\n function addFocusVisibleClass(el) {\n if (el.classList.contains('focus-visible')) {\n return;\n }\n el.classList.add('focus-visible');\n el.setAttribute('data-focus-visible-added', '');\n }\n\n /**\n * Remove the `focus-visible` class from the given element if it was not\n * originally added by the author.\n * @param {Element} el\n */\n function removeFocusVisibleClass(el) {\n if (!el.hasAttribute('data-focus-visible-added')) {\n return;\n }\n el.classList.remove('focus-visible');\n el.removeAttribute('data-focus-visible-added');\n }\n\n /**\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * Apply `focus-visible` to any current active element and keep track\n * of our keyboard modality state with `hadKeyboardEvent`.\n * @param {KeyboardEvent} e\n */\n function onKeyDown(e) {\n if (e.metaKey || e.altKey || e.ctrlKey) {\n return;\n }\n\n if (isValidFocusTarget(scope.activeElement)) {\n addFocusVisibleClass(scope.activeElement);\n }\n\n hadKeyboardEvent = true;\n }\n\n /**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n * @param {Event} e\n */\n function onPointerDown(e) {\n hadKeyboardEvent = false;\n }\n\n /**\n * On `focus`, add the `focus-visible` class to the target if:\n * - the target received focus as a result of keyboard navigation, or\n * - the event target is an element that will likely require interaction\n * via the keyboard (e.g. a text box)\n * @param {Event} e\n */\n function onFocus(e) {\n // Prevent IE from focusing the document or HTML element.\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (hadKeyboardEvent || focusTriggersKeyboardModality(e.target)) {\n addFocusVisibleClass(e.target);\n }\n }\n\n /**\n * On `blur`, remove the `focus-visible` class from the target.\n * @param {Event} e\n */\n function onBlur(e) {\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (\n e.target.classList.contains('focus-visible') ||\n e.target.hasAttribute('data-focus-visible-added')\n ) {\n // To detect a tab/window switch, we look for a blur event followed\n // rapidly by a visibility change.\n // If we don't see a visibility change within 100ms, it's probably a\n // regular focus change.\n hadFocusVisibleRecently = true;\n window.clearTimeout(hadFocusVisibleRecentlyTimeout);\n hadFocusVisibleRecentlyTimeout = window.setTimeout(function() {\n hadFocusVisibleRecently = false;\n }, 100);\n removeFocusVisibleClass(e.target);\n }\n }\n\n /**\n * If the user changes tabs, keep track of whether or not the previously\n * focused element had .focus-visible.\n * @param {Event} e\n */\n function onVisibilityChange(e) {\n if (document.visibilityState === 'hidden') {\n // If the tab becomes active again, the browser will handle calling focus\n // on the element (Safari actually calls it twice).\n // If this tab change caused a blur on an element with focus-visible,\n // re-apply the class when the user switches back to the tab.\n if (hadFocusVisibleRecently) {\n hadKeyboardEvent = true;\n }\n addInitialPointerMoveListeners();\n }\n }\n\n /**\n * Add a group of listeners to detect usage of any pointing devices.\n * These listeners will be added when the polyfill first loads, and anytime\n * the window is blurred, so that they are active when the window regains\n * focus.\n */\n function addInitialPointerMoveListeners() {\n document.addEventListener('mousemove', onInitialPointerMove);\n document.addEventListener('mousedown', onInitialPointerMove);\n document.addEventListener('mouseup', onInitialPointerMove);\n document.addEventListener('pointermove', onInitialPointerMove);\n document.addEventListener('pointerdown', onInitialPointerMove);\n document.addEventListener('pointerup', onInitialPointerMove);\n document.addEventListener('touchmove', onInitialPointerMove);\n document.addEventListener('touchstart', onInitialPointerMove);\n document.addEventListener('touchend', onInitialPointerMove);\n }\n\n function removeInitialPointerMoveListeners() {\n document.removeEventListener('mousemove', onInitialPointerMove);\n document.removeEventListener('mousedown', onInitialPointerMove);\n document.removeEventListener('mouseup', onInitialPointerMove);\n document.removeEventListener('pointermove', onInitialPointerMove);\n document.removeEventListener('pointerdown', onInitialPointerMove);\n document.removeEventListener('pointerup', onInitialPointerMove);\n document.removeEventListener('touchmove', onInitialPointerMove);\n document.removeEventListener('touchstart', onInitialPointerMove);\n document.removeEventListener('touchend', onInitialPointerMove);\n }\n\n /**\n * When the polfyill first loads, assume the user is in keyboard modality.\n * If any event is received from a pointing device (e.g. mouse, pointer,\n * touch), turn off keyboard modality.\n * This accounts for situations where focus enters the page from the URL bar.\n * @param {Event} e\n */\n function onInitialPointerMove(e) {\n // Work around a Safari quirk that fires a mousemove on whenever the\n // window blurs, even if you're tabbing out of the page. \u00AF\\_(\u30C4)_/\u00AF\n if (e.target.nodeName && e.target.nodeName.toLowerCase() === 'html') {\n return;\n }\n\n hadKeyboardEvent = false;\n removeInitialPointerMoveListeners();\n }\n\n // For some kinds of state, we are interested in changes at the global scope\n // only. For example, global pointer input, global key presses and global\n // visibility change should affect the state at every scope:\n document.addEventListener('keydown', onKeyDown, true);\n document.addEventListener('mousedown', onPointerDown, true);\n document.addEventListener('pointerdown', onPointerDown, true);\n document.addEventListener('touchstart', onPointerDown, true);\n document.addEventListener('visibilitychange', onVisibilityChange, true);\n\n addInitialPointerMoveListeners();\n\n // For focus and blur, we specifically care about state changes in the local\n // scope. This is because focus / blur events that originate from within a\n // shadow root are not re-dispatched from the host element if it was already\n // the active element in its own scope:\n scope.addEventListener('focus', onFocus, true);\n scope.addEventListener('blur', onBlur, true);\n\n // We detect that a node is a ShadowRoot by ensuring that it is a\n // DocumentFragment and also has a host property. This check covers native\n // implementation and polyfill implementation transparently. If we only cared\n // about the native implementation, we could just check if the scope was\n // an instance of a ShadowRoot.\n if (scope.nodeType === Node.DOCUMENT_FRAGMENT_NODE && scope.host) {\n // Since a ShadowRoot is a special kind of DocumentFragment, it does not\n // have a root element to add a class to. So, we add this attribute to the\n // host element instead:\n scope.host.setAttribute('data-js-focus-visible', '');\n } else if (scope.nodeType === Node.DOCUMENT_NODE) {\n document.documentElement.classList.add('js-focus-visible');\n document.documentElement.setAttribute('data-js-focus-visible', '');\n }\n }\n\n // It is important to wrap all references to global window and document in\n // these checks to support server-side rendering use cases\n // @see https://github.com/WICG/focus-visible/issues/199\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n // Make the polyfill helper globally available. This can be used as a signal\n // to interested libraries that wish to coordinate with the polyfill for e.g.,\n // applying the polyfill to a shadow root:\n window.applyFocusVisiblePolyfill = applyFocusVisiblePolyfill;\n\n // Notify interested libraries of the polyfill's presence, in case the\n // polyfill was loaded lazily:\n var event;\n\n try {\n event = new CustomEvent('focus-visible-polyfill-ready');\n } catch (error) {\n // IE11 does not support using CustomEvent as a constructor directly:\n event = document.createEvent('CustomEvent');\n event.initCustomEvent('focus-visible-polyfill-ready', false, false, {});\n }\n\n window.dispatchEvent(event);\n }\n\n if (typeof document !== 'undefined') {\n // Apply the polyfill to the global document, so that no JavaScript\n // coordination is required to use the polyfill in the top-level document:\n applyFocusVisiblePolyfill(document);\n }\n\n})));\n", "(function(global) {\r\n /**\r\n * Polyfill URLSearchParams\r\n *\r\n * Inspired from : https://github.com/WebReflection/url-search-params/blob/master/src/url-search-params.js\r\n */\r\n\r\n var checkIfIteratorIsSupported = function() {\r\n try {\r\n return !!Symbol.iterator;\r\n } catch (error) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var iteratorSupported = checkIfIteratorIsSupported();\r\n\r\n var createIterator = function(items) {\r\n var iterator = {\r\n next: function() {\r\n var value = items.shift();\r\n return { done: value === void 0, value: value };\r\n }\r\n };\r\n\r\n if (iteratorSupported) {\r\n iterator[Symbol.iterator] = function() {\r\n return iterator;\r\n };\r\n }\r\n\r\n return iterator;\r\n };\r\n\r\n /**\r\n * Search param name and values should be encoded according to https://url.spec.whatwg.org/#urlencoded-serializing\r\n * encodeURIComponent() produces the same result except encoding spaces as `%20` instead of `+`.\r\n */\r\n var serializeParam = function(value) {\r\n return encodeURIComponent(value).replace(/%20/g, '+');\r\n };\r\n\r\n var deserializeParam = function(value) {\r\n return decodeURIComponent(String(value).replace(/\\+/g, ' '));\r\n };\r\n\r\n var polyfillURLSearchParams = function() {\r\n\r\n var URLSearchParams = function(searchString) {\r\n Object.defineProperty(this, '_entries', { writable: true, value: {} });\r\n var typeofSearchString = typeof searchString;\r\n\r\n if (typeofSearchString === 'undefined') {\r\n // do nothing\r\n } else if (typeofSearchString === 'string') {\r\n if (searchString !== '') {\r\n this._fromString(searchString);\r\n }\r\n } else if (searchString instanceof URLSearchParams) {\r\n var _this = this;\r\n searchString.forEach(function(value, name) {\r\n _this.append(name, value);\r\n });\r\n } else if ((searchString !== null) && (typeofSearchString === 'object')) {\r\n if (Object.prototype.toString.call(searchString) === '[object Array]') {\r\n for (var i = 0; i < searchString.length; i++) {\r\n var entry = searchString[i];\r\n if ((Object.prototype.toString.call(entry) === '[object Array]') || (entry.length !== 2)) {\r\n this.append(entry[0], entry[1]);\r\n } else {\r\n throw new TypeError('Expected [string, any] as entry at index ' + i + ' of URLSearchParams\\'s input');\r\n }\r\n }\r\n } else {\r\n for (var key in searchString) {\r\n if (searchString.hasOwnProperty(key)) {\r\n this.append(key, searchString[key]);\r\n }\r\n }\r\n }\r\n } else {\r\n throw new TypeError('Unsupported input\\'s type for URLSearchParams');\r\n }\r\n };\r\n\r\n var proto = URLSearchParams.prototype;\r\n\r\n proto.append = function(name, value) {\r\n if (name in this._entries) {\r\n this._entries[name].push(String(value));\r\n } else {\r\n this._entries[name] = [String(value)];\r\n }\r\n };\r\n\r\n proto.delete = function(name) {\r\n delete this._entries[name];\r\n };\r\n\r\n proto.get = function(name) {\r\n return (name in this._entries) ? this._entries[name][0] : null;\r\n };\r\n\r\n proto.getAll = function(name) {\r\n return (name in this._entries) ? this._entries[name].slice(0) : [];\r\n };\r\n\r\n proto.has = function(name) {\r\n return (name in this._entries);\r\n };\r\n\r\n proto.set = function(name, value) {\r\n this._entries[name] = [String(value)];\r\n };\r\n\r\n proto.forEach = function(callback, thisArg) {\r\n var entries;\r\n for (var name in this._entries) {\r\n if (this._entries.hasOwnProperty(name)) {\r\n entries = this._entries[name];\r\n for (var i = 0; i < entries.length; i++) {\r\n callback.call(thisArg, entries[i], name, this);\r\n }\r\n }\r\n }\r\n };\r\n\r\n proto.keys = function() {\r\n var items = [];\r\n this.forEach(function(value, name) {\r\n items.push(name);\r\n });\r\n return createIterator(items);\r\n };\r\n\r\n proto.values = function() {\r\n var items = [];\r\n this.forEach(function(value) {\r\n items.push(value);\r\n });\r\n return createIterator(items);\r\n };\r\n\r\n proto.entries = function() {\r\n var items = [];\r\n this.forEach(function(value, name) {\r\n items.push([name, value]);\r\n });\r\n return createIterator(items);\r\n };\r\n\r\n if (iteratorSupported) {\r\n proto[Symbol.iterator] = proto.entries;\r\n }\r\n\r\n proto.toString = function() {\r\n var searchArray = [];\r\n this.forEach(function(value, name) {\r\n searchArray.push(serializeParam(name) + '=' + serializeParam(value));\r\n });\r\n return searchArray.join('&');\r\n };\r\n\r\n\r\n global.URLSearchParams = URLSearchParams;\r\n };\r\n\r\n var checkIfURLSearchParamsSupported = function() {\r\n try {\r\n var URLSearchParams = global.URLSearchParams;\r\n\r\n return (\r\n (new URLSearchParams('?a=1').toString() === 'a=1') &&\r\n (typeof URLSearchParams.prototype.set === 'function') &&\r\n (typeof URLSearchParams.prototype.entries === 'function')\r\n );\r\n } catch (e) {\r\n return false;\r\n }\r\n };\r\n\r\n if (!checkIfURLSearchParamsSupported()) {\r\n polyfillURLSearchParams();\r\n }\r\n\r\n var proto = global.URLSearchParams.prototype;\r\n\r\n if (typeof proto.sort !== 'function') {\r\n proto.sort = function() {\r\n var _this = this;\r\n var items = [];\r\n this.forEach(function(value, name) {\r\n items.push([name, value]);\r\n if (!_this._entries) {\r\n _this.delete(name);\r\n }\r\n });\r\n items.sort(function(a, b) {\r\n if (a[0] < b[0]) {\r\n return -1;\r\n } else if (a[0] > b[0]) {\r\n return +1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n if (_this._entries) { // force reset because IE keeps keys index\r\n _this._entries = {};\r\n }\r\n for (var i = 0; i < items.length; i++) {\r\n this.append(items[i][0], items[i][1]);\r\n }\r\n };\r\n }\r\n\r\n if (typeof proto._fromString !== 'function') {\r\n Object.defineProperty(proto, '_fromString', {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: function(searchString) {\r\n if (this._entries) {\r\n this._entries = {};\r\n } else {\r\n var keys = [];\r\n this.forEach(function(value, name) {\r\n keys.push(name);\r\n });\r\n for (var i = 0; i < keys.length; i++) {\r\n this.delete(keys[i]);\r\n }\r\n }\r\n\r\n searchString = searchString.replace(/^\\?/, '');\r\n var attributes = searchString.split('&');\r\n var attribute;\r\n for (var i = 0; i < attributes.length; i++) {\r\n attribute = attributes[i].split('=');\r\n this.append(\r\n deserializeParam(attribute[0]),\r\n (attribute.length > 1) ? deserializeParam(attribute[1]) : ''\r\n );\r\n }\r\n }\r\n });\r\n }\r\n\r\n // HTMLAnchorElement\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n\r\n(function(global) {\r\n /**\r\n * Polyfill URL\r\n *\r\n * Inspired from : https://github.com/arv/DOM-URL-Polyfill/blob/master/src/url.js\r\n */\r\n\r\n var checkIfURLIsSupported = function() {\r\n try {\r\n var u = new global.URL('b', 'http://a');\r\n u.pathname = 'c d';\r\n return (u.href === 'http://a/c%20d') && u.searchParams;\r\n } catch (e) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var polyfillURL = function() {\r\n var _URL = global.URL;\r\n\r\n var URL = function(url, base) {\r\n if (typeof url !== 'string') url = String(url);\r\n if (base && typeof base !== 'string') base = String(base);\r\n\r\n // Only create another document if the base is different from current location.\r\n var doc = document, baseElement;\r\n if (base && (global.location === void 0 || base !== global.location.href)) {\r\n base = base.toLowerCase();\r\n doc = document.implementation.createHTMLDocument('');\r\n baseElement = doc.createElement('base');\r\n baseElement.href = base;\r\n doc.head.appendChild(baseElement);\r\n try {\r\n if (baseElement.href.indexOf(base) !== 0) throw new Error(baseElement.href);\r\n } catch (err) {\r\n throw new Error('URL unable to set base ' + base + ' due to ' + err);\r\n }\r\n }\r\n\r\n var anchorElement = doc.createElement('a');\r\n anchorElement.href = url;\r\n if (baseElement) {\r\n doc.body.appendChild(anchorElement);\r\n anchorElement.href = anchorElement.href; // force href to refresh\r\n }\r\n\r\n var inputElement = doc.createElement('input');\r\n inputElement.type = 'url';\r\n inputElement.value = url;\r\n\r\n if (anchorElement.protocol === ':' || !/:/.test(anchorElement.href) || (!inputElement.checkValidity() && !base)) {\r\n throw new TypeError('Invalid URL');\r\n }\r\n\r\n Object.defineProperty(this, '_anchorElement', {\r\n value: anchorElement\r\n });\r\n\r\n\r\n // create a linked searchParams which reflect its changes on URL\r\n var searchParams = new global.URLSearchParams(this.search);\r\n var enableSearchUpdate = true;\r\n var enableSearchParamsUpdate = true;\r\n var _this = this;\r\n ['append', 'delete', 'set'].forEach(function(methodName) {\r\n var method = searchParams[methodName];\r\n searchParams[methodName] = function() {\r\n method.apply(searchParams, arguments);\r\n if (enableSearchUpdate) {\r\n enableSearchParamsUpdate = false;\r\n _this.search = searchParams.toString();\r\n enableSearchParamsUpdate = true;\r\n }\r\n };\r\n });\r\n\r\n Object.defineProperty(this, 'searchParams', {\r\n value: searchParams,\r\n enumerable: true\r\n });\r\n\r\n var search = void 0;\r\n Object.defineProperty(this, '_updateSearchParams', {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: function() {\r\n if (this.search !== search) {\r\n search = this.search;\r\n if (enableSearchParamsUpdate) {\r\n enableSearchUpdate = false;\r\n this.searchParams._fromString(this.search);\r\n enableSearchUpdate = true;\r\n }\r\n }\r\n }\r\n });\r\n };\r\n\r\n var proto = URL.prototype;\r\n\r\n var linkURLWithAnchorAttribute = function(attributeName) {\r\n Object.defineProperty(proto, attributeName, {\r\n get: function() {\r\n return this._anchorElement[attributeName];\r\n },\r\n set: function(value) {\r\n this._anchorElement[attributeName] = value;\r\n },\r\n enumerable: true\r\n });\r\n };\r\n\r\n ['hash', 'host', 'hostname', 'port', 'protocol']\r\n .forEach(function(attributeName) {\r\n linkURLWithAnchorAttribute(attributeName);\r\n });\r\n\r\n Object.defineProperty(proto, 'search', {\r\n get: function() {\r\n return this._anchorElement['search'];\r\n },\r\n set: function(value) {\r\n this._anchorElement['search'] = value;\r\n this._updateSearchParams();\r\n },\r\n enumerable: true\r\n });\r\n\r\n Object.defineProperties(proto, {\r\n\r\n 'toString': {\r\n get: function() {\r\n var _this = this;\r\n return function() {\r\n return _this.href;\r\n };\r\n }\r\n },\r\n\r\n 'href': {\r\n get: function() {\r\n return this._anchorElement.href.replace(/\\?$/, '');\r\n },\r\n set: function(value) {\r\n this._anchorElement.href = value;\r\n this._updateSearchParams();\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'pathname': {\r\n get: function() {\r\n return this._anchorElement.pathname.replace(/(^\\/?)/, '/');\r\n },\r\n set: function(value) {\r\n this._anchorElement.pathname = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'origin': {\r\n get: function() {\r\n // get expected port from protocol\r\n var expectedPort = { 'http:': 80, 'https:': 443, 'ftp:': 21 }[this._anchorElement.protocol];\r\n // add port to origin if, expected port is different than actual port\r\n // and it is not empty f.e http://foo:8080\r\n // 8080 != 80 && 8080 != ''\r\n var addPortToOrigin = this._anchorElement.port != expectedPort &&\r\n this._anchorElement.port !== '';\r\n\r\n return this._anchorElement.protocol +\r\n '//' +\r\n this._anchorElement.hostname +\r\n (addPortToOrigin ? (':' + this._anchorElement.port) : '');\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'password': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'username': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n });\r\n\r\n URL.createObjectURL = function(blob) {\r\n return _URL.createObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n URL.revokeObjectURL = function(url) {\r\n return _URL.revokeObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n global.URL = URL;\r\n\r\n };\r\n\r\n if (!checkIfURLIsSupported()) {\r\n polyfillURL();\r\n }\r\n\r\n if ((global.location !== void 0) && !('origin' in global.location)) {\r\n var getOrigin = function() {\r\n return global.location.protocol + '//' + global.location.hostname + (global.location.port ? (':' + global.location.port) : '');\r\n };\r\n\r\n try {\r\n Object.defineProperty(global.location, 'origin', {\r\n get: getOrigin,\r\n enumerable: true\r\n });\r\n } catch (e) {\r\n setInterval(function() {\r\n global.location.origin = getOrigin();\r\n }, 100);\r\n }\r\n }\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n", "/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global global, define, System, Reflect, Promise */\r\nvar __extends;\r\nvar __assign;\r\nvar __rest;\r\nvar __decorate;\r\nvar __param;\r\nvar __metadata;\r\nvar __awaiter;\r\nvar __generator;\r\nvar __exportStar;\r\nvar __values;\r\nvar __read;\r\nvar __spread;\r\nvar __spreadArrays;\r\nvar __spreadArray;\r\nvar __await;\r\nvar __asyncGenerator;\r\nvar __asyncDelegator;\r\nvar __asyncValues;\r\nvar __makeTemplateObject;\r\nvar __importStar;\r\nvar __importDefault;\r\nvar __classPrivateFieldGet;\r\nvar __classPrivateFieldSet;\r\nvar __createBinding;\r\n(function (factory) {\r\n var root = typeof global === \"object\" ? global : typeof self === \"object\" ? self : typeof this === \"object\" ? this : {};\r\n if (typeof define === \"function\" && define.amd) {\r\n define(\"tslib\", [\"exports\"], function (exports) { factory(createExporter(root, createExporter(exports))); });\r\n }\r\n else if (typeof module === \"object\" && typeof module.exports === \"object\") {\r\n factory(createExporter(root, createExporter(module.exports)));\r\n }\r\n else {\r\n factory(createExporter(root));\r\n }\r\n function createExporter(exports, previous) {\r\n if (exports !== root) {\r\n if (typeof Object.create === \"function\") {\r\n Object.defineProperty(exports, \"__esModule\", { value: true });\r\n }\r\n else {\r\n exports.__esModule = true;\r\n }\r\n }\r\n return function (id, v) { return exports[id] = previous ? previous(id, v) : v; };\r\n }\r\n})\r\n(function (exporter) {\r\n var extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n\r\n __extends = function (d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n\r\n __assign = Object.assign || function (t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n\r\n __rest = function (s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n };\r\n\r\n __decorate = function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n };\r\n\r\n __param = function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n };\r\n\r\n __metadata = function (metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n };\r\n\r\n __awaiter = function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n };\r\n\r\n __generator = function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n };\r\n\r\n __exportStar = function(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n };\r\n\r\n __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n }) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n });\r\n\r\n __values = function (o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n };\r\n\r\n __read = function (o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n };\r\n\r\n /** @deprecated */\r\n __spread = function () {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n };\r\n\r\n /** @deprecated */\r\n __spreadArrays = function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n };\r\n\r\n __spreadArray = function (to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n };\r\n\r\n __await = function (v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n };\r\n\r\n __asyncGenerator = function (thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n };\r\n\r\n __asyncDelegator = function (o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n };\r\n\r\n __asyncValues = function (o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n };\r\n\r\n __makeTemplateObject = function (cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n };\r\n\r\n var __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n }) : function(o, v) {\r\n o[\"default\"] = v;\r\n };\r\n\r\n __importStar = function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n };\r\n\r\n __importDefault = function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n };\r\n\r\n __classPrivateFieldGet = function (receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n };\r\n\r\n __classPrivateFieldSet = function (receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n };\r\n\r\n exporter(\"__extends\", __extends);\r\n exporter(\"__assign\", __assign);\r\n exporter(\"__rest\", __rest);\r\n exporter(\"__decorate\", __decorate);\r\n exporter(\"__param\", __param);\r\n exporter(\"__metadata\", __metadata);\r\n exporter(\"__awaiter\", __awaiter);\r\n exporter(\"__generator\", __generator);\r\n exporter(\"__exportStar\", __exportStar);\r\n exporter(\"__createBinding\", __createBinding);\r\n exporter(\"__values\", __values);\r\n exporter(\"__read\", __read);\r\n exporter(\"__spread\", __spread);\r\n exporter(\"__spreadArrays\", __spreadArrays);\r\n exporter(\"__spreadArray\", __spreadArray);\r\n exporter(\"__await\", __await);\r\n exporter(\"__asyncGenerator\", __asyncGenerator);\r\n exporter(\"__asyncDelegator\", __asyncDelegator);\r\n exporter(\"__asyncValues\", __asyncValues);\r\n exporter(\"__makeTemplateObject\", __makeTemplateObject);\r\n exporter(\"__importStar\", __importStar);\r\n exporter(\"__importDefault\", __importDefault);\r\n exporter(\"__classPrivateFieldGet\", __classPrivateFieldGet);\r\n exporter(\"__classPrivateFieldSet\", __classPrivateFieldSet);\r\n});\r\n", "/*!\n * clipboard.js v2.0.11\n * https://clipboardjs.com/\n *\n * Licensed MIT \u00A9 Zeno Rocha\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ClipboardJS\"] = factory();\n\telse\n\t\troot[\"ClipboardJS\"] = factory();\n})(this, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 686:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"default\": function() { return /* binding */ clipboard; }\n});\n\n// EXTERNAL MODULE: ./node_modules/tiny-emitter/index.js\nvar tiny_emitter = __webpack_require__(279);\nvar tiny_emitter_default = /*#__PURE__*/__webpack_require__.n(tiny_emitter);\n// EXTERNAL MODULE: ./node_modules/good-listener/src/listen.js\nvar listen = __webpack_require__(370);\nvar listen_default = /*#__PURE__*/__webpack_require__.n(listen);\n// EXTERNAL MODULE: ./node_modules/select/src/select.js\nvar src_select = __webpack_require__(817);\nvar select_default = /*#__PURE__*/__webpack_require__.n(src_select);\n;// CONCATENATED MODULE: ./src/common/command.js\n/**\n * Executes a given operation type.\n * @param {String} type\n * @return {Boolean}\n */\nfunction command(type) {\n try {\n return document.execCommand(type);\n } catch (err) {\n return false;\n }\n}\n;// CONCATENATED MODULE: ./src/actions/cut.js\n\n\n/**\n * Cut action wrapper.\n * @param {String|HTMLElement} target\n * @return {String}\n */\n\nvar ClipboardActionCut = function ClipboardActionCut(target) {\n var selectedText = select_default()(target);\n command('cut');\n return selectedText;\n};\n\n/* harmony default export */ var actions_cut = (ClipboardActionCut);\n;// CONCATENATED MODULE: ./src/common/create-fake-element.js\n/**\n * Creates a fake textarea element with a value.\n * @param {String} value\n * @return {HTMLElement}\n */\nfunction createFakeElement(value) {\n var isRTL = document.documentElement.getAttribute('dir') === 'rtl';\n var fakeElement = document.createElement('textarea'); // Prevent zooming on iOS\n\n fakeElement.style.fontSize = '12pt'; // Reset box model\n\n fakeElement.style.border = '0';\n fakeElement.style.padding = '0';\n fakeElement.style.margin = '0'; // Move element out of screen horizontally\n\n fakeElement.style.position = 'absolute';\n fakeElement.style[isRTL ? 'right' : 'left'] = '-9999px'; // Move element to the same position vertically\n\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n fakeElement.style.top = \"\".concat(yPosition, \"px\");\n fakeElement.setAttribute('readonly', '');\n fakeElement.value = value;\n return fakeElement;\n}\n;// CONCATENATED MODULE: ./src/actions/copy.js\n\n\n\n/**\n * Create fake copy action wrapper using a fake element.\n * @param {String} target\n * @param {Object} options\n * @return {String}\n */\n\nvar fakeCopyAction = function fakeCopyAction(value, options) {\n var fakeElement = createFakeElement(value);\n options.container.appendChild(fakeElement);\n var selectedText = select_default()(fakeElement);\n command('copy');\n fakeElement.remove();\n return selectedText;\n};\n/**\n * Copy action wrapper.\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @return {String}\n */\n\n\nvar ClipboardActionCopy = function ClipboardActionCopy(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n container: document.body\n };\n var selectedText = '';\n\n if (typeof target === 'string') {\n selectedText = fakeCopyAction(target, options);\n } else if (target instanceof HTMLInputElement && !['text', 'search', 'url', 'tel', 'password'].includes(target === null || target === void 0 ? void 0 : target.type)) {\n // If input type doesn't support `setSelectionRange`. Simulate it. https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n selectedText = fakeCopyAction(target.value, options);\n } else {\n selectedText = select_default()(target);\n command('copy');\n }\n\n return selectedText;\n};\n\n/* harmony default export */ var actions_copy = (ClipboardActionCopy);\n;// CONCATENATED MODULE: ./src/actions/default.js\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n\n/**\n * Inner function which performs selection from either `text` or `target`\n * properties and then executes copy or cut operations.\n * @param {Object} options\n */\n\nvar ClipboardActionDefault = function ClipboardActionDefault() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // Defines base properties passed from constructor.\n var _options$action = options.action,\n action = _options$action === void 0 ? 'copy' : _options$action,\n container = options.container,\n target = options.target,\n text = options.text; // Sets the `action` to be performed which can be either 'copy' or 'cut'.\n\n if (action !== 'copy' && action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n } // Sets the `target` property using an element that will be have its content copied.\n\n\n if (target !== undefined) {\n if (target && _typeof(target) === 'object' && target.nodeType === 1) {\n if (action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n } // Define selection strategy based on `text` property.\n\n\n if (text) {\n return actions_copy(text, {\n container: container\n });\n } // Defines which selection strategy based on `target` property.\n\n\n if (target) {\n return action === 'cut' ? actions_cut(target) : actions_copy(target, {\n container: container\n });\n }\n};\n\n/* harmony default export */ var actions_default = (ClipboardActionDefault);\n;// CONCATENATED MODULE: ./src/clipboard.js\nfunction clipboard_typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { clipboard_typeof = function _typeof(obj) { return typeof obj; }; } else { clipboard_typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return clipboard_typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (clipboard_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n\n\n\n\n\n/**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n\nfunction getAttributeValue(suffix, element) {\n var attribute = \"data-clipboard-\".concat(suffix);\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n}\n/**\n * Base class which takes one or more elements, adds event listeners to them,\n * and instantiates a new `ClipboardAction` on each click.\n */\n\n\nvar Clipboard = /*#__PURE__*/function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n var _super = _createSuper(Clipboard);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n var _this;\n\n _classCallCheck(this, Clipboard);\n\n _this = _super.call(this);\n\n _this.resolveOptions(options);\n\n _this.listenClick(trigger);\n\n return _this;\n }\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: \"resolveOptions\",\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = clipboard_typeof(options.container) === 'object' ? options.container : document.body;\n }\n /**\n * Adds a click event listener to the passed trigger.\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n */\n\n }, {\n key: \"listenClick\",\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = listen_default()(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n /**\n * Defines a new `ClipboardAction` on each click event.\n * @param {Event} e\n */\n\n }, {\n key: \"onClick\",\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n var action = this.action(trigger) || 'copy';\n var text = actions_default({\n action: action,\n container: this.container,\n target: this.target(trigger),\n text: this.text(trigger)\n }); // Fires an event based on the copy operation result.\n\n this.emit(text ? 'success' : 'error', {\n action: action,\n text: text,\n trigger: trigger,\n clearSelection: function clearSelection() {\n if (trigger) {\n trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n });\n }\n /**\n * Default `action` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: \"defaultAction\",\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n /**\n * Default `target` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: \"defaultTarget\",\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n /**\n * Allow fire programmatically a copy action\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @returns Text copied.\n */\n\n }, {\n key: \"defaultText\",\n\n /**\n * Default `text` lookup function.\n * @param {Element} trigger\n */\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n /**\n * Destroy lifecycle.\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.listener.destroy();\n }\n }], [{\n key: \"copy\",\n value: function copy(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n container: document.body\n };\n return actions_copy(target, options);\n }\n /**\n * Allow fire programmatically a cut action\n * @param {String|HTMLElement} target\n * @returns Text cutted.\n */\n\n }, {\n key: \"cut\",\n value: function cut(target) {\n return actions_cut(target);\n }\n /**\n * Returns the support of the given action, or all actions if no action is\n * given.\n * @param {String} [action]\n */\n\n }, {\n key: \"isSupported\",\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n return support;\n }\n }]);\n\n return Clipboard;\n}((tiny_emitter_default()));\n\n/* harmony default export */ var clipboard = (Clipboard);\n\n/***/ }),\n\n/***/ 828:\n/***/ (function(module) {\n\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n\n\n/***/ }),\n\n/***/ 438:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar closest = __webpack_require__(828);\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n // Handle the regular Element usage\n if (typeof elements.addEventListener === 'function') {\n return _delegate.apply(null, arguments);\n }\n\n // Handle Element-less usage, it defaults to global delegation\n if (typeof type === 'function') {\n // Use `document` as the first parameter, then apply arguments\n // This is a short way to .unshift `arguments` without running into deoptimizations\n return _delegate.bind(null, document).apply(null, arguments);\n }\n\n // Handle Selector-based usage\n if (typeof elements === 'string') {\n elements = document.querySelectorAll(elements);\n }\n\n // Handle Array-like based usage\n return Array.prototype.map.call(elements, function (element) {\n return _delegate(element, selector, type, callback, useCapture);\n });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n\n\n/***/ }),\n\n/***/ 879:\n/***/ (function(__unused_webpack_module, exports) {\n\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n\n\n/***/ }),\n\n/***/ 370:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar is = __webpack_require__(879);\nvar delegate = __webpack_require__(438);\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n/***/ }),\n\n/***/ 817:\n/***/ (function(module) {\n\nfunction select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n\n\n/***/ }),\n\n/***/ 279:\n/***/ (function(module) {\n\nfunction E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(__webpack_module_cache__[moduleId]) {\n/******/ \t\t\treturn __webpack_module_cache__[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t// module exports must be returned from runtime so entry inlining is disabled\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(686);\n/******/ })()\n.default;\n});", "/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n", "Array.prototype.flat||Object.defineProperty(Array.prototype,\"flat\",{configurable:!0,value:function r(){var t=isNaN(arguments[0])?1:Number(arguments[0]);return t?Array.prototype.reduce.call(this,function(a,e){return Array.isArray(e)?a.push.apply(a,r.call(e,t-1)):a.push(e),a},[]):Array.prototype.slice.call(this)},writable:!0}),Array.prototype.flatMap||Object.defineProperty(Array.prototype,\"flatMap\",{configurable:!0,value:function(r){return Array.prototype.map.apply(this,arguments).flat()},writable:!0})\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport \"array-flat-polyfill\"\nimport \"focus-visible\"\nimport \"unfetch/polyfill\"\nimport \"url-polyfill\"\n\nimport {\n EMPTY,\n NEVER,\n Subject,\n defer,\n delay,\n filter,\n map,\n merge,\n mergeWith,\n shareReplay,\n switchMap\n} from \"rxjs\"\n\nimport { configuration, feature } from \"./_\"\nimport {\n at,\n getOptionalElement,\n requestJSON,\n setToggle,\n watchDocument,\n watchKeyboard,\n watchLocation,\n watchLocationTarget,\n watchMedia,\n watchPrint,\n watchViewport\n} from \"./browser\"\nimport {\n getComponentElement,\n getComponentElements,\n mountAnnounce,\n mountBackToTop,\n mountConsent,\n mountContent,\n mountDialog,\n mountHeader,\n mountHeaderTitle,\n mountPalette,\n mountSearch,\n mountSearchHiglight,\n mountSidebar,\n mountSource,\n mountTableOfContents,\n mountTabs,\n watchHeader,\n watchMain\n} from \"./components\"\nimport {\n SearchIndex,\n setupClipboardJS,\n setupInstantLoading,\n setupVersionSelector\n} from \"./integrations\"\nimport {\n patchIndeterminate,\n patchScrollfix,\n patchScrolllock\n} from \"./patches\"\nimport \"./polyfills\"\n\n/* ----------------------------------------------------------------------------\n * Application\n * ------------------------------------------------------------------------- */\n\n/* Yay, JavaScript is available */\ndocument.documentElement.classList.remove(\"no-js\")\ndocument.documentElement.classList.add(\"js\")\n\n/* Set up navigation observables and subjects */\nconst document$ = watchDocument()\nconst location$ = watchLocation()\nconst target$ = watchLocationTarget()\nconst keyboard$ = watchKeyboard()\n\n/* Set up media observables */\nconst viewport$ = watchViewport()\nconst tablet$ = watchMedia(\"(min-width: 960px)\")\nconst screen$ = watchMedia(\"(min-width: 1220px)\")\nconst print$ = watchPrint()\n\n/* Retrieve search index, if search is enabled */\nconst config = configuration()\nconst index$ = document.forms.namedItem(\"search\")\n ? __search?.index || requestJSON(\n new URL(\"search/search_index.json\", config.base)\n )\n : NEVER\n\n/* Set up Clipboard.js integration */\nconst alert$ = new Subject()\nsetupClipboardJS({ alert$ })\n\n/* Set up instant loading, if enabled */\nif (feature(\"navigation.instant\"))\n setupInstantLoading({ document$, location$, viewport$ })\n\n/* Set up version selector */\nif (config.version?.provider === \"mike\")\n setupVersionSelector({ document$ })\n\n/* Always close drawer and search on navigation */\nmerge(location$, target$)\n .pipe(\n delay(125)\n )\n .subscribe(() => {\n setToggle(\"drawer\", false)\n setToggle(\"search\", false)\n })\n\n/* Set up global keyboard handlers */\nkeyboard$\n .pipe(\n filter(({ mode }) => mode === \"global\")\n )\n .subscribe(key => {\n switch (key.type) {\n\n /* Go to previous page */\n case \"p\":\n case \",\":\n const prev = getOptionalElement(\"[href][rel=prev]\")\n if (typeof prev !== \"undefined\")\n prev.click()\n break\n\n /* Go to next page */\n case \"n\":\n case \".\":\n const next = getOptionalElement(\"[href][rel=next]\")\n if (typeof next !== \"undefined\")\n next.click()\n break\n }\n })\n\n/* Set up patches */\npatchIndeterminate({ document$, tablet$ })\npatchScrollfix({ document$ })\npatchScrolllock({ viewport$, tablet$ })\n\n/* Set up header and main area observable */\nconst header$ = watchHeader(getComponentElement(\"header\"), { viewport$ })\nconst main$ = document$\n .pipe(\n map(() => getComponentElement(\"main\")),\n switchMap(el => watchMain(el, { viewport$, header$ })),\n shareReplay(1)\n )\n\n/* Set up control component observables */\nconst control$ = merge(\n\n /* Consent */\n ...getComponentElements(\"consent\")\n .map(el => mountConsent(el, { target$ })),\n\n /* Dialog */\n ...getComponentElements(\"dialog\")\n .map(el => mountDialog(el, { alert$ })),\n\n /* Header */\n ...getComponentElements(\"header\")\n .map(el => mountHeader(el, { viewport$, header$, main$ })),\n\n /* Color palette */\n ...getComponentElements(\"palette\")\n .map(el => mountPalette(el)),\n\n /* Search */\n ...getComponentElements(\"search\")\n .map(el => mountSearch(el, { index$, keyboard$ })),\n\n /* Repository information */\n ...getComponentElements(\"source\")\n .map(el => mountSource(el))\n)\n\n/* Set up content component observables */\nconst content$ = defer(() => merge(\n\n /* Announcement bar */\n ...getComponentElements(\"announce\")\n .map(el => mountAnnounce(el)),\n\n /* Content */\n ...getComponentElements(\"content\")\n .map(el => mountContent(el, { viewport$, target$, print$ })),\n\n /* Search highlighting */\n ...getComponentElements(\"content\")\n .map(el => feature(\"search.highlight\")\n ? mountSearchHiglight(el, { index$, location$ })\n : EMPTY\n ),\n\n /* Header title */\n ...getComponentElements(\"header-title\")\n .map(el => mountHeaderTitle(el, { viewport$, header$ })),\n\n /* Sidebar */\n ...getComponentElements(\"sidebar\")\n .map(el => el.getAttribute(\"data-md-type\") === \"navigation\"\n ? at(screen$, () => mountSidebar(el, { viewport$, header$, main$ }))\n : at(tablet$, () => mountSidebar(el, { viewport$, header$, main$ }))\n ),\n\n /* Navigation tabs */\n ...getComponentElements(\"tabs\")\n .map(el => mountTabs(el, { viewport$, header$ })),\n\n /* Table of contents */\n ...getComponentElements(\"toc\")\n .map(el => mountTableOfContents(el, { viewport$, header$, target$ })),\n\n /* Back-to-top button */\n ...getComponentElements(\"top\")\n .map(el => mountBackToTop(el, { viewport$, header$, main$, target$ }))\n))\n\n/* Set up component observables */\nconst component$ = document$\n .pipe(\n switchMap(() => content$),\n mergeWith(control$),\n shareReplay(1)\n )\n\n/* Subscribe to all components */\ncomponent$.subscribe()\n\n/* ----------------------------------------------------------------------------\n * Exports\n * ------------------------------------------------------------------------- */\n\nwindow.document$ = document$ /* Document observable */\nwindow.location$ = location$ /* Location subject */\nwindow.target$ = target$ /* Location target observable */\nwindow.keyboard$ = keyboard$ /* Keyboard observable */\nwindow.viewport$ = viewport$ /* Viewport observable */\nwindow.tablet$ = tablet$ /* Media tablet observable */\nwindow.screen$ = screen$ /* Media screen observable */\nwindow.print$ = print$ /* Media print observable */\nwindow.alert$ = alert$ /* Alert subject */\nwindow.component$ = component$ /* Component observable */\n", "self.fetch||(self.fetch=function(e,n){return n=n||{},new Promise(function(t,s){var r=new XMLHttpRequest,o=[],u=[],i={},a=function(){return{ok:2==(r.status/100|0),statusText:r.statusText,status:r.status,url:r.responseURL,text:function(){return Promise.resolve(r.responseText)},json:function(){return Promise.resolve(r.responseText).then(JSON.parse)},blob:function(){return Promise.resolve(new Blob([r.response]))},clone:a,headers:{keys:function(){return o},entries:function(){return u},get:function(e){return i[e.toLowerCase()]},has:function(e){return e.toLowerCase()in i}}}};for(var c in r.open(n.method||\"get\",e,!0),r.onload=function(){r.getAllResponseHeaders().replace(/^(.*?):[^\\S\\n]*([\\s\\S]*?)$/gm,function(e,n,t){o.push(n=n.toLowerCase()),u.push([n,t]),i[n]=i[n]?i[n]+\",\"+t:t}),t(a())},r.onerror=s,r.withCredentials=\"include\"==n.credentials,n.headers)r.setRequestHeader(c,n.headers[c]);r.send(n.body||null)})});\n", "import tslib from '../tslib.js';\r\nconst {\r\n __extends,\r\n __assign,\r\n __rest,\r\n __decorate,\r\n __param,\r\n __metadata,\r\n __awaiter,\r\n __generator,\r\n __exportStar,\r\n __createBinding,\r\n __values,\r\n __read,\r\n __spread,\r\n __spreadArrays,\r\n __spreadArray,\r\n __await,\r\n __asyncGenerator,\r\n __asyncDelegator,\r\n __asyncValues,\r\n __makeTemplateObject,\r\n __importStar,\r\n __importDefault,\r\n __classPrivateFieldGet,\r\n __classPrivateFieldSet,\r\n} = tslib;\r\nexport {\r\n __extends,\r\n __assign,\r\n __rest,\r\n __decorate,\r\n __param,\r\n __metadata,\r\n __awaiter,\r\n __generator,\r\n __exportStar,\r\n __createBinding,\r\n __values,\r\n __read,\r\n __spread,\r\n __spreadArrays,\r\n __spreadArray,\r\n __await,\r\n __asyncGenerator,\r\n __asyncDelegator,\r\n __asyncValues,\r\n __makeTemplateObject,\r\n __importStar,\r\n __importDefault,\r\n __classPrivateFieldGet,\r\n __classPrivateFieldSet,\r\n};\r\n", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n ReplaySubject,\n Subject,\n fromEvent\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch document\n *\n * Documents are implemented as subjects, so all downstream observables are\n * automatically updated when a new document is emitted.\n *\n * @returns Document subject\n */\nexport function watchDocument(): Subject {\n const document$ = new ReplaySubject(1)\n fromEvent(document, \"DOMContentLoaded\", { once: true })\n .subscribe(() => document$.next(document))\n\n /* Return document */\n return document$\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve all elements matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @returns Elements\n */\nexport function getElements(\n selector: T, node?: ParentNode\n): HTMLElementTagNameMap[T][]\n\nexport function getElements(\n selector: string, node?: ParentNode\n): T[]\n\nexport function getElements(\n selector: string, node: ParentNode = document\n): T[] {\n return Array.from(node.querySelectorAll(selector))\n}\n\n/**\n * Retrieve an element matching a query selector or throw a reference error\n *\n * Note that this function assumes that the element is present. If unsure if an\n * element is existent, use the `getOptionalElement` function instead.\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @returns Element\n */\nexport function getElement(\n selector: T, node?: ParentNode\n): HTMLElementTagNameMap[T]\n\nexport function getElement(\n selector: string, node?: ParentNode\n): T\n\nexport function getElement(\n selector: string, node: ParentNode = document\n): T {\n const el = getOptionalElement(selector, node)\n if (typeof el === \"undefined\")\n throw new ReferenceError(\n `Missing element: expected \"${selector}\" to be present`\n )\n\n /* Return element */\n return el\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Retrieve an optional element matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @returns Element or nothing\n */\nexport function getOptionalElement(\n selector: T, node?: ParentNode\n): HTMLElementTagNameMap[T] | undefined\n\nexport function getOptionalElement(\n selector: string, node?: ParentNode\n): T | undefined\n\nexport function getOptionalElement(\n selector: string, node: ParentNode = document\n): T | undefined {\n return node.querySelector(selector) || undefined\n}\n\n/**\n * Retrieve the currently active element\n *\n * @returns Element or nothing\n */\nexport function getActiveElement(): HTMLElement | undefined {\n return document.activeElement instanceof HTMLElement\n ? document.activeElement || undefined\n : undefined\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n debounceTime,\n distinctUntilChanged,\n fromEvent,\n map,\n merge,\n startWith\n} from \"rxjs\"\n\nimport { getActiveElement } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch element focus\n *\n * Previously, this function used `focus` and `blur` events to determine whether\n * an element is focused, but this doesn't work if there are focusable elements\n * within the elements itself. A better solutions are `focusin` and `focusout`\n * events, which bubble up the tree and allow for more fine-grained control.\n *\n * `debounceTime` is necessary, because when a focus change happens inside an\n * element, the observable would first emit `false` and then `true` again.\n *\n * @param el - Element\n *\n * @returns Element focus observable\n */\nexport function watchElementFocus(\n el: HTMLElement\n): Observable {\n return merge(\n fromEvent(document.body, \"focusin\"),\n fromEvent(document.body, \"focusout\")\n )\n .pipe(\n debounceTime(1),\n map(() => {\n const active = getActiveElement()\n return typeof active !== \"undefined\"\n ? el.contains(active)\n : false\n }),\n startWith(el === getActiveElement()),\n distinctUntilChanged()\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n animationFrameScheduler,\n auditTime,\n fromEvent,\n map,\n merge,\n startWith\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Element offset\n */\nexport interface ElementOffset {\n x: number /* Horizontal offset */\n y: number /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element offset\n *\n * @param el - Element\n *\n * @returns Element offset\n */\nexport function getElementOffset(\n el: HTMLElement\n): ElementOffset {\n return {\n x: el.offsetLeft,\n y: el.offsetTop\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element offset\n *\n * @param el - Element\n *\n * @returns Element offset observable\n */\nexport function watchElementOffset(\n el: HTMLElement\n): Observable {\n return merge(\n fromEvent(window, \"load\"),\n fromEvent(window, \"resize\")\n )\n .pipe(\n auditTime(0, animationFrameScheduler),\n map(() => getElementOffset(el)),\n startWith(getElementOffset(el))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n animationFrameScheduler,\n auditTime,\n fromEvent,\n map,\n merge,\n startWith\n} from \"rxjs\"\n\nimport { ElementOffset } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element content offset (= scroll offset)\n *\n * @param el - Element\n *\n * @returns Element content offset\n */\nexport function getElementContentOffset(\n el: HTMLElement\n): ElementOffset {\n return {\n x: el.scrollLeft,\n y: el.scrollTop\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element content offset\n *\n * @param el - Element\n *\n * @returns Element content offset observable\n */\nexport function watchElementContentOffset(\n el: HTMLElement\n): Observable {\n return merge(\n fromEvent(el, \"scroll\"),\n fromEvent(window, \"resize\")\n )\n .pipe(\n auditTime(0, animationFrameScheduler),\n map(() => getElementContentOffset(el)),\n startWith(getElementContentOffset(el))\n )\n}\n", "/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\r\n/* eslint-disable require-jsdoc, valid-jsdoc */\r\nvar MapShim = (function () {\r\n if (typeof Map !== 'undefined') {\r\n return Map;\r\n }\r\n /**\r\n * Returns index in provided array that matches the specified key.\r\n *\r\n * @param {Array} arr\r\n * @param {*} key\r\n * @returns {number}\r\n */\r\n function getIndex(arr, key) {\r\n var result = -1;\r\n arr.some(function (entry, index) {\r\n if (entry[0] === key) {\r\n result = index;\r\n return true;\r\n }\r\n return false;\r\n });\r\n return result;\r\n }\r\n return /** @class */ (function () {\r\n function class_1() {\r\n this.__entries__ = [];\r\n }\r\n Object.defineProperty(class_1.prototype, \"size\", {\r\n /**\r\n * @returns {boolean}\r\n */\r\n get: function () {\r\n return this.__entries__.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @param {*} key\r\n * @returns {*}\r\n */\r\n class_1.prototype.get = function (key) {\r\n var index = getIndex(this.__entries__, key);\r\n var entry = this.__entries__[index];\r\n return entry && entry[1];\r\n };\r\n /**\r\n * @param {*} key\r\n * @param {*} value\r\n * @returns {void}\r\n */\r\n class_1.prototype.set = function (key, value) {\r\n var index = getIndex(this.__entries__, key);\r\n if (~index) {\r\n this.__entries__[index][1] = value;\r\n }\r\n else {\r\n this.__entries__.push([key, value]);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.delete = function (key) {\r\n var entries = this.__entries__;\r\n var index = getIndex(entries, key);\r\n if (~index) {\r\n entries.splice(index, 1);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.has = function (key) {\r\n return !!~getIndex(this.__entries__, key);\r\n };\r\n /**\r\n * @returns {void}\r\n */\r\n class_1.prototype.clear = function () {\r\n this.__entries__.splice(0);\r\n };\r\n /**\r\n * @param {Function} callback\r\n * @param {*} [ctx=null]\r\n * @returns {void}\r\n */\r\n class_1.prototype.forEach = function (callback, ctx) {\r\n if (ctx === void 0) { ctx = null; }\r\n for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\r\n var entry = _a[_i];\r\n callback.call(ctx, entry[1], entry[0]);\r\n }\r\n };\r\n return class_1;\r\n }());\r\n})();\n\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\r\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;\n\n// Returns global object of a current environment.\r\nvar global$1 = (function () {\r\n if (typeof global !== 'undefined' && global.Math === Math) {\r\n return global;\r\n }\r\n if (typeof self !== 'undefined' && self.Math === Math) {\r\n return self;\r\n }\r\n if (typeof window !== 'undefined' && window.Math === Math) {\r\n return window;\r\n }\r\n // eslint-disable-next-line no-new-func\r\n return Function('return this')();\r\n})();\n\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\r\nvar requestAnimationFrame$1 = (function () {\r\n if (typeof requestAnimationFrame === 'function') {\r\n // It's required to use a bounded function because IE sometimes throws\r\n // an \"Invalid calling object\" error if rAF is invoked without the global\r\n // object on the left hand side.\r\n return requestAnimationFrame.bind(global$1);\r\n }\r\n return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };\r\n})();\n\n// Defines minimum timeout before adding a trailing call.\r\nvar trailingTimeout = 2;\r\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\r\nfunction throttle (callback, delay) {\r\n var leadingCall = false, trailingCall = false, lastCallTime = 0;\r\n /**\r\n * Invokes the original callback function and schedules new invocation if\r\n * the \"proxy\" was called during current request.\r\n *\r\n * @returns {void}\r\n */\r\n function resolvePending() {\r\n if (leadingCall) {\r\n leadingCall = false;\r\n callback();\r\n }\r\n if (trailingCall) {\r\n proxy();\r\n }\r\n }\r\n /**\r\n * Callback invoked after the specified delay. It will further postpone\r\n * invocation of the original function delegating it to the\r\n * requestAnimationFrame.\r\n *\r\n * @returns {void}\r\n */\r\n function timeoutCallback() {\r\n requestAnimationFrame$1(resolvePending);\r\n }\r\n /**\r\n * Schedules invocation of the original function.\r\n *\r\n * @returns {void}\r\n */\r\n function proxy() {\r\n var timeStamp = Date.now();\r\n if (leadingCall) {\r\n // Reject immediately following calls.\r\n if (timeStamp - lastCallTime < trailingTimeout) {\r\n return;\r\n }\r\n // Schedule new call to be in invoked when the pending one is resolved.\r\n // This is important for \"transitions\" which never actually start\r\n // immediately so there is a chance that we might miss one if change\r\n // happens amids the pending invocation.\r\n trailingCall = true;\r\n }\r\n else {\r\n leadingCall = true;\r\n trailingCall = false;\r\n setTimeout(timeoutCallback, delay);\r\n }\r\n lastCallTime = timeStamp;\r\n }\r\n return proxy;\r\n}\n\n// Minimum delay before invoking the update of observers.\r\nvar REFRESH_DELAY = 20;\r\n// A list of substrings of CSS properties used to find transition events that\r\n// might affect dimensions of observed elements.\r\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];\r\n// Check if MutationObserver is available.\r\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\r\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\r\nvar ResizeObserverController = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserverController.\r\n *\r\n * @private\r\n */\r\n function ResizeObserverController() {\r\n /**\r\n * Indicates whether DOM listeners have been added.\r\n *\r\n * @private {boolean}\r\n */\r\n this.connected_ = false;\r\n /**\r\n * Tells that controller has subscribed for Mutation Events.\r\n *\r\n * @private {boolean}\r\n */\r\n this.mutationEventsAdded_ = false;\r\n /**\r\n * Keeps reference to the instance of MutationObserver.\r\n *\r\n * @private {MutationObserver}\r\n */\r\n this.mutationsObserver_ = null;\r\n /**\r\n * A list of connected observers.\r\n *\r\n * @private {Array}\r\n */\r\n this.observers_ = [];\r\n this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\r\n this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\r\n }\r\n /**\r\n * Adds observer to observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be added.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.addObserver = function (observer) {\r\n if (!~this.observers_.indexOf(observer)) {\r\n this.observers_.push(observer);\r\n }\r\n // Add listeners if they haven't been added yet.\r\n if (!this.connected_) {\r\n this.connect_();\r\n }\r\n };\r\n /**\r\n * Removes observer from observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.removeObserver = function (observer) {\r\n var observers = this.observers_;\r\n var index = observers.indexOf(observer);\r\n // Remove observer if it's present in registry.\r\n if (~index) {\r\n observers.splice(index, 1);\r\n }\r\n // Remove listeners if controller has no connected observers.\r\n if (!observers.length && this.connected_) {\r\n this.disconnect_();\r\n }\r\n };\r\n /**\r\n * Invokes the update of observers. It will continue running updates insofar\r\n * it detects changes.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.refresh = function () {\r\n var changesDetected = this.updateObservers_();\r\n // Continue running updates if changes have been detected as there might\r\n // be future ones caused by CSS transitions.\r\n if (changesDetected) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Updates every observer from observers list and notifies them of queued\r\n * entries.\r\n *\r\n * @private\r\n * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n * dimensions of it's elements.\r\n */\r\n ResizeObserverController.prototype.updateObservers_ = function () {\r\n // Collect observers that have active observations.\r\n var activeObservers = this.observers_.filter(function (observer) {\r\n return observer.gatherActive(), observer.hasActive();\r\n });\r\n // Deliver notifications in a separate cycle in order to avoid any\r\n // collisions between observers, e.g. when multiple instances of\r\n // ResizeObserver are tracking the same element and the callback of one\r\n // of them changes content dimensions of the observed target. Sometimes\r\n // this may result in notifications being blocked for the rest of observers.\r\n activeObservers.forEach(function (observer) { return observer.broadcastActive(); });\r\n return activeObservers.length > 0;\r\n };\r\n /**\r\n * Initializes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.connect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already added.\r\n if (!isBrowser || this.connected_) {\r\n return;\r\n }\r\n // Subscription to the \"Transitionend\" event is used as a workaround for\r\n // delayed transitions. This way it's possible to capture at least the\r\n // final state of an element.\r\n document.addEventListener('transitionend', this.onTransitionEnd_);\r\n window.addEventListener('resize', this.refresh);\r\n if (mutationObserverSupported) {\r\n this.mutationsObserver_ = new MutationObserver(this.refresh);\r\n this.mutationsObserver_.observe(document, {\r\n attributes: true,\r\n childList: true,\r\n characterData: true,\r\n subtree: true\r\n });\r\n }\r\n else {\r\n document.addEventListener('DOMSubtreeModified', this.refresh);\r\n this.mutationEventsAdded_ = true;\r\n }\r\n this.connected_ = true;\r\n };\r\n /**\r\n * Removes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.disconnect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already removed.\r\n if (!isBrowser || !this.connected_) {\r\n return;\r\n }\r\n document.removeEventListener('transitionend', this.onTransitionEnd_);\r\n window.removeEventListener('resize', this.refresh);\r\n if (this.mutationsObserver_) {\r\n this.mutationsObserver_.disconnect();\r\n }\r\n if (this.mutationEventsAdded_) {\r\n document.removeEventListener('DOMSubtreeModified', this.refresh);\r\n }\r\n this.mutationsObserver_ = null;\r\n this.mutationEventsAdded_ = false;\r\n this.connected_ = false;\r\n };\r\n /**\r\n * \"Transitionend\" event handler.\r\n *\r\n * @private\r\n * @param {TransitionEvent} event\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\r\n var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;\r\n // Detect whether transition may affect dimensions of an element.\r\n var isReflowProperty = transitionKeys.some(function (key) {\r\n return !!~propertyName.indexOf(key);\r\n });\r\n if (isReflowProperty) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Returns instance of the ResizeObserverController.\r\n *\r\n * @returns {ResizeObserverController}\r\n */\r\n ResizeObserverController.getInstance = function () {\r\n if (!this.instance_) {\r\n this.instance_ = new ResizeObserverController();\r\n }\r\n return this.instance_;\r\n };\r\n /**\r\n * Holds reference to the controller's instance.\r\n *\r\n * @private {ResizeObserverController}\r\n */\r\n ResizeObserverController.instance_ = null;\r\n return ResizeObserverController;\r\n}());\n\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\r\nvar defineConfigurable = (function (target, props) {\r\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\r\n var key = _a[_i];\r\n Object.defineProperty(target, key, {\r\n value: props[key],\r\n enumerable: false,\r\n writable: false,\r\n configurable: true\r\n });\r\n }\r\n return target;\r\n});\n\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\r\nvar getWindowOf = (function (target) {\r\n // Assume that the element is an instance of Node, which means that it\r\n // has the \"ownerDocument\" property from which we can retrieve a\r\n // corresponding global object.\r\n var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;\r\n // Return the local global object if it's not possible extract one from\r\n // provided element.\r\n return ownerGlobal || global$1;\r\n});\n\n// Placeholder of an empty content rectangle.\r\nvar emptyRect = createRectInit(0, 0, 0, 0);\r\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\r\nfunction toFloat(value) {\r\n return parseFloat(value) || 0;\r\n}\r\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\r\nfunction getBordersSize(styles) {\r\n var positions = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n positions[_i - 1] = arguments[_i];\r\n }\r\n return positions.reduce(function (size, position) {\r\n var value = styles['border-' + position + '-width'];\r\n return size + toFloat(value);\r\n }, 0);\r\n}\r\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\r\nfunction getPaddings(styles) {\r\n var positions = ['top', 'right', 'bottom', 'left'];\r\n var paddings = {};\r\n for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\r\n var position = positions_1[_i];\r\n var value = styles['padding-' + position];\r\n paddings[position] = toFloat(value);\r\n }\r\n return paddings;\r\n}\r\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n * to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getSVGContentRect(target) {\r\n var bbox = target.getBBox();\r\n return createRectInit(0, 0, bbox.width, bbox.height);\r\n}\r\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getHTMLElementContentRect(target) {\r\n // Client width & height properties can't be\r\n // used exclusively as they provide rounded values.\r\n var clientWidth = target.clientWidth, clientHeight = target.clientHeight;\r\n // By this condition we can catch all non-replaced inline, hidden and\r\n // detached elements. Though elements with width & height properties less\r\n // than 0.5 will be discarded as well.\r\n //\r\n // Without it we would need to implement separate methods for each of\r\n // those cases and it's not possible to perform a precise and performance\r\n // effective test for hidden elements. E.g. even jQuery's ':visible' filter\r\n // gives wrong results for elements with width & height less than 0.5.\r\n if (!clientWidth && !clientHeight) {\r\n return emptyRect;\r\n }\r\n var styles = getWindowOf(target).getComputedStyle(target);\r\n var paddings = getPaddings(styles);\r\n var horizPad = paddings.left + paddings.right;\r\n var vertPad = paddings.top + paddings.bottom;\r\n // Computed styles of width & height are being used because they are the\r\n // only dimensions available to JS that contain non-rounded values. It could\r\n // be possible to utilize the getBoundingClientRect if only it's data wasn't\r\n // affected by CSS transformations let alone paddings, borders and scroll bars.\r\n var width = toFloat(styles.width), height = toFloat(styles.height);\r\n // Width & height include paddings and borders when the 'border-box' box\r\n // model is applied (except for IE).\r\n if (styles.boxSizing === 'border-box') {\r\n // Following conditions are required to handle Internet Explorer which\r\n // doesn't include paddings and borders to computed CSS dimensions.\r\n //\r\n // We can say that if CSS dimensions + paddings are equal to the \"client\"\r\n // properties then it's either IE, and thus we don't need to subtract\r\n // anything, or an element merely doesn't have paddings/borders styles.\r\n if (Math.round(width + horizPad) !== clientWidth) {\r\n width -= getBordersSize(styles, 'left', 'right') + horizPad;\r\n }\r\n if (Math.round(height + vertPad) !== clientHeight) {\r\n height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\r\n }\r\n }\r\n // Following steps can't be applied to the document's root element as its\r\n // client[Width/Height] properties represent viewport area of the window.\r\n // Besides, it's as well not necessary as the itself neither has\r\n // rendered scroll bars nor it can be clipped.\r\n if (!isDocumentElement(target)) {\r\n // In some browsers (only in Firefox, actually) CSS width & height\r\n // include scroll bars size which can be removed at this step as scroll\r\n // bars are the only difference between rounded dimensions + paddings\r\n // and \"client\" properties, though that is not always true in Chrome.\r\n var vertScrollbar = Math.round(width + horizPad) - clientWidth;\r\n var horizScrollbar = Math.round(height + vertPad) - clientHeight;\r\n // Chrome has a rather weird rounding of \"client\" properties.\r\n // E.g. for an element with content width of 314.2px it sometimes gives\r\n // the client width of 315px and for the width of 314.7px it may give\r\n // 314px. And it doesn't happen all the time. So just ignore this delta\r\n // as a non-relevant.\r\n if (Math.abs(vertScrollbar) !== 1) {\r\n width -= vertScrollbar;\r\n }\r\n if (Math.abs(horizScrollbar) !== 1) {\r\n height -= horizScrollbar;\r\n }\r\n }\r\n return createRectInit(paddings.left, paddings.top, width, height);\r\n}\r\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nvar isSVGGraphicsElement = (function () {\r\n // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\r\n // interface.\r\n if (typeof SVGGraphicsElement !== 'undefined') {\r\n return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };\r\n }\r\n // If it's so, then check that element is at least an instance of the\r\n // SVGElement and that it has the \"getBBox\" method.\r\n // eslint-disable-next-line no-extra-parens\r\n return function (target) { return (target instanceof getWindowOf(target).SVGElement &&\r\n typeof target.getBBox === 'function'); };\r\n})();\r\n/**\r\n * Checks whether provided element is a document element ().\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nfunction isDocumentElement(target) {\r\n return target === getWindowOf(target).document.documentElement;\r\n}\r\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getContentRect(target) {\r\n if (!isBrowser) {\r\n return emptyRect;\r\n }\r\n if (isSVGGraphicsElement(target)) {\r\n return getSVGContentRect(target);\r\n }\r\n return getHTMLElementContentRect(target);\r\n}\r\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\r\nfunction createReadOnlyRect(_a) {\r\n var x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n // If DOMRectReadOnly is available use it as a prototype for the rectangle.\r\n var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\r\n var rect = Object.create(Constr.prototype);\r\n // Rectangle's properties are not writable and non-enumerable.\r\n defineConfigurable(rect, {\r\n x: x, y: y, width: width, height: height,\r\n top: y,\r\n right: x + width,\r\n bottom: height + y,\r\n left: x\r\n });\r\n return rect;\r\n}\r\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction createRectInit(x, y, width, height) {\r\n return { x: x, y: y, width: width, height: height };\r\n}\n\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\r\nvar ResizeObservation = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObservation.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n */\r\n function ResizeObservation(target) {\r\n /**\r\n * Broadcasted width of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastWidth = 0;\r\n /**\r\n * Broadcasted height of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastHeight = 0;\r\n /**\r\n * Reference to the last observed content rectangle.\r\n *\r\n * @private {DOMRectInit}\r\n */\r\n this.contentRect_ = createRectInit(0, 0, 0, 0);\r\n this.target = target;\r\n }\r\n /**\r\n * Updates content rectangle and tells whether it's width or height properties\r\n * have changed since the last broadcast.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObservation.prototype.isActive = function () {\r\n var rect = getContentRect(this.target);\r\n this.contentRect_ = rect;\r\n return (rect.width !== this.broadcastWidth ||\r\n rect.height !== this.broadcastHeight);\r\n };\r\n /**\r\n * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n * from the corresponding properties of the last observed content rectangle.\r\n *\r\n * @returns {DOMRectInit} Last observed content rectangle.\r\n */\r\n ResizeObservation.prototype.broadcastRect = function () {\r\n var rect = this.contentRect_;\r\n this.broadcastWidth = rect.width;\r\n this.broadcastHeight = rect.height;\r\n return rect;\r\n };\r\n return ResizeObservation;\r\n}());\n\nvar ResizeObserverEntry = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObserverEntry.\r\n *\r\n * @param {Element} target - Element that is being observed.\r\n * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n */\r\n function ResizeObserverEntry(target, rectInit) {\r\n var contentRect = createReadOnlyRect(rectInit);\r\n // According to the specification following properties are not writable\r\n // and are also not enumerable in the native implementation.\r\n //\r\n // Property accessors are not being used as they'd require to define a\r\n // private WeakMap storage which may cause memory leaks in browsers that\r\n // don't support this type of collections.\r\n defineConfigurable(this, { target: target, contentRect: contentRect });\r\n }\r\n return ResizeObserverEntry;\r\n}());\n\nvar ResizeObserverSPI = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n * when one of the observed elements changes it's content dimensions.\r\n * @param {ResizeObserverController} controller - Controller instance which\r\n * is responsible for the updates of observer.\r\n * @param {ResizeObserver} callbackCtx - Reference to the public\r\n * ResizeObserver instance which will be passed to callback function.\r\n */\r\n function ResizeObserverSPI(callback, controller, callbackCtx) {\r\n /**\r\n * Collection of resize observations that have detected changes in dimensions\r\n * of elements.\r\n *\r\n * @private {Array}\r\n */\r\n this.activeObservations_ = [];\r\n /**\r\n * Registry of the ResizeObservation instances.\r\n *\r\n * @private {Map}\r\n */\r\n this.observations_ = new MapShim();\r\n if (typeof callback !== 'function') {\r\n throw new TypeError('The callback provided as parameter 1 is not a function.');\r\n }\r\n this.callback_ = callback;\r\n this.controller_ = controller;\r\n this.callbackCtx_ = callbackCtx;\r\n }\r\n /**\r\n * Starts observing provided element.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.observe = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is already being observed.\r\n if (observations.has(target)) {\r\n return;\r\n }\r\n observations.set(target, new ResizeObservation(target));\r\n this.controller_.addObserver(this);\r\n // Force the update of observations.\r\n this.controller_.refresh();\r\n };\r\n /**\r\n * Stops observing provided element.\r\n *\r\n * @param {Element} target - Element to stop observing.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.unobserve = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is not being observed.\r\n if (!observations.has(target)) {\r\n return;\r\n }\r\n observations.delete(target);\r\n if (!observations.size) {\r\n this.controller_.removeObserver(this);\r\n }\r\n };\r\n /**\r\n * Stops observing all elements.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.disconnect = function () {\r\n this.clearActive();\r\n this.observations_.clear();\r\n this.controller_.removeObserver(this);\r\n };\r\n /**\r\n * Collects observation instances the associated element of which has changed\r\n * it's content rectangle.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.gatherActive = function () {\r\n var _this = this;\r\n this.clearActive();\r\n this.observations_.forEach(function (observation) {\r\n if (observation.isActive()) {\r\n _this.activeObservations_.push(observation);\r\n }\r\n });\r\n };\r\n /**\r\n * Invokes initial callback function with a list of ResizeObserverEntry\r\n * instances collected from active resize observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.broadcastActive = function () {\r\n // Do nothing if observer doesn't have active observations.\r\n if (!this.hasActive()) {\r\n return;\r\n }\r\n var ctx = this.callbackCtx_;\r\n // Create ResizeObserverEntry instance for every active observation.\r\n var entries = this.activeObservations_.map(function (observation) {\r\n return new ResizeObserverEntry(observation.target, observation.broadcastRect());\r\n });\r\n this.callback_.call(ctx, entries, ctx);\r\n this.clearActive();\r\n };\r\n /**\r\n * Clears the collection of active observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.clearActive = function () {\r\n this.activeObservations_.splice(0);\r\n };\r\n /**\r\n * Tells whether observer has active observations.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObserverSPI.prototype.hasActive = function () {\r\n return this.activeObservations_.length > 0;\r\n };\r\n return ResizeObserverSPI;\r\n}());\n\n// Registry of internal observers. If WeakMap is not available use current shim\r\n// for the Map collection as it has all required methods and because WeakMap\r\n// can't be fully polyfilled anyway.\r\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\r\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\r\nvar ResizeObserver = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n * dimensions of the observed elements change.\r\n */\r\n function ResizeObserver(callback) {\r\n if (!(this instanceof ResizeObserver)) {\r\n throw new TypeError('Cannot call a class as a function.');\r\n }\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n var controller = ResizeObserverController.getInstance();\r\n var observer = new ResizeObserverSPI(callback, controller, this);\r\n observers.set(this, observer);\r\n }\r\n return ResizeObserver;\r\n}());\r\n// Expose public methods of ResizeObserver.\r\n[\r\n 'observe',\r\n 'unobserve',\r\n 'disconnect'\r\n].forEach(function (method) {\r\n ResizeObserver.prototype[method] = function () {\r\n var _a;\r\n return (_a = observers.get(this))[method].apply(_a, arguments);\r\n };\r\n});\n\nvar index = (function () {\r\n // Export existing implementation if available.\r\n if (typeof global$1.ResizeObserver !== 'undefined') {\r\n return global$1.ResizeObserver;\r\n }\r\n return ResizeObserver;\r\n})();\n\nexport default index;\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport ResizeObserver from \"resize-observer-polyfill\"\nimport {\n NEVER,\n Observable,\n Subject,\n defer,\n filter,\n finalize,\n map,\n merge,\n of,\n shareReplay,\n startWith,\n switchMap,\n tap\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Element offset\n */\nexport interface ElementSize {\n width: number /* Element width */\n height: number /* Element height */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Resize observer entry subject\n */\nconst entry$ = new Subject()\n\n/**\n * Resize observer observable\n *\n * This observable will create a `ResizeObserver` on the first subscription\n * and will automatically terminate it when there are no more subscribers.\n * It's quite important to centralize observation in a single `ResizeObserver`,\n * as the performance difference can be quite dramatic, as the link shows.\n *\n * @see https://bit.ly/3iIYfEm - Google Groups on performance\n */\nconst observer$ = defer(() => of(\n new ResizeObserver(entries => {\n for (const entry of entries)\n entry$.next(entry)\n })\n))\n .pipe(\n switchMap(observer => merge(NEVER, of(observer))\n .pipe(\n finalize(() => observer.disconnect())\n )\n ),\n shareReplay(1)\n )\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element size\n *\n * @param el - Element\n *\n * @returns Element size\n */\nexport function getElementSize(\n el: HTMLElement\n): ElementSize {\n return {\n width: el.offsetWidth,\n height: el.offsetHeight\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element size\n *\n * This function returns an observable that subscribes to a single internal\n * instance of `ResizeObserver` upon subscription, and emit resize events until\n * termination. Note that this function should not be called with the same\n * element twice, as the first unsubscription will terminate observation.\n *\n * Sadly, we can't use the `DOMRect` objects returned by the observer, because\n * we need the emitted values to be consistent with `getElementSize`, which will\n * return the used values (rounded) and not actual values (unrounded). Thus, we\n * use the `offset*` properties. See the linked GitHub issue.\n *\n * @see https://bit.ly/3m0k3he - GitHub issue\n *\n * @param el - Element\n *\n * @returns Element size observable\n */\nexport function watchElementSize(\n el: HTMLElement\n): Observable {\n return observer$\n .pipe(\n tap(observer => observer.observe(el)),\n switchMap(observer => entry$\n .pipe(\n filter(({ target }) => target === el),\n finalize(() => observer.unobserve(el)),\n map(() => getElementSize(el))\n )\n ),\n startWith(getElementSize(el))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { ElementSize } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element content size (= scroll width and height)\n *\n * @param el - Element\n *\n * @returns Element content size\n */\nexport function getElementContentSize(\n el: HTMLElement\n): ElementSize {\n return {\n width: el.scrollWidth,\n height: el.scrollHeight\n }\n}\n\n/**\n * Retrieve the overflowing container of an element, if any\n *\n * @param el - Element\n *\n * @returns Overflowing container or nothing\n */\nexport function getElementContainer(\n el: HTMLElement\n): HTMLElement | undefined {\n let parent = el.parentElement\n while (parent)\n if (\n el.scrollWidth <= parent.scrollWidth &&\n el.scrollHeight <= parent.scrollHeight\n )\n parent = (el = parent).parentElement\n else\n break\n\n /* Return overflowing container */\n return parent ? el : undefined\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n NEVER,\n Observable,\n Subject,\n defer,\n distinctUntilChanged,\n filter,\n finalize,\n map,\n merge,\n of,\n shareReplay,\n switchMap,\n tap\n} from \"rxjs\"\n\nimport {\n getElementContentSize,\n getElementSize,\n watchElementContentOffset\n} from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Intersection observer entry subject\n */\nconst entry$ = new Subject()\n\n/**\n * Intersection observer observable\n *\n * This observable will create an `IntersectionObserver` on first subscription\n * and will automatically terminate it when there are no more subscribers.\n *\n * @see https://bit.ly/3iIYfEm - Google Groups on performance\n */\nconst observer$ = defer(() => of(\n new IntersectionObserver(entries => {\n for (const entry of entries)\n entry$.next(entry)\n }, {\n threshold: 0\n })\n))\n .pipe(\n switchMap(observer => merge(NEVER, of(observer))\n .pipe(\n finalize(() => observer.disconnect())\n )\n ),\n shareReplay(1)\n )\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch element visibility\n *\n * @param el - Element\n *\n * @returns Element visibility observable\n */\nexport function watchElementVisibility(\n el: HTMLElement\n): Observable {\n return observer$\n .pipe(\n tap(observer => observer.observe(el)),\n switchMap(observer => entry$\n .pipe(\n filter(({ target }) => target === el),\n finalize(() => observer.unobserve(el)),\n map(({ isIntersecting }) => isIntersecting)\n )\n )\n )\n}\n\n/**\n * Watch element boundary\n *\n * This function returns an observable which emits whether the bottom content\n * boundary (= scroll offset) of an element is within a certain threshold.\n *\n * @param el - Element\n * @param threshold - Threshold\n *\n * @returns Element boundary observable\n */\nexport function watchElementBoundary(\n el: HTMLElement, threshold = 16\n): Observable {\n return watchElementContentOffset(el)\n .pipe(\n map(({ y }) => {\n const visible = getElementSize(el)\n const content = getElementContentSize(el)\n return y >= (\n content.height - visible.height - threshold\n )\n }),\n distinctUntilChanged()\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n fromEvent,\n map,\n startWith\n} from \"rxjs\"\n\nimport { getElement } from \"../element\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle\n */\nexport type Toggle =\n | \"drawer\" /* Toggle for drawer */\n | \"search\" /* Toggle for search */\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle map\n */\nconst toggles: Record = {\n drawer: getElement(\"[data-md-toggle=drawer]\"),\n search: getElement(\"[data-md-toggle=search]\")\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve the value of a toggle\n *\n * @param name - Toggle\n *\n * @returns Toggle value\n */\nexport function getToggle(name: Toggle): boolean {\n return toggles[name].checked\n}\n\n/**\n * Set toggle\n *\n * Simulating a click event seems to be the most cross-browser compatible way\n * of changing the value while also emitting a `change` event. Before, Material\n * used `CustomEvent` to programmatically change the value of a toggle, but this\n * is a much simpler and cleaner solution which doesn't require a polyfill.\n *\n * @param name - Toggle\n * @param value - Toggle value\n */\nexport function setToggle(name: Toggle, value: boolean): void {\n if (toggles[name].checked !== value)\n toggles[name].click()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch toggle\n *\n * @param name - Toggle\n *\n * @returns Toggle value observable\n */\nexport function watchToggle(name: Toggle): Observable {\n const el = toggles[name]\n return fromEvent(el, \"change\")\n .pipe(\n map(() => el.checked),\n startWith(el.checked)\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n filter,\n fromEvent,\n map,\n share\n} from \"rxjs\"\n\nimport { getActiveElement } from \"../element\"\nimport { getToggle } from \"../toggle\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Keyboard mode\n */\nexport type KeyboardMode =\n | \"global\" /* Global */\n | \"search\" /* Search is open */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Keyboard\n */\nexport interface Keyboard {\n mode: KeyboardMode /* Keyboard mode */\n type: string /* Key type */\n claim(): void /* Key claim */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Check whether an element may receive keyboard input\n *\n * @param el - Element\n * @param type - Key type\n *\n * @returns Test result\n */\nfunction isSusceptibleToKeyboard(\n el: HTMLElement, type: string\n): boolean {\n switch (el.constructor) {\n\n /* Input elements */\n case HTMLInputElement:\n /* @ts-expect-error - omit unnecessary type cast */\n if (el.type === \"radio\")\n return /^Arrow/.test(type)\n else\n return true\n\n /* Select element and textarea */\n case HTMLSelectElement:\n case HTMLTextAreaElement:\n return true\n\n /* Everything else */\n default:\n return el.isContentEditable\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch keyboard\n *\n * @returns Keyboard observable\n */\nexport function watchKeyboard(): Observable {\n return fromEvent(window, \"keydown\")\n .pipe(\n filter(ev => !(ev.metaKey || ev.ctrlKey)),\n map(ev => ({\n mode: getToggle(\"search\") ? \"search\" : \"global\",\n type: ev.key,\n claim() {\n ev.preventDefault()\n ev.stopPropagation()\n }\n } as Keyboard)),\n filter(({ mode, type }) => {\n if (mode === \"global\") {\n const active = getActiveElement()\n if (typeof active !== \"undefined\")\n return !isSusceptibleToKeyboard(active, type)\n }\n return true\n }),\n share()\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Subject } from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location\n *\n * This function returns a `URL` object (and not `Location`) to normalize the\n * typings across the application. Furthermore, locations need to be tracked\n * without setting them and `Location` is a singleton which represents the\n * current location.\n *\n * @returns URL\n */\nexport function getLocation(): URL {\n return new URL(location.href)\n}\n\n/**\n * Set location\n *\n * @param url - URL to change to\n */\nexport function setLocation(url: URL): void {\n location.href = url.href\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location\n *\n * @returns Location subject\n */\nexport function watchLocation(): Subject {\n return new Subject()\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { JSX as JSXInternal } from \"preact\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * HTML attributes\n */\ntype Attributes =\n & JSXInternal.HTMLAttributes\n & JSXInternal.SVGAttributes\n & Record\n\n/**\n * Child element\n */\ntype Child =\n | HTMLElement\n | Text\n | string\n | number\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Append a child node to an element\n *\n * @param el - Element\n * @param child - Child node(s)\n */\nfunction appendChild(el: HTMLElement, child: Child | Child[]): void {\n\n /* Handle primitive types (including raw HTML) */\n if (typeof child === \"string\" || typeof child === \"number\") {\n el.innerHTML += child.toString()\n\n /* Handle nodes */\n } else if (child instanceof Node) {\n el.appendChild(child)\n\n /* Handle nested children */\n } else if (Array.isArray(child)) {\n for (const node of child)\n appendChild(el, node)\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * JSX factory\n *\n * @template T - Element type\n *\n * @param tag - HTML tag\n * @param attributes - HTML attributes\n * @param children - Child elements\n *\n * @returns Element\n */\nexport function h(\n tag: T, attributes?: Attributes | null, ...children: Child[]\n): HTMLElementTagNameMap[T]\n\nexport function h(\n tag: string, attributes?: Attributes | null, ...children: Child[]\n): T\n\nexport function h(\n tag: string, attributes?: Attributes | null, ...children: Child[]\n): T {\n const el = document.createElement(tag)\n\n /* Set attributes, if any */\n if (attributes)\n for (const attr of Object.keys(attributes)) {\n if (typeof attributes[attr] === \"undefined\")\n continue\n\n /* Set default attribute or boolean */\n if (typeof attributes[attr] !== \"boolean\")\n el.setAttribute(attr, attributes[attr])\n else\n el.setAttribute(attr, \"\")\n }\n\n /* Append child nodes */\n for (const child of children)\n appendChild(el, child)\n\n /* Return element */\n return el as T\n}\n\n/* ----------------------------------------------------------------------------\n * Namespace\n * ------------------------------------------------------------------------- */\n\nexport declare namespace h {\n namespace JSX {\n type Element = HTMLElement\n type IntrinsicElements = JSXInternal.IntrinsicElements\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Truncate a string after the given number of characters\n *\n * This is not a very reasonable approach, since the summaries kind of suck.\n * It would be better to create something more intelligent, highlighting the\n * search occurrences and making a better summary out of it, but this note was\n * written three years ago, so who knows if we'll ever fix it.\n *\n * @param value - Value to be truncated\n * @param n - Number of characters\n *\n * @returns Truncated value\n */\nexport function truncate(value: string, n: number): string {\n let i = n\n if (value.length > i) {\n while (value[i] !== \" \" && --i > 0) { /* keep eating */ }\n return `${value.substring(0, i)}...`\n }\n return value\n}\n\n/**\n * Round a number for display with repository facts\n *\n * This is a reverse-engineered version of GitHub's weird rounding algorithm\n * for stars, forks and all other numbers. While all numbers below `1,000` are\n * returned as-is, bigger numbers are converted to fixed numbers:\n *\n * - `1,049` => `1k`\n * - `1,050` => `1.1k`\n * - `1,949` => `1.9k`\n * - `1,950` => `2k`\n *\n * @param value - Original value\n *\n * @returns Rounded value\n */\nexport function round(value: number): string {\n if (value > 999) {\n const digits = +((value - 950) % 1000 > 99)\n return `${((value + 0.000001) / 1000).toFixed(digits)}k`\n } else {\n return value.toString()\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n filter,\n fromEvent,\n map,\n shareReplay,\n startWith\n} from \"rxjs\"\n\nimport { getOptionalElement } from \"~/browser\"\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location hash\n *\n * @returns Location hash\n */\nexport function getLocationHash(): string {\n return location.hash.substring(1)\n}\n\n/**\n * Set location hash\n *\n * Setting a new fragment identifier via `location.hash` will have no effect\n * if the value doesn't change. When a new fragment identifier is set, we want\n * the browser to target the respective element at all times, which is why we\n * use this dirty little trick.\n *\n * @param hash - Location hash\n */\nexport function setLocationHash(hash: string): void {\n const el = h(\"a\", { href: hash })\n el.addEventListener(\"click\", ev => ev.stopPropagation())\n el.click()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location hash\n *\n * @returns Location hash observable\n */\nexport function watchLocationHash(): Observable {\n return fromEvent(window, \"hashchange\")\n .pipe(\n map(getLocationHash),\n startWith(getLocationHash()),\n filter(hash => hash.length > 0),\n shareReplay(1)\n )\n}\n\n/**\n * Watch location target\n *\n * @returns Location target observable\n */\nexport function watchLocationTarget(): Observable {\n return watchLocationHash()\n .pipe(\n map(id => getOptionalElement(`[id=\"${id}\"]`)!),\n filter(el => typeof el !== \"undefined\")\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n fromEvent,\n fromEventPattern,\n map,\n merge,\n startWith,\n switchMap\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch media query\n *\n * Note that although `MediaQueryList.addListener` is deprecated we have to\n * use it, because it's the only way to ensure proper downward compatibility.\n *\n * @see https://bit.ly/3dUBH2m - GitHub issue\n *\n * @param query - Media query\n *\n * @returns Media observable\n */\nexport function watchMedia(query: string): Observable {\n const media = matchMedia(query)\n return fromEventPattern(next => (\n media.addListener(() => next(media.matches))\n ))\n .pipe(\n startWith(media.matches)\n )\n}\n\n/**\n * Watch print mode\n *\n * @returns Print observable\n */\nexport function watchPrint(): Observable {\n const media = matchMedia(\"print\")\n return merge(\n fromEvent(window, \"beforeprint\").pipe(map(() => true)),\n fromEvent(window, \"afterprint\").pipe(map(() => false))\n )\n .pipe(\n startWith(media.matches)\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Toggle an observable with a media observable\n *\n * @template T - Data type\n *\n * @param query$ - Media observable\n * @param factory - Observable factory\n *\n * @returns Toggled observable\n */\nexport function at(\n query$: Observable, factory: () => Observable\n): Observable {\n return query$\n .pipe(\n switchMap(active => active ? factory() : EMPTY)\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n catchError,\n from,\n map,\n of,\n shareReplay,\n switchMap,\n throwError\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch the given URL\n *\n * If the request fails (e.g. when dispatched from `file://` locations), the\n * observable will complete without emitting a value.\n *\n * @param url - Request URL\n * @param options - Options\n *\n * @returns Response observable\n */\nexport function request(\n url: URL | string, options: RequestInit = { credentials: \"same-origin\" }\n): Observable {\n return from(fetch(`${url}`, options))\n .pipe(\n catchError(() => EMPTY),\n switchMap(res => res.status !== 200\n ? throwError(() => new Error(res.statusText))\n : of(res)\n )\n )\n}\n\n/**\n * Fetch JSON from the given URL\n *\n * @template T - Data type\n *\n * @param url - Request URL\n * @param options - Options\n *\n * @returns Data observable\n */\nexport function requestJSON(\n url: URL | string, options?: RequestInit\n): Observable {\n return request(url, options)\n .pipe(\n switchMap(res => res.json()),\n shareReplay(1)\n )\n}\n\n/**\n * Fetch XML from the given URL\n *\n * @param url - Request URL\n * @param options - Options\n *\n * @returns Data observable\n */\nexport function requestXML(\n url: URL | string, options?: RequestInit\n): Observable {\n const dom = new DOMParser()\n return request(url, options)\n .pipe(\n switchMap(res => res.text()),\n map(res => dom.parseFromString(res, \"text/xml\")),\n shareReplay(1)\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n defer,\n finalize,\n fromEvent,\n map,\n merge,\n switchMap,\n take,\n throwError\n} from \"rxjs\"\n\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create and load a `script` element\n *\n * This function returns an observable that will emit when the script was\n * successfully loaded, or throw an error if it didn't.\n *\n * @param src - Script URL\n *\n * @returns Script observable\n */\nexport function watchScript(src: string): Observable {\n const script = h(\"script\", { src })\n return defer(() => {\n document.head.appendChild(script)\n return merge(\n fromEvent(script, \"load\"),\n fromEvent(script, \"error\")\n .pipe(\n switchMap(() => (\n throwError(() => new ReferenceError(`Invalid script: ${src}`))\n ))\n )\n )\n .pipe(\n map(() => undefined),\n finalize(() => document.head.removeChild(script)),\n take(1)\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n fromEvent,\n map,\n merge,\n startWith\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport offset\n */\nexport interface ViewportOffset {\n x: number /* Horizontal offset */\n y: number /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport offset\n *\n * On iOS Safari, viewport offset can be negative due to overflow scrolling.\n * As this may induce strange behaviors downstream, we'll just limit it to 0.\n *\n * @returns Viewport offset\n */\nexport function getViewportOffset(): ViewportOffset {\n return {\n x: Math.max(0, scrollX),\n y: Math.max(0, scrollY)\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport offset\n *\n * @returns Viewport offset observable\n */\nexport function watchViewportOffset(): Observable {\n return merge(\n fromEvent(window, \"scroll\", { passive: true }),\n fromEvent(window, \"resize\", { passive: true })\n )\n .pipe(\n map(getViewportOffset),\n startWith(getViewportOffset())\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n fromEvent,\n map,\n startWith\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport size\n */\nexport interface ViewportSize {\n width: number /* Viewport width */\n height: number /* Viewport height */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport size\n *\n * @returns Viewport size\n */\nexport function getViewportSize(): ViewportSize {\n return {\n width: innerWidth,\n height: innerHeight\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport size\n *\n * @returns Viewport size observable\n */\nexport function watchViewportSize(): Observable {\n return fromEvent(window, \"resize\", { passive: true })\n .pipe(\n map(getViewportSize),\n startWith(getViewportSize())\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n combineLatest,\n map,\n shareReplay\n} from \"rxjs\"\n\nimport {\n ViewportOffset,\n watchViewportOffset\n} from \"../offset\"\nimport {\n ViewportSize,\n watchViewportSize\n} from \"../size\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport\n */\nexport interface Viewport {\n offset: ViewportOffset /* Viewport offset */\n size: ViewportSize /* Viewport size */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport\n *\n * @returns Viewport observable\n */\nexport function watchViewport(): Observable {\n return combineLatest([\n watchViewportOffset(),\n watchViewportSize()\n ])\n .pipe(\n map(([offset, size]) => ({ offset, size })),\n shareReplay(1)\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n combineLatest,\n distinctUntilKeyChanged,\n map\n} from \"rxjs\"\n\nimport { Header } from \"~/components\"\n\nimport { getElementOffset } from \"../../element\"\nimport { Viewport } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
/* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport relative to element\n *\n * @param el - Element\n * @param options - Options\n *\n * @returns Viewport observable\n */\nexport function watchViewportAt(\n el: HTMLElement, { viewport$, header$ }: WatchOptions\n): Observable {\n const size$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\")\n )\n\n /* Compute element offset */\n const offset$ = combineLatest([size$, header$])\n .pipe(\n map(() => getElementOffset(el))\n )\n\n /* Compute relative viewport, return hot observable */\n return combineLatest([header$, viewport$, offset$])\n .pipe(\n map(([{ height }, { offset, size }, { x, y }]) => ({\n offset: {\n x: offset.x - x,\n y: offset.y - y + height\n },\n size\n }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n fromEvent,\n map,\n share,\n switchMap,\n tap,\n throttle\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Worker message\n */\nexport interface WorkerMessage {\n type: unknown /* Message type */\n data?: unknown /* Message data */\n}\n\n/**\n * Worker handler\n *\n * @template T - Message type\n */\nexport interface WorkerHandler<\n T extends WorkerMessage\n> {\n tx$: Subject /* Message transmission subject */\n rx$: Observable /* Message receive observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n *\n * @template T - Worker message type\n */\ninterface WatchOptions {\n tx$: Observable /* Message transmission observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch a web worker\n *\n * This function returns an observable that sends all values emitted by the\n * message observable to the web worker. Web worker communication is expected\n * to be bidirectional (request-response) and synchronous. Messages that are\n * emitted during a pending request are throttled, the last one is emitted.\n *\n * @param worker - Web worker\n * @param options - Options\n *\n * @returns Worker message observable\n */\nexport function watchWorker(\n worker: Worker, { tx$ }: WatchOptions\n): Observable {\n\n /* Intercept messages from worker-like objects */\n const rx$ = fromEvent(worker, \"message\")\n .pipe(\n map(({ data }) => data as T)\n )\n\n /* Send and receive messages, return hot observable */\n return tx$\n .pipe(\n throttle(() => rx$, { leading: true, trailing: true }),\n tap(message => worker.postMessage(message)),\n switchMap(() => rx$),\n share()\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { getElement, getLocation } from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Feature flag\n */\nexport type Flag =\n | \"announce.dismiss\" /* Dismissable announcement bar */\n | \"content.code.annotate\" /* Code annotations */\n | \"content.lazy\" /* Lazy content elements */\n | \"content.tabs.link\" /* Link content tabs */\n | \"header.autohide\" /* Hide header */\n | \"navigation.expand\" /* Automatic expansion */\n | \"navigation.indexes\" /* Section pages */\n | \"navigation.instant\" /* Instant loading */\n | \"navigation.sections\" /* Section navigation */\n | \"navigation.tabs\" /* Tabs navigation */\n | \"navigation.tabs.sticky\" /* Tabs navigation (sticky) */\n | \"navigation.top\" /* Back-to-top button */\n | \"navigation.tracking\" /* Anchor tracking */\n | \"search.highlight\" /* Search highlighting */\n | \"search.share\" /* Search sharing */\n | \"search.suggest\" /* Search suggestions */\n | \"toc.follow\" /* Following table of contents */\n | \"toc.integrate\" /* Integrated table of contents */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Translation\n */\nexport type Translation =\n | \"clipboard.copy\" /* Copy to clipboard */\n | \"clipboard.copied\" /* Copied to clipboard */\n | \"search.config.lang\" /* Search language */\n | \"search.config.pipeline\" /* Search pipeline */\n | \"search.config.separator\" /* Search separator */\n | \"search.placeholder\" /* Search */\n | \"search.result.placeholder\" /* Type to start searching */\n | \"search.result.none\" /* No matching documents */\n | \"search.result.one\" /* 1 matching document */\n | \"search.result.other\" /* # matching documents */\n | \"search.result.more.one\" /* 1 more on this page */\n | \"search.result.more.other\" /* # more on this page */\n | \"search.result.term.missing\" /* Missing */\n | \"select.version.title\" /* Version selector */\n\n/**\n * Translations\n */\nexport type Translations = Record\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Versioning\n */\nexport interface Versioning {\n provider: \"mike\" /* Version provider */\n default?: string /* Default version */\n}\n\n/**\n * Configuration\n */\nexport interface Config {\n base: string /* Base URL */\n features: Flag[] /* Feature flags */\n translations: Translations /* Translations */\n search: string /* Search worker URL */\n tags?: Record /* Tags mapping */\n version?: Versioning /* Versioning */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve global configuration and make base URL absolute\n */\nconst script = getElement(\"#__config\")\nconst config: Config = JSON.parse(script.textContent!)\nconfig.base = `${new URL(config.base, getLocation())}`\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve global configuration\n *\n * @returns Global configuration\n */\nexport function configuration(): Config {\n return config\n}\n\n/**\n * Check whether a feature flag is enabled\n *\n * @param flag - Feature flag\n *\n * @returns Test result\n */\nexport function feature(flag: Flag): boolean {\n return config.features.includes(flag)\n}\n\n/**\n * Retrieve the translation for the given key\n *\n * @param key - Key to be translated\n * @param value - Positional value, if any\n *\n * @returns Translation\n */\nexport function translation(\n key: Translation, value?: string | number\n): string {\n return typeof value !== \"undefined\"\n ? config.translations[key].replace(\"#\", value.toString())\n : config.translations[key]\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { getElement, getElements } from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Component type\n */\nexport type ComponentType =\n | \"announce\" /* Announcement bar */\n | \"container\" /* Container */\n | \"consent\" /* Consent */\n | \"content\" /* Content */\n | \"dialog\" /* Dialog */\n | \"header\" /* Header */\n | \"header-title\" /* Header title */\n | \"header-topic\" /* Header topic */\n | \"main\" /* Main area */\n | \"outdated\" /* Version warning */\n | \"palette\" /* Color palette */\n | \"search\" /* Search */\n | \"search-query\" /* Search input */\n | \"search-result\" /* Search results */\n | \"search-share\" /* Search sharing */\n | \"search-suggest\" /* Search suggestions */\n | \"sidebar\" /* Sidebar */\n | \"skip\" /* Skip link */\n | \"source\" /* Repository information */\n | \"tabs\" /* Navigation tabs */\n | \"toc\" /* Table of contents */\n | \"top\" /* Back-to-top button */\n\n/**\n * Component\n *\n * @template T - Component type\n * @template U - Reference type\n */\nexport type Component<\n T extends {} = {},\n U extends HTMLElement = HTMLElement\n> =\n T & {\n ref: U /* Component reference */\n }\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Component type map\n */\ninterface ComponentTypeMap {\n \"announce\": HTMLElement /* Announcement bar */\n \"container\": HTMLElement /* Container */\n \"consent\": HTMLElement /* Consent */\n \"content\": HTMLElement /* Content */\n \"dialog\": HTMLElement /* Dialog */\n \"header\": HTMLElement /* Header */\n \"header-title\": HTMLElement /* Header title */\n \"header-topic\": HTMLElement /* Header topic */\n \"main\": HTMLElement /* Main area */\n \"outdated\": HTMLElement /* Version warning */\n \"palette\": HTMLElement /* Color palette */\n \"search\": HTMLElement /* Search */\n \"search-query\": HTMLInputElement /* Search input */\n \"search-result\": HTMLElement /* Search results */\n \"search-share\": HTMLAnchorElement /* Search sharing */\n \"search-suggest\": HTMLElement /* Search suggestions */\n \"sidebar\": HTMLElement /* Sidebar */\n \"skip\": HTMLAnchorElement /* Skip link */\n \"source\": HTMLAnchorElement /* Repository information */\n \"tabs\": HTMLElement /* Navigation tabs */\n \"toc\": HTMLElement /* Table of contents */\n \"top\": HTMLAnchorElement /* Back-to-top button */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve the element for a given component or throw a reference error\n *\n * @template T - Component type\n *\n * @param type - Component type\n * @param node - Node of reference\n *\n * @returns Element\n */\nexport function getComponentElement(\n type: T, node: ParentNode = document\n): ComponentTypeMap[T] {\n return getElement(`[data-md-component=${type}]`, node)\n}\n\n/**\n * Retrieve all elements for a given component\n *\n * @template T - Component type\n *\n * @param type - Component type\n * @param node - Node of reference\n *\n * @returns Elements\n */\nexport function getComponentElements(\n type: T, node: ParentNode = document\n): ComponentTypeMap[T][] {\n return getElements(`[data-md-component=${type}]`, node)\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n Subject,\n defer,\n finalize,\n fromEvent,\n map,\n startWith,\n tap\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport { getElement } from \"~/browser\"\n\nimport { Component } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Announcement bar\n */\nexport interface Announce {\n hash: number /* Content hash */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch announcement bar\n *\n * @param el - Announcement bar element\n *\n * @returns Announcement bar observable\n */\nexport function watchAnnounce(\n el: HTMLElement\n): Observable {\n const button = getElement(\".md-typeset > :first-child\", el)\n return fromEvent(button, \"click\", { once: true })\n .pipe(\n map(() => getElement(\".md-typeset\", el)),\n map(content => ({ hash: __md_hash(content.innerHTML) }))\n )\n}\n\n/**\n * Mount announcement bar\n *\n * @param el - Announcement bar element\n *\n * @returns Announcement bar component observable\n */\nexport function mountAnnounce(\n el: HTMLElement\n): Observable> {\n if (!feature(\"announce.dismiss\") || !el.childElementCount)\n return EMPTY\n\n /* Mount component on subscription */\n return defer(() => {\n const push$ = new Subject()\n push$\n .pipe(\n startWith({ hash: __md_get(\"__announce\") })\n )\n .subscribe(({ hash }) => {\n if (hash && hash === (__md_get(\"__announce\") ?? hash)) {\n el.hidden = true\n\n /* Persist preference in local storage */\n __md_set(\"__announce\", hash)\n }\n })\n\n /* Create and return component */\n return watchAnnounce(el)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n finalize,\n map,\n tap\n} from \"rxjs\"\n\nimport { Component } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Consent\n */\nexport interface Consent {\n hidden: boolean /* Consent is hidden */\n}\n\n/**\n * Consent defaults\n */\nexport interface ConsentDefaults {\n analytics?: boolean /* Consent for Analytics */\n github?: boolean /* Consent for GitHub */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n target$: Observable /* Target observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n target$: Observable /* Target observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch consent\n *\n * @param el - Consent element\n * @param options - Options\n *\n * @returns Consent observable\n */\nexport function watchConsent(\n el: HTMLElement, { target$ }: WatchOptions\n): Observable {\n return target$\n .pipe(\n map(target => ({ hidden: target !== el }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Mount consent\n *\n * @param el - Consent element\n * @param options - Options\n *\n * @returns Consent component observable\n */\nexport function mountConsent(\n el: HTMLElement, options: MountOptions\n): Observable> {\n const internal$ = new Subject()\n internal$.subscribe(({ hidden }) => {\n el.hidden = hidden\n })\n\n /* Create and return component */\n return watchConsent(el, options)\n .pipe(\n tap(state => internal$.next(state)),\n finalize(() => internal$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport ClipboardJS from \"clipboard\"\nimport {\n EMPTY,\n Observable,\n Subject,\n defer,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n finalize,\n map,\n mergeWith,\n switchMap,\n take,\n tap\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport {\n getElementContentSize,\n watchElementSize,\n watchElementVisibility\n} from \"~/browser\"\nimport { renderClipboardButton } from \"~/templates\"\n\nimport { Component } from \"../../../_\"\nimport {\n Annotation,\n mountAnnotationList\n} from \"../../annotation\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Code block\n */\nexport interface CodeBlock {\n scrollable: boolean /* Code block overflows */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n target$: Observable /* Location target observable */\n print$: Observable /* Media print observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Global sequence number for code blocks\n */\nlet sequence = 0\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Find candidate list element directly following a code block\n *\n * @param el - Code block element\n *\n * @returns List element or nothing\n */\nfunction findCandidateList(el: HTMLElement): HTMLElement | undefined {\n if (el.nextElementSibling) {\n const sibling = el.nextElementSibling as HTMLElement\n if (sibling.tagName === \"OL\")\n return sibling\n\n /* Skip empty paragraphs - see https://bit.ly/3r4ZJ2O */\n else if (sibling.tagName === \"P\" && !sibling.children.length)\n return findCandidateList(sibling)\n }\n\n /* Everything else */\n return undefined\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch code block\n *\n * This function monitors size changes of the viewport, as well as switches of\n * content tabs with embedded code blocks, as both may trigger overflow.\n *\n * @param el - Code block element\n *\n * @returns Code block observable\n */\nexport function watchCodeBlock(\n el: HTMLElement\n): Observable {\n return watchElementSize(el)\n .pipe(\n map(({ width }) => {\n const content = getElementContentSize(el)\n return {\n scrollable: content.width > width\n }\n }),\n distinctUntilKeyChanged(\"scrollable\")\n )\n}\n\n/**\n * Mount code block\n *\n * This function ensures that an overflowing code block is focusable through\n * keyboard, so it can be scrolled without a mouse to improve on accessibility.\n * Furthermore, if code annotations are enabled, they are mounted if and only\n * if the code block is currently visible, e.g., not in a hidden content tab.\n *\n * Note that code blocks may be mounted eagerly or lazily. If they're mounted\n * lazily (on first visibility), code annotation anchor links will not work,\n * as they are evaluated on initial page load, and code annotations in general\n * might feel a little bumpier.\n *\n * @param el - Code block element\n * @param options - Options\n *\n * @returns Code block and annotation component observable\n */\nexport function mountCodeBlock(\n el: HTMLElement, options: MountOptions\n): Observable> {\n const { matches: hover } = matchMedia(\"(hover)\")\n\n /* Defer mounting of code block - see https://bit.ly/3vHVoVD */\n const factory$ = defer(() => {\n const push$ = new Subject()\n push$.subscribe(({ scrollable }) => {\n if (scrollable && hover)\n el.setAttribute(\"tabindex\", \"0\")\n else\n el.removeAttribute(\"tabindex\")\n })\n\n /* Render button for Clipboard.js integration */\n if (ClipboardJS.isSupported()) {\n const parent = el.closest(\"pre\")!\n parent.id = `__code_${++sequence}`\n parent.insertBefore(\n renderClipboardButton(parent.id),\n el\n )\n }\n\n /* Handle code annotations */\n const container = el.closest(\".highlight\")\n if (container instanceof HTMLElement) {\n const list = findCandidateList(container)\n\n /* Mount code annotations, if enabled */\n if (typeof list !== \"undefined\" && (\n container.classList.contains(\"annotate\") ||\n feature(\"content.code.annotate\")\n )) {\n const annotations$ = mountAnnotationList(list, el, options)\n\n /* Create and return component */\n return watchCodeBlock(el)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state })),\n mergeWith(\n watchElementSize(container)\n .pipe(\n map(({ width, height }) => width && height),\n distinctUntilChanged(),\n switchMap(active => active ? annotations$ : EMPTY)\n )\n )\n )\n }\n }\n\n /* Create and return component */\n return watchCodeBlock(el)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n\n /* Mount code block lazily */\n if (feature(\"content.lazy\"))\n return watchElementVisibility(el)\n .pipe(\n filter(visible => visible),\n take(1),\n switchMap(() => factory$)\n )\n\n /* Mount code block */\n return factory$\n}\n", "/*\n * Copyright (c) 2016-2021 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a tooltip\n *\n * @param id - Tooltip identifier\n *\n * @returns Element\n */\nexport function renderTooltip(id?: string): HTMLElement {\n return (\n
\n
\n
\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"~/utilities\"\n\nimport { renderTooltip } from \"../tooltip\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render an annotation\n *\n * @param id - Annotation identifier\n * @param prefix - Tooltip identifier prefix\n *\n * @returns Element\n */\nexport function renderAnnotation(\n id: string | number, prefix?: string\n): HTMLElement {\n prefix = prefix ? `${prefix}_annotation_${id}` : undefined\n\n /* Render tooltip with anchor, if given */\n if (prefix) {\n const anchor = prefix ? `#${prefix}` : undefined\n return (\n \n )\n } else {\n return (\n \n )\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { translation } from \"~/_\"\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a 'copy-to-clipboard' button\n *\n * @param id - Unique identifier\n *\n * @returns Element\n */\nexport function renderClipboardButton(id: string): HTMLElement {\n return (\n code`}\n >\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { ComponentChild } from \"preact\"\n\nimport { configuration, feature, translation } from \"~/_\"\nimport {\n SearchDocument,\n SearchMetadata,\n SearchResultItem\n} from \"~/integrations/search\"\nimport { h, truncate } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Render flag\n */\nconst enum Flag {\n TEASER = 1, /* Render teaser */\n PARENT = 2 /* Render as parent */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper function\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a search document\n *\n * @param document - Search document\n * @param flag - Render flags\n *\n * @returns Element\n */\nfunction renderSearchDocument(\n document: SearchDocument & SearchMetadata, flag: Flag\n): HTMLElement {\n const parent = flag & Flag.PARENT\n const teaser = flag & Flag.TEASER\n\n /* Render missing query terms */\n const missing = Object.keys(document.terms)\n .filter(key => !document.terms[key])\n .reduce((list, key) => [\n ...list, {key}, \" \"\n ], [])\n .slice(0, -1)\n\n /* Assemble query string for highlighting */\n const url = new URL(document.location)\n if (feature(\"search.highlight\"))\n url.searchParams.set(\"h\", Object.entries(document.terms)\n .filter(([, match]) => match)\n .reduce((highlight, [value]) => `${highlight} ${value}`.trim(), \"\")\n )\n\n /* Render article or section, depending on flags */\n const { tags } = configuration()\n return (\n \n \n {parent > 0 &&
}\n

{document.title}

\n {teaser > 0 && document.text.length > 0 &&\n

\n {truncate(document.text, 320)}\n

\n }\n {document.tags && (\n
\n {document.tags.map(tag => {\n const id = tag.replace(/<[^>]+>/g, \"\")\n const type = tags\n ? id in tags\n ? `md-tag-icon md-tag-icon--${tags[id]}`\n : \"md-tag-icon\"\n : \"\"\n return (\n {tag}\n )\n })}\n
\n )}\n {teaser > 0 && missing.length > 0 &&\n

\n {translation(\"search.result.term.missing\")}: {...missing}\n

\n }\n \n
\n )\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a search result\n *\n * @param result - Search result\n *\n * @returns Element\n */\nexport function renderSearchResultItem(\n result: SearchResultItem\n): HTMLElement {\n const threshold = result[0].score\n const docs = [...result]\n\n /* Find and extract parent article */\n const parent = docs.findIndex(doc => !doc.location.includes(\"#\"))\n const [article] = docs.splice(parent, 1)\n\n /* Determine last index above threshold */\n let index = docs.findIndex(doc => doc.score < threshold)\n if (index === -1)\n index = docs.length\n\n /* Partition sections */\n const best = docs.slice(0, index)\n const more = docs.slice(index)\n\n /* Render children */\n const children = [\n renderSearchDocument(article, Flag.PARENT | +(!parent && index === 0)),\n ...best.map(section => renderSearchDocument(section, Flag.TEASER)),\n ...more.length ? [\n
\n \n {more.length > 0 && more.length === 1\n ? translation(\"search.result.more.one\")\n : translation(\"search.result.more.other\", more.length)\n }\n \n {...more.map(section => renderSearchDocument(section, Flag.TEASER))}\n
\n ] : []\n ]\n\n /* Render search result */\n return (\n
  • \n {children}\n
  • \n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SourceFacts } from \"~/components\"\nimport { h, round } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render repository facts\n *\n * @param facts - Repository facts\n *\n * @returns Element\n */\nexport function renderSourceFacts(facts: SourceFacts): HTMLElement {\n return (\n
      \n {Object.entries(facts).map(([key, value]) => (\n
    • \n {typeof value === \"number\" ? round(value) : value}\n
    • \n ))}\n
    \n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Tabbed control type\n */\ntype TabbedControlType =\n | \"prev\"\n | \"next\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render control for content tabs\n *\n * @param type - Control type\n *\n * @returns Element\n */\nexport function renderTabbedControl(\n type: TabbedControlType\n): HTMLElement {\n const classes = `tabbed-control tabbed-control--${type}`\n return (\n \n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a table inside a wrapper to improve scrolling on mobile\n *\n * @param table - Table element\n *\n * @returns Element\n */\nexport function renderTable(table: HTMLElement): HTMLElement {\n return (\n
    \n
    \n {table}\n
    \n
    \n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { configuration, translation } from \"~/_\"\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Version\n */\nexport interface Version {\n version: string /* Version identifier */\n title: string /* Version title */\n aliases: string[] /* Version aliases */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a version\n *\n * @param version - Version\n *\n * @returns Element\n */\nfunction renderVersion(version: Version): HTMLElement {\n const config = configuration()\n\n /* Ensure trailing slash - see https://bit.ly/3rL5u3f */\n const url = new URL(`../${version.version}/`, config.base)\n return (\n
  • \n \n {version.title}\n \n
  • \n )\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a version selector\n *\n * @param versions - Versions\n * @param active - Active version\n *\n * @returns Element\n */\nexport function renderVersionSelector(\n versions: Version[], active: Version\n): HTMLElement {\n return (\n
    \n \n {active.title}\n \n
      \n {versions.map(renderVersion)}\n
    \n
    \n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n animationFrameScheduler,\n auditTime,\n combineLatest,\n debounceTime,\n defer,\n delay,\n filter,\n finalize,\n fromEvent,\n map,\n merge,\n switchMap,\n take,\n takeLast,\n takeUntil,\n tap,\n throttleTime,\n withLatestFrom\n} from \"rxjs\"\n\nimport {\n ElementOffset,\n getActiveElement,\n getElementSize,\n watchElementContentOffset,\n watchElementFocus,\n watchElementOffset,\n watchElementVisibility\n} from \"~/browser\"\n\nimport { Component } from \"../../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Annotation\n */\nexport interface Annotation {\n active: boolean /* Annotation is active */\n offset: ElementOffset /* Annotation offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n target$: Observable /* Location target observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch annotation\n *\n * @param el - Annotation element\n * @param container - Containing element\n *\n * @returns Annotation observable\n */\nexport function watchAnnotation(\n el: HTMLElement, container: HTMLElement\n): Observable {\n const offset$ = defer(() => combineLatest([\n watchElementOffset(el),\n watchElementContentOffset(container)\n ]))\n .pipe(\n map(([{ x, y }, scroll]): ElementOffset => {\n const { width, height } = getElementSize(el)\n return ({\n x: x - scroll.x + width / 2,\n y: y - scroll.y + height / 2\n })\n })\n )\n\n /* Actively watch annotation on focus */\n return watchElementFocus(el)\n .pipe(\n switchMap(active => offset$\n .pipe(\n map(offset => ({ active, offset })),\n take(+!active || Infinity)\n )\n )\n )\n}\n\n/**\n * Mount annotation\n *\n * @param el - Annotation element\n * @param container - Containing element\n * @param options - Options\n *\n * @returns Annotation component observable\n */\nexport function mountAnnotation(\n el: HTMLElement, container: HTMLElement, { target$ }: MountOptions\n): Observable> {\n const [tooltip, index] = Array.from(el.children)\n\n /* Mount component on subscription */\n return defer(() => {\n const push$ = new Subject()\n const done$ = push$.pipe(takeLast(1))\n push$.subscribe({\n\n /* Handle emission */\n next({ offset }) {\n el.style.setProperty(\"--md-tooltip-x\", `${offset.x}px`)\n el.style.setProperty(\"--md-tooltip-y\", `${offset.y}px`)\n },\n\n /* Handle complete */\n complete() {\n el.style.removeProperty(\"--md-tooltip-x\")\n el.style.removeProperty(\"--md-tooltip-y\")\n }\n })\n\n /* Start animation only when annotation is visible */\n watchElementVisibility(el)\n .pipe(\n takeUntil(done$)\n )\n .subscribe(visible => {\n el.toggleAttribute(\"data-md-visible\", visible)\n })\n\n /* Toggle tooltip presence to mitigate empty lines when copying */\n merge(\n push$.pipe(filter(({ active }) => active)),\n push$.pipe(debounceTime(250), filter(({ active }) => !active))\n )\n .subscribe({\n\n /* Handle emission */\n next({ active }) {\n if (active)\n el.prepend(tooltip)\n else\n tooltip.remove()\n },\n\n /* Handle complete */\n complete() {\n el.prepend(tooltip)\n }\n })\n\n /* Toggle tooltip visibility */\n push$\n .pipe(\n auditTime(16, animationFrameScheduler)\n )\n .subscribe(({ active }) => {\n tooltip.classList.toggle(\"md-tooltip--active\", active)\n })\n\n /* Track relative origin of tooltip */\n push$\n .pipe(\n throttleTime(125, animationFrameScheduler),\n filter(() => !!el.offsetParent),\n map(() => el.offsetParent!.getBoundingClientRect()),\n map(({ x }) => x)\n )\n .subscribe({\n\n /* Handle emission */\n next(origin) {\n if (origin)\n el.style.setProperty(\"--md-tooltip-0\", `${-origin}px`)\n else\n el.style.removeProperty(\"--md-tooltip-0\")\n },\n\n /* Handle complete */\n complete() {\n el.style.removeProperty(\"--md-tooltip-0\")\n }\n })\n\n /* Allow to copy link without scrolling to anchor */\n fromEvent(index, \"click\")\n .pipe(\n takeUntil(done$),\n filter(ev => !(ev.metaKey || ev.ctrlKey))\n )\n .subscribe(ev => ev.preventDefault())\n\n /* Allow to open link in new tab or blur on close */\n fromEvent(index, \"mousedown\")\n .pipe(\n takeUntil(done$),\n withLatestFrom(push$)\n )\n .subscribe(([ev, { active }]) => {\n\n /* Open in new tab */\n if (ev.button !== 0 || ev.metaKey || ev.ctrlKey) {\n ev.preventDefault()\n\n /* Close annotation */\n } else if (active) {\n ev.preventDefault()\n\n /* Focus parent annotation, if any */\n const parent = el.parentElement!.closest(\".md-annotation\")\n if (parent instanceof HTMLElement)\n parent.focus()\n else\n getActiveElement()?.blur()\n }\n })\n\n /* Open and focus annotation on location target */\n target$\n .pipe(\n takeUntil(done$),\n filter(target => target === tooltip),\n delay(125)\n )\n .subscribe(() => el.focus())\n\n /* Create and return component */\n return watchAnnotation(el, container)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n Subject,\n defer,\n finalize,\n merge,\n share,\n takeLast,\n takeUntil\n} from \"rxjs\"\n\nimport {\n getElement,\n getElements,\n getOptionalElement\n} from \"~/browser\"\nimport { renderAnnotation } from \"~/templates\"\n\nimport { Component } from \"../../../_\"\nimport {\n Annotation,\n mountAnnotation\n} from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n target$: Observable /* Location target observable */\n print$: Observable /* Media print observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Find all annotation markers in the given code block\n *\n * @param container - Containing element\n *\n * @returns Annotation markers\n */\nfunction findAnnotationMarkers(container: HTMLElement): Text[] {\n const markers: Text[] = []\n for (const el of getElements(\".c, .c1, .cm\", container)) {\n const nodes: Text[] = []\n\n /* Find all text nodes in current element */\n const it = document.createNodeIterator(el, NodeFilter.SHOW_TEXT)\n for (let node = it.nextNode(); node; node = it.nextNode())\n nodes.push(node as Text)\n\n /* Find all markers in each text node */\n for (let text of nodes) {\n let match: RegExpExecArray | null\n\n /* Split text at marker and add to list */\n while ((match = /(\\(\\d+\\))(!)?/.exec(text.textContent!))) {\n const [, id, force] = match\n if (typeof force === \"undefined\") {\n const marker = text.splitText(match.index)\n text = marker.splitText(id.length)\n markers.push(marker)\n\n /* Replace entire text with marker */\n } else {\n text.textContent = id\n markers.push(text)\n break\n }\n }\n }\n }\n return markers\n}\n\n/**\n * Swap the child nodes of two elements\n *\n * @param source - Source element\n * @param target - Target element\n */\nfunction swap(source: HTMLElement, target: HTMLElement): void {\n target.append(...Array.from(source.childNodes))\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount annotation list\n *\n * This function analyzes the containing code block and checks for markers\n * referring to elements in the given annotation list. If no markers are found,\n * the list is left untouched. Otherwise, list elements are rendered as\n * annotations inside the code block.\n *\n * @param el - Annotation list element\n * @param container - Containing element\n * @param options - Options\n *\n * @returns Annotation component observable\n */\nexport function mountAnnotationList(\n el: HTMLElement, container: HTMLElement, { target$, print$ }: MountOptions\n): Observable> {\n\n /* Compute prefix for tooltip anchors */\n const parent = container.closest(\"[id]\")\n const prefix = parent?.id\n\n /* Find and replace all markers with empty annotations */\n const annotations = new Map()\n for (const marker of findAnnotationMarkers(container)) {\n const [, id] = marker.textContent!.match(/\\((\\d+)\\)/)!\n if (getOptionalElement(`li:nth-child(${id})`, el)) {\n annotations.set(id, renderAnnotation(id, prefix))\n marker.replaceWith(annotations.get(id)!)\n }\n }\n\n /* Keep list if there are no annotations to render */\n if (annotations.size === 0)\n return EMPTY\n\n /* Mount component on subscription */\n return defer(() => {\n const done$ = new Subject()\n\n /* Retrieve container pairs for swapping */\n const pairs: [HTMLElement, HTMLElement][] = []\n for (const [id, annotation] of annotations)\n pairs.push([\n getElement(\".md-typeset\", annotation),\n getElement(`li:nth-child(${id})`, el)\n ])\n\n /* Handle print mode - see https://bit.ly/3rgPdpt */\n print$\n .pipe(\n takeUntil(done$.pipe(takeLast(1)))\n )\n .subscribe(active => {\n el.hidden = !active\n\n /* Show annotations in code block or list (print) */\n for (const [inner, child] of pairs)\n if (!active)\n swap(child, inner)\n else\n swap(inner, child)\n })\n\n /* Create and return component */\n return merge(...[...annotations]\n .map(([, annotation]) => (\n mountAnnotation(annotation, container, { target$ })\n ))\n )\n .pipe(\n finalize(() => done$.complete()),\n share()\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n map,\n of,\n shareReplay,\n tap\n} from \"rxjs\"\n\nimport { watchScript } from \"~/browser\"\nimport { h } from \"~/utilities\"\n\nimport { Component } from \"../../../_\"\n\nimport themeCSS from \"./index.css\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mermaid diagram\n */\nexport interface Mermaid {}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Mermaid instance observable\n */\nlet mermaid$: Observable\n\n/**\n * Global sequence number for diagrams\n */\nlet sequence = 0\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch Mermaid script\n *\n * @returns Mermaid scripts observable\n */\nfunction fetchScripts(): Observable {\n return typeof mermaid === \"undefined\" || mermaid instanceof Element\n ? watchScript(\"https://unpkg.com/mermaid@9.1.7/dist/mermaid.min.js\")\n : of(undefined)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount Mermaid diagram\n *\n * @param el - Code block element\n *\n * @returns Mermaid diagram component observable\n */\nexport function mountMermaid(\n el: HTMLElement\n): Observable> {\n el.classList.remove(\"mermaid\") // Hack: mitigate https://bit.ly/3CiN6Du\n mermaid$ ||= fetchScripts()\n .pipe(\n tap(() => mermaid.initialize({\n startOnLoad: false,\n themeCSS,\n sequence: {\n actorFontSize: \"16px\", // Hack: mitigate https://bit.ly/3y0NEi3\n messageFontSize: \"16px\",\n noteFontSize: \"16px\"\n }\n })),\n map(() => undefined),\n shareReplay(1)\n )\n\n /* Render diagram */\n mermaid$.subscribe(() => {\n el.classList.add(\"mermaid\") // Hack: mitigate https://bit.ly/3CiN6Du\n const id = `__mermaid_${sequence++}`\n const host = h(\"div\", { class: \"mermaid\" })\n mermaid.mermaidAPI.render(id, el.textContent, (svg: string) => {\n\n /* Create a shadow root and inject diagram */\n const shadow = host.attachShadow({ mode: \"closed\" })\n shadow.innerHTML = svg\n\n /* Replace code block with diagram */\n el.replaceWith(host)\n })\n })\n\n /* Create and return component */\n return mermaid$\n .pipe(\n map(() => ({ ref: el }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n defer,\n filter,\n finalize,\n map,\n merge,\n tap\n} from \"rxjs\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Details\n */\nexport interface Details {\n action: \"open\" | \"close\" /* Details state */\n reveal?: boolean /* Details is revealed */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n target$: Observable /* Location target observable */\n print$: Observable /* Media print observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n target$: Observable /* Location target observable */\n print$: Observable /* Media print observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch details\n *\n * @param el - Details element\n * @param options - Options\n *\n * @returns Details observable\n */\nexport function watchDetails(\n el: HTMLDetailsElement, { target$, print$ }: WatchOptions\n): Observable
    {\n let open = true\n return merge(\n\n /* Open and focus details on location target */\n target$\n .pipe(\n map(target => target.closest(\"details:not([open])\")!),\n filter(details => el === details),\n map(() => ({\n action: \"open\", reveal: true\n }) as Details)\n ),\n\n /* Open details on print and close afterwards */\n print$\n .pipe(\n filter(active => active || !open),\n tap(() => open = el.open),\n map(active => ({\n action: active ? \"open\" : \"close\"\n }) as Details)\n )\n )\n}\n\n/**\n * Mount details\n *\n * This function ensures that `details` tags are opened on anchor jumps and\n * prior to printing, so the whole content of the page is visible.\n *\n * @param el - Details element\n * @param options - Options\n *\n * @returns Details component observable\n */\nexport function mountDetails(\n el: HTMLDetailsElement, options: MountOptions\n): Observable> {\n return defer(() => {\n const push$ = new Subject
    ()\n push$.subscribe(({ action, reveal }) => {\n el.toggleAttribute(\"open\", action === \"open\")\n if (reveal)\n el.scrollIntoView()\n })\n\n /* Create and return component */\n return watchDetails(el, options)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, of } from \"rxjs\"\n\nimport { renderTable } from \"~/templates\"\nimport { h } from \"~/utilities\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Data table\n */\nexport interface DataTable {}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Sentinel for replacement\n */\nconst sentinel = h(\"table\")\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount data table\n *\n * This function wraps a data table in another scrollable container, so it can\n * be smoothly scrolled on smaller screen sizes and won't break the layout.\n *\n * @param el - Data table element\n *\n * @returns Data table component observable\n */\nexport function mountDataTable(\n el: HTMLElement\n): Observable> {\n el.replaceWith(sentinel)\n sentinel.replaceWith(renderTable(el))\n\n /* Create and return component */\n return of({ ref: el })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n animationFrameScheduler,\n asyncScheduler,\n auditTime,\n combineLatest,\n defer,\n finalize,\n fromEvent,\n map,\n merge,\n skip,\n startWith,\n subscribeOn,\n takeLast,\n takeUntil,\n tap,\n withLatestFrom\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport {\n Viewport,\n getElement,\n getElementContentOffset,\n getElementContentSize,\n getElementOffset,\n getElementSize,\n getElements,\n watchElementContentOffset,\n watchElementSize\n} from \"~/browser\"\nimport { renderTabbedControl } from \"~/templates\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Content tabs\n */\nexport interface ContentTabs {\n active: HTMLLabelElement /* Active tab label */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch content tabs\n *\n * @param el - Content tabs element\n *\n * @returns Content tabs observable\n */\nexport function watchContentTabs(\n el: HTMLElement\n): Observable {\n const inputs = getElements(\":scope > input\", el)\n const initial = inputs.find(input => input.checked) || inputs[0]\n return merge(...inputs.map(input => fromEvent(input, \"change\")\n .pipe(\n map(() => getElement(`label[for=\"${input.id}\"]`))\n )\n ))\n .pipe(\n startWith(getElement(`label[for=\"${initial.id}\"]`)),\n map(active => ({ active }))\n )\n}\n\n/**\n * Mount content tabs\n *\n * This function scrolls the active tab into view. While this functionality is\n * provided by browsers as part of `scrollInfoView`, browsers will always also\n * scroll the vertical axis, which we do not want. Thus, we decided to provide\n * this functionality ourselves.\n *\n * @param el - Content tabs element\n * @param options - Options\n *\n * @returns Content tabs component observable\n */\nexport function mountContentTabs(\n el: HTMLElement, { viewport$ }: MountOptions\n): Observable> {\n\n /* Render content tab previous button for pagination */\n const prev = renderTabbedControl(\"prev\")\n el.append(prev)\n\n /* Render content tab next button for pagination */\n const next = renderTabbedControl(\"next\")\n el.append(next)\n\n /* Mount component on subscription */\n const container = getElement(\".tabbed-labels\", el)\n return defer(() => {\n const push$ = new Subject()\n const done$ = push$.pipe(takeLast(1))\n combineLatest([push$, watchElementSize(el)])\n .pipe(\n auditTime(1, animationFrameScheduler),\n takeUntil(done$)\n )\n .subscribe({\n\n /* Handle emission */\n next([{ active }, size]) {\n const offset = getElementOffset(active)\n const { width } = getElementSize(active)\n\n /* Set tab indicator offset and width */\n el.style.setProperty(\"--md-indicator-x\", `${offset.x}px`)\n el.style.setProperty(\"--md-indicator-width\", `${width}px`)\n\n /* Scroll container to active content tab */\n const content = getElementContentOffset(container)\n if (\n offset.x < content.x ||\n offset.x + width > content.x + size.width\n )\n container.scrollTo({\n left: Math.max(0, offset.x - 16),\n behavior: \"smooth\"\n })\n },\n\n /* Handle complete */\n complete() {\n el.style.removeProperty(\"--md-indicator-x\")\n el.style.removeProperty(\"--md-indicator-width\")\n }\n })\n\n /* Hide content tab buttons on borders */\n combineLatest([\n watchElementContentOffset(container),\n watchElementSize(container)\n ])\n .pipe(\n takeUntil(done$)\n )\n .subscribe(([offset, size]) => {\n const content = getElementContentSize(container)\n prev.hidden = offset.x < 16\n next.hidden = offset.x > content.width - size.width - 16\n })\n\n /* Paginate content tab container on click */\n merge(\n fromEvent(prev, \"click\").pipe(map(() => -1)),\n fromEvent(next, \"click\").pipe(map(() => +1))\n )\n .pipe(\n takeUntil(done$)\n )\n .subscribe(direction => {\n const { width } = getElementSize(container)\n container.scrollBy({\n left: width * direction,\n behavior: \"smooth\"\n })\n })\n\n /* Set up linking of content tabs, if enabled */\n if (feature(\"content.tabs.link\"))\n push$.pipe(\n skip(1),\n withLatestFrom(viewport$)\n )\n .subscribe(([{ active }, { offset }]) => {\n const tab = active.innerText.trim()\n if (active.hasAttribute(\"data-md-switching\")) {\n active.removeAttribute(\"data-md-switching\")\n\n /* Determine viewport offset of active tab */\n } else {\n const y = el.offsetTop - offset.y\n\n /* Passively activate other tabs */\n for (const set of getElements(\"[data-tabs]\"))\n for (const input of getElements(\n \":scope > input\", set\n )) {\n const label = getElement(`label[for=\"${input.id}\"]`)\n if (\n label !== active &&\n label.innerText.trim() === tab\n ) {\n label.setAttribute(\"data-md-switching\", \"\")\n input.click()\n break\n }\n }\n\n /* Bring active tab into view */\n window.scrollTo({\n top: el.offsetTop - y\n })\n\n /* Persist active tabs in local storage */\n const tabs = __md_get(\"__tabs\") || []\n __md_set(\"__tabs\", [...new Set([tab, ...tabs])])\n }\n })\n\n /* Create and return component */\n return watchContentTabs(el)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n .pipe(\n subscribeOn(asyncScheduler)\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, merge } from \"rxjs\"\n\nimport { Viewport, getElements } from \"~/browser\"\n\nimport { Component } from \"../../_\"\nimport { Annotation } from \"../annotation\"\nimport {\n CodeBlock,\n Mermaid,\n mountCodeBlock,\n mountMermaid\n} from \"../code\"\nimport {\n Details,\n mountDetails\n} from \"../details\"\nimport {\n DataTable,\n mountDataTable\n} from \"../table\"\nimport {\n ContentTabs,\n mountContentTabs\n} from \"../tabs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Content\n */\nexport type Content =\n | Annotation\n | ContentTabs\n | CodeBlock\n | Mermaid\n | DataTable\n | Details\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n target$: Observable /* Location target observable */\n print$: Observable /* Media print observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount content\n *\n * This function mounts all components that are found in the content of the\n * actual article, including code blocks, data tables and details.\n *\n * @param el - Content element\n * @param options - Options\n *\n * @returns Content component observable\n */\nexport function mountContent(\n el: HTMLElement, { viewport$, target$, print$ }: MountOptions\n): Observable> {\n return merge(\n\n /* Code blocks */\n ...getElements(\"pre:not(.mermaid) > code\", el)\n .map(child => mountCodeBlock(child, { target$, print$ })),\n\n /* Mermaid diagrams */\n ...getElements(\"pre.mermaid\", el)\n .map(child => mountMermaid(child)),\n\n /* Data tables */\n ...getElements(\"table:not([class])\", el)\n .map(child => mountDataTable(child)),\n\n /* Details */\n ...getElements(\"details\", el)\n .map(child => mountDetails(child, { target$, print$ })),\n\n /* Content tabs */\n ...getElements(\"[data-tabs]\", el)\n .map(child => mountContentTabs(child, { viewport$ }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n defer,\n delay,\n finalize,\n map,\n merge,\n of,\n switchMap,\n tap\n} from \"rxjs\"\n\nimport { getElement } from \"~/browser\"\n\nimport { Component } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Dialog\n */\nexport interface Dialog {\n message: string /* Dialog message */\n active: boolean /* Dialog is active */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n alert$: Subject /* Alert subject */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n alert$: Subject /* Alert subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch dialog\n *\n * @param _el - Dialog element\n * @param options - Options\n *\n * @returns Dialog observable\n */\nexport function watchDialog(\n _el: HTMLElement, { alert$ }: WatchOptions\n): Observable {\n return alert$\n .pipe(\n switchMap(message => merge(\n of(true),\n of(false).pipe(delay(2000))\n )\n .pipe(\n map(active => ({ message, active }))\n )\n )\n )\n}\n\n/**\n * Mount dialog\n *\n * This function reveals the dialog in the right corner when a new alert is\n * emitted through the subject that is passed as part of the options.\n *\n * @param el - Dialog element\n * @param options - Options\n *\n * @returns Dialog component observable\n */\nexport function mountDialog(\n el: HTMLElement, options: MountOptions\n): Observable> {\n const inner = getElement(\".md-typeset\", el)\n return defer(() => {\n const push$ = new Subject()\n push$.subscribe(({ message, active }) => {\n el.classList.toggle(\"md-dialog--active\", active)\n inner.textContent = message\n })\n\n /* Create and return component */\n return watchDialog(el, options)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n bufferCount,\n combineLatest,\n combineLatestWith,\n defer,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n map,\n of,\n shareReplay,\n startWith,\n switchMap,\n takeLast,\n takeUntil\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport {\n Viewport,\n watchElementSize,\n watchToggle\n} from \"~/browser\"\n\nimport { Component } from \"../../_\"\nimport { Main } from \"../../main\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Header\n */\nexport interface Header {\n height: number /* Header visible height */\n hidden: boolean /* Header is hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Compute whether the header is hidden\n *\n * If the user scrolls past a certain threshold, the header can be hidden when\n * scrolling down, and shown when scrolling up.\n *\n * @param options - Options\n *\n * @returns Toggle observable\n */\nfunction isHidden({ viewport$ }: WatchOptions): Observable {\n if (!feature(\"header.autohide\"))\n return of(false)\n\n /* Compute direction and turning point */\n const direction$ = viewport$\n .pipe(\n map(({ offset: { y } }) => y),\n bufferCount(2, 1),\n map(([a, b]) => [a < b, b] as const),\n distinctUntilKeyChanged(0)\n )\n\n /* Compute whether header should be hidden */\n const hidden$ = combineLatest([viewport$, direction$])\n .pipe(\n filter(([{ offset }, [, y]]) => Math.abs(y - offset.y) > 100),\n map(([, [direction]]) => direction),\n distinctUntilChanged()\n )\n\n /* Compute threshold for hiding */\n const search$ = watchToggle(\"search\")\n return combineLatest([viewport$, search$])\n .pipe(\n map(([{ offset }, search]) => offset.y > 400 && !search),\n distinctUntilChanged(),\n switchMap(active => active ? hidden$ : of(false)),\n startWith(false)\n )\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch header\n *\n * @param el - Header element\n * @param options - Options\n *\n * @returns Header observable\n */\nexport function watchHeader(\n el: HTMLElement, options: WatchOptions\n): Observable
    {\n return defer(() => combineLatest([\n watchElementSize(el),\n isHidden(options)\n ]))\n .pipe(\n map(([{ height }, hidden]) => ({\n height,\n hidden\n })),\n distinctUntilChanged((a, b) => (\n a.height === b.height &&\n a.hidden === b.hidden\n )),\n shareReplay(1)\n )\n}\n\n/**\n * Mount header\n *\n * This function manages the different states of the header, i.e. whether it's\n * hidden or rendered with a shadow. This depends heavily on the main area.\n *\n * @param el - Header element\n * @param options - Options\n *\n * @returns Header component observable\n */\nexport function mountHeader(\n el: HTMLElement, { header$, main$ }: MountOptions\n): Observable> {\n return defer(() => {\n const push$ = new Subject
    ()\n const done$ = push$.pipe(takeLast(1))\n push$\n .pipe(\n distinctUntilKeyChanged(\"active\"),\n combineLatestWith(header$)\n )\n .subscribe(([{ active }, { hidden }]) => {\n el.classList.toggle(\"md-header--shadow\", active && !hidden)\n el.hidden = hidden\n })\n\n /* Link to main area */\n main$.subscribe(push$)\n\n /* Create and return component */\n return header$\n .pipe(\n takeUntil(done$),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n Subject,\n defer,\n distinctUntilKeyChanged,\n finalize,\n map,\n tap\n} from \"rxjs\"\n\nimport {\n Viewport,\n getElementSize,\n getOptionalElement,\n watchViewportAt\n} from \"~/browser\"\n\nimport { Component } from \"../../_\"\nimport { Header } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Header\n */\nexport interface HeaderTitle {\n active: boolean /* Header title is active */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch header title\n *\n * @param el - Heading element\n * @param options - Options\n *\n * @returns Header title observable\n */\nexport function watchHeaderTitle(\n el: HTMLElement, { viewport$, header$ }: WatchOptions\n): Observable {\n return watchViewportAt(el, { viewport$, header$ })\n .pipe(\n map(({ offset: { y } }) => {\n const { height } = getElementSize(el)\n return {\n active: y >= height\n }\n }),\n distinctUntilKeyChanged(\"active\")\n )\n}\n\n/**\n * Mount header title\n *\n * This function swaps the header title from the site title to the title of the\n * current page when the user scrolls past the first headline.\n *\n * @param el - Header title element\n * @param options - Options\n *\n * @returns Header title component observable\n */\nexport function mountHeaderTitle(\n el: HTMLElement, options: MountOptions\n): Observable> {\n return defer(() => {\n const push$ = new Subject()\n push$.subscribe(({ active }) => {\n el.classList.toggle(\"md-header__title--active\", active)\n })\n\n /* Obtain headline, if any */\n const heading = getOptionalElement(\"article h1\")\n if (typeof heading === \"undefined\")\n return EMPTY\n\n /* Create and return component */\n return watchHeaderTitle(heading, options)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n combineLatest,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n map,\n switchMap\n} from \"rxjs\"\n\nimport {\n Viewport,\n watchElementSize\n} from \"~/browser\"\n\nimport { Header } from \"../header\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Main area\n */\nexport interface Main {\n offset: number /* Main area top offset */\n height: number /* Main area visible height */\n active: boolean /* Main area is active */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch main area\n *\n * This function returns an observable that computes the visual parameters of\n * the main area which depends on the viewport vertical offset and height, as\n * well as the height of the header element, if the header is fixed.\n *\n * @param el - Main area element\n * @param options - Options\n *\n * @returns Main area observable\n */\nexport function watchMain(\n el: HTMLElement, { viewport$, header$ }: WatchOptions\n): Observable
    {\n\n /* Compute necessary adjustment for header */\n const adjust$ = header$\n .pipe(\n map(({ height }) => height),\n distinctUntilChanged()\n )\n\n /* Compute the main area's top and bottom borders */\n const border$ = adjust$\n .pipe(\n switchMap(() => watchElementSize(el)\n .pipe(\n map(({ height }) => ({\n top: el.offsetTop,\n bottom: el.offsetTop + height\n })),\n distinctUntilKeyChanged(\"bottom\")\n )\n )\n )\n\n /* Compute the main area's offset, visible height and if we scrolled past */\n return combineLatest([adjust$, border$, viewport$])\n .pipe(\n map(([header, { top, bottom }, { offset: { y }, size: { height } }]) => {\n height = Math.max(0, height\n - Math.max(0, top - y, header)\n - Math.max(0, height + y - bottom)\n )\n return {\n offset: top - header,\n height,\n active: top - header <= y\n }\n }),\n distinctUntilChanged((a, b) => (\n a.offset === b.offset &&\n a.height === b.height &&\n a.active === b.active\n ))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n asyncScheduler,\n defer,\n finalize,\n fromEvent,\n map,\n mergeMap,\n observeOn,\n of,\n shareReplay,\n startWith,\n tap\n} from \"rxjs\"\n\nimport { getElements } from \"~/browser\"\n\nimport { Component } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Palette colors\n */\nexport interface PaletteColor {\n scheme?: string /* Color scheme */\n primary?: string /* Primary color */\n accent?: string /* Accent color */\n}\n\n/**\n * Palette\n */\nexport interface Palette {\n index: number /* Palette index */\n color: PaletteColor /* Palette colors */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch color palette\n *\n * @param inputs - Color palette element\n *\n * @returns Color palette observable\n */\nexport function watchPalette(\n inputs: HTMLInputElement[]\n): Observable {\n const current = __md_get(\"__palette\") || {\n index: inputs.findIndex(input => matchMedia(\n input.getAttribute(\"data-md-color-media\")!\n ).matches)\n }\n\n /* Emit changes in color palette */\n return of(...inputs)\n .pipe(\n mergeMap(input => fromEvent(input, \"change\")\n .pipe(\n map(() => input)\n )\n ),\n startWith(inputs[Math.max(0, current.index)]),\n map(input => ({\n index: inputs.indexOf(input),\n color: {\n scheme: input.getAttribute(\"data-md-color-scheme\"),\n primary: input.getAttribute(\"data-md-color-primary\"),\n accent: input.getAttribute(\"data-md-color-accent\")\n }\n } as Palette)),\n shareReplay(1)\n )\n}\n\n/**\n * Mount color palette\n *\n * @param el - Color palette element\n *\n * @returns Color palette component observable\n */\nexport function mountPalette(\n el: HTMLElement\n): Observable> {\n return defer(() => {\n const push$ = new Subject()\n push$.subscribe(palette => {\n document.body.setAttribute(\"data-md-color-switching\", \"\")\n\n /* Set color palette */\n for (const [key, value] of Object.entries(palette.color))\n document.body.setAttribute(`data-md-color-${key}`, value)\n\n /* Toggle visibility */\n for (let index = 0; index < inputs.length; index++) {\n const label = inputs[index].nextElementSibling\n if (label instanceof HTMLElement)\n label.hidden = palette.index !== index\n }\n\n /* Persist preference in local storage */\n __md_set(\"__palette\", palette)\n })\n\n /* Revert transition durations after color switch */\n push$.pipe(observeOn(asyncScheduler))\n .subscribe(() => {\n document.body.removeAttribute(\"data-md-color-switching\")\n })\n\n /* Create and return component */\n const inputs = getElements(\"input\", el)\n return watchPalette(inputs)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport ClipboardJS from \"clipboard\"\nimport {\n Observable,\n Subject,\n map,\n tap\n} from \"rxjs\"\n\nimport { translation } from \"~/_\"\nimport { getElement } from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n alert$: Subject /* Alert subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Extract text to copy\n *\n * @param el - HTML element\n *\n * @returns Extracted text\n */\nfunction extract(el: HTMLElement): string {\n el.setAttribute(\"data-md-copying\", \"\")\n const text = el.innerText\n el.removeAttribute(\"data-md-copying\")\n return text\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set up Clipboard.js integration\n *\n * @param options - Options\n */\nexport function setupClipboardJS(\n { alert$ }: SetupOptions\n): void {\n if (ClipboardJS.isSupported()) {\n new Observable(subscriber => {\n new ClipboardJS(\"[data-clipboard-target], [data-clipboard-text]\", {\n text: el => (\n el.getAttribute(\"data-clipboard-text\")! ||\n extract(getElement(\n el.getAttribute(\"data-clipboard-target\")!\n ))\n )\n })\n .on(\"success\", ev => subscriber.next(ev))\n })\n .pipe(\n tap(ev => {\n const trigger = ev.trigger as HTMLElement\n trigger.focus()\n }),\n map(() => translation(\"clipboard.copied\"))\n )\n .subscribe(alert$)\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n catchError,\n defaultIfEmpty,\n map,\n of,\n tap\n} from \"rxjs\"\n\nimport { configuration } from \"~/_\"\nimport { getElements, requestXML } from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Sitemap, i.e. a list of URLs\n */\nexport type Sitemap = string[]\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Preprocess a list of URLs\n *\n * This function replaces the `site_url` in the sitemap with the actual base\n * URL, to allow instant loading to work in occasions like Netlify previews.\n *\n * @param urls - URLs\n *\n * @returns URL path parts\n */\nfunction preprocess(urls: Sitemap): Sitemap {\n if (urls.length < 2)\n return [\"\"]\n\n /* Take the first two URLs and remove everything after the last slash */\n const [root, next] = [...urls]\n .sort((a, b) => a.length - b.length)\n .map(url => url.replace(/[^/]+$/, \"\"))\n\n /* Compute common prefix */\n let index = 0\n if (root === next)\n index = root.length\n else\n while (root.charCodeAt(index) === next.charCodeAt(index))\n index++\n\n /* Remove common prefix and return in original order */\n return urls.map(url => url.replace(root.slice(0, index), \"\"))\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch the sitemap for the given base URL\n *\n * @param base - Base URL\n *\n * @returns Sitemap observable\n */\nexport function fetchSitemap(base?: URL): Observable {\n const cached = __md_get(\"__sitemap\", sessionStorage, base)\n if (cached) {\n return of(cached)\n } else {\n const config = configuration()\n return requestXML(new URL(\"sitemap.xml\", base || config.base))\n .pipe(\n map(sitemap => preprocess(getElements(\"loc\", sitemap)\n .map(node => node.textContent!)\n )),\n catchError(() => EMPTY), // @todo refactor instant loading\n defaultIfEmpty([]),\n tap(sitemap => __md_set(\"__sitemap\", sitemap, sessionStorage, base))\n )\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n NEVER,\n Observable,\n Subject,\n bufferCount,\n catchError,\n concatMap,\n debounceTime,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n fromEvent,\n map,\n merge,\n of,\n sample,\n share,\n skip,\n skipUntil,\n switchMap\n} from \"rxjs\"\n\nimport { configuration, feature } from \"~/_\"\nimport {\n Viewport,\n ViewportOffset,\n getElements,\n getOptionalElement,\n request,\n setLocation,\n setLocationHash\n} from \"~/browser\"\nimport { getComponentElement } from \"~/components\"\nimport { h } from \"~/utilities\"\n\nimport { fetchSitemap } from \"../sitemap\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * History state\n */\nexport interface HistoryState {\n url: URL /* State URL */\n offset?: ViewportOffset /* State viewport offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n document$: Subject /* Document subject */\n location$: Subject /* Location subject */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set up instant loading\n *\n * When fetching, theoretically, we could use `responseType: \"document\"`, but\n * since all MkDocs links are relative, we need to make sure that the current\n * location matches the document we just loaded. Otherwise any relative links\n * in the document could use the old location.\n *\n * This is the reason why we need to synchronize history events and the process\n * of fetching the document for navigation changes (except `popstate` events):\n *\n * 1. Fetch document via `XMLHTTPRequest`\n * 2. Set new location via `history.pushState`\n * 3. Parse and emit fetched document\n *\n * For `popstate` events, we must not use `history.pushState`, or the forward\n * history will be irreversibly overwritten. In case the request fails, the\n * location change is dispatched regularly.\n *\n * @param options - Options\n */\nexport function setupInstantLoading(\n { document$, location$, viewport$ }: SetupOptions\n): void {\n const config = configuration()\n if (location.protocol === \"file:\")\n return\n\n /* Disable automatic scroll restoration */\n if (\"scrollRestoration\" in history) {\n history.scrollRestoration = \"manual\"\n\n /* Hack: ensure that reloads restore viewport offset */\n fromEvent(window, \"beforeunload\")\n .subscribe(() => {\n history.scrollRestoration = \"auto\"\n })\n }\n\n /* Hack: ensure absolute favicon link to omit 404s when switching */\n const favicon = getOptionalElement(\"link[rel=icon]\")\n if (typeof favicon !== \"undefined\")\n favicon.href = favicon.href\n\n /* Intercept internal navigation */\n const push$ = fetchSitemap()\n .pipe(\n map(paths => paths.map(path => `${new URL(path, config.base)}`)),\n switchMap(urls => fromEvent(document.body, \"click\")\n .pipe(\n filter(ev => !ev.metaKey && !ev.ctrlKey),\n switchMap(ev => {\n if (ev.target instanceof Element) {\n const el = ev.target.closest(\"a\")\n if (el && !el.target) {\n const url = new URL(el.href)\n\n /* Canonicalize URL */\n url.search = \"\"\n url.hash = \"\"\n\n /* Check if URL should be intercepted */\n if (\n url.pathname !== location.pathname &&\n urls.includes(url.toString())\n ) {\n ev.preventDefault()\n return of({\n url: new URL(el.href)\n })\n }\n }\n }\n return NEVER\n })\n )\n ),\n share()\n )\n\n /* Intercept history back and forward */\n const pop$ = fromEvent(window, \"popstate\")\n .pipe(\n filter(ev => ev.state !== null),\n map(ev => ({\n url: new URL(location.href),\n offset: ev.state\n })),\n share()\n )\n\n /* Emit location change */\n merge(push$, pop$)\n .pipe(\n distinctUntilChanged((a, b) => a.url.href === b.url.href),\n map(({ url }) => url)\n )\n .subscribe(location$)\n\n /* Fetch document via `XMLHTTPRequest` */\n const response$ = location$\n .pipe(\n distinctUntilKeyChanged(\"pathname\"),\n switchMap(url => request(url.href)\n .pipe(\n catchError(() => {\n setLocation(url)\n return NEVER\n })\n )\n ),\n share()\n )\n\n /* Set new location via `history.pushState` */\n push$\n .pipe(\n sample(response$)\n )\n .subscribe(({ url }) => {\n history.pushState({}, \"\", `${url}`)\n })\n\n /* Parse and emit fetched document */\n const dom = new DOMParser()\n response$\n .pipe(\n switchMap(res => res.text()),\n map(res => dom.parseFromString(res, \"text/html\"))\n )\n .subscribe(document$)\n\n /* Replace meta tags and components */\n document$\n .pipe(\n skip(1)\n )\n .subscribe(replacement => {\n for (const selector of [\n\n /* Meta tags */\n \"title\",\n \"link[rel=canonical]\",\n \"meta[name=author]\",\n \"meta[name=description]\",\n\n /* Components */\n \"[data-md-component=announce]\",\n \"[data-md-component=container]\",\n \"[data-md-component=header-topic]\",\n \"[data-md-component=outdated]\",\n \"[data-md-component=logo]\",\n \"[data-md-component=skip]\",\n ...feature(\"navigation.tabs.sticky\")\n ? [\"[data-md-component=tabs]\"]\n : []\n ]) {\n const source = getOptionalElement(selector)\n const target = getOptionalElement(selector, replacement)\n if (\n typeof source !== \"undefined\" &&\n typeof target !== \"undefined\"\n ) {\n source.replaceWith(target)\n }\n }\n })\n\n /* Re-evaluate scripts */\n document$\n .pipe(\n skip(1),\n map(() => getComponentElement(\"container\")),\n switchMap(el => getElements(\"script\", el)),\n concatMap(el => {\n const script = h(\"script\")\n if (el.src) {\n for (const name of el.getAttributeNames())\n script.setAttribute(name, el.getAttribute(name)!)\n el.replaceWith(script)\n\n /* Complete when script is loaded */\n return new Observable(observer => {\n script.onload = () => observer.complete()\n })\n\n /* Complete immediately */\n } else {\n script.textContent = el.textContent\n el.replaceWith(script)\n return EMPTY\n }\n })\n )\n .subscribe()\n\n /* Emit history state change */\n merge(push$, pop$)\n .pipe(\n sample(document$)\n )\n .subscribe(({ url, offset }) => {\n if (url.hash && !offset) {\n setLocationHash(url.hash)\n } else {\n window.scrollTo(0, offset?.y || 0)\n }\n })\n\n /* Debounce update of viewport offset */\n viewport$\n .pipe(\n skipUntil(push$),\n debounceTime(250),\n distinctUntilKeyChanged(\"offset\")\n )\n .subscribe(({ offset }) => {\n history.replaceState(offset, \"\")\n })\n\n /* Set viewport offset from history */\n merge(push$, pop$)\n .pipe(\n bufferCount(2, 1),\n filter(([a, b]) => a.url.pathname === b.url.pathname),\n map(([, state]) => state)\n )\n .subscribe(({ offset }) => {\n window.scrollTo(0, offset?.y || 0)\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport escapeHTML from \"escape-html\"\n\nimport { SearchIndexDocument } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search document\n */\nexport interface SearchDocument extends SearchIndexDocument {\n parent?: SearchIndexDocument /* Parent article */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search document mapping\n */\nexport type SearchDocumentMap = Map\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create a search document mapping\n *\n * @param docs - Search index documents\n *\n * @returns Search document map\n */\nexport function setupSearchDocumentMap(\n docs: SearchIndexDocument[]\n): SearchDocumentMap {\n const documents = new Map()\n const parents = new Set()\n for (const doc of docs) {\n const [path, hash] = doc.location.split(\"#\")\n\n /* Extract location, title and tags */\n const location = doc.location\n const title = doc.title\n const tags = doc.tags\n\n /* Escape and cleanup text */\n const text = escapeHTML(doc.text)\n .replace(/\\s+(?=[,.:;!?])/g, \"\")\n .replace(/\\s+/g, \" \")\n\n /* Handle section */\n if (hash) {\n const parent = documents.get(path)!\n\n /* Ignore first section, override article */\n if (!parents.has(parent)) {\n parent.title = doc.title\n parent.text = text\n\n /* Remember that we processed the article */\n parents.add(parent)\n\n /* Add subsequent section */\n } else {\n documents.set(location, {\n location,\n title,\n text,\n parent\n })\n }\n\n /* Add article */\n } else {\n documents.set(location, {\n location,\n title,\n text,\n ...tags && { tags }\n })\n }\n }\n return documents\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport escapeHTML from \"escape-html\"\n\nimport { SearchIndexConfig } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search highlight function\n *\n * @param value - Value\n *\n * @returns Highlighted value\n */\nexport type SearchHighlightFn = (value: string) => string\n\n/**\n * Search highlight factory function\n *\n * @param query - Query value\n *\n * @returns Search highlight function\n */\nexport type SearchHighlightFactoryFn = (query: string) => SearchHighlightFn\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create a search highlighter\n *\n * @param config - Search index configuration\n * @param escape - Whether to escape HTML\n *\n * @returns Search highlight factory function\n */\nexport function setupSearchHighlighter(\n config: SearchIndexConfig, escape: boolean\n): SearchHighlightFactoryFn {\n const separator = new RegExp(config.separator, \"img\")\n const highlight = (_: unknown, data: string, term: string) => {\n return `${data}${term}`\n }\n\n /* Return factory function */\n return (query: string) => {\n query = query\n .replace(/[\\s*+\\-:~^]+/g, \" \")\n .trim()\n\n /* Create search term match expression */\n const match = new RegExp(`(^|${config.separator})(${\n query\n .replace(/[|\\\\{}()[\\]^$+*?.-]/g, \"\\\\$&\")\n .replace(separator, \"|\")\n })`, \"img\")\n\n /* Highlight string value */\n return value => (\n escape\n ? escapeHTML(value)\n : value\n )\n .replace(match, highlight)\n .replace(/<\\/mark>(\\s+)]*>/img, \"$1\")\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search transformation function\n *\n * @param value - Query value\n *\n * @returns Transformed query value\n */\nexport type SearchTransformFn = (value: string) => string\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Default transformation function\n *\n * 1. Search for terms in quotation marks and prepend a `+` modifier to denote\n * that the resulting document must contain all terms, converting the query\n * to an `AND` query (as opposed to the default `OR` behavior). While users\n * may expect terms enclosed in quotation marks to map to span queries, i.e.\n * for which order is important, Lunr.js doesn't support them, so the best\n * we can do is to convert the terms to an `AND` query.\n *\n * 2. Replace control characters which are not located at the beginning of the\n * query or preceded by white space, or are not followed by a non-whitespace\n * character or are at the end of the query string. Furthermore, filter\n * unmatched quotation marks.\n *\n * 3. Trim excess whitespace from left and right.\n *\n * @param query - Query value\n *\n * @returns Transformed query value\n */\nexport function defaultTransform(query: string): string {\n return query\n .split(/\"([^\"]+)\"/g) /* => 1 */\n .map((terms, index) => index & 1\n ? terms.replace(/^\\b|^(?![^\\x00-\\x7F]|$)|\\s+/g, \" +\")\n : terms\n )\n .join(\"\")\n .replace(/\"|(?:^|\\s+)[*+\\-:^~]+(?=\\s+|$)/g, \"\") /* => 2 */\n .trim() /* => 3 */\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchIndex, SearchResult } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search message type\n */\nexport const enum SearchMessageType {\n SETUP, /* Search index setup */\n READY, /* Search index ready */\n QUERY, /* Search query */\n RESULT /* Search results */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Message containing the data necessary to setup the search index\n */\nexport interface SearchSetupMessage {\n type: SearchMessageType.SETUP /* Message type */\n data: SearchIndex /* Message data */\n}\n\n/**\n * Message indicating the search index is ready\n */\nexport interface SearchReadyMessage {\n type: SearchMessageType.READY /* Message type */\n}\n\n/**\n * Message containing a search query\n */\nexport interface SearchQueryMessage {\n type: SearchMessageType.QUERY /* Message type */\n data: string /* Message data */\n}\n\n/**\n * Message containing results for a search query\n */\nexport interface SearchResultMessage {\n type: SearchMessageType.RESULT /* Message type */\n data: SearchResult /* Message data */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Message exchanged with the search worker\n */\nexport type SearchMessage =\n | SearchSetupMessage\n | SearchReadyMessage\n | SearchQueryMessage\n | SearchResultMessage\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Type guard for search setup messages\n *\n * @param message - Search worker message\n *\n * @returns Test result\n */\nexport function isSearchSetupMessage(\n message: SearchMessage\n): message is SearchSetupMessage {\n return message.type === SearchMessageType.SETUP\n}\n\n/**\n * Type guard for search ready messages\n *\n * @param message - Search worker message\n *\n * @returns Test result\n */\nexport function isSearchReadyMessage(\n message: SearchMessage\n): message is SearchReadyMessage {\n return message.type === SearchMessageType.READY\n}\n\n/**\n * Type guard for search query messages\n *\n * @param message - Search worker message\n *\n * @returns Test result\n */\nexport function isSearchQueryMessage(\n message: SearchMessage\n): message is SearchQueryMessage {\n return message.type === SearchMessageType.QUERY\n}\n\n/**\n * Type guard for search result messages\n *\n * @param message - Search worker message\n *\n * @returns Test result\n */\nexport function isSearchResultMessage(\n message: SearchMessage\n): message is SearchResultMessage {\n return message.type === SearchMessageType.RESULT\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n ObservableInput,\n Subject,\n from,\n map,\n share\n} from \"rxjs\"\n\nimport { configuration, feature, translation } from \"~/_\"\nimport { WorkerHandler, watchWorker } from \"~/browser\"\n\nimport { SearchIndex } from \"../../_\"\nimport {\n SearchOptions,\n SearchPipeline\n} from \"../../options\"\nimport {\n SearchMessage,\n SearchMessageType,\n SearchSetupMessage,\n isSearchResultMessage\n} from \"../message\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search worker\n */\nexport type SearchWorker = WorkerHandler\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set up search index\n *\n * @param data - Search index\n *\n * @returns Search index\n */\nfunction setupSearchIndex({ config, docs }: SearchIndex): SearchIndex {\n\n /* Override default language with value from translation */\n if (config.lang.length === 1 && config.lang[0] === \"en\")\n config.lang = [\n translation(\"search.config.lang\")\n ]\n\n /* Override default separator with value from translation */\n if (config.separator === \"[\\\\s\\\\-]+\")\n config.separator = translation(\"search.config.separator\")\n\n /* Set pipeline from translation */\n const pipeline = translation(\"search.config.pipeline\")\n .split(/\\s*,\\s*/)\n .filter(Boolean) as SearchPipeline\n\n /* Determine search options */\n const options: SearchOptions = {\n pipeline,\n suggestions: feature(\"search.suggest\")\n }\n\n /* Return search index after defaulting */\n return { config, docs, options }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set up search worker\n *\n * This function creates a web worker to set up and query the search index,\n * which is done using Lunr.js. The index must be passed as an observable to\n * enable hacks like _localsearch_ via search index embedding as JSON.\n *\n * @param url - Worker URL\n * @param index - Search index observable input\n *\n * @returns Search worker\n */\nexport function setupSearchWorker(\n url: string, index: ObservableInput\n): SearchWorker {\n const config = configuration()\n const worker = new Worker(url)\n\n /* Create communication channels and resolve relative links */\n const tx$ = new Subject()\n const rx$ = watchWorker(worker, { tx$ })\n .pipe(\n map(message => {\n if (isSearchResultMessage(message)) {\n for (const result of message.data.items)\n for (const document of result)\n document.location = `${new URL(document.location, config.base)}`\n }\n return message\n }),\n share()\n )\n\n /* Set up search index */\n from(index)\n .pipe(\n map(data => ({\n type: SearchMessageType.SETUP,\n data: setupSearchIndex(data)\n } as SearchSetupMessage))\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Return search worker */\n return { tx$, rx$ }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Subject,\n catchError,\n combineLatest,\n filter,\n fromEvent,\n map,\n of,\n switchMap,\n withLatestFrom\n} from \"rxjs\"\n\nimport { configuration } from \"~/_\"\nimport {\n getElement,\n getLocation,\n requestJSON,\n setLocation\n} from \"~/browser\"\nimport { getComponentElements } from \"~/components\"\nimport {\n Version,\n renderVersionSelector\n} from \"~/templates\"\n\nimport { fetchSitemap } from \"../sitemap\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n document$: Subject /* Document subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set up version selector\n *\n * @param options - Options\n */\nexport function setupVersionSelector(\n { document$ }: SetupOptions\n): void {\n const config = configuration()\n const versions$ = requestJSON(\n new URL(\"../versions.json\", config.base)\n )\n .pipe(\n catchError(() => EMPTY) // @todo refactor instant loading\n )\n\n /* Determine current version */\n const current$ = versions$\n .pipe(\n map(versions => {\n const [, current] = config.base.match(/([^/]+)\\/?$/)!\n return versions.find(({ version, aliases }) => (\n version === current || aliases.includes(current)\n )) || versions[0]\n })\n )\n\n /* Intercept inter-version navigation */\n versions$\n .pipe(\n map(versions => new Map(versions.map(version => [\n `${new URL(`../${version.version}/`, config.base)}`,\n version\n ]))),\n switchMap(urls => fromEvent(document.body, \"click\")\n .pipe(\n filter(ev => !ev.metaKey && !ev.ctrlKey),\n withLatestFrom(current$),\n switchMap(([ev, current]) => {\n if (ev.target instanceof Element) {\n const el = ev.target.closest(\"a\")\n if (el && !el.target && urls.has(el.href)) {\n const url = el.href\n // This is a temporary hack to detect if a version inside the\n // version selector or on another part of the site was clicked.\n // If we're inside the version selector, we definitely want to\n // find the same page, as we might have different deployments\n // due to aliases. However, if we're outside the version\n // selector, we must abort here, because we might otherwise\n // interfere with instant loading. We need to refactor this\n // at some point together with instant loading.\n //\n // See https://github.com/squidfunk/mkdocs-material/issues/4012\n if (!ev.target.closest(\".md-version\")) {\n const version = urls.get(url)!\n if (version === current)\n return EMPTY\n }\n ev.preventDefault()\n return of(url)\n }\n }\n return EMPTY\n }),\n switchMap(url => {\n const { version } = urls.get(url)!\n return fetchSitemap(new URL(url))\n .pipe(\n map(sitemap => {\n const location = getLocation()\n const path = location.href.replace(config.base, \"\")\n return sitemap.includes(path.split(\"#\")[0])\n ? new URL(`../${version}/${path}`, config.base)\n : new URL(url)\n })\n )\n })\n )\n )\n )\n .subscribe(url => setLocation(url))\n\n /* Render version selector and warning */\n combineLatest([versions$, current$])\n .subscribe(([versions, current]) => {\n const topic = getElement(\".md-header__topic\")\n topic.appendChild(renderVersionSelector(versions, current))\n })\n\n /* Integrate outdated version banner with instant loading */\n document$.pipe(switchMap(() => current$))\n .subscribe(current => {\n\n /* Check if version state was already determined */\n let outdated = __md_get(\"__outdated\", sessionStorage)\n if (outdated === null) {\n const latest = config.version?.default || \"latest\"\n outdated = !current.aliases.includes(latest)\n\n /* Persist version state in session storage */\n __md_set(\"__outdated\", outdated, sessionStorage)\n }\n\n /* Unhide outdated version banner */\n if (outdated)\n for (const warning of getComponentElements(\"outdated\"))\n warning.hidden = false\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n combineLatest,\n delay,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n finalize,\n fromEvent,\n map,\n merge,\n share,\n shareReplay,\n startWith,\n take,\n takeLast,\n takeUntil,\n tap\n} from \"rxjs\"\n\nimport { translation } from \"~/_\"\nimport {\n getLocation,\n setToggle,\n watchElementFocus,\n watchToggle\n} from \"~/browser\"\nimport {\n SearchMessageType,\n SearchQueryMessage,\n SearchWorker,\n defaultTransform,\n isSearchReadyMessage\n} from \"~/integrations\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search query\n */\nexport interface SearchQuery {\n value: string /* Query value */\n focus: boolean /* Query focus */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch search query\n *\n * Note that the focus event which triggers re-reading the current query value\n * is delayed by `1ms` so the input's empty state is allowed to propagate.\n *\n * @param el - Search query element\n * @param worker - Search worker\n *\n * @returns Search query observable\n */\nexport function watchSearchQuery(\n el: HTMLInputElement, { rx$ }: SearchWorker\n): Observable {\n const fn = __search?.transform || defaultTransform\n\n /* Immediately show search dialog */\n const { searchParams } = getLocation()\n if (searchParams.has(\"q\"))\n setToggle(\"search\", true)\n\n /* Intercept query parameter (deep link) */\n const param$ = rx$\n .pipe(\n filter(isSearchReadyMessage),\n take(1),\n map(() => searchParams.get(\"q\") || \"\")\n )\n\n /* Remove query parameter when search is closed */\n watchToggle(\"search\")\n .pipe(\n filter(active => !active),\n take(1)\n )\n .subscribe(() => {\n const url = new URL(location.href)\n url.searchParams.delete(\"q\")\n history.replaceState({}, \"\", `${url}`)\n })\n\n /* Set query from parameter */\n param$.subscribe(value => { // TODO: not ideal - find a better way\n if (value) {\n el.value = value\n el.focus()\n }\n })\n\n /* Intercept focus and input events */\n const focus$ = watchElementFocus(el)\n const value$ = merge(\n fromEvent(el, \"keyup\"),\n fromEvent(el, \"focus\").pipe(delay(1)),\n param$\n )\n .pipe(\n map(() => fn(el.value)),\n startWith(\"\"),\n distinctUntilChanged(),\n )\n\n /* Combine into single observable */\n return combineLatest([value$, focus$])\n .pipe(\n map(([value, focus]) => ({ value, focus })),\n shareReplay(1)\n )\n}\n\n/**\n * Mount search query\n *\n * @param el - Search query element\n * @param worker - Search worker\n *\n * @returns Search query component observable\n */\nexport function mountSearchQuery(\n el: HTMLInputElement, { tx$, rx$ }: SearchWorker\n): Observable> {\n const push$ = new Subject()\n const done$ = push$.pipe(takeLast(1))\n\n /* Handle value changes */\n push$\n .pipe(\n distinctUntilKeyChanged(\"value\"),\n map(({ value }): SearchQueryMessage => ({\n type: SearchMessageType.QUERY,\n data: value\n }))\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Handle focus changes */\n push$\n .pipe(\n distinctUntilKeyChanged(\"focus\")\n )\n .subscribe(({ focus }) => {\n if (focus) {\n setToggle(\"search\", focus)\n el.placeholder = \"\"\n } else {\n el.placeholder = translation(\"search.placeholder\")\n }\n })\n\n /* Handle reset */\n fromEvent(el.form!, \"reset\")\n .pipe(\n takeUntil(done$)\n )\n .subscribe(() => el.focus())\n\n /* Create and return component */\n return watchSearchQuery(el, { tx$, rx$ })\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state })),\n share()\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n bufferCount,\n filter,\n finalize,\n map,\n merge,\n of,\n skipUntil,\n switchMap,\n take,\n tap,\n withLatestFrom,\n zipWith\n} from \"rxjs\"\n\nimport { translation } from \"~/_\"\nimport {\n getElement,\n watchElementBoundary\n} from \"~/browser\"\nimport {\n SearchResult,\n SearchWorker,\n isSearchReadyMessage,\n isSearchResultMessage\n} from \"~/integrations\"\nimport { renderSearchResultItem } from \"~/templates\"\nimport { round } from \"~/utilities\"\n\nimport { Component } from \"../../_\"\nimport { SearchQuery } from \"../query\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n query$: Observable /* Search query observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search result list\n *\n * This function performs a lazy rendering of the search results, depending on\n * the vertical offset of the search result container.\n *\n * @param el - Search result list element\n * @param worker - Search worker\n * @param options - Options\n *\n * @returns Search result list component observable\n */\nexport function mountSearchResult(\n el: HTMLElement, { rx$ }: SearchWorker, { query$ }: MountOptions\n): Observable> {\n const push$ = new Subject()\n const boundary$ = watchElementBoundary(el.parentElement!)\n .pipe(\n filter(Boolean)\n )\n\n /* Retrieve nested components */\n const meta = getElement(\":scope > :first-child\", el)\n const list = getElement(\":scope > :last-child\", el)\n\n /* Wait until search is ready */\n const ready$ = rx$\n .pipe(\n filter(isSearchReadyMessage),\n take(1)\n )\n\n /* Update search result metadata */\n push$\n .pipe(\n withLatestFrom(query$),\n skipUntil(ready$)\n )\n .subscribe(([{ items }, { value }]) => {\n if (value) {\n switch (items.length) {\n\n /* No results */\n case 0:\n meta.textContent = translation(\"search.result.none\")\n break\n\n /* One result */\n case 1:\n meta.textContent = translation(\"search.result.one\")\n break\n\n /* Multiple result */\n default:\n meta.textContent = translation(\n \"search.result.other\",\n round(items.length)\n )\n }\n } else {\n meta.textContent = translation(\"search.result.placeholder\")\n }\n })\n\n /* Update search result list */\n push$\n .pipe(\n tap(() => list.innerHTML = \"\"),\n switchMap(({ items }) => merge(\n of(...items.slice(0, 10)),\n of(...items.slice(10))\n .pipe(\n bufferCount(4),\n zipWith(boundary$),\n switchMap(([chunk]) => chunk)\n )\n ))\n )\n .subscribe(result => list.appendChild(\n renderSearchResultItem(result)\n ))\n\n /* Filter search result message */\n const result$ = rx$\n .pipe(\n filter(isSearchResultMessage),\n map(({ data }) => data)\n )\n\n /* Create and return component */\n return result$\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n finalize,\n fromEvent,\n map,\n tap\n} from \"rxjs\"\n\nimport { getLocation } from \"~/browser\"\n\nimport { Component } from \"../../_\"\nimport { SearchQuery } from \"../query\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search sharing\n */\nexport interface SearchShare {\n url: URL /* Deep link for sharing */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n query$: Observable /* Search query observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n query$: Observable /* Search query observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search sharing\n *\n * @param _el - Search sharing element\n * @param options - Options\n *\n * @returns Search sharing observable\n */\nexport function watchSearchShare(\n _el: HTMLElement, { query$ }: WatchOptions\n): Observable {\n return query$\n .pipe(\n map(({ value }) => {\n const url = getLocation()\n url.hash = \"\"\n url.searchParams.delete(\"h\")\n url.searchParams.set(\"q\", value)\n return { url }\n })\n )\n}\n\n/**\n * Mount search sharing\n *\n * @param el - Search sharing element\n * @param options - Options\n *\n * @returns Search sharing component observable\n */\nexport function mountSearchShare(\n el: HTMLAnchorElement, options: MountOptions\n): Observable> {\n const push$ = new Subject()\n push$.subscribe(({ url }) => {\n el.setAttribute(\"data-clipboard-text\", el.href)\n el.href = `${url}`\n })\n\n /* Prevent following of link */\n fromEvent(el, \"click\")\n .subscribe(ev => ev.preventDefault())\n\n /* Create and return component */\n return watchSearchShare(el, options)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n asyncScheduler,\n combineLatestWith,\n distinctUntilChanged,\n filter,\n finalize,\n fromEvent,\n map,\n merge,\n observeOn,\n tap\n} from \"rxjs\"\n\nimport { Keyboard } from \"~/browser\"\nimport {\n SearchResult,\n SearchWorker,\n isSearchResultMessage\n} from \"~/integrations\"\n\nimport { Component, getComponentElement } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search suggestions\n */\nexport interface SearchSuggest {}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n keyboard$: Observable /* Keyboard observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search suggestions\n *\n * This function will perform a lazy rendering of the search results, depending\n * on the vertical offset of the search result container.\n *\n * @param el - Search result list element\n * @param worker - Search worker\n * @param options - Options\n *\n * @returns Search result list component observable\n */\nexport function mountSearchSuggest(\n el: HTMLElement, { rx$ }: SearchWorker, { keyboard$ }: MountOptions\n): Observable> {\n const push$ = new Subject()\n\n /* Retrieve query component and track all changes */\n const query = getComponentElement(\"search-query\")\n const query$ = merge(\n fromEvent(query, \"keydown\"),\n fromEvent(query, \"focus\")\n )\n .pipe(\n observeOn(asyncScheduler),\n map(() => query.value),\n distinctUntilChanged(),\n )\n\n /* Update search suggestions */\n push$\n .pipe(\n combineLatestWith(query$),\n map(([{ suggestions }, value]) => {\n const words = value.split(/([\\s-]+)/)\n if (suggestions?.length && words[words.length - 1]) {\n const last = suggestions[suggestions.length - 1]\n if (last.startsWith(words[words.length - 1]))\n words[words.length - 1] = last\n } else {\n words.length = 0\n }\n return words\n })\n )\n .subscribe(words => el.innerHTML = words\n .join(\"\")\n .replace(/\\s/g, \" \")\n )\n\n /* Set up search keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => mode === \"search\")\n )\n .subscribe(key => {\n switch (key.type) {\n\n /* Right arrow: accept current suggestion */\n case \"ArrowRight\":\n if (\n el.innerText.length &&\n query.selectionStart === query.value.length\n )\n query.value = el.innerText\n break\n }\n })\n\n /* Filter search result message */\n const result$ = rx$\n .pipe(\n filter(isSearchResultMessage),\n map(({ data }) => data)\n )\n\n /* Create and return component */\n return result$\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(() => ({ ref: el }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n NEVER,\n Observable,\n ObservableInput,\n filter,\n merge,\n mergeWith,\n sample,\n take\n} from \"rxjs\"\n\nimport { configuration } from \"~/_\"\nimport {\n Keyboard,\n getActiveElement,\n getElements,\n setToggle\n} from \"~/browser\"\nimport {\n SearchIndex,\n SearchResult,\n isSearchQueryMessage,\n isSearchReadyMessage,\n setupSearchWorker\n} from \"~/integrations\"\n\nimport {\n Component,\n getComponentElement,\n getComponentElements\n} from \"../../_\"\nimport {\n SearchQuery,\n mountSearchQuery\n} from \"../query\"\nimport { mountSearchResult } from \"../result\"\nimport {\n SearchShare,\n mountSearchShare\n} from \"../share\"\nimport {\n SearchSuggest,\n mountSearchSuggest\n} from \"../suggest\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search\n */\nexport type Search =\n | SearchQuery\n | SearchResult\n | SearchShare\n | SearchSuggest\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n index$: ObservableInput /* Search index observable */\n keyboard$: Observable /* Keyboard observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search\n *\n * This function sets up the search functionality, including the underlying\n * web worker and all keyboard bindings.\n *\n * @param el - Search element\n * @param options - Options\n *\n * @returns Search component observable\n */\nexport function mountSearch(\n el: HTMLElement, { index$, keyboard$ }: MountOptions\n): Observable> {\n const config = configuration()\n try {\n const url = __search?.worker || config.search\n const worker = setupSearchWorker(url, index$)\n\n /* Retrieve query and result components */\n const query = getComponentElement(\"search-query\", el)\n const result = getComponentElement(\"search-result\", el)\n\n /* Re-emit query when search is ready */\n const { tx$, rx$ } = worker\n tx$\n .pipe(\n filter(isSearchQueryMessage),\n sample(rx$.pipe(filter(isSearchReadyMessage))),\n take(1)\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Set up search keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => mode === \"search\")\n )\n .subscribe(key => {\n const active = getActiveElement()\n switch (key.type) {\n\n /* Enter: go to first (best) result */\n case \"Enter\":\n if (active === query) {\n const anchors = new Map()\n for (const anchor of getElements(\n \":first-child [href]\", result\n )) {\n const article = anchor.firstElementChild!\n anchors.set(anchor, parseFloat(\n article.getAttribute(\"data-md-score\")!\n ))\n }\n\n /* Go to result with highest score, if any */\n if (anchors.size) {\n const [[best]] = [...anchors].sort(([, a], [, b]) => b - a)\n best.click()\n }\n\n /* Otherwise omit form submission */\n key.claim()\n }\n break\n\n /* Escape or Tab: close search */\n case \"Escape\":\n case \"Tab\":\n setToggle(\"search\", false)\n query.blur()\n break\n\n /* Vertical arrows: select previous or next search result */\n case \"ArrowUp\":\n case \"ArrowDown\":\n if (typeof active === \"undefined\") {\n query.focus()\n } else {\n const els = [query, ...getElements(\n \":not(details) > [href], summary, details[open] [href]\",\n result\n )]\n const i = Math.max(0, (\n Math.max(0, els.indexOf(active)) + els.length + (\n key.type === \"ArrowUp\" ? -1 : +1\n )\n ) % els.length)\n els[i].focus()\n }\n\n /* Prevent scrolling of page */\n key.claim()\n break\n\n /* All other keys: hand to search query */\n default:\n if (query !== getActiveElement())\n query.focus()\n }\n })\n\n /* Set up global keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => mode === \"global\"),\n )\n .subscribe(key => {\n switch (key.type) {\n\n /* Open search and select query */\n case \"f\":\n case \"s\":\n case \"/\":\n query.focus()\n query.select()\n\n /* Prevent scrolling of page */\n key.claim()\n break\n }\n })\n\n /* Create and return component */\n const query$ = mountSearchQuery(query, worker)\n const result$ = mountSearchResult(result, worker, { query$ })\n return merge(query$, result$)\n .pipe(\n mergeWith(\n\n /* Search sharing */\n ...getComponentElements(\"search-share\", el)\n .map(child => mountSearchShare(child, { query$ })),\n\n /* Search suggestions */\n ...getComponentElements(\"search-suggest\", el)\n .map(child => mountSearchSuggest(child, worker, { keyboard$ }))\n )\n )\n\n /* Gracefully handle broken search */\n } catch (err) {\n el.hidden = true\n return NEVER\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n ObservableInput,\n combineLatest,\n filter,\n map,\n startWith\n} from \"rxjs\"\n\nimport { getLocation } from \"~/browser\"\nimport {\n SearchIndex,\n setupSearchHighlighter\n} from \"~/integrations\"\nimport { h } from \"~/utilities\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search highlighting\n */\nexport interface SearchHighlight {\n nodes: Map /* Map of replacements */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n index$: ObservableInput /* Search index observable */\n location$: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search highlighting\n *\n * @param el - Content element\n * @param options - Options\n *\n * @returns Search highlighting component observable\n */\nexport function mountSearchHiglight(\n el: HTMLElement, { index$, location$ }: MountOptions\n): Observable> {\n return combineLatest([\n index$,\n location$\n .pipe(\n startWith(getLocation()),\n filter(url => !!url.searchParams.get(\"h\"))\n )\n ])\n .pipe(\n map(([index, url]) => setupSearchHighlighter(index.config, true)(\n url.searchParams.get(\"h\")!\n )),\n map(fn => {\n const nodes = new Map()\n\n /* Traverse text nodes and collect matches */\n const it = document.createNodeIterator(el, NodeFilter.SHOW_TEXT)\n for (let node = it.nextNode(); node; node = it.nextNode()) {\n if (node.parentElement?.offsetHeight) {\n const original = node.textContent!\n const replaced = fn(original)\n if (replaced.length > original.length)\n nodes.set(node as ChildNode, replaced)\n }\n }\n\n /* Replace original nodes with matches */\n for (const [node, text] of nodes) {\n const { childNodes } = h(\"span\", null, text)\n node.replaceWith(...Array.from(childNodes))\n }\n\n /* Return component */\n return { ref: el, nodes }\n })\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n animationFrameScheduler,\n auditTime,\n combineLatest,\n defer,\n distinctUntilChanged,\n finalize,\n map,\n observeOn,\n take,\n tap,\n withLatestFrom\n} from \"rxjs\"\n\nimport {\n Viewport,\n getElement,\n getElementContainer,\n getElementOffset,\n getElementSize,\n getElements\n} from \"~/browser\"\n\nimport { Component } from \"../_\"\nimport { Header } from \"../header\"\nimport { Main } from \"../main\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Sidebar\n */\nexport interface Sidebar {\n height: number /* Sidebar height */\n locked: boolean /* Sidebar is locked */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n main$: Observable
    /* Main area observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch sidebar\n *\n * This function returns an observable that computes the visual parameters of\n * the sidebar which depends on the vertical viewport offset, as well as the\n * height of the main area. When the page is scrolled beyond the header, the\n * sidebar is locked and fills the remaining space.\n *\n * @param el - Sidebar element\n * @param options - Options\n *\n * @returns Sidebar observable\n */\nexport function watchSidebar(\n el: HTMLElement, { viewport$, main$ }: WatchOptions\n): Observable {\n const parent = el.parentElement!\n const adjust =\n parent.offsetTop -\n parent.parentElement!.offsetTop\n\n /* Compute the sidebar's available height and if it should be locked */\n return combineLatest([main$, viewport$])\n .pipe(\n map(([{ offset, height }, { offset: { y } }]) => {\n height = height\n + Math.min(adjust, Math.max(0, y - offset))\n - adjust\n return {\n height,\n locked: y >= offset + adjust\n }\n }),\n distinctUntilChanged((a, b) => (\n a.height === b.height &&\n a.locked === b.locked\n ))\n )\n}\n\n/**\n * Mount sidebar\n *\n * This function doesn't set the height of the actual sidebar, but of its first\n * child \u2013 the `.md-sidebar__scrollwrap` element in order to mitigiate jittery\n * sidebars when the footer is scrolled into view. At some point we switched\n * from `absolute` / `fixed` positioning to `sticky` positioning, significantly\n * reducing jitter in some browsers (respectively Firefox and Safari) when\n * scrolling from the top. However, top-aligned sticky positioning means that\n * the sidebar snaps to the bottom when the end of the container is reached.\n * This is what leads to the mentioned jitter, as the sidebar's height may be\n * updated too slowly.\n *\n * This behaviour can be mitigiated by setting the height of the sidebar to `0`\n * while preserving the padding, and the height on its first element.\n *\n * @param el - Sidebar element\n * @param options - Options\n *\n * @returns Sidebar component observable\n */\nexport function mountSidebar(\n el: HTMLElement, { header$, ...options }: MountOptions\n): Observable> {\n const inner = getElement(\".md-sidebar__scrollwrap\", el)\n const { y } = getElementOffset(inner)\n return defer(() => {\n const push$ = new Subject()\n push$\n .pipe(\n auditTime(0, animationFrameScheduler),\n withLatestFrom(header$)\n )\n .subscribe({\n\n /* Handle emission */\n next([{ height }, { height: offset }]) {\n inner.style.height = `${height - 2 * y}px`\n el.style.top = `${offset}px`\n },\n\n /* Handle complete */\n complete() {\n inner.style.height = \"\"\n el.style.top = \"\"\n }\n })\n\n /* Bring active item into view on initial load */\n push$\n .pipe(\n observeOn(animationFrameScheduler),\n take(1)\n )\n .subscribe(() => {\n for (const item of getElements(\".md-nav__link--active[href]\", el)) {\n const container = getElementContainer(item)\n if (typeof container !== \"undefined\") {\n const offset = item.offsetTop - container.offsetTop\n const { height } = getElementSize(container)\n container.scrollTo({\n top: offset - height / 2\n })\n }\n }\n })\n\n /* Create and return component */\n return watchSidebar(el, options)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Repo, User } from \"github-types\"\nimport {\n EMPTY,\n Observable,\n catchError,\n defaultIfEmpty,\n map,\n zip\n} from \"rxjs\"\n\nimport { requestJSON } from \"~/browser\"\n\nimport { SourceFacts } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * GitHub release (partial)\n */\ninterface Release {\n tag_name: string /* Tag name */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch GitHub repository facts\n *\n * @param user - GitHub user or organization\n * @param repo - GitHub repository\n *\n * @returns Repository facts observable\n */\nexport function fetchSourceFactsFromGitHub(\n user: string, repo?: string\n): Observable {\n if (typeof repo !== \"undefined\") {\n const url = `https://api.github.com/repos/${user}/${repo}`\n return zip(\n\n /* Fetch version */\n requestJSON(`${url}/releases/latest`)\n .pipe(\n catchError(() => EMPTY), // @todo refactor instant loading\n map(release => ({\n version: release.tag_name\n })),\n defaultIfEmpty({})\n ),\n\n /* Fetch stars and forks */\n requestJSON(url)\n .pipe(\n catchError(() => EMPTY), // @todo refactor instant loading\n map(info => ({\n stars: info.stargazers_count,\n forks: info.forks_count\n })),\n defaultIfEmpty({})\n )\n )\n .pipe(\n map(([release, info]) => ({ ...release, ...info }))\n )\n\n /* User or organization */\n } else {\n const url = `https://api.github.com/users/${user}`\n return requestJSON(url)\n .pipe(\n map(info => ({\n repositories: info.public_repos\n })),\n defaultIfEmpty({})\n )\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { ProjectSchema } from \"gitlab\"\nimport {\n EMPTY,\n Observable,\n catchError,\n defaultIfEmpty,\n map\n} from \"rxjs\"\n\nimport { requestJSON } from \"~/browser\"\n\nimport { SourceFacts } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch GitLab repository facts\n *\n * @param base - GitLab base\n * @param project - GitLab project\n *\n * @returns Repository facts observable\n */\nexport function fetchSourceFactsFromGitLab(\n base: string, project: string\n): Observable {\n const url = `https://${base}/api/v4/projects/${encodeURIComponent(project)}`\n return requestJSON(url)\n .pipe(\n catchError(() => EMPTY), // @todo refactor instant loading\n map(({ star_count, forks_count }) => ({\n stars: star_count,\n forks: forks_count\n })),\n defaultIfEmpty({})\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { EMPTY, Observable } from \"rxjs\"\n\nimport { fetchSourceFactsFromGitHub } from \"../github\"\nimport { fetchSourceFactsFromGitLab } from \"../gitlab\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Repository facts for repositories\n */\nexport interface RepositoryFacts {\n stars?: number /* Number of stars */\n forks?: number /* Number of forks */\n version?: string /* Latest version */\n}\n\n/**\n * Repository facts for organizations\n */\nexport interface OrganizationFacts {\n repositories?: number /* Number of repositories */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Repository facts\n */\nexport type SourceFacts =\n | RepositoryFacts\n | OrganizationFacts\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch repository facts\n *\n * @param url - Repository URL\n *\n * @returns Repository facts observable\n */\nexport function fetchSourceFacts(\n url: string\n): Observable {\n\n /* Try to match GitHub repository */\n let match = url.match(/^.+github\\.com\\/([^/]+)\\/?([^/]+)?/i)\n if (match) {\n const [, user, repo] = match\n return fetchSourceFactsFromGitHub(user, repo)\n }\n\n /* Try to match GitLab repository */\n match = url.match(/^.+?([^/]*gitlab[^/]+)\\/(.+?)\\/?$/i)\n if (match) {\n const [, base, slug] = match\n return fetchSourceFactsFromGitLab(base, slug)\n }\n\n /* Fallback */\n return EMPTY\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n Subject,\n catchError,\n defer,\n filter,\n finalize,\n map,\n of,\n shareReplay,\n tap\n} from \"rxjs\"\n\nimport { getElement } from \"~/browser\"\nimport { ConsentDefaults } from \"~/components/consent\"\nimport { renderSourceFacts } from \"~/templates\"\n\nimport {\n Component,\n getComponentElements\n} from \"../../_\"\nimport {\n SourceFacts,\n fetchSourceFacts\n} from \"../facts\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Repository information\n */\nexport interface Source {\n facts: SourceFacts /* Repository facts */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Repository information observable\n */\nlet fetch$: Observable\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch repository information\n *\n * This function tries to read the repository facts from session storage, and\n * if unsuccessful, fetches them from the underlying provider.\n *\n * @param el - Repository information element\n *\n * @returns Repository information observable\n */\nexport function watchSource(\n el: HTMLAnchorElement\n): Observable {\n return fetch$ ||= defer(() => {\n const cached = __md_get(\"__source\", sessionStorage)\n if (cached) {\n return of(cached)\n } else {\n\n /* Check if consent is configured and was given */\n const els = getComponentElements(\"consent\")\n if (els.length) {\n const consent = __md_get(\"__consent\")\n if (!(consent && consent.github))\n return EMPTY\n }\n\n /* Fetch repository facts */\n return fetchSourceFacts(el.href)\n .pipe(\n tap(facts => __md_set(\"__source\", facts, sessionStorage))\n )\n }\n })\n .pipe(\n catchError(() => EMPTY),\n filter(facts => Object.keys(facts).length > 0),\n map(facts => ({ facts })),\n shareReplay(1)\n )\n}\n\n/**\n * Mount repository information\n *\n * @param el - Repository information element\n *\n * @returns Repository information component observable\n */\nexport function mountSource(\n el: HTMLAnchorElement\n): Observable> {\n const inner = getElement(\":scope > :last-child\", el)\n return defer(() => {\n const push$ = new Subject()\n push$.subscribe(({ facts }) => {\n inner.appendChild(renderSourceFacts(facts))\n inner.classList.add(\"md-source__repository--active\")\n })\n\n /* Create and return component */\n return watchSource(el)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n defer,\n distinctUntilKeyChanged,\n finalize,\n map,\n of,\n switchMap,\n tap\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport {\n Viewport,\n watchElementSize,\n watchViewportAt\n} from \"~/browser\"\n\nimport { Component } from \"../_\"\nimport { Header } from \"../header\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Navigation tabs\n */\nexport interface Tabs {\n hidden: boolean /* Navigation tabs are hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch navigation tabs\n *\n * @param el - Navigation tabs element\n * @param options - Options\n *\n * @returns Navigation tabs observable\n */\nexport function watchTabs(\n el: HTMLElement, { viewport$, header$ }: WatchOptions\n): Observable {\n return watchElementSize(document.body)\n .pipe(\n switchMap(() => watchViewportAt(el, { header$, viewport$ })),\n map(({ offset: { y } }) => {\n return {\n hidden: y >= 10\n }\n }),\n distinctUntilKeyChanged(\"hidden\")\n )\n}\n\n/**\n * Mount navigation tabs\n *\n * This function hides the navigation tabs when scrolling past the threshold\n * and makes them reappear in a nice CSS animation when scrolling back up.\n *\n * @param el - Navigation tabs element\n * @param options - Options\n *\n * @returns Navigation tabs component observable\n */\nexport function mountTabs(\n el: HTMLElement, options: MountOptions\n): Observable> {\n return defer(() => {\n const push$ = new Subject()\n push$.subscribe({\n\n /* Handle emission */\n next({ hidden }) {\n el.hidden = hidden\n },\n\n /* Handle complete */\n complete() {\n el.hidden = false\n }\n })\n\n /* Create and return component */\n return (\n feature(\"navigation.tabs.sticky\")\n ? of({ hidden: false })\n : watchTabs(el, options)\n )\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n bufferCount,\n combineLatestWith,\n debounceTime,\n defer,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n finalize,\n map,\n merge,\n of,\n repeat,\n scan,\n share,\n skip,\n startWith,\n switchMap,\n takeLast,\n takeUntil,\n tap,\n withLatestFrom\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport {\n Viewport,\n getElement,\n getElementContainer,\n getElementSize,\n getElements,\n getLocation,\n getOptionalElement,\n watchElementSize\n} from \"~/browser\"\n\nimport {\n Component,\n getComponentElement\n} from \"../_\"\nimport { Header } from \"../header\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Table of contents\n */\nexport interface TableOfContents {\n prev: HTMLAnchorElement[][] /* Anchors (previous) */\n next: HTMLAnchorElement[][] /* Anchors (next) */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n target$: Observable /* Location target observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch table of contents\n *\n * This is effectively a scroll spy implementation which will account for the\n * fixed header and automatically re-calculate anchor offsets when the viewport\n * is resized. The returned observable will only emit if the table of contents\n * needs to be repainted.\n *\n * This implementation tracks an anchor element's entire path starting from its\n * level up to the top-most anchor element, e.g. `[h3, h2, h1]`. Although the\n * Material theme currently doesn't make use of this information, it enables\n * the styling of the entire hierarchy through customization.\n *\n * Note that the current anchor is the last item of the `prev` anchor list.\n *\n * @param el - Table of contents element\n * @param options - Options\n *\n * @returns Table of contents observable\n */\nexport function watchTableOfContents(\n el: HTMLElement, { viewport$, header$ }: WatchOptions\n): Observable {\n const table = new Map()\n\n /* Compute anchor-to-target mapping */\n const anchors = getElements(\"[href^=\\\\#]\", el)\n for (const anchor of anchors) {\n const id = decodeURIComponent(anchor.hash.substring(1))\n const target = getOptionalElement(`[id=\"${id}\"]`)\n if (typeof target !== \"undefined\")\n table.set(anchor, target)\n }\n\n /* Compute necessary adjustment for header */\n const adjust$ = header$\n .pipe(\n distinctUntilKeyChanged(\"height\"),\n map(({ height }) => {\n const main = getComponentElement(\"main\")\n const grid = getElement(\":scope > :first-child\", main)\n return height + 0.8 * (\n grid.offsetTop -\n main.offsetTop\n )\n }),\n share()\n )\n\n /* Compute partition of previous and next anchors */\n const partition$ = watchElementSize(document.body)\n .pipe(\n distinctUntilKeyChanged(\"height\"),\n\n /* Build index to map anchor paths to vertical offsets */\n switchMap(body => defer(() => {\n let path: HTMLAnchorElement[] = []\n return of([...table].reduce((index, [anchor, target]) => {\n while (path.length) {\n const last = table.get(path[path.length - 1])!\n if (last.tagName >= target.tagName) {\n path.pop()\n } else {\n break\n }\n }\n\n /* If the current anchor is hidden, continue with its parent */\n let offset = target.offsetTop\n while (!offset && target.parentElement) {\n target = target.parentElement\n offset = target.offsetTop\n }\n\n /* Map reversed anchor path to vertical offset */\n return index.set(\n [...path = [...path, anchor]].reverse(),\n offset\n )\n }, new Map()))\n })\n .pipe(\n\n /* Sort index by vertical offset (see https://bit.ly/30z6QSO) */\n map(index => new Map([...index].sort(([, a], [, b]) => a - b))),\n combineLatestWith(adjust$),\n\n /* Re-compute partition when viewport offset changes */\n switchMap(([index, adjust]) => viewport$\n .pipe(\n scan(([prev, next], { offset: { y }, size }) => {\n const last = y + size.height >= Math.floor(body.height)\n\n /* Look forward */\n while (next.length) {\n const [, offset] = next[0]\n if (offset - adjust < y || last) {\n prev = [...prev, next.shift()!]\n } else {\n break\n }\n }\n\n /* Look backward */\n while (prev.length) {\n const [, offset] = prev[prev.length - 1]\n if (offset - adjust >= y && !last) {\n next = [prev.pop()!, ...next]\n } else {\n break\n }\n }\n\n /* Return partition */\n return [prev, next]\n }, [[], [...index]]),\n distinctUntilChanged((a, b) => (\n a[0] === b[0] &&\n a[1] === b[1]\n ))\n )\n )\n )\n )\n )\n\n /* Compute and return anchor list migrations */\n return partition$\n .pipe(\n map(([prev, next]) => ({\n prev: prev.map(([path]) => path),\n next: next.map(([path]) => path)\n })),\n\n /* Extract anchor list migrations */\n startWith({ prev: [], next: [] }),\n bufferCount(2, 1),\n map(([a, b]) => {\n\n /* Moving down */\n if (a.prev.length < b.prev.length) {\n return {\n prev: b.prev.slice(Math.max(0, a.prev.length - 1), b.prev.length),\n next: []\n }\n\n /* Moving up */\n } else {\n return {\n prev: b.prev.slice(-1),\n next: b.next.slice(0, b.next.length - a.next.length)\n }\n }\n })\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Mount table of contents\n *\n * @param el - Table of contents element\n * @param options - Options\n *\n * @returns Table of contents component observable\n */\nexport function mountTableOfContents(\n el: HTMLElement, { viewport$, header$, target$ }: MountOptions\n): Observable> {\n return defer(() => {\n const push$ = new Subject()\n const done$ = push$.pipe(takeLast(1))\n push$.subscribe(({ prev, next }) => {\n\n /* Look forward */\n for (const [anchor] of next) {\n anchor.classList.remove(\"md-nav__link--passed\")\n anchor.classList.remove(\"md-nav__link--active\")\n }\n\n /* Look backward */\n for (const [index, [anchor]] of prev.entries()) {\n anchor.classList.add(\"md-nav__link--passed\")\n anchor.classList.toggle(\n \"md-nav__link--active\",\n index === prev.length - 1\n )\n }\n })\n\n /* Set up following, if enabled */\n if (feature(\"toc.follow\")) {\n\n /* Toggle smooth scrolling only for anchor clicks */\n const smooth$ = merge(\n viewport$.pipe(debounceTime(1), map(() => undefined)),\n viewport$.pipe(debounceTime(250), map(() => \"smooth\" as const))\n )\n\n /* Bring active anchor into view */\n push$\n .pipe(\n filter(({ prev }) => prev.length > 0),\n withLatestFrom(smooth$)\n )\n .subscribe(([{ prev }, behavior]) => {\n const [anchor] = prev[prev.length - 1]\n if (anchor.offsetHeight) {\n\n /* Retrieve overflowing container and scroll */\n const container = getElementContainer(anchor)\n if (typeof container !== \"undefined\") {\n const offset = anchor.offsetTop - container.offsetTop\n const { height } = getElementSize(container)\n container.scrollTo({\n top: offset - height / 2,\n behavior\n })\n }\n }\n })\n }\n\n /* Set up anchor tracking, if enabled */\n if (feature(\"navigation.tracking\"))\n viewport$\n .pipe(\n takeUntil(done$),\n distinctUntilKeyChanged(\"offset\"),\n debounceTime(250),\n skip(1),\n takeUntil(target$.pipe(skip(1))),\n repeat({ delay: 250 }),\n withLatestFrom(push$)\n )\n .subscribe(([, { prev }]) => {\n const url = getLocation()\n\n /* Set hash fragment to active anchor */\n const anchor = prev[prev.length - 1]\n if (anchor && anchor.length) {\n const [active] = anchor\n const { hash } = new URL(active.href)\n if (url.hash !== hash) {\n url.hash = hash\n history.replaceState({}, \"\", `${url}`)\n }\n\n /* Reset anchor when at the top */\n } else {\n url.hash = \"\"\n history.replaceState({}, \"\", `${url}`)\n }\n })\n\n /* Create and return component */\n return watchTableOfContents(el, { viewport$, header$ })\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n bufferCount,\n combineLatest,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n endWith,\n finalize,\n map,\n repeat,\n skip,\n takeLast,\n takeUntil,\n tap\n} from \"rxjs\"\n\nimport { Viewport } from \"~/browser\"\n\nimport { Component } from \"../_\"\nimport { Header } from \"../header\"\nimport { Main } from \"../main\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Back-to-top button\n */\nexport interface BackToTop {\n hidden: boolean /* Back-to-top button is hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n main$: Observable
    /* Main area observable */\n target$: Observable /* Location target observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n target$: Observable /* Location target observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch back-to-top\n *\n * @param _el - Back-to-top element\n * @param options - Options\n *\n * @returns Back-to-top observable\n */\nexport function watchBackToTop(\n _el: HTMLElement, { viewport$, main$, target$ }: WatchOptions\n): Observable {\n\n /* Compute direction */\n const direction$ = viewport$\n .pipe(\n map(({ offset: { y } }) => y),\n bufferCount(2, 1),\n map(([a, b]) => a > b && b > 0),\n distinctUntilChanged()\n )\n\n /* Compute whether main area is active */\n const active$ = main$\n .pipe(\n map(({ active }) => active)\n )\n\n /* Compute threshold for hiding */\n return combineLatest([active$, direction$])\n .pipe(\n map(([active, direction]) => !(active && direction)),\n distinctUntilChanged(),\n takeUntil(target$.pipe(skip(1))),\n endWith(true),\n repeat({ delay: 250 }),\n map(hidden => ({ hidden }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Mount back-to-top\n *\n * @param el - Back-to-top element\n * @param options - Options\n *\n * @returns Back-to-top component observable\n */\nexport function mountBackToTop(\n el: HTMLElement, { viewport$, header$, main$, target$ }: MountOptions\n): Observable> {\n const push$ = new Subject()\n const done$ = push$.pipe(takeLast(1))\n push$.subscribe({\n\n /* Handle emission */\n next({ hidden }) {\n el.hidden = hidden\n if (hidden) {\n el.setAttribute(\"tabindex\", \"-1\")\n el.blur()\n } else {\n el.removeAttribute(\"tabindex\")\n }\n },\n\n /* Handle complete */\n complete() {\n el.style.top = \"\"\n el.hidden = true\n el.removeAttribute(\"tabindex\")\n }\n })\n\n /* Watch header height */\n header$\n .pipe(\n takeUntil(done$),\n distinctUntilKeyChanged(\"height\")\n )\n .subscribe(({ height }) => {\n el.style.top = `${height + 16}px`\n })\n\n /* Create and return component */\n return watchBackToTop(el, { viewport$, main$, target$ })\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n fromEvent,\n map,\n mergeMap,\n switchMap,\n takeWhile,\n tap,\n withLatestFrom\n} from \"rxjs\"\n\nimport { getElements } from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n tablet$: Observable /* Media tablet observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch indeterminate checkboxes\n *\n * This function replaces the indeterminate \"pseudo state\" with the actual\n * indeterminate state, which is used to keep navigation always expanded.\n *\n * @param options - Options\n */\nexport function patchIndeterminate(\n { document$, tablet$ }: PatchOptions\n): void {\n document$\n .pipe(\n switchMap(() => getElements(\n // @todo `data-md-state` is deprecated and removed in v9\n \".md-toggle--indeterminate, [data-md-state=indeterminate]\"\n )),\n tap(el => {\n el.indeterminate = true\n el.checked = false\n }),\n mergeMap(el => fromEvent(el, \"change\")\n .pipe(\n takeWhile(() => el.classList.contains(\"md-toggle--indeterminate\")),\n map(() => el)\n )\n ),\n withLatestFrom(tablet$)\n )\n .subscribe(([el, tablet]) => {\n el.classList.remove(\"md-toggle--indeterminate\")\n if (tablet)\n el.checked = false\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n filter,\n fromEvent,\n map,\n mergeMap,\n switchMap,\n tap\n} from \"rxjs\"\n\nimport { getElements } from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Check whether the given device is an Apple device\n *\n * @returns Test result\n */\nfunction isAppleDevice(): boolean {\n return /(iPad|iPhone|iPod)/.test(navigator.userAgent)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all elements with `data-md-scrollfix` attributes\n *\n * This is a year-old patch which ensures that overflow scrolling works at the\n * top and bottom of containers on iOS by ensuring a `1px` scroll offset upon\n * the start of a touch event.\n *\n * @see https://bit.ly/2SCtAOO - Original source\n *\n * @param options - Options\n */\nexport function patchScrollfix(\n { document$ }: PatchOptions\n): void {\n document$\n .pipe(\n switchMap(() => getElements(\"[data-md-scrollfix]\")),\n tap(el => el.removeAttribute(\"data-md-scrollfix\")),\n filter(isAppleDevice),\n mergeMap(el => fromEvent(el, \"touchstart\")\n .pipe(\n map(() => el)\n )\n )\n )\n .subscribe(el => {\n const top = el.scrollTop\n\n /* We're at the top of the container */\n if (top === 0) {\n el.scrollTop = 1\n\n /* We're at the bottom of the container */\n } else if (top + el.offsetHeight === el.scrollHeight) {\n el.scrollTop = top - 1\n }\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n combineLatest,\n delay,\n map,\n of,\n switchMap,\n withLatestFrom\n} from \"rxjs\"\n\nimport {\n Viewport,\n watchToggle\n} from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n viewport$: Observable /* Viewport observable */\n tablet$: Observable /* Media tablet observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch the document body to lock when search is open\n *\n * For mobile and tablet viewports, the search is rendered full screen, which\n * leads to scroll leaking when at the top or bottom of the search result. This\n * function locks the body when the search is in full screen mode, and restores\n * the scroll position when leaving.\n *\n * @param options - Options\n */\nexport function patchScrolllock(\n { viewport$, tablet$ }: PatchOptions\n): void {\n combineLatest([watchToggle(\"search\"), tablet$])\n .pipe(\n map(([active, tablet]) => active && !tablet),\n switchMap(active => of(active)\n .pipe(\n delay(active ? 400 : 100)\n )\n ),\n withLatestFrom(viewport$)\n )\n .subscribe(([active, { offset: { y }}]) => {\n if (active) {\n document.body.setAttribute(\"data-md-scrolllock\", \"\")\n document.body.style.top = `-${y}px`\n } else {\n const value = -1 * parseInt(document.body.style.top, 10)\n document.body.removeAttribute(\"data-md-scrolllock\")\n document.body.style.top = \"\"\n if (value)\n window.scrollTo(0, value)\n }\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Polyfills\n * ------------------------------------------------------------------------- */\n\n/* Polyfill `Object.entries` */\nif (!Object.entries)\n Object.entries = function (obj: object) {\n const data: [string, string][] = []\n for (const key of Object.keys(obj))\n // @ts-expect-error - ignore property access warning\n data.push([key, obj[key]])\n\n /* Return entries */\n return data\n }\n\n/* Polyfill `Object.values` */\nif (!Object.values)\n Object.values = function (obj: object) {\n const data: string[] = []\n for (const key of Object.keys(obj))\n // @ts-expect-error - ignore property access warning\n data.push(obj[key])\n\n /* Return values */\n return data\n }\n\n/* ------------------------------------------------------------------------- */\n\n/* Polyfills for `Element` */\nif (typeof Element !== \"undefined\") {\n\n /* Polyfill `Element.scrollTo` */\n if (!Element.prototype.scrollTo)\n Element.prototype.scrollTo = function (\n x?: ScrollToOptions | number, y?: number\n ): void {\n if (typeof x === \"object\") {\n this.scrollLeft = x.left!\n this.scrollTop = x.top!\n } else {\n this.scrollLeft = x!\n this.scrollTop = y!\n }\n }\n\n /* Polyfill `Element.replaceWith` */\n if (!Element.prototype.replaceWith)\n Element.prototype.replaceWith = function (\n ...nodes: Array\n ): void {\n const parent = this.parentNode\n if (parent) {\n if (nodes.length === 0)\n parent.removeChild(this)\n\n /* Replace children and create text nodes */\n for (let i = nodes.length - 1; i >= 0; i--) {\n let node = nodes[i]\n if (typeof node === \"string\")\n node = document.createTextNode(node)\n else if (node.parentNode)\n node.parentNode.removeChild(node)\n\n /* Replace child or insert before previous sibling */\n if (!i)\n parent.replaceChild(node, this)\n else\n parent.insertBefore(this.previousSibling!, node)\n }\n }\n }\n}\n"], + "mappings": "6+BAAA,IAAAA,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAAC,SAAUC,EAAQC,EAAS,CAC1B,OAAOH,IAAY,UAAY,OAAOC,IAAW,YAAcE,EAAQ,EACvE,OAAO,QAAW,YAAc,OAAO,IAAM,OAAOA,CAAO,EAC1DA,EAAQ,CACX,GAAEH,GAAO,UAAY,CAAE,aASrB,SAASI,EAA0BC,EAAO,CACxC,IAAIC,EAAmB,GACnBC,EAA0B,GAC1BC,EAAiC,KAEjCC,EAAsB,CACxB,KAAM,GACN,OAAQ,GACR,IAAK,GACL,IAAK,GACL,MAAO,GACP,SAAU,GACV,OAAQ,GACR,KAAM,GACN,MAAO,GACP,KAAM,GACN,KAAM,GACN,SAAU,GACV,iBAAkB,EACpB,EAOA,SAASC,EAAmBC,EAAI,CAC9B,MACE,GAAAA,GACAA,IAAO,UACPA,EAAG,WAAa,QAChBA,EAAG,WAAa,QAChB,cAAeA,GACf,aAAcA,EAAG,UAKrB,CASA,SAASC,EAA8BD,EAAI,CACzC,IAAIE,GAAOF,EAAG,KACVG,GAAUH,EAAG,QAUjB,MARI,GAAAG,KAAY,SAAWL,EAAoBI,KAAS,CAACF,EAAG,UAIxDG,KAAY,YAAc,CAACH,EAAG,UAI9BA,EAAG,kBAKT,CAOA,SAASI,EAAqBJ,EAAI,CAC5BA,EAAG,UAAU,SAAS,eAAe,IAGzCA,EAAG,UAAU,IAAI,eAAe,EAChCA,EAAG,aAAa,2BAA4B,EAAE,EAChD,CAOA,SAASK,EAAwBL,EAAI,CAC/B,CAACA,EAAG,aAAa,0BAA0B,IAG/CA,EAAG,UAAU,OAAO,eAAe,EACnCA,EAAG,gBAAgB,0BAA0B,EAC/C,CAUA,SAASM,EAAUC,EAAG,CAChBA,EAAE,SAAWA,EAAE,QAAUA,EAAE,UAI3BR,EAAmBL,EAAM,aAAa,GACxCU,EAAqBV,EAAM,aAAa,EAG1CC,EAAmB,GACrB,CAUA,SAASa,EAAcD,EAAG,CACxBZ,EAAmB,EACrB,CASA,SAASc,EAAQF,EAAG,CAEd,CAACR,EAAmBQ,EAAE,MAAM,IAI5BZ,GAAoBM,EAA8BM,EAAE,MAAM,IAC5DH,EAAqBG,EAAE,MAAM,CAEjC,CAMA,SAASG,EAAOH,EAAG,CACb,CAACR,EAAmBQ,EAAE,MAAM,IAK9BA,EAAE,OAAO,UAAU,SAAS,eAAe,GAC3CA,EAAE,OAAO,aAAa,0BAA0B,KAMhDX,EAA0B,GAC1B,OAAO,aAAaC,CAA8B,EAClDA,EAAiC,OAAO,WAAW,UAAW,CAC5DD,EAA0B,EAC5B,EAAG,GAAG,EACNS,EAAwBE,EAAE,MAAM,EAEpC,CAOA,SAASI,EAAmBJ,EAAG,CACzB,SAAS,kBAAoB,WAK3BX,IACFD,EAAmB,IAErBiB,EAA+B,EAEnC,CAQA,SAASA,GAAiC,CACxC,SAAS,iBAAiB,YAAaC,CAAoB,EAC3D,SAAS,iBAAiB,YAAaA,CAAoB,EAC3D,SAAS,iBAAiB,UAAWA,CAAoB,EACzD,SAAS,iBAAiB,cAAeA,CAAoB,EAC7D,SAAS,iBAAiB,cAAeA,CAAoB,EAC7D,SAAS,iBAAiB,YAAaA,CAAoB,EAC3D,SAAS,iBAAiB,YAAaA,CAAoB,EAC3D,SAAS,iBAAiB,aAAcA,CAAoB,EAC5D,SAAS,iBAAiB,WAAYA,CAAoB,CAC5D,CAEA,SAASC,GAAoC,CAC3C,SAAS,oBAAoB,YAAaD,CAAoB,EAC9D,SAAS,oBAAoB,YAAaA,CAAoB,EAC9D,SAAS,oBAAoB,UAAWA,CAAoB,EAC5D,SAAS,oBAAoB,cAAeA,CAAoB,EAChE,SAAS,oBAAoB,cAAeA,CAAoB,EAChE,SAAS,oBAAoB,YAAaA,CAAoB,EAC9D,SAAS,oBAAoB,YAAaA,CAAoB,EAC9D,SAAS,oBAAoB,aAAcA,CAAoB,EAC/D,SAAS,oBAAoB,WAAYA,CAAoB,CAC/D,CASA,SAASA,EAAqBN,EAAG,CAG3BA,EAAE,OAAO,UAAYA,EAAE,OAAO,SAAS,YAAY,IAAM,SAI7DZ,EAAmB,GACnBmB,EAAkC,EACpC,CAKA,SAAS,iBAAiB,UAAWR,EAAW,EAAI,EACpD,SAAS,iBAAiB,YAAaE,EAAe,EAAI,EAC1D,SAAS,iBAAiB,cAAeA,EAAe,EAAI,EAC5D,SAAS,iBAAiB,aAAcA,EAAe,EAAI,EAC3D,SAAS,iBAAiB,mBAAoBG,EAAoB,EAAI,EAEtEC,EAA+B,EAM/BlB,EAAM,iBAAiB,QAASe,EAAS,EAAI,EAC7Cf,EAAM,iBAAiB,OAAQgB,EAAQ,EAAI,EAOvChB,EAAM,WAAa,KAAK,wBAA0BA,EAAM,KAI1DA,EAAM,KAAK,aAAa,wBAAyB,EAAE,EAC1CA,EAAM,WAAa,KAAK,gBACjC,SAAS,gBAAgB,UAAU,IAAI,kBAAkB,EACzD,SAAS,gBAAgB,aAAa,wBAAyB,EAAE,EAErE,CAKA,GAAI,OAAO,QAAW,aAAe,OAAO,UAAa,YAAa,CAIpE,OAAO,0BAA4BD,EAInC,IAAIsB,EAEJ,GAAI,CACFA,EAAQ,IAAI,YAAY,8BAA8B,CACxD,OAASC,EAAP,CAEAD,EAAQ,SAAS,YAAY,aAAa,EAC1CA,EAAM,gBAAgB,+BAAgC,GAAO,GAAO,CAAC,CAAC,CACxE,CAEA,OAAO,cAAcA,CAAK,CAC5B,CAEI,OAAO,UAAa,aAGtBtB,EAA0B,QAAQ,CAGtC,CAAE,ICvTF,IAAAwB,GAAAC,GAAAC,IAAA,EAAC,SAASC,EAAQ,CAOhB,IAAIC,EAA6B,UAAW,CAC1C,GAAI,CACF,MAAO,CAAC,CAAC,OAAO,QAClB,OAASC,EAAP,CACA,MAAO,EACT,CACF,EAGIC,EAAoBF,EAA2B,EAE/CG,EAAiB,SAASC,EAAO,CACnC,IAAIC,EAAW,CACb,KAAM,UAAW,CACf,IAAIC,EAAQF,EAAM,MAAM,EACxB,MAAO,CAAE,KAAME,IAAU,OAAQ,MAAOA,CAAM,CAChD,CACF,EAEA,OAAIJ,IACFG,EAAS,OAAO,UAAY,UAAW,CACrC,OAAOA,CACT,GAGKA,CACT,EAMIE,EAAiB,SAASD,EAAO,CACnC,OAAO,mBAAmBA,CAAK,EAAE,QAAQ,OAAQ,GAAG,CACtD,EAEIE,EAAmB,SAASF,EAAO,CACrC,OAAO,mBAAmB,OAAOA,CAAK,EAAE,QAAQ,MAAO,GAAG,CAAC,CAC7D,EAEIG,EAA0B,UAAW,CAEvC,IAAIC,EAAkB,SAASC,EAAc,CAC3C,OAAO,eAAe,KAAM,WAAY,CAAE,SAAU,GAAM,MAAO,CAAC,CAAE,CAAC,EACrE,IAAIC,EAAqB,OAAOD,EAEhC,GAAIC,IAAuB,YAEpB,GAAIA,IAAuB,SAC5BD,IAAiB,IACnB,KAAK,YAAYA,CAAY,UAEtBA,aAAwBD,EAAiB,CAClD,IAAIG,EAAQ,KACZF,EAAa,QAAQ,SAASL,EAAOQ,EAAM,CACzCD,EAAM,OAAOC,EAAMR,CAAK,CAC1B,CAAC,CACH,SAAYK,IAAiB,MAAUC,IAAuB,SAC5D,GAAI,OAAO,UAAU,SAAS,KAAKD,CAAY,IAAM,iBACnD,QAASI,EAAI,EAAGA,EAAIJ,EAAa,OAAQI,IAAK,CAC5C,IAAIC,EAAQL,EAAaI,GACzB,GAAK,OAAO,UAAU,SAAS,KAAKC,CAAK,IAAM,kBAAsBA,EAAM,SAAW,EACpF,KAAK,OAAOA,EAAM,GAAIA,EAAM,EAAE,MAE9B,OAAM,IAAI,UAAU,4CAA8CD,EAAI,6BAA8B,CAExG,KAEA,SAASE,KAAON,EACVA,EAAa,eAAeM,CAAG,GACjC,KAAK,OAAOA,EAAKN,EAAaM,EAAI,MAKxC,OAAM,IAAI,UAAU,8CAA+C,CAEvE,EAEIC,EAAQR,EAAgB,UAE5BQ,EAAM,OAAS,SAASJ,EAAMR,EAAO,CAC/BQ,KAAQ,KAAK,SACf,KAAK,SAASA,GAAM,KAAK,OAAOR,CAAK,CAAC,EAEtC,KAAK,SAASQ,GAAQ,CAAC,OAAOR,CAAK,CAAC,CAExC,EAEAY,EAAM,OAAS,SAASJ,EAAM,CAC5B,OAAO,KAAK,SAASA,EACvB,EAEAI,EAAM,IAAM,SAASJ,EAAM,CACzB,OAAQA,KAAQ,KAAK,SAAY,KAAK,SAASA,GAAM,GAAK,IAC5D,EAEAI,EAAM,OAAS,SAASJ,EAAM,CAC5B,OAAQA,KAAQ,KAAK,SAAY,KAAK,SAASA,GAAM,MAAM,CAAC,EAAI,CAAC,CACnE,EAEAI,EAAM,IAAM,SAASJ,EAAM,CACzB,OAAQA,KAAQ,KAAK,QACvB,EAEAI,EAAM,IAAM,SAASJ,EAAMR,EAAO,CAChC,KAAK,SAASQ,GAAQ,CAAC,OAAOR,CAAK,CAAC,CACtC,EAEAY,EAAM,QAAU,SAASC,EAAUC,EAAS,CAC1C,IAAIC,EACJ,QAASP,KAAQ,KAAK,SACpB,GAAI,KAAK,SAAS,eAAeA,CAAI,EAAG,CACtCO,EAAU,KAAK,SAASP,GACxB,QAASC,EAAI,EAAGA,EAAIM,EAAQ,OAAQN,IAClCI,EAAS,KAAKC,EAASC,EAAQN,GAAID,EAAM,IAAI,CAEjD,CAEJ,EAEAI,EAAM,KAAO,UAAW,CACtB,IAAId,EAAQ,CAAC,EACb,YAAK,QAAQ,SAASE,EAAOQ,EAAM,CACjCV,EAAM,KAAKU,CAAI,CACjB,CAAC,EACMX,EAAeC,CAAK,CAC7B,EAEAc,EAAM,OAAS,UAAW,CACxB,IAAId,EAAQ,CAAC,EACb,YAAK,QAAQ,SAASE,EAAO,CAC3BF,EAAM,KAAKE,CAAK,CAClB,CAAC,EACMH,EAAeC,CAAK,CAC7B,EAEAc,EAAM,QAAU,UAAW,CACzB,IAAId,EAAQ,CAAC,EACb,YAAK,QAAQ,SAASE,EAAOQ,EAAM,CACjCV,EAAM,KAAK,CAACU,EAAMR,CAAK,CAAC,CAC1B,CAAC,EACMH,EAAeC,CAAK,CAC7B,EAEIF,IACFgB,EAAM,OAAO,UAAYA,EAAM,SAGjCA,EAAM,SAAW,UAAW,CAC1B,IAAII,EAAc,CAAC,EACnB,YAAK,QAAQ,SAAShB,EAAOQ,EAAM,CACjCQ,EAAY,KAAKf,EAAeO,CAAI,EAAI,IAAMP,EAAeD,CAAK,CAAC,CACrE,CAAC,EACMgB,EAAY,KAAK,GAAG,CAC7B,EAGAvB,EAAO,gBAAkBW,CAC3B,EAEIa,EAAkC,UAAW,CAC/C,GAAI,CACF,IAAIb,EAAkBX,EAAO,gBAE7B,OACG,IAAIW,EAAgB,MAAM,EAAE,SAAS,IAAM,OAC3C,OAAOA,EAAgB,UAAU,KAAQ,YACzC,OAAOA,EAAgB,UAAU,SAAY,UAElD,OAASc,EAAP,CACA,MAAO,EACT,CACF,EAEKD,EAAgC,GACnCd,EAAwB,EAG1B,IAAIS,EAAQnB,EAAO,gBAAgB,UAE/B,OAAOmB,EAAM,MAAS,aACxBA,EAAM,KAAO,UAAW,CACtB,IAAIL,EAAQ,KACRT,EAAQ,CAAC,EACb,KAAK,QAAQ,SAASE,EAAOQ,EAAM,CACjCV,EAAM,KAAK,CAACU,EAAMR,CAAK,CAAC,EACnBO,EAAM,UACTA,EAAM,OAAOC,CAAI,CAErB,CAAC,EACDV,EAAM,KAAK,SAASqB,EAAGC,EAAG,CACxB,OAAID,EAAE,GAAKC,EAAE,GACJ,GACED,EAAE,GAAKC,EAAE,GACX,EAEA,CAEX,CAAC,EACGb,EAAM,WACRA,EAAM,SAAW,CAAC,GAEpB,QAASE,EAAI,EAAGA,EAAIX,EAAM,OAAQW,IAChC,KAAK,OAAOX,EAAMW,GAAG,GAAIX,EAAMW,GAAG,EAAE,CAExC,GAGE,OAAOG,EAAM,aAAgB,YAC/B,OAAO,eAAeA,EAAO,cAAe,CAC1C,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,SAASP,EAAc,CAC5B,GAAI,KAAK,SACP,KAAK,SAAW,CAAC,MACZ,CACL,IAAIgB,EAAO,CAAC,EACZ,KAAK,QAAQ,SAASrB,EAAOQ,EAAM,CACjCa,EAAK,KAAKb,CAAI,CAChB,CAAC,EACD,QAASC,EAAI,EAAGA,EAAIY,EAAK,OAAQZ,IAC/B,KAAK,OAAOY,EAAKZ,EAAE,CAEvB,CAEAJ,EAAeA,EAAa,QAAQ,MAAO,EAAE,EAG7C,QAFIiB,EAAajB,EAAa,MAAM,GAAG,EACnCkB,EACKd,EAAI,EAAGA,EAAIa,EAAW,OAAQb,IACrCc,EAAYD,EAAWb,GAAG,MAAM,GAAG,EACnC,KAAK,OACHP,EAAiBqB,EAAU,EAAE,EAC5BA,EAAU,OAAS,EAAKrB,EAAiBqB,EAAU,EAAE,EAAI,EAC5D,CAEJ,CACF,CAAC,CAKL,GACG,OAAO,QAAW,YAAe,OAC5B,OAAO,QAAW,YAAe,OACjC,OAAO,MAAS,YAAe,KAAO/B,EAC9C,GAEC,SAASC,EAAQ,CAOhB,IAAI+B,EAAwB,UAAW,CACrC,GAAI,CACF,IAAIC,EAAI,IAAIhC,EAAO,IAAI,IAAK,UAAU,EACtC,OAAAgC,EAAE,SAAW,MACLA,EAAE,OAAS,kBAAqBA,EAAE,YAC5C,OAASP,EAAP,CACA,MAAO,EACT,CACF,EAGIQ,EAAc,UAAW,CAC3B,IAAIC,EAAOlC,EAAO,IAEdmC,EAAM,SAASC,EAAKC,EAAM,CACxB,OAAOD,GAAQ,WAAUA,EAAM,OAAOA,CAAG,GACzCC,GAAQ,OAAOA,GAAS,WAAUA,EAAO,OAAOA,CAAI,GAGxD,IAAIC,EAAM,SAAUC,EACpB,GAAIF,IAASrC,EAAO,WAAa,QAAUqC,IAASrC,EAAO,SAAS,MAAO,CACzEqC,EAAOA,EAAK,YAAY,EACxBC,EAAM,SAAS,eAAe,mBAAmB,EAAE,EACnDC,EAAcD,EAAI,cAAc,MAAM,EACtCC,EAAY,KAAOF,EACnBC,EAAI,KAAK,YAAYC,CAAW,EAChC,GAAI,CACF,GAAIA,EAAY,KAAK,QAAQF,CAAI,IAAM,EAAG,MAAM,IAAI,MAAME,EAAY,IAAI,CAC5E,OAASC,EAAP,CACA,MAAM,IAAI,MAAM,0BAA4BH,EAAO,WAAaG,CAAG,CACrE,CACF,CAEA,IAAIC,EAAgBH,EAAI,cAAc,GAAG,EACzCG,EAAc,KAAOL,EACjBG,IACFD,EAAI,KAAK,YAAYG,CAAa,EAClCA,EAAc,KAAOA,EAAc,MAGrC,IAAIC,EAAeJ,EAAI,cAAc,OAAO,EAI5C,GAHAI,EAAa,KAAO,MACpBA,EAAa,MAAQN,EAEjBK,EAAc,WAAa,KAAO,CAAC,IAAI,KAAKA,EAAc,IAAI,GAAM,CAACC,EAAa,cAAc,GAAK,CAACL,EACxG,MAAM,IAAI,UAAU,aAAa,EAGnC,OAAO,eAAe,KAAM,iBAAkB,CAC5C,MAAOI,CACT,CAAC,EAID,IAAIE,EAAe,IAAI3C,EAAO,gBAAgB,KAAK,MAAM,EACrD4C,EAAqB,GACrBC,EAA2B,GAC3B/B,EAAQ,KACZ,CAAC,SAAU,SAAU,KAAK,EAAE,QAAQ,SAASgC,EAAY,CACvD,IAAIC,GAASJ,EAAaG,GAC1BH,EAAaG,GAAc,UAAW,CACpCC,GAAO,MAAMJ,EAAc,SAAS,EAChCC,IACFC,EAA2B,GAC3B/B,EAAM,OAAS6B,EAAa,SAAS,EACrCE,EAA2B,GAE/B,CACF,CAAC,EAED,OAAO,eAAe,KAAM,eAAgB,CAC1C,MAAOF,EACP,WAAY,EACd,CAAC,EAED,IAAIK,EAAS,OACb,OAAO,eAAe,KAAM,sBAAuB,CACjD,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,UAAW,CACZ,KAAK,SAAWA,IAClBA,EAAS,KAAK,OACVH,IACFD,EAAqB,GACrB,KAAK,aAAa,YAAY,KAAK,MAAM,EACzCA,EAAqB,IAG3B,CACF,CAAC,CACH,EAEIzB,EAAQgB,EAAI,UAEZc,EAA6B,SAASC,EAAe,CACvD,OAAO,eAAe/B,EAAO+B,EAAe,CAC1C,IAAK,UAAW,CACd,OAAO,KAAK,eAAeA,EAC7B,EACA,IAAK,SAAS3C,EAAO,CACnB,KAAK,eAAe2C,GAAiB3C,CACvC,EACA,WAAY,EACd,CAAC,CACH,EAEA,CAAC,OAAQ,OAAQ,WAAY,OAAQ,UAAU,EAC5C,QAAQ,SAAS2C,EAAe,CAC/BD,EAA2BC,CAAa,CAC1C,CAAC,EAEH,OAAO,eAAe/B,EAAO,SAAU,CACrC,IAAK,UAAW,CACd,OAAO,KAAK,eAAe,MAC7B,EACA,IAAK,SAASZ,EAAO,CACnB,KAAK,eAAe,OAAYA,EAChC,KAAK,oBAAoB,CAC3B,EACA,WAAY,EACd,CAAC,EAED,OAAO,iBAAiBY,EAAO,CAE7B,SAAY,CACV,IAAK,UAAW,CACd,IAAIL,EAAQ,KACZ,OAAO,UAAW,CAChB,OAAOA,EAAM,IACf,CACF,CACF,EAEA,KAAQ,CACN,IAAK,UAAW,CACd,OAAO,KAAK,eAAe,KAAK,QAAQ,MAAO,EAAE,CACnD,EACA,IAAK,SAASP,EAAO,CACnB,KAAK,eAAe,KAAOA,EAC3B,KAAK,oBAAoB,CAC3B,EACA,WAAY,EACd,EAEA,SAAY,CACV,IAAK,UAAW,CACd,OAAO,KAAK,eAAe,SAAS,QAAQ,SAAU,GAAG,CAC3D,EACA,IAAK,SAASA,EAAO,CACnB,KAAK,eAAe,SAAWA,CACjC,EACA,WAAY,EACd,EAEA,OAAU,CACR,IAAK,UAAW,CAEd,IAAI4C,EAAe,CAAE,QAAS,GAAI,SAAU,IAAK,OAAQ,EAAG,EAAE,KAAK,eAAe,UAI9EC,EAAkB,KAAK,eAAe,MAAQD,GAChD,KAAK,eAAe,OAAS,GAE/B,OAAO,KAAK,eAAe,SACzB,KACA,KAAK,eAAe,UACnBC,EAAmB,IAAM,KAAK,eAAe,KAAQ,GAC1D,EACA,WAAY,EACd,EAEA,SAAY,CACV,IAAK,UAAW,CACd,MAAO,EACT,EACA,IAAK,SAAS7C,EAAO,CACrB,EACA,WAAY,EACd,EAEA,SAAY,CACV,IAAK,UAAW,CACd,MAAO,EACT,EACA,IAAK,SAASA,EAAO,CACrB,EACA,WAAY,EACd,CACF,CAAC,EAED4B,EAAI,gBAAkB,SAASkB,EAAM,CACnC,OAAOnB,EAAK,gBAAgB,MAAMA,EAAM,SAAS,CACnD,EAEAC,EAAI,gBAAkB,SAASC,EAAK,CAClC,OAAOF,EAAK,gBAAgB,MAAMA,EAAM,SAAS,CACnD,EAEAlC,EAAO,IAAMmC,CAEf,EAMA,GAJKJ,EAAsB,GACzBE,EAAY,EAGTjC,EAAO,WAAa,QAAW,EAAE,WAAYA,EAAO,UAAW,CAClE,IAAIsD,EAAY,UAAW,CACzB,OAAOtD,EAAO,SAAS,SAAW,KAAOA,EAAO,SAAS,UAAYA,EAAO,SAAS,KAAQ,IAAMA,EAAO,SAAS,KAAQ,GAC7H,EAEA,GAAI,CACF,OAAO,eAAeA,EAAO,SAAU,SAAU,CAC/C,IAAKsD,EACL,WAAY,EACd,CAAC,CACH,OAAS7B,EAAP,CACA,YAAY,UAAW,CACrBzB,EAAO,SAAS,OAASsD,EAAU,CACrC,EAAG,GAAG,CACR,CACF,CAEF,GACG,OAAO,QAAW,YAAe,OAC5B,OAAO,QAAW,YAAe,OACjC,OAAO,MAAS,YAAe,KAAOvD,EAC9C,IC5eA,IAAAwD,GAAAC,GAAA,CAAAC,GAAAC,KAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gFAeA,IAAIC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,IACH,SAAUC,EAAS,CAChB,IAAIC,EAAO,OAAO,QAAW,SAAW,OAAS,OAAO,MAAS,SAAW,KAAO,OAAO,MAAS,SAAW,KAAO,CAAC,EAClH,OAAO,QAAW,YAAc,OAAO,IACvC,OAAO,QAAS,CAAC,SAAS,EAAG,SAAU3B,EAAS,CAAE0B,EAAQE,EAAeD,EAAMC,EAAe5B,CAAO,CAAC,CAAC,CAAG,CAAC,EAEtG,OAAOC,IAAW,UAAY,OAAOA,GAAO,SAAY,SAC7DyB,EAAQE,EAAeD,EAAMC,EAAe3B,GAAO,OAAO,CAAC,CAAC,EAG5DyB,EAAQE,EAAeD,CAAI,CAAC,EAEhC,SAASC,EAAe5B,EAAS6B,EAAU,CACvC,OAAI7B,IAAY2B,IACR,OAAO,OAAO,QAAW,WACzB,OAAO,eAAe3B,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAG5DA,EAAQ,WAAa,IAGtB,SAAU8B,EAAIC,EAAG,CAAE,OAAO/B,EAAQ8B,GAAMD,EAAWA,EAASC,EAAIC,CAAC,EAAIA,CAAG,CACnF,CACJ,GACC,SAAUC,EAAU,CACjB,IAAIC,EAAgB,OAAO,gBACtB,CAAE,UAAW,CAAC,CAAE,YAAa,OAAS,SAAUC,EAAGC,EAAG,CAAED,EAAE,UAAYC,CAAG,GAC1E,SAAUD,EAAGC,EAAG,CAAE,QAASC,KAAKD,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGC,CAAC,IAAGF,EAAEE,GAAKD,EAAEC,GAAI,EAEpGlC,GAAY,SAAUgC,EAAGC,EAAG,CACxB,GAAI,OAAOA,GAAM,YAAcA,IAAM,KACjC,MAAM,IAAI,UAAU,uBAAyB,OAAOA,CAAC,EAAI,+BAA+B,EAC5FF,EAAcC,EAAGC,CAAC,EAClB,SAASE,GAAK,CAAE,KAAK,YAAcH,CAAG,CACtCA,EAAE,UAAYC,IAAM,KAAO,OAAO,OAAOA,CAAC,GAAKE,EAAG,UAAYF,EAAE,UAAW,IAAIE,EACnF,EAEAlC,GAAW,OAAO,QAAU,SAAUmC,EAAG,CACrC,QAASC,EAAG,EAAI,EAAGC,EAAI,UAAU,OAAQ,EAAIA,EAAG,IAAK,CACjDD,EAAI,UAAU,GACd,QAASH,KAAKG,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGH,CAAC,IAAGE,EAAEF,GAAKG,EAAEH,GAC9E,CACA,OAAOE,CACX,EAEAlC,GAAS,SAAUmC,EAAGE,EAAG,CACrB,IAAIH,EAAI,CAAC,EACT,QAASF,KAAKG,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGH,CAAC,GAAKK,EAAE,QAAQL,CAAC,EAAI,IAC9EE,EAAEF,GAAKG,EAAEH,IACb,GAAIG,GAAK,MAAQ,OAAO,OAAO,uBAA0B,WACrD,QAASG,EAAI,EAAGN,EAAI,OAAO,sBAAsBG,CAAC,EAAGG,EAAIN,EAAE,OAAQM,IAC3DD,EAAE,QAAQL,EAAEM,EAAE,EAAI,GAAK,OAAO,UAAU,qBAAqB,KAAKH,EAAGH,EAAEM,EAAE,IACzEJ,EAAEF,EAAEM,IAAMH,EAAEH,EAAEM,KAE1B,OAAOJ,CACX,EAEAjC,GAAa,SAAUsC,EAAYC,EAAQC,EAAKC,EAAM,CAClD,IAAIC,EAAI,UAAU,OAAQC,EAAID,EAAI,EAAIH,EAASE,IAAS,KAAOA,EAAO,OAAO,yBAAyBF,EAAQC,CAAG,EAAIC,EAAMZ,EAC3H,GAAI,OAAO,SAAY,UAAY,OAAO,QAAQ,UAAa,WAAYc,EAAI,QAAQ,SAASL,EAAYC,EAAQC,EAAKC,CAAI,MACxH,SAASJ,EAAIC,EAAW,OAAS,EAAGD,GAAK,EAAGA,KAASR,EAAIS,EAAWD,MAAIM,GAAKD,EAAI,EAAIb,EAAEc,CAAC,EAAID,EAAI,EAAIb,EAAEU,EAAQC,EAAKG,CAAC,EAAId,EAAEU,EAAQC,CAAG,IAAMG,GAChJ,OAAOD,EAAI,GAAKC,GAAK,OAAO,eAAeJ,EAAQC,EAAKG,CAAC,EAAGA,CAChE,EAEA1C,GAAU,SAAU2C,EAAYC,EAAW,CACvC,OAAO,SAAUN,EAAQC,EAAK,CAAEK,EAAUN,EAAQC,EAAKI,CAAU,CAAG,CACxE,EAEA1C,GAAa,SAAU4C,EAAaC,EAAe,CAC/C,GAAI,OAAO,SAAY,UAAY,OAAO,QAAQ,UAAa,WAAY,OAAO,QAAQ,SAASD,EAAaC,CAAa,CACjI,EAEA5C,GAAY,SAAU6C,EAASC,EAAYC,EAAGC,EAAW,CACrD,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASjB,EAAP,CAAYmB,EAAOnB,CAAC,CAAG,CAAE,CAC1F,SAASsB,EAASL,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASjB,EAAP,CAAYmB,EAAOnB,CAAC,CAAG,CAAE,CAC7F,SAASqB,EAAKE,EAAQ,CAAEA,EAAO,KAAOL,EAAQK,EAAO,KAAK,EAAIP,EAAMO,EAAO,KAAK,EAAE,KAAKH,EAAWE,CAAQ,CAAG,CAC7GD,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAEA7C,GAAc,SAAU4C,EAASY,EAAM,CACnC,IAAIC,EAAI,CAAE,MAAO,EAAG,KAAM,UAAW,CAAE,GAAI5B,EAAE,GAAK,EAAG,MAAMA,EAAE,GAAI,OAAOA,EAAE,EAAI,EAAG,KAAM,CAAC,EAAG,IAAK,CAAC,CAAE,EAAG6B,EAAGC,EAAG9B,EAAG+B,EAC/G,OAAOA,EAAI,CAAE,KAAMC,EAAK,CAAC,EAAG,MAASA,EAAK,CAAC,EAAG,OAAUA,EAAK,CAAC,CAAE,EAAG,OAAO,QAAW,aAAeD,EAAE,OAAO,UAAY,UAAW,CAAE,OAAO,IAAM,GAAIA,EACvJ,SAASC,EAAK9B,EAAG,CAAE,OAAO,SAAUT,EAAG,CAAE,OAAO+B,EAAK,CAACtB,EAAGT,CAAC,CAAC,CAAG,CAAG,CACjE,SAAS+B,EAAKS,EAAI,CACd,GAAIJ,EAAG,MAAM,IAAI,UAAU,iCAAiC,EAC5D,KAAOD,GAAG,GAAI,CACV,GAAIC,EAAI,EAAGC,IAAM9B,EAAIiC,EAAG,GAAK,EAAIH,EAAE,OAAYG,EAAG,GAAKH,EAAE,SAAc9B,EAAI8B,EAAE,SAAc9B,EAAE,KAAK8B,CAAC,EAAG,GAAKA,EAAE,OAAS,EAAE9B,EAAIA,EAAE,KAAK8B,EAAGG,EAAG,EAAE,GAAG,KAAM,OAAOjC,EAE3J,OADI8B,EAAI,EAAG9B,IAAGiC,EAAK,CAACA,EAAG,GAAK,EAAGjC,EAAE,KAAK,GAC9BiC,EAAG,GAAI,CACX,IAAK,GAAG,IAAK,GAAGjC,EAAIiC,EAAI,MACxB,IAAK,GAAG,OAAAL,EAAE,QAAgB,CAAE,MAAOK,EAAG,GAAI,KAAM,EAAM,EACtD,IAAK,GAAGL,EAAE,QAASE,EAAIG,EAAG,GAAIA,EAAK,CAAC,CAAC,EAAG,SACxC,IAAK,GAAGA,EAAKL,EAAE,IAAI,IAAI,EAAGA,EAAE,KAAK,IAAI,EAAG,SACxC,QACI,GAAM5B,EAAI4B,EAAE,KAAM,EAAA5B,EAAIA,EAAE,OAAS,GAAKA,EAAEA,EAAE,OAAS,MAAQiC,EAAG,KAAO,GAAKA,EAAG,KAAO,GAAI,CAAEL,EAAI,EAAG,QAAU,CAC3G,GAAIK,EAAG,KAAO,IAAM,CAACjC,GAAMiC,EAAG,GAAKjC,EAAE,IAAMiC,EAAG,GAAKjC,EAAE,IAAM,CAAE4B,EAAE,MAAQK,EAAG,GAAI,KAAO,CACrF,GAAIA,EAAG,KAAO,GAAKL,EAAE,MAAQ5B,EAAE,GAAI,CAAE4B,EAAE,MAAQ5B,EAAE,GAAIA,EAAIiC,EAAI,KAAO,CACpE,GAAIjC,GAAK4B,EAAE,MAAQ5B,EAAE,GAAI,CAAE4B,EAAE,MAAQ5B,EAAE,GAAI4B,EAAE,IAAI,KAAKK,CAAE,EAAG,KAAO,CAC9DjC,EAAE,IAAI4B,EAAE,IAAI,IAAI,EACpBA,EAAE,KAAK,IAAI,EAAG,QACtB,CACAK,EAAKN,EAAK,KAAKZ,EAASa,CAAC,CAC7B,OAASzB,EAAP,CAAY8B,EAAK,CAAC,EAAG9B,CAAC,EAAG2B,EAAI,CAAG,QAAE,CAAUD,EAAI7B,EAAI,CAAG,CACzD,GAAIiC,EAAG,GAAK,EAAG,MAAMA,EAAG,GAAI,MAAO,CAAE,MAAOA,EAAG,GAAKA,EAAG,GAAK,OAAQ,KAAM,EAAK,CACnF,CACJ,EAEA7D,GAAe,SAAS8D,EAAG,EAAG,CAC1B,QAASpC,KAAKoC,EAAOpC,IAAM,WAAa,CAAC,OAAO,UAAU,eAAe,KAAK,EAAGA,CAAC,GAAGX,GAAgB,EAAG+C,EAAGpC,CAAC,CAChH,EAEAX,GAAkB,OAAO,OAAU,SAASgD,EAAGD,EAAGE,EAAGC,EAAI,CACjDA,IAAO,SAAWA,EAAKD,GAC3B,OAAO,eAAeD,EAAGE,EAAI,CAAE,WAAY,GAAM,IAAK,UAAW,CAAE,OAAOH,EAAEE,EAAI,CAAE,CAAC,CACvF,EAAM,SAASD,EAAGD,EAAGE,EAAGC,EAAI,CACpBA,IAAO,SAAWA,EAAKD,GAC3BD,EAAEE,GAAMH,EAAEE,EACd,EAEA/D,GAAW,SAAU8D,EAAG,CACpB,IAAIlC,EAAI,OAAO,QAAW,YAAc,OAAO,SAAUiC,EAAIjC,GAAKkC,EAAElC,GAAIG,EAAI,EAC5E,GAAI8B,EAAG,OAAOA,EAAE,KAAKC,CAAC,EACtB,GAAIA,GAAK,OAAOA,EAAE,QAAW,SAAU,MAAO,CAC1C,KAAM,UAAY,CACd,OAAIA,GAAK/B,GAAK+B,EAAE,SAAQA,EAAI,QACrB,CAAE,MAAOA,GAAKA,EAAE/B,KAAM,KAAM,CAAC+B,CAAE,CAC1C,CACJ,EACA,MAAM,IAAI,UAAUlC,EAAI,0BAA4B,iCAAiC,CACzF,EAEA3B,GAAS,SAAU6D,EAAGjC,EAAG,CACrB,IAAIgC,EAAI,OAAO,QAAW,YAAcC,EAAE,OAAO,UACjD,GAAI,CAACD,EAAG,OAAOC,EACf,IAAI/B,EAAI8B,EAAE,KAAKC,CAAC,EAAGzB,EAAG4B,EAAK,CAAC,EAAGnC,EAC/B,GAAI,CACA,MAAQD,IAAM,QAAUA,KAAM,IAAM,EAAEQ,EAAIN,EAAE,KAAK,GAAG,MAAMkC,EAAG,KAAK5B,EAAE,KAAK,CAC7E,OACO6B,EAAP,CAAgBpC,EAAI,CAAE,MAAOoC,CAAM,CAAG,QACtC,CACI,GAAI,CACI7B,GAAK,CAACA,EAAE,OAASwB,EAAI9B,EAAE,SAAY8B,EAAE,KAAK9B,CAAC,CACnD,QACA,CAAU,GAAID,EAAG,MAAMA,EAAE,KAAO,CACpC,CACA,OAAOmC,CACX,EAGA/D,GAAW,UAAY,CACnB,QAAS+D,EAAK,CAAC,EAAGlC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAC3CkC,EAAKA,EAAG,OAAOhE,GAAO,UAAU8B,EAAE,CAAC,EACvC,OAAOkC,CACX,EAGA9D,GAAiB,UAAY,CACzB,QAASyB,EAAI,EAAGG,EAAI,EAAGoC,EAAK,UAAU,OAAQpC,EAAIoC,EAAIpC,IAAKH,GAAK,UAAUG,GAAG,OAC7E,QAASM,EAAI,MAAMT,CAAC,EAAGmC,EAAI,EAAGhC,EAAI,EAAGA,EAAIoC,EAAIpC,IACzC,QAASqC,EAAI,UAAUrC,GAAIsC,EAAI,EAAGC,EAAKF,EAAE,OAAQC,EAAIC,EAAID,IAAKN,IAC1D1B,EAAE0B,GAAKK,EAAEC,GACjB,OAAOhC,CACX,EAEAjC,GAAgB,SAAUmE,EAAIC,EAAMC,EAAM,CACtC,GAAIA,GAAQ,UAAU,SAAW,EAAG,QAAS1C,EAAI,EAAG2C,EAAIF,EAAK,OAAQP,EAAIlC,EAAI2C,EAAG3C,KACxEkC,GAAM,EAAElC,KAAKyC,MACRP,IAAIA,EAAK,MAAM,UAAU,MAAM,KAAKO,EAAM,EAAGzC,CAAC,GACnDkC,EAAGlC,GAAKyC,EAAKzC,IAGrB,OAAOwC,EAAG,OAAON,GAAM,MAAM,UAAU,MAAM,KAAKO,CAAI,CAAC,CAC3D,EAEAnE,GAAU,SAAUe,EAAG,CACnB,OAAO,gBAAgBf,IAAW,KAAK,EAAIe,EAAG,MAAQ,IAAIf,GAAQe,CAAC,CACvE,EAEAd,GAAmB,SAAUoC,EAASC,EAAYE,EAAW,CACzD,GAAI,CAAC,OAAO,cAAe,MAAM,IAAI,UAAU,sCAAsC,EACrF,IAAIa,EAAIb,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,EAAGZ,EAAG4C,EAAI,CAAC,EAC5D,OAAO5C,EAAI,CAAC,EAAG4B,EAAK,MAAM,EAAGA,EAAK,OAAO,EAAGA,EAAK,QAAQ,EAAG5B,EAAE,OAAO,eAAiB,UAAY,CAAE,OAAO,IAAM,EAAGA,EACpH,SAAS4B,EAAK9B,EAAG,CAAM6B,EAAE7B,KAAIE,EAAEF,GAAK,SAAUT,EAAG,CAAE,OAAO,IAAI,QAAQ,SAAUgD,EAAG5C,EAAG,CAAEmD,EAAE,KAAK,CAAC9C,EAAGT,EAAGgD,EAAG5C,CAAC,CAAC,EAAI,GAAKoD,EAAO/C,EAAGT,CAAC,CAAG,CAAC,CAAG,EAAG,CACzI,SAASwD,EAAO/C,EAAGT,EAAG,CAAE,GAAI,CAAE+B,EAAKO,EAAE7B,GAAGT,CAAC,CAAC,CAAG,OAASU,EAAP,CAAY+C,EAAOF,EAAE,GAAG,GAAI7C,CAAC,CAAG,CAAE,CACjF,SAASqB,EAAKd,EAAG,CAAEA,EAAE,iBAAiBhC,GAAU,QAAQ,QAAQgC,EAAE,MAAM,CAAC,EAAE,KAAKyC,EAAS7B,CAAM,EAAI4B,EAAOF,EAAE,GAAG,GAAItC,CAAC,CAAI,CACxH,SAASyC,EAAQ/B,EAAO,CAAE6B,EAAO,OAAQ7B,CAAK,CAAG,CACjD,SAASE,EAAOF,EAAO,CAAE6B,EAAO,QAAS7B,CAAK,CAAG,CACjD,SAAS8B,EAAOrB,EAAGpC,EAAG,CAAMoC,EAAEpC,CAAC,EAAGuD,EAAE,MAAM,EAAGA,EAAE,QAAQC,EAAOD,EAAE,GAAG,GAAIA,EAAE,GAAG,EAAE,CAAG,CACrF,EAEApE,GAAmB,SAAUuD,EAAG,CAC5B,IAAI/B,EAAGN,EACP,OAAOM,EAAI,CAAC,EAAG4B,EAAK,MAAM,EAAGA,EAAK,QAAS,SAAU7B,EAAG,CAAE,MAAMA,CAAG,CAAC,EAAG6B,EAAK,QAAQ,EAAG5B,EAAE,OAAO,UAAY,UAAY,CAAE,OAAO,IAAM,EAAGA,EAC1I,SAAS4B,EAAK9B,EAAG2B,EAAG,CAAEzB,EAAEF,GAAKiC,EAAEjC,GAAK,SAAUT,EAAG,CAAE,OAAQK,EAAI,CAACA,GAAK,CAAE,MAAOpB,GAAQyD,EAAEjC,GAAGT,CAAC,CAAC,EAAG,KAAMS,IAAM,QAAS,EAAI2B,EAAIA,EAAEpC,CAAC,EAAIA,CAAG,EAAIoC,CAAG,CAClJ,EAEAhD,GAAgB,SAAUsD,EAAG,CACzB,GAAI,CAAC,OAAO,cAAe,MAAM,IAAI,UAAU,sCAAsC,EACrF,IAAID,EAAIC,EAAE,OAAO,eAAgB,EACjC,OAAOD,EAAIA,EAAE,KAAKC,CAAC,GAAKA,EAAI,OAAO9D,IAAa,WAAaA,GAAS8D,CAAC,EAAIA,EAAE,OAAO,UAAU,EAAG,EAAI,CAAC,EAAGH,EAAK,MAAM,EAAGA,EAAK,OAAO,EAAGA,EAAK,QAAQ,EAAG,EAAE,OAAO,eAAiB,UAAY,CAAE,OAAO,IAAM,EAAG,GAC9M,SAASA,EAAK9B,EAAG,CAAE,EAAEA,GAAKiC,EAAEjC,IAAM,SAAUT,EAAG,CAAE,OAAO,IAAI,QAAQ,SAAU4B,EAASC,EAAQ,CAAE7B,EAAI0C,EAAEjC,GAAGT,CAAC,EAAGyD,EAAO7B,EAASC,EAAQ7B,EAAE,KAAMA,EAAE,KAAK,CAAG,CAAC,CAAG,CAAG,CAC/J,SAASyD,EAAO7B,EAASC,EAAQ1B,EAAGH,EAAG,CAAE,QAAQ,QAAQA,CAAC,EAAE,KAAK,SAASA,EAAG,CAAE4B,EAAQ,CAAE,MAAO5B,EAAG,KAAMG,CAAE,CAAC,CAAG,EAAG0B,CAAM,CAAG,CAC/H,EAEAxC,GAAuB,SAAUsE,EAAQC,EAAK,CAC1C,OAAI,OAAO,eAAkB,OAAO,eAAeD,EAAQ,MAAO,CAAE,MAAOC,CAAI,CAAC,EAAYD,EAAO,IAAMC,EAClGD,CACX,EAEA,IAAIE,EAAqB,OAAO,OAAU,SAASnB,EAAG1C,EAAG,CACrD,OAAO,eAAe0C,EAAG,UAAW,CAAE,WAAY,GAAM,MAAO1C,CAAE,CAAC,CACtE,EAAK,SAAS0C,EAAG1C,EAAG,CAChB0C,EAAE,QAAa1C,CACnB,EAEAV,GAAe,SAAUwE,EAAK,CAC1B,GAAIA,GAAOA,EAAI,WAAY,OAAOA,EAClC,IAAI7B,EAAS,CAAC,EACd,GAAI6B,GAAO,KAAM,QAASnB,KAAKmB,EAASnB,IAAM,WAAa,OAAO,UAAU,eAAe,KAAKmB,EAAKnB,CAAC,GAAGjD,GAAgBuC,EAAQ6B,EAAKnB,CAAC,EACvI,OAAAkB,EAAmB5B,EAAQ6B,CAAG,EACvB7B,CACX,EAEA1C,GAAkB,SAAUuE,EAAK,CAC7B,OAAQA,GAAOA,EAAI,WAAcA,EAAM,CAAE,QAAWA,CAAI,CAC5D,EAEAtE,GAAyB,SAAUuE,EAAUC,EAAOC,EAAM7B,EAAG,CACzD,GAAI6B,IAAS,KAAO,CAAC7B,EAAG,MAAM,IAAI,UAAU,+CAA+C,EAC3F,GAAI,OAAO4B,GAAU,WAAaD,IAAaC,GAAS,CAAC5B,EAAI,CAAC4B,EAAM,IAAID,CAAQ,EAAG,MAAM,IAAI,UAAU,0EAA0E,EACjL,OAAOE,IAAS,IAAM7B,EAAI6B,IAAS,IAAM7B,EAAE,KAAK2B,CAAQ,EAAI3B,EAAIA,EAAE,MAAQ4B,EAAM,IAAID,CAAQ,CAChG,EAEAtE,GAAyB,SAAUsE,EAAUC,EAAOrC,EAAOsC,EAAM7B,EAAG,CAChE,GAAI6B,IAAS,IAAK,MAAM,IAAI,UAAU,gCAAgC,EACtE,GAAIA,IAAS,KAAO,CAAC7B,EAAG,MAAM,IAAI,UAAU,+CAA+C,EAC3F,GAAI,OAAO4B,GAAU,WAAaD,IAAaC,GAAS,CAAC5B,EAAI,CAAC4B,EAAM,IAAID,CAAQ,EAAG,MAAM,IAAI,UAAU,yEAAyE,EAChL,OAAQE,IAAS,IAAM7B,EAAE,KAAK2B,EAAUpC,CAAK,EAAIS,EAAIA,EAAE,MAAQT,EAAQqC,EAAM,IAAID,EAAUpC,CAAK,EAAIA,CACxG,EAEA1B,EAAS,YAAa9B,EAAS,EAC/B8B,EAAS,WAAY7B,EAAQ,EAC7B6B,EAAS,SAAU5B,EAAM,EACzB4B,EAAS,aAAc3B,EAAU,EACjC2B,EAAS,UAAW1B,EAAO,EAC3B0B,EAAS,aAAczB,EAAU,EACjCyB,EAAS,YAAaxB,EAAS,EAC/BwB,EAAS,cAAevB,EAAW,EACnCuB,EAAS,eAAgBtB,EAAY,EACrCsB,EAAS,kBAAmBP,EAAe,EAC3CO,EAAS,WAAYrB,EAAQ,EAC7BqB,EAAS,SAAUpB,EAAM,EACzBoB,EAAS,WAAYnB,EAAQ,EAC7BmB,EAAS,iBAAkBlB,EAAc,EACzCkB,EAAS,gBAAiBjB,EAAa,EACvCiB,EAAS,UAAWhB,EAAO,EAC3BgB,EAAS,mBAAoBf,EAAgB,EAC7Ce,EAAS,mBAAoBd,EAAgB,EAC7Cc,EAAS,gBAAiBb,EAAa,EACvCa,EAAS,uBAAwBZ,EAAoB,EACrDY,EAAS,eAAgBX,EAAY,EACrCW,EAAS,kBAAmBV,EAAe,EAC3CU,EAAS,yBAA0BT,EAAsB,EACzDS,EAAS,yBAA0BR,EAAsB,CAC7D,CAAC,ICjTD,IAAAyE,GAAAC,GAAA,CAAAC,GAAAC,KAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMC,SAA0CC,EAAMC,EAAS,CACtD,OAAOH,IAAY,UAAY,OAAOC,IAAW,SACnDA,GAAO,QAAUE,EAAQ,EAClB,OAAO,QAAW,YAAc,OAAO,IAC9C,OAAO,CAAC,EAAGA,CAAO,EACX,OAAOH,IAAY,SAC1BA,GAAQ,YAAiBG,EAAQ,EAEjCD,EAAK,YAAiBC,EAAQ,CAChC,GAAGH,GAAM,UAAW,CACpB,OAAiB,UAAW,CAClB,IAAII,EAAuB,CAE/B,IACC,SAASC,EAAyBC,EAAqBC,EAAqB,CAEnF,aAGAA,EAAoB,EAAED,EAAqB,CACzC,QAAW,UAAW,CAAE,OAAqBE,EAAW,CAC1D,CAAC,EAGD,IAAIC,EAAeF,EAAoB,GAAG,EACtCG,EAAoCH,EAAoB,EAAEE,CAAY,EAEtEE,EAASJ,EAAoB,GAAG,EAChCK,EAA8BL,EAAoB,EAAEI,CAAM,EAE1DE,EAAaN,EAAoB,GAAG,EACpCO,EAA8BP,EAAoB,EAAEM,CAAU,EAOlE,SAASE,EAAQC,EAAM,CACrB,GAAI,CACF,OAAO,SAAS,YAAYA,CAAI,CAClC,OAASC,EAAP,CACA,MAAO,EACT,CACF,CAUA,IAAIC,EAAqB,SAA4BC,EAAQ,CAC3D,IAAIC,EAAeN,EAAe,EAAEK,CAAM,EAC1C,OAAAJ,EAAQ,KAAK,EACNK,CACT,EAEiCC,EAAeH,EAOhD,SAASI,EAAkBC,EAAO,CAChC,IAAIC,EAAQ,SAAS,gBAAgB,aAAa,KAAK,IAAM,MACzDC,EAAc,SAAS,cAAc,UAAU,EAEnDA,EAAY,MAAM,SAAW,OAE7BA,EAAY,MAAM,OAAS,IAC3BA,EAAY,MAAM,QAAU,IAC5BA,EAAY,MAAM,OAAS,IAE3BA,EAAY,MAAM,SAAW,WAC7BA,EAAY,MAAMD,EAAQ,QAAU,QAAU,UAE9C,IAAIE,EAAY,OAAO,aAAe,SAAS,gBAAgB,UAC/D,OAAAD,EAAY,MAAM,IAAM,GAAG,OAAOC,EAAW,IAAI,EACjDD,EAAY,aAAa,WAAY,EAAE,EACvCA,EAAY,MAAQF,EACbE,CACT,CAYA,IAAIE,EAAiB,SAAwBJ,EAAOK,EAAS,CAC3D,IAAIH,EAAcH,EAAkBC,CAAK,EACzCK,EAAQ,UAAU,YAAYH,CAAW,EACzC,IAAIL,EAAeN,EAAe,EAAEW,CAAW,EAC/C,OAAAV,EAAQ,MAAM,EACdU,EAAY,OAAO,EACZL,CACT,EASIS,EAAsB,SAA6BV,EAAQ,CAC7D,IAAIS,EAAU,UAAU,OAAS,GAAK,UAAU,KAAO,OAAY,UAAU,GAAK,CAChF,UAAW,SAAS,IACtB,EACIR,EAAe,GAEnB,OAAI,OAAOD,GAAW,SACpBC,EAAeO,EAAeR,EAAQS,CAAO,EACpCT,aAAkB,kBAAoB,CAAC,CAAC,OAAQ,SAAU,MAAO,MAAO,UAAU,EAAE,SAASA,GAAW,KAA4B,OAASA,EAAO,IAAI,EAEjKC,EAAeO,EAAeR,EAAO,MAAOS,CAAO,GAEnDR,EAAeN,EAAe,EAAEK,CAAM,EACtCJ,EAAQ,MAAM,GAGTK,CACT,EAEiCU,EAAgBD,EAEjD,SAASE,EAAQC,EAAK,CAA6B,OAAI,OAAO,QAAW,YAAc,OAAO,OAAO,UAAa,SAAYD,EAAU,SAAiBC,EAAK,CAAE,OAAO,OAAOA,CAAK,EAAYD,EAAU,SAAiBC,EAAK,CAAE,OAAOA,GAAO,OAAO,QAAW,YAAcA,EAAI,cAAgB,QAAUA,IAAQ,OAAO,UAAY,SAAW,OAAOA,CAAK,EAAYD,EAAQC,CAAG,CAAG,CAUzX,IAAIC,GAAyB,UAAkC,CAC7D,IAAIL,EAAU,UAAU,OAAS,GAAK,UAAU,KAAO,OAAY,UAAU,GAAK,CAAC,EAE/EM,EAAkBN,EAAQ,OAC1BO,EAASD,IAAoB,OAAS,OAASA,EAC/CE,EAAYR,EAAQ,UACpBT,EAASS,EAAQ,OACjBS,GAAOT,EAAQ,KAEnB,GAAIO,IAAW,QAAUA,IAAW,MAClC,MAAM,IAAI,MAAM,oDAAoD,EAItE,GAAIhB,IAAW,OACb,GAAIA,GAAUY,EAAQZ,CAAM,IAAM,UAAYA,EAAO,WAAa,EAAG,CACnE,GAAIgB,IAAW,QAAUhB,EAAO,aAAa,UAAU,EACrD,MAAM,IAAI,MAAM,mFAAmF,EAGrG,GAAIgB,IAAW,QAAUhB,EAAO,aAAa,UAAU,GAAKA,EAAO,aAAa,UAAU,GACxF,MAAM,IAAI,MAAM,uGAAwG,CAE5H,KACE,OAAM,IAAI,MAAM,6CAA6C,EAKjE,GAAIkB,GACF,OAAOP,EAAaO,GAAM,CACxB,UAAWD,CACb,CAAC,EAIH,GAAIjB,EACF,OAAOgB,IAAW,MAAQd,EAAYF,CAAM,EAAIW,EAAaX,EAAQ,CACnE,UAAWiB,CACb,CAAC,CAEL,EAEiCE,GAAmBL,GAEpD,SAASM,GAAiBP,EAAK,CAA6B,OAAI,OAAO,QAAW,YAAc,OAAO,OAAO,UAAa,SAAYO,GAAmB,SAAiBP,EAAK,CAAE,OAAO,OAAOA,CAAK,EAAYO,GAAmB,SAAiBP,EAAK,CAAE,OAAOA,GAAO,OAAO,QAAW,YAAcA,EAAI,cAAgB,QAAUA,IAAQ,OAAO,UAAY,SAAW,OAAOA,CAAK,EAAYO,GAAiBP,CAAG,CAAG,CAE7Z,SAASQ,GAAgBC,EAAUC,EAAa,CAAE,GAAI,EAAED,aAAoBC,GAAgB,MAAM,IAAI,UAAU,mCAAmC,CAAK,CAExJ,SAASC,GAAkBxB,EAAQyB,EAAO,CAAE,QAASC,EAAI,EAAGA,EAAID,EAAM,OAAQC,IAAK,CAAE,IAAIC,EAAaF,EAAMC,GAAIC,EAAW,WAAaA,EAAW,YAAc,GAAOA,EAAW,aAAe,GAAU,UAAWA,IAAYA,EAAW,SAAW,IAAM,OAAO,eAAe3B,EAAQ2B,EAAW,IAAKA,CAAU,CAAG,CAAE,CAE5T,SAASC,GAAaL,EAAaM,EAAYC,EAAa,CAAE,OAAID,GAAYL,GAAkBD,EAAY,UAAWM,CAAU,EAAOC,GAAaN,GAAkBD,EAAaO,CAAW,EAAUP,CAAa,CAEtN,SAASQ,GAAUC,EAAUC,EAAY,CAAE,GAAI,OAAOA,GAAe,YAAcA,IAAe,KAAQ,MAAM,IAAI,UAAU,oDAAoD,EAAKD,EAAS,UAAY,OAAO,OAAOC,GAAcA,EAAW,UAAW,CAAE,YAAa,CAAE,MAAOD,EAAU,SAAU,GAAM,aAAc,EAAK,CAAE,CAAC,EAAOC,GAAYC,GAAgBF,EAAUC,CAAU,CAAG,CAEhY,SAASC,GAAgBC,EAAGC,EAAG,CAAE,OAAAF,GAAkB,OAAO,gBAAkB,SAAyBC,EAAGC,EAAG,CAAE,OAAAD,EAAE,UAAYC,EAAUD,CAAG,EAAUD,GAAgBC,EAAGC,CAAC,CAAG,CAEzK,SAASC,GAAaC,EAAS,CAAE,IAAIC,EAA4BC,GAA0B,EAAG,OAAO,UAAgC,CAAE,IAAIC,EAAQC,GAAgBJ,CAAO,EAAGK,EAAQ,GAAIJ,EAA2B,CAAE,IAAIK,EAAYF,GAAgB,IAAI,EAAE,YAAaC,EAAS,QAAQ,UAAUF,EAAO,UAAWG,CAAS,CAAG,MAASD,EAASF,EAAM,MAAM,KAAM,SAAS,EAAK,OAAOI,GAA2B,KAAMF,CAAM,CAAG,CAAG,CAExa,SAASE,GAA2BC,EAAMC,EAAM,CAAE,OAAIA,IAAS3B,GAAiB2B,CAAI,IAAM,UAAY,OAAOA,GAAS,YAAsBA,EAAeC,GAAuBF,CAAI,CAAG,CAEzL,SAASE,GAAuBF,EAAM,CAAE,GAAIA,IAAS,OAAU,MAAM,IAAI,eAAe,2DAA2D,EAAK,OAAOA,CAAM,CAErK,SAASN,IAA4B,CAA0E,GAApE,OAAO,SAAY,aAAe,CAAC,QAAQ,WAA6B,QAAQ,UAAU,KAAM,MAAO,GAAO,GAAI,OAAO,OAAU,WAAY,MAAO,GAAM,GAAI,CAAE,YAAK,UAAU,SAAS,KAAK,QAAQ,UAAU,KAAM,CAAC,EAAG,UAAY,CAAC,CAAC,CAAC,EAAU,EAAM,OAASS,EAAP,CAAY,MAAO,EAAO,CAAE,CAEnU,SAASP,GAAgBP,EAAG,CAAE,OAAAO,GAAkB,OAAO,eAAiB,OAAO,eAAiB,SAAyBP,EAAG,CAAE,OAAOA,EAAE,WAAa,OAAO,eAAeA,CAAC,CAAG,EAAUO,GAAgBP,CAAC,CAAG,CAa5M,SAASe,GAAkBC,EAAQC,EAAS,CAC1C,IAAIC,EAAY,kBAAkB,OAAOF,CAAM,EAE/C,GAAI,EAACC,EAAQ,aAAaC,CAAS,EAInC,OAAOD,EAAQ,aAAaC,CAAS,CACvC,CAOA,IAAIC,GAAyB,SAAUC,EAAU,CAC/CxB,GAAUuB,EAAWC,CAAQ,EAE7B,IAAIC,EAASnB,GAAaiB,CAAS,EAMnC,SAASA,EAAUG,EAAShD,EAAS,CACnC,IAAIiD,EAEJ,OAAArC,GAAgB,KAAMiC,CAAS,EAE/BI,EAAQF,EAAO,KAAK,IAAI,EAExBE,EAAM,eAAejD,CAAO,EAE5BiD,EAAM,YAAYD,CAAO,EAElBC,CACT,CAQA,OAAA9B,GAAa0B,EAAW,CAAC,CACvB,IAAK,iBACL,MAAO,UAA0B,CAC/B,IAAI7C,EAAU,UAAU,OAAS,GAAK,UAAU,KAAO,OAAY,UAAU,GAAK,CAAC,EACnF,KAAK,OAAS,OAAOA,EAAQ,QAAW,WAAaA,EAAQ,OAAS,KAAK,cAC3E,KAAK,OAAS,OAAOA,EAAQ,QAAW,WAAaA,EAAQ,OAAS,KAAK,cAC3E,KAAK,KAAO,OAAOA,EAAQ,MAAS,WAAaA,EAAQ,KAAO,KAAK,YACrE,KAAK,UAAYW,GAAiBX,EAAQ,SAAS,IAAM,SAAWA,EAAQ,UAAY,SAAS,IACnG,CAMF,EAAG,CACD,IAAK,cACL,MAAO,SAAqBgD,EAAS,CACnC,IAAIE,EAAS,KAEb,KAAK,SAAWlE,EAAe,EAAEgE,EAAS,QAAS,SAAUR,GAAG,CAC9D,OAAOU,EAAO,QAAQV,EAAC,CACzB,CAAC,CACH,CAMF,EAAG,CACD,IAAK,UACL,MAAO,SAAiBA,EAAG,CACzB,IAAIQ,EAAUR,EAAE,gBAAkBA,EAAE,cAChCjC,GAAS,KAAK,OAAOyC,CAAO,GAAK,OACjCvC,GAAOC,GAAgB,CACzB,OAAQH,GACR,UAAW,KAAK,UAChB,OAAQ,KAAK,OAAOyC,CAAO,EAC3B,KAAM,KAAK,KAAKA,CAAO,CACzB,CAAC,EAED,KAAK,KAAKvC,GAAO,UAAY,QAAS,CACpC,OAAQF,GACR,KAAME,GACN,QAASuC,EACT,eAAgB,UAA0B,CACpCA,GACFA,EAAQ,MAAM,EAGhB,OAAO,aAAa,EAAE,gBAAgB,CACxC,CACF,CAAC,CACH,CAMF,EAAG,CACD,IAAK,gBACL,MAAO,SAAuBA,EAAS,CACrC,OAAOP,GAAkB,SAAUO,CAAO,CAC5C,CAMF,EAAG,CACD,IAAK,gBACL,MAAO,SAAuBA,EAAS,CACrC,IAAIG,EAAWV,GAAkB,SAAUO,CAAO,EAElD,GAAIG,EACF,OAAO,SAAS,cAAcA,CAAQ,CAE1C,CAQF,EAAG,CACD,IAAK,cAML,MAAO,SAAqBH,EAAS,CACnC,OAAOP,GAAkB,OAAQO,CAAO,CAC1C,CAKF,EAAG,CACD,IAAK,UACL,MAAO,UAAmB,CACxB,KAAK,SAAS,QAAQ,CACxB,CACF,CAAC,EAAG,CAAC,CACH,IAAK,OACL,MAAO,SAAczD,EAAQ,CAC3B,IAAIS,EAAU,UAAU,OAAS,GAAK,UAAU,KAAO,OAAY,UAAU,GAAK,CAChF,UAAW,SAAS,IACtB,EACA,OAAOE,EAAaX,EAAQS,CAAO,CACrC,CAOF,EAAG,CACD,IAAK,MACL,MAAO,SAAaT,EAAQ,CAC1B,OAAOE,EAAYF,CAAM,CAC3B,CAOF,EAAG,CACD,IAAK,cACL,MAAO,UAAuB,CAC5B,IAAIgB,EAAS,UAAU,OAAS,GAAK,UAAU,KAAO,OAAY,UAAU,GAAK,CAAC,OAAQ,KAAK,EAC3F6C,EAAU,OAAO7C,GAAW,SAAW,CAACA,CAAM,EAAIA,EAClD8C,GAAU,CAAC,CAAC,SAAS,sBACzB,OAAAD,EAAQ,QAAQ,SAAU7C,GAAQ,CAChC8C,GAAUA,IAAW,CAAC,CAAC,SAAS,sBAAsB9C,EAAM,CAC9D,CAAC,EACM8C,EACT,CACF,CAAC,CAAC,EAEKR,CACT,EAAG/D,EAAqB,CAAE,EAEOF,GAAaiE,EAExC,EAEA,IACC,SAASxE,EAAQ,CAExB,IAAIiF,EAAqB,EAKzB,GAAI,OAAO,SAAY,aAAe,CAAC,QAAQ,UAAU,QAAS,CAC9D,IAAIC,EAAQ,QAAQ,UAEpBA,EAAM,QAAUA,EAAM,iBACNA,EAAM,oBACNA,EAAM,mBACNA,EAAM,kBACNA,EAAM,qBAC1B,CASA,SAASC,EAASb,EAASQ,EAAU,CACjC,KAAOR,GAAWA,EAAQ,WAAaW,GAAoB,CACvD,GAAI,OAAOX,EAAQ,SAAY,YAC3BA,EAAQ,QAAQQ,CAAQ,EAC1B,OAAOR,EAETA,EAAUA,EAAQ,UACtB,CACJ,CAEAtE,EAAO,QAAUmF,CAGX,EAEA,IACC,SAASnF,EAAQoF,EAA0B9E,EAAqB,CAEvE,IAAI6E,EAAU7E,EAAoB,GAAG,EAYrC,SAAS+E,EAAUf,EAASQ,EAAU/D,EAAMuE,EAAUC,EAAY,CAC9D,IAAIC,EAAaC,EAAS,MAAM,KAAM,SAAS,EAE/C,OAAAnB,EAAQ,iBAAiBvD,EAAMyE,EAAYD,CAAU,EAE9C,CACH,QAAS,UAAW,CAChBjB,EAAQ,oBAAoBvD,EAAMyE,EAAYD,CAAU,CAC5D,CACJ,CACJ,CAYA,SAASG,EAASC,EAAUb,EAAU/D,EAAMuE,EAAUC,EAAY,CAE9D,OAAI,OAAOI,EAAS,kBAAqB,WAC9BN,EAAU,MAAM,KAAM,SAAS,EAItC,OAAOtE,GAAS,WAGTsE,EAAU,KAAK,KAAM,QAAQ,EAAE,MAAM,KAAM,SAAS,GAI3D,OAAOM,GAAa,WACpBA,EAAW,SAAS,iBAAiBA,CAAQ,GAI1C,MAAM,UAAU,IAAI,KAAKA,EAAU,SAAUrB,EAAS,CACzD,OAAOe,EAAUf,EAASQ,EAAU/D,EAAMuE,EAAUC,CAAU,CAClE,CAAC,EACL,CAWA,SAASE,EAASnB,EAASQ,EAAU/D,EAAMuE,EAAU,CACjD,OAAO,SAASnB,EAAG,CACfA,EAAE,eAAiBgB,EAAQhB,EAAE,OAAQW,CAAQ,EAEzCX,EAAE,gBACFmB,EAAS,KAAKhB,EAASH,CAAC,CAEhC,CACJ,CAEAnE,EAAO,QAAU0F,CAGX,EAEA,IACC,SAAStF,EAAyBL,EAAS,CAQlDA,EAAQ,KAAO,SAASuB,EAAO,CAC3B,OAAOA,IAAU,QACVA,aAAiB,aACjBA,EAAM,WAAa,CAC9B,EAQAvB,EAAQ,SAAW,SAASuB,EAAO,CAC/B,IAAIP,EAAO,OAAO,UAAU,SAAS,KAAKO,CAAK,EAE/C,OAAOA,IAAU,SACTP,IAAS,qBAAuBA,IAAS,4BACzC,WAAYO,IACZA,EAAM,SAAW,GAAKvB,EAAQ,KAAKuB,EAAM,EAAE,EACvD,EAQAvB,EAAQ,OAAS,SAASuB,EAAO,CAC7B,OAAO,OAAOA,GAAU,UACjBA,aAAiB,MAC5B,EAQAvB,EAAQ,GAAK,SAASuB,EAAO,CACzB,IAAIP,EAAO,OAAO,UAAU,SAAS,KAAKO,CAAK,EAE/C,OAAOP,IAAS,mBACpB,CAGM,EAEA,IACC,SAASf,EAAQoF,EAA0B9E,EAAqB,CAEvE,IAAIsF,EAAKtF,EAAoB,GAAG,EAC5BoF,EAAWpF,EAAoB,GAAG,EAWtC,SAASI,EAAOQ,EAAQH,EAAMuE,EAAU,CACpC,GAAI,CAACpE,GAAU,CAACH,GAAQ,CAACuE,EACrB,MAAM,IAAI,MAAM,4BAA4B,EAGhD,GAAI,CAACM,EAAG,OAAO7E,CAAI,EACf,MAAM,IAAI,UAAU,kCAAkC,EAG1D,GAAI,CAAC6E,EAAG,GAAGN,CAAQ,EACf,MAAM,IAAI,UAAU,mCAAmC,EAG3D,GAAIM,EAAG,KAAK1E,CAAM,EACd,OAAO2E,EAAW3E,EAAQH,EAAMuE,CAAQ,EAEvC,GAAIM,EAAG,SAAS1E,CAAM,EACvB,OAAO4E,EAAe5E,EAAQH,EAAMuE,CAAQ,EAE3C,GAAIM,EAAG,OAAO1E,CAAM,EACrB,OAAO6E,EAAe7E,EAAQH,EAAMuE,CAAQ,EAG5C,MAAM,IAAI,UAAU,2EAA2E,CAEvG,CAWA,SAASO,EAAWG,EAAMjF,EAAMuE,EAAU,CACtC,OAAAU,EAAK,iBAAiBjF,EAAMuE,CAAQ,EAE7B,CACH,QAAS,UAAW,CAChBU,EAAK,oBAAoBjF,EAAMuE,CAAQ,CAC3C,CACJ,CACJ,CAWA,SAASQ,EAAeG,EAAUlF,EAAMuE,EAAU,CAC9C,aAAM,UAAU,QAAQ,KAAKW,EAAU,SAASD,EAAM,CAClDA,EAAK,iBAAiBjF,EAAMuE,CAAQ,CACxC,CAAC,EAEM,CACH,QAAS,UAAW,CAChB,MAAM,UAAU,QAAQ,KAAKW,EAAU,SAASD,EAAM,CAClDA,EAAK,oBAAoBjF,EAAMuE,CAAQ,CAC3C,CAAC,CACL,CACJ,CACJ,CAWA,SAASS,EAAejB,EAAU/D,EAAMuE,EAAU,CAC9C,OAAOI,EAAS,SAAS,KAAMZ,EAAU/D,EAAMuE,CAAQ,CAC3D,CAEAtF,EAAO,QAAUU,CAGX,EAEA,IACC,SAASV,EAAQ,CAExB,SAASkG,EAAO5B,EAAS,CACrB,IAAInD,EAEJ,GAAImD,EAAQ,WAAa,SACrBA,EAAQ,MAAM,EAEdnD,EAAemD,EAAQ,cAElBA,EAAQ,WAAa,SAAWA,EAAQ,WAAa,WAAY,CACtE,IAAI6B,EAAa7B,EAAQ,aAAa,UAAU,EAE3C6B,GACD7B,EAAQ,aAAa,WAAY,EAAE,EAGvCA,EAAQ,OAAO,EACfA,EAAQ,kBAAkB,EAAGA,EAAQ,MAAM,MAAM,EAE5C6B,GACD7B,EAAQ,gBAAgB,UAAU,EAGtCnD,EAAemD,EAAQ,KAC3B,KACK,CACGA,EAAQ,aAAa,iBAAiB,GACtCA,EAAQ,MAAM,EAGlB,IAAI8B,EAAY,OAAO,aAAa,EAChCC,EAAQ,SAAS,YAAY,EAEjCA,EAAM,mBAAmB/B,CAAO,EAChC8B,EAAU,gBAAgB,EAC1BA,EAAU,SAASC,CAAK,EAExBlF,EAAeiF,EAAU,SAAS,CACtC,CAEA,OAAOjF,CACX,CAEAnB,EAAO,QAAUkG,CAGX,EAEA,IACC,SAASlG,EAAQ,CAExB,SAASsG,GAAK,CAGd,CAEAA,EAAE,UAAY,CACZ,GAAI,SAAUC,EAAMjB,EAAUkB,EAAK,CACjC,IAAIrC,EAAI,KAAK,IAAM,KAAK,EAAI,CAAC,GAE7B,OAACA,EAAEoC,KAAUpC,EAAEoC,GAAQ,CAAC,IAAI,KAAK,CAC/B,GAAIjB,EACJ,IAAKkB,CACP,CAAC,EAEM,IACT,EAEA,KAAM,SAAUD,EAAMjB,EAAUkB,EAAK,CACnC,IAAIxC,EAAO,KACX,SAASyB,GAAY,CACnBzB,EAAK,IAAIuC,EAAMd,CAAQ,EACvBH,EAAS,MAAMkB,EAAK,SAAS,CAC/B,CAEA,OAAAf,EAAS,EAAIH,EACN,KAAK,GAAGiB,EAAMd,EAAUe,CAAG,CACpC,EAEA,KAAM,SAAUD,EAAM,CACpB,IAAIE,EAAO,CAAC,EAAE,MAAM,KAAK,UAAW,CAAC,EACjCC,IAAW,KAAK,IAAM,KAAK,EAAI,CAAC,IAAIH,IAAS,CAAC,GAAG,MAAM,EACvD3D,EAAI,EACJ+D,EAAMD,EAAO,OAEjB,IAAK9D,EAAGA,EAAI+D,EAAK/D,IACf8D,EAAO9D,GAAG,GAAG,MAAM8D,EAAO9D,GAAG,IAAK6D,CAAI,EAGxC,OAAO,IACT,EAEA,IAAK,SAAUF,EAAMjB,EAAU,CAC7B,IAAInB,EAAI,KAAK,IAAM,KAAK,EAAI,CAAC,GACzByC,EAAOzC,EAAEoC,GACTM,EAAa,CAAC,EAElB,GAAID,GAAQtB,EACV,QAAS1C,EAAI,EAAG+D,EAAMC,EAAK,OAAQhE,EAAI+D,EAAK/D,IACtCgE,EAAKhE,GAAG,KAAO0C,GAAYsB,EAAKhE,GAAG,GAAG,IAAM0C,GAC9CuB,EAAW,KAAKD,EAAKhE,EAAE,EAQ7B,OAACiE,EAAW,OACR1C,EAAEoC,GAAQM,EACV,OAAO1C,EAAEoC,GAEN,IACT,CACF,EAEAvG,EAAO,QAAUsG,EACjBtG,EAAO,QAAQ,YAAcsG,CAGvB,CAEI,EAGIQ,EAA2B,CAAC,EAGhC,SAASxG,EAAoByG,EAAU,CAEtC,GAAGD,EAAyBC,GAC3B,OAAOD,EAAyBC,GAAU,QAG3C,IAAI/G,EAAS8G,EAAyBC,GAAY,CAGjD,QAAS,CAAC,CACX,EAGA,OAAA5G,EAAoB4G,GAAU/G,EAAQA,EAAO,QAASM,CAAmB,EAGlEN,EAAO,OACf,CAIA,OAAC,UAAW,CAEXM,EAAoB,EAAI,SAASN,EAAQ,CACxC,IAAIgH,EAAShH,GAAUA,EAAO,WAC7B,UAAW,CAAE,OAAOA,EAAO,OAAY,EACvC,UAAW,CAAE,OAAOA,CAAQ,EAC7B,OAAAM,EAAoB,EAAE0G,EAAQ,CAAE,EAAGA,CAAO,CAAC,EACpCA,CACR,CACD,EAAE,EAGD,UAAW,CAEX1G,EAAoB,EAAI,SAASP,EAASkH,EAAY,CACrD,QAAQC,KAAOD,EACX3G,EAAoB,EAAE2G,EAAYC,CAAG,GAAK,CAAC5G,EAAoB,EAAEP,EAASmH,CAAG,GAC/E,OAAO,eAAenH,EAASmH,EAAK,CAAE,WAAY,GAAM,IAAKD,EAAWC,EAAK,CAAC,CAGjF,CACD,EAAE,EAGD,UAAW,CACX5G,EAAoB,EAAI,SAASyB,EAAKoF,EAAM,CAAE,OAAO,OAAO,UAAU,eAAe,KAAKpF,EAAKoF,CAAI,CAAG,CACvG,EAAE,EAMK7G,EAAoB,GAAG,CAC/B,EAAG,EACX,OACD,CAAC,ICz3BD,IAAA8G,GAAAC,GAAA,CAAAC,GAAAC,KAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAeA,IAAIC,GAAkB,UAOtBD,GAAO,QAAUE,GAUjB,SAASA,GAAWC,EAAQ,CAC1B,IAAIC,EAAM,GAAKD,EACXE,EAAQJ,GAAgB,KAAKG,CAAG,EAEpC,GAAI,CAACC,EACH,OAAOD,EAGT,IAAIE,EACAC,EAAO,GACPC,EAAQ,EACRC,EAAY,EAEhB,IAAKD,EAAQH,EAAM,MAAOG,EAAQJ,EAAI,OAAQI,IAAS,CACrD,OAAQJ,EAAI,WAAWI,CAAK,EAAG,CAC7B,IAAK,IACHF,EAAS,SACT,MACF,IAAK,IACHA,EAAS,QACT,MACF,IAAK,IACHA,EAAS,QACT,MACF,IAAK,IACHA,EAAS,OACT,MACF,IAAK,IACHA,EAAS,OACT,MACF,QACE,QACJ,CAEIG,IAAcD,IAChBD,GAAQH,EAAI,UAAUK,EAAWD,CAAK,GAGxCC,EAAYD,EAAQ,EACpBD,GAAQD,CACV,CAEA,OAAOG,IAAcD,EACjBD,EAAOH,EAAI,UAAUK,EAAWD,CAAK,EACrCD,CACN,IC7EA,MAAM,UAAU,MAAM,OAAO,eAAe,MAAM,UAAU,OAAO,CAAC,aAAa,GAAG,MAAM,SAASG,GAAG,CAAC,IAAI,EAAE,MAAM,UAAU,EAAE,EAAE,EAAE,OAAO,UAAU,EAAE,EAAE,OAAO,EAAE,MAAM,UAAU,OAAO,KAAK,KAAK,SAASC,EAAEC,EAAE,CAAC,OAAO,MAAM,QAAQA,CAAC,EAAED,EAAE,KAAK,MAAMA,EAAED,EAAE,KAAKE,EAAE,EAAE,CAAC,CAAC,EAAED,EAAE,KAAKC,CAAC,EAAED,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,UAAU,MAAM,KAAK,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,UAAU,SAAS,OAAO,eAAe,MAAM,UAAU,UAAU,CAAC,aAAa,GAAG,MAAM,SAASD,EAAE,CAAC,OAAO,MAAM,UAAU,IAAI,MAAM,KAAK,SAAS,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC,ECuBxf,IAAAG,GAAO,SCvBP,KAAK,QAAQ,KAAK,MAAM,SAAS,EAAEC,EAAE,CAAC,OAAOA,EAAEA,GAAG,CAAC,EAAE,IAAI,QAAQ,SAASC,EAAEC,EAAE,CAAC,IAAIC,EAAE,IAAI,eAAeC,EAAE,CAAC,EAAEC,EAAE,CAAC,EAAEC,EAAE,CAAC,EAAEC,EAAE,UAAU,CAAC,MAAM,CAAC,IAAOJ,EAAE,OAAO,IAAI,IAAjB,EAAoB,WAAWA,EAAE,WAAW,OAAOA,EAAE,OAAO,IAAIA,EAAE,YAAY,KAAK,UAAU,CAAC,OAAO,QAAQ,QAAQA,EAAE,YAAY,CAAC,EAAE,KAAK,UAAU,CAAC,OAAO,QAAQ,QAAQA,EAAE,YAAY,EAAE,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,UAAU,CAAC,OAAO,QAAQ,QAAQ,IAAI,KAAK,CAACA,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAMI,EAAE,QAAQ,CAAC,KAAK,UAAU,CAAC,OAAOH,CAAC,EAAE,QAAQ,UAAU,CAAC,OAAOC,CAAC,EAAE,IAAI,SAASG,EAAE,CAAC,OAAOF,EAAEE,EAAE,YAAY,EAAE,EAAE,IAAI,SAASA,EAAE,CAAC,OAAOA,EAAE,YAAY,IAAIF,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQG,KAAKN,EAAE,KAAKH,EAAE,QAAQ,MAAM,EAAE,EAAE,EAAEG,EAAE,OAAO,UAAU,CAACA,EAAE,sBAAsB,EAAE,QAAQ,+BAA+B,SAASK,EAAER,EAAEC,EAAE,CAACG,EAAE,KAAKJ,EAAEA,EAAE,YAAY,CAAC,EAAEK,EAAE,KAAK,CAACL,EAAEC,CAAC,CAAC,EAAEK,EAAEN,GAAGM,EAAEN,GAAGM,EAAEN,GAAG,IAAIC,EAAEA,CAAC,CAAC,EAAEA,EAAEM,EAAE,CAAC,CAAC,EAAEJ,EAAE,QAAQD,EAAEC,EAAE,gBAA2BH,EAAE,aAAb,UAAyBA,EAAE,QAAQG,EAAE,iBAAiBM,EAAET,EAAE,QAAQS,EAAE,EAAEN,EAAE,KAAKH,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,GDyBj5B,IAAAU,GAAO,SEzBP,IAAAC,GAAkB,WACZ,CACF,UAAAC,GACA,SAAAC,GACA,OAAAC,GACA,WAAAC,GACA,QAAAC,GACA,WAAAC,GACA,UAAAC,GACA,YAAAC,GACA,aAAAC,GACA,gBAAAC,GACA,SAAAC,GACA,OAAAC,EACA,SAAAC,GACA,eAAAC,GACA,cAAAC,EACA,QAAAC,GACA,iBAAAC,GACA,iBAAAC,GACA,cAAAC,GACA,qBAAAC,GACA,aAAAC,GACA,gBAAAC,GACA,uBAAAC,GACA,uBAAAC,EACJ,EAAI,GAAAC,QCtBE,SAAUC,EAAWC,EAAU,CACnC,OAAO,OAAOA,GAAU,UAC1B,CCGM,SAAUC,GAAoBC,EAAgC,CAClE,IAAMC,EAAS,SAACC,EAAa,CAC3B,MAAM,KAAKA,CAAQ,EACnBA,EAAS,MAAQ,IAAI,MAAK,EAAG,KAC/B,EAEMC,EAAWH,EAAWC,CAAM,EAClC,OAAAE,EAAS,UAAY,OAAO,OAAO,MAAM,SAAS,EAClDA,EAAS,UAAU,YAAcA,EAC1BA,CACT,CCDO,IAAMC,GAA+CC,GAC1D,SAACC,EAAM,CACL,OAAA,SAA4CC,EAA0B,CACpED,EAAO,IAAI,EACX,KAAK,QAAUC,EACRA,EAAO,OAAM;EACxBA,EAAO,IAAI,SAACC,EAAKC,EAAC,CAAK,OAAGA,EAAI,EAAC,KAAKD,EAAI,SAAQ,CAAzB,CAA6B,EAAE,KAAK;GAAM,EACzD,GACJ,KAAK,KAAO,sBACZ,KAAK,OAASD,CAChB,CARA,CAQC,ECvBC,SAAUG,GAAaC,EAA6BC,EAAO,CAC/D,GAAID,EAAK,CACP,IAAME,EAAQF,EAAI,QAAQC,CAAI,EAC9B,GAAKC,GAASF,EAAI,OAAOE,EAAO,CAAC,EAErC,CCOA,IAAAC,GAAA,UAAA,CAyBE,SAAAA,EAAoBC,EAA4B,CAA5B,KAAA,gBAAAA,EAdb,KAAA,OAAS,GAER,KAAA,WAAmD,KAMnD,KAAA,YAAqD,IAMV,CAQnD,OAAAD,EAAA,UAAA,YAAA,UAAA,aACME,EAEJ,GAAI,CAAC,KAAK,OAAQ,CAChB,KAAK,OAAS,GAGN,IAAAC,EAAe,KAAI,WAC3B,GAAIA,EAEF,GADA,KAAK,WAAa,KACd,MAAM,QAAQA,CAAU,MAC1B,QAAqBC,EAAAC,GAAAF,CAAU,EAAAG,EAAAF,EAAA,KAAA,EAAA,CAAAE,EAAA,KAAAA,EAAAF,EAAA,KAAA,EAAE,CAA5B,IAAMG,EAAMD,EAAA,MACfC,EAAO,OAAO,IAAI,yGAGpBJ,EAAW,OAAO,IAAI,EAIlB,IAAiBK,EAAqB,KAAI,gBAClD,GAAIC,EAAWD,CAAgB,EAC7B,GAAI,CACFA,EAAgB,QACTE,EAAP,CACAR,EAASQ,aAAaC,GAAsBD,EAAE,OAAS,CAACA,CAAC,EAIrD,IAAAE,EAAgB,KAAI,YAC5B,GAAIA,EAAa,CACf,KAAK,YAAc,SACnB,QAAwBC,EAAAR,GAAAO,CAAW,EAAAE,EAAAD,EAAA,KAAA,EAAA,CAAAC,EAAA,KAAAA,EAAAD,EAAA,KAAA,EAAE,CAAhC,IAAME,EAASD,EAAA,MAClB,GAAI,CACFE,GAAcD,CAAS,QAChBE,EAAP,CACAf,EAASA,GAAM,KAANA,EAAU,CAAA,EACfe,aAAeN,GACjBT,EAAMgB,EAAAA,EAAA,CAAA,EAAAC,EAAOjB,CAAM,CAAA,EAAAiB,EAAKF,EAAI,MAAM,CAAA,EAElCf,EAAO,KAAKe,CAAG,sGAMvB,GAAIf,EACF,MAAM,IAAIS,GAAoBT,CAAM,EAG1C,EAoBAF,EAAA,UAAA,IAAA,SAAIoB,EAAuB,OAGzB,GAAIA,GAAYA,IAAa,KAC3B,GAAI,KAAK,OAGPJ,GAAcI,CAAQ,MACjB,CACL,GAAIA,aAAoBpB,EAAc,CAGpC,GAAIoB,EAAS,QAAUA,EAAS,WAAW,IAAI,EAC7C,OAEFA,EAAS,WAAW,IAAI,GAEzB,KAAK,aAAcC,EAAA,KAAK,eAAW,MAAAA,IAAA,OAAAA,EAAI,CAAA,GAAI,KAAKD,CAAQ,EAG/D,EAOQpB,EAAA,UAAA,WAAR,SAAmBsB,EAAoB,CAC7B,IAAAnB,EAAe,KAAI,WAC3B,OAAOA,IAAemB,GAAW,MAAM,QAAQnB,CAAU,GAAKA,EAAW,SAASmB,CAAM,CAC1F,EASQtB,EAAA,UAAA,WAAR,SAAmBsB,EAAoB,CAC7B,IAAAnB,EAAe,KAAI,WAC3B,KAAK,WAAa,MAAM,QAAQA,CAAU,GAAKA,EAAW,KAAKmB,CAAM,EAAGnB,GAAcA,EAAa,CAACA,EAAYmB,CAAM,EAAIA,CAC5H,EAMQtB,EAAA,UAAA,cAAR,SAAsBsB,EAAoB,CAChC,IAAAnB,EAAe,KAAI,WACvBA,IAAemB,EACjB,KAAK,WAAa,KACT,MAAM,QAAQnB,CAAU,GACjCoB,GAAUpB,EAAYmB,CAAM,CAEhC,EAgBAtB,EAAA,UAAA,OAAA,SAAOoB,EAAsC,CACnC,IAAAR,EAAgB,KAAI,YAC5BA,GAAeW,GAAUX,EAAaQ,CAAQ,EAE1CA,aAAoBpB,GACtBoB,EAAS,cAAc,IAAI,CAE/B,EAlLcpB,EAAA,MAAS,UAAA,CACrB,IAAMwB,EAAQ,IAAIxB,EAClB,OAAAwB,EAAM,OAAS,GACRA,CACT,EAAE,EA+KJxB,GArLA,EAuLO,IAAMyB,GAAqBC,GAAa,MAEzC,SAAUC,GAAeC,EAAU,CACvC,OACEA,aAAiBF,IAChBE,GAAS,WAAYA,GAASC,EAAWD,EAAM,MAAM,GAAKC,EAAWD,EAAM,GAAG,GAAKC,EAAWD,EAAM,WAAW,CAEpH,CAEA,SAASE,GAAcC,EAAwC,CACzDF,EAAWE,CAAS,EACtBA,EAAS,EAETA,EAAU,YAAW,CAEzB,CChNO,IAAMC,GAAuB,CAClC,iBAAkB,KAClB,sBAAuB,KACvB,QAAS,OACT,sCAAuC,GACvC,yBAA0B,ICGrB,IAAMC,GAAmC,CAG9C,WAAA,SAAWC,EAAqBC,EAAgB,SAAEC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,EAAA,GAAA,UAAAA,GACxC,IAAAC,EAAaL,GAAe,SACpC,OAAIK,GAAQ,MAARA,EAAU,WACLA,EAAS,WAAU,MAAnBA,EAAQC,EAAA,CAAYL,EAASC,CAAO,EAAAK,EAAKJ,CAAI,CAAA,CAAA,EAE/C,WAAU,MAAA,OAAAG,EAAA,CAACL,EAASC,CAAO,EAAAK,EAAKJ,CAAI,CAAA,CAAA,CAC7C,EACA,aAAA,SAAaK,EAAM,CACT,IAAAH,EAAaL,GAAe,SACpC,QAAQK,GAAQ,KAAA,OAARA,EAAU,eAAgB,cAAcG,CAAa,CAC/D,EACA,SAAU,QCjBN,SAAUC,GAAqBC,EAAQ,CAC3CC,GAAgB,WAAW,UAAA,CACjB,IAAAC,EAAqBC,GAAM,iBACnC,GAAID,EAEFA,EAAiBF,CAAG,MAGpB,OAAMA,CAEV,CAAC,CACH,CCtBM,SAAUI,IAAI,CAAK,CCMlB,IAAMC,GAAyB,UAAA,CAAM,OAAAC,GAAmB,IAAK,OAAW,MAAS,CAA5C,EAAsE,EAO5G,SAAUC,GAAkBC,EAAU,CAC1C,OAAOF,GAAmB,IAAK,OAAWE,CAAK,CACjD,CAOM,SAAUC,GAAoBC,EAAQ,CAC1C,OAAOJ,GAAmB,IAAKI,EAAO,MAAS,CACjD,CAQM,SAAUJ,GAAmBK,EAAuBD,EAAYF,EAAU,CAC9E,MAAO,CACL,KAAIG,EACJ,MAAKD,EACL,MAAKF,EAET,CCrCA,IAAII,GAAuD,KASrD,SAAUC,GAAaC,EAAc,CACzC,GAAIC,GAAO,sCAAuC,CAChD,IAAMC,EAAS,CAACJ,GAKhB,GAJII,IACFJ,GAAU,CAAE,YAAa,GAAO,MAAO,IAAI,GAE7CE,EAAE,EACEE,EAAQ,CACJ,IAAAC,EAAyBL,GAAvBM,EAAWD,EAAA,YAAEE,EAAKF,EAAA,MAE1B,GADAL,GAAU,KACNM,EACF,MAAMC,QAMVL,EAAE,CAEN,CAMM,SAAUM,GAAaC,EAAQ,CAC/BN,GAAO,uCAAyCH,KAClDA,GAAQ,YAAc,GACtBA,GAAQ,MAAQS,EAEpB,CCrBA,IAAAC,GAAA,SAAAC,EAAA,CAAmCC,GAAAF,EAAAC,CAAA,EA6BjC,SAAAD,EAAYG,EAA6C,CAAzD,IAAAC,EACEH,EAAA,KAAA,IAAA,GAAO,KATC,OAAAG,EAAA,UAAqB,GAUzBD,GACFC,EAAK,YAAcD,EAGfE,GAAeF,CAAW,GAC5BA,EAAY,IAAIC,CAAI,GAGtBA,EAAK,YAAcE,IAEvB,CAzBO,OAAAN,EAAA,OAAP,SAAiBO,EAAwBC,EAA2BC,EAAqB,CACvF,OAAO,IAAIC,GAAeH,EAAMC,EAAOC,CAAQ,CACjD,EAgCAT,EAAA,UAAA,KAAA,SAAKW,EAAS,CACR,KAAK,UACPC,GAA0BC,GAAiBF,CAAK,EAAG,IAAI,EAEvD,KAAK,MAAMA,CAAM,CAErB,EASAX,EAAA,UAAA,MAAA,SAAMc,EAAS,CACT,KAAK,UACPF,GAA0BG,GAAkBD,CAAG,EAAG,IAAI,GAEtD,KAAK,UAAY,GACjB,KAAK,OAAOA,CAAG,EAEnB,EAQAd,EAAA,UAAA,SAAA,UAAA,CACM,KAAK,UACPY,GAA0BI,GAAuB,IAAI,GAErD,KAAK,UAAY,GACjB,KAAK,UAAS,EAElB,EAEAhB,EAAA,UAAA,YAAA,UAAA,CACO,KAAK,SACR,KAAK,UAAY,GACjBC,EAAA,UAAM,YAAW,KAAA,IAAA,EACjB,KAAK,YAAc,KAEvB,EAEUD,EAAA,UAAA,MAAV,SAAgBW,EAAQ,CACtB,KAAK,YAAY,KAAKA,CAAK,CAC7B,EAEUX,EAAA,UAAA,OAAV,SAAiBc,EAAQ,CACvB,GAAI,CACF,KAAK,YAAY,MAAMA,CAAG,UAE1B,KAAK,YAAW,EAEpB,EAEUd,EAAA,UAAA,UAAV,UAAA,CACE,GAAI,CACF,KAAK,YAAY,SAAQ,UAEzB,KAAK,YAAW,EAEpB,EACFA,CAAA,EApHmCiB,EAAY,EA2H/C,IAAMC,GAAQ,SAAS,UAAU,KAEjC,SAASC,GAAyCC,EAAQC,EAAY,CACpE,OAAOH,GAAM,KAAKE,EAAIC,CAAO,CAC/B,CAMA,IAAAC,GAAA,UAAA,CACE,SAAAA,EAAoBC,EAAqC,CAArC,KAAA,gBAAAA,CAAwC,CAE5D,OAAAD,EAAA,UAAA,KAAA,SAAKE,EAAQ,CACH,IAAAD,EAAoB,KAAI,gBAChC,GAAIA,EAAgB,KAClB,GAAI,CACFA,EAAgB,KAAKC,CAAK,QACnBC,EAAP,CACAC,GAAqBD,CAAK,EAGhC,EAEAH,EAAA,UAAA,MAAA,SAAMK,EAAQ,CACJ,IAAAJ,EAAoB,KAAI,gBAChC,GAAIA,EAAgB,MAClB,GAAI,CACFA,EAAgB,MAAMI,CAAG,QAClBF,EAAP,CACAC,GAAqBD,CAAK,OAG5BC,GAAqBC,CAAG,CAE5B,EAEAL,EAAA,UAAA,SAAA,UAAA,CACU,IAAAC,EAAoB,KAAI,gBAChC,GAAIA,EAAgB,SAClB,GAAI,CACFA,EAAgB,SAAQ,QACjBE,EAAP,CACAC,GAAqBD,CAAK,EAGhC,EACFH,CAAA,EArCA,EAuCAM,GAAA,SAAAC,EAAA,CAAuCC,GAAAF,EAAAC,CAAA,EACrC,SAAAD,EACEG,EACAN,EACAO,EAA8B,CAHhC,IAAAC,EAKEJ,EAAA,KAAA,IAAA,GAAO,KAEHN,EACJ,GAAIW,EAAWH,CAAc,GAAK,CAACA,EAGjCR,EAAkB,CAChB,KAAOQ,GAAc,KAAdA,EAAkB,OACzB,MAAON,GAAK,KAALA,EAAS,OAChB,SAAUO,GAAQ,KAARA,EAAY,YAEnB,CAEL,IAAIG,EACAF,GAAQG,GAAO,0BAIjBD,EAAU,OAAO,OAAOJ,CAAc,EACtCI,EAAQ,YAAc,UAAA,CAAM,OAAAF,EAAK,YAAW,CAAhB,EAC5BV,EAAkB,CAChB,KAAMQ,EAAe,MAAQZ,GAAKY,EAAe,KAAMI,CAAO,EAC9D,MAAOJ,EAAe,OAASZ,GAAKY,EAAe,MAAOI,CAAO,EACjE,SAAUJ,EAAe,UAAYZ,GAAKY,EAAe,SAAUI,CAAO,IAI5EZ,EAAkBQ,EAMtB,OAAAE,EAAK,YAAc,IAAIX,GAAiBC,CAAe,GACzD,CACF,OAAAK,CAAA,EAzCuCS,EAAU,EA2CjD,SAASC,GAAqBC,EAAU,CAClCC,GAAO,sCACTC,GAAaF,CAAK,EAIlBG,GAAqBH,CAAK,CAE9B,CAQA,SAASI,GAAoBC,EAAQ,CACnC,MAAMA,CACR,CAOA,SAASC,GAA0BC,EAA2CC,EAA2B,CAC/F,IAAAC,EAA0BR,GAAM,sBACxCQ,GAAyBC,GAAgB,WAAW,UAAA,CAAM,OAAAD,EAAsBF,EAAcC,CAAU,CAA9C,CAA+C,CAC3G,CAOO,IAAMG,GAA6D,CACxE,OAAQ,GACR,KAAMC,GACN,MAAOR,GACP,SAAUQ,ICjRL,IAAMC,GAA+B,UAAA,CAAM,OAAC,OAAO,QAAW,YAAc,OAAO,YAAe,cAAvD,EAAsE,ECyClH,SAAUC,GAAYC,EAAI,CAC9B,OAAOA,CACT,CCiCM,SAAUC,IAAI,SAACC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,GAAA,UAAAA,GACnB,OAAOC,GAAcF,CAAG,CAC1B,CAGM,SAAUE,GAAoBF,EAA+B,CACjE,OAAIA,EAAI,SAAW,EACVG,GAGLH,EAAI,SAAW,EACVA,EAAI,GAGN,SAAeI,EAAQ,CAC5B,OAAOJ,EAAI,OAAO,SAACK,EAAWC,EAAuB,CAAK,OAAAA,EAAGD,CAAI,CAAP,EAAUD,CAAY,CAClF,CACF,CC9EA,IAAAG,EAAA,UAAA,CAkBE,SAAAA,EAAYC,EAA6E,CACnFA,IACF,KAAK,WAAaA,EAEtB,CA4BA,OAAAD,EAAA,UAAA,KAAA,SAAQE,EAAyB,CAC/B,IAAMC,EAAa,IAAIH,EACvB,OAAAG,EAAW,OAAS,KACpBA,EAAW,SAAWD,EACfC,CACT,EA8IAH,EAAA,UAAA,UAAA,SACEI,EACAC,EACAC,EAA8B,CAHhC,IAAAC,EAAA,KAKQC,EAAaC,GAAaL,CAAc,EAAIA,EAAiB,IAAIM,GAAeN,EAAgBC,EAAOC,CAAQ,EAErH,OAAAK,GAAa,UAAA,CACL,IAAAC,EAAuBL,EAArBL,EAAQU,EAAA,SAAEC,EAAMD,EAAA,OACxBJ,EAAW,IACTN,EAGIA,EAAS,KAAKM,EAAYK,CAAM,EAChCA,EAIAN,EAAK,WAAWC,CAAU,EAG1BD,EAAK,cAAcC,CAAU,CAAC,CAEtC,CAAC,EAEMA,CACT,EAGUR,EAAA,UAAA,cAAV,SAAwBc,EAAmB,CACzC,GAAI,CACF,OAAO,KAAK,WAAWA,CAAI,QACpBC,EAAP,CAIAD,EAAK,MAAMC,CAAG,EAElB,EA6DAf,EAAA,UAAA,QAAA,SAAQgB,EAA0BC,EAAoC,CAAtE,IAAAV,EAAA,KACE,OAAAU,EAAcC,GAAeD,CAAW,EAEjC,IAAIA,EAAkB,SAACE,EAASC,EAAM,CAC3C,IAAMZ,EAAa,IAAIE,GAAkB,CACvC,KAAM,SAACW,EAAK,CACV,GAAI,CACFL,EAAKK,CAAK,QACHN,EAAP,CACAK,EAAOL,CAAG,EACVP,EAAW,YAAW,EAE1B,EACA,MAAOY,EACP,SAAUD,EACX,EACDZ,EAAK,UAAUC,CAAU,CAC3B,CAAC,CACH,EAGUR,EAAA,UAAA,WAAV,SAAqBQ,EAA2B,OAC9C,OAAOI,EAAA,KAAK,UAAM,MAAAA,IAAA,OAAA,OAAAA,EAAE,UAAUJ,CAAU,CAC1C,EAOAR,EAAA,UAACG,IAAD,UAAA,CACE,OAAO,IACT,EA4FAH,EAAA,UAAA,KAAA,UAAA,SAAKsB,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,GAAA,UAAAA,GACH,OAAOC,GAAcF,CAAU,EAAE,IAAI,CACvC,EA6BAtB,EAAA,UAAA,UAAA,SAAUiB,EAAoC,CAA9C,IAAAV,EAAA,KACE,OAAAU,EAAcC,GAAeD,CAAW,EAEjC,IAAIA,EAAY,SAACE,EAASC,EAAM,CACrC,IAAIC,EACJd,EAAK,UACH,SAACkB,EAAI,CAAK,OAACJ,EAAQI,CAAT,EACV,SAACV,EAAQ,CAAK,OAAAK,EAAOL,CAAG,CAAV,EACd,UAAA,CAAM,OAAAI,EAAQE,CAAK,CAAb,CAAc,CAExB,CAAC,CACH,EA3aOrB,EAAA,OAAkC,SAAIC,EAAwD,CACnG,OAAO,IAAID,EAAcC,CAAS,CACpC,EA0aFD,GA/cA,EAwdA,SAAS0B,GAAeC,EAA+C,OACrE,OAAOC,EAAAD,GAAW,KAAXA,EAAeE,GAAO,WAAO,MAAAD,IAAA,OAAAA,EAAI,OAC1C,CAEA,SAASE,GAAcC,EAAU,CAC/B,OAAOA,GAASC,EAAWD,EAAM,IAAI,GAAKC,EAAWD,EAAM,KAAK,GAAKC,EAAWD,EAAM,QAAQ,CAChG,CAEA,SAASE,GAAgBF,EAAU,CACjC,OAAQA,GAASA,aAAiBG,IAAgBJ,GAAWC,CAAK,GAAKI,GAAeJ,CAAK,CAC7F,CC1eM,SAAUK,GAAQC,EAAW,CACjC,OAAOC,EAAWD,GAAM,KAAA,OAANA,EAAQ,IAAI,CAChC,CAMM,SAAUE,EACdC,EAAqF,CAErF,OAAO,SAACH,EAAqB,CAC3B,GAAID,GAAQC,CAAM,EAChB,OAAOA,EAAO,KAAK,SAA+BI,EAA2B,CAC3E,GAAI,CACF,OAAOD,EAAKC,EAAc,IAAI,QACvBC,EAAP,CACA,KAAK,MAAMA,CAAG,EAElB,CAAC,EAEH,MAAM,IAAI,UAAU,wCAAwC,CAC9D,CACF,CCjBM,SAAUC,EACdC,EACAC,EACAC,EACAC,EACAC,EAAuB,CAEvB,OAAO,IAAIC,GAAmBL,EAAaC,EAAQC,EAAYC,EAASC,CAAU,CACpF,CAMA,IAAAC,GAAA,SAAAC,EAAA,CAA2CC,GAAAF,EAAAC,CAAA,EAiBzC,SAAAD,EACEL,EACAC,EACAC,EACAC,EACQC,EACAI,EAAiC,CAN3C,IAAAC,EAoBEH,EAAA,KAAA,KAAMN,CAAW,GAAC,KAfV,OAAAS,EAAA,WAAAL,EACAK,EAAA,kBAAAD,EAeRC,EAAK,MAAQR,EACT,SAAuCS,EAAQ,CAC7C,GAAI,CACFT,EAAOS,CAAK,QACLC,EAAP,CACAX,EAAY,MAAMW,CAAG,EAEzB,EACAL,EAAA,UAAM,MACVG,EAAK,OAASN,EACV,SAAuCQ,EAAQ,CAC7C,GAAI,CACFR,EAAQQ,CAAG,QACJA,EAAP,CAEAX,EAAY,MAAMW,CAAG,UAGrB,KAAK,YAAW,EAEpB,EACAL,EAAA,UAAM,OACVG,EAAK,UAAYP,EACb,UAAA,CACE,GAAI,CACFA,EAAU,QACHS,EAAP,CAEAX,EAAY,MAAMW,CAAG,UAGrB,KAAK,YAAW,EAEpB,EACAL,EAAA,UAAM,WACZ,CAEA,OAAAD,EAAA,UAAA,YAAA,UAAA,OACE,GAAI,CAAC,KAAK,mBAAqB,KAAK,kBAAiB,EAAI,CAC/C,IAAAO,EAAW,KAAI,OACvBN,EAAA,UAAM,YAAW,KAAA,IAAA,EAEjB,CAACM,KAAUC,EAAA,KAAK,cAAU,MAAAA,IAAA,QAAAA,EAAA,KAAf,IAAI,GAEnB,EACFR,CAAA,EAnF2CS,EAAU,ECd9C,IAAMC,GAAiD,CAG5D,SAAA,SAASC,EAAQ,CACf,IAAIC,EAAU,sBACVC,EAAkD,qBAC9CC,EAAaJ,GAAsB,SACvCI,IACFF,EAAUE,EAAS,sBACnBD,EAASC,EAAS,sBAEpB,IAAMC,EAASH,EAAQ,SAACI,EAAS,CAI/BH,EAAS,OACTF,EAASK,CAAS,CACpB,CAAC,EACD,OAAO,IAAIC,GAAa,UAAA,CAAM,OAAAJ,GAAM,KAAA,OAANA,EAASE,CAAM,CAAf,CAAgB,CAChD,EACA,sBAAqB,UAAA,SAACG,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,GAAA,UAAAA,GACZ,IAAAL,EAAaJ,GAAsB,SAC3C,QAAQI,GAAQ,KAAA,OAARA,EAAU,wBAAyB,uBAAsB,MAAA,OAAAM,EAAA,CAAA,EAAAC,EAAIH,CAAI,CAAA,CAAA,CAC3E,EACA,qBAAoB,UAAA,SAACA,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,GAAA,UAAAA,GACX,IAAAL,EAAaJ,GAAsB,SAC3C,QAAQI,GAAQ,KAAA,OAARA,EAAU,uBAAwB,sBAAqB,MAAA,OAAAM,EAAA,CAAA,EAAAC,EAAIH,CAAI,CAAA,CAAA,CACzE,EACA,SAAU,QCrBL,IAAMI,GAAuDC,GAClE,SAACC,EAAM,CACL,OAAA,UAAoC,CAClCA,EAAO,IAAI,EACX,KAAK,KAAO,0BACZ,KAAK,QAAU,qBACjB,CAJA,CAIC,ECXL,IAAAC,EAAA,SAAAC,EAAA,CAAgCC,GAAAF,EAAAC,CAAA,EAwB9B,SAAAD,GAAA,CAAA,IAAAG,EAEEF,EAAA,KAAA,IAAA,GAAO,KAzBT,OAAAE,EAAA,OAAS,GAEDA,EAAA,iBAAyC,KAGjDA,EAAA,UAA2B,CAAA,EAE3BA,EAAA,UAAY,GAEZA,EAAA,SAAW,GAEXA,EAAA,YAAmB,MAenB,CAGA,OAAAH,EAAA,UAAA,KAAA,SAAQI,EAAwB,CAC9B,IAAMC,EAAU,IAAIC,GAAiB,KAAM,IAAI,EAC/C,OAAAD,EAAQ,SAAWD,EACZC,CACT,EAGUL,EAAA,UAAA,eAAV,UAAA,CACE,GAAI,KAAK,OACP,MAAM,IAAIO,EAEd,EAEAP,EAAA,UAAA,KAAA,SAAKQ,EAAQ,CAAb,IAAAL,EAAA,KACEM,GAAa,UAAA,SAEX,GADAN,EAAK,eAAc,EACf,CAACA,EAAK,UAAW,CACdA,EAAK,mBACRA,EAAK,iBAAmB,MAAM,KAAKA,EAAK,SAAS,OAEnD,QAAuBO,EAAAC,GAAAR,EAAK,gBAAgB,EAAAS,EAAAF,EAAA,KAAA,EAAA,CAAAE,EAAA,KAAAA,EAAAF,EAAA,KAAA,EAAE,CAAzC,IAAMG,EAAQD,EAAA,MACjBC,EAAS,KAAKL,CAAK,qGAGzB,CAAC,CACH,EAEAR,EAAA,UAAA,MAAA,SAAMc,EAAQ,CAAd,IAAAX,EAAA,KACEM,GAAa,UAAA,CAEX,GADAN,EAAK,eAAc,EACf,CAACA,EAAK,UAAW,CACnBA,EAAK,SAAWA,EAAK,UAAY,GACjCA,EAAK,YAAcW,EAEnB,QADQC,EAAcZ,EAAI,UACnBY,EAAU,QACfA,EAAU,MAAK,EAAI,MAAMD,CAAG,EAGlC,CAAC,CACH,EAEAd,EAAA,UAAA,SAAA,UAAA,CAAA,IAAAG,EAAA,KACEM,GAAa,UAAA,CAEX,GADAN,EAAK,eAAc,EACf,CAACA,EAAK,UAAW,CACnBA,EAAK,UAAY,GAEjB,QADQY,EAAcZ,EAAI,UACnBY,EAAU,QACfA,EAAU,MAAK,EAAI,SAAQ,EAGjC,CAAC,CACH,EAEAf,EAAA,UAAA,YAAA,UAAA,CACE,KAAK,UAAY,KAAK,OAAS,GAC/B,KAAK,UAAY,KAAK,iBAAmB,IAC3C,EAEA,OAAA,eAAIA,EAAA,UAAA,WAAQ,KAAZ,UAAA,OACE,QAAOgB,EAAA,KAAK,aAAS,MAAAA,IAAA,OAAA,OAAAA,EAAE,QAAS,CAClC,kCAGUhB,EAAA,UAAA,cAAV,SAAwBiB,EAAyB,CAC/C,YAAK,eAAc,EACZhB,EAAA,UAAM,cAAa,KAAA,KAACgB,CAAU,CACvC,EAGUjB,EAAA,UAAA,WAAV,SAAqBiB,EAAyB,CAC5C,YAAK,eAAc,EACnB,KAAK,wBAAwBA,CAAU,EAChC,KAAK,gBAAgBA,CAAU,CACxC,EAGUjB,EAAA,UAAA,gBAAV,SAA0BiB,EAA2B,CAArD,IAAAd,EAAA,KACQa,EAAqC,KAAnCE,EAAQF,EAAA,SAAEG,EAASH,EAAA,UAAED,EAASC,EAAA,UACtC,OAAIE,GAAYC,EACPC,IAET,KAAK,iBAAmB,KACxBL,EAAU,KAAKE,CAAU,EAClB,IAAII,GAAa,UAAA,CACtBlB,EAAK,iBAAmB,KACxBmB,GAAUP,EAAWE,CAAU,CACjC,CAAC,EACH,EAGUjB,EAAA,UAAA,wBAAV,SAAkCiB,EAA2B,CACrD,IAAAD,EAAuC,KAArCE,EAAQF,EAAA,SAAEO,EAAWP,EAAA,YAAEG,EAASH,EAAA,UACpCE,EACFD,EAAW,MAAMM,CAAW,EACnBJ,GACTF,EAAW,SAAQ,CAEvB,EAQAjB,EAAA,UAAA,aAAA,UAAA,CACE,IAAMwB,EAAkB,IAAIC,EAC5B,OAAAD,EAAW,OAAS,KACbA,CACT,EAxHOxB,EAAA,OAAkC,SAAI0B,EAA0BC,EAAqB,CAC1F,OAAO,IAAIrB,GAAoBoB,EAAaC,CAAM,CACpD,EAuHF3B,GA7IgCyB,CAAU,EAkJ1C,IAAAG,GAAA,SAAAC,EAAA,CAAyCC,GAAAF,EAAAC,CAAA,EACvC,SAAAD,EAESG,EACPC,EAAsB,CAHxB,IAAAC,EAKEJ,EAAA,KAAA,IAAA,GAAO,KAHA,OAAAI,EAAA,YAAAF,EAIPE,EAAK,OAASD,GAChB,CAEA,OAAAJ,EAAA,UAAA,KAAA,SAAKM,EAAQ,UACXC,GAAAC,EAAA,KAAK,eAAW,MAAAA,IAAA,OAAA,OAAAA,EAAE,QAAI,MAAAD,IAAA,QAAAA,EAAA,KAAAC,EAAGF,CAAK,CAChC,EAEAN,EAAA,UAAA,MAAA,SAAMS,EAAQ,UACZF,GAAAC,EAAA,KAAK,eAAW,MAAAA,IAAA,OAAA,OAAAA,EAAE,SAAK,MAAAD,IAAA,QAAAA,EAAA,KAAAC,EAAGC,CAAG,CAC/B,EAEAT,EAAA,UAAA,SAAA,UAAA,UACEO,GAAAC,EAAA,KAAK,eAAW,MAAAA,IAAA,OAAA,OAAAA,EAAE,YAAQ,MAAAD,IAAA,QAAAA,EAAA,KAAAC,CAAA,CAC5B,EAGUR,EAAA,UAAA,WAAV,SAAqBU,EAAyB,SAC5C,OAAOH,GAAAC,EAAA,KAAK,UAAM,MAAAA,IAAA,OAAA,OAAAA,EAAE,UAAUE,CAAU,KAAC,MAAAH,IAAA,OAAAA,EAAII,EAC/C,EACFX,CAAA,EA1ByCY,CAAO,EC5JzC,IAAMC,GAA+C,CAC1D,IAAG,UAAA,CAGD,OAAQA,GAAsB,UAAY,MAAM,IAAG,CACrD,EACA,SAAU,QCwBZ,IAAAC,GAAA,SAAAC,EAAA,CAAsCC,GAAAF,EAAAC,CAAA,EAUpC,SAAAD,EACUG,EACAC,EACAC,EAA6D,CAF7DF,IAAA,SAAAA,EAAA,KACAC,IAAA,SAAAA,EAAA,KACAC,IAAA,SAAAA,EAAAC,IAHV,IAAAC,EAKEN,EAAA,KAAA,IAAA,GAAO,KAJC,OAAAM,EAAA,YAAAJ,EACAI,EAAA,YAAAH,EACAG,EAAA,mBAAAF,EAZFE,EAAA,QAA0B,CAAA,EAC1BA,EAAA,oBAAsB,GAc5BA,EAAK,oBAAsBH,IAAgB,IAC3CG,EAAK,YAAc,KAAK,IAAI,EAAGJ,CAAW,EAC1CI,EAAK,YAAc,KAAK,IAAI,EAAGH,CAAW,GAC5C,CAEA,OAAAJ,EAAA,UAAA,KAAA,SAAKQ,EAAQ,CACL,IAAAC,EAA+E,KAA7EC,EAASD,EAAA,UAAEE,EAAOF,EAAA,QAAEG,EAAmBH,EAAA,oBAAEJ,EAAkBI,EAAA,mBAAEL,EAAWK,EAAA,YAC3EC,IACHC,EAAQ,KAAKH,CAAK,EAClB,CAACI,GAAuBD,EAAQ,KAAKN,EAAmB,IAAG,EAAKD,CAAW,GAE7E,KAAK,YAAW,EAChBH,EAAA,UAAM,KAAI,KAAA,KAACO,CAAK,CAClB,EAGUR,EAAA,UAAA,WAAV,SAAqBa,EAAyB,CAC5C,KAAK,eAAc,EACnB,KAAK,YAAW,EAQhB,QANMC,EAAe,KAAK,gBAAgBD,CAAU,EAE9CJ,EAAmC,KAAjCG,EAAmBH,EAAA,oBAAEE,EAAOF,EAAA,QAG9BM,EAAOJ,EAAQ,MAAK,EACjBK,EAAI,EAAGA,EAAID,EAAK,QAAU,CAACF,EAAW,OAAQG,GAAKJ,EAAsB,EAAI,EACpFC,EAAW,KAAKE,EAAKC,EAAO,EAG9B,YAAK,wBAAwBH,CAAU,EAEhCC,CACT,EAEQd,EAAA,UAAA,YAAR,UAAA,CACQ,IAAAS,EAAoE,KAAlEN,EAAWM,EAAA,YAAEJ,EAAkBI,EAAA,mBAAEE,EAAOF,EAAA,QAAEG,EAAmBH,EAAA,oBAK/DQ,GAAsBL,EAAsB,EAAI,GAAKT,EAK3D,GAJAA,EAAc,KAAYc,EAAqBN,EAAQ,QAAUA,EAAQ,OAAO,EAAGA,EAAQ,OAASM,CAAkB,EAIlH,CAACL,EAAqB,CAKxB,QAJMM,EAAMb,EAAmB,IAAG,EAC9Bc,EAAO,EAGFH,EAAI,EAAGA,EAAIL,EAAQ,QAAWA,EAAQK,IAAiBE,EAAKF,GAAK,EACxEG,EAAOH,EAETG,GAAQR,EAAQ,OAAO,EAAGQ,EAAO,CAAC,EAEtC,EACFnB,CAAA,EAzEsCoB,CAAO,EClB7C,IAAAC,GAAA,SAAAC,EAAA,CAA+BC,GAAAF,EAAAC,CAAA,EAC7B,SAAAD,EAAYG,EAAsBC,EAAmD,QACnFH,EAAA,KAAA,IAAA,GAAO,IACT,CAWO,OAAAD,EAAA,UAAA,SAAP,SAAgBK,EAAWC,EAAiB,CAAjB,OAAAA,IAAA,SAAAA,EAAA,GAClB,IACT,EACFN,CAAA,EAjB+BO,EAAY,ECHpC,IAAMC,GAAqC,CAGhD,YAAA,SAAYC,EAAqBC,EAAgB,SAAEC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,EAAA,GAAA,UAAAA,GACzC,IAAAC,EAAaL,GAAgB,SACrC,OAAIK,GAAQ,MAARA,EAAU,YACLA,EAAS,YAAW,MAApBA,EAAQC,EAAA,CAAaL,EAASC,CAAO,EAAAK,EAAKJ,CAAI,CAAA,CAAA,EAEhD,YAAW,MAAA,OAAAG,EAAA,CAACL,EAASC,CAAO,EAAAK,EAAKJ,CAAI,CAAA,CAAA,CAC9C,EACA,cAAA,SAAcK,EAAM,CACV,IAAAH,EAAaL,GAAgB,SACrC,QAAQK,GAAQ,KAAA,OAARA,EAAU,gBAAiB,eAAeG,CAAa,CACjE,EACA,SAAU,QCrBZ,IAAAC,GAAA,SAAAC,EAAA,CAAoCC,GAAAF,EAAAC,CAAA,EAOlC,SAAAD,EAAsBG,EAAqCC,EAAmD,CAA9G,IAAAC,EACEJ,EAAA,KAAA,KAAME,EAAWC,CAAI,GAAC,KADF,OAAAC,EAAA,UAAAF,EAAqCE,EAAA,KAAAD,EAFjDC,EAAA,QAAmB,IAI7B,CAEO,OAAAL,EAAA,UAAA,SAAP,SAAgBM,EAAWC,EAAiB,OAC1C,GADyBA,IAAA,SAAAA,EAAA,GACrB,KAAK,OACP,OAAO,KAIT,KAAK,MAAQD,EAEb,IAAME,EAAK,KAAK,GACVL,EAAY,KAAK,UAuBvB,OAAIK,GAAM,OACR,KAAK,GAAK,KAAK,eAAeL,EAAWK,EAAID,CAAK,GAKpD,KAAK,QAAU,GAEf,KAAK,MAAQA,EAEb,KAAK,IAAKE,EAAA,KAAK,MAAE,MAAAA,IAAA,OAAAA,EAAI,KAAK,eAAeN,EAAW,KAAK,GAAII,CAAK,EAE3D,IACT,EAEUP,EAAA,UAAA,eAAV,SAAyBG,EAA2BO,EAAmBH,EAAiB,CAAjB,OAAAA,IAAA,SAAAA,EAAA,GAC9DI,GAAiB,YAAYR,EAAU,MAAM,KAAKA,EAAW,IAAI,EAAGI,CAAK,CAClF,EAEUP,EAAA,UAAA,eAAV,SAAyBY,EAA4BJ,EAAkBD,EAAwB,CAE7F,GAFqEA,IAAA,SAAAA,EAAA,GAEjEA,GAAS,MAAQ,KAAK,QAAUA,GAAS,KAAK,UAAY,GAC5D,OAAOC,EAILA,GAAM,MACRG,GAAiB,cAAcH,CAAE,CAIrC,EAMOR,EAAA,UAAA,QAAP,SAAeM,EAAUC,EAAa,CACpC,GAAI,KAAK,OACP,OAAO,IAAI,MAAM,8BAA8B,EAGjD,KAAK,QAAU,GACf,IAAMM,EAAQ,KAAK,SAASP,EAAOC,CAAK,EACxC,GAAIM,EACF,OAAOA,EACE,KAAK,UAAY,IAAS,KAAK,IAAM,OAc9C,KAAK,GAAK,KAAK,eAAe,KAAK,UAAW,KAAK,GAAI,IAAI,EAE/D,EAEUb,EAAA,UAAA,SAAV,SAAmBM,EAAUQ,EAAc,CACzC,IAAIC,EAAmB,GACnBC,EACJ,GAAI,CACF,KAAK,KAAKV,CAAK,QACRW,EAAP,CACAF,EAAU,GAIVC,EAAaC,GAAQ,IAAI,MAAM,oCAAoC,EAErE,GAAIF,EACF,YAAK,YAAW,EACTC,CAEX,EAEAhB,EAAA,UAAA,YAAA,UAAA,CACE,GAAI,CAAC,KAAK,OAAQ,CACV,IAAAS,EAAoB,KAAlBD,EAAEC,EAAA,GAAEN,EAASM,EAAA,UACbS,EAAYf,EAAS,QAE7B,KAAK,KAAO,KAAK,MAAQ,KAAK,UAAY,KAC1C,KAAK,QAAU,GAEfgB,GAAUD,EAAS,IAAI,EACnBV,GAAM,OACR,KAAK,GAAK,KAAK,eAAeL,EAAWK,EAAI,IAAI,GAGnD,KAAK,MAAQ,KACbP,EAAA,UAAM,YAAW,KAAA,IAAA,EAErB,EACFD,CAAA,EA9IoCoB,EAAM,ECgB1C,IAAAC,GAAA,UAAA,CAGE,SAAAA,EAAoBC,EAAoCC,EAAiC,CAAjCA,IAAA,SAAAA,EAAoBF,EAAU,KAAlE,KAAA,oBAAAC,EAClB,KAAK,IAAMC,CACb,CA6BO,OAAAF,EAAA,UAAA,SAAP,SAAmBG,EAAqDC,EAAmBC,EAAS,CAA5B,OAAAD,IAAA,SAAAA,EAAA,GAC/D,IAAI,KAAK,oBAAuB,KAAMD,CAAI,EAAE,SAASE,EAAOD,CAAK,CAC1E,EAnCcJ,EAAA,IAAoBM,GAAsB,IAoC1DN,GArCA,ECnBA,IAAAO,GAAA,SAAAC,EAAA,CAAoCC,GAAAF,EAAAC,CAAA,EAkBlC,SAAAD,EAAYG,EAAgCC,EAAiC,CAAjCA,IAAA,SAAAA,EAAoBC,GAAU,KAA1E,IAAAC,EACEL,EAAA,KAAA,KAAME,EAAiBC,CAAG,GAAC,KAlBtB,OAAAE,EAAA,QAAmC,CAAA,EAOnCA,EAAA,QAAmB,IAY1B,CAEO,OAAAN,EAAA,UAAA,MAAP,SAAaO,EAAwB,CAC3B,IAAAC,EAAY,KAAI,QAExB,GAAI,KAAK,QAAS,CAChBA,EAAQ,KAAKD,CAAM,EACnB,OAGF,IAAIE,EACJ,KAAK,QAAU,GAEf,EACE,IAAKA,EAAQF,EAAO,QAAQA,EAAO,MAAOA,EAAO,KAAK,EACpD,YAEMA,EAASC,EAAQ,MAAK,GAIhC,GAFA,KAAK,QAAU,GAEXC,EAAO,CACT,KAAQF,EAASC,EAAQ,MAAK,GAC5BD,EAAO,YAAW,EAEpB,MAAME,EAEV,EACFT,CAAA,EAhDoCK,EAAS,EC6CtC,IAAMK,GAAiB,IAAIC,GAAeC,EAAW,EAK/CC,GAAQH,GCjDrB,IAAAI,GAAA,SAAAC,EAAA,CAA6CC,GAAAF,EAAAC,CAAA,EAC3C,SAAAD,EAAsBG,EAA8CC,EAAmD,CAAvH,IAAAC,EACEJ,EAAA,KAAA,KAAME,EAAWC,CAAI,GAAC,KADF,OAAAC,EAAA,UAAAF,EAA8CE,EAAA,KAAAD,GAEpE,CAEU,OAAAJ,EAAA,UAAA,eAAV,SAAyBG,EAAoCG,EAAkBC,EAAiB,CAE9F,OAF6EA,IAAA,SAAAA,EAAA,GAEzEA,IAAU,MAAQA,EAAQ,EACrBN,EAAA,UAAM,eAAc,KAAA,KAACE,EAAWG,EAAIC,CAAK,GAGlDJ,EAAU,QAAQ,KAAK,IAAI,EAIpBA,EAAU,aAAeA,EAAU,WAAaK,GAAuB,sBAAsB,UAAA,CAAM,OAAAL,EAAU,MAAM,MAAS,CAAzB,CAA0B,GACtI,EAEUH,EAAA,UAAA,eAAV,SAAyBG,EAAoCG,EAAkBC,EAAiB,OAI9F,GAJ6EA,IAAA,SAAAA,EAAA,GAIzEA,GAAS,KAAOA,EAAQ,EAAI,KAAK,MAAQ,EAC3C,OAAON,EAAA,UAAM,eAAc,KAAA,KAACE,EAAWG,EAAIC,CAAK,EAK1C,IAAAE,EAAYN,EAAS,QACzBG,GAAM,QAAQI,EAAAD,EAAQA,EAAQ,OAAS,MAAE,MAAAC,IAAA,OAAA,OAAAA,EAAE,MAAOJ,IACpDE,GAAuB,qBAAqBF,CAAY,EACxDH,EAAU,WAAa,OAI3B,EACFH,CAAA,EApC6CW,EAAW,ECHxD,IAAAC,GAAA,SAAAC,EAAA,CAA6CC,GAAAF,EAAAC,CAAA,EAA7C,SAAAD,GAAA,+CAkCA,CAjCS,OAAAA,EAAA,UAAA,MAAP,SAAaG,EAAyB,CACpC,KAAK,QAAU,GAUf,IAAMC,EAAU,KAAK,WACrB,KAAK,WAAa,OAEV,IAAAC,EAAY,KAAI,QACpBC,EACJH,EAASA,GAAUE,EAAQ,MAAK,EAEhC,EACE,IAAKC,EAAQH,EAAO,QAAQA,EAAO,MAAOA,EAAO,KAAK,EACpD,aAEMA,EAASE,EAAQ,KAAOF,EAAO,KAAOC,GAAWC,EAAQ,MAAK,GAIxE,GAFA,KAAK,QAAU,GAEXC,EAAO,CACT,MAAQH,EAASE,EAAQ,KAAOF,EAAO,KAAOC,GAAWC,EAAQ,MAAK,GACpEF,EAAO,YAAW,EAEpB,MAAMG,EAEV,EACFN,CAAA,EAlC6CO,EAAc,ECgCpD,IAAMC,GAA0B,IAAIC,GAAwBC,EAAoB,EC8BhF,IAAMC,EAAQ,IAAIC,EAAkB,SAACC,EAAU,CAAK,OAAAA,EAAW,SAAQ,CAAnB,CAAqB,EC9D1E,SAAUC,GAAYC,EAAU,CACpC,OAAOA,GAASC,EAAWD,EAAM,QAAQ,CAC3C,CCDA,SAASE,GAAQC,EAAQ,CACvB,OAAOA,EAAIA,EAAI,OAAS,EAC1B,CAEM,SAAUC,GAAkBC,EAAW,CAC3C,OAAOC,EAAWJ,GAAKG,CAAI,CAAC,EAAIA,EAAK,IAAG,EAAK,MAC/C,CAEM,SAAUE,GAAaF,EAAW,CACtC,OAAOG,GAAYN,GAAKG,CAAI,CAAC,EAAIA,EAAK,IAAG,EAAK,MAChD,CAEM,SAAUI,GAAUJ,EAAaK,EAAoB,CACzD,OAAO,OAAOR,GAAKG,CAAI,GAAM,SAAWA,EAAK,IAAG,EAAMK,CACxD,CClBO,IAAMC,GAAe,SAAIC,EAAM,CAAwB,OAAAA,GAAK,OAAOA,EAAE,QAAW,UAAY,OAAOA,GAAM,UAAlD,ECMxD,SAAUC,GAAUC,EAAU,CAClC,OAAOC,EAAWD,GAAK,KAAA,OAALA,EAAO,IAAI,CAC/B,CCHM,SAAUE,GAAoBC,EAAU,CAC5C,OAAOC,EAAWD,EAAME,GAAkB,CAC5C,CCLM,SAAUC,GAAmBC,EAAQ,CACzC,OAAO,OAAO,eAAiBC,EAAWD,GAAG,KAAA,OAAHA,EAAM,OAAO,cAAc,CACvE,CCAM,SAAUE,GAAiCC,EAAU,CAEzD,OAAO,IAAI,UACT,iBACEA,IAAU,MAAQ,OAAOA,GAAU,SAAW,oBAAsB,IAAIA,EAAK,KAAG,0HACwC,CAE9H,CCXM,SAAUC,IAAiB,CAC/B,OAAI,OAAO,QAAW,YAAc,CAAC,OAAO,SACnC,aAGF,OAAO,QAChB,CAEO,IAAMC,GAAWD,GAAiB,ECJnC,SAAUE,GAAWC,EAAU,CACnC,OAAOC,EAAWD,GAAK,KAAA,OAALA,EAAQE,GAAgB,CAC5C,CCHM,SAAiBC,GAAsCC,EAAqC,mGAC1FC,EAASD,EAAe,UAAS,2DAGX,MAAA,CAAA,EAAAE,GAAMD,EAAO,KAAI,CAAE,CAAA,gBAArCE,EAAkBC,EAAA,KAAA,EAAhBC,EAAKF,EAAA,MAAEG,EAAIH,EAAA,KACfG,iBAAA,CAAA,EAAA,CAAA,SACF,MAAA,CAAA,EAAAF,EAAA,KAAA,CAAA,qBAEIC,CAAM,CAAA,SAAZ,MAAA,CAAA,EAAAD,EAAA,KAAA,CAAA,SAAA,OAAAA,EAAA,KAAA,mCAGF,OAAAH,EAAO,YAAW,6BAIhB,SAAUM,GAAwBC,EAAQ,CAG9C,OAAOC,EAAWD,GAAG,KAAA,OAAHA,EAAK,SAAS,CAClC,CCPM,SAAUE,EAAaC,EAAyB,CACpD,GAAIA,aAAiBC,EACnB,OAAOD,EAET,GAAIA,GAAS,KAAM,CACjB,GAAIE,GAAoBF,CAAK,EAC3B,OAAOG,GAAsBH,CAAK,EAEpC,GAAII,GAAYJ,CAAK,EACnB,OAAOK,GAAcL,CAAK,EAE5B,GAAIM,GAAUN,CAAK,EACjB,OAAOO,GAAYP,CAAK,EAE1B,GAAIQ,GAAgBR,CAAK,EACvB,OAAOS,GAAkBT,CAAK,EAEhC,GAAIU,GAAWV,CAAK,EAClB,OAAOW,GAAaX,CAAK,EAE3B,GAAIY,GAAqBZ,CAAK,EAC5B,OAAOa,GAAuBb,CAAK,EAIvC,MAAMc,GAAiCd,CAAK,CAC9C,CAMM,SAAUG,GAAyBY,EAAQ,CAC/C,OAAO,IAAId,EAAW,SAACe,EAAyB,CAC9C,IAAMC,EAAMF,EAAIG,IAAkB,EAClC,GAAIC,EAAWF,EAAI,SAAS,EAC1B,OAAOA,EAAI,UAAUD,CAAU,EAGjC,MAAM,IAAI,UAAU,gEAAgE,CACtF,CAAC,CACH,CASM,SAAUX,GAAiBe,EAAmB,CAClD,OAAO,IAAInB,EAAW,SAACe,EAAyB,CAU9C,QAASK,EAAI,EAAGA,EAAID,EAAM,QAAU,CAACJ,EAAW,OAAQK,IACtDL,EAAW,KAAKI,EAAMC,EAAE,EAE1BL,EAAW,SAAQ,CACrB,CAAC,CACH,CAEM,SAAUT,GAAee,EAAuB,CACpD,OAAO,IAAIrB,EAAW,SAACe,EAAyB,CAC9CM,EACG,KACC,SAACC,EAAK,CACCP,EAAW,SACdA,EAAW,KAAKO,CAAK,EACrBP,EAAW,SAAQ,EAEvB,EACA,SAACQ,EAAQ,CAAK,OAAAR,EAAW,MAAMQ,CAAG,CAApB,CAAqB,EAEpC,KAAK,KAAMC,EAAoB,CACpC,CAAC,CACH,CAEM,SAAUd,GAAgBe,EAAqB,CACnD,OAAO,IAAIzB,EAAW,SAACe,EAAyB,aAC9C,QAAoBW,EAAAC,GAAAF,CAAQ,EAAAG,EAAAF,EAAA,KAAA,EAAA,CAAAE,EAAA,KAAAA,EAAAF,EAAA,KAAA,EAAE,CAAzB,IAAMJ,EAAKM,EAAA,MAEd,GADAb,EAAW,KAAKO,CAAK,EACjBP,EAAW,OACb,yGAGJA,EAAW,SAAQ,CACrB,CAAC,CACH,CAEM,SAAUP,GAAqBqB,EAA+B,CAClE,OAAO,IAAI7B,EAAW,SAACe,EAAyB,CAC9Ce,GAAQD,EAAed,CAAU,EAAE,MAAM,SAACQ,EAAG,CAAK,OAAAR,EAAW,MAAMQ,CAAG,CAApB,CAAqB,CACzE,CAAC,CACH,CAEM,SAAUX,GAA0BmB,EAAqC,CAC7E,OAAOvB,GAAkBwB,GAAmCD,CAAc,CAAC,CAC7E,CAEA,SAAeD,GAAWD,EAAiCd,EAAyB,uIACxDkB,EAAAC,GAAAL,CAAa,gFAIrC,GAJeP,EAAKa,EAAA,MACpBpB,EAAW,KAAKO,CAAK,EAGjBP,EAAW,OACb,MAAA,CAAA,CAAA,6RAGJ,OAAAA,EAAW,SAAQ,WChHf,SAAUqB,GACdC,EACAC,EACAC,EACAC,EACAC,EAAc,CADdD,IAAA,SAAAA,EAAA,GACAC,IAAA,SAAAA,EAAA,IAEA,IAAMC,EAAuBJ,EAAU,SAAS,UAAA,CAC9CC,EAAI,EACAE,EACFJ,EAAmB,IAAI,KAAK,SAAS,KAAMG,CAAK,CAAC,EAEjD,KAAK,YAAW,CAEpB,EAAGA,CAAK,EAIR,GAFAH,EAAmB,IAAIK,CAAoB,EAEvC,CAACD,EAKH,OAAOC,CAEX,CCeM,SAAUC,GAAaC,EAA0BC,EAAS,CAAT,OAAAA,IAAA,SAAAA,EAAA,GAC9CC,EAAQ,SAACC,EAAQC,EAAU,CAChCD,EAAO,UACLE,EACED,EACA,SAACE,EAAK,CAAK,OAAAC,GAAgBH,EAAYJ,EAAW,UAAA,CAAM,OAAAI,EAAW,KAAKE,CAAK,CAArB,EAAwBL,CAAK,CAA1E,EACX,UAAA,CAAM,OAAAM,GAAgBH,EAAYJ,EAAW,UAAA,CAAM,OAAAI,EAAW,SAAQ,CAAnB,EAAuBH,CAAK,CAAzE,EACN,SAACO,EAAG,CAAK,OAAAD,GAAgBH,EAAYJ,EAAW,UAAA,CAAM,OAAAI,EAAW,MAAMI,CAAG,CAApB,EAAuBP,CAAK,CAAzE,CAA0E,CACpF,CAEL,CAAC,CACH,CCPM,SAAUQ,GAAeC,EAA0BC,EAAiB,CAAjB,OAAAA,IAAA,SAAAA,EAAA,GAChDC,EAAQ,SAACC,EAAQC,EAAU,CAChCA,EAAW,IAAIJ,EAAU,SAAS,UAAA,CAAM,OAAAG,EAAO,UAAUC,CAAU,CAA3B,EAA8BH,CAAK,CAAC,CAC9E,CAAC,CACH,CC7DM,SAAUI,GAAsBC,EAA6BC,EAAwB,CACzF,OAAOC,EAAUF,CAAK,EAAE,KAAKG,GAAYF,CAAS,EAAGG,GAAUH,CAAS,CAAC,CAC3E,CCFM,SAAUI,GAAmBC,EAAuBC,EAAwB,CAChF,OAAOC,EAAUF,CAAK,EAAE,KAAKG,GAAYF,CAAS,EAAGG,GAAUH,CAAS,CAAC,CAC3E,CCJM,SAAUI,GAAiBC,EAAqBC,EAAwB,CAC5E,OAAO,IAAIC,EAAc,SAACC,EAAU,CAElC,IAAIC,EAAI,EAER,OAAOH,EAAU,SAAS,UAAA,CACpBG,IAAMJ,EAAM,OAGdG,EAAW,SAAQ,GAInBA,EAAW,KAAKH,EAAMI,IAAI,EAIrBD,EAAW,QACd,KAAK,SAAQ,EAGnB,CAAC,CACH,CAAC,CACH,CCfM,SAAUE,GAAoBC,EAAoBC,EAAwB,CAC9E,OAAO,IAAIC,EAAc,SAACC,EAAU,CAClC,IAAIC,EAKJ,OAAAC,GAAgBF,EAAYF,EAAW,UAAA,CAErCG,EAAYJ,EAAcI,IAAgB,EAE1CC,GACEF,EACAF,EACA,UAAA,OACMK,EACAC,EACJ,GAAI,CAEDC,EAAkBJ,EAAS,KAAI,EAA7BE,EAAKE,EAAA,MAAED,EAAIC,EAAA,WACPC,EAAP,CAEAN,EAAW,MAAMM,CAAG,EACpB,OAGEF,EAKFJ,EAAW,SAAQ,EAGnBA,EAAW,KAAKG,CAAK,CAEzB,EACA,EACA,EAAI,CAER,CAAC,EAMM,UAAA,CAAM,OAAAI,EAAWN,GAAQ,KAAA,OAARA,EAAU,MAAM,GAAKA,EAAS,OAAM,CAA/C,CACf,CAAC,CACH,CCvDM,SAAUO,GAAyBC,EAAyBC,EAAwB,CACxF,GAAI,CAACD,EACH,MAAM,IAAI,MAAM,yBAAyB,EAE3C,OAAO,IAAIE,EAAc,SAACC,EAAU,CAClCC,GAAgBD,EAAYF,EAAW,UAAA,CACrC,IAAMI,EAAWL,EAAM,OAAO,eAAc,EAC5CI,GACED,EACAF,EACA,UAAA,CACEI,EAAS,KAAI,EAAG,KAAK,SAACC,EAAM,CACtBA,EAAO,KAGTH,EAAW,SAAQ,EAEnBA,EAAW,KAAKG,EAAO,KAAK,CAEhC,CAAC,CACH,EACA,EACA,EAAI,CAER,CAAC,CACH,CAAC,CACH,CCzBM,SAAUC,GAA8BC,EAA8BC,EAAwB,CAClG,OAAOC,GAAsBC,GAAmCH,CAAK,EAAGC,CAAS,CACnF,CCoBM,SAAUG,GAAaC,EAA2BC,EAAwB,CAC9E,GAAID,GAAS,KAAM,CACjB,GAAIE,GAAoBF,CAAK,EAC3B,OAAOG,GAAmBH,EAAOC,CAAS,EAE5C,GAAIG,GAAYJ,CAAK,EACnB,OAAOK,GAAcL,EAAOC,CAAS,EAEvC,GAAIK,GAAUN,CAAK,EACjB,OAAOO,GAAgBP,EAAOC,CAAS,EAEzC,GAAIO,GAAgBR,CAAK,EACvB,OAAOS,GAAsBT,EAAOC,CAAS,EAE/C,GAAIS,GAAWV,CAAK,EAClB,OAAOW,GAAiBX,EAAOC,CAAS,EAE1C,GAAIW,GAAqBZ,CAAK,EAC5B,OAAOa,GAA2Bb,EAAOC,CAAS,EAGtD,MAAMa,GAAiCd,CAAK,CAC9C,CCoDM,SAAUe,GAAQC,EAA2BC,EAAyB,CAC1E,OAAOA,EAAYC,GAAUF,EAAOC,CAAS,EAAIE,EAAUH,CAAK,CAClE,CCxBM,SAAUI,GAAE,SAAIC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,GAAA,UAAAA,GACpB,IAAMC,EAAYC,GAAaH,CAAI,EACnC,OAAOI,GAAKJ,EAAaE,CAAS,CACpC,CCsCM,SAAUG,GAAWC,EAA0BC,EAAyB,CAC5E,IAAMC,EAAeC,EAAWH,CAAmB,EAAIA,EAAsB,UAAA,CAAM,OAAAA,CAAA,EAC7EI,EAAO,SAACC,EAA6B,CAAK,OAAAA,EAAW,MAAMH,EAAY,CAAE,CAA/B,EAChD,OAAO,IAAII,EAAWL,EAAY,SAACI,EAAU,CAAK,OAAAJ,EAAU,SAASG,EAAa,EAAGC,CAAU,CAA7C,EAAiDD,CAAI,CACzG,CCrHM,SAAUG,GAAYC,EAAU,CACpC,OAAOA,aAAiB,MAAQ,CAAC,MAAMA,CAAY,CACrD,CCsCM,SAAUC,EAAUC,EAAyCC,EAAa,CAC9E,OAAOC,EAAQ,SAACC,EAAQC,EAAU,CAEhC,IAAIC,EAAQ,EAGZF,EAAO,UACLG,EAAyBF,EAAY,SAACG,EAAQ,CAG5CH,EAAW,KAAKJ,EAAQ,KAAKC,EAASM,EAAOF,GAAO,CAAC,CACvD,CAAC,CAAC,CAEN,CAAC,CACH,CC1DQ,IAAAG,GAAY,MAAK,QAEzB,SAASC,GAAkBC,EAA6BC,EAAW,CAC/D,OAAOH,GAAQG,CAAI,EAAID,EAAE,MAAA,OAAAE,EAAA,CAAA,EAAAC,EAAIF,CAAI,CAAA,CAAA,EAAID,EAAGC,CAAI,CAChD,CAMM,SAAUG,GAAuBJ,EAA2B,CAC9D,OAAOK,EAAI,SAAAJ,EAAI,CAAI,OAAAF,GAAYC,EAAIC,CAAI,CAApB,CAAqB,CAC5C,CCfQ,IAAAK,GAAY,MAAK,QACjBC,GAA0D,OAAM,eAArCC,GAA+B,OAAM,UAAlBC,GAAY,OAAM,KAQlE,SAAUC,GAAqDC,EAAuB,CAC1F,GAAIA,EAAK,SAAW,EAAG,CACrB,IAAMC,EAAQD,EAAK,GACnB,GAAIL,GAAQM,CAAK,EACf,MAAO,CAAE,KAAMA,EAAO,KAAM,IAAI,EAElC,GAAIC,GAAOD,CAAK,EAAG,CACjB,IAAME,EAAOL,GAAQG,CAAK,EAC1B,MAAO,CACL,KAAME,EAAK,IAAI,SAACC,EAAG,CAAK,OAAAH,EAAMG,EAAN,CAAU,EAClC,KAAID,IAKV,MAAO,CAAE,KAAMH,EAAa,KAAM,IAAI,CACxC,CAEA,SAASE,GAAOG,EAAQ,CACtB,OAAOA,GAAO,OAAOA,GAAQ,UAAYT,GAAeS,CAAG,IAAMR,EACnE,CC7BM,SAAUS,GAAaC,EAAgBC,EAAa,CACxD,OAAOD,EAAK,OAAO,SAACE,EAAQC,EAAKC,EAAC,CAAK,OAAEF,EAAOC,GAAOF,EAAOG,GAAKF,CAA5B,EAAqC,CAAA,CAAS,CACvF,CCsMM,SAAUG,GAAa,SAAoCC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,GAAA,UAAAA,GAC/D,IAAMC,EAAYC,GAAaH,CAAI,EAC7BI,EAAiBC,GAAkBL,CAAI,EAEvCM,EAA8BC,GAAqBP,CAAI,EAA/CQ,EAAWF,EAAA,KAAEG,EAAIH,EAAA,KAE/B,GAAIE,EAAY,SAAW,EAIzB,OAAOE,GAAK,CAAA,EAAIR,CAAgB,EAGlC,IAAMS,EAAS,IAAIC,EACjBC,GACEL,EACAN,EACAO,EAEI,SAACK,EAAM,CAAK,OAAAC,GAAaN,EAAMK,CAAM,CAAzB,EAEZE,EAAQ,CACb,EAGH,OAAOZ,EAAkBO,EAAO,KAAKM,GAAiBb,CAAc,CAAC,EAAsBO,CAC7F,CAEM,SAAUE,GACdL,EACAN,EACAgB,EAAiD,CAAjD,OAAAA,IAAA,SAAAA,EAAAF,IAEO,SAACG,EAA2B,CAGjCC,GACElB,EACA,UAAA,CAaE,QAZQmB,EAAWb,EAAW,OAExBM,EAAS,IAAI,MAAMO,CAAM,EAG3BC,EAASD,EAITE,EAAuBF,aAGlBG,EAAC,CACRJ,GACElB,EACA,UAAA,CACE,IAAMuB,EAASf,GAAKF,EAAYgB,GAAItB,CAAgB,EAChDwB,EAAgB,GACpBD,EAAO,UACLE,EACER,EACA,SAACS,EAAK,CAEJd,EAAOU,GAAKI,EACPF,IAEHA,EAAgB,GAChBH,KAEGA,GAGHJ,EAAW,KAAKD,EAAeJ,EAAO,MAAK,CAAE,CAAC,CAElD,EACA,UAAA,CACO,EAAEQ,GAGLH,EAAW,SAAQ,CAEvB,CAAC,CACF,CAEL,EACAA,CAAU,GAjCLK,EAAI,EAAGA,EAAIH,EAAQG,MAAnBA,CAAC,CAoCZ,EACAL,CAAU,CAEd,CACF,CAMA,SAASC,GAAclB,EAAsC2B,EAAqBC,EAA0B,CACtG5B,EACF6B,GAAgBD,EAAc5B,EAAW2B,CAAO,EAEhDA,EAAO,CAEX,CC3RM,SAAUG,GACdC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAAgC,CAGhC,IAAMC,EAAc,CAAA,EAEhBC,EAAS,EAETC,EAAQ,EAERC,EAAa,GAKXC,EAAgB,UAAA,CAIhBD,GAAc,CAACH,EAAO,QAAU,CAACC,GACnCR,EAAW,SAAQ,CAEvB,EAGMY,EAAY,SAACC,EAAQ,CAAK,OAACL,EAASN,EAAaY,EAAWD,CAAK,EAAIN,EAAO,KAAKM,CAAK,CAA5D,EAE1BC,EAAa,SAACD,EAAQ,CAI1BT,GAAUJ,EAAW,KAAKa,CAAY,EAItCL,IAKA,IAAIO,EAAgB,GAGpBC,EAAUf,EAAQY,EAAOJ,GAAO,CAAC,EAAE,UACjCQ,EACEjB,EACA,SAACkB,EAAU,CAGTf,GAAY,MAAZA,EAAee,CAAU,EAErBd,EAGFQ,EAAUM,CAAiB,EAG3BlB,EAAW,KAAKkB,CAAU,CAE9B,EACA,UAAA,CAGEH,EAAgB,EAClB,EAEA,OACA,UAAA,CAIE,GAAIA,EAKF,GAAI,CAIFP,IAKA,qBACE,IAAMW,EAAgBZ,EAAO,MAAK,EAI9BF,EACFe,GAAgBpB,EAAYK,EAAmB,UAAA,CAAM,OAAAS,EAAWK,CAAa,CAAxB,CAAyB,EAE9EL,EAAWK,CAAa,GARrBZ,EAAO,QAAUC,EAASN,OAYjCS,EAAa,QACNU,EAAP,CACArB,EAAW,MAAMqB,CAAG,EAG1B,CAAC,CACF,CAEL,EAGA,OAAAtB,EAAO,UACLkB,EAAyBjB,EAAYY,EAAW,UAAA,CAE9CF,EAAa,GACbC,EAAa,CACf,CAAC,CAAC,EAKG,UAAA,CACLL,GAAmB,MAAnBA,EAAmB,CACrB,CACF,CClEM,SAAUgB,GACdC,EACAC,EACAC,EAA6B,CAE7B,OAFAA,IAAA,SAAAA,EAAA,KAEIC,EAAWF,CAAc,EAEpBF,GAAS,SAACK,EAAGC,EAAC,CAAK,OAAAC,EAAI,SAACC,EAAQC,EAAU,CAAK,OAAAP,EAAeG,EAAGG,EAAGF,EAAGG,CAAE,CAA1B,CAA2B,EAAEC,EAAUT,EAAQI,EAAGC,CAAC,CAAC,CAAC,CAAjF,EAAoFH,CAAU,GAC/G,OAAOD,GAAmB,WACnCC,EAAaD,GAGRS,EAAQ,SAACC,EAAQC,EAAU,CAAK,OAAAC,GAAeF,EAAQC,EAAYZ,EAASE,CAAU,CAAtD,CAAuD,EAChG,CChCM,SAAUY,GAAyCC,EAA6B,CAA7B,OAAAA,IAAA,SAAAA,EAAA,KAChDC,GAASC,GAAUF,CAAU,CACtC,CCNM,SAAUG,IAAS,CACvB,OAAOC,GAAS,CAAC,CACnB,CCmDM,SAAUC,IAAM,SAACC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,GAAA,UAAAA,GACrB,OAAOC,GAAS,EAAGC,GAAKH,EAAMI,GAAaJ,CAAI,CAAC,CAAC,CACnD,CC9DM,SAAUK,EAAsCC,EAA0B,CAC9E,OAAO,IAAIC,EAA+B,SAACC,EAAU,CACnDC,EAAUH,EAAiB,CAAE,EAAE,UAAUE,CAAU,CACrD,CAAC,CACH,CChDA,IAAME,GAA0B,CAAC,cAAe,gBAAgB,EAC1DC,GAAqB,CAAC,mBAAoB,qBAAqB,EAC/DC,GAAgB,CAAC,KAAM,KAAK,EA8N5B,SAAUC,EACdC,EACAC,EACAC,EACAC,EAAsC,CAMtC,GAJIC,EAAWF,CAAO,IACpBC,EAAiBD,EACjBA,EAAU,QAERC,EACF,OAAOJ,EAAaC,EAAQC,EAAWC,CAA+B,EAAE,KAAKG,GAAiBF,CAAc,CAAC,EAUzG,IAAAG,EAAAC,EAEJC,GAAcR,CAAM,EAChBH,GAAmB,IAAI,SAACY,EAAU,CAAK,OAAA,SAACC,EAAY,CAAK,OAAAV,EAAOS,GAAYR,EAAWS,EAASR,CAA+B,CAAtE,CAAlB,CAAyF,EAElIS,GAAwBX,CAAM,EAC5BJ,GAAwB,IAAIgB,GAAwBZ,EAAQC,CAAS,CAAC,EACtEY,GAA0Bb,CAAM,EAChCF,GAAc,IAAIc,GAAwBZ,EAAQC,CAAS,CAAC,EAC5D,CAAA,EAAE,CAAA,EATDa,EAAGR,EAAA,GAAES,EAAMT,EAAA,GAgBlB,GAAI,CAACQ,GACCE,GAAYhB,CAAM,EACpB,OAAOiB,GAAS,SAACC,EAAc,CAAK,OAAAnB,EAAUmB,EAAWjB,EAAWC,CAA+B,CAA/D,CAAgE,EAClGiB,EAAUnB,CAAM,CAAC,EAOvB,GAAI,CAACc,EACH,MAAM,IAAI,UAAU,sBAAsB,EAG5C,OAAO,IAAIM,EAAc,SAACC,EAAU,CAIlC,IAAMX,EAAU,UAAA,SAACY,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,GAAA,UAAAA,GAAmB,OAAAF,EAAW,KAAK,EAAIC,EAAK,OAASA,EAAOA,EAAK,EAAE,CAAhD,EAEpC,OAAAR,EAAIJ,CAAO,EAEJ,UAAA,CAAM,OAAAK,EAAQL,CAAO,CAAf,CACf,CAAC,CACH,CASA,SAASE,GAAwBZ,EAAaC,EAAiB,CAC7D,OAAO,SAACQ,EAAkB,CAAK,OAAA,SAACC,EAAY,CAAK,OAAAV,EAAOS,GAAYR,EAAWS,CAAO,CAArC,CAAlB,CACjC,CAOA,SAASC,GAAwBX,EAAW,CAC1C,OAAOI,EAAWJ,EAAO,WAAW,GAAKI,EAAWJ,EAAO,cAAc,CAC3E,CAOA,SAASa,GAA0Bb,EAAW,CAC5C,OAAOI,EAAWJ,EAAO,EAAE,GAAKI,EAAWJ,EAAO,GAAG,CACvD,CAOA,SAASQ,GAAcR,EAAW,CAChC,OAAOI,EAAWJ,EAAO,gBAAgB,GAAKI,EAAWJ,EAAO,mBAAmB,CACrF,CC/LM,SAAUwB,GACdC,EACAC,EACAC,EAAsC,CAEtC,OAAIA,EACKH,GAAoBC,EAAYC,CAAa,EAAE,KAAKE,GAAiBD,CAAc,CAAC,EAGtF,IAAIE,EAAoB,SAACC,EAAU,CACxC,IAAMC,EAAU,UAAA,SAACC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,GAAA,UAAAA,GAAc,OAAAH,EAAW,KAAKE,EAAE,SAAW,EAAIA,EAAE,GAAKA,CAAC,CAAzC,EACzBE,EAAWT,EAAWM,CAAO,EACnC,OAAOI,EAAWT,CAAa,EAAI,UAAA,CAAM,OAAAA,EAAcK,EAASG,CAAQ,CAA/B,EAAmC,MAC9E,CAAC,CACH,CCtBM,SAAUE,GACdC,EACAC,EACAC,EAAyC,CAFzCF,IAAA,SAAAA,EAAA,GAEAE,IAAA,SAAAA,EAAAC,IAIA,IAAIC,EAAmB,GAEvB,OAAIH,GAAuB,OAIrBI,GAAYJ,CAAmB,EACjCC,EAAYD,EAIZG,EAAmBH,GAIhB,IAAIK,EAAW,SAACC,EAAU,CAI/B,IAAIC,EAAMC,GAAYT,CAAO,EAAI,CAACA,EAAUE,EAAW,IAAG,EAAKF,EAE3DQ,EAAM,IAERA,EAAM,GAIR,IAAIE,EAAI,EAGR,OAAOR,EAAU,SAAS,UAAA,CACnBK,EAAW,SAEdA,EAAW,KAAKG,GAAG,EAEf,GAAKN,EAGP,KAAK,SAAS,OAAWA,CAAgB,EAGzCG,EAAW,SAAQ,EAGzB,EAAGC,CAAG,CACR,CAAC,CACH,CChGM,SAAUG,GAAK,SAACC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,GAAA,UAAAA,GACpB,IAAMC,EAAYC,GAAaH,CAAI,EAC7BI,EAAaC,GAAUL,EAAM,GAAQ,EACrCM,EAAUN,EAChB,OAAQM,EAAQ,OAGZA,EAAQ,SAAW,EAEnBC,EAAUD,EAAQ,EAAE,EAEpBE,GAASJ,CAAU,EAAEK,GAAKH,EAASJ,CAAS,CAAC,EAL7CQ,CAMN,CCjEO,IAAMC,GAAQ,IAAIC,EAAkBC,EAAI,ECpCvC,IAAAC,GAAY,MAAK,QAMnB,SAAUC,GAAkBC,EAAiB,CACjD,OAAOA,EAAK,SAAW,GAAKF,GAAQE,EAAK,EAAE,EAAIA,EAAK,GAAMA,CAC5D,CCoDM,SAAUC,EAAUC,EAAiDC,EAAa,CACtF,OAAOC,EAAQ,SAACC,EAAQC,EAAU,CAEhC,IAAIC,EAAQ,EAIZF,EAAO,UAILG,EAAyBF,EAAY,SAACG,EAAK,CAAK,OAAAP,EAAU,KAAKC,EAASM,EAAOF,GAAO,GAAKD,EAAW,KAAKG,CAAK,CAAhE,CAAiE,CAAC,CAEtH,CAAC,CACH,CCxBM,SAAUC,IAAG,SAACC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,GAAA,UAAAA,GAClB,IAAMC,EAAiBC,GAAkBH,CAAI,EAEvCI,EAAUC,GAAeL,CAAI,EAEnC,OAAOI,EAAQ,OACX,IAAIE,EAAsB,SAACC,EAAU,CAGnC,IAAIC,EAAuBJ,EAAQ,IAAI,UAAA,CAAM,MAAA,CAAA,CAAA,CAAE,EAK3CK,EAAYL,EAAQ,IAAI,UAAA,CAAM,MAAA,EAAA,CAAK,EAGvCG,EAAW,IAAI,UAAA,CACbC,EAAUC,EAAY,IACxB,CAAC,EAKD,mBAASC,EAAW,CAClBC,EAAUP,EAAQM,EAAY,EAAE,UAC9BE,EACEL,EACA,SAACM,EAAK,CAKJ,GAJAL,EAAQE,GAAa,KAAKG,CAAK,EAI3BL,EAAQ,MAAM,SAACM,EAAM,CAAK,OAAAA,EAAO,MAAP,CAAa,EAAG,CAC5C,IAAMC,EAAcP,EAAQ,IAAI,SAACM,EAAM,CAAK,OAAAA,EAAO,MAAK,CAAZ,CAAe,EAE3DP,EAAW,KAAKL,EAAiBA,EAAc,MAAA,OAAAc,EAAA,CAAA,EAAAC,EAAIF,CAAM,CAAA,CAAA,EAAIA,CAAM,EAI/DP,EAAQ,KAAK,SAACM,EAAQI,EAAC,CAAK,MAAA,CAACJ,EAAO,QAAUL,EAAUS,EAA5B,CAA8B,GAC5DX,EAAW,SAAQ,EAGzB,EACA,UAAA,CAGEE,EAAUC,GAAe,GAIzB,CAACF,EAAQE,GAAa,QAAUH,EAAW,SAAQ,CACrD,CAAC,CACF,GA9BIG,EAAc,EAAG,CAACH,EAAW,QAAUG,EAAcN,EAAQ,OAAQM,MAArEA,CAAW,EAmCpB,OAAO,UAAA,CACLF,EAAUC,EAAY,IACxB,CACF,CAAC,EACDU,CACN,CC9DM,SAAUC,GAASC,EAAoD,CAC3E,OAAOC,EAAQ,SAACC,EAAQC,EAAU,CAChC,IAAIC,EAAW,GACXC,EAAsB,KACtBC,EAA6C,KAC7CC,EAAa,GAEXC,EAAc,UAAA,CAGlB,GAFAF,GAAkB,MAAlBA,EAAoB,YAAW,EAC/BA,EAAqB,KACjBF,EAAU,CACZA,EAAW,GACX,IAAMK,EAAQJ,EACdA,EAAY,KACZF,EAAW,KAAKM,CAAK,EAEvBF,GAAcJ,EAAW,SAAQ,CACnC,EAEMO,EAAkB,UAAA,CACtBJ,EAAqB,KACrBC,GAAcJ,EAAW,SAAQ,CACnC,EAEAD,EAAO,UACLS,EACER,EACA,SAACM,EAAK,CACJL,EAAW,GACXC,EAAYI,EACPH,GACHM,EAAUZ,EAAiBS,CAAK,CAAC,EAAE,UAChCH,EAAqBK,EAAyBR,EAAYK,EAAaE,CAAe,CAAE,CAG/F,EACA,UAAA,CACEH,EAAa,IACZ,CAACH,GAAY,CAACE,GAAsBA,EAAmB,SAAWH,EAAW,SAAQ,CACxF,CAAC,CACF,CAEL,CAAC,CACH,CC3CM,SAAUU,GAAaC,EAAkBC,EAAyC,CAAzC,OAAAA,IAAA,SAAAA,EAAAC,IACtCC,GAAM,UAAA,CAAM,OAAAC,GAAMJ,EAAUC,CAAS,CAAzB,CAA0B,CAC/C,CCEM,SAAUI,GAAeC,EAAoBC,EAAsC,CAAtC,OAAAA,IAAA,SAAAA,EAAA,MAGjDA,EAAmBA,GAAgB,KAAhBA,EAAoBD,EAEhCE,EAAQ,SAACC,EAAQC,EAAU,CAChC,IAAIC,EAAiB,CAAA,EACjBC,EAAQ,EAEZH,EAAO,UACLI,EACEH,EACA,SAACI,EAAK,aACAC,EAAuB,KAKvBH,IAAUL,IAAsB,GAClCI,EAAQ,KAAK,CAAA,CAAE,MAIjB,QAAqBK,EAAAC,GAAAN,CAAO,EAAAO,EAAAF,EAAA,KAAA,EAAA,CAAAE,EAAA,KAAAA,EAAAF,EAAA,KAAA,EAAE,CAAzB,IAAMG,EAAMD,EAAA,MACfC,EAAO,KAAKL,CAAK,EAMbR,GAAca,EAAO,SACvBJ,EAASA,GAAM,KAANA,EAAU,CAAA,EACnBA,EAAO,KAAKI,CAAM,qGAItB,GAAIJ,MAIF,QAAqBK,EAAAH,GAAAF,CAAM,EAAAM,EAAAD,EAAA,KAAA,EAAA,CAAAC,EAAA,KAAAA,EAAAD,EAAA,KAAA,EAAE,CAAxB,IAAMD,EAAME,EAAA,MACfC,GAAUX,EAASQ,CAAM,EACzBT,EAAW,KAAKS,CAAM,oGAG5B,EACA,UAAA,aAGE,QAAqBI,EAAAN,GAAAN,CAAO,EAAAa,EAAAD,EAAA,KAAA,EAAA,CAAAC,EAAA,KAAAA,EAAAD,EAAA,KAAA,EAAE,CAAzB,IAAMJ,EAAMK,EAAA,MACfd,EAAW,KAAKS,CAAM,oGAExBT,EAAW,SAAQ,CACrB,EAEA,OACA,UAAA,CAEEC,EAAU,IACZ,CAAC,CACF,CAEL,CAAC,CACH,CCbM,SAAUc,GACdC,EAAgD,CAEhD,OAAOC,EAAQ,SAACC,EAAQC,EAAU,CAChC,IAAIC,EAAgC,KAChCC,EAAY,GACZC,EAEJF,EAAWF,EAAO,UAChBK,EAAyBJ,EAAY,OAAW,OAAW,SAACK,EAAG,CAC7DF,EAAgBG,EAAUT,EAASQ,EAAKT,GAAWC,CAAQ,EAAEE,CAAM,CAAC,CAAC,EACjEE,GACFA,EAAS,YAAW,EACpBA,EAAW,KACXE,EAAc,UAAUH,CAAU,GAIlCE,EAAY,EAEhB,CAAC,CAAC,EAGAA,IAMFD,EAAS,YAAW,EACpBA,EAAW,KACXE,EAAe,UAAUH,CAAU,EAEvC,CAAC,CACH,CC/HM,SAAUO,GACdC,EACAC,EACAC,EACAC,EACAC,EAAqC,CAErC,OAAO,SAACC,EAAuBC,EAA2B,CAIxD,IAAIC,EAAWL,EAIXM,EAAaP,EAEbQ,EAAQ,EAGZJ,EAAO,UACLK,EACEJ,EACA,SAACK,EAAK,CAEJ,IAAMC,EAAIH,IAEVD,EAAQD,EAEJP,EAAYQ,EAAOG,EAAOC,CAAC,GAIzBL,EAAW,GAAOI,GAGxBR,GAAcG,EAAW,KAAKE,CAAK,CACrC,EAGAJ,GACG,UAAA,CACCG,GAAYD,EAAW,KAAKE,CAAK,EACjCF,EAAW,SAAQ,CACrB,CAAE,CACL,CAEL,CACF,CCnCM,SAAUO,IAAa,SAAOC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,GAAA,UAAAA,GAClC,IAAMC,EAAiBC,GAAkBH,CAAI,EAC7C,OAAOE,EACHE,GAAKL,GAAa,MAAA,OAAAM,EAAA,CAAA,EAAAC,EAAKN,CAAoC,CAAA,CAAA,EAAGO,GAAiBL,CAAc,CAAC,EAC9FM,EAAQ,SAACC,EAAQC,EAAU,CACzBC,GAAiBN,EAAA,CAAEI,CAAM,EAAAH,EAAKM,GAAeZ,CAAI,CAAC,CAAA,CAAA,EAAGU,CAAU,CACjE,CAAC,CACP,CCUM,SAAUG,IAAiB,SAC/BC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,GAAA,UAAAA,GAEA,OAAOC,GAAa,MAAA,OAAAC,EAAA,CAAA,EAAAC,EAAIJ,CAAY,CAAA,CAAA,CACtC,CC+BM,SAAUK,GACdC,EACAC,EAA6G,CAE7G,OAAOC,EAAWD,CAAc,EAAIE,GAASH,EAASC,EAAgB,CAAC,EAAIE,GAASH,EAAS,CAAC,CAChG,CCpBM,SAAUI,GAAgBC,EAAiBC,EAAyC,CAAzC,OAAAA,IAAA,SAAAA,EAAAC,IACxCC,EAAQ,SAACC,EAAQC,EAAU,CAChC,IAAIC,EAAkC,KAClCC,EAAsB,KACtBC,EAA0B,KAExBC,EAAO,UAAA,CACX,GAAIH,EAAY,CAEdA,EAAW,YAAW,EACtBA,EAAa,KACb,IAAMI,EAAQH,EACdA,EAAY,KACZF,EAAW,KAAKK,CAAK,EAEzB,EACA,SAASC,GAAY,CAInB,IAAMC,EAAaJ,EAAYR,EACzBa,EAAMZ,EAAU,IAAG,EACzB,GAAIY,EAAMD,EAAY,CAEpBN,EAAa,KAAK,SAAS,OAAWM,EAAaC,CAAG,EACtDR,EAAW,IAAIC,CAAU,EACzB,OAGFG,EAAI,CACN,CAEAL,EAAO,UACLU,EACET,EACA,SAACK,EAAQ,CACPH,EAAYG,EACZF,EAAWP,EAAU,IAAG,EAGnBK,IACHA,EAAaL,EAAU,SAASU,EAAcX,CAAO,EACrDK,EAAW,IAAIC,CAAU,EAE7B,EACA,UAAA,CAGEG,EAAI,EACJJ,EAAW,SAAQ,CACrB,EAEA,OACA,UAAA,CAEEE,EAAYD,EAAa,IAC3B,CAAC,CACF,CAEL,CAAC,CACH,CCpFM,SAAUS,GAAqBC,EAAe,CAClD,OAAOC,EAAQ,SAACC,EAAQC,EAAU,CAChC,IAAIC,EAAW,GACfF,EAAO,UACLG,EACEF,EACA,SAACG,EAAK,CACJF,EAAW,GACXD,EAAW,KAAKG,CAAK,CACvB,EACA,UAAA,CACOF,GACHD,EAAW,KAAKH,CAAa,EAE/BG,EAAW,SAAQ,CACrB,CAAC,CACF,CAEL,CAAC,CACH,CCXM,SAAUI,GAAQC,EAAa,CACnC,OAAOA,GAAS,EAEZ,UAAA,CAAM,OAAAC,CAAA,EACNC,EAAQ,SAACC,EAAQC,EAAU,CACzB,IAAIC,EAAO,EACXF,EAAO,UACLG,EAAyBF,EAAY,SAACG,EAAK,CAIrC,EAAEF,GAAQL,IACZI,EAAW,KAAKG,CAAK,EAIjBP,GAASK,GACXD,EAAW,SAAQ,EAGzB,CAAC,CAAC,CAEN,CAAC,CACP,CC9BM,SAAUI,IAAc,CAC5B,OAAOC,EAAQ,SAACC,EAAQC,EAAU,CAChCD,EAAO,UAAUE,EAAyBD,EAAYE,EAAI,CAAC,CAC7D,CAAC,CACH,CCCM,SAAUC,GAASC,EAAQ,CAC/B,OAAOC,EAAI,UAAA,CAAM,OAAAD,CAAA,CAAK,CACxB,CCyCM,SAAUE,GACdC,EACAC,EAAmC,CAEnC,OAAIA,EAEK,SAACC,EAAqB,CAC3B,OAAAC,GAAOF,EAAkB,KAAKG,GAAK,CAAC,EAAGC,GAAc,CAAE,EAAGH,EAAO,KAAKH,GAAUC,CAAqB,CAAC,CAAC,CAAvG,EAGGM,GAAS,SAACC,EAAOC,EAAK,CAAK,OAAAR,EAAsBO,EAAOC,CAAK,EAAE,KAAKJ,GAAK,CAAC,EAAGK,GAAMF,CAAK,CAAC,CAA9D,CAA+D,CACnG,CCtCM,SAAUG,GAASC,EAAoBC,EAAyC,CAAzCA,IAAA,SAAAA,EAAAC,IAC3C,IAAMC,EAAWC,GAAMJ,EAAKC,CAAS,EACrC,OAAOI,GAAU,UAAA,CAAM,OAAAF,CAAA,CAAQ,CACjC,CC0EM,SAAUG,EACdC,EACAC,EAA0D,CAA1D,OAAAA,IAAA,SAAAA,EAA+BC,IAK/BF,EAAaA,GAAU,KAAVA,EAAcG,GAEpBC,EAAQ,SAACC,EAAQC,EAAU,CAGhC,IAAIC,EAEAC,EAAQ,GAEZH,EAAO,UACLI,EAAyBH,EAAY,SAACI,EAAK,CAEzC,IAAMC,EAAaV,EAAYS,CAAK,GAKhCF,GAAS,CAACR,EAAYO,EAAaI,CAAU,KAM/CH,EAAQ,GACRD,EAAcI,EAGdL,EAAW,KAAKI,CAAK,EAEzB,CAAC,CAAC,CAEN,CAAC,CACH,CAEA,SAASP,GAAeS,EAAQC,EAAM,CACpC,OAAOD,IAAMC,CACf,CCjHM,SAAUC,EAA8CC,EAAQC,EAAuC,CAC3G,OAAOC,EAAqB,SAACC,EAAMC,EAAI,CAAK,OAAAH,EAAUA,EAAQE,EAAEH,GAAMI,EAAEJ,EAAI,EAAIG,EAAEH,KAASI,EAAEJ,EAAjD,CAAqD,CACnG,CCLM,SAAUK,IAAO,SAAIC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,GAAA,UAAAA,GACzB,OAAO,SAACC,EAAqB,CAAK,OAAAC,GAAOD,EAAQE,EAAE,MAAA,OAAAC,EAAA,CAAA,EAAAC,EAAIN,CAAM,CAAA,CAAA,CAAA,CAA3B,CACpC,CCHM,SAAUO,EAAYC,EAAoB,CAC9C,OAAOC,EAAQ,SAACC,EAAQC,EAAU,CAGhC,GAAI,CACFD,EAAO,UAAUC,CAAU,UAE3BA,EAAW,IAAIH,CAAQ,EAE3B,CAAC,CACH,CC9BM,SAAUI,GAAYC,EAAa,CACvC,OAAOA,GAAS,EACZ,UAAA,CAAM,OAAAC,CAAA,EACNC,EAAQ,SAACC,EAAQC,EAAU,CAKzB,IAAIC,EAAc,CAAA,EAClBF,EAAO,UACLG,EACEF,EACA,SAACG,EAAK,CAEJF,EAAO,KAAKE,CAAK,EAGjBP,EAAQK,EAAO,QAAUA,EAAO,MAAK,CACvC,EACA,UAAA,aAGE,QAAoBG,EAAAC,GAAAJ,CAAM,EAAAK,EAAAF,EAAA,KAAA,EAAA,CAAAE,EAAA,KAAAA,EAAAF,EAAA,KAAA,EAAE,CAAvB,IAAMD,EAAKG,EAAA,MACdN,EAAW,KAAKG,CAAK,oGAEvBH,EAAW,SAAQ,CACrB,EAEA,OACA,UAAA,CAEEC,EAAS,IACX,CAAC,CACF,CAEL,CAAC,CACP,CC1DM,SAAUM,IAAK,SAAIC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,GAAA,UAAAA,GACvB,IAAMC,EAAYC,GAAaH,CAAI,EAC7BI,EAAaC,GAAUL,EAAM,GAAQ,EAC3C,OAAAA,EAAOM,GAAeN,CAAI,EAEnBO,EAAQ,SAACC,EAAQC,EAAU,CAChCC,GAASN,CAAU,EAAEO,GAAIC,EAAA,CAAEJ,CAAM,EAAAK,EAAMb,CAA6B,CAAA,EAAGE,CAAS,CAAC,EAAE,UAAUO,CAAU,CACzG,CAAC,CACH,CCcM,SAAUK,IAAS,SACvBC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,GAAA,UAAAA,GAEA,OAAOC,GAAK,MAAA,OAAAC,EAAA,CAAA,EAAAC,EAAIJ,CAAY,CAAA,CAAA,CAC9B,CCmEM,SAAUK,GAAUC,EAAqC,OACzDC,EAAQ,IACRC,EAEJ,OAAIF,GAAiB,OACf,OAAOA,GAAkB,UACxBG,EAA4BH,EAAa,MAAzCC,EAAKE,IAAA,OAAG,IAAQA,EAAED,EAAUF,EAAa,OAE5CC,EAAQD,GAILC,GAAS,EACZ,UAAA,CAAM,OAAAG,CAAA,EACNC,EAAQ,SAACC,EAAQC,EAAU,CACzB,IAAIC,EAAQ,EACRC,EAEEC,EAAc,UAAA,CAGlB,GAFAD,GAAS,MAATA,EAAW,YAAW,EACtBA,EAAY,KACRP,GAAS,KAAM,CACjB,IAAMS,EAAW,OAAOT,GAAU,SAAWU,GAAMV,CAAK,EAAIW,EAAUX,EAAMM,CAAK,CAAC,EAC5EM,EAAqBC,EAAyBR,EAAY,UAAA,CAC9DO,EAAmB,YAAW,EAC9BE,EAAiB,CACnB,CAAC,EACDL,EAAS,UAAUG,CAAkB,OAErCE,EAAiB,CAErB,EAEMA,EAAoB,UAAA,CACxB,IAAIC,EAAY,GAChBR,EAAYH,EAAO,UACjBS,EAAyBR,EAAY,OAAW,UAAA,CAC1C,EAAEC,EAAQP,EACRQ,EACFC,EAAW,EAEXO,EAAY,GAGdV,EAAW,SAAQ,CAEvB,CAAC,CAAC,EAGAU,GACFP,EAAW,CAEf,EAEAM,EAAiB,CACnB,CAAC,CACP,CC7HM,SAAUE,GAAUC,EAAyB,CACjD,OAAOC,EAAQ,SAACC,EAAQC,EAAU,CAChC,IAAIC,EAAW,GACXC,EAAsB,KAC1BH,EAAO,UACLI,EAAyBH,EAAY,SAACI,EAAK,CACzCH,EAAW,GACXC,EAAYE,CACd,CAAC,CAAC,EAEJP,EAAS,UACPM,EACEH,EACA,UAAA,CACE,GAAIC,EAAU,CACZA,EAAW,GACX,IAAMG,EAAQF,EACdA,EAAY,KACZF,EAAW,KAAKI,CAAK,EAEzB,EACAC,EAAI,CACL,CAEL,CAAC,CACH,CCgBM,SAAUC,GAAcC,EAA6DC,EAAQ,CAMjG,OAAOC,EAAQC,GAAcH,EAAaC,EAAW,UAAU,QAAU,EAAG,EAAI,CAAC,CACnF,CCgDM,SAAUG,GAASC,EAA4B,CAA5BA,IAAA,SAAAA,EAAA,CAAA,GACf,IAAAC,EAAgHD,EAAO,UAAvHE,EAASD,IAAA,OAAG,UAAA,CAAM,OAAA,IAAIE,CAAJ,EAAgBF,EAAEG,EAA4EJ,EAAO,aAAnFK,EAAYD,IAAA,OAAG,GAAIA,EAAEE,EAAuDN,EAAO,gBAA9DO,EAAeD,IAAA,OAAG,GAAIA,EAAEE,EAA+BR,EAAO,oBAAtCS,EAAmBD,IAAA,OAAG,GAAIA,EAUnH,OAAO,SAACE,EAAa,CACnB,IAAIC,EACAC,EACAC,EACAC,EAAW,EACXC,EAAe,GACfC,EAAa,GAEXC,EAAc,UAAA,CAClBL,GAAe,MAAfA,EAAiB,YAAW,EAC5BA,EAAkB,MACpB,EAGMM,EAAQ,UAAA,CACZD,EAAW,EACXN,EAAaE,EAAU,OACvBE,EAAeC,EAAa,EAC9B,EACMG,EAAsB,UAAA,CAG1B,IAAMC,EAAOT,EACbO,EAAK,EACLE,GAAI,MAAJA,EAAM,YAAW,CACnB,EAEA,OAAOC,EAAc,SAACC,EAAQC,GAAU,CACtCT,IACI,CAACE,GAAc,CAACD,GAClBE,EAAW,EAOb,IAAMO,GAAQX,EAAUA,GAAO,KAAPA,EAAWX,EAAS,EAO5CqB,GAAW,IAAI,UAAA,CACbT,IAKIA,IAAa,GAAK,CAACE,GAAc,CAACD,IACpCH,EAAkBa,GAAYN,EAAqBV,CAAmB,EAE1E,CAAC,EAIDe,GAAK,UAAUD,EAAU,EAGvB,CAACZ,GAIDG,EAAW,IAOXH,EAAa,IAAIe,GAAe,CAC9B,KAAM,SAACC,GAAK,CAAK,OAAAH,GAAK,KAAKG,EAAK,CAAf,EACjB,MAAO,SAACC,GAAG,CACTZ,EAAa,GACbC,EAAW,EACXL,EAAkBa,GAAYP,EAAOb,EAAcuB,EAAG,EACtDJ,GAAK,MAAMI,EAAG,CAChB,EACA,SAAU,UAAA,CACRb,EAAe,GACfE,EAAW,EACXL,EAAkBa,GAAYP,EAAOX,CAAe,EACpDiB,GAAK,SAAQ,CACf,EACD,EACDK,EAAUP,CAAM,EAAE,UAAUX,CAAU,EAE1C,CAAC,EAAED,CAAa,CAClB,CACF,CAEA,SAASe,GACPP,EACAY,EAA+C,SAC/CC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,EAAA,GAAA,UAAAA,GAEA,GAAIF,IAAO,GAAM,CACfZ,EAAK,EACL,OAGF,GAAIY,IAAO,GAIX,KAAMG,EAAe,IAAIP,GAAe,CACtC,KAAM,UAAA,CACJO,EAAa,YAAW,EACxBf,EAAK,CACP,EACD,EAED,OAAOY,EAAE,MAAA,OAAAI,EAAA,CAAA,EAAAC,EAAIJ,CAAI,CAAA,CAAA,EAAE,UAAUE,CAAY,EAC3C,CCjHM,SAAUG,EACdC,EACAC,EACAC,EAAyB,WAErBC,EACAC,EAAW,GACf,OAAIJ,GAAsB,OAAOA,GAAuB,UACnDK,EAA8EL,EAAkB,WAAhGG,EAAUE,IAAA,OAAG,IAAQA,EAAEC,EAAuDN,EAAkB,WAAzEC,EAAUK,IAAA,OAAG,IAAQA,EAAEC,EAAgCP,EAAkB,SAAlDI,EAAQG,IAAA,OAAG,GAAKA,EAAEL,EAAcF,EAAkB,WAEnGG,EAAcH,GAAkB,KAAlBA,EAAsB,IAE/BQ,GAAS,CACd,UAAW,UAAA,CAAM,OAAA,IAAIC,GAAcN,EAAYF,EAAYC,CAAS,CAAnD,EACjB,aAAc,GACd,gBAAiB,GACjB,oBAAqBE,EACtB,CACH,CCxIM,SAAUM,GAAQC,EAAa,CACnC,OAAOC,EAAO,SAACC,EAAGC,EAAK,CAAK,OAAAH,GAASG,CAAT,CAAc,CAC5C,CCWM,SAAUC,GAAaC,EAAyB,CACpD,OAAOC,EAAQ,SAACC,EAAQC,EAAU,CAChC,IAAIC,EAAS,GAEPC,EAAiBC,EACrBH,EACA,UAAA,CACEE,GAAc,MAAdA,EAAgB,YAAW,EAC3BD,EAAS,EACX,EACAG,EAAI,EAGNC,EAAUR,CAAQ,EAAE,UAAUK,CAAc,EAE5CH,EAAO,UAAUI,EAAyBH,EAAY,SAACM,EAAK,CAAK,OAAAL,GAAUD,EAAW,KAAKM,CAAK,CAA/B,CAAgC,CAAC,CACpG,CAAC,CACH,CCRM,SAAUC,GAAS,SAAOC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,GAAA,UAAAA,GAC9B,IAAMC,EAAYC,GAAaH,CAAM,EACrC,OAAOI,EAAQ,SAACC,EAAQC,EAAU,EAI/BJ,EAAYK,GAAOP,EAAQK,EAAQH,CAAS,EAAIK,GAAOP,EAAQK,CAAM,GAAG,UAAUC,CAAU,CAC/F,CAAC,CACH,CCmBM,SAAUE,EACdC,EACAC,EAA6G,CAE7G,OAAOC,EAAQ,SAACC,EAAQC,EAAU,CAChC,IAAIC,EAAyD,KACzDC,EAAQ,EAERC,EAAa,GAIXC,EAAgB,UAAA,CAAM,OAAAD,GAAc,CAACF,GAAmBD,EAAW,SAAQ,CAArD,EAE5BD,EAAO,UACLM,EACEL,EACA,SAACM,EAAK,CAEJL,GAAe,MAAfA,EAAiB,YAAW,EAC5B,IAAIM,EAAa,EACXC,EAAaN,IAEnBO,EAAUb,EAAQU,EAAOE,CAAU,CAAC,EAAE,UACnCP,EAAkBI,EACjBL,EAIA,SAACU,EAAU,CAAK,OAAAV,EAAW,KAAKH,EAAiBA,EAAeS,EAAOI,EAAYF,EAAYD,GAAY,EAAIG,CAAU,CAAzG,EAChB,UAAA,CAIET,EAAkB,KAClBG,EAAa,CACf,CAAC,CACD,CAEN,EACA,UAAA,CACED,EAAa,GACbC,EAAa,CACf,CAAC,CACF,CAEL,CAAC,CACH,CCvFM,SAAUO,GAAaC,EAA8B,CACzD,OAAOC,EAAQ,SAACC,EAAQC,EAAU,CAChCC,EAAUJ,CAAQ,EAAE,UAAUK,EAAyBF,EAAY,UAAA,CAAM,OAAAA,EAAW,SAAQ,CAAnB,EAAuBG,EAAI,CAAC,EACrG,CAACH,EAAW,QAAUD,EAAO,UAAUC,CAAU,CACnD,CAAC,CACH,CCIM,SAAUI,GAAaC,EAAiDC,EAAiB,CAAjB,OAAAA,IAAA,SAAAA,EAAA,IACrEC,EAAQ,SAACC,EAAQC,EAAU,CAChC,IAAIC,EAAQ,EACZF,EAAO,UACLG,EAAyBF,EAAY,SAACG,EAAK,CACzC,IAAMC,EAASR,EAAUO,EAAOF,GAAO,GACtCG,GAAUP,IAAcG,EAAW,KAAKG,CAAK,EAC9C,CAACC,GAAUJ,EAAW,SAAQ,CAChC,CAAC,CAAC,CAEN,CAAC,CACH,CCyCM,SAAUK,EACdC,EACAC,EACAC,EAA8B,CAK9B,IAAMC,EACJC,EAAWJ,CAAc,GAAKC,GAASC,EAElC,CAAE,KAAMF,EAA2E,MAAKC,EAAE,SAAQC,CAAA,EACnGF,EAEN,OAAOG,EACHE,EAAQ,SAACC,EAAQC,EAAU,QACzBC,EAAAL,EAAY,aAAS,MAAAK,IAAA,QAAAA,EAAA,KAArBL,CAAW,EACX,IAAIM,EAAU,GACdH,EAAO,UACLI,EACEH,EACA,SAACI,EAAK,QACJH,EAAAL,EAAY,QAAI,MAAAK,IAAA,QAAAA,EAAA,KAAhBL,EAAmBQ,CAAK,EACxBJ,EAAW,KAAKI,CAAK,CACvB,EACA,UAAA,OACEF,EAAU,IACVD,EAAAL,EAAY,YAAQ,MAAAK,IAAA,QAAAA,EAAA,KAApBL,CAAW,EACXI,EAAW,SAAQ,CACrB,EACA,SAACK,EAAG,OACFH,EAAU,IACVD,EAAAL,EAAY,SAAK,MAAAK,IAAA,QAAAA,EAAA,KAAjBL,EAAoBS,CAAG,EACvBL,EAAW,MAAMK,CAAG,CACtB,EACA,UAAA,SACMH,KACFD,EAAAL,EAAY,eAAW,MAAAK,IAAA,QAAAA,EAAA,KAAvBL,CAAW,IAEbU,EAAAV,EAAY,YAAQ,MAAAU,IAAA,QAAAA,EAAA,KAApBV,CAAW,CACb,CAAC,CACF,CAEL,CAAC,EAIDW,EACN,CC9IO,IAAMC,GAAwC,CACnD,QAAS,GACT,SAAU,IAiDN,SAAUC,GACdC,EACAC,EAA8C,CAA9C,OAAAA,IAAA,SAAAA,EAAAH,IAEOI,EAAQ,SAACC,EAAQC,EAAU,CACxB,IAAAC,EAAsBJ,EAAM,QAAnBK,EAAaL,EAAM,SAChCM,EAAW,GACXC,EAAsB,KACtBC,EAAiC,KACjCC,EAAa,GAEXC,EAAgB,UAAA,CACpBF,GAAS,MAATA,EAAW,YAAW,EACtBA,EAAY,KACRH,IACFM,EAAI,EACJF,GAAcN,EAAW,SAAQ,EAErC,EAEMS,EAAoB,UAAA,CACxBJ,EAAY,KACZC,GAAcN,EAAW,SAAQ,CACnC,EAEMU,EAAgB,SAACC,EAAQ,CAC7B,OAACN,EAAYO,EAAUhB,EAAiBe,CAAK,CAAC,EAAE,UAAUE,EAAyBb,EAAYO,EAAeE,CAAiB,CAAC,CAAhI,EAEID,EAAO,UAAA,CACX,GAAIL,EAAU,CAIZA,EAAW,GACX,IAAMQ,EAAQP,EACdA,EAAY,KAEZJ,EAAW,KAAKW,CAAK,EACrB,CAACL,GAAcI,EAAcC,CAAK,EAEtC,EAEAZ,EAAO,UACLc,EACEb,EAMA,SAACW,EAAK,CACJR,EAAW,GACXC,EAAYO,EACZ,EAAEN,GAAa,CAACA,EAAU,UAAYJ,EAAUO,EAAI,EAAKE,EAAcC,CAAK,EAC9E,EACA,UAAA,CACEL,EAAa,GACb,EAAEJ,GAAYC,GAAYE,GAAa,CAACA,EAAU,SAAWL,EAAW,SAAQ,CAClF,CAAC,CACF,CAEL,CAAC,CACH,CCvEM,SAAUc,GACdC,EACAC,EACAC,EAA8B,CAD9BD,IAAA,SAAAA,EAAAE,IACAD,IAAA,SAAAA,EAAAE,IAEA,IAAMC,EAAYC,GAAMN,EAAUC,CAAS,EAC3C,OAAOM,GAAS,UAAA,CAAM,OAAAF,CAAA,EAAWH,CAAM,CACzC,CCJM,SAAUM,IAAc,SAAOC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,GAAA,UAAAA,GACnC,IAAMC,EAAUC,GAAkBH,CAAM,EAExC,OAAOI,EAAQ,SAACC,EAAQC,EAAU,CAehC,QAdMC,EAAMP,EAAO,OACbQ,EAAc,IAAI,MAAMD,CAAG,EAI7BE,EAAWT,EAAO,IAAI,UAAA,CAAM,MAAA,EAAA,CAAK,EAGjCU,EAAQ,cAMHC,EAAC,CACRC,EAAUZ,EAAOW,EAAE,EAAE,UACnBE,EACEP,EACA,SAACQ,EAAK,CACJN,EAAYG,GAAKG,EACb,CAACJ,GAAS,CAACD,EAASE,KAEtBF,EAASE,GAAK,IAKbD,EAAQD,EAAS,MAAMM,EAAQ,KAAON,EAAW,MAEtD,EAGAO,EAAI,CACL,GAnBIL,EAAI,EAAGA,EAAIJ,EAAKI,MAAhBA,CAAC,EAwBVN,EAAO,UACLQ,EAAyBP,EAAY,SAACQ,EAAK,CACzC,GAAIJ,EAAO,CAET,IAAMO,EAAMC,EAAA,CAAIJ,CAAK,EAAAK,EAAKX,CAAW,CAAA,EACrCF,EAAW,KAAKJ,EAAUA,EAAO,MAAA,OAAAgB,EAAA,CAAA,EAAAC,EAAIF,CAAM,CAAA,CAAA,EAAIA,CAAM,EAEzD,CAAC,CAAC,CAEN,CAAC,CACH,CCxFM,SAAUG,IAAG,SAAOC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,GAAA,UAAAA,GACxB,OAAOC,EAAQ,SAACC,EAAQC,EAAU,CAChCL,GAAS,MAAA,OAAAM,EAAA,CAACF,CAA8B,EAAAG,EAAMN,CAAuC,CAAA,CAAA,EAAE,UAAUI,CAAU,CAC7G,CAAC,CACH,CCCM,SAAUG,IAAO,SAAkCC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,GAAA,UAAAA,GACvD,OAAOC,GAAG,MAAA,OAAAC,EAAA,CAAA,EAAAC,EAAIJ,CAAW,CAAA,CAAA,CAC3B,CCYO,SAASK,IAAmC,CACjD,IAAMC,EAAY,IAAIC,GAAwB,CAAC,EAC/C,OAAAC,EAAU,SAAU,mBAAoB,CAAE,KAAM,EAAK,CAAC,EACnD,UAAU,IAAMF,EAAU,KAAK,QAAQ,CAAC,EAGpCA,CACT,CCHO,SAASG,EACdC,EAAkBC,EAAmB,SAChC,CACL,OAAO,MAAM,KAAKA,EAAK,iBAAoBD,CAAQ,CAAC,CACtD,CAuBO,SAASE,EACdF,EAAkBC,EAAmB,SAClC,CACH,IAAME,EAAKC,GAAsBJ,EAAUC,CAAI,EAC/C,GAAI,OAAOE,GAAO,YAChB,MAAM,IAAI,eACR,8BAA8BH,kBAChC,EAGF,OAAOG,CACT,CAsBO,SAASC,GACdJ,EAAkBC,EAAmB,SACtB,CACf,OAAOA,EAAK,cAAiBD,CAAQ,GAAK,MAC5C,CAOO,SAASK,IAA4C,CAC1D,OAAO,SAAS,yBAAyB,aACrC,SAAS,eAAiB,MAEhC,CClEO,SAASC,GACdC,EACqB,CACrB,OAAOC,EACLC,EAAU,SAAS,KAAM,SAAS,EAClCA,EAAU,SAAS,KAAM,UAAU,CACrC,EACG,KACCC,GAAa,CAAC,EACdC,EAAI,IAAM,CACR,IAAMC,EAASC,GAAiB,EAChC,OAAO,OAAOD,GAAW,YACrBL,EAAG,SAASK,CAAM,EAClB,EACN,CAAC,EACDE,EAAUP,IAAOM,GAAiB,CAAC,EACnCE,EAAqB,CACvB,CACJ,CChBO,SAASC,GACdC,EACe,CACf,MAAO,CACL,EAAGA,EAAG,WACN,EAAGA,EAAG,SACR,CACF,CAWO,SAASC,GACdD,EAC2B,CAC3B,OAAOE,EACLC,EAAU,OAAQ,MAAM,EACxBA,EAAU,OAAQ,QAAQ,CAC5B,EACG,KACCC,GAAU,EAAGC,EAAuB,EACpCC,EAAI,IAAMP,GAAiBC,CAAE,CAAC,EAC9BO,EAAUR,GAAiBC,CAAE,CAAC,CAChC,CACJ,CCxCO,SAASQ,GACdC,EACe,CACf,MAAO,CACL,EAAGA,EAAG,WACN,EAAGA,EAAG,SACR,CACF,CAWO,SAASC,GACdD,EAC2B,CAC3B,OAAOE,EACLC,EAAUH,EAAI,QAAQ,EACtBG,EAAU,OAAQ,QAAQ,CAC5B,EACG,KACCC,GAAU,EAAGC,EAAuB,EACpCC,EAAI,IAAMP,GAAwBC,CAAE,CAAC,EACrCO,EAAUR,GAAwBC,CAAE,CAAC,CACvC,CACJ,CCpEA,IAAIQ,GAAW,UAAY,CACvB,GAAI,OAAO,KAAQ,YACf,OAAO,IASX,SAASC,EAASC,EAAKC,EAAK,CACxB,IAAIC,EAAS,GACb,OAAAF,EAAI,KAAK,SAAUG,EAAOC,EAAO,CAC7B,OAAID,EAAM,KAAOF,GACbC,EAASE,EACF,IAEJ,EACX,CAAC,EACMF,CACX,CACA,OAAsB,UAAY,CAC9B,SAASG,GAAU,CACf,KAAK,YAAc,CAAC,CACxB,CACA,cAAO,eAAeA,EAAQ,UAAW,OAAQ,CAI7C,IAAK,UAAY,CACb,OAAO,KAAK,YAAY,MAC5B,EACA,WAAY,GACZ,aAAc,EAClB,CAAC,EAKDA,EAAQ,UAAU,IAAM,SAAUJ,EAAK,CACnC,IAAIG,EAAQL,EAAS,KAAK,YAAaE,CAAG,EACtCE,EAAQ,KAAK,YAAYC,GAC7B,OAAOD,GAASA,EAAM,EAC1B,EAMAE,EAAQ,UAAU,IAAM,SAAUJ,EAAKK,EAAO,CAC1C,IAAIF,EAAQL,EAAS,KAAK,YAAaE,CAAG,EACtC,CAACG,EACD,KAAK,YAAYA,GAAO,GAAKE,EAG7B,KAAK,YAAY,KAAK,CAACL,EAAKK,CAAK,CAAC,CAE1C,EAKAD,EAAQ,UAAU,OAAS,SAAUJ,EAAK,CACtC,IAAIM,EAAU,KAAK,YACfH,EAAQL,EAASQ,EAASN,CAAG,EAC7B,CAACG,GACDG,EAAQ,OAAOH,EAAO,CAAC,CAE/B,EAKAC,EAAQ,UAAU,IAAM,SAAUJ,EAAK,CACnC,MAAO,CAAC,CAAC,CAACF,EAAS,KAAK,YAAaE,CAAG,CAC5C,EAIAI,EAAQ,UAAU,MAAQ,UAAY,CAClC,KAAK,YAAY,OAAO,CAAC,CAC7B,EAMAA,EAAQ,UAAU,QAAU,SAAUG,EAAUC,EAAK,CAC7CA,IAAQ,SAAUA,EAAM,MAC5B,QAASC,EAAK,EAAGC,EAAK,KAAK,YAAaD,EAAKC,EAAG,OAAQD,IAAM,CAC1D,IAAIP,EAAQQ,EAAGD,GACfF,EAAS,KAAKC,EAAKN,EAAM,GAAIA,EAAM,EAAE,CACzC,CACJ,EACOE,CACX,EAAE,CACN,EAAG,EAKCO,GAAY,OAAO,QAAW,aAAe,OAAO,UAAa,aAAe,OAAO,WAAa,SAGpGC,GAAY,UAAY,CACxB,OAAI,OAAO,QAAW,aAAe,OAAO,OAAS,KAC1C,OAEP,OAAO,MAAS,aAAe,KAAK,OAAS,KACtC,KAEP,OAAO,QAAW,aAAe,OAAO,OAAS,KAC1C,OAGJ,SAAS,aAAa,EAAE,CACnC,EAAG,EAQCC,GAA2B,UAAY,CACvC,OAAI,OAAO,uBAA0B,WAI1B,sBAAsB,KAAKD,EAAQ,EAEvC,SAAUL,EAAU,CAAE,OAAO,WAAW,UAAY,CAAE,OAAOA,EAAS,KAAK,IAAI,CAAC,CAAG,EAAG,IAAO,EAAE,CAAG,CAC7G,EAAG,EAGCO,GAAkB,EAStB,SAASC,GAAUR,EAAUS,EAAO,CAChC,IAAIC,EAAc,GAAOC,EAAe,GAAOC,EAAe,EAO9D,SAASC,GAAiB,CAClBH,IACAA,EAAc,GACdV,EAAS,GAETW,GACAG,EAAM,CAEd,CAQA,SAASC,GAAkB,CACvBT,GAAwBO,CAAc,CAC1C,CAMA,SAASC,GAAQ,CACb,IAAIE,EAAY,KAAK,IAAI,EACzB,GAAIN,EAAa,CAEb,GAAIM,EAAYJ,EAAeL,GAC3B,OAMJI,EAAe,EACnB,MAEID,EAAc,GACdC,EAAe,GACf,WAAWI,EAAiBN,CAAK,EAErCG,EAAeI,CACnB,CACA,OAAOF,CACX,CAGA,IAAIG,GAAgB,GAGhBC,GAAiB,CAAC,MAAO,QAAS,SAAU,OAAQ,QAAS,SAAU,OAAQ,QAAQ,EAEvFC,GAA4B,OAAO,kBAAqB,YAIxDC,GAA0C,UAAY,CAMtD,SAASA,GAA2B,CAMhC,KAAK,WAAa,GAMlB,KAAK,qBAAuB,GAM5B,KAAK,mBAAqB,KAM1B,KAAK,WAAa,CAAC,EACnB,KAAK,iBAAmB,KAAK,iBAAiB,KAAK,IAAI,EACvD,KAAK,QAAUZ,GAAS,KAAK,QAAQ,KAAK,IAAI,EAAGS,EAAa,CAClE,CAOA,OAAAG,EAAyB,UAAU,YAAc,SAAUC,EAAU,CAC5D,CAAC,KAAK,WAAW,QAAQA,CAAQ,GAClC,KAAK,WAAW,KAAKA,CAAQ,EAG5B,KAAK,YACN,KAAK,SAAS,CAEtB,EAOAD,EAAyB,UAAU,eAAiB,SAAUC,EAAU,CACpE,IAAIC,EAAY,KAAK,WACjB1B,EAAQ0B,EAAU,QAAQD,CAAQ,EAElC,CAACzB,GACD0B,EAAU,OAAO1B,EAAO,CAAC,EAGzB,CAAC0B,EAAU,QAAU,KAAK,YAC1B,KAAK,YAAY,CAEzB,EAOAF,EAAyB,UAAU,QAAU,UAAY,CACrD,IAAIG,EAAkB,KAAK,iBAAiB,EAGxCA,GACA,KAAK,QAAQ,CAErB,EASAH,EAAyB,UAAU,iBAAmB,UAAY,CAE9D,IAAII,EAAkB,KAAK,WAAW,OAAO,SAAUH,EAAU,CAC7D,OAAOA,EAAS,aAAa,EAAGA,EAAS,UAAU,CACvD,CAAC,EAMD,OAAAG,EAAgB,QAAQ,SAAUH,EAAU,CAAE,OAAOA,EAAS,gBAAgB,CAAG,CAAC,EAC3EG,EAAgB,OAAS,CACpC,EAOAJ,EAAyB,UAAU,SAAW,UAAY,CAGlD,CAAChB,IAAa,KAAK,aAMvB,SAAS,iBAAiB,gBAAiB,KAAK,gBAAgB,EAChE,OAAO,iBAAiB,SAAU,KAAK,OAAO,EAC1Ce,IACA,KAAK,mBAAqB,IAAI,iBAAiB,KAAK,OAAO,EAC3D,KAAK,mBAAmB,QAAQ,SAAU,CACtC,WAAY,GACZ,UAAW,GACX,cAAe,GACf,QAAS,EACb,CAAC,IAGD,SAAS,iBAAiB,qBAAsB,KAAK,OAAO,EAC5D,KAAK,qBAAuB,IAEhC,KAAK,WAAa,GACtB,EAOAC,EAAyB,UAAU,YAAc,UAAY,CAGrD,CAAChB,IAAa,CAAC,KAAK,aAGxB,SAAS,oBAAoB,gBAAiB,KAAK,gBAAgB,EACnE,OAAO,oBAAoB,SAAU,KAAK,OAAO,EAC7C,KAAK,oBACL,KAAK,mBAAmB,WAAW,EAEnC,KAAK,sBACL,SAAS,oBAAoB,qBAAsB,KAAK,OAAO,EAEnE,KAAK,mBAAqB,KAC1B,KAAK,qBAAuB,GAC5B,KAAK,WAAa,GACtB,EAQAgB,EAAyB,UAAU,iBAAmB,SAAUjB,EAAI,CAChE,IAAIsB,EAAKtB,EAAG,aAAcuB,EAAeD,IAAO,OAAS,GAAKA,EAE1DE,EAAmBT,GAAe,KAAK,SAAUzB,EAAK,CACtD,MAAO,CAAC,CAAC,CAACiC,EAAa,QAAQjC,CAAG,CACtC,CAAC,EACGkC,GACA,KAAK,QAAQ,CAErB,EAMAP,EAAyB,YAAc,UAAY,CAC/C,OAAK,KAAK,YACN,KAAK,UAAY,IAAIA,GAElB,KAAK,SAChB,EAMAA,EAAyB,UAAY,KAC9BA,CACX,EAAE,EASEQ,GAAsB,SAAUC,EAAQC,EAAO,CAC/C,QAAS5B,EAAK,EAAGC,EAAK,OAAO,KAAK2B,CAAK,EAAG5B,EAAKC,EAAG,OAAQD,IAAM,CAC5D,IAAIT,EAAMU,EAAGD,GACb,OAAO,eAAe2B,EAAQpC,EAAK,CAC/B,MAAOqC,EAAMrC,GACb,WAAY,GACZ,SAAU,GACV,aAAc,EAClB,CAAC,CACL,CACA,OAAOoC,CACX,EAQIE,GAAe,SAAUF,EAAQ,CAIjC,IAAIG,EAAcH,GAAUA,EAAO,eAAiBA,EAAO,cAAc,YAGzE,OAAOG,GAAe3B,EAC1B,EAGI4B,GAAYC,GAAe,EAAG,EAAG,EAAG,CAAC,EAOzC,SAASC,GAAQrC,EAAO,CACpB,OAAO,WAAWA,CAAK,GAAK,CAChC,CAQA,SAASsC,GAAeC,EAAQ,CAE5B,QADIC,EAAY,CAAC,EACRpC,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpCoC,EAAUpC,EAAK,GAAK,UAAUA,GAElC,OAAOoC,EAAU,OAAO,SAAUC,EAAMC,EAAU,CAC9C,IAAI1C,EAAQuC,EAAO,UAAYG,EAAW,UAC1C,OAAOD,EAAOJ,GAAQrC,CAAK,CAC/B,EAAG,CAAC,CACR,CAOA,SAAS2C,GAAYJ,EAAQ,CAGzB,QAFIC,EAAY,CAAC,MAAO,QAAS,SAAU,MAAM,EAC7CI,EAAW,CAAC,EACPxC,EAAK,EAAGyC,EAAcL,EAAWpC,EAAKyC,EAAY,OAAQzC,IAAM,CACrE,IAAIsC,EAAWG,EAAYzC,GACvBJ,EAAQuC,EAAO,WAAaG,GAChCE,EAASF,GAAYL,GAAQrC,CAAK,CACtC,CACA,OAAO4C,CACX,CAQA,SAASE,GAAkBf,EAAQ,CAC/B,IAAIgB,EAAOhB,EAAO,QAAQ,EAC1B,OAAOK,GAAe,EAAG,EAAGW,EAAK,MAAOA,EAAK,MAAM,CACvD,CAOA,SAASC,GAA0BjB,EAAQ,CAGvC,IAAIkB,EAAclB,EAAO,YAAamB,EAAenB,EAAO,aAS5D,GAAI,CAACkB,GAAe,CAACC,EACjB,OAAOf,GAEX,IAAII,EAASN,GAAYF,CAAM,EAAE,iBAAiBA,CAAM,EACpDa,EAAWD,GAAYJ,CAAM,EAC7BY,EAAWP,EAAS,KAAOA,EAAS,MACpCQ,EAAUR,EAAS,IAAMA,EAAS,OAKlCS,EAAQhB,GAAQE,EAAO,KAAK,EAAGe,EAASjB,GAAQE,EAAO,MAAM,EAqBjE,GAlBIA,EAAO,YAAc,eAOjB,KAAK,MAAMc,EAAQF,CAAQ,IAAMF,IACjCI,GAASf,GAAeC,EAAQ,OAAQ,OAAO,EAAIY,GAEnD,KAAK,MAAMG,EAASF,CAAO,IAAMF,IACjCI,GAAUhB,GAAeC,EAAQ,MAAO,QAAQ,EAAIa,IAOxD,CAACG,GAAkBxB,CAAM,EAAG,CAK5B,IAAIyB,EAAgB,KAAK,MAAMH,EAAQF,CAAQ,EAAIF,EAC/CQ,EAAiB,KAAK,MAAMH,EAASF,CAAO,EAAIF,EAMhD,KAAK,IAAIM,CAAa,IAAM,IAC5BH,GAASG,GAET,KAAK,IAAIC,CAAc,IAAM,IAC7BH,GAAUG,EAElB,CACA,OAAOrB,GAAeQ,EAAS,KAAMA,EAAS,IAAKS,EAAOC,CAAM,CACpE,CAOA,IAAII,GAAwB,UAAY,CAGpC,OAAI,OAAO,oBAAuB,YACvB,SAAU3B,EAAQ,CAAE,OAAOA,aAAkBE,GAAYF,CAAM,EAAE,kBAAoB,EAKzF,SAAUA,EAAQ,CAAE,OAAQA,aAAkBE,GAAYF,CAAM,EAAE,YACrE,OAAOA,EAAO,SAAY,UAAa,CAC/C,EAAG,EAOH,SAASwB,GAAkBxB,EAAQ,CAC/B,OAAOA,IAAWE,GAAYF,CAAM,EAAE,SAAS,eACnD,CAOA,SAAS4B,GAAe5B,EAAQ,CAC5B,OAAKzB,GAGDoD,GAAqB3B,CAAM,EACpBe,GAAkBf,CAAM,EAE5BiB,GAA0BjB,CAAM,EAL5BI,EAMf,CAQA,SAASyB,GAAmBvD,EAAI,CAC5B,IAAIwD,EAAIxD,EAAG,EAAGyD,EAAIzD,EAAG,EAAGgD,EAAQhD,EAAG,MAAOiD,EAASjD,EAAG,OAElD0D,EAAS,OAAO,iBAAoB,YAAc,gBAAkB,OACpEC,EAAO,OAAO,OAAOD,EAAO,SAAS,EAEzC,OAAAjC,GAAmBkC,EAAM,CACrB,EAAGH,EAAG,EAAGC,EAAG,MAAOT,EAAO,OAAQC,EAClC,IAAKQ,EACL,MAAOD,EAAIR,EACX,OAAQC,EAASQ,EACjB,KAAMD,CACV,CAAC,EACMG,CACX,CAWA,SAAS5B,GAAeyB,EAAGC,EAAGT,EAAOC,EAAQ,CACzC,MAAO,CAAE,EAAGO,EAAG,EAAGC,EAAG,MAAOT,EAAO,OAAQC,CAAO,CACtD,CAMA,IAAIW,GAAmC,UAAY,CAM/C,SAASA,EAAkBlC,EAAQ,CAM/B,KAAK,eAAiB,EAMtB,KAAK,gBAAkB,EAMvB,KAAK,aAAeK,GAAe,EAAG,EAAG,EAAG,CAAC,EAC7C,KAAK,OAASL,CAClB,CAOA,OAAAkC,EAAkB,UAAU,SAAW,UAAY,CAC/C,IAAID,EAAOL,GAAe,KAAK,MAAM,EACrC,YAAK,aAAeK,EACZA,EAAK,QAAU,KAAK,gBACxBA,EAAK,SAAW,KAAK,eAC7B,EAOAC,EAAkB,UAAU,cAAgB,UAAY,CACpD,IAAID,EAAO,KAAK,aAChB,YAAK,eAAiBA,EAAK,MAC3B,KAAK,gBAAkBA,EAAK,OACrBA,CACX,EACOC,CACX,EAAE,EAEEC,GAAqC,UAAY,CAOjD,SAASA,EAAoBnC,EAAQoC,EAAU,CAC3C,IAAIC,EAAcR,GAAmBO,CAAQ,EAO7CrC,GAAmB,KAAM,CAAE,OAAQC,EAAQ,YAAaqC,CAAY,CAAC,CACzE,CACA,OAAOF,CACX,EAAE,EAEEG,GAAmC,UAAY,CAW/C,SAASA,EAAkBnE,EAAUoE,EAAYC,EAAa,CAc1D,GAPA,KAAK,oBAAsB,CAAC,EAM5B,KAAK,cAAgB,IAAI/E,GACrB,OAAOU,GAAa,WACpB,MAAM,IAAI,UAAU,yDAAyD,EAEjF,KAAK,UAAYA,EACjB,KAAK,YAAcoE,EACnB,KAAK,aAAeC,CACxB,CAOA,OAAAF,EAAkB,UAAU,QAAU,SAAUtC,EAAQ,CACpD,GAAI,CAAC,UAAU,OACX,MAAM,IAAI,UAAU,0CAA0C,EAGlE,GAAI,SAAO,SAAY,aAAe,EAAE,mBAAmB,SAG3D,IAAI,EAAEA,aAAkBE,GAAYF,CAAM,EAAE,SACxC,MAAM,IAAI,UAAU,uCAAuC,EAE/D,IAAIyC,EAAe,KAAK,cAEpBA,EAAa,IAAIzC,CAAM,IAG3ByC,EAAa,IAAIzC,EAAQ,IAAIkC,GAAkBlC,CAAM,CAAC,EACtD,KAAK,YAAY,YAAY,IAAI,EAEjC,KAAK,YAAY,QAAQ,GAC7B,EAOAsC,EAAkB,UAAU,UAAY,SAAUtC,EAAQ,CACtD,GAAI,CAAC,UAAU,OACX,MAAM,IAAI,UAAU,0CAA0C,EAGlE,GAAI,SAAO,SAAY,aAAe,EAAE,mBAAmB,SAG3D,IAAI,EAAEA,aAAkBE,GAAYF,CAAM,EAAE,SACxC,MAAM,IAAI,UAAU,uCAAuC,EAE/D,IAAIyC,EAAe,KAAK,cAEpB,CAACA,EAAa,IAAIzC,CAAM,IAG5ByC,EAAa,OAAOzC,CAAM,EACrByC,EAAa,MACd,KAAK,YAAY,eAAe,IAAI,GAE5C,EAMAH,EAAkB,UAAU,WAAa,UAAY,CACjD,KAAK,YAAY,EACjB,KAAK,cAAc,MAAM,EACzB,KAAK,YAAY,eAAe,IAAI,CACxC,EAOAA,EAAkB,UAAU,aAAe,UAAY,CACnD,IAAII,EAAQ,KACZ,KAAK,YAAY,EACjB,KAAK,cAAc,QAAQ,SAAUC,EAAa,CAC1CA,EAAY,SAAS,GACrBD,EAAM,oBAAoB,KAAKC,CAAW,CAElD,CAAC,CACL,EAOAL,EAAkB,UAAU,gBAAkB,UAAY,CAEtD,GAAI,EAAC,KAAK,UAAU,EAGpB,KAAIlE,EAAM,KAAK,aAEXF,EAAU,KAAK,oBAAoB,IAAI,SAAUyE,EAAa,CAC9D,OAAO,IAAIR,GAAoBQ,EAAY,OAAQA,EAAY,cAAc,CAAC,CAClF,CAAC,EACD,KAAK,UAAU,KAAKvE,EAAKF,EAASE,CAAG,EACrC,KAAK,YAAY,EACrB,EAMAkE,EAAkB,UAAU,YAAc,UAAY,CAClD,KAAK,oBAAoB,OAAO,CAAC,CACrC,EAMAA,EAAkB,UAAU,UAAY,UAAY,CAChD,OAAO,KAAK,oBAAoB,OAAS,CAC7C,EACOA,CACX,EAAE,EAKE7C,GAAY,OAAO,SAAY,YAAc,IAAI,QAAY,IAAIhC,GAKjEmF,GAAgC,UAAY,CAO5C,SAASA,EAAezE,EAAU,CAC9B,GAAI,EAAE,gBAAgByE,GAClB,MAAM,IAAI,UAAU,oCAAoC,EAE5D,GAAI,CAAC,UAAU,OACX,MAAM,IAAI,UAAU,0CAA0C,EAElE,IAAIL,EAAahD,GAAyB,YAAY,EAClDC,EAAW,IAAI8C,GAAkBnE,EAAUoE,EAAY,IAAI,EAC/D9C,GAAU,IAAI,KAAMD,CAAQ,CAChC,CACA,OAAOoD,CACX,EAAE,EAEF,CACI,UACA,YACA,YACJ,EAAE,QAAQ,SAAUC,EAAQ,CACxBD,GAAe,UAAUC,GAAU,UAAY,CAC3C,IAAIvE,EACJ,OAAQA,EAAKmB,GAAU,IAAI,IAAI,GAAGoD,GAAQ,MAAMvE,EAAI,SAAS,CACjE,CACJ,CAAC,EAED,IAAIP,GAAS,UAAY,CAErB,OAAI,OAAOS,GAAS,gBAAmB,YAC5BA,GAAS,eAEboE,EACX,EAAG,EAEIE,GAAQ/E,GCr2Bf,IAAMgF,GAAS,IAAIC,EAYbC,GAAYC,EAAM,IAAMC,EAC5B,IAAIC,GAAeC,GAAW,CAC5B,QAAWC,KAASD,EAClBN,GAAO,KAAKO,CAAK,CACrB,CAAC,CACH,CAAC,EACE,KACCC,EAAUC,GAAYC,EAAMC,GAAOP,EAAGK,CAAQ,CAAC,EAC5C,KACCG,EAAS,IAAMH,EAAS,WAAW,CAAC,CACtC,CACF,EACAI,EAAY,CAAC,CACf,EAaK,SAASC,GACdC,EACa,CACb,MAAO,CACL,MAAQA,EAAG,YACX,OAAQA,EAAG,YACb,CACF,CAuBO,SAASC,GACdD,EACyB,CACzB,OAAOb,GACJ,KACCe,EAAIR,GAAYA,EAAS,QAAQM,CAAE,CAAC,EACpCP,EAAUC,GAAYT,GACnB,KACCkB,EAAO,CAAC,CAAE,OAAAC,CAAO,IAAMA,IAAWJ,CAAE,EACpCH,EAAS,IAAMH,EAAS,UAAUM,CAAE,CAAC,EACrCK,EAAI,IAAMN,GAAeC,CAAE,CAAC,CAC9B,CACF,EACAM,EAAUP,GAAeC,CAAE,CAAC,CAC9B,CACJ,CC1GO,SAASO,GACdC,EACa,CACb,MAAO,CACL,MAAQA,EAAG,YACX,OAAQA,EAAG,YACb,CACF,CASO,SAASC,GACdD,EACyB,CACzB,IAAIE,EAASF,EAAG,cAChB,KAAOE,IAEHF,EAAG,aAAeE,EAAO,aACzBF,EAAG,cAAgBE,EAAO,eAE1BA,GAAUF,EAAKE,GAAQ,cAK3B,OAAOA,EAASF,EAAK,MACvB,CCfA,IAAMG,GAAS,IAAIC,EAUbC,GAAYC,EAAM,IAAMC,EAC5B,IAAI,qBAAqBC,GAAW,CAClC,QAAWC,KAASD,EAClBL,GAAO,KAAKM,CAAK,CACrB,EAAG,CACD,UAAW,CACb,CAAC,CACH,CAAC,EACE,KACCC,EAAUC,GAAYC,EAAMC,GAAON,EAAGI,CAAQ,CAAC,EAC5C,KACCG,EAAS,IAAMH,EAAS,WAAW,CAAC,CACtC,CACF,EACAI,EAAY,CAAC,CACf,EAaK,SAASC,GACdC,EACqB,CACrB,OAAOZ,GACJ,KACCa,EAAIP,GAAYA,EAAS,QAAQM,CAAE,CAAC,EACpCP,EAAUC,GAAYR,GACnB,KACCgB,EAAO,CAAC,CAAE,OAAAC,CAAO,IAAMA,IAAWH,CAAE,EACpCH,EAAS,IAAMH,EAAS,UAAUM,CAAE,CAAC,EACrCI,EAAI,CAAC,CAAE,eAAAC,CAAe,IAAMA,CAAc,CAC5C,CACF,CACF,CACJ,CAaO,SAASC,GACdN,EAAiBO,EAAY,GACR,CACrB,OAAOC,GAA0BR,CAAE,EAChC,KACCI,EAAI,CAAC,CAAE,EAAAK,CAAE,IAAM,CACb,IAAMC,EAAUC,GAAeX,CAAE,EAC3BY,EAAUC,GAAsBb,CAAE,EACxC,OAAOS,GACLG,EAAQ,OAASF,EAAQ,OAASH,CAEtC,CAAC,EACDO,EAAqB,CACvB,CACJ,CCjFA,IAAMC,GAA4C,CAChD,OAAQC,EAAW,yBAAyB,EAC5C,OAAQA,EAAW,yBAAyB,CAC9C,EAaO,SAASC,GAAUC,EAAuB,CAC/C,OAAOH,GAAQG,GAAM,OACvB,CAaO,SAASC,GAAUD,EAAcE,EAAsB,CACxDL,GAAQG,GAAM,UAAYE,GAC5BL,GAAQG,GAAM,MAAM,CACxB,CAWO,SAASG,GAAYH,EAAmC,CAC7D,IAAMI,EAAKP,GAAQG,GACnB,OAAOK,EAAUD,EAAI,QAAQ,EAC1B,KACCE,EAAI,IAAMF,EAAG,OAAO,EACpBG,EAAUH,EAAG,OAAO,CACtB,CACJ,CClCA,SAASI,GACPC,EAAiBC,EACR,CACT,OAAQD,EAAG,YAAa,CAGtB,KAAK,iBAEH,OAAIA,EAAG,OAAS,QACP,SAAS,KAAKC,CAAI,EAElB,GAGX,KAAK,kBACL,KAAK,oBACH,MAAO,GAGT,QACE,OAAOD,EAAG,iBACd,CACF,CAWO,SAASE,IAAsC,CACpD,OAAOC,EAAyB,OAAQ,SAAS,EAC9C,KACCC,EAAOC,GAAM,EAAEA,EAAG,SAAWA,EAAG,QAAQ,EACxCC,EAAID,IAAO,CACT,KAAME,GAAU,QAAQ,EAAI,SAAW,SACvC,KAAMF,EAAG,IACT,OAAQ,CACNA,EAAG,eAAe,EAClBA,EAAG,gBAAgB,CACrB,CACF,EAAc,EACdD,EAAO,CAAC,CAAE,KAAAI,EAAM,KAAAP,CAAK,IAAM,CACzB,GAAIO,IAAS,SAAU,CACrB,IAAMC,EAASC,GAAiB,EAChC,GAAI,OAAOD,GAAW,YACpB,MAAO,CAACV,GAAwBU,EAAQR,CAAI,CAChD,CACA,MAAO,EACT,CAAC,EACDU,GAAM,CACR,CACJ,CCpFO,SAASC,IAAmB,CACjC,OAAO,IAAI,IAAI,SAAS,IAAI,CAC9B,CAOO,SAASC,GAAYC,EAAgB,CAC1C,SAAS,KAAOA,EAAI,IACtB,CASO,SAASC,IAA8B,CAC5C,OAAO,IAAIC,CACb,CCLA,SAASC,GAAYC,EAAiBC,EAA8B,CAGlE,GAAI,OAAOA,GAAU,UAAY,OAAOA,GAAU,SAChDD,EAAG,WAAaC,EAAM,SAAS,UAGtBA,aAAiB,KAC1BD,EAAG,YAAYC,CAAK,UAGX,MAAM,QAAQA,CAAK,EAC5B,QAAWC,KAAQD,EACjBF,GAAYC,EAAIE,CAAI,CAE1B,CAyBO,SAASC,EACdC,EAAaC,KAAmCC,EAC7C,CACH,IAAMN,EAAK,SAAS,cAAcI,CAAG,EAGrC,GAAIC,EACF,QAAWE,KAAQ,OAAO,KAAKF,CAAU,EACnC,OAAOA,EAAWE,IAAU,cAI5B,OAAOF,EAAWE,IAAU,UAC9BP,EAAG,aAAaO,EAAMF,EAAWE,EAAK,EAEtCP,EAAG,aAAaO,EAAM,EAAE,GAI9B,QAAWN,KAASK,EAClBP,GAAYC,EAAIC,CAAK,EAGvB,OAAOD,CACT,CChFO,SAASQ,GAASC,EAAeC,EAAmB,CACzD,IAAIC,EAAID,EACR,GAAID,EAAM,OAASE,EAAG,CACpB,KAAOF,EAAME,KAAO,KAAO,EAAEA,EAAI,GAAG,CACpC,MAAO,GAAGF,EAAM,UAAU,EAAGE,CAAC,MAChC,CACA,OAAOF,CACT,CAkBO,SAASG,GAAMH,EAAuB,CAC3C,GAAIA,EAAQ,IAAK,CACf,IAAMI,EAAS,GAAGJ,EAAQ,KAAO,IAAO,IACxC,MAAO,KAAKA,EAAQ,MAAY,KAAM,QAAQI,CAAM,IACtD,KACE,QAAOJ,EAAM,SAAS,CAE1B,CC5BO,SAASK,IAA0B,CACxC,OAAO,SAAS,KAAK,UAAU,CAAC,CAClC,CAYO,SAASC,GAAgBC,EAAoB,CAClD,IAAMC,EAAKC,EAAE,IAAK,CAAE,KAAMF,CAAK,CAAC,EAChCC,EAAG,iBAAiB,QAASE,GAAMA,EAAG,gBAAgB,CAAC,EACvDF,EAAG,MAAM,CACX,CASO,SAASG,IAAwC,CACtD,OAAOC,EAA2B,OAAQ,YAAY,EACnD,KACCC,EAAIR,EAAe,EACnBS,EAAUT,GAAgB,CAAC,EAC3BU,EAAOR,GAAQA,EAAK,OAAS,CAAC,EAC9BS,EAAY,CAAC,CACf,CACJ,CAOO,SAASC,IAA+C,CAC7D,OAAON,GAAkB,EACtB,KACCE,EAAIK,GAAMC,GAAmB,QAAQD,KAAM,CAAE,EAC7CH,EAAOP,GAAM,OAAOA,GAAO,WAAW,CACxC,CACJ,CC1CO,SAASY,GAAWC,EAAoC,CAC7D,IAAMC,EAAQ,WAAWD,CAAK,EAC9B,OAAOE,GAA0BC,GAC/BF,EAAM,YAAY,IAAME,EAAKF,EAAM,OAAO,CAAC,CAC5C,EACE,KACCG,EAAUH,EAAM,OAAO,CACzB,CACJ,CAOO,SAASI,IAAkC,CAChD,IAAMJ,EAAQ,WAAW,OAAO,EAChC,OAAOK,EACLC,EAAU,OAAQ,aAAa,EAAE,KAAKC,EAAI,IAAM,EAAI,CAAC,EACrDD,EAAU,OAAQ,YAAY,EAAE,KAAKC,EAAI,IAAM,EAAK,CAAC,CACvD,EACG,KACCJ,EAAUH,EAAM,OAAO,CACzB,CACJ,CAcO,SAASQ,GACdC,EAA6BC,EACd,CACf,OAAOD,EACJ,KACCE,EAAUC,GAAUA,EAASF,EAAQ,EAAIG,CAAK,CAChD,CACJ,CC7CO,SAASC,GACdC,EAAmBC,EAAuB,CAAE,YAAa,aAAc,EACjD,CACtB,OAAOC,GAAK,MAAM,GAAGF,IAAOC,CAAO,CAAC,EACjC,KACCE,GAAW,IAAMC,CAAK,EACtBC,EAAUC,GAAOA,EAAI,SAAW,IAC5BC,GAAW,IAAM,IAAI,MAAMD,EAAI,UAAU,CAAC,EAC1CE,EAAGF,CAAG,CACV,CACF,CACJ,CAYO,SAASG,GACdT,EAAmBC,EACJ,CACf,OAAOF,GAAQC,EAAKC,CAAO,EACxB,KACCI,EAAUC,GAAOA,EAAI,KAAK,CAAC,EAC3BI,EAAY,CAAC,CACf,CACJ,CAUO,SAASC,GACdX,EAAmBC,EACG,CACtB,IAAMW,EAAM,IAAI,UAChB,OAAOb,GAAQC,EAAKC,CAAO,EACxB,KACCI,EAAUC,GAAOA,EAAI,KAAK,CAAC,EAC3BO,EAAIP,GAAOM,EAAI,gBAAgBN,EAAK,UAAU,CAAC,EAC/CI,EAAY,CAAC,CACf,CACJ,CClDO,SAASI,GAAYC,EAA+B,CACzD,IAAMC,EAASC,EAAE,SAAU,CAAE,IAAAF,CAAI,CAAC,EAClC,OAAOG,EAAM,KACX,SAAS,KAAK,YAAYF,CAAM,EACzBG,EACLC,EAAUJ,EAAQ,MAAM,EACxBI,EAAUJ,EAAQ,OAAO,EACtB,KACCK,EAAU,IACRC,GAAW,IAAM,IAAI,eAAe,mBAAmBP,GAAK,CAAC,CAC9D,CACH,CACJ,EACG,KACCQ,EAAI,IAAG,EAAY,EACnBC,EAAS,IAAM,SAAS,KAAK,YAAYR,CAAM,CAAC,EAChDS,GAAK,CAAC,CACR,EACH,CACH,CCfO,SAASC,IAAoC,CAClD,MAAO,CACL,EAAG,KAAK,IAAI,EAAG,OAAO,EACtB,EAAG,KAAK,IAAI,EAAG,OAAO,CACxB,CACF,CASO,SAASC,IAAkD,CAChE,OAAOC,EACLC,EAAU,OAAQ,SAAU,CAAE,QAAS,EAAK,CAAC,EAC7CA,EAAU,OAAQ,SAAU,CAAE,QAAS,EAAK,CAAC,CAC/C,EACG,KACCC,EAAIJ,EAAiB,EACrBK,EAAUL,GAAkB,CAAC,CAC/B,CACJ,CC3BO,SAASM,IAAgC,CAC9C,MAAO,CACL,MAAQ,WACR,OAAQ,WACV,CACF,CASO,SAASC,IAA8C,CAC5D,OAAOC,EAAU,OAAQ,SAAU,CAAE,QAAS,EAAK,CAAC,EACjD,KACCC,EAAIH,EAAe,EACnBI,EAAUJ,GAAgB,CAAC,CAC7B,CACJ,CCXO,SAASK,IAAsC,CACpD,OAAOC,EAAc,CACnBC,GAAoB,EACpBC,GAAkB,CACpB,CAAC,EACE,KACCC,EAAI,CAAC,CAACC,EAAQC,CAAI,KAAO,CAAE,OAAAD,EAAQ,KAAAC,CAAK,EAAE,EAC1CC,EAAY,CAAC,CACf,CACJ,CCVO,SAASC,GACdC,EAAiB,CAAE,UAAAC,EAAW,QAAAC,CAAQ,EAChB,CACtB,IAAMC,EAAQF,EACX,KACCG,EAAwB,MAAM,CAChC,EAGIC,EAAUC,EAAc,CAACH,EAAOD,CAAO,CAAC,EAC3C,KACCK,EAAI,IAAMC,GAAiBR,CAAE,CAAC,CAChC,EAGF,OAAOM,EAAc,CAACJ,EAASD,EAAWI,CAAO,CAAC,EAC/C,KACCE,EAAI,CAAC,CAAC,CAAE,OAAAE,CAAO,EAAG,CAAE,OAAAC,EAAQ,KAAAC,CAAK,EAAG,CAAE,EAAAC,EAAG,EAAAC,CAAE,CAAC,KAAO,CACjD,OAAQ,CACN,EAAGH,EAAO,EAAIE,EACd,EAAGF,EAAO,EAAIG,EAAIJ,CACpB,EACA,KAAAE,CACF,EAAE,CACJ,CACJ,CCIO,SAASG,GACdC,EAAgB,CAAE,IAAAC,CAAI,EACP,CAGf,IAAMC,EAAMC,EAAwBH,EAAQ,SAAS,EAClD,KACCI,EAAI,CAAC,CAAE,KAAAC,CAAK,IAAMA,CAAS,CAC7B,EAGF,OAAOJ,EACJ,KACCK,GAAS,IAAMJ,EAAK,CAAE,QAAS,GAAM,SAAU,EAAK,CAAC,EACrDK,EAAIC,GAAWR,EAAO,YAAYQ,CAAO,CAAC,EAC1CC,EAAU,IAAMP,CAAG,EACnBQ,GAAM,CACR,CACJ,CCCA,IAAMC,GAASC,EAAW,WAAW,EAC/BC,GAAiB,KAAK,MAAMF,GAAO,WAAY,EACrDE,GAAO,KAAO,GAAG,IAAI,IAAIA,GAAO,KAAMC,GAAY,CAAC,IAW5C,SAASC,IAAwB,CACtC,OAAOF,EACT,CASO,SAASG,EAAQC,EAAqB,CAC3C,OAAOJ,GAAO,SAAS,SAASI,CAAI,CACtC,CAUO,SAASC,GACdC,EAAkBC,EACV,CACR,OAAO,OAAOA,GAAU,YACpBP,GAAO,aAAaM,GAAK,QAAQ,IAAKC,EAAM,SAAS,CAAC,EACtDP,GAAO,aAAaM,EAC1B,CCjCO,SAASE,GACdC,EAASC,EAAmB,SACP,CACrB,OAAOC,EAAW,sBAAsBF,KAASC,CAAI,CACvD,CAYO,SAASE,GACdH,EAASC,EAAmB,SACL,CACvB,OAAOG,EAAY,sBAAsBJ,KAASC,CAAI,CACxD,CC1EO,SAASI,GACdC,EACsB,CACtB,IAAMC,EAASC,EAAW,6BAA8BF,CAAE,EAC1D,OAAOG,EAAUF,EAAQ,QAAS,CAAE,KAAM,EAAK,CAAC,EAC7C,KACCG,EAAI,IAAMF,EAAW,cAAeF,CAAE,CAAC,EACvCI,EAAIC,IAAY,CAAE,KAAM,UAAUA,EAAQ,SAAS,CAAE,EAAE,CACzD,CACJ,CASO,SAASC,GACdN,EACiC,CACjC,MAAI,CAACO,EAAQ,kBAAkB,GAAK,CAACP,EAAG,kBAC/BQ,EAGFC,EAAM,IAAM,CACjB,IAAMC,EAAQ,IAAIC,EAClB,OAAAD,EACG,KACCE,EAAU,CAAE,KAAM,SAAiB,YAAY,CAAE,CAAC,CACpD,EACG,UAAU,CAAC,CAAE,KAAAC,CAAK,IAAM,CA5FjC,IAAAC,EA6FcD,GAAQA,MAAUC,EAAA,SAAiB,YAAY,IAA7B,KAAAA,EAAkCD,KACtDb,EAAG,OAAS,GAGZ,SAAiB,aAAca,CAAI,EAEvC,CAAC,EAGEd,GAAcC,CAAE,EACpB,KACCe,EAAIC,GAASN,EAAM,KAAKM,CAAK,CAAC,EAC9BC,EAAS,IAAMP,EAAM,SAAS,CAAC,EAC/BN,EAAIY,GAAUE,EAAA,CAAE,IAAKlB,GAAOgB,EAAQ,CACtC,CACJ,CAAC,CACH,CC5BO,SAASG,GACdC,EAAiB,CAAE,QAAAC,CAAQ,EACN,CACrB,OAAOA,EACJ,KACCC,EAAIC,IAAW,CAAE,OAAQA,IAAWH,CAAG,EAAE,CAC3C,CACJ,CAYO,SAASI,GACdJ,EAAiBK,EACe,CAChC,IAAMC,EAAY,IAAIC,EACtB,OAAAD,EAAU,UAAU,CAAC,CAAE,OAAAE,CAAO,IAAM,CAClCR,EAAG,OAASQ,CACd,CAAC,EAGMT,GAAaC,EAAIK,CAAO,EAC5B,KACCI,EAAIC,GAASJ,EAAU,KAAKI,CAAK,CAAC,EAClCC,EAAS,IAAML,EAAU,SAAS,CAAC,EACnCJ,EAAIQ,GAAUE,EAAA,CAAE,IAAKZ,GAAOU,EAAQ,CACtC,CACJ,CC7FA,IAAAG,GAAwB,SCajB,SAASC,GAAcC,EAA0B,CACtD,OACEC,EAAC,OAAI,MAAM,aAAa,GAAID,GAC1BC,EAAC,OAAI,MAAM,+BAA+B,CAC5C,CAEJ,CCHO,SAASC,GACdC,EAAqBC,EACR,CAIb,GAHAA,EAASA,EAAS,GAAGA,gBAAqBD,IAAO,OAG7CC,EAAQ,CACV,IAAMC,EAASD,EAAS,IAAIA,IAAW,OACvC,OACEE,EAAC,SAAM,MAAM,gBAAgB,SAAU,GACpCC,GAAcH,CAAM,EACrBE,EAAC,KAAE,KAAMD,EAAQ,MAAM,uBAAuB,SAAU,IACtDC,EAAC,QAAK,wBAAuBH,EAAI,CACnC,CACF,CAEJ,KACE,QACEG,EAAC,SAAM,MAAM,gBAAgB,SAAU,GACpCC,GAAcH,CAAM,EACrBE,EAAC,QAAK,MAAM,uBAAuB,SAAU,IAC3CA,EAAC,QAAK,wBAAuBH,EAAI,CACnC,CACF,CAGN,CC5BO,SAASK,GAAsBC,EAAyB,CAC7D,OACEC,EAAC,UACC,MAAM,uBACN,MAAOC,GAAY,gBAAgB,EACnC,wBAAuB,IAAIF,WAC5B,CAEL,CCYA,SAASG,GACPC,EAA2CC,EAC9B,CACb,IAAMC,EAASD,EAAO,EAChBE,EAASF,EAAO,EAGhBG,EAAU,OAAO,KAAKJ,EAAS,KAAK,EACvC,OAAOK,GAAO,CAACL,EAAS,MAAMK,EAAI,EAClC,OAAyB,CAACC,EAAMD,IAAQ,CACvC,GAAGC,EAAMC,EAAC,WAAKF,CAAI,EAAQ,GAC7B,EAAG,CAAC,CAAC,EACJ,MAAM,EAAG,EAAE,EAGRG,EAAM,IAAI,IAAIR,EAAS,QAAQ,EACjCS,EAAQ,kBAAkB,GAC5BD,EAAI,aAAa,IAAI,IAAK,OAAO,QAAQR,EAAS,KAAK,EACpD,OAAO,CAAC,CAAC,CAAEU,CAAK,IAAMA,CAAK,EAC3B,OAAO,CAACC,EAAW,CAACC,CAAK,IAAM,GAAGD,KAAaC,IAAQ,KAAK,EAAG,EAAE,CACpE,EAGF,GAAM,CAAE,KAAAC,CAAK,EAAIC,GAAc,EAC/B,OACEP,EAAC,KAAE,KAAM,GAAGC,IAAO,MAAM,yBAAyB,SAAU,IAC1DD,EAAC,WACC,MAAO,CAAC,4BAA6B,GAAGL,EACpC,CAAC,qCAAqC,EACtC,CAAC,CACL,EAAE,KAAK,GAAG,EACV,gBAAeF,EAAS,MAAM,QAAQ,CAAC,GAEtCE,EAAS,GAAKK,EAAC,OAAI,MAAM,iCAAiC,EAC3DA,EAAC,MAAG,MAAM,2BAA2BP,EAAS,KAAM,EACnDG,EAAS,GAAKH,EAAS,KAAK,OAAS,GACpCO,EAAC,KAAE,MAAM,4BACNQ,GAASf,EAAS,KAAM,GAAG,CAC9B,EAEDA,EAAS,MACRO,EAAC,OAAI,MAAM,cACRP,EAAS,KAAK,IAAIgB,GAAO,CACxB,IAAMC,EAAKD,EAAI,QAAQ,WAAY,EAAE,EAC/BE,EAAOL,EACTI,KAAMJ,EACJ,4BAA4BA,EAAKI,KACjC,cACF,GACJ,OACEV,EAAC,QAAK,MAAO,UAAUW,KAASF,CAAI,CAExC,CAAC,CACH,EAEDb,EAAS,GAAKC,EAAQ,OAAS,GAC9BG,EAAC,KAAE,MAAM,2BACNY,GAAY,4BAA4B,EAAE,KAAG,GAAGf,CACnD,CAEJ,CACF,CAEJ,CAaO,SAASgB,GACdC,EACa,CACb,IAAMC,EAAYD,EAAO,GAAG,MACtBE,EAAO,CAAC,GAAGF,CAAM,EAGjBnB,EAASqB,EAAK,UAAUC,GAAO,CAACA,EAAI,SAAS,SAAS,GAAG,CAAC,EAC1D,CAACC,CAAO,EAAIF,EAAK,OAAOrB,EAAQ,CAAC,EAGnCwB,EAAQH,EAAK,UAAUC,GAAOA,EAAI,MAAQF,CAAS,EACnDI,IAAU,KACZA,EAAQH,EAAK,QAGf,IAAMI,EAAOJ,EAAK,MAAM,EAAGG,CAAK,EAC1BE,EAAOL,EAAK,MAAMG,CAAK,EAGvBG,EAAW,CACf9B,GAAqB0B,EAAS,EAAc,EAAE,CAACvB,GAAUwB,IAAU,EAAE,EACrE,GAAGC,EAAK,IAAIG,GAAW/B,GAAqB+B,EAAS,CAAW,CAAC,EACjE,GAAGF,EAAK,OAAS,CACfrB,EAAC,WAAQ,MAAM,0BACbA,EAAC,WAAQ,SAAU,IAChBqB,EAAK,OAAS,GAAKA,EAAK,SAAW,EAChCT,GAAY,wBAAwB,EACpCA,GAAY,2BAA4BS,EAAK,MAAM,CAEzD,EACC,GAAGA,EAAK,IAAIE,GAAW/B,GAAqB+B,EAAS,CAAW,CAAC,CACpE,CACF,EAAI,CAAC,CACP,EAGA,OACEvB,EAAC,MAAG,MAAM,0BACPsB,CACH,CAEJ,CC1IO,SAASE,GAAkBC,EAAiC,CACjE,OACEC,EAAC,MAAG,MAAM,oBACP,OAAO,QAAQD,CAAK,EAAE,IAAI,CAAC,CAACE,EAAKC,CAAK,IACrCF,EAAC,MAAG,MAAO,oCAAoCC,KAC5C,OAAOC,GAAU,SAAWC,GAAMD,CAAK,EAAIA,CAC9C,CACD,CACH,CAEJ,CCAO,SAASE,GACdC,EACa,CACb,IAAMC,EAAU,kCAAkCD,IAClD,OACEE,EAAC,OAAI,MAAOD,EAAS,OAAM,IACzBC,EAAC,UAAO,MAAM,gBAAgB,SAAU,GAAI,CAC9C,CAEJ,CCpBO,SAASC,GAAYC,EAAiC,CAC3D,OACEC,EAAC,OAAI,MAAM,0BACTA,EAAC,OAAI,MAAM,qBACRD,CACH,CACF,CAEJ,CCMA,SAASE,GAAcC,EAA+B,CACpD,IAAMC,EAASC,GAAc,EAGvBC,EAAM,IAAI,IAAI,MAAMH,EAAQ,WAAYC,EAAO,IAAI,EACzD,OACEG,EAAC,MAAG,MAAM,oBACRA,EAAC,KAAE,KAAM,GAAGD,IAAO,MAAM,oBACtBH,EAAQ,KACX,CACF,CAEJ,CAcO,SAASK,GACdC,EAAqBC,EACR,CACb,OACEH,EAAC,OAAI,MAAM,cACTA,EAAC,UACC,MAAM,sBACN,aAAYI,GAAY,sBAAsB,GAE7CD,EAAO,KACV,EACAH,EAAC,MAAG,MAAM,oBACPE,EAAS,IAAIP,EAAa,CAC7B,CACF,CAEJ,CCCO,SAASU,GACdC,EAAiBC,EACO,CACxB,IAAMC,EAAUC,EAAM,IAAMC,EAAc,CACxCC,GAAmBL,CAAE,EACrBM,GAA0BL,CAAS,CACrC,CAAC,CAAC,EACC,KACCM,EAAI,CAAC,CAAC,CAAE,EAAAC,EAAG,EAAAC,CAAE,EAAGC,CAAM,IAAqB,CACzC,GAAM,CAAE,MAAAC,EAAO,OAAAC,CAAO,EAAIC,GAAeb,CAAE,EAC3C,MAAQ,CACN,EAAGQ,EAAIE,EAAO,EAAIC,EAAQ,EAC1B,EAAGF,EAAIC,EAAO,EAAIE,EAAS,CAC7B,CACF,CAAC,CACH,EAGF,OAAOE,GAAkBd,CAAE,EACxB,KACCe,EAAUC,GAAUd,EACjB,KACCK,EAAIU,IAAW,CAAE,OAAAD,EAAQ,OAAAC,CAAO,EAAE,EAClCC,GAAK,CAAC,CAACF,GAAU,GAAQ,CAC3B,CACF,CACF,CACJ,CAWO,SAASG,GACdnB,EAAiBC,EAAwB,CAAE,QAAAmB,CAAQ,EAChB,CACnC,GAAM,CAACC,EAASC,CAAK,EAAI,MAAM,KAAKtB,EAAG,QAAQ,EAG/C,OAAOG,EAAM,IAAM,CACjB,IAAMoB,EAAQ,IAAIC,EACZC,EAAQF,EAAM,KAAKG,GAAS,CAAC,CAAC,EACpC,OAAAH,EAAM,UAAU,CAGd,KAAK,CAAE,OAAAN,CAAO,EAAG,CACfjB,EAAG,MAAM,YAAY,iBAAkB,GAAGiB,EAAO,KAAK,EACtDjB,EAAG,MAAM,YAAY,iBAAkB,GAAGiB,EAAO,KAAK,CACxD,EAGA,UAAW,CACTjB,EAAG,MAAM,eAAe,gBAAgB,EACxCA,EAAG,MAAM,eAAe,gBAAgB,CAC1C,CACF,CAAC,EAGD2B,GAAuB3B,CAAE,EACtB,KACC4B,GAAUH,CAAK,CACjB,EACG,UAAUI,GAAW,CACpB7B,EAAG,gBAAgB,kBAAmB6B,CAAO,CAC/C,CAAC,EAGLC,EACEP,EAAM,KAAKQ,EAAO,CAAC,CAAE,OAAAf,CAAO,IAAMA,CAAM,CAAC,EACzCO,EAAM,KAAKS,GAAa,GAAG,EAAGD,EAAO,CAAC,CAAE,OAAAf,CAAO,IAAM,CAACA,CAAM,CAAC,CAC/D,EACG,UAAU,CAGT,KAAK,CAAE,OAAAA,CAAO,EAAG,CACXA,EACFhB,EAAG,QAAQqB,CAAO,EAElBA,EAAQ,OAAO,CACnB,EAGA,UAAW,CACTrB,EAAG,QAAQqB,CAAO,CACpB,CACF,CAAC,EAGHE,EACG,KACCU,GAAU,GAAIC,EAAuB,CACvC,EACG,UAAU,CAAC,CAAE,OAAAlB,CAAO,IAAM,CACzBK,EAAQ,UAAU,OAAO,qBAAsBL,CAAM,CACvD,CAAC,EAGLO,EACG,KACCY,GAAa,IAAKD,EAAuB,EACzCH,EAAO,IAAM,CAAC,CAAC/B,EAAG,YAAY,EAC9BO,EAAI,IAAMP,EAAG,aAAc,sBAAsB,CAAC,EAClDO,EAAI,CAAC,CAAE,EAAAC,CAAE,IAAMA,CAAC,CAClB,EACG,UAAU,CAGT,KAAK4B,EAAQ,CACPA,EACFpC,EAAG,MAAM,YAAY,iBAAkB,GAAG,CAACoC,KAAU,EAErDpC,EAAG,MAAM,eAAe,gBAAgB,CAC5C,EAGA,UAAW,CACTA,EAAG,MAAM,eAAe,gBAAgB,CAC1C,CACF,CAAC,EAGLqC,EAAsBf,EAAO,OAAO,EACjC,KACCM,GAAUH,CAAK,EACfM,EAAOO,GAAM,EAAEA,EAAG,SAAWA,EAAG,QAAQ,CAC1C,EACG,UAAUA,GAAMA,EAAG,eAAe,CAAC,EAGxCD,EAAsBf,EAAO,WAAW,EACrC,KACCM,GAAUH,CAAK,EACfc,GAAehB,CAAK,CACtB,EACG,UAAU,CAAC,CAACe,EAAI,CAAE,OAAAtB,CAAO,CAAC,IAAM,CAvOzC,IAAAwB,EA0OU,GAAIF,EAAG,SAAW,GAAKA,EAAG,SAAWA,EAAG,QACtCA,EAAG,eAAe,UAGTtB,EAAQ,CACjBsB,EAAG,eAAe,EAGlB,IAAMG,EAASzC,EAAG,cAAe,QAAQ,gBAAgB,EACrDyC,aAAkB,YACpBA,EAAO,MAAM,GAEbD,EAAAE,GAAiB,IAAjB,MAAAF,EAAoB,MACxB,CACF,CAAC,EAGLpB,EACG,KACCQ,GAAUH,CAAK,EACfM,EAAOY,GAAUA,IAAWtB,CAAO,EACnCuB,GAAM,GAAG,CACX,EACG,UAAU,IAAM5C,EAAG,MAAM,CAAC,EAGxBD,GAAgBC,EAAIC,CAAS,EACjC,KACC4C,EAAIC,GAASvB,EAAM,KAAKuB,CAAK,CAAC,EAC9BC,EAAS,IAAMxB,EAAM,SAAS,CAAC,EAC/BhB,EAAIuC,GAAUE,EAAA,CAAE,IAAKhD,GAAO8C,EAAQ,CACtC,CACJ,CAAC,CACH,CCrMA,SAASG,GAAsBC,EAAgC,CAC7D,IAAMC,EAAkB,CAAC,EACzB,QAAWC,KAAMC,EAAY,eAAgBH,CAAS,EAAG,CACvD,IAAMI,EAAgB,CAAC,EAGjBC,EAAK,SAAS,mBAAmBH,EAAI,WAAW,SAAS,EAC/D,QAASI,EAAOD,EAAG,SAAS,EAAGC,EAAMA,EAAOD,EAAG,SAAS,EACtDD,EAAM,KAAKE,CAAY,EAGzB,QAASC,KAAQH,EAAO,CACtB,IAAII,EAGJ,KAAQA,EAAQ,gBAAgB,KAAKD,EAAK,WAAY,GAAI,CACxD,GAAM,CAAC,CAAEE,EAAIC,CAAK,EAAIF,EACtB,GAAI,OAAOE,GAAU,YAAa,CAChC,IAAMC,EAASJ,EAAK,UAAUC,EAAM,KAAK,EACzCD,EAAOI,EAAO,UAAUF,EAAG,MAAM,EACjCR,EAAQ,KAAKU,CAAM,CAGrB,KAAO,CACLJ,EAAK,YAAcE,EACnBR,EAAQ,KAAKM,CAAI,EACjB,KACF,CACF,CACF,CACF,CACA,OAAON,CACT,CAQA,SAASW,GAAKC,EAAqBC,EAA2B,CAC5DA,EAAO,OAAO,GAAG,MAAM,KAAKD,EAAO,UAAU,CAAC,CAChD,CAoBO,SAASE,GACdb,EAAiBF,EAAwB,CAAE,QAAAgB,EAAS,OAAAC,CAAO,EACxB,CAGnC,IAAMC,EAASlB,EAAU,QAAQ,MAAM,EACjCmB,EAASD,GAAA,YAAAA,EAAQ,GAGjBE,EAAc,IAAI,IACxB,QAAWT,KAAUZ,GAAsBC,CAAS,EAAG,CACrD,GAAM,CAAC,CAAES,CAAE,EAAIE,EAAO,YAAa,MAAM,WAAW,EAChDU,GAAmB,gBAAgBZ,KAAOP,CAAE,IAC9CkB,EAAY,IAAIX,EAAIa,GAAiBb,EAAIU,CAAM,CAAC,EAChDR,EAAO,YAAYS,EAAY,IAAIX,CAAE,CAAE,EAE3C,CAGA,OAAIW,EAAY,OAAS,EAChBG,EAGFC,EAAM,IAAM,CACjB,IAAMC,EAAQ,IAAIC,EAGZC,EAAsC,CAAC,EAC7C,OAAW,CAAClB,EAAImB,CAAU,IAAKR,EAC7BO,EAAM,KAAK,CACTE,EAAW,cAAeD,CAAU,EACpCC,EAAW,gBAAgBpB,KAAOP,CAAE,CACtC,CAAC,EAGH,OAAAe,EACG,KACCa,GAAUL,EAAM,KAAKM,GAAS,CAAC,CAAC,CAAC,CACnC,EACG,UAAUC,GAAU,CACnB9B,EAAG,OAAS,CAAC8B,EAGb,OAAW,CAACC,EAAOC,CAAK,IAAKP,EACtBK,EAGHpB,GAAKqB,EAAOC,CAAK,EAFjBtB,GAAKsB,EAAOD,CAAK,CAGvB,CAAC,EAGEE,EAAM,GAAG,CAAC,GAAGf,CAAW,EAC5B,IAAI,CAAC,CAAC,CAAEQ,CAAU,IACjBQ,GAAgBR,EAAY5B,EAAW,CAAE,QAAAgB,CAAQ,CAAC,CACnD,CACH,EACG,KACCqB,EAAS,IAAMZ,EAAM,SAAS,CAAC,EAC/Ba,GAAM,CACR,CACJ,CAAC,CACH,CV9GA,IAAIC,GAAW,EAaf,SAASC,GAAkBC,EAA0C,CACnE,GAAIA,EAAG,mBAAoB,CACzB,IAAMC,EAAUD,EAAG,mBACnB,GAAIC,EAAQ,UAAY,KACtB,OAAOA,EAGJ,GAAIA,EAAQ,UAAY,KAAO,CAACA,EAAQ,SAAS,OACpD,OAAOF,GAAkBE,CAAO,CACpC,CAIF,CAgBO,SAASC,GACdF,EACuB,CACvB,OAAOG,GAAiBH,CAAE,EACvB,KACCI,EAAI,CAAC,CAAE,MAAAC,CAAM,KAEJ,CACL,WAFcC,GAAsBN,CAAE,EAElB,MAAQK,CAC9B,EACD,EACDE,EAAwB,YAAY,CACtC,CACJ,CAoBO,SAASC,GACdR,EAAiBS,EAC8B,CAC/C,GAAM,CAAE,QAASC,CAAM,EAAI,WAAW,SAAS,EAGzCC,EAAWC,EAAM,IAAM,CAC3B,IAAMC,EAAQ,IAAIC,EASlB,GARAD,EAAM,UAAU,CAAC,CAAE,WAAAE,CAAW,IAAM,CAC9BA,GAAcL,EAChBV,EAAG,aAAa,WAAY,GAAG,EAE/BA,EAAG,gBAAgB,UAAU,CACjC,CAAC,EAGG,GAAAgB,QAAY,YAAY,EAAG,CAC7B,IAAMC,EAASjB,EAAG,QAAQ,KAAK,EAC/BiB,EAAO,GAAK,UAAU,EAAEnB,KACxBmB,EAAO,aACLC,GAAsBD,EAAO,EAAE,EAC/BjB,CACF,CACF,CAGA,IAAMmB,EAAYnB,EAAG,QAAQ,YAAY,EACzC,GAAImB,aAAqB,YAAa,CACpC,IAAMC,EAAOrB,GAAkBoB,CAAS,EAGxC,GAAI,OAAOC,GAAS,cAClBD,EAAU,UAAU,SAAS,UAAU,GACvCE,EAAQ,uBAAuB,GAC9B,CACD,IAAMC,EAAeC,GAAoBH,EAAMpB,EAAIS,CAAO,EAG1D,OAAOP,GAAeF,CAAE,EACrB,KACCwB,EAAIC,GAASZ,EAAM,KAAKY,CAAK,CAAC,EAC9BC,EAAS,IAAMb,EAAM,SAAS,CAAC,EAC/BT,EAAIqB,GAAUE,EAAA,CAAE,IAAK3B,GAAOyB,EAAQ,EACpCG,GACEzB,GAAiBgB,CAAS,EACvB,KACCf,EAAI,CAAC,CAAE,MAAAC,EAAO,OAAAwB,CAAO,IAAMxB,GAASwB,CAAM,EAC1CC,EAAqB,EACrBC,EAAUC,GAAUA,EAASV,EAAeW,CAAK,CACnD,CACJ,CACF,CACJ,CACF,CAGA,OAAO/B,GAAeF,CAAE,EACrB,KACCwB,EAAIC,GAASZ,EAAM,KAAKY,CAAK,CAAC,EAC9BC,EAAS,IAAMb,EAAM,SAAS,CAAC,EAC/BT,EAAIqB,GAAUE,EAAA,CAAE,IAAK3B,GAAOyB,EAAQ,CACtC,CACJ,CAAC,EAGD,OAAIJ,EAAQ,cAAc,EACjBa,GAAuBlC,CAAE,EAC7B,KACCmC,EAAOC,GAAWA,CAAO,EACzBC,GAAK,CAAC,EACNN,EAAU,IAAMpB,CAAQ,CAC1B,EAGGA,CACT,4wJWpLA,IAAI2B,GAKAC,GAAW,EAWf,SAASC,IAAiC,CACxC,OAAO,OAAO,SAAY,aAAe,mBAAmB,QACxDC,GAAY,qDAAqD,EACjEC,EAAG,MAAS,CAClB,CAaO,SAASC,GACdC,EACgC,CAChC,OAAAA,EAAG,UAAU,OAAO,SAAS,EAC7BN,QAAaE,GAAa,EACvB,KACCK,EAAI,IAAM,QAAQ,WAAW,CAC3B,YAAa,GACb,SAAAC,GACA,SAAU,CACR,cAAe,OACf,gBAAiB,OACjB,aAAc,MAChB,CACF,CAAC,CAAC,EACFC,EAAI,IAAG,EAAY,EACnBC,EAAY,CAAC,CACf,GAGFV,GAAS,UAAU,IAAM,CACvBM,EAAG,UAAU,IAAI,SAAS,EAC1B,IAAMK,EAAK,aAAaV,OAClBW,EAAOC,EAAE,MAAO,CAAE,MAAO,SAAU,CAAC,EAC1C,QAAQ,WAAW,OAAOF,EAAIL,EAAG,YAAcQ,GAAgB,CAG7D,IAAMC,EAASH,EAAK,aAAa,CAAE,KAAM,QAAS,CAAC,EACnDG,EAAO,UAAYD,EAGnBR,EAAG,YAAYM,CAAI,CACrB,CAAC,CACH,CAAC,EAGMZ,GACJ,KACCS,EAAI,KAAO,CAAE,IAAKH,CAAG,EAAE,CACzB,CACJ,CC/CO,SAASU,GACdC,EAAwB,CAAE,QAAAC,EAAS,OAAAC,CAAO,EACrB,CACrB,IAAIC,EAAO,GACX,OAAOC,EAGLH,EACG,KACCI,EAAIC,GAAUA,EAAO,QAAQ,qBAAqB,CAAE,EACpDC,EAAOC,GAAWR,IAAOQ,CAAO,EAChCH,EAAI,KAAO,CACT,OAAQ,OAAQ,OAAQ,EAC1B,EAAa,CACf,EAGFH,EACG,KACCK,EAAOE,GAAUA,GAAU,CAACN,CAAI,EAChCO,EAAI,IAAMP,EAAOH,EAAG,IAAI,EACxBK,EAAII,IAAW,CACb,OAAQA,EAAS,OAAS,OAC5B,EAAa,CACf,CACJ,CACF,CAaO,SAASE,GACdX,EAAwBY,EACQ,CAChC,OAAOC,EAAM,IAAM,CACjB,IAAMC,EAAQ,IAAIC,EAClB,OAAAD,EAAM,UAAU,CAAC,CAAE,OAAAE,EAAQ,OAAAC,CAAO,IAAM,CACtCjB,EAAG,gBAAgB,OAAQgB,IAAW,MAAM,EACxCC,GACFjB,EAAG,eAAe,CACtB,CAAC,EAGMD,GAAaC,EAAIY,CAAO,EAC5B,KACCF,EAAIQ,GAASJ,EAAM,KAAKI,CAAK,CAAC,EAC9BC,EAAS,IAAML,EAAM,SAAS,CAAC,EAC/BT,EAAIa,GAAUE,EAAA,CAAE,IAAKpB,GAAOkB,EAAQ,CACtC,CACJ,CAAC,CACH,CC5FA,IAAMG,GAAWC,EAAE,OAAO,EAgBnB,SAASC,GACdC,EACkC,CAClC,OAAAA,EAAG,YAAYH,EAAQ,EACvBA,GAAS,YAAYI,GAAYD,CAAE,CAAC,EAG7BE,EAAG,CAAE,IAAKF,CAAG,CAAC,CACvB,CCuBO,SAASG,GACdC,EACyB,CACzB,IAAMC,EAASC,EAA8B,iBAAkBF,CAAE,EAC3DG,EAAUF,EAAO,KAAKG,GAASA,EAAM,OAAO,GAAKH,EAAO,GAC9D,OAAOI,EAAM,GAAGJ,EAAO,IAAIG,GAASE,EAAUF,EAAO,QAAQ,EAC1D,KACCG,EAAI,IAAMC,EAA6B,cAAcJ,EAAM,MAAM,CAAC,CACpE,CACF,CAAC,EACE,KACCK,EAAUD,EAA6B,cAAcL,EAAQ,MAAM,CAAC,EACpEI,EAAIG,IAAW,CAAE,OAAAA,CAAO,EAAE,CAC5B,CACJ,CAeO,SAASC,GACdX,EAAiB,CAAE,UAAAY,CAAU,EACO,CAGpC,IAAMC,EAAOC,GAAoB,MAAM,EACvCd,EAAG,OAAOa,CAAI,EAGd,IAAME,EAAOD,GAAoB,MAAM,EACvCd,EAAG,OAAOe,CAAI,EAGd,IAAMC,EAAYR,EAAW,iBAAkBR,CAAE,EACjD,OAAOiB,EAAM,IAAM,CACjB,IAAMC,EAAQ,IAAIC,EACZC,EAAQF,EAAM,KAAKG,GAAS,CAAC,CAAC,EACpC,OAAAC,EAAc,CAACJ,EAAOK,GAAiBvB,CAAE,CAAC,CAAC,EACxC,KACCwB,GAAU,EAAGC,EAAuB,EACpCC,GAAUN,CAAK,CACjB,EACG,UAAU,CAGT,KAAK,CAAC,CAAE,OAAAV,CAAO,EAAGiB,CAAI,EAAG,CACvB,IAAMC,EAASC,GAAiBnB,CAAM,EAChC,CAAE,MAAAoB,CAAM,EAAIC,GAAerB,CAAM,EAGvCV,EAAG,MAAM,YAAY,mBAAoB,GAAG4B,EAAO,KAAK,EACxD5B,EAAG,MAAM,YAAY,uBAAwB,GAAG8B,KAAS,EAGzD,IAAME,EAAUC,GAAwBjB,CAAS,GAE/CY,EAAO,EAAYI,EAAQ,GAC3BJ,EAAO,EAAIE,EAAQE,EAAQ,EAAIL,EAAK,QAEpCX,EAAU,SAAS,CACjB,KAAM,KAAK,IAAI,EAAGY,EAAO,EAAI,EAAE,EAC/B,SAAU,QACZ,CAAC,CACL,EAGA,UAAW,CACT5B,EAAG,MAAM,eAAe,kBAAkB,EAC1CA,EAAG,MAAM,eAAe,sBAAsB,CAChD,CACF,CAAC,EAGLsB,EAAc,CACZY,GAA0BlB,CAAS,EACnCO,GAAiBP,CAAS,CAC5B,CAAC,EACE,KACCU,GAAUN,CAAK,CACjB,EACG,UAAU,CAAC,CAACQ,EAAQD,CAAI,IAAM,CAC7B,IAAMK,EAAUG,GAAsBnB,CAAS,EAC/CH,EAAK,OAASe,EAAO,EAAI,GACzBb,EAAK,OAASa,EAAO,EAAII,EAAQ,MAAQL,EAAK,MAAQ,EACxD,CAAC,EAGLtB,EACEC,EAAUO,EAAM,OAAO,EAAE,KAAKN,EAAI,IAAM,EAAE,CAAC,EAC3CD,EAAUS,EAAM,OAAO,EAAE,KAAKR,EAAI,IAAM,CAAE,CAAC,CAC7C,EACG,KACCmB,GAAUN,CAAK,CACjB,EACG,UAAUgB,GAAa,CACtB,GAAM,CAAE,MAAAN,CAAM,EAAIC,GAAef,CAAS,EAC1CA,EAAU,SAAS,CACjB,KAAMc,EAAQM,EACd,SAAU,QACZ,CAAC,CACH,CAAC,EAGDC,EAAQ,mBAAmB,GAC7BnB,EAAM,KACJoB,GAAK,CAAC,EACNC,GAAe3B,CAAS,CAC1B,EACG,UAAU,CAAC,CAAC,CAAE,OAAAF,CAAO,EAAG,CAAE,OAAAkB,CAAO,CAAC,IAAM,CACvC,IAAMY,EAAM9B,EAAO,UAAU,KAAK,EAClC,GAAIA,EAAO,aAAa,mBAAmB,EACzCA,EAAO,gBAAgB,mBAAmB,MAGrC,CACL,IAAM+B,EAAIzC,EAAG,UAAY4B,EAAO,EAGhC,QAAWc,KAAOxC,EAAY,aAAa,EACzC,QAAWE,KAASF,EAClB,iBAAkBwC,CACpB,EAAG,CACD,IAAMC,EAAQnC,EAAW,cAAcJ,EAAM,MAAM,EACnD,GACEuC,IAAUjC,GACViC,EAAM,UAAU,KAAK,IAAMH,EAC3B,CACAG,EAAM,aAAa,oBAAqB,EAAE,EAC1CvC,EAAM,MAAM,EACZ,KACF,CACF,CAGF,OAAO,SAAS,CACd,IAAKJ,EAAG,UAAYyC,CACtB,CAAC,EAGD,IAAMG,EAAO,SAAmB,QAAQ,GAAK,CAAC,EAC9C,SAAS,SAAU,CAAC,GAAG,IAAI,IAAI,CAACJ,EAAK,GAAGI,CAAI,CAAC,CAAC,CAAC,CACjD,CACF,CAAC,EAGE7C,GAAiBC,CAAE,EACvB,KACC6C,EAAIC,GAAS5B,EAAM,KAAK4B,CAAK,CAAC,EAC9BC,EAAS,IAAM7B,EAAM,SAAS,CAAC,EAC/BX,EAAIuC,GAAUE,EAAA,CAAE,IAAKhD,GAAO8C,EAAQ,CACtC,CACJ,CAAC,EACE,KACCG,GAAYC,EAAc,CAC5B,CACJ,CCtKO,SAASC,GACdC,EAAiB,CAAE,UAAAC,EAAW,QAAAC,EAAS,OAAAC,CAAO,EACd,CAChC,OAAOC,EAGL,GAAGC,EAAY,2BAA4BL,CAAE,EAC1C,IAAIM,GAASC,GAAeD,EAAO,CAAE,QAAAJ,EAAS,OAAAC,CAAO,CAAC,CAAC,EAG1D,GAAGE,EAAY,cAAeL,CAAE,EAC7B,IAAIM,GAASE,GAAaF,CAAK,CAAC,EAGnC,GAAGD,EAAY,qBAAsBL,CAAE,EACpC,IAAIM,GAASG,GAAeH,CAAK,CAAC,EAGrC,GAAGD,EAAY,UAAWL,CAAE,EACzB,IAAIM,GAASI,GAAaJ,EAAO,CAAE,QAAAJ,EAAS,OAAAC,CAAO,CAAC,CAAC,EAGxD,GAAGE,EAAY,cAAeL,CAAE,EAC7B,IAAIM,GAASK,GAAiBL,EAAO,CAAE,UAAAL,CAAU,CAAC,CAAC,CACxD,CACF,CClCO,SAASW,GACdC,EAAkB,CAAE,OAAAC,CAAO,EACP,CACpB,OAAOA,EACJ,KACCC,EAAUC,GAAWC,EACnBC,EAAG,EAAI,EACPA,EAAG,EAAK,EAAE,KAAKC,GAAM,GAAI,CAAC,CAC5B,EACG,KACCC,EAAIC,IAAW,CAAE,QAAAL,EAAS,OAAAK,CAAO,EAAE,CACrC,CACF,CACF,CACJ,CAaO,SAASC,GACdC,EAAiBC,EACc,CAC/B,IAAMC,EAAQC,EAAW,cAAeH,CAAE,EAC1C,OAAOI,EAAM,IAAM,CACjB,IAAMC,EAAQ,IAAIC,EAClB,OAAAD,EAAM,UAAU,CAAC,CAAE,QAAAZ,EAAS,OAAAK,CAAO,IAAM,CACvCE,EAAG,UAAU,OAAO,oBAAqBF,CAAM,EAC/CI,EAAM,YAAcT,CACtB,CAAC,EAGMJ,GAAYW,EAAIC,CAAO,EAC3B,KACCM,EAAIC,GAASH,EAAM,KAAKG,CAAK,CAAC,EAC9BC,EAAS,IAAMJ,EAAM,SAAS,CAAC,EAC/BR,EAAIW,GAAUE,EAAA,CAAE,IAAKV,GAAOQ,EAAQ,CACtC,CACJ,CAAC,CACH,CC9BA,SAASG,GAAS,CAAE,UAAAC,CAAU,EAAsC,CAClE,GAAI,CAACC,EAAQ,iBAAiB,EAC5B,OAAOC,EAAG,EAAK,EAGjB,IAAMC,EAAaH,EAChB,KACCI,EAAI,CAAC,CAAE,OAAQ,CAAE,EAAAC,CAAE,CAAE,IAAMA,CAAC,EAC5BC,GAAY,EAAG,CAAC,EAChBF,EAAI,CAAC,CAACG,EAAGC,CAAC,IAAM,CAACD,EAAIC,EAAGA,CAAC,CAAU,EACnCC,EAAwB,CAAC,CAC3B,EAGIC,EAAUC,EAAc,CAACX,EAAWG,CAAU,CAAC,EAClD,KACCS,EAAO,CAAC,CAAC,CAAE,OAAAC,CAAO,EAAG,CAAC,CAAER,CAAC,CAAC,IAAM,KAAK,IAAIA,EAAIQ,EAAO,CAAC,EAAI,GAAG,EAC5DT,EAAI,CAAC,CAAC,CAAE,CAACU,CAAS,CAAC,IAAMA,CAAS,EAClCC,EAAqB,CACvB,EAGIC,EAAUC,GAAY,QAAQ,EACpC,OAAON,EAAc,CAACX,EAAWgB,CAAO,CAAC,EACtC,KACCZ,EAAI,CAAC,CAAC,CAAE,OAAAS,CAAO,EAAGK,CAAM,IAAML,EAAO,EAAI,KAAO,CAACK,CAAM,EACvDH,EAAqB,EACrBI,EAAUC,GAAUA,EAASV,EAAUR,EAAG,EAAK,CAAC,EAChDmB,EAAU,EAAK,CACjB,CACJ,CAcO,SAASC,GACdC,EAAiBC,EACG,CACpB,OAAOC,EAAM,IAAMd,EAAc,CAC/Be,GAAiBH,CAAE,EACnBxB,GAASyB,CAAO,CAClB,CAAC,CAAC,EACC,KACCpB,EAAI,CAAC,CAAC,CAAE,OAAAuB,CAAO,EAAGC,CAAM,KAAO,CAC7B,OAAAD,EACA,OAAAC,CACF,EAAE,EACFb,EAAqB,CAACR,EAAGC,IACvBD,EAAE,SAAWC,EAAE,QACfD,EAAE,SAAWC,EAAE,MAChB,EACDqB,EAAY,CAAC,CACf,CACJ,CAaO,SAASC,GACdP,EAAiB,CAAE,QAAAQ,EAAS,MAAAC,CAAM,EACH,CAC/B,OAAOP,EAAM,IAAM,CACjB,IAAMQ,EAAQ,IAAIC,EACZC,EAAQF,EAAM,KAAKG,GAAS,CAAC,CAAC,EACpC,OAAAH,EACG,KACCxB,EAAwB,QAAQ,EAChC4B,GAAkBN,CAAO,CAC3B,EACG,UAAU,CAAC,CAAC,CAAE,OAAAX,CAAO,EAAG,CAAE,OAAAQ,CAAO,CAAC,IAAM,CACvCL,EAAG,UAAU,OAAO,oBAAqBH,GAAU,CAACQ,CAAM,EAC1DL,EAAG,OAASK,CACd,CAAC,EAGLI,EAAM,UAAUC,CAAK,EAGdF,EACJ,KACCO,GAAUH,CAAK,EACf/B,EAAImC,GAAUC,EAAA,CAAE,IAAKjB,GAAOgB,EAAQ,CACtC,CACJ,CAAC,CACH,CChHO,SAASE,GACdC,EAAiB,CAAE,UAAAC,EAAW,QAAAC,CAAQ,EACb,CACzB,OAAOC,GAAgBH,EAAI,CAAE,UAAAC,EAAW,QAAAC,CAAQ,CAAC,EAC9C,KACCE,EAAI,CAAC,CAAE,OAAQ,CAAE,EAAAC,CAAE,CAAE,IAAM,CACzB,GAAM,CAAE,OAAAC,CAAO,EAAIC,GAAeP,CAAE,EACpC,MAAO,CACL,OAAQK,GAAKC,CACf,CACF,CAAC,EACDE,EAAwB,QAAQ,CAClC,CACJ,CAaO,SAASC,GACdT,EAAiBU,EACmB,CACpC,OAAOC,EAAM,IAAM,CACjB,IAAMC,EAAQ,IAAIC,EAClBD,EAAM,UAAU,CAAC,CAAE,OAAAE,CAAO,IAAM,CAC9Bd,EAAG,UAAU,OAAO,2BAA4Bc,CAAM,CACxD,CAAC,EAGD,IAAMC,EAAUC,GAAmB,YAAY,EAC/C,OAAI,OAAOD,GAAY,YACdE,EAGFlB,GAAiBgB,EAASL,CAAO,EACrC,KACCQ,EAAIC,GAASP,EAAM,KAAKO,CAAK,CAAC,EAC9BC,EAAS,IAAMR,EAAM,SAAS,CAAC,EAC/BR,EAAIe,GAAUE,EAAA,CAAE,IAAKrB,GAAOmB,EAAQ,CACtC,CACJ,CAAC,CACH,CCvDO,SAASG,GACdC,EAAiB,CAAE,UAAAC,EAAW,QAAAC,CAAQ,EACpB,CAGlB,IAAMC,EAAUD,EACb,KACCE,EAAI,CAAC,CAAE,OAAAC,CAAO,IAAMA,CAAM,EAC1BC,EAAqB,CACvB,EAGIC,EAAUJ,EACb,KACCK,EAAU,IAAMC,GAAiBT,CAAE,EAChC,KACCI,EAAI,CAAC,CAAE,OAAAC,CAAO,KAAO,CACnB,IAAQL,EAAG,UACX,OAAQA,EAAG,UAAYK,CACzB,EAAE,EACFK,EAAwB,QAAQ,CAClC,CACF,CACF,EAGF,OAAOC,EAAc,CAACR,EAASI,EAASN,CAAS,CAAC,EAC/C,KACCG,EAAI,CAAC,CAACQ,EAAQ,CAAE,IAAAC,EAAK,OAAAC,CAAO,EAAG,CAAE,OAAQ,CAAE,EAAAC,CAAE,EAAG,KAAM,CAAE,OAAAV,CAAO,CAAE,CAAC,KAChEA,EAAS,KAAK,IAAI,EAAGA,EACjB,KAAK,IAAI,EAAGQ,EAASE,EAAIH,CAAM,EAC/B,KAAK,IAAI,EAAGP,EAASU,EAAID,CAAM,CACnC,EACO,CACL,OAAQD,EAAMD,EACd,OAAAP,EACA,OAAQQ,EAAMD,GAAUG,CAC1B,EACD,EACDT,EAAqB,CAACU,EAAGC,IACvBD,EAAE,SAAWC,EAAE,QACfD,EAAE,SAAWC,EAAE,QACfD,EAAE,SAAWC,EAAE,MAChB,CACH,CACJ,CClDO,SAASC,GACdC,EACqB,CACrB,IAAMC,EAAU,SAAkB,WAAW,GAAK,CAChD,MAAOD,EAAO,UAAUE,GAAS,WAC/BA,EAAM,aAAa,qBAAqB,CAC1C,EAAE,OAAO,CACX,EAGA,OAAOC,EAAG,GAAGH,CAAM,EAChB,KACCI,GAASF,GAASG,EAAUH,EAAO,QAAQ,EACxC,KACCI,EAAI,IAAMJ,CAAK,CACjB,CACF,EACAK,EAAUP,EAAO,KAAK,IAAI,EAAGC,EAAQ,KAAK,EAAE,EAC5CK,EAAIJ,IAAU,CACZ,MAAOF,EAAO,QAAQE,CAAK,EAC3B,MAAO,CACL,OAASA,EAAM,aAAa,sBAAsB,EAClD,QAASA,EAAM,aAAa,uBAAuB,EACnD,OAASA,EAAM,aAAa,sBAAsB,CACpD,CACF,EAAa,EACbM,EAAY,CAAC,CACf,CACJ,CASO,SAASC,GACdC,EACgC,CAChC,OAAOC,EAAM,IAAM,CACjB,IAAMC,EAAQ,IAAIC,EAClBD,EAAM,UAAUE,GAAW,CACzB,SAAS,KAAK,aAAa,0BAA2B,EAAE,EAGxD,OAAW,CAACC,EAAKC,CAAK,IAAK,OAAO,QAAQF,EAAQ,KAAK,EACrD,SAAS,KAAK,aAAa,iBAAiBC,IAAOC,CAAK,EAG1D,QAASC,EAAQ,EAAGA,EAAQjB,EAAO,OAAQiB,IAAS,CAClD,IAAMC,EAAQlB,EAAOiB,GAAO,mBACxBC,aAAiB,cACnBA,EAAM,OAASJ,EAAQ,QAAUG,EACrC,CAGA,SAAS,YAAaH,CAAO,CAC/B,CAAC,EAGDF,EAAM,KAAKO,GAAUC,EAAc,CAAC,EACjC,UAAU,IAAM,CACf,SAAS,KAAK,gBAAgB,yBAAyB,CACzD,CAAC,EAGH,IAAMpB,EAASqB,EAA8B,QAASX,CAAE,EACxD,OAAOX,GAAaC,CAAM,EACvB,KACCsB,EAAIC,GAASX,EAAM,KAAKW,CAAK,CAAC,EAC9BC,EAAS,IAAMZ,EAAM,SAAS,CAAC,EAC/BN,EAAIiB,GAAUE,EAAA,CAAE,IAAKf,GAAOa,EAAQ,CACtC,CACJ,CAAC,CACH,CC/HA,IAAAG,GAAwB,SAiCxB,SAASC,GAAQC,EAAyB,CACxCA,EAAG,aAAa,kBAAmB,EAAE,EACrC,IAAMC,EAAOD,EAAG,UAChB,OAAAA,EAAG,gBAAgB,iBAAiB,EAC7BC,CACT,CAWO,SAASC,GACd,CAAE,OAAAC,CAAO,EACH,CACF,GAAAC,QAAY,YAAY,GAC1B,IAAIC,EAA8BC,GAAc,CAC9C,IAAI,GAAAF,QAAY,iDAAkD,CAChE,KAAMJ,GACJA,EAAG,aAAa,qBAAqB,GACrCD,GAAQQ,EACNP,EAAG,aAAa,uBAAuB,CACzC,CAAC,CAEL,CAAC,EACE,GAAG,UAAWQ,GAAMF,EAAW,KAAKE,CAAE,CAAC,CAC5C,CAAC,EACE,KACCC,EAAID,GAAM,CACQA,EAAG,QACX,MAAM,CAChB,CAAC,EACDE,EAAI,IAAMC,GAAY,kBAAkB,CAAC,CAC3C,EACG,UAAUR,CAAM,CAEzB,CCrCA,SAASS,GAAWC,EAAwB,CAC1C,GAAIA,EAAK,OAAS,EAChB,MAAO,CAAC,EAAE,EAGZ,GAAM,CAACC,EAAMC,CAAI,EAAI,CAAC,GAAGF,CAAI,EAC1B,KAAK,CAACG,EAAGC,IAAMD,EAAE,OAASC,EAAE,MAAM,EAClC,IAAIC,GAAOA,EAAI,QAAQ,SAAU,EAAE,CAAC,EAGnCC,EAAQ,EACZ,GAAIL,IAASC,EACXI,EAAQL,EAAK,WAEb,MAAOA,EAAK,WAAWK,CAAK,IAAMJ,EAAK,WAAWI,CAAK,GACrDA,IAGJ,OAAON,EAAK,IAAIK,GAAOA,EAAI,QAAQJ,EAAK,MAAM,EAAGK,CAAK,EAAG,EAAE,CAAC,CAC9D,CAaO,SAASC,GAAaC,EAAiC,CAC5D,IAAMC,EAAS,SAAkB,YAAa,eAAgBD,CAAI,EAClE,GAAIC,EACF,OAAOC,EAAGD,CAAM,EACX,CACL,IAAME,EAASC,GAAc,EAC7B,OAAOC,GAAW,IAAI,IAAI,cAAeL,GAAQG,EAAO,IAAI,CAAC,EAC1D,KACCG,EAAIC,GAAWhB,GAAWiB,EAAY,MAAOD,CAAO,EACjD,IAAIE,GAAQA,EAAK,WAAY,CAChC,CAAC,EACDC,GAAW,IAAMC,CAAK,EACtBC,GAAe,CAAC,CAAC,EACjBC,EAAIN,GAAW,SAAS,YAAaA,EAAS,eAAgBP,CAAI,CAAC,CACrE,CACJ,CACF,CCIO,SAASc,GACd,CAAE,UAAAC,EAAW,UAAAC,EAAW,UAAAC,CAAU,EAC5B,CACN,IAAMC,EAASC,GAAc,EAC7B,GAAI,SAAS,WAAa,QACxB,OAGE,sBAAuB,UACzB,QAAQ,kBAAoB,SAG5BC,EAAU,OAAQ,cAAc,EAC7B,UAAU,IAAM,CACf,QAAQ,kBAAoB,MAC9B,CAAC,GAIL,IAAMC,EAAUC,GAAoC,gBAAgB,EAChE,OAAOD,GAAY,cACrBA,EAAQ,KAAOA,EAAQ,MAGzB,IAAME,EAAQC,GAAa,EACxB,KACCC,EAAIC,GAASA,EAAM,IAAIC,GAAQ,GAAG,IAAI,IAAIA,EAAMT,EAAO,IAAI,GAAG,CAAC,EAC/DU,EAAUC,GAAQT,EAAsB,SAAS,KAAM,OAAO,EAC3D,KACCU,EAAOC,GAAM,CAACA,EAAG,SAAW,CAACA,EAAG,OAAO,EACvCH,EAAUG,GAAM,CACd,GAAIA,EAAG,kBAAkB,QAAS,CAChC,IAAMC,EAAKD,EAAG,OAAO,QAAQ,GAAG,EAChC,GAAIC,GAAM,CAACA,EAAG,OAAQ,CACpB,IAAMC,EAAM,IAAI,IAAID,EAAG,IAAI,EAO3B,GAJAC,EAAI,OAAS,GACbA,EAAI,KAAO,GAITA,EAAI,WAAa,SAAS,UAC1BJ,EAAK,SAASI,EAAI,SAAS,CAAC,EAE5B,OAAAF,EAAG,eAAe,EACXG,EAAG,CACR,IAAK,IAAI,IAAIF,EAAG,IAAI,CACtB,CAAC,CAEL,CACF,CACA,OAAOG,EACT,CAAC,CACH,CACF,EACAC,GAAoB,CACtB,EAGIC,EAAOjB,EAAyB,OAAQ,UAAU,EACrD,KACCU,EAAOC,GAAMA,EAAG,QAAU,IAAI,EAC9BN,EAAIM,IAAO,CACT,IAAK,IAAI,IAAI,SAAS,IAAI,EAC1B,OAAQA,EAAG,KACb,EAAE,EACFK,GAAoB,CACtB,EAGFE,EAAMf,EAAOc,CAAI,EACd,KACCE,EAAqB,CAACC,EAAGC,IAAMD,EAAE,IAAI,OAASC,EAAE,IAAI,IAAI,EACxDhB,EAAI,CAAC,CAAE,IAAAQ,CAAI,IAAMA,CAAG,CACtB,EACG,UAAUjB,CAAS,EAGxB,IAAM0B,EAAY1B,EACf,KACC2B,EAAwB,UAAU,EAClCf,EAAUK,GAAOW,GAAQX,EAAI,IAAI,EAC9B,KACCY,GAAW,KACTC,GAAYb,CAAG,EACRE,GACR,CACH,CACF,EACAC,GAAM,CACR,EAGFb,EACG,KACCwB,GAAOL,CAAS,CAClB,EACG,UAAU,CAAC,CAAE,IAAAT,CAAI,IAAM,CACtB,QAAQ,UAAU,CAAC,EAAG,GAAI,GAAGA,GAAK,CACpC,CAAC,EAGL,IAAMe,EAAM,IAAI,UAChBN,EACG,KACCd,EAAUqB,GAAOA,EAAI,KAAK,CAAC,EAC3BxB,EAAIwB,GAAOD,EAAI,gBAAgBC,EAAK,WAAW,CAAC,CAClD,EACG,UAAUlC,CAAS,EAGxBA,EACG,KACCmC,GAAK,CAAC,CACR,EACG,UAAUC,GAAe,CACxB,QAAWC,IAAY,CAGrB,QACA,sBACA,oBACA,yBAGA,+BACA,gCACA,mCACA,+BACA,2BACA,2BACA,GAAGC,EAAQ,wBAAwB,EAC/B,CAAC,0BAA0B,EAC3B,CAAC,CACP,EAAG,CACD,IAAMC,EAAShC,GAAmB8B,CAAQ,EACpCG,EAASjC,GAAmB8B,EAAUD,CAAW,EAErD,OAAOG,GAAW,aAClB,OAAOC,GAAW,aAElBD,EAAO,YAAYC,CAAM,CAE7B,CACF,CAAC,EAGLxC,EACG,KACCmC,GAAK,CAAC,EACNzB,EAAI,IAAM+B,GAAoB,WAAW,CAAC,EAC1C5B,EAAUI,GAAMyB,EAAY,SAAUzB,CAAE,CAAC,EACzC0B,GAAU1B,GAAM,CACd,IAAM2B,EAASC,EAAE,QAAQ,EACzB,GAAI5B,EAAG,IAAK,CACV,QAAW6B,KAAQ7B,EAAG,kBAAkB,EACtC2B,EAAO,aAAaE,EAAM7B,EAAG,aAAa6B,CAAI,CAAE,EAClD,OAAA7B,EAAG,YAAY2B,CAAM,EAGd,IAAIG,EAAWC,GAAY,CAChCJ,EAAO,OAAS,IAAMI,EAAS,SAAS,CAC1C,CAAC,CAGH,KACE,QAAAJ,EAAO,YAAc3B,EAAG,YACxBA,EAAG,YAAY2B,CAAM,EACdK,CAEX,CAAC,CACH,EACG,UAAU,EAGf1B,EAAMf,EAAOc,CAAI,EACd,KACCU,GAAOhC,CAAS,CAClB,EACG,UAAU,CAAC,CAAE,IAAAkB,EAAK,OAAAgC,CAAO,IAAM,CAC1BhC,EAAI,MAAQ,CAACgC,EACfC,GAAgBjC,EAAI,IAAI,EAExB,OAAO,SAAS,GAAGgC,GAAA,YAAAA,EAAQ,IAAK,CAAC,CAErC,CAAC,EAGLhD,EACG,KACCkD,GAAU5C,CAAK,EACf6C,GAAa,GAAG,EAChBzB,EAAwB,QAAQ,CAClC,EACG,UAAU,CAAC,CAAE,OAAAsB,CAAO,IAAM,CACzB,QAAQ,aAAaA,EAAQ,EAAE,CACjC,CAAC,EAGL3B,EAAMf,EAAOc,CAAI,EACd,KACCgC,GAAY,EAAG,CAAC,EAChBvC,EAAO,CAAC,CAACU,EAAGC,CAAC,IAAMD,EAAE,IAAI,WAAaC,EAAE,IAAI,QAAQ,EACpDhB,EAAI,CAAC,CAAC,CAAE6C,CAAK,IAAMA,CAAK,CAC1B,EACG,UAAU,CAAC,CAAE,OAAAL,CAAO,IAAM,CACzB,OAAO,SAAS,GAAGA,GAAA,YAAAA,EAAQ,IAAK,CAAC,CACnC,CAAC,CACP,CCzSA,IAAAM,GAAuB,SCAvB,IAAAC,GAAuB,SAsChB,SAASC,GACdC,EAA2BC,EACD,CAC1B,IAAMC,EAAY,IAAI,OAAOF,EAAO,UAAW,KAAK,EAC9CG,EAAY,CAACC,EAAYC,EAAcC,IACpC,GAAGD,4BAA+BC,WAI3C,OAAQC,GAAkB,CACxBA,EAAQA,EACL,QAAQ,gBAAiB,GAAG,EAC5B,KAAK,EAGR,IAAMC,EAAQ,IAAI,OAAO,MAAMR,EAAO,cACpCO,EACG,QAAQ,uBAAwB,MAAM,EACtC,QAAQL,EAAW,GAAG,KACtB,KAAK,EAGV,OAAOO,IACLR,KACI,GAAAS,SAAWD,CAAK,EAChBA,GAED,QAAQD,EAAOL,CAAS,EACxB,QAAQ,8BAA+B,IAAI,CAClD,CACF,CC9BO,SAASQ,GAAiBC,EAAuB,CACtD,OAAOA,EACJ,MAAM,YAAY,EAChB,IAAI,CAACC,EAAOC,IAAUA,EAAQ,EAC3BD,EAAM,QAAQ,+BAAgC,IAAI,EAClDA,CACJ,EACC,KAAK,EAAE,EACT,QAAQ,kCAAmC,EAAE,EAC7C,KAAK,CACV,CCoCO,SAASE,GACdC,EAC+B,CAC/B,OAAOA,EAAQ,OAAS,CAC1B,CASO,SAASC,GACdD,EAC+B,CAC/B,OAAOA,EAAQ,OAAS,CAC1B,CASO,SAASE,GACdF,EACgC,CAChC,OAAOA,EAAQ,OAAS,CAC1B,CCvEA,SAASG,GAAiB,CAAE,OAAAC,EAAQ,KAAAC,CAAK,EAA6B,CAGhED,EAAO,KAAK,SAAW,GAAKA,EAAO,KAAK,KAAO,OACjDA,EAAO,KAAO,CACZE,GAAY,oBAAoB,CAClC,GAGEF,EAAO,YAAc,cACvBA,EAAO,UAAYE,GAAY,yBAAyB,GAQ1D,IAAMC,EAAyB,CAC7B,SANeD,GAAY,wBAAwB,EAClD,MAAM,SAAS,EACf,OAAO,OAAO,EAKf,YAAaE,EAAQ,gBAAgB,CACvC,EAGA,MAAO,CAAE,OAAAJ,EAAQ,KAAAC,EAAM,QAAAE,CAAQ,CACjC,CAkBO,SAASE,GACdC,EAAaC,EACC,CACd,IAAMP,EAASQ,GAAc,EACvBC,EAAS,IAAI,OAAOH,CAAG,EAGvBI,EAAM,IAAIC,EACVC,EAAMC,GAAYJ,EAAQ,CAAE,IAAAC,CAAI,CAAC,EACpC,KACCI,EAAIC,GAAW,CACb,GAAIC,GAAsBD,CAAO,EAC/B,QAAWE,KAAUF,EAAQ,KAAK,MAChC,QAAWG,KAAYD,EACrBC,EAAS,SAAW,GAAG,IAAI,IAAIA,EAAS,SAAUlB,EAAO,IAAI,IAEnE,OAAOe,CACT,CAAC,EACDI,GAAM,CACR,EAGF,OAAAC,GAAKb,CAAK,EACP,KACCO,EAAIO,IAAS,CACX,OACA,KAAMtB,GAAiBsB,CAAI,CAC7B,EAAwB,CAC1B,EACG,UAAUX,EAAI,KAAK,KAAKA,CAAG,CAAC,EAG1B,CAAE,IAAAA,EAAK,IAAAE,CAAI,CACpB,CCvEO,SAASU,GACd,CAAE,UAAAC,CAAU,EACN,CACN,IAAMC,EAASC,GAAc,EACvBC,EAAYC,GAChB,IAAI,IAAI,mBAAoBH,EAAO,IAAI,CACzC,EACG,KACCI,GAAW,IAAMC,CAAK,CACxB,EAGIC,EAAWJ,EACd,KACCK,EAAIC,GAAY,CACd,GAAM,CAAC,CAAEC,CAAO,EAAIT,EAAO,KAAK,MAAM,aAAa,EACnD,OAAOQ,EAAS,KAAK,CAAC,CAAE,QAAAE,EAAS,QAAAC,CAAQ,IACvCD,IAAYD,GAAWE,EAAQ,SAASF,CAAO,CAChD,GAAKD,EAAS,EACjB,CAAC,CACH,EAGFN,EACG,KACCK,EAAIC,GAAY,IAAI,IAAIA,EAAS,IAAIE,GAAW,CAC9C,GAAG,IAAI,IAAI,MAAMA,EAAQ,WAAYV,EAAO,IAAI,IAChDU,CACF,CAAC,CAAC,CAAC,EACHE,EAAUC,GAAQC,EAAsB,SAAS,KAAM,OAAO,EAC3D,KACCC,EAAOC,GAAM,CAACA,EAAG,SAAW,CAACA,EAAG,OAAO,EACvCC,GAAeX,CAAQ,EACvBM,EAAU,CAAC,CAACI,EAAIP,CAAO,IAAM,CAC3B,GAAIO,EAAG,kBAAkB,QAAS,CAChC,IAAME,EAAKF,EAAG,OAAO,QAAQ,GAAG,EAChC,GAAIE,GAAM,CAACA,EAAG,QAAUL,EAAK,IAAIK,EAAG,IAAI,EAAG,CACzC,IAAMC,EAAMD,EAAG,KAWf,MAAI,CAACF,EAAG,OAAO,QAAQ,aAAa,GAClBH,EAAK,IAAIM,CAAG,IACZV,EACPJ,GAEXW,EAAG,eAAe,EACXI,EAAGD,CAAG,EACf,CACF,CACA,OAAOd,CACT,CAAC,EACDO,EAAUO,GAAO,CACf,GAAM,CAAE,QAAAT,CAAQ,EAAIG,EAAK,IAAIM,CAAG,EAChC,OAAOE,GAAa,IAAI,IAAIF,CAAG,CAAC,EAC7B,KACCZ,EAAIe,GAAW,CAEb,IAAMC,EADWC,GAAY,EACP,KAAK,QAAQxB,EAAO,KAAM,EAAE,EAClD,OAAOsB,EAAQ,SAASC,EAAK,MAAM,GAAG,EAAE,EAAE,EACtC,IAAI,IAAI,MAAMb,KAAWa,IAAQvB,EAAO,IAAI,EAC5C,IAAI,IAAImB,CAAG,CACjB,CAAC,CACH,CACJ,CAAC,CACH,CACF,CACF,EACG,UAAUA,GAAOM,GAAYN,CAAG,CAAC,EAGtCO,EAAc,CAACxB,EAAWI,CAAQ,CAAC,EAChC,UAAU,CAAC,CAACE,EAAUC,CAAO,IAAM,CACpBkB,EAAW,mBAAmB,EACtC,YAAYC,GAAsBpB,EAAUC,CAAO,CAAC,CAC5D,CAAC,EAGHV,EAAU,KAAKa,EAAU,IAAMN,CAAQ,CAAC,EACrC,UAAUG,GAAW,CA5J1B,IAAAoB,EA+JM,IAAIC,EAAW,SAAS,aAAc,cAAc,EACpD,GAAIA,IAAa,KAAM,CACrB,IAAMC,IAASF,EAAA7B,EAAO,UAAP,YAAA6B,EAAgB,UAAW,SAC1CC,EAAW,CAACrB,EAAQ,QAAQ,SAASsB,CAAM,EAG3C,SAAS,aAAcD,EAAU,cAAc,CACjD,CAGA,GAAIA,EACF,QAAWE,KAAWC,GAAqB,UAAU,EACnDD,EAAQ,OAAS,EACvB,CAAC,CACL,CCtFO,SAASE,GACdC,EAAsB,CAAE,IAAAC,CAAI,EACH,CACzB,IAAMC,GAAK,+BAAU,YAAaC,GAG5B,CAAE,aAAAC,CAAa,EAAIC,GAAY,EACjCD,EAAa,IAAI,GAAG,GACtBE,GAAU,SAAU,EAAI,EAG1B,IAAMC,EAASN,EACZ,KACCO,EAAOC,EAAoB,EAC3BC,GAAK,CAAC,EACNC,EAAI,IAAMP,EAAa,IAAI,GAAG,GAAK,EAAE,CACvC,EAGFQ,GAAY,QAAQ,EACjB,KACCJ,EAAOK,GAAU,CAACA,CAAM,EACxBH,GAAK,CAAC,CACR,EACG,UAAU,IAAM,CACf,IAAMI,EAAM,IAAI,IAAI,SAAS,IAAI,EACjCA,EAAI,aAAa,OAAO,GAAG,EAC3B,QAAQ,aAAa,CAAC,EAAG,GAAI,GAAGA,GAAK,CACvC,CAAC,EAGLP,EAAO,UAAUQ,GAAS,CACpBA,IACFf,EAAG,MAAQe,EACXf,EAAG,MAAM,EAEb,CAAC,EAGD,IAAMgB,EAASC,GAAkBjB,CAAE,EAC7BkB,EAASC,EACbC,EAAUpB,EAAI,OAAO,EACrBoB,EAAUpB,EAAI,OAAO,EAAE,KAAKqB,GAAM,CAAC,CAAC,EACpCd,CACF,EACG,KACCI,EAAI,IAAMT,EAAGF,EAAG,KAAK,CAAC,EACtBsB,EAAU,EAAE,EACZC,EAAqB,CACvB,EAGF,OAAOC,EAAc,CAACN,EAAQF,CAAM,CAAC,EAClC,KACCL,EAAI,CAAC,CAACI,EAAOU,CAAK,KAAO,CAAE,MAAAV,EAAO,MAAAU,CAAM,EAAE,EAC1CC,EAAY,CAAC,CACf,CACJ,CAUO,SAASC,GACd3B,EAAsB,CAAE,IAAA4B,EAAK,IAAA3B,CAAI,EACqB,CACtD,IAAM4B,EAAQ,IAAIC,EACZC,EAAQF,EAAM,KAAKG,GAAS,CAAC,CAAC,EAGpC,OAAAH,EACG,KACCI,EAAwB,OAAO,EAC/BtB,EAAI,CAAC,CAAE,MAAAI,CAAM,KAA2B,CACtC,OACA,KAAMA,CACR,EAAE,CACJ,EACG,UAAUa,EAAI,KAAK,KAAKA,CAAG,CAAC,EAGjCC,EACG,KACCI,EAAwB,OAAO,CACjC,EACG,UAAU,CAAC,CAAE,MAAAR,CAAM,IAAM,CACpBA,GACFnB,GAAU,SAAUmB,CAAK,EACzBzB,EAAG,YAAc,IAEjBA,EAAG,YAAckC,GAAY,oBAAoB,CAErD,CAAC,EAGLd,EAAUpB,EAAG,KAAO,OAAO,EACxB,KACCmC,GAAUJ,CAAK,CACjB,EACG,UAAU,IAAM/B,EAAG,MAAM,CAAC,EAGxBD,GAAiBC,EAAI,CAAE,IAAA4B,EAAK,IAAA3B,CAAI,CAAC,EACrC,KACCmC,EAAIC,GAASR,EAAM,KAAKQ,CAAK,CAAC,EAC9BC,EAAS,IAAMT,EAAM,SAAS,CAAC,EAC/BlB,EAAI0B,GAAUE,EAAA,CAAE,IAAKvC,GAAOqC,EAAQ,EACpCG,GAAM,CACR,CACJ,CCrHO,SAASC,GACdC,EAAiB,CAAE,IAAAC,CAAI,EAAiB,CAAE,OAAAC,CAAO,EACZ,CACrC,IAAMC,EAAQ,IAAIC,EACZC,EAAYC,GAAqBN,EAAG,aAAc,EACrD,KACCO,EAAO,OAAO,CAChB,EAGIC,EAAOC,EAAW,wBAAyBT,CAAE,EAC7CU,EAAOD,EAAW,uBAAwBT,CAAE,EAG5CW,EAASV,EACZ,KACCM,EAAOK,EAAoB,EAC3BC,GAAK,CAAC,CACR,EAGF,OAAAV,EACG,KACCW,GAAeZ,CAAM,EACrBa,GAAUJ,CAAM,CAClB,EACG,UAAU,CAAC,CAAC,CAAE,MAAAK,CAAM,EAAG,CAAE,MAAAC,CAAM,CAAC,IAAM,CACrC,GAAIA,EACF,OAAQD,EAAM,OAAQ,CAGpB,IAAK,GACHR,EAAK,YAAcU,GAAY,oBAAoB,EACnD,MAGF,IAAK,GACHV,EAAK,YAAcU,GAAY,mBAAmB,EAClD,MAGF,QACEV,EAAK,YAAcU,GACjB,sBACAC,GAAMH,EAAM,MAAM,CACpB,CACJ,MAEAR,EAAK,YAAcU,GAAY,2BAA2B,CAE9D,CAAC,EAGLf,EACG,KACCiB,EAAI,IAAMV,EAAK,UAAY,EAAE,EAC7BW,EAAU,CAAC,CAAE,MAAAL,CAAM,IAAMM,EACvBC,EAAG,GAAGP,EAAM,MAAM,EAAG,EAAE,CAAC,EACxBO,EAAG,GAAGP,EAAM,MAAM,EAAE,CAAC,EAClB,KACCQ,GAAY,CAAC,EACbC,GAAQpB,CAAS,EACjBgB,EAAU,CAAC,CAACK,CAAK,IAAMA,CAAK,CAC9B,CACJ,CAAC,CACH,EACG,UAAUC,GAAUjB,EAAK,YACxBkB,GAAuBD,CAAM,CAC/B,CAAC,EAGW1B,EACb,KACCM,EAAOsB,EAAqB,EAC5BC,EAAI,CAAC,CAAE,KAAAC,CAAK,IAAMA,CAAI,CACxB,EAIC,KACCX,EAAIY,GAAS7B,EAAM,KAAK6B,CAAK,CAAC,EAC9BC,EAAS,IAAM9B,EAAM,SAAS,CAAC,EAC/B2B,EAAIE,GAAUE,EAAA,CAAE,IAAKlC,GAAOgC,EAAQ,CACtC,CACJ,CC1FO,SAASG,GACdC,EAAkB,CAAE,OAAAC,CAAO,EACF,CACzB,OAAOA,EACJ,KACCC,EAAI,CAAC,CAAE,MAAAC,CAAM,IAAM,CACjB,IAAMC,EAAMC,GAAY,EACxB,OAAAD,EAAI,KAAO,GACXA,EAAI,aAAa,OAAO,GAAG,EAC3BA,EAAI,aAAa,IAAI,IAAKD,CAAK,EACxB,CAAE,IAAAC,CAAI,CACf,CAAC,CACH,CACJ,CAUO,SAASE,GACdC,EAAuBC,EACa,CACpC,IAAMC,EAAQ,IAAIC,EAClB,OAAAD,EAAM,UAAU,CAAC,CAAE,IAAAL,CAAI,IAAM,CAC3BG,EAAG,aAAa,sBAAuBA,EAAG,IAAI,EAC9CA,EAAG,KAAO,GAAGH,GACf,CAAC,EAGDO,EAAUJ,EAAI,OAAO,EAClB,UAAUK,GAAMA,EAAG,eAAe,CAAC,EAG/Bb,GAAiBQ,EAAIC,CAAO,EAChC,KACCK,EAAIC,GAASL,EAAM,KAAKK,CAAK,CAAC,EAC9BC,EAAS,IAAMN,EAAM,SAAS,CAAC,EAC/BP,EAAIY,GAAUE,EAAA,CAAE,IAAKT,GAAOO,EAAQ,CACtC,CACJ,CCtCO,SAASG,GACdC,EAAiB,CAAE,IAAAC,CAAI,EAAiB,CAAE,UAAAC,CAAU,EACd,CACtC,IAAMC,EAAQ,IAAIC,EAGZC,EAASC,GAAoB,cAAc,EAC3CC,EAASC,EACbC,EAAUJ,EAAO,SAAS,EAC1BI,EAAUJ,EAAO,OAAO,CAC1B,EACG,KACCK,GAAUC,EAAc,EACxBC,EAAI,IAAMP,EAAM,KAAK,EACrBQ,EAAqB,CACvB,EAGF,OAAAV,EACG,KACCW,GAAkBP,CAAM,EACxBK,EAAI,CAAC,CAAC,CAAE,YAAAG,CAAY,EAAGC,CAAK,IAAM,CAChC,IAAMC,EAAQD,EAAM,MAAM,UAAU,EACpC,IAAID,GAAA,YAAAA,EAAa,SAAUE,EAAMA,EAAM,OAAS,GAAI,CAClD,IAAMC,EAAOH,EAAYA,EAAY,OAAS,GAC1CG,EAAK,WAAWD,EAAMA,EAAM,OAAS,EAAE,IACzCA,EAAMA,EAAM,OAAS,GAAKC,EAC9B,MACED,EAAM,OAAS,EAEjB,OAAOA,CACT,CAAC,CACH,EACG,UAAUA,GAASjB,EAAG,UAAYiB,EAChC,KAAK,EAAE,EACP,QAAQ,MAAO,QAAQ,CAC1B,EAGJf,EACG,KACCiB,EAAO,CAAC,CAAE,KAAAC,CAAK,IAAMA,IAAS,QAAQ,CACxC,EACG,UAAUC,GAAO,CAChB,OAAQA,EAAI,KAAM,CAGhB,IAAK,aAEDrB,EAAG,UAAU,QACbK,EAAM,iBAAmBA,EAAM,MAAM,SAErCA,EAAM,MAAQL,EAAG,WACnB,KACJ,CACF,CAAC,EAGWC,EACb,KACCkB,EAAOG,EAAqB,EAC5BV,EAAI,CAAC,CAAE,KAAAW,CAAK,IAAMA,CAAI,CACxB,EAIC,KACCC,EAAIC,GAAStB,EAAM,KAAKsB,CAAK,CAAC,EAC9BC,EAAS,IAAMvB,EAAM,SAAS,CAAC,EAC/BS,EAAI,KAAO,CAAE,IAAKZ,CAAG,EAAE,CACzB,CACJ,CC9CO,SAAS2B,GACdC,EAAiB,CAAE,OAAAC,EAAQ,UAAAC,CAAU,EACN,CAC/B,IAAMC,EAASC,GAAc,EAC7B,GAAI,CACF,IAAMC,GAAM,+BAAU,SAAUF,EAAO,OACjCG,EAASC,GAAkBF,EAAKJ,CAAM,EAGtCO,EAASC,GAAoB,eAAgBT,CAAE,EAC/CU,EAASD,GAAoB,gBAAiBT,CAAE,EAGhD,CAAE,IAAAW,EAAK,IAAAC,CAAI,EAAIN,EACrBK,EACG,KACCE,EAAOC,EAAoB,EAC3BC,GAAOH,EAAI,KAAKC,EAAOG,EAAoB,CAAC,CAAC,EAC7CC,GAAK,CAAC,CACR,EACG,UAAUN,EAAI,KAAK,KAAKA,CAAG,CAAC,EAGjCT,EACG,KACCW,EAAO,CAAC,CAAE,KAAAK,CAAK,IAAMA,IAAS,QAAQ,CACxC,EACG,UAAUC,GAAO,CAChB,IAAMC,EAASC,GAAiB,EAChC,OAAQF,EAAI,KAAM,CAGhB,IAAK,QACH,GAAIC,IAAWZ,EAAO,CACpB,IAAMc,EAAU,IAAI,IACpB,QAAWC,KAAUC,EACnB,sBAAuBd,CACzB,EAAG,CACD,IAAMe,EAAUF,EAAO,kBACvBD,EAAQ,IAAIC,EAAQ,WAClBE,EAAQ,aAAa,eAAe,CACtC,CAAC,CACH,CAGA,GAAIH,EAAQ,KAAM,CAChB,GAAM,CAAC,CAACI,CAAI,CAAC,EAAI,CAAC,GAAGJ,CAAO,EAAE,KAAK,CAAC,CAAC,CAAEK,CAAC,EAAG,CAAC,CAAEC,CAAC,IAAMA,EAAID,CAAC,EAC1DD,EAAK,MAAM,CACb,CAGAP,EAAI,MAAM,CACZ,CACA,MAGF,IAAK,SACL,IAAK,MACHU,GAAU,SAAU,EAAK,EACzBrB,EAAM,KAAK,EACX,MAGF,IAAK,UACL,IAAK,YACH,GAAI,OAAOY,GAAW,YACpBZ,EAAM,MAAM,MACP,CACL,IAAMsB,EAAM,CAACtB,EAAO,GAAGgB,EACrB,wDACAd,CACF,CAAC,EACKqB,EAAI,KAAK,IAAI,GACjB,KAAK,IAAI,EAAGD,EAAI,QAAQV,CAAM,CAAC,EAAIU,EAAI,QACrCX,EAAI,OAAS,UAAY,GAAK,IAE9BW,EAAI,MAAM,EACdA,EAAIC,GAAG,MAAM,CACf,CAGAZ,EAAI,MAAM,EACV,MAGF,QACMX,IAAUa,GAAiB,GAC7Bb,EAAM,MAAM,CAClB,CACF,CAAC,EAGLN,EACG,KACCW,EAAO,CAAC,CAAE,KAAAK,CAAK,IAAMA,IAAS,QAAQ,CACxC,EACG,UAAUC,GAAO,CAChB,OAAQA,EAAI,KAAM,CAGhB,IAAK,IACL,IAAK,IACL,IAAK,IACHX,EAAM,MAAM,EACZA,EAAM,OAAO,EAGbW,EAAI,MAAM,EACV,KACJ,CACF,CAAC,EAGL,IAAMa,EAAUC,GAAiBzB,EAAOF,CAAM,EACxC4B,EAAUC,GAAkBzB,EAAQJ,EAAQ,CAAE,OAAA0B,CAAO,CAAC,EAC5D,OAAOI,EAAMJ,EAAQE,CAAO,EACzB,KACCG,GAGE,GAAGC,GAAqB,eAAgBtC,CAAE,EACvC,IAAIuC,GAASC,GAAiBD,EAAO,CAAE,OAAAP,CAAO,CAAC,CAAC,EAGnD,GAAGM,GAAqB,iBAAkBtC,CAAE,EACzC,IAAIuC,GAASE,GAAmBF,EAAOjC,EAAQ,CAAE,UAAAJ,CAAU,CAAC,CAAC,CAClE,CACF,CAGJ,OAASwC,EAAP,CACA,OAAA1C,EAAG,OAAS,GACL2C,EACT,CACF,CCtKO,SAASC,GACdC,EAAiB,CAAE,OAAAC,EAAQ,UAAAC,CAAU,EACG,CACxC,OAAOC,EAAc,CACnBF,EACAC,EACG,KACCE,EAAUC,GAAY,CAAC,EACvBC,EAAOC,GAAO,CAAC,CAACA,EAAI,aAAa,IAAI,GAAG,CAAC,CAC3C,CACJ,CAAC,EACE,KACCC,EAAI,CAAC,CAACC,EAAOF,CAAG,IAAMG,GAAuBD,EAAM,OAAQ,EAAI,EAC7DF,EAAI,aAAa,IAAI,GAAG,CAC1B,CAAC,EACDC,EAAIG,GAAM,CA1FhB,IAAAC,EA2FQ,IAAMC,EAAQ,IAAI,IAGZC,EAAK,SAAS,mBAAmBd,EAAI,WAAW,SAAS,EAC/D,QAASe,EAAOD,EAAG,SAAS,EAAGC,EAAMA,EAAOD,EAAG,SAAS,EACtD,IAAIF,EAAAG,EAAK,gBAAL,MAAAH,EAAoB,aAAc,CACpC,IAAMI,EAAWD,EAAK,YAChBE,EAAWN,EAAGK,CAAQ,EACxBC,EAAS,OAASD,EAAS,QAC7BH,EAAM,IAAIE,EAAmBE,CAAQ,CACzC,CAIF,OAAW,CAACF,EAAMG,CAAI,IAAKL,EAAO,CAChC,GAAM,CAAE,WAAAM,CAAW,EAAIC,EAAE,OAAQ,KAAMF,CAAI,EAC3CH,EAAK,YAAY,GAAG,MAAM,KAAKI,CAAU,CAAC,CAC5C,CAGA,MAAO,CAAE,IAAKnB,EAAI,MAAAa,CAAM,CAC1B,CAAC,CACH,CACJ,CCbO,SAASQ,GACdC,EAAiB,CAAE,UAAAC,EAAW,MAAAC,CAAM,EACf,CACrB,IAAMC,EAASH,EAAG,cACZI,EACJD,EAAO,UACPA,EAAO,cAAe,UAGxB,OAAOE,EAAc,CAACH,EAAOD,CAAS,CAAC,EACpC,KACCK,EAAI,CAAC,CAAC,CAAE,OAAAC,EAAQ,OAAAC,CAAO,EAAG,CAAE,OAAQ,CAAE,EAAAC,CAAE,CAAE,CAAC,KACzCD,EAASA,EACL,KAAK,IAAIJ,EAAQ,KAAK,IAAI,EAAGK,EAAIF,CAAM,CAAC,EACxCH,EACG,CACL,OAAAI,EACA,OAAQC,GAAKF,EAASH,CACxB,EACD,EACDM,EAAqB,CAACC,EAAGC,IACvBD,EAAE,SAAWC,EAAE,QACfD,EAAE,SAAWC,EAAE,MAChB,CACH,CACJ,CAuBO,SAASC,GACdb,EAAiBc,EACe,CADf,IAAAC,EAAAD,EAAE,SAAAE,CAtJrB,EAsJmBD,EAAcE,EAAAC,GAAdH,EAAc,CAAZ,YAEnB,IAAMI,EAAQC,EAAW,0BAA2BpB,CAAE,EAChD,CAAE,EAAAS,CAAE,EAAIY,GAAiBF,CAAK,EACpC,OAAOG,EAAM,IAAM,CACjB,IAAMC,EAAQ,IAAIC,EAClB,OAAAD,EACG,KACCE,GAAU,EAAGC,EAAuB,EACpCC,GAAeX,CAAO,CACxB,EACG,UAAU,CAGT,KAAK,CAAC,CAAE,OAAAR,CAAO,EAAG,CAAE,OAAQD,CAAO,CAAC,EAAG,CACrCY,EAAM,MAAM,OAAS,GAAGX,EAAS,EAAIC,MACrCT,EAAG,MAAM,IAAY,GAAGO,KAC1B,EAGA,UAAW,CACTY,EAAM,MAAM,OAAS,GACrBnB,EAAG,MAAM,IAAY,EACvB,CACF,CAAC,EAGLuB,EACG,KACCK,GAAUF,EAAuB,EACjCG,GAAK,CAAC,CACR,EACG,UAAU,IAAM,CACf,QAAWC,KAAQC,EAAY,8BAA+B/B,CAAE,EAAG,CACjE,IAAMgC,EAAYC,GAAoBH,CAAI,EAC1C,GAAI,OAAOE,GAAc,YAAa,CACpC,IAAMzB,EAASuB,EAAK,UAAYE,EAAU,UACpC,CAAE,OAAAxB,CAAO,EAAI0B,GAAeF,CAAS,EAC3CA,EAAU,SAAS,CACjB,IAAKzB,EAASC,EAAS,CACzB,CAAC,CACH,CACF,CACF,CAAC,EAGET,GAAaC,EAAIiB,CAAO,EAC5B,KACCkB,EAAIC,GAASb,EAAM,KAAKa,CAAK,CAAC,EAC9BC,EAAS,IAAMd,EAAM,SAAS,CAAC,EAC/BjB,EAAI8B,GAAUE,EAAA,CAAE,IAAKtC,GAAOoC,EAAQ,CACtC,CACJ,CAAC,CACH,CChJO,SAASG,GACdC,EAAcC,EACW,CACzB,GAAI,OAAOA,GAAS,YAAa,CAC/B,IAAMC,EAAM,gCAAgCF,KAAQC,IACpD,OAAOE,GAGLC,GAAqB,GAAGF,mBAAqB,EAC1C,KACCG,GAAW,IAAMC,CAAK,EACtBC,EAAIC,IAAY,CACd,QAASA,EAAQ,QACnB,EAAE,EACFC,GAAe,CAAC,CAAC,CACnB,EAGFL,GAAkBF,CAAG,EAClB,KACCG,GAAW,IAAMC,CAAK,EACtBC,EAAIG,IAAS,CACX,MAAOA,EAAK,iBACZ,MAAOA,EAAK,WACd,EAAE,EACFD,GAAe,CAAC,CAAC,CACnB,CACJ,EACG,KACCF,EAAI,CAAC,CAACC,EAASE,CAAI,IAAOC,IAAA,GAAKH,GAAYE,EAAO,CACpD,CAGJ,KAAO,CACL,IAAMR,EAAM,gCAAgCF,IAC5C,OAAOI,GAAkBF,CAAG,EACzB,KACCK,EAAIG,IAAS,CACX,aAAcA,EAAK,YACrB,EAAE,EACFD,GAAe,CAAC,CAAC,CACnB,CACJ,CACF,CCvDO,SAASG,GACdC,EAAcC,EACW,CACzB,IAAMC,EAAM,WAAWF,qBAAwB,mBAAmBC,CAAO,IACzE,OAAOE,GAA2BD,CAAG,EAClC,KACCE,GAAW,IAAMC,CAAK,EACtBC,EAAI,CAAC,CAAE,WAAAC,EAAY,YAAAC,CAAY,KAAO,CACpC,MAAOD,EACP,MAAOC,CACT,EAAE,EACFC,GAAe,CAAC,CAAC,CACnB,CACJ,CCOO,SAASC,GACdC,EACyB,CAGzB,IAAIC,EAAQD,EAAI,MAAM,qCAAqC,EAC3D,GAAIC,EAAO,CACT,GAAM,CAAC,CAAEC,EAAMC,CAAI,EAAIF,EACvB,OAAOG,GAA2BF,EAAMC,CAAI,CAC9C,CAIA,GADAF,EAAQD,EAAI,MAAM,oCAAoC,EAClDC,EAAO,CACT,GAAM,CAAC,CAAEI,EAAMC,CAAI,EAAIL,EACvB,OAAOM,GAA2BF,EAAMC,CAAI,CAC9C,CAGA,OAAOE,CACT,CCpBA,IAAIC,GAgBG,SAASC,GACdC,EACoB,CACpB,OAAOF,QAAWG,EAAM,IAAM,CAC5B,IAAMC,EAAS,SAAsB,WAAY,cAAc,EAC/D,GAAIA,EACF,OAAOC,EAAGD,CAAM,EAKhB,GADYE,GAAqB,SAAS,EAClC,OAAQ,CACd,IAAMC,EAAU,SAA0B,WAAW,EACrD,GAAI,EAAEA,GAAWA,EAAQ,QACvB,OAAOC,CACX,CAGA,OAAOC,GAAiBP,EAAG,IAAI,EAC5B,KACCQ,EAAIC,GAAS,SAAS,WAAYA,EAAO,cAAc,CAAC,CAC1D,CAEN,CAAC,EACE,KACCC,GAAW,IAAMJ,CAAK,EACtBK,EAAOF,GAAS,OAAO,KAAKA,CAAK,EAAE,OAAS,CAAC,EAC7CG,EAAIH,IAAU,CAAE,MAAAA,CAAM,EAAE,EACxBI,EAAY,CAAC,CACf,EACJ,CASO,SAASC,GACdd,EAC+B,CAC/B,IAAMe,EAAQC,EAAW,uBAAwBhB,CAAE,EACnD,OAAOC,EAAM,IAAM,CACjB,IAAMgB,EAAQ,IAAIC,EAClB,OAAAD,EAAM,UAAU,CAAC,CAAE,MAAAR,CAAM,IAAM,CAC7BM,EAAM,YAAYI,GAAkBV,CAAK,CAAC,EAC1CM,EAAM,UAAU,IAAI,+BAA+B,CACrD,CAAC,EAGMhB,GAAYC,CAAE,EAClB,KACCQ,EAAIY,GAASH,EAAM,KAAKG,CAAK,CAAC,EAC9BC,EAAS,IAAMJ,EAAM,SAAS,CAAC,EAC/BL,EAAIQ,GAAUE,EAAA,CAAE,IAAKtB,GAAOoB,EAAQ,CACtC,CACJ,CAAC,CACH,CCtDO,SAASG,GACdC,EAAiB,CAAE,UAAAC,EAAW,QAAAC,CAAQ,EACpB,CAClB,OAAOC,GAAiB,SAAS,IAAI,EAClC,KACCC,EAAU,IAAMC,GAAgBL,EAAI,CAAE,QAAAE,EAAS,UAAAD,CAAU,CAAC,CAAC,EAC3DK,EAAI,CAAC,CAAE,OAAQ,CAAE,EAAAC,CAAE,CAAE,KACZ,CACL,OAAQA,GAAK,EACf,EACD,EACDC,EAAwB,QAAQ,CAClC,CACJ,CAaO,SAASC,GACdT,EAAiBU,EACY,CAC7B,OAAOC,EAAM,IAAM,CACjB,IAAMC,EAAQ,IAAIC,EAClB,OAAAD,EAAM,UAAU,CAGd,KAAK,CAAE,OAAAE,CAAO,EAAG,CACfd,EAAG,OAASc,CACd,EAGA,UAAW,CACTd,EAAG,OAAS,EACd,CACF,CAAC,GAICe,EAAQ,wBAAwB,EAC5BC,EAAG,CAAE,OAAQ,EAAM,CAAC,EACpBjB,GAAUC,EAAIU,CAAO,GAExB,KACCO,EAAIC,GAASN,EAAM,KAAKM,CAAK,CAAC,EAC9BC,EAAS,IAAMP,EAAM,SAAS,CAAC,EAC/BN,EAAIY,GAAUE,EAAA,CAAE,IAAKpB,GAAOkB,EAAQ,CACtC,CACJ,CAAC,CACH,CCpBO,SAASG,GACdC,EAAiB,CAAE,UAAAC,EAAW,QAAAC,CAAQ,EACT,CAC7B,IAAMC,EAAQ,IAAI,IAGZC,EAAUC,EAA+B,cAAeL,CAAE,EAChE,QAAWM,KAAUF,EAAS,CAC5B,IAAMG,EAAK,mBAAmBD,EAAO,KAAK,UAAU,CAAC,CAAC,EAChDE,EAASC,GAAmB,QAAQF,KAAM,EAC5C,OAAOC,GAAW,aACpBL,EAAM,IAAIG,EAAQE,CAAM,CAC5B,CAGA,IAAME,EAAUR,EACb,KACCS,EAAwB,QAAQ,EAChCC,EAAI,CAAC,CAAE,OAAAC,CAAO,IAAM,CAClB,IAAMC,EAAOC,GAAoB,MAAM,EACjCC,EAAOC,EAAW,wBAAyBH,CAAI,EACrD,OAAOD,EAAS,IACdG,EAAK,UACLF,EAAK,UAET,CAAC,EACDI,GAAM,CACR,EAgFF,OA7EmBC,GAAiB,SAAS,IAAI,EAC9C,KACCR,EAAwB,QAAQ,EAGhCS,EAAUC,GAAQC,EAAM,IAAM,CAC5B,IAAIC,EAA4B,CAAC,EACjC,OAAOC,EAAG,CAAC,GAAGrB,CAAK,EAAE,OAAO,CAACsB,EAAO,CAACnB,EAAQE,CAAM,IAAM,CACvD,KAAOe,EAAK,QACGpB,EAAM,IAAIoB,EAAKA,EAAK,OAAS,EAAE,EACnC,SAAWf,EAAO,SACzBe,EAAK,IAAI,EAOb,IAAIG,EAASlB,EAAO,UACpB,KAAO,CAACkB,GAAUlB,EAAO,eACvBA,EAASA,EAAO,cAChBkB,EAASlB,EAAO,UAIlB,OAAOiB,EAAM,IACX,CAAC,GAAGF,EAAO,CAAC,GAAGA,EAAMjB,CAAM,CAAC,EAAE,QAAQ,EACtCoB,CACF,CACF,EAAG,IAAI,GAAkC,CAAC,CAC5C,CAAC,EACE,KAGCd,EAAIa,GAAS,IAAI,IAAI,CAAC,GAAGA,CAAK,EAAE,KAAK,CAAC,CAAC,CAAEE,CAAC,EAAG,CAAC,CAAEC,CAAC,IAAMD,EAAIC,CAAC,CAAC,CAAC,EAC9DC,GAAkBnB,CAAO,EAGzBU,EAAU,CAAC,CAACK,EAAOK,CAAM,IAAM7B,EAC5B,KACC8B,GAAK,CAAC,CAACC,EAAMC,CAAI,EAAG,CAAE,OAAQ,CAAE,EAAAC,CAAE,EAAG,KAAAC,CAAK,IAAM,CAC9C,IAAMC,EAAOF,EAAIC,EAAK,QAAU,KAAK,MAAMd,EAAK,MAAM,EAGtD,KAAOY,EAAK,QAAQ,CAClB,GAAM,CAAC,CAAEP,CAAM,EAAIO,EAAK,GACxB,GAAIP,EAASI,EAASI,GAAKE,EACzBJ,EAAO,CAAC,GAAGA,EAAMC,EAAK,MAAM,CAAE,MAE9B,MAEJ,CAGA,KAAOD,EAAK,QAAQ,CAClB,GAAM,CAAC,CAAEN,CAAM,EAAIM,EAAKA,EAAK,OAAS,GACtC,GAAIN,EAASI,GAAUI,GAAK,CAACE,EAC3BH,EAAO,CAACD,EAAK,IAAI,EAAI,GAAGC,CAAI,MAE5B,MAEJ,CAGA,MAAO,CAACD,EAAMC,CAAI,CACpB,EAAG,CAAC,CAAC,EAAG,CAAC,GAAGR,CAAK,CAAC,CAAC,EACnBY,EAAqB,CAACV,EAAGC,IACvBD,EAAE,KAAOC,EAAE,IACXD,EAAE,KAAOC,EAAE,EACZ,CACH,CACF,CACF,CACF,CACF,EAIC,KACChB,EAAI,CAAC,CAACoB,EAAMC,CAAI,KAAO,CACrB,KAAMD,EAAK,IAAI,CAAC,CAACT,CAAI,IAAMA,CAAI,EAC/B,KAAMU,EAAK,IAAI,CAAC,CAACV,CAAI,IAAMA,CAAI,CACjC,EAAE,EAGFe,EAAU,CAAE,KAAM,CAAC,EAAG,KAAM,CAAC,CAAE,CAAC,EAChCC,GAAY,EAAG,CAAC,EAChB3B,EAAI,CAAC,CAAC,EAAGgB,CAAC,IAGJ,EAAE,KAAK,OAASA,EAAE,KAAK,OAClB,CACL,KAAMA,EAAE,KAAK,MAAM,KAAK,IAAI,EAAG,EAAE,KAAK,OAAS,CAAC,EAAGA,EAAE,KAAK,MAAM,EAChE,KAAM,CAAC,CACT,EAIO,CACL,KAAMA,EAAE,KAAK,MAAM,EAAE,EACrB,KAAMA,EAAE,KAAK,MAAM,EAAGA,EAAE,KAAK,OAAS,EAAE,KAAK,MAAM,CACrD,CAEH,CACH,CACJ,CAYO,SAASY,GACdxC,EAAiB,CAAE,UAAAC,EAAW,QAAAC,EAAS,QAAAuC,CAAQ,EACP,CACxC,OAAOnB,EAAM,IAAM,CACjB,IAAMoB,EAAQ,IAAIC,EACZC,EAAQF,EAAM,KAAKG,GAAS,CAAC,CAAC,EAoBpC,GAnBAH,EAAM,UAAU,CAAC,CAAE,KAAAV,EAAM,KAAAC,CAAK,IAAM,CAGlC,OAAW,CAAC3B,CAAM,IAAK2B,EACrB3B,EAAO,UAAU,OAAO,sBAAsB,EAC9CA,EAAO,UAAU,OAAO,sBAAsB,EAIhD,OAAW,CAACmB,EAAO,CAACnB,CAAM,CAAC,IAAK0B,EAAK,QAAQ,EAC3C1B,EAAO,UAAU,IAAI,sBAAsB,EAC3CA,EAAO,UAAU,OACf,uBACAmB,IAAUO,EAAK,OAAS,CAC1B,CAEJ,CAAC,EAGGc,EAAQ,YAAY,EAAG,CAGzB,IAAMC,EAAUC,EACd/C,EAAU,KAAKgD,GAAa,CAAC,EAAGrC,EAAI,IAAG,EAAY,CAAC,EACpDX,EAAU,KAAKgD,GAAa,GAAG,EAAGrC,EAAI,IAAM,QAAiB,CAAC,CAChE,EAGA8B,EACG,KACCQ,EAAO,CAAC,CAAE,KAAAlB,CAAK,IAAMA,EAAK,OAAS,CAAC,EACpCmB,GAAeJ,CAAO,CACxB,EACG,UAAU,CAAC,CAAC,CAAE,KAAAf,CAAK,EAAGoB,CAAQ,IAAM,CACnC,GAAM,CAAC9C,CAAM,EAAI0B,EAAKA,EAAK,OAAS,GACpC,GAAI1B,EAAO,aAAc,CAGvB,IAAM+C,EAAYC,GAAoBhD,CAAM,EAC5C,GAAI,OAAO+C,GAAc,YAAa,CACpC,IAAM3B,EAASpB,EAAO,UAAY+C,EAAU,UACtC,CAAE,OAAAxC,CAAO,EAAI0C,GAAeF,CAAS,EAC3CA,EAAU,SAAS,CACjB,IAAK3B,EAASb,EAAS,EACvB,SAAAuC,CACF,CAAC,CACH,CACF,CACF,CAAC,CACP,CAGA,OAAIN,EAAQ,qBAAqB,GAC/B7C,EACG,KACCuD,GAAUZ,CAAK,EACfjC,EAAwB,QAAQ,EAChCsC,GAAa,GAAG,EAChBQ,GAAK,CAAC,EACND,GAAUf,EAAQ,KAAKgB,GAAK,CAAC,CAAC,CAAC,EAC/BC,GAAO,CAAE,MAAO,GAAI,CAAC,EACrBP,GAAeT,CAAK,CACtB,EACG,UAAU,CAAC,CAAC,CAAE,CAAE,KAAAV,CAAK,CAAC,IAAM,CAC3B,IAAM2B,EAAMC,GAAY,EAGlBtD,EAAS0B,EAAKA,EAAK,OAAS,GAClC,GAAI1B,GAAUA,EAAO,OAAQ,CAC3B,GAAM,CAACuD,CAAM,EAAIvD,EACX,CAAE,KAAAwD,CAAK,EAAI,IAAI,IAAID,EAAO,IAAI,EAChCF,EAAI,OAASG,IACfH,EAAI,KAAOG,EACX,QAAQ,aAAa,CAAC,EAAG,GAAI,GAAGH,GAAK,EAIzC,MACEA,EAAI,KAAO,GACX,QAAQ,aAAa,CAAC,EAAG,GAAI,GAAGA,GAAK,CAEzC,CAAC,EAGA5D,GAAqBC,EAAI,CAAE,UAAAC,EAAW,QAAAC,CAAQ,CAAC,EACnD,KACC6D,EAAIC,GAAStB,EAAM,KAAKsB,CAAK,CAAC,EAC9BC,EAAS,IAAMvB,EAAM,SAAS,CAAC,EAC/B9B,EAAIoD,GAAUE,EAAA,CAAE,IAAKlE,GAAOgE,EAAQ,CACtC,CACJ,CAAC,CACH,CCpRO,SAASG,GACdC,EAAkB,CAAE,UAAAC,EAAW,MAAAC,EAAO,QAAAC,CAAQ,EACvB,CAGvB,IAAMC,EAAaH,EAChB,KACCI,EAAI,CAAC,CAAE,OAAQ,CAAE,EAAAC,CAAE,CAAE,IAAMA,CAAC,EAC5BC,GAAY,EAAG,CAAC,EAChBF,EAAI,CAAC,CAACG,EAAGC,CAAC,IAAMD,EAAIC,GAAKA,EAAI,CAAC,EAC9BC,EAAqB,CACvB,EAGIC,EAAUT,EACb,KACCG,EAAI,CAAC,CAAE,OAAAO,CAAO,IAAMA,CAAM,CAC5B,EAGF,OAAOC,EAAc,CAACF,EAASP,CAAU,CAAC,EACvC,KACCC,EAAI,CAAC,CAACO,EAAQE,CAAS,IAAM,EAAEF,GAAUE,EAAU,EACnDJ,EAAqB,EACrBK,GAAUZ,EAAQ,KAAKa,GAAK,CAAC,CAAC,CAAC,EAC/BC,GAAQ,EAAI,EACZC,GAAO,CAAE,MAAO,GAAI,CAAC,EACrBb,EAAIc,IAAW,CAAE,OAAAA,CAAO,EAAE,CAC5B,CACJ,CAYO,SAASC,GACdC,EAAiB,CAAE,UAAApB,EAAW,QAAAqB,EAAS,MAAApB,EAAO,QAAAC,CAAQ,EACpB,CAClC,IAAMoB,EAAQ,IAAIC,EACZC,EAAQF,EAAM,KAAKG,GAAS,CAAC,CAAC,EACpC,OAAAH,EAAM,UAAU,CAGd,KAAK,CAAE,OAAAJ,CAAO,EAAG,CACfE,EAAG,OAASF,EACRA,GACFE,EAAG,aAAa,WAAY,IAAI,EAChCA,EAAG,KAAK,GAERA,EAAG,gBAAgB,UAAU,CAEjC,EAGA,UAAW,CACTA,EAAG,MAAM,IAAM,GACfA,EAAG,OAAS,GACZA,EAAG,gBAAgB,UAAU,CAC/B,CACF,CAAC,EAGDC,EACG,KACCP,GAAUU,CAAK,EACfE,EAAwB,QAAQ,CAClC,EACG,UAAU,CAAC,CAAE,OAAAC,CAAO,IAAM,CACzBP,EAAG,MAAM,IAAM,GAAGO,EAAS,MAC7B,CAAC,EAGE7B,GAAesB,EAAI,CAAE,UAAApB,EAAW,MAAAC,EAAO,QAAAC,CAAQ,CAAC,EACpD,KACC0B,EAAIC,GAASP,EAAM,KAAKO,CAAK,CAAC,EAC9BC,EAAS,IAAMR,EAAM,SAAS,CAAC,EAC/BlB,EAAIyB,GAAUE,EAAA,CAAE,IAAKX,GAAOS,EAAQ,CACtC,CACJ,CCpHO,SAASG,GACd,CAAE,UAAAC,EAAW,QAAAC,CAAQ,EACf,CACND,EACG,KACCE,EAAU,IAAMC,EAEd,0DACF,CAAC,EACDC,EAAIC,GAAM,CACRA,EAAG,cAAgB,GACnBA,EAAG,QAAU,EACf,CAAC,EACDC,GAASD,GAAME,EAAUF,EAAI,QAAQ,EAClC,KACCG,GAAU,IAAMH,EAAG,UAAU,SAAS,0BAA0B,CAAC,EACjEI,EAAI,IAAMJ,CAAE,CACd,CACF,EACAK,GAAeT,CAAO,CACxB,EACG,UAAU,CAAC,CAACI,EAAIM,CAAM,IAAM,CAC3BN,EAAG,UAAU,OAAO,0BAA0B,EAC1CM,IACFN,EAAG,QAAU,GACjB,CAAC,CACP,CC/BA,SAASO,IAAyB,CAChC,MAAO,qBAAqB,KAAK,UAAU,SAAS,CACtD,CAiBO,SAASC,GACd,CAAE,UAAAC,CAAU,EACN,CACNA,EACG,KACCC,EAAU,IAAMC,EAAY,qBAAqB,CAAC,EAClDC,EAAIC,GAAMA,EAAG,gBAAgB,mBAAmB,CAAC,EACjDC,EAAOP,EAAa,EACpBQ,GAASF,GAAMG,EAAUH,EAAI,YAAY,EACtC,KACCI,EAAI,IAAMJ,CAAE,CACd,CACF,CACF,EACG,UAAUA,GAAM,CACf,IAAMK,EAAML,EAAG,UAGXK,IAAQ,EACVL,EAAG,UAAY,EAGNK,EAAML,EAAG,eAAiBA,EAAG,eACtCA,EAAG,UAAYK,EAAM,EAEzB,CAAC,CACP,CCpCO,SAASC,GACd,CAAE,UAAAC,EAAW,QAAAC,CAAQ,EACf,CACNC,EAAc,CAACC,GAAY,QAAQ,EAAGF,CAAO,CAAC,EAC3C,KACCG,EAAI,CAAC,CAACC,EAAQC,CAAM,IAAMD,GAAU,CAACC,CAAM,EAC3CC,EAAUF,GAAUG,EAAGH,CAAM,EAC1B,KACCI,GAAMJ,EAAS,IAAM,GAAG,CAC1B,CACF,EACAK,GAAeV,CAAS,CAC1B,EACG,UAAU,CAAC,CAACK,EAAQ,CAAE,OAAQ,CAAE,EAAAM,CAAE,CAAC,CAAC,IAAM,CACzC,GAAIN,EACF,SAAS,KAAK,aAAa,qBAAsB,EAAE,EACnD,SAAS,KAAK,MAAM,IAAM,IAAIM,UACzB,CACL,IAAMC,EAAQ,GAAK,SAAS,SAAS,KAAK,MAAM,IAAK,EAAE,EACvD,SAAS,KAAK,gBAAgB,oBAAoB,EAClD,SAAS,KAAK,MAAM,IAAM,GACtBA,GACF,OAAO,SAAS,EAAGA,CAAK,CAC5B,CACF,CAAC,CACP,CC7DK,OAAO,UACV,OAAO,QAAU,SAAUC,EAAa,CACtC,IAAMC,EAA2B,CAAC,EAClC,QAAWC,KAAO,OAAO,KAAKF,CAAG,EAE/BC,EAAK,KAAK,CAACC,EAAKF,EAAIE,EAAI,CAAC,EAG3B,OAAOD,CACT,GAGG,OAAO,SACV,OAAO,OAAS,SAAUD,EAAa,CACrC,IAAMC,EAAiB,CAAC,EACxB,QAAWC,KAAO,OAAO,KAAKF,CAAG,EAE/BC,EAAK,KAAKD,EAAIE,EAAI,EAGpB,OAAOD,CACT,GAKE,OAAO,SAAY,cAGhB,QAAQ,UAAU,WACrB,QAAQ,UAAU,SAAW,SAC3BE,EAA8BC,EACxB,CACF,OAAOD,GAAM,UACf,KAAK,WAAaA,EAAE,KACpB,KAAK,UAAYA,EAAE,MAEnB,KAAK,WAAaA,EAClB,KAAK,UAAYC,EAErB,GAGG,QAAQ,UAAU,cACrB,QAAQ,UAAU,YAAc,YAC3BC,EACG,CACN,IAAMC,EAAS,KAAK,WACpB,GAAIA,EAAQ,CACND,EAAM,SAAW,GACnBC,EAAO,YAAY,IAAI,EAGzB,QAASC,EAAIF,EAAM,OAAS,EAAGE,GAAK,EAAGA,IAAK,CAC1C,IAAIC,EAAOH,EAAME,GACb,OAAOC,GAAS,SAClBA,EAAO,SAAS,eAAeA,CAAI,EAC5BA,EAAK,YACZA,EAAK,WAAW,YAAYA,CAAI,EAG7BD,EAGHD,EAAO,aAAa,KAAK,gBAAkBE,CAAI,EAF/CF,EAAO,aAAaE,EAAM,IAAI,CAGlC,CACF,CACF,IjMDJ,SAAS,gBAAgB,UAAU,OAAO,OAAO,EACjD,SAAS,gBAAgB,UAAU,IAAI,IAAI,EAG3C,IAAMC,GAAYC,GAAc,EAC1BC,GAAYC,GAAc,EAC1BC,GAAYC,GAAoB,EAChCC,GAAYC,GAAc,EAG1BC,GAAYC,GAAc,EAC1BC,GAAYC,GAAW,oBAAoB,EAC3CC,GAAYD,GAAW,qBAAqB,EAC5CE,GAAYC,GAAW,EAGvBC,GAASC,GAAc,EACvBC,GAAS,SAAS,MAAM,UAAU,QAAQ,GAC5C,+BAAU,QAASC,GACnB,IAAI,IAAI,2BAA4BH,GAAO,IAAI,CACjD,EACEI,GAGEC,GAAS,IAAIC,EACnBC,GAAiB,CAAE,OAAAF,EAAO,CAAC,EAGvBG,EAAQ,oBAAoB,GAC9BC,GAAoB,CAAE,UAAAxB,GAAW,UAAAE,GAAW,UAAAM,EAAU,CAAC,EA1HzD,IAAAiB,KA6HIA,GAAAV,GAAO,UAAP,YAAAU,GAAgB,YAAa,QAC/BC,GAAqB,CAAE,UAAA1B,EAAU,CAAC,EAGpC2B,EAAMzB,GAAWE,EAAO,EACrB,KACCwB,GAAM,GAAG,CACX,EACG,UAAU,IAAM,CACfC,GAAU,SAAU,EAAK,EACzBA,GAAU,SAAU,EAAK,CAC3B,CAAC,EAGLvB,GACG,KACCwB,EAAO,CAAC,CAAE,KAAAC,CAAK,IAAMA,IAAS,QAAQ,CACxC,EACG,UAAUC,GAAO,CAChB,OAAQA,EAAI,KAAM,CAGhB,IAAK,IACL,IAAK,IACH,IAAMC,EAAOC,GAAmB,kBAAkB,EAC9C,OAAOD,GAAS,aAClBA,EAAK,MAAM,EACb,MAGF,IAAK,IACL,IAAK,IACH,IAAME,EAAOD,GAAmB,kBAAkB,EAC9C,OAAOC,GAAS,aAClBA,EAAK,MAAM,EACb,KACJ,CACF,CAAC,EAGLC,GAAmB,CAAE,UAAApC,GAAW,QAAAU,EAAQ,CAAC,EACzC2B,GAAe,CAAE,UAAArC,EAAU,CAAC,EAC5BsC,GAAgB,CAAE,UAAA9B,GAAW,QAAAE,EAAQ,CAAC,EAGtC,IAAM6B,GAAUC,GAAYC,GAAoB,QAAQ,EAAG,CAAE,UAAAjC,EAAU,CAAC,EAClEkC,GAAQ1C,GACX,KACC2C,EAAI,IAAMF,GAAoB,MAAM,CAAC,EACrCG,EAAUC,GAAMC,GAAUD,EAAI,CAAE,UAAArC,GAAW,QAAA+B,EAAQ,CAAC,CAAC,EACrDQ,EAAY,CAAC,CACf,EAGIC,GAAWrB,EAGf,GAAGsB,GAAqB,SAAS,EAC9B,IAAIJ,GAAMK,GAAaL,EAAI,CAAE,QAAAzC,EAAQ,CAAC,CAAC,EAG1C,GAAG6C,GAAqB,QAAQ,EAC7B,IAAIJ,GAAMM,GAAYN,EAAI,CAAE,OAAAzB,EAAO,CAAC,CAAC,EAGxC,GAAG6B,GAAqB,QAAQ,EAC7B,IAAIJ,GAAMO,GAAYP,EAAI,CAAE,UAAArC,GAAW,QAAA+B,GAAS,MAAAG,EAAM,CAAC,CAAC,EAG3D,GAAGO,GAAqB,SAAS,EAC9B,IAAIJ,GAAMQ,GAAaR,CAAE,CAAC,EAG7B,GAAGI,GAAqB,QAAQ,EAC7B,IAAIJ,GAAMS,GAAYT,EAAI,CAAE,OAAA5B,GAAQ,UAAAX,EAAU,CAAC,CAAC,EAGnD,GAAG2C,GAAqB,QAAQ,EAC7B,IAAIJ,GAAMU,GAAYV,CAAE,CAAC,CAC9B,EAGMW,GAAWC,EAAM,IAAM9B,EAG3B,GAAGsB,GAAqB,UAAU,EAC/B,IAAIJ,GAAMa,GAAcb,CAAE,CAAC,EAG9B,GAAGI,GAAqB,SAAS,EAC9B,IAAIJ,GAAMc,GAAad,EAAI,CAAE,UAAArC,GAAW,QAAAJ,GAAS,OAAAS,EAAO,CAAC,CAAC,EAG7D,GAAGoC,GAAqB,SAAS,EAC9B,IAAIJ,GAAMtB,EAAQ,kBAAkB,EACjCqC,GAAoBf,EAAI,CAAE,OAAA5B,GAAQ,UAAAf,EAAU,CAAC,EAC7C2D,CACJ,EAGF,GAAGZ,GAAqB,cAAc,EACnC,IAAIJ,GAAMiB,GAAiBjB,EAAI,CAAE,UAAArC,GAAW,QAAA+B,EAAQ,CAAC,CAAC,EAGzD,GAAGU,GAAqB,SAAS,EAC9B,IAAIJ,GAAMA,EAAG,aAAa,cAAc,IAAM,aAC3CkB,GAAGnD,GAAS,IAAMoD,GAAanB,EAAI,CAAE,UAAArC,GAAW,QAAA+B,GAAS,MAAAG,EAAM,CAAC,CAAC,EACjEqB,GAAGrD,GAAS,IAAMsD,GAAanB,EAAI,CAAE,UAAArC,GAAW,QAAA+B,GAAS,MAAAG,EAAM,CAAC,CAAC,CACrE,EAGF,GAAGO,GAAqB,MAAM,EAC3B,IAAIJ,GAAMoB,GAAUpB,EAAI,CAAE,UAAArC,GAAW,QAAA+B,EAAQ,CAAC,CAAC,EAGlD,GAAGU,GAAqB,KAAK,EAC1B,IAAIJ,GAAMqB,GAAqBrB,EAAI,CAAE,UAAArC,GAAW,QAAA+B,GAAS,QAAAnC,EAAQ,CAAC,CAAC,EAGtE,GAAG6C,GAAqB,KAAK,EAC1B,IAAIJ,GAAMsB,GAAetB,EAAI,CAAE,UAAArC,GAAW,QAAA+B,GAAS,MAAAG,GAAO,QAAAtC,EAAQ,CAAC,CAAC,CACzE,CAAC,EAGKgE,GAAapE,GAChB,KACC4C,EAAU,IAAMY,EAAQ,EACxBa,GAAUrB,EAAQ,EAClBD,EAAY,CAAC,CACf,EAGFqB,GAAW,UAAU,EAMrB,OAAO,UAAapE,GACpB,OAAO,UAAaE,GACpB,OAAO,QAAaE,GACpB,OAAO,UAAaE,GACpB,OAAO,UAAaE,GACpB,OAAO,QAAaE,GACpB,OAAO,QAAaE,GACpB,OAAO,OAAaC,GACpB,OAAO,OAAaO,GACpB,OAAO,WAAagD", + "names": ["require_focus_visible", "__commonJSMin", "exports", "module", "global", "factory", "applyFocusVisiblePolyfill", "scope", "hadKeyboardEvent", "hadFocusVisibleRecently", "hadFocusVisibleRecentlyTimeout", "inputTypesAllowlist", "isValidFocusTarget", "el", "focusTriggersKeyboardModality", "type", "tagName", "addFocusVisibleClass", "removeFocusVisibleClass", "onKeyDown", "e", "onPointerDown", "onFocus", "onBlur", "onVisibilityChange", "addInitialPointerMoveListeners", "onInitialPointerMove", "removeInitialPointerMoveListeners", "event", "error", "require_url_polyfill", "__commonJSMin", "exports", "global", "checkIfIteratorIsSupported", "error", "iteratorSupported", "createIterator", "items", "iterator", "value", "serializeParam", "deserializeParam", "polyfillURLSearchParams", "URLSearchParams", "searchString", "typeofSearchString", "_this", "name", "i", "entry", "key", "proto", "callback", "thisArg", "entries", "searchArray", "checkIfURLSearchParamsSupported", "e", "a", "b", "keys", "attributes", "attribute", "checkIfURLIsSupported", "u", "polyfillURL", "_URL", "URL", "url", "base", "doc", "baseElement", "err", "anchorElement", "inputElement", "searchParams", "enableSearchUpdate", "enableSearchParamsUpdate", "methodName", "method", "search", "linkURLWithAnchorAttribute", "attributeName", "expectedPort", "addPortToOrigin", "blob", "getOrigin", "require_tslib", "__commonJSMin", "exports", "module", "__extends", "__assign", "__rest", "__decorate", "__param", "__metadata", "__awaiter", "__generator", "__exportStar", "__values", "__read", "__spread", "__spreadArrays", "__spreadArray", "__await", "__asyncGenerator", "__asyncDelegator", "__asyncValues", "__makeTemplateObject", "__importStar", "__importDefault", "__classPrivateFieldGet", "__classPrivateFieldSet", "__createBinding", "factory", "root", "createExporter", "previous", "id", "v", "exporter", "extendStatics", "d", "b", "p", "__", "t", "s", "n", "e", "i", "decorators", "target", "key", "desc", "c", "r", "paramIndex", "decorator", "metadataKey", "metadataValue", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "rejected", "result", "body", "_", "f", "y", "g", "verb", "op", "m", "o", "k", "k2", "ar", "error", "il", "a", "j", "jl", "to", "from", "pack", "l", "q", "resume", "settle", "fulfill", "cooked", "raw", "__setModuleDefault", "mod", "receiver", "state", "kind", "require_clipboard", "__commonJSMin", "exports", "module", "root", "factory", "__webpack_modules__", "__unused_webpack_module", "__webpack_exports__", "__webpack_require__", "clipboard", "tiny_emitter", "tiny_emitter_default", "listen", "listen_default", "src_select", "select_default", "command", "type", "err", "ClipboardActionCut", "target", "selectedText", "actions_cut", "createFakeElement", "value", "isRTL", "fakeElement", "yPosition", "fakeCopyAction", "options", "ClipboardActionCopy", "actions_copy", "_typeof", "obj", "ClipboardActionDefault", "_options$action", "action", "container", "text", "actions_default", "clipboard_typeof", "_classCallCheck", "instance", "Constructor", "_defineProperties", "props", "i", "descriptor", "_createClass", "protoProps", "staticProps", "_inherits", "subClass", "superClass", "_setPrototypeOf", "o", "p", "_createSuper", "Derived", "hasNativeReflectConstruct", "_isNativeReflectConstruct", "Super", "_getPrototypeOf", "result", "NewTarget", "_possibleConstructorReturn", "self", "call", "_assertThisInitialized", "e", "getAttributeValue", "suffix", "element", "attribute", "Clipboard", "_Emitter", "_super", "trigger", "_this", "_this2", "selector", "actions", "support", "DOCUMENT_NODE_TYPE", "proto", "closest", "__unused_webpack_exports", "_delegate", "callback", "useCapture", "listenerFn", "listener", "delegate", "elements", "is", "listenNode", "listenNodeList", "listenSelector", "node", "nodeList", "select", "isReadOnly", "selection", "range", "E", "name", "ctx", "data", "evtArr", "len", "evts", "liveEvents", "__webpack_module_cache__", "moduleId", "getter", "definition", "key", "prop", "require_escape_html", "__commonJSMin", "exports", "module", "matchHtmlRegExp", "escapeHtml", "string", "str", "match", "escape", "html", "index", "lastIndex", "r", "a", "e", "import_focus_visible", "n", "t", "s", "r", "o", "u", "i", "a", "e", "c", "import_url_polyfill", "import_tslib", "__extends", "__assign", "__rest", "__decorate", "__param", "__metadata", "__awaiter", "__generator", "__exportStar", "__createBinding", "__values", "__read", "__spread", "__spreadArrays", "__spreadArray", "__await", "__asyncGenerator", "__asyncDelegator", "__asyncValues", "__makeTemplateObject", "__importStar", "__importDefault", "__classPrivateFieldGet", "__classPrivateFieldSet", "tslib", "isFunction", "value", "createErrorClass", "createImpl", "_super", "instance", "ctorFunc", "UnsubscriptionError", "createErrorClass", "_super", "errors", "err", "i", "arrRemove", "arr", "item", "index", "Subscription", "initialTeardown", "errors", "_parentage", "_parentage_1", "__values", "_parentage_1_1", "parent_1", "initialFinalizer", "isFunction", "e", "UnsubscriptionError", "_finalizers", "_finalizers_1", "_finalizers_1_1", "finalizer", "execFinalizer", "err", "__spreadArray", "__read", "teardown", "_a", "parent", "arrRemove", "empty", "EMPTY_SUBSCRIPTION", "Subscription", "isSubscription", "value", "isFunction", "execFinalizer", "finalizer", "config", "timeoutProvider", "handler", "timeout", "args", "_i", "delegate", "__spreadArray", "__read", "handle", "reportUnhandledError", "err", "timeoutProvider", "onUnhandledError", "config", "noop", "COMPLETE_NOTIFICATION", "createNotification", "errorNotification", "error", "nextNotification", "value", "kind", "context", "errorContext", "cb", "config", "isRoot", "_a", "errorThrown", "error", "captureError", "err", "Subscriber", "_super", "__extends", "destination", "_this", "isSubscription", "EMPTY_OBSERVER", "next", "error", "complete", "SafeSubscriber", "value", "handleStoppedNotification", "nextNotification", "err", "errorNotification", "COMPLETE_NOTIFICATION", "Subscription", "_bind", "bind", "fn", "thisArg", "ConsumerObserver", "partialObserver", "value", "error", "handleUnhandledError", "err", "SafeSubscriber", "_super", "__extends", "observerOrNext", "complete", "_this", "isFunction", "context_1", "config", "Subscriber", "handleUnhandledError", "error", "config", "captureError", "reportUnhandledError", "defaultErrorHandler", "err", "handleStoppedNotification", "notification", "subscriber", "onStoppedNotification", "timeoutProvider", "EMPTY_OBSERVER", "noop", "observable", "identity", "x", "pipe", "fns", "_i", "pipeFromArray", "identity", "input", "prev", "fn", "Observable", "subscribe", "operator", "observable", "observerOrNext", "error", "complete", "_this", "subscriber", "isSubscriber", "SafeSubscriber", "errorContext", "_a", "source", "sink", "err", "next", "promiseCtor", "getPromiseCtor", "resolve", "reject", "value", "operations", "_i", "pipeFromArray", "x", "getPromiseCtor", "promiseCtor", "_a", "config", "isObserver", "value", "isFunction", "isSubscriber", "Subscriber", "isSubscription", "hasLift", "source", "isFunction", "operate", "init", "liftedSource", "err", "createOperatorSubscriber", "destination", "onNext", "onComplete", "onError", "onFinalize", "OperatorSubscriber", "_super", "__extends", "shouldUnsubscribe", "_this", "value", "err", "closed_1", "_a", "Subscriber", "animationFrameProvider", "callback", "request", "cancel", "delegate", "handle", "timestamp", "Subscription", "args", "_i", "__spreadArray", "__read", "ObjectUnsubscribedError", "createErrorClass", "_super", "Subject", "_super", "__extends", "_this", "operator", "subject", "AnonymousSubject", "ObjectUnsubscribedError", "value", "errorContext", "_b", "__values", "_c", "observer", "err", "observers", "_a", "subscriber", "hasError", "isStopped", "EMPTY_SUBSCRIPTION", "Subscription", "arrRemove", "thrownError", "observable", "Observable", "destination", "source", "AnonymousSubject", "_super", "__extends", "destination", "source", "_this", "value", "_b", "_a", "err", "subscriber", "EMPTY_SUBSCRIPTION", "Subject", "dateTimestampProvider", "ReplaySubject", "_super", "__extends", "_bufferSize", "_windowTime", "_timestampProvider", "dateTimestampProvider", "_this", "value", "_a", "isStopped", "_buffer", "_infiniteTimeWindow", "subscriber", "subscription", "copy", "i", "adjustedBufferSize", "now", "last", "Subject", "Action", "_super", "__extends", "scheduler", "work", "state", "delay", "Subscription", "intervalProvider", "handler", "timeout", "args", "_i", "delegate", "__spreadArray", "__read", "handle", "AsyncAction", "_super", "__extends", "scheduler", "work", "_this", "state", "delay", "id", "_a", "_id", "intervalProvider", "_scheduler", "error", "_delay", "errored", "errorValue", "e", "actions", "arrRemove", "Action", "Scheduler", "schedulerActionCtor", "now", "work", "delay", "state", "dateTimestampProvider", "AsyncScheduler", "_super", "__extends", "SchedulerAction", "now", "Scheduler", "_this", "action", "actions", "error", "asyncScheduler", "AsyncScheduler", "AsyncAction", "async", "AnimationFrameAction", "_super", "__extends", "scheduler", "work", "_this", "id", "delay", "animationFrameProvider", "actions", "_a", "AsyncAction", "AnimationFrameScheduler", "_super", "__extends", "action", "flushId", "actions", "error", "AsyncScheduler", "animationFrameScheduler", "AnimationFrameScheduler", "AnimationFrameAction", "EMPTY", "Observable", "subscriber", "isScheduler", "value", "isFunction", "last", "arr", "popResultSelector", "args", "isFunction", "popScheduler", "isScheduler", "popNumber", "defaultValue", "isArrayLike", "x", "isPromise", "value", "isFunction", "isInteropObservable", "input", "isFunction", "observable", "isAsyncIterable", "obj", "isFunction", "createInvalidObservableTypeError", "input", "getSymbolIterator", "iterator", "isIterable", "input", "isFunction", "iterator", "readableStreamLikeToAsyncGenerator", "readableStream", "reader", "__await", "_a", "_b", "value", "done", "isReadableStreamLike", "obj", "isFunction", "innerFrom", "input", "Observable", "isInteropObservable", "fromInteropObservable", "isArrayLike", "fromArrayLike", "isPromise", "fromPromise", "isAsyncIterable", "fromAsyncIterable", "isIterable", "fromIterable", "isReadableStreamLike", "fromReadableStreamLike", "createInvalidObservableTypeError", "obj", "subscriber", "obs", "observable", "isFunction", "array", "i", "promise", "value", "err", "reportUnhandledError", "iterable", "iterable_1", "__values", "iterable_1_1", "asyncIterable", "process", "readableStream", "readableStreamLikeToAsyncGenerator", "asyncIterable_1", "__asyncValues", "asyncIterable_1_1", "executeSchedule", "parentSubscription", "scheduler", "work", "delay", "repeat", "scheduleSubscription", "observeOn", "scheduler", "delay", "operate", "source", "subscriber", "createOperatorSubscriber", "value", "executeSchedule", "err", "subscribeOn", "scheduler", "delay", "operate", "source", "subscriber", "scheduleObservable", "input", "scheduler", "innerFrom", "subscribeOn", "observeOn", "schedulePromise", "input", "scheduler", "innerFrom", "subscribeOn", "observeOn", "scheduleArray", "input", "scheduler", "Observable", "subscriber", "i", "scheduleIterable", "input", "scheduler", "Observable", "subscriber", "iterator", "executeSchedule", "value", "done", "_a", "err", "isFunction", "scheduleAsyncIterable", "input", "scheduler", "Observable", "subscriber", "executeSchedule", "iterator", "result", "scheduleReadableStreamLike", "input", "scheduler", "scheduleAsyncIterable", "readableStreamLikeToAsyncGenerator", "scheduled", "input", "scheduler", "isInteropObservable", "scheduleObservable", "isArrayLike", "scheduleArray", "isPromise", "schedulePromise", "isAsyncIterable", "scheduleAsyncIterable", "isIterable", "scheduleIterable", "isReadableStreamLike", "scheduleReadableStreamLike", "createInvalidObservableTypeError", "from", "input", "scheduler", "scheduled", "innerFrom", "of", "args", "_i", "scheduler", "popScheduler", "from", "throwError", "errorOrErrorFactory", "scheduler", "errorFactory", "isFunction", "init", "subscriber", "Observable", "isValidDate", "value", "map", "project", "thisArg", "operate", "source", "subscriber", "index", "createOperatorSubscriber", "value", "isArray", "callOrApply", "fn", "args", "__spreadArray", "__read", "mapOneOrManyArgs", "map", "isArray", "getPrototypeOf", "objectProto", "getKeys", "argsArgArrayOrObject", "args", "first_1", "isPOJO", "keys", "key", "obj", "createObject", "keys", "values", "result", "key", "i", "combineLatest", "args", "_i", "scheduler", "popScheduler", "resultSelector", "popResultSelector", "_a", "argsArgArrayOrObject", "observables", "keys", "from", "result", "Observable", "combineLatestInit", "values", "createObject", "identity", "mapOneOrManyArgs", "valueTransform", "subscriber", "maybeSchedule", "length", "active", "remainingFirstValues", "i", "source", "hasFirstValue", "createOperatorSubscriber", "value", "execute", "subscription", "executeSchedule", "mergeInternals", "source", "subscriber", "project", "concurrent", "onBeforeNext", "expand", "innerSubScheduler", "additionalFinalizer", "buffer", "active", "index", "isComplete", "checkComplete", "outerNext", "value", "doInnerSub", "innerComplete", "innerFrom", "createOperatorSubscriber", "innerValue", "bufferedValue", "executeSchedule", "err", "mergeMap", "project", "resultSelector", "concurrent", "isFunction", "a", "i", "map", "b", "ii", "innerFrom", "operate", "source", "subscriber", "mergeInternals", "mergeAll", "concurrent", "mergeMap", "identity", "concatAll", "mergeAll", "concat", "args", "_i", "concatAll", "from", "popScheduler", "defer", "observableFactory", "Observable", "subscriber", "innerFrom", "nodeEventEmitterMethods", "eventTargetMethods", "jqueryMethods", "fromEvent", "target", "eventName", "options", "resultSelector", "isFunction", "mapOneOrManyArgs", "_a", "__read", "isEventTarget", "methodName", "handler", "isNodeStyleEventEmitter", "toCommonHandlerRegistry", "isJQueryStyleEventEmitter", "add", "remove", "isArrayLike", "mergeMap", "subTarget", "innerFrom", "Observable", "subscriber", "args", "_i", "fromEventPattern", "addHandler", "removeHandler", "resultSelector", "mapOneOrManyArgs", "Observable", "subscriber", "handler", "e", "_i", "retValue", "isFunction", "timer", "dueTime", "intervalOrScheduler", "scheduler", "async", "intervalDuration", "isScheduler", "Observable", "subscriber", "due", "isValidDate", "n", "merge", "args", "_i", "scheduler", "popScheduler", "concurrent", "popNumber", "sources", "innerFrom", "mergeAll", "from", "EMPTY", "NEVER", "Observable", "noop", "isArray", "argsOrArgArray", "args", "filter", "predicate", "thisArg", "operate", "source", "subscriber", "index", "createOperatorSubscriber", "value", "zip", "args", "_i", "resultSelector", "popResultSelector", "sources", "argsOrArgArray", "Observable", "subscriber", "buffers", "completed", "sourceIndex", "innerFrom", "createOperatorSubscriber", "value", "buffer", "result", "__spreadArray", "__read", "i", "EMPTY", "audit", "durationSelector", "operate", "source", "subscriber", "hasValue", "lastValue", "durationSubscriber", "isComplete", "endDuration", "value", "cleanupDuration", "createOperatorSubscriber", "innerFrom", "auditTime", "duration", "scheduler", "asyncScheduler", "audit", "timer", "bufferCount", "bufferSize", "startBufferEvery", "operate", "source", "subscriber", "buffers", "count", "createOperatorSubscriber", "value", "toEmit", "buffers_1", "__values", "buffers_1_1", "buffer", "toEmit_1", "toEmit_1_1", "arrRemove", "buffers_2", "buffers_2_1", "catchError", "selector", "operate", "source", "subscriber", "innerSub", "syncUnsub", "handledResult", "createOperatorSubscriber", "err", "innerFrom", "scanInternals", "accumulator", "seed", "hasSeed", "emitOnNext", "emitBeforeComplete", "source", "subscriber", "hasState", "state", "index", "createOperatorSubscriber", "value", "i", "combineLatest", "args", "_i", "resultSelector", "popResultSelector", "pipe", "__spreadArray", "__read", "mapOneOrManyArgs", "operate", "source", "subscriber", "combineLatestInit", "argsOrArgArray", "combineLatestWith", "otherSources", "_i", "combineLatest", "__spreadArray", "__read", "concatMap", "project", "resultSelector", "isFunction", "mergeMap", "debounceTime", "dueTime", "scheduler", "asyncScheduler", "operate", "source", "subscriber", "activeTask", "lastValue", "lastTime", "emit", "value", "emitWhenIdle", "targetTime", "now", "createOperatorSubscriber", "defaultIfEmpty", "defaultValue", "operate", "source", "subscriber", "hasValue", "createOperatorSubscriber", "value", "take", "count", "EMPTY", "operate", "source", "subscriber", "seen", "createOperatorSubscriber", "value", "ignoreElements", "operate", "source", "subscriber", "createOperatorSubscriber", "noop", "mapTo", "value", "map", "delayWhen", "delayDurationSelector", "subscriptionDelay", "source", "concat", "take", "ignoreElements", "mergeMap", "value", "index", "mapTo", "delay", "due", "scheduler", "asyncScheduler", "duration", "timer", "delayWhen", "distinctUntilChanged", "comparator", "keySelector", "identity", "defaultCompare", "operate", "source", "subscriber", "previousKey", "first", "createOperatorSubscriber", "value", "currentKey", "a", "b", "distinctUntilKeyChanged", "key", "compare", "distinctUntilChanged", "x", "y", "endWith", "values", "_i", "source", "concat", "of", "__spreadArray", "__read", "finalize", "callback", "operate", "source", "subscriber", "takeLast", "count", "EMPTY", "operate", "source", "subscriber", "buffer", "createOperatorSubscriber", "value", "buffer_1", "__values", "buffer_1_1", "merge", "args", "_i", "scheduler", "popScheduler", "concurrent", "popNumber", "argsOrArgArray", "operate", "source", "subscriber", "mergeAll", "from", "__spreadArray", "__read", "mergeWith", "otherSources", "_i", "merge", "__spreadArray", "__read", "repeat", "countOrConfig", "count", "delay", "_a", "EMPTY", "operate", "source", "subscriber", "soFar", "sourceSub", "resubscribe", "notifier", "timer", "innerFrom", "notifierSubscriber_1", "createOperatorSubscriber", "subscribeToSource", "syncUnsub", "sample", "notifier", "operate", "source", "subscriber", "hasValue", "lastValue", "createOperatorSubscriber", "value", "noop", "scan", "accumulator", "seed", "operate", "scanInternals", "share", "options", "_a", "connector", "Subject", "_b", "resetOnError", "_c", "resetOnComplete", "_d", "resetOnRefCountZero", "wrapperSource", "connection", "resetConnection", "subject", "refCount", "hasCompleted", "hasErrored", "cancelReset", "reset", "resetAndUnsubscribe", "conn", "operate", "source", "subscriber", "dest", "handleReset", "SafeSubscriber", "value", "err", "innerFrom", "on", "args", "_i", "onSubscriber", "__spreadArray", "__read", "shareReplay", "configOrBufferSize", "windowTime", "scheduler", "bufferSize", "refCount", "_a", "_b", "_c", "share", "ReplaySubject", "skip", "count", "filter", "_", "index", "skipUntil", "notifier", "operate", "source", "subscriber", "taking", "skipSubscriber", "createOperatorSubscriber", "noop", "innerFrom", "value", "startWith", "values", "_i", "scheduler", "popScheduler", "operate", "source", "subscriber", "concat", "switchMap", "project", "resultSelector", "operate", "source", "subscriber", "innerSubscriber", "index", "isComplete", "checkComplete", "createOperatorSubscriber", "value", "innerIndex", "outerIndex", "innerFrom", "innerValue", "takeUntil", "notifier", "operate", "source", "subscriber", "innerFrom", "createOperatorSubscriber", "noop", "takeWhile", "predicate", "inclusive", "operate", "source", "subscriber", "index", "createOperatorSubscriber", "value", "result", "tap", "observerOrNext", "error", "complete", "tapObserver", "isFunction", "operate", "source", "subscriber", "_a", "isUnsub", "createOperatorSubscriber", "value", "err", "_b", "identity", "defaultThrottleConfig", "throttle", "durationSelector", "config", "operate", "source", "subscriber", "leading", "trailing", "hasValue", "sendValue", "throttled", "isComplete", "endThrottling", "send", "cleanupThrottling", "startThrottle", "value", "innerFrom", "createOperatorSubscriber", "throttleTime", "duration", "scheduler", "config", "asyncScheduler", "defaultThrottleConfig", "duration$", "timer", "throttle", "withLatestFrom", "inputs", "_i", "project", "popResultSelector", "operate", "source", "subscriber", "len", "otherValues", "hasValue", "ready", "i", "innerFrom", "createOperatorSubscriber", "value", "identity", "noop", "values", "__spreadArray", "__read", "zip", "sources", "_i", "operate", "source", "subscriber", "__spreadArray", "__read", "zipWith", "otherInputs", "_i", "zip", "__spreadArray", "__read", "watchDocument", "document$", "ReplaySubject", "fromEvent", "getElements", "selector", "node", "getElement", "el", "getOptionalElement", "getActiveElement", "watchElementFocus", "el", "merge", "fromEvent", "debounceTime", "map", "active", "getActiveElement", "startWith", "distinctUntilChanged", "getElementOffset", "el", "watchElementOffset", "merge", "fromEvent", "auditTime", "animationFrameScheduler", "map", "startWith", "getElementContentOffset", "el", "watchElementContentOffset", "merge", "fromEvent", "auditTime", "animationFrameScheduler", "map", "startWith", "MapShim", "getIndex", "arr", "key", "result", "entry", "index", "class_1", "value", "entries", "callback", "ctx", "_i", "_a", "isBrowser", "global$1", "requestAnimationFrame$1", "trailingTimeout", "throttle", "delay", "leadingCall", "trailingCall", "lastCallTime", "resolvePending", "proxy", "timeoutCallback", "timeStamp", "REFRESH_DELAY", "transitionKeys", "mutationObserverSupported", "ResizeObserverController", "observer", "observers", "changesDetected", "activeObservers", "_b", "propertyName", "isReflowProperty", "defineConfigurable", "target", "props", "getWindowOf", "ownerGlobal", "emptyRect", "createRectInit", "toFloat", "getBordersSize", "styles", "positions", "size", "position", "getPaddings", "paddings", "positions_1", "getSVGContentRect", "bbox", "getHTMLElementContentRect", "clientWidth", "clientHeight", "horizPad", "vertPad", "width", "height", "isDocumentElement", "vertScrollbar", "horizScrollbar", "isSVGGraphicsElement", "getContentRect", "createReadOnlyRect", "x", "y", "Constr", "rect", "ResizeObservation", "ResizeObserverEntry", "rectInit", "contentRect", "ResizeObserverSPI", "controller", "callbackCtx", "observations", "_this", "observation", "ResizeObserver", "method", "ResizeObserver_es_default", "entry$", "Subject", "observer$", "defer", "of", "ResizeObserver_es_default", "entries", "entry", "switchMap", "observer", "merge", "NEVER", "finalize", "shareReplay", "getElementSize", "el", "watchElementSize", "tap", "filter", "target", "map", "startWith", "getElementContentSize", "el", "getElementContainer", "parent", "entry$", "Subject", "observer$", "defer", "of", "entries", "entry", "switchMap", "observer", "merge", "NEVER", "finalize", "shareReplay", "watchElementVisibility", "el", "tap", "filter", "target", "map", "isIntersecting", "watchElementBoundary", "threshold", "watchElementContentOffset", "y", "visible", "getElementSize", "content", "getElementContentSize", "distinctUntilChanged", "toggles", "getElement", "getToggle", "name", "setToggle", "value", "watchToggle", "el", "fromEvent", "map", "startWith", "isSusceptibleToKeyboard", "el", "type", "watchKeyboard", "fromEvent", "filter", "ev", "map", "getToggle", "mode", "active", "getActiveElement", "share", "getLocation", "setLocation", "url", "watchLocation", "Subject", "appendChild", "el", "child", "node", "h", "tag", "attributes", "children", "attr", "truncate", "value", "n", "i", "round", "digits", "getLocationHash", "setLocationHash", "hash", "el", "h", "ev", "watchLocationHash", "fromEvent", "map", "startWith", "filter", "shareReplay", "watchLocationTarget", "id", "getOptionalElement", "watchMedia", "query", "media", "fromEventPattern", "next", "startWith", "watchPrint", "merge", "fromEvent", "map", "at", "query$", "factory", "switchMap", "active", "EMPTY", "request", "url", "options", "from", "catchError", "EMPTY", "switchMap", "res", "throwError", "of", "requestJSON", "shareReplay", "requestXML", "dom", "map", "watchScript", "src", "script", "h", "defer", "merge", "fromEvent", "switchMap", "throwError", "map", "finalize", "take", "getViewportOffset", "watchViewportOffset", "merge", "fromEvent", "map", "startWith", "getViewportSize", "watchViewportSize", "fromEvent", "map", "startWith", "watchViewport", "combineLatest", "watchViewportOffset", "watchViewportSize", "map", "offset", "size", "shareReplay", "watchViewportAt", "el", "viewport$", "header$", "size$", "distinctUntilKeyChanged", "offset$", "combineLatest", "map", "getElementOffset", "height", "offset", "size", "x", "y", "watchWorker", "worker", "tx$", "rx$", "fromEvent", "map", "data", "throttle", "tap", "message", "switchMap", "share", "script", "getElement", "config", "getLocation", "configuration", "feature", "flag", "translation", "key", "value", "getComponentElement", "type", "node", "getElement", "getComponentElements", "getElements", "watchAnnounce", "el", "button", "getElement", "fromEvent", "map", "content", "mountAnnounce", "feature", "EMPTY", "defer", "push$", "Subject", "startWith", "hash", "_a", "tap", "state", "finalize", "__spreadValues", "watchConsent", "el", "target$", "map", "target", "mountConsent", "options", "internal$", "Subject", "hidden", "tap", "state", "finalize", "__spreadValues", "import_clipboard", "renderTooltip", "id", "h", "renderAnnotation", "id", "prefix", "anchor", "h", "renderTooltip", "renderClipboardButton", "id", "h", "translation", "renderSearchDocument", "document", "flag", "parent", "teaser", "missing", "key", "list", "h", "url", "feature", "match", "highlight", "value", "tags", "configuration", "truncate", "tag", "id", "type", "translation", "renderSearchResultItem", "result", "threshold", "docs", "doc", "article", "index", "best", "more", "children", "section", "renderSourceFacts", "facts", "h", "key", "value", "round", "renderTabbedControl", "type", "classes", "h", "renderTable", "table", "h", "renderVersion", "version", "config", "configuration", "url", "h", "renderVersionSelector", "versions", "active", "translation", "watchAnnotation", "el", "container", "offset$", "defer", "combineLatest", "watchElementOffset", "watchElementContentOffset", "map", "x", "y", "scroll", "width", "height", "getElementSize", "watchElementFocus", "switchMap", "active", "offset", "take", "mountAnnotation", "target$", "tooltip", "index", "push$", "Subject", "done$", "takeLast", "watchElementVisibility", "takeUntil", "visible", "merge", "filter", "debounceTime", "auditTime", "animationFrameScheduler", "throttleTime", "origin", "fromEvent", "ev", "withLatestFrom", "_a", "parent", "getActiveElement", "target", "delay", "tap", "state", "finalize", "__spreadValues", "findAnnotationMarkers", "container", "markers", "el", "getElements", "nodes", "it", "node", "text", "match", "id", "force", "marker", "swap", "source", "target", "mountAnnotationList", "target$", "print$", "parent", "prefix", "annotations", "getOptionalElement", "renderAnnotation", "EMPTY", "defer", "done$", "Subject", "pairs", "annotation", "getElement", "takeUntil", "takeLast", "active", "inner", "child", "merge", "mountAnnotation", "finalize", "share", "sequence", "findCandidateList", "el", "sibling", "watchCodeBlock", "watchElementSize", "map", "width", "getElementContentSize", "distinctUntilKeyChanged", "mountCodeBlock", "options", "hover", "factory$", "defer", "push$", "Subject", "scrollable", "ClipboardJS", "parent", "renderClipboardButton", "container", "list", "feature", "annotations$", "mountAnnotationList", "tap", "state", "finalize", "__spreadValues", "mergeWith", "height", "distinctUntilChanged", "switchMap", "active", "EMPTY", "watchElementVisibility", "filter", "visible", "take", "mermaid$", "sequence", "fetchScripts", "watchScript", "of", "mountMermaid", "el", "tap", "mermaid_default", "map", "shareReplay", "id", "host", "h", "svg", "shadow", "watchDetails", "el", "target$", "print$", "open", "merge", "map", "target", "filter", "details", "active", "tap", "mountDetails", "options", "defer", "push$", "Subject", "action", "reveal", "state", "finalize", "__spreadValues", "sentinel", "h", "mountDataTable", "el", "renderTable", "of", "watchContentTabs", "el", "inputs", "getElements", "initial", "input", "merge", "fromEvent", "map", "getElement", "startWith", "active", "mountContentTabs", "viewport$", "prev", "renderTabbedControl", "next", "container", "defer", "push$", "Subject", "done$", "takeLast", "combineLatest", "watchElementSize", "auditTime", "animationFrameScheduler", "takeUntil", "size", "offset", "getElementOffset", "width", "getElementSize", "content", "getElementContentOffset", "watchElementContentOffset", "getElementContentSize", "direction", "feature", "skip", "withLatestFrom", "tab", "y", "set", "label", "tabs", "tap", "state", "finalize", "__spreadValues", "subscribeOn", "asyncScheduler", "mountContent", "el", "viewport$", "target$", "print$", "merge", "getElements", "child", "mountCodeBlock", "mountMermaid", "mountDataTable", "mountDetails", "mountContentTabs", "watchDialog", "_el", "alert$", "switchMap", "message", "merge", "of", "delay", "map", "active", "mountDialog", "el", "options", "inner", "getElement", "defer", "push$", "Subject", "tap", "state", "finalize", "__spreadValues", "isHidden", "viewport$", "feature", "of", "direction$", "map", "y", "bufferCount", "a", "b", "distinctUntilKeyChanged", "hidden$", "combineLatest", "filter", "offset", "direction", "distinctUntilChanged", "search$", "watchToggle", "search", "switchMap", "active", "startWith", "watchHeader", "el", "options", "defer", "watchElementSize", "height", "hidden", "shareReplay", "mountHeader", "header$", "main$", "push$", "Subject", "done$", "takeLast", "combineLatestWith", "takeUntil", "state", "__spreadValues", "watchHeaderTitle", "el", "viewport$", "header$", "watchViewportAt", "map", "y", "height", "getElementSize", "distinctUntilKeyChanged", "mountHeaderTitle", "options", "defer", "push$", "Subject", "active", "heading", "getOptionalElement", "EMPTY", "tap", "state", "finalize", "__spreadValues", "watchMain", "el", "viewport$", "header$", "adjust$", "map", "height", "distinctUntilChanged", "border$", "switchMap", "watchElementSize", "distinctUntilKeyChanged", "combineLatest", "header", "top", "bottom", "y", "a", "b", "watchPalette", "inputs", "current", "input", "of", "mergeMap", "fromEvent", "map", "startWith", "shareReplay", "mountPalette", "el", "defer", "push$", "Subject", "palette", "key", "value", "index", "label", "observeOn", "asyncScheduler", "getElements", "tap", "state", "finalize", "__spreadValues", "import_clipboard", "extract", "el", "text", "setupClipboardJS", "alert$", "ClipboardJS", "Observable", "subscriber", "getElement", "ev", "tap", "map", "translation", "preprocess", "urls", "root", "next", "a", "b", "url", "index", "fetchSitemap", "base", "cached", "of", "config", "configuration", "requestXML", "map", "sitemap", "getElements", "node", "catchError", "EMPTY", "defaultIfEmpty", "tap", "setupInstantLoading", "document$", "location$", "viewport$", "config", "configuration", "fromEvent", "favicon", "getOptionalElement", "push$", "fetchSitemap", "map", "paths", "path", "switchMap", "urls", "filter", "ev", "el", "url", "of", "NEVER", "share", "pop$", "merge", "distinctUntilChanged", "a", "b", "response$", "distinctUntilKeyChanged", "request", "catchError", "setLocation", "sample", "dom", "res", "skip", "replacement", "selector", "feature", "source", "target", "getComponentElement", "getElements", "concatMap", "script", "h", "name", "Observable", "observer", "EMPTY", "offset", "setLocationHash", "skipUntil", "debounceTime", "bufferCount", "state", "import_escape_html", "import_escape_html", "setupSearchHighlighter", "config", "escape", "separator", "highlight", "_", "data", "term", "query", "match", "value", "escapeHTML", "defaultTransform", "query", "terms", "index", "isSearchReadyMessage", "message", "isSearchQueryMessage", "isSearchResultMessage", "setupSearchIndex", "config", "docs", "translation", "options", "feature", "setupSearchWorker", "url", "index", "configuration", "worker", "tx$", "Subject", "rx$", "watchWorker", "map", "message", "isSearchResultMessage", "result", "document", "share", "from", "data", "setupVersionSelector", "document$", "config", "configuration", "versions$", "requestJSON", "catchError", "EMPTY", "current$", "map", "versions", "current", "version", "aliases", "switchMap", "urls", "fromEvent", "filter", "ev", "withLatestFrom", "el", "url", "of", "fetchSitemap", "sitemap", "path", "getLocation", "setLocation", "combineLatest", "getElement", "renderVersionSelector", "_a", "outdated", "latest", "warning", "getComponentElements", "watchSearchQuery", "el", "rx$", "fn", "defaultTransform", "searchParams", "getLocation", "setToggle", "param$", "filter", "isSearchReadyMessage", "take", "map", "watchToggle", "active", "url", "value", "focus$", "watchElementFocus", "value$", "merge", "fromEvent", "delay", "startWith", "distinctUntilChanged", "combineLatest", "focus", "shareReplay", "mountSearchQuery", "tx$", "push$", "Subject", "done$", "takeLast", "distinctUntilKeyChanged", "translation", "takeUntil", "tap", "state", "finalize", "__spreadValues", "share", "mountSearchResult", "el", "rx$", "query$", "push$", "Subject", "boundary$", "watchElementBoundary", "filter", "meta", "getElement", "list", "ready$", "isSearchReadyMessage", "take", "withLatestFrom", "skipUntil", "items", "value", "translation", "round", "tap", "switchMap", "merge", "of", "bufferCount", "zipWith", "chunk", "result", "renderSearchResultItem", "isSearchResultMessage", "map", "data", "state", "finalize", "__spreadValues", "watchSearchShare", "_el", "query$", "map", "value", "url", "getLocation", "mountSearchShare", "el", "options", "push$", "Subject", "fromEvent", "ev", "tap", "state", "finalize", "__spreadValues", "mountSearchSuggest", "el", "rx$", "keyboard$", "push$", "Subject", "query", "getComponentElement", "query$", "merge", "fromEvent", "observeOn", "asyncScheduler", "map", "distinctUntilChanged", "combineLatestWith", "suggestions", "value", "words", "last", "filter", "mode", "key", "isSearchResultMessage", "data", "tap", "state", "finalize", "mountSearch", "el", "index$", "keyboard$", "config", "configuration", "url", "worker", "setupSearchWorker", "query", "getComponentElement", "result", "tx$", "rx$", "filter", "isSearchQueryMessage", "sample", "isSearchReadyMessage", "take", "mode", "key", "active", "getActiveElement", "anchors", "anchor", "getElements", "article", "best", "a", "b", "setToggle", "els", "i", "query$", "mountSearchQuery", "result$", "mountSearchResult", "merge", "mergeWith", "getComponentElements", "child", "mountSearchShare", "mountSearchSuggest", "err", "NEVER", "mountSearchHiglight", "el", "index$", "location$", "combineLatest", "startWith", "getLocation", "filter", "url", "map", "index", "setupSearchHighlighter", "fn", "_a", "nodes", "it", "node", "original", "replaced", "text", "childNodes", "h", "watchSidebar", "el", "viewport$", "main$", "parent", "adjust", "combineLatest", "map", "offset", "height", "y", "distinctUntilChanged", "a", "b", "mountSidebar", "_a", "_b", "header$", "options", "__objRest", "inner", "getElement", "getElementOffset", "defer", "push$", "Subject", "auditTime", "animationFrameScheduler", "withLatestFrom", "observeOn", "take", "item", "getElements", "container", "getElementContainer", "getElementSize", "tap", "state", "finalize", "__spreadValues", "fetchSourceFactsFromGitHub", "user", "repo", "url", "zip", "requestJSON", "catchError", "EMPTY", "map", "release", "defaultIfEmpty", "info", "__spreadValues", "fetchSourceFactsFromGitLab", "base", "project", "url", "requestJSON", "catchError", "EMPTY", "map", "star_count", "forks_count", "defaultIfEmpty", "fetchSourceFacts", "url", "match", "user", "repo", "fetchSourceFactsFromGitHub", "base", "slug", "fetchSourceFactsFromGitLab", "EMPTY", "fetch$", "watchSource", "el", "defer", "cached", "of", "getComponentElements", "consent", "EMPTY", "fetchSourceFacts", "tap", "facts", "catchError", "filter", "map", "shareReplay", "mountSource", "inner", "getElement", "push$", "Subject", "renderSourceFacts", "state", "finalize", "__spreadValues", "watchTabs", "el", "viewport$", "header$", "watchElementSize", "switchMap", "watchViewportAt", "map", "y", "distinctUntilKeyChanged", "mountTabs", "options", "defer", "push$", "Subject", "hidden", "feature", "of", "tap", "state", "finalize", "__spreadValues", "watchTableOfContents", "el", "viewport$", "header$", "table", "anchors", "getElements", "anchor", "id", "target", "getOptionalElement", "adjust$", "distinctUntilKeyChanged", "map", "height", "main", "getComponentElement", "grid", "getElement", "share", "watchElementSize", "switchMap", "body", "defer", "path", "of", "index", "offset", "a", "b", "combineLatestWith", "adjust", "scan", "prev", "next", "y", "size", "last", "distinctUntilChanged", "startWith", "bufferCount", "mountTableOfContents", "target$", "push$", "Subject", "done$", "takeLast", "feature", "smooth$", "merge", "debounceTime", "filter", "withLatestFrom", "behavior", "container", "getElementContainer", "getElementSize", "takeUntil", "skip", "repeat", "url", "getLocation", "active", "hash", "tap", "state", "finalize", "__spreadValues", "watchBackToTop", "_el", "viewport$", "main$", "target$", "direction$", "map", "y", "bufferCount", "a", "b", "distinctUntilChanged", "active$", "active", "combineLatest", "direction", "takeUntil", "skip", "endWith", "repeat", "hidden", "mountBackToTop", "el", "header$", "push$", "Subject", "done$", "takeLast", "distinctUntilKeyChanged", "height", "tap", "state", "finalize", "__spreadValues", "patchIndeterminate", "document$", "tablet$", "switchMap", "getElements", "tap", "el", "mergeMap", "fromEvent", "takeWhile", "map", "withLatestFrom", "tablet", "isAppleDevice", "patchScrollfix", "document$", "switchMap", "getElements", "tap", "el", "filter", "mergeMap", "fromEvent", "map", "top", "patchScrolllock", "viewport$", "tablet$", "combineLatest", "watchToggle", "map", "active", "tablet", "switchMap", "of", "delay", "withLatestFrom", "y", "value", "obj", "data", "key", "x", "y", "nodes", "parent", "i", "node", "document$", "watchDocument", "location$", "watchLocation", "target$", "watchLocationTarget", "keyboard$", "watchKeyboard", "viewport$", "watchViewport", "tablet$", "watchMedia", "screen$", "print$", "watchPrint", "config", "configuration", "index$", "requestJSON", "NEVER", "alert$", "Subject", "setupClipboardJS", "feature", "setupInstantLoading", "_a", "setupVersionSelector", "merge", "delay", "setToggle", "filter", "mode", "key", "prev", "getOptionalElement", "next", "patchIndeterminate", "patchScrollfix", "patchScrolllock", "header$", "watchHeader", "getComponentElement", "main$", "map", "switchMap", "el", "watchMain", "shareReplay", "control$", "getComponentElements", "mountConsent", "mountDialog", "mountHeader", "mountPalette", "mountSearch", "mountSource", "content$", "defer", "mountAnnounce", "mountContent", "mountSearchHiglight", "EMPTY", "mountHeaderTitle", "at", "mountSidebar", "mountTabs", "mountTableOfContents", "mountBackToTop", "component$", "mergeWith"] +} diff --git a/assets/javascripts/lunr/min/lunr.ar.min.js b/assets/javascripts/lunr/min/lunr.ar.min.js new file mode 100644 index 00000000..9b06c26c --- /dev/null +++ b/assets/javascripts/lunr/min/lunr.ar.min.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ar=function(){this.pipeline.reset(),this.pipeline.add(e.ar.trimmer,e.ar.stopWordFilter,e.ar.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ar.stemmer))},e.ar.wordCharacters="ء-ٛٱـ",e.ar.trimmer=e.trimmerSupport.generateTrimmer(e.ar.wordCharacters),e.Pipeline.registerFunction(e.ar.trimmer,"trimmer-ar"),e.ar.stemmer=function(){var e=this;return e.result=!1,e.preRemoved=!1,e.sufRemoved=!1,e.pre={pre1:"ف ك ب و س ل ن ا ي ت",pre2:"ال لل",pre3:"بال وال فال تال كال ولل",pre4:"فبال كبال وبال وكال"},e.suf={suf1:"ه ك ت ن ا ي",suf2:"نك نه ها وك يا اه ون ين تن تم نا وا ان كم كن ني نن ما هم هن تك ته ات يه",suf3:"تين كهم نيه نهم ونه وها يهم ونا ونك وني وهم تكم تنا تها تني تهم كما كها ناه نكم هنا تان يها",suf4:"كموه ناها ونني ونهم تكما تموه تكاه كماه ناكم ناهم نيها وننا"},e.patterns=JSON.parse('{"pt43":[{"pt":[{"c":"ا","l":1}]},{"pt":[{"c":"ا,ت,ن,ي","l":0}],"mPt":[{"c":"ف","l":0,"m":1},{"c":"ع","l":1,"m":2},{"c":"ل","l":2,"m":3}]},{"pt":[{"c":"و","l":2}],"mPt":[{"c":"ف","l":0,"m":0},{"c":"ع","l":1,"m":1},{"c":"ل","l":2,"m":3}]},{"pt":[{"c":"ا","l":2}]},{"pt":[{"c":"ي","l":2}],"mPt":[{"c":"ف","l":0,"m":0},{"c":"ع","l":1,"m":1},{"c":"ا","l":2},{"c":"ل","l":3,"m":3}]},{"pt":[{"c":"م","l":0}]}],"pt53":[{"pt":[{"c":"ت","l":0},{"c":"ا","l":2}]},{"pt":[{"c":"ا,ن,ت,ي","l":0},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ت","l":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":0},{"c":"ا","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ع","l":2,"m":3},{"c":"ل","l":3,"m":4},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":0},{"c":"ا","l":3}],"mPt":[{"c":"ف","l":0,"m":1},{"c":"ع","l":1,"m":2},{"c":"ل","l":2,"m":4}]},{"pt":[{"c":"ا","l":3},{"c":"ن","l":4}]},{"pt":[{"c":"ت","l":0},{"c":"ي","l":3}]},{"pt":[{"c":"م","l":0},{"c":"و","l":3}]},{"pt":[{"c":"ا","l":1},{"c":"و","l":3}]},{"pt":[{"c":"و","l":1},{"c":"ا","l":2}]},{"pt":[{"c":"م","l":0},{"c":"ا","l":3}]},{"pt":[{"c":"م","l":0},{"c":"ي","l":3}]},{"pt":[{"c":"ا","l":2},{"c":"ن","l":3}]},{"pt":[{"c":"م","l":0},{"c":"ن","l":1}],"mPt":[{"c":"ا","l":0},{"c":"ن","l":1},{"c":"ف","l":2,"m":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"م","l":0},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ت","l":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"م","l":0},{"c":"ا","l":2}]},{"pt":[{"c":"م","l":1},{"c":"ا","l":3}]},{"pt":[{"c":"ي,ت,ا,ن","l":0},{"c":"ت","l":1}],"mPt":[{"c":"ف","l":0,"m":2},{"c":"ع","l":1,"m":3},{"c":"ا","l":2},{"c":"ل","l":3,"m":4}]},{"pt":[{"c":"ت,ي,ا,ن","l":0},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ت","l":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":2},{"c":"ي","l":3}]},{"pt":[{"c":"ا,ي,ت,ن","l":0},{"c":"ن","l":1}],"mPt":[{"c":"ا","l":0},{"c":"ن","l":1},{"c":"ف","l":2,"m":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":3},{"c":"ء","l":4}]}],"pt63":[{"pt":[{"c":"ا","l":0},{"c":"ت","l":2},{"c":"ا","l":4}]},{"pt":[{"c":"ا,ت,ن,ي","l":0},{"c":"س","l":1},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"س","l":1},{"c":"ت","l":2},{"c":"ف","l":3,"m":3},{"c":"ع","l":4,"m":4},{"c":"ا","l":5},{"c":"ل","l":6,"m":5}]},{"pt":[{"c":"ا,ن,ت,ي","l":0},{"c":"و","l":3}]},{"pt":[{"c":"م","l":0},{"c":"س","l":1},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"س","l":1},{"c":"ت","l":2},{"c":"ف","l":3,"m":3},{"c":"ع","l":4,"m":4},{"c":"ا","l":5},{"c":"ل","l":6,"m":5}]},{"pt":[{"c":"ي","l":1},{"c":"ي","l":3},{"c":"ا","l":4},{"c":"ء","l":5}]},{"pt":[{"c":"ا","l":0},{"c":"ن","l":1},{"c":"ا","l":4}]}],"pt54":[{"pt":[{"c":"ت","l":0}]},{"pt":[{"c":"ا,ي,ت,ن","l":0}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ع","l":2,"m":2},{"c":"ل","l":3,"m":3},{"c":"ر","l":4,"m":4},{"c":"ا","l":5},{"c":"ر","l":6,"m":4}]},{"pt":[{"c":"م","l":0}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ع","l":2,"m":2},{"c":"ل","l":3,"m":3},{"c":"ر","l":4,"m":4},{"c":"ا","l":5},{"c":"ر","l":6,"m":4}]},{"pt":[{"c":"ا","l":2}]},{"pt":[{"c":"ا","l":0},{"c":"ن","l":2}]}],"pt64":[{"pt":[{"c":"ا","l":0},{"c":"ا","l":4}]},{"pt":[{"c":"م","l":0},{"c":"ت","l":1}]}],"pt73":[{"pt":[{"c":"ا","l":0},{"c":"س","l":1},{"c":"ت","l":2},{"c":"ا","l":5}]}],"pt75":[{"pt":[{"c":"ا","l":0},{"c":"ا","l":5}]}]}'),e.execArray=["cleanWord","removeDiacritics","cleanAlef","removeStopWords","normalizeHamzaAndAlef","removeStartWaw","removePre432","removeEndTaa","wordCheck"],e.stem=function(){var r=0;for(e.result=!1,e.preRemoved=!1,e.sufRemoved=!1;r=0)return!0},e.normalizeHamzaAndAlef=function(){return e.word=e.word.replace("ؤ","ء"),e.word=e.word.replace("ئ","ء"),e.word=e.word.replace(/([\u0627])\1+/gi,"ا"),!1},e.removeEndTaa=function(){return!(e.word.length>2)||(e.word=e.word.replace(/[\u0627]$/,""),e.word=e.word.replace("ة",""),!1)},e.removeStartWaw=function(){return e.word.length>3&&"و"==e.word[0]&&"و"==e.word[1]&&(e.word=e.word.slice(1)),!1},e.removePre432=function(){var r=e.word;if(e.word.length>=7){var t=new RegExp("^("+e.pre.pre4.split(" ").join("|")+")");e.word=e.word.replace(t,"")}if(e.word==r&&e.word.length>=6){var c=new RegExp("^("+e.pre.pre3.split(" ").join("|")+")");e.word=e.word.replace(c,"")}if(e.word==r&&e.word.length>=5){var l=new RegExp("^("+e.pre.pre2.split(" ").join("|")+")");e.word=e.word.replace(l,"")}return r!=e.word&&(e.preRemoved=!0),!1},e.patternCheck=function(r){for(var t=0;t3){var t=new RegExp("^("+e.pre.pre1.split(" ").join("|")+")");e.word=e.word.replace(t,"")}return r!=e.word&&(e.preRemoved=!0),!1},e.removeSuf1=function(){var r=e.word;if(0==e.sufRemoved&&e.word.length>3){var t=new RegExp("("+e.suf.suf1.split(" ").join("|")+")$");e.word=e.word.replace(t,"")}return r!=e.word&&(e.sufRemoved=!0),!1},e.removeSuf432=function(){var r=e.word;if(e.word.length>=6){var t=new RegExp("("+e.suf.suf4.split(" ").join("|")+")$");e.word=e.word.replace(t,"")}if(e.word==r&&e.word.length>=5){var c=new RegExp("("+e.suf.suf3.split(" ").join("|")+")$");e.word=e.word.replace(c,"")}if(e.word==r&&e.word.length>=4){var l=new RegExp("("+e.suf.suf2.split(" ").join("|")+")$");e.word=e.word.replace(l,"")}return r!=e.word&&(e.sufRemoved=!0),!1},e.wordCheck=function(){for(var r=(e.word,[e.removeSuf432,e.removeSuf1,e.removePre1]),t=0,c=!1;e.word.length>=7&&!e.result&&t=f.limit)return;f.cursor++}for(;!f.out_grouping(w,97,248);){if(f.cursor>=f.limit)return;f.cursor++}d=f.cursor,d=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(c,32),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del();break;case 2:f.in_grouping_b(p,97,229)&&f.slice_del()}}function t(){var e,r=f.limit-f.cursor;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.find_among_b(l,4)?(f.bra=f.cursor,f.limit_backward=e,f.cursor=f.limit-r,f.cursor>f.limit_backward&&(f.cursor--,f.bra=f.cursor,f.slice_del())):f.limit_backward=e)}function s(){var e,r,i,n=f.limit-f.cursor;if(f.ket=f.cursor,f.eq_s_b(2,"st")&&(f.bra=f.cursor,f.eq_s_b(2,"ig")&&f.slice_del()),f.cursor=f.limit-n,f.cursor>=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(m,5),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del(),i=f.limit-f.cursor,t(),f.cursor=f.limit-i;break;case 2:f.slice_from("løs")}}function o(){var e;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.out_grouping_b(w,97,248)?(f.bra=f.cursor,u=f.slice_to(u),f.limit_backward=e,f.eq_v_b(u)&&f.slice_del()):f.limit_backward=e)}var a,d,u,c=[new r("hed",-1,1),new r("ethed",0,1),new r("ered",-1,1),new r("e",-1,1),new r("erede",3,1),new r("ende",3,1),new r("erende",5,1),new r("ene",3,1),new r("erne",3,1),new r("ere",3,1),new r("en",-1,1),new r("heden",10,1),new r("eren",10,1),new r("er",-1,1),new r("heder",13,1),new r("erer",13,1),new r("s",-1,2),new r("heds",16,1),new r("es",16,1),new r("endes",18,1),new r("erendes",19,1),new r("enes",18,1),new r("ernes",18,1),new r("eres",18,1),new r("ens",16,1),new r("hedens",24,1),new r("erens",24,1),new r("ers",16,1),new r("ets",16,1),new r("erets",28,1),new r("et",-1,1),new r("eret",30,1)],l=[new r("gd",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("elig",1,1),new r("els",-1,1),new r("løst",-1,2)],w=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],p=[239,254,42,3,0,0,0,0,0,0,0,0,0,0,0,0,16],f=new i;this.setCurrent=function(e){f.setCurrent(e)},this.getCurrent=function(){return f.getCurrent()},this.stem=function(){var r=f.cursor;return e(),f.limit_backward=r,f.cursor=f.limit,n(),f.cursor=f.limit,t(),f.cursor=f.limit,s(),f.cursor=f.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.da.stemmer,"stemmer-da"),e.da.stopWordFilter=e.generateStopWordFilter("ad af alle alt anden at blev blive bliver da de dem den denne der deres det dette dig din disse dog du efter eller en end er et for fra ham han hans har havde have hende hendes her hos hun hvad hvis hvor i ikke ind jeg jer jo kunne man mange med meget men mig min mine mit mod ned noget nogle nu når og også om op os over på selv sig sin sine sit skal skulle som sådan thi til ud under var vi vil ville vor være været".split(" ")),e.Pipeline.registerFunction(e.da.stopWordFilter,"stopWordFilter-da")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/min/lunr.de.min.js b/assets/javascripts/lunr/min/lunr.de.min.js new file mode 100644 index 00000000..f3b5c108 --- /dev/null +++ b/assets/javascripts/lunr/min/lunr.de.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `German` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.de=function(){this.pipeline.reset(),this.pipeline.add(e.de.trimmer,e.de.stopWordFilter,e.de.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.de.stemmer))},e.de.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.de.trimmer=e.trimmerSupport.generateTrimmer(e.de.wordCharacters),e.Pipeline.registerFunction(e.de.trimmer,"trimmer-de"),e.de.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(e,r,n){return!(!v.eq_s(1,e)||(v.ket=v.cursor,!v.in_grouping(p,97,252)))&&(v.slice_from(r),v.cursor=n,!0)}function i(){for(var r,n,i,s,t=v.cursor;;)if(r=v.cursor,v.bra=r,v.eq_s(1,"ß"))v.ket=v.cursor,v.slice_from("ss");else{if(r>=v.limit)break;v.cursor=r+1}for(v.cursor=t;;)for(n=v.cursor;;){if(i=v.cursor,v.in_grouping(p,97,252)){if(s=v.cursor,v.bra=s,e("u","U",i))break;if(v.cursor=s,e("y","Y",i))break}if(i>=v.limit)return void(v.cursor=n);v.cursor=i+1}}function s(){for(;!v.in_grouping(p,97,252);){if(v.cursor>=v.limit)return!0;v.cursor++}for(;!v.out_grouping(p,97,252);){if(v.cursor>=v.limit)return!0;v.cursor++}return!1}function t(){m=v.limit,l=m;var e=v.cursor+3;0<=e&&e<=v.limit&&(d=e,s()||(m=v.cursor,m=v.limit)return;v.cursor++}}}function c(){return m<=v.cursor}function u(){return l<=v.cursor}function a(){var e,r,n,i,s=v.limit-v.cursor;if(v.ket=v.cursor,(e=v.find_among_b(w,7))&&(v.bra=v.cursor,c()))switch(e){case 1:v.slice_del();break;case 2:v.slice_del(),v.ket=v.cursor,v.eq_s_b(1,"s")&&(v.bra=v.cursor,v.eq_s_b(3,"nis")&&v.slice_del());break;case 3:v.in_grouping_b(g,98,116)&&v.slice_del()}if(v.cursor=v.limit-s,v.ket=v.cursor,(e=v.find_among_b(f,4))&&(v.bra=v.cursor,c()))switch(e){case 1:v.slice_del();break;case 2:if(v.in_grouping_b(k,98,116)){var t=v.cursor-3;v.limit_backward<=t&&t<=v.limit&&(v.cursor=t,v.slice_del())}}if(v.cursor=v.limit-s,v.ket=v.cursor,(e=v.find_among_b(_,8))&&(v.bra=v.cursor,u()))switch(e){case 1:v.slice_del(),v.ket=v.cursor,v.eq_s_b(2,"ig")&&(v.bra=v.cursor,r=v.limit-v.cursor,v.eq_s_b(1,"e")||(v.cursor=v.limit-r,u()&&v.slice_del()));break;case 2:n=v.limit-v.cursor,v.eq_s_b(1,"e")||(v.cursor=v.limit-n,v.slice_del());break;case 3:if(v.slice_del(),v.ket=v.cursor,i=v.limit-v.cursor,!v.eq_s_b(2,"er")&&(v.cursor=v.limit-i,!v.eq_s_b(2,"en")))break;v.bra=v.cursor,c()&&v.slice_del();break;case 4:v.slice_del(),v.ket=v.cursor,e=v.find_among_b(b,2),e&&(v.bra=v.cursor,u()&&1==e&&v.slice_del())}}var d,l,m,h=[new r("",-1,6),new r("U",0,2),new r("Y",0,1),new r("ä",0,3),new r("ö",0,4),new r("ü",0,5)],w=[new r("e",-1,2),new r("em",-1,1),new r("en",-1,2),new r("ern",-1,1),new r("er",-1,1),new r("s",-1,3),new r("es",5,2)],f=[new r("en",-1,1),new r("er",-1,1),new r("st",-1,2),new r("est",2,1)],b=[new r("ig",-1,1),new r("lich",-1,1)],_=[new r("end",-1,1),new r("ig",-1,2),new r("ung",-1,1),new r("lich",-1,3),new r("isch",-1,2),new r("ik",-1,2),new r("heit",-1,3),new r("keit",-1,4)],p=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32,8],g=[117,30,5],k=[117,30,4],v=new n;this.setCurrent=function(e){v.setCurrent(e)},this.getCurrent=function(){return v.getCurrent()},this.stem=function(){var e=v.cursor;return i(),v.cursor=e,t(),v.limit_backward=e,v.cursor=v.limit,a(),v.cursor=v.limit_backward,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.de.stemmer,"stemmer-de"),e.de.stopWordFilter=e.generateStopWordFilter("aber alle allem allen aller alles als also am an ander andere anderem anderen anderer anderes anderm andern anderr anders auch auf aus bei bin bis bist da damit dann das dasselbe dazu daß dein deine deinem deinen deiner deines dem demselben den denn denselben der derer derselbe derselben des desselben dessen dich die dies diese dieselbe dieselben diesem diesen dieser dieses dir doch dort du durch ein eine einem einen einer eines einig einige einigem einigen einiger einiges einmal er es etwas euch euer eure eurem euren eurer eures für gegen gewesen hab habe haben hat hatte hatten hier hin hinter ich ihm ihn ihnen ihr ihre ihrem ihren ihrer ihres im in indem ins ist jede jedem jeden jeder jedes jene jenem jenen jener jenes jetzt kann kein keine keinem keinen keiner keines können könnte machen man manche manchem manchen mancher manches mein meine meinem meinen meiner meines mich mir mit muss musste nach nicht nichts noch nun nur ob oder ohne sehr sein seine seinem seinen seiner seines selbst sich sie sind so solche solchem solchen solcher solches soll sollte sondern sonst um und uns unse unsem unsen unser unses unter viel vom von vor war waren warst was weg weil weiter welche welchem welchen welcher welches wenn werde werden wie wieder will wir wird wirst wo wollen wollte während würde würden zu zum zur zwar zwischen über".split(" ")),e.Pipeline.registerFunction(e.de.stopWordFilter,"stopWordFilter-de")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/min/lunr.du.min.js b/assets/javascripts/lunr/min/lunr.du.min.js new file mode 100644 index 00000000..49a0f3f0 --- /dev/null +++ b/assets/javascripts/lunr/min/lunr.du.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Dutch` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");console.warn('[Lunr Languages] Please use the "nl" instead of the "du". The "nl" code is the standard code for Dutch language, and "du" will be removed in the next major versions.'),e.du=function(){this.pipeline.reset(),this.pipeline.add(e.du.trimmer,e.du.stopWordFilter,e.du.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.du.stemmer))},e.du.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.du.trimmer=e.trimmerSupport.generateTrimmer(e.du.wordCharacters),e.Pipeline.registerFunction(e.du.trimmer,"trimmer-du"),e.du.stemmer=function(){var r=e.stemmerSupport.Among,i=e.stemmerSupport.SnowballProgram,n=new function(){function e(){for(var e,r,i,o=C.cursor;;){if(C.bra=C.cursor,e=C.find_among(b,11))switch(C.ket=C.cursor,e){case 1:C.slice_from("a");continue;case 2:C.slice_from("e");continue;case 3:C.slice_from("i");continue;case 4:C.slice_from("o");continue;case 5:C.slice_from("u");continue;case 6:if(C.cursor>=C.limit)break;C.cursor++;continue}break}for(C.cursor=o,C.bra=o,C.eq_s(1,"y")?(C.ket=C.cursor,C.slice_from("Y")):C.cursor=o;;)if(r=C.cursor,C.in_grouping(q,97,232)){if(i=C.cursor,C.bra=i,C.eq_s(1,"i"))C.ket=C.cursor,C.in_grouping(q,97,232)&&(C.slice_from("I"),C.cursor=r);else if(C.cursor=i,C.eq_s(1,"y"))C.ket=C.cursor,C.slice_from("Y"),C.cursor=r;else if(n(r))break}else if(n(r))break}function n(e){return C.cursor=e,e>=C.limit||(C.cursor++,!1)}function o(){_=C.limit,f=_,t()||(_=C.cursor,_<3&&(_=3),t()||(f=C.cursor))}function t(){for(;!C.in_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}for(;!C.out_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}return!1}function s(){for(var e;;)if(C.bra=C.cursor,e=C.find_among(p,3))switch(C.ket=C.cursor,e){case 1:C.slice_from("y");break;case 2:C.slice_from("i");break;case 3:if(C.cursor>=C.limit)return;C.cursor++}}function u(){return _<=C.cursor}function c(){return f<=C.cursor}function a(){var e=C.limit-C.cursor;C.find_among_b(g,3)&&(C.cursor=C.limit-e,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del()))}function l(){var e;w=!1,C.ket=C.cursor,C.eq_s_b(1,"e")&&(C.bra=C.cursor,u()&&(e=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-e,C.slice_del(),w=!0,a())))}function m(){var e;u()&&(e=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-e,C.eq_s_b(3,"gem")||(C.cursor=C.limit-e,C.slice_del(),a())))}function d(){var e,r,i,n,o,t,s=C.limit-C.cursor;if(C.ket=C.cursor,e=C.find_among_b(h,5))switch(C.bra=C.cursor,e){case 1:u()&&C.slice_from("heid");break;case 2:m();break;case 3:u()&&C.out_grouping_b(z,97,232)&&C.slice_del()}if(C.cursor=C.limit-s,l(),C.cursor=C.limit-s,C.ket=C.cursor,C.eq_s_b(4,"heid")&&(C.bra=C.cursor,c()&&(r=C.limit-C.cursor,C.eq_s_b(1,"c")||(C.cursor=C.limit-r,C.slice_del(),C.ket=C.cursor,C.eq_s_b(2,"en")&&(C.bra=C.cursor,m())))),C.cursor=C.limit-s,C.ket=C.cursor,e=C.find_among_b(k,6))switch(C.bra=C.cursor,e){case 1:if(c()){if(C.slice_del(),i=C.limit-C.cursor,C.ket=C.cursor,C.eq_s_b(2,"ig")&&(C.bra=C.cursor,c()&&(n=C.limit-C.cursor,!C.eq_s_b(1,"e")))){C.cursor=C.limit-n,C.slice_del();break}C.cursor=C.limit-i,a()}break;case 2:c()&&(o=C.limit-C.cursor,C.eq_s_b(1,"e")||(C.cursor=C.limit-o,C.slice_del()));break;case 3:c()&&(C.slice_del(),l());break;case 4:c()&&C.slice_del();break;case 5:c()&&w&&C.slice_del()}C.cursor=C.limit-s,C.out_grouping_b(j,73,232)&&(t=C.limit-C.cursor,C.find_among_b(v,4)&&C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-t,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del())))}var f,_,w,b=[new r("",-1,6),new r("á",0,1),new r("ä",0,1),new r("é",0,2),new r("ë",0,2),new r("í",0,3),new r("ï",0,3),new r("ó",0,4),new r("ö",0,4),new r("ú",0,5),new r("ü",0,5)],p=[new r("",-1,3),new r("I",0,2),new r("Y",0,1)],g=[new r("dd",-1,-1),new r("kk",-1,-1),new r("tt",-1,-1)],h=[new r("ene",-1,2),new r("se",-1,3),new r("en",-1,2),new r("heden",2,1),new r("s",-1,3)],k=[new r("end",-1,1),new r("ig",-1,2),new r("ing",-1,1),new r("lijk",-1,3),new r("baar",-1,4),new r("bar",-1,5)],v=[new r("aa",-1,-1),new r("ee",-1,-1),new r("oo",-1,-1),new r("uu",-1,-1)],q=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],j=[1,0,0,17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],z=[17,67,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],C=new i;this.setCurrent=function(e){C.setCurrent(e)},this.getCurrent=function(){return C.getCurrent()},this.stem=function(){var r=C.cursor;return e(),C.cursor=r,o(),C.limit_backward=r,C.cursor=C.limit,d(),C.cursor=C.limit_backward,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.du.stemmer,"stemmer-du"),e.du.stopWordFilter=e.generateStopWordFilter(" aan al alles als altijd andere ben bij daar dan dat de der deze die dit doch doen door dus een eens en er ge geen geweest haar had heb hebben heeft hem het hier hij hoe hun iemand iets ik in is ja je kan kon kunnen maar me meer men met mij mijn moet na naar niet niets nog nu of om omdat onder ons ook op over reeds te tegen toch toen tot u uit uw van veel voor want waren was wat werd wezen wie wil worden wordt zal ze zelf zich zij zijn zo zonder zou".split(" ")),e.Pipeline.registerFunction(e.du.stopWordFilter,"stopWordFilter-du")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/min/lunr.es.min.js b/assets/javascripts/lunr/min/lunr.es.min.js new file mode 100644 index 00000000..2989d342 --- /dev/null +++ b/assets/javascripts/lunr/min/lunr.es.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Spanish` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,s){"function"==typeof define&&define.amd?define(s):"object"==typeof exports?module.exports=s():s()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.es=function(){this.pipeline.reset(),this.pipeline.add(e.es.trimmer,e.es.stopWordFilter,e.es.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.es.stemmer))},e.es.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.es.trimmer=e.trimmerSupport.generateTrimmer(e.es.wordCharacters),e.Pipeline.registerFunction(e.es.trimmer,"trimmer-es"),e.es.stemmer=function(){var s=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,n=new function(){function e(){if(A.out_grouping(x,97,252)){for(;!A.in_grouping(x,97,252);){if(A.cursor>=A.limit)return!0;A.cursor++}return!1}return!0}function n(){if(A.in_grouping(x,97,252)){var s=A.cursor;if(e()){if(A.cursor=s,!A.in_grouping(x,97,252))return!0;for(;!A.out_grouping(x,97,252);){if(A.cursor>=A.limit)return!0;A.cursor++}}return!1}return!0}function i(){var s,r=A.cursor;if(n()){if(A.cursor=r,!A.out_grouping(x,97,252))return;if(s=A.cursor,e()){if(A.cursor=s,!A.in_grouping(x,97,252)||A.cursor>=A.limit)return;A.cursor++}}g=A.cursor}function a(){for(;!A.in_grouping(x,97,252);){if(A.cursor>=A.limit)return!1;A.cursor++}for(;!A.out_grouping(x,97,252);){if(A.cursor>=A.limit)return!1;A.cursor++}return!0}function t(){var e=A.cursor;g=A.limit,p=g,v=g,i(),A.cursor=e,a()&&(p=A.cursor,a()&&(v=A.cursor))}function o(){for(var e;;){if(A.bra=A.cursor,e=A.find_among(k,6))switch(A.ket=A.cursor,e){case 1:A.slice_from("a");continue;case 2:A.slice_from("e");continue;case 3:A.slice_from("i");continue;case 4:A.slice_from("o");continue;case 5:A.slice_from("u");continue;case 6:if(A.cursor>=A.limit)break;A.cursor++;continue}break}}function u(){return g<=A.cursor}function w(){return p<=A.cursor}function c(){return v<=A.cursor}function m(){var e;if(A.ket=A.cursor,A.find_among_b(y,13)&&(A.bra=A.cursor,(e=A.find_among_b(q,11))&&u()))switch(e){case 1:A.bra=A.cursor,A.slice_from("iendo");break;case 2:A.bra=A.cursor,A.slice_from("ando");break;case 3:A.bra=A.cursor,A.slice_from("ar");break;case 4:A.bra=A.cursor,A.slice_from("er");break;case 5:A.bra=A.cursor,A.slice_from("ir");break;case 6:A.slice_del();break;case 7:A.eq_s_b(1,"u")&&A.slice_del()}}function l(e,s){if(!c())return!0;A.slice_del(),A.ket=A.cursor;var r=A.find_among_b(e,s);return r&&(A.bra=A.cursor,1==r&&c()&&A.slice_del()),!1}function d(e){return!c()||(A.slice_del(),A.ket=A.cursor,A.eq_s_b(2,e)&&(A.bra=A.cursor,c()&&A.slice_del()),!1)}function b(){var e;if(A.ket=A.cursor,e=A.find_among_b(S,46)){switch(A.bra=A.cursor,e){case 1:if(!c())return!1;A.slice_del();break;case 2:if(d("ic"))return!1;break;case 3:if(!c())return!1;A.slice_from("log");break;case 4:if(!c())return!1;A.slice_from("u");break;case 5:if(!c())return!1;A.slice_from("ente");break;case 6:if(!w())return!1;A.slice_del(),A.ket=A.cursor,e=A.find_among_b(C,4),e&&(A.bra=A.cursor,c()&&(A.slice_del(),1==e&&(A.ket=A.cursor,A.eq_s_b(2,"at")&&(A.bra=A.cursor,c()&&A.slice_del()))));break;case 7:if(l(P,3))return!1;break;case 8:if(l(F,3))return!1;break;case 9:if(d("at"))return!1}return!0}return!1}function f(){var e,s;if(A.cursor>=g&&(s=A.limit_backward,A.limit_backward=g,A.ket=A.cursor,e=A.find_among_b(W,12),A.limit_backward=s,e)){if(A.bra=A.cursor,1==e){if(!A.eq_s_b(1,"u"))return!1;A.slice_del()}return!0}return!1}function _(){var e,s,r,n;if(A.cursor>=g&&(s=A.limit_backward,A.limit_backward=g,A.ket=A.cursor,e=A.find_among_b(L,96),A.limit_backward=s,e))switch(A.bra=A.cursor,e){case 1:r=A.limit-A.cursor,A.eq_s_b(1,"u")?(n=A.limit-A.cursor,A.eq_s_b(1,"g")?A.cursor=A.limit-n:A.cursor=A.limit-r):A.cursor=A.limit-r,A.bra=A.cursor;case 2:A.slice_del()}}function h(){var e,s;if(A.ket=A.cursor,e=A.find_among_b(z,8))switch(A.bra=A.cursor,e){case 1:u()&&A.slice_del();break;case 2:u()&&(A.slice_del(),A.ket=A.cursor,A.eq_s_b(1,"u")&&(A.bra=A.cursor,s=A.limit-A.cursor,A.eq_s_b(1,"g")&&(A.cursor=A.limit-s,u()&&A.slice_del())))}}var v,p,g,k=[new s("",-1,6),new s("á",0,1),new s("é",0,2),new s("í",0,3),new s("ó",0,4),new s("ú",0,5)],y=[new s("la",-1,-1),new s("sela",0,-1),new s("le",-1,-1),new s("me",-1,-1),new s("se",-1,-1),new s("lo",-1,-1),new s("selo",5,-1),new s("las",-1,-1),new s("selas",7,-1),new s("les",-1,-1),new s("los",-1,-1),new s("selos",10,-1),new s("nos",-1,-1)],q=[new s("ando",-1,6),new s("iendo",-1,6),new s("yendo",-1,7),new s("ándo",-1,2),new s("iéndo",-1,1),new s("ar",-1,6),new s("er",-1,6),new s("ir",-1,6),new s("ár",-1,3),new s("ér",-1,4),new s("ír",-1,5)],C=[new s("ic",-1,-1),new s("ad",-1,-1),new s("os",-1,-1),new s("iv",-1,1)],P=[new s("able",-1,1),new s("ible",-1,1),new s("ante",-1,1)],F=[new s("ic",-1,1),new s("abil",-1,1),new s("iv",-1,1)],S=[new s("ica",-1,1),new s("ancia",-1,2),new s("encia",-1,5),new s("adora",-1,2),new s("osa",-1,1),new s("ista",-1,1),new s("iva",-1,9),new s("anza",-1,1),new s("logía",-1,3),new s("idad",-1,8),new s("able",-1,1),new s("ible",-1,1),new s("ante",-1,2),new s("mente",-1,7),new s("amente",13,6),new s("ación",-1,2),new s("ución",-1,4),new s("ico",-1,1),new s("ismo",-1,1),new s("oso",-1,1),new s("amiento",-1,1),new s("imiento",-1,1),new s("ivo",-1,9),new s("ador",-1,2),new s("icas",-1,1),new s("ancias",-1,2),new s("encias",-1,5),new s("adoras",-1,2),new s("osas",-1,1),new s("istas",-1,1),new s("ivas",-1,9),new s("anzas",-1,1),new s("logías",-1,3),new s("idades",-1,8),new s("ables",-1,1),new s("ibles",-1,1),new s("aciones",-1,2),new s("uciones",-1,4),new s("adores",-1,2),new s("antes",-1,2),new s("icos",-1,1),new s("ismos",-1,1),new s("osos",-1,1),new s("amientos",-1,1),new s("imientos",-1,1),new s("ivos",-1,9)],W=[new s("ya",-1,1),new s("ye",-1,1),new s("yan",-1,1),new s("yen",-1,1),new s("yeron",-1,1),new s("yendo",-1,1),new s("yo",-1,1),new s("yas",-1,1),new s("yes",-1,1),new s("yais",-1,1),new s("yamos",-1,1),new s("yó",-1,1)],L=[new s("aba",-1,2),new s("ada",-1,2),new s("ida",-1,2),new s("ara",-1,2),new s("iera",-1,2),new s("ía",-1,2),new s("aría",5,2),new s("ería",5,2),new s("iría",5,2),new s("ad",-1,2),new s("ed",-1,2),new s("id",-1,2),new s("ase",-1,2),new s("iese",-1,2),new s("aste",-1,2),new s("iste",-1,2),new s("an",-1,2),new s("aban",16,2),new s("aran",16,2),new s("ieran",16,2),new s("ían",16,2),new s("arían",20,2),new s("erían",20,2),new s("irían",20,2),new s("en",-1,1),new s("asen",24,2),new s("iesen",24,2),new s("aron",-1,2),new s("ieron",-1,2),new s("arán",-1,2),new s("erán",-1,2),new s("irán",-1,2),new s("ado",-1,2),new s("ido",-1,2),new s("ando",-1,2),new s("iendo",-1,2),new s("ar",-1,2),new s("er",-1,2),new s("ir",-1,2),new s("as",-1,2),new s("abas",39,2),new s("adas",39,2),new s("idas",39,2),new s("aras",39,2),new s("ieras",39,2),new s("ías",39,2),new s("arías",45,2),new s("erías",45,2),new s("irías",45,2),new s("es",-1,1),new s("ases",49,2),new s("ieses",49,2),new s("abais",-1,2),new s("arais",-1,2),new s("ierais",-1,2),new s("íais",-1,2),new s("aríais",55,2),new s("eríais",55,2),new s("iríais",55,2),new s("aseis",-1,2),new s("ieseis",-1,2),new s("asteis",-1,2),new s("isteis",-1,2),new s("áis",-1,2),new s("éis",-1,1),new s("aréis",64,2),new s("eréis",64,2),new s("iréis",64,2),new s("ados",-1,2),new s("idos",-1,2),new s("amos",-1,2),new s("ábamos",70,2),new s("áramos",70,2),new s("iéramos",70,2),new s("íamos",70,2),new s("aríamos",74,2),new s("eríamos",74,2),new s("iríamos",74,2),new s("emos",-1,1),new s("aremos",78,2),new s("eremos",78,2),new s("iremos",78,2),new s("ásemos",78,2),new s("iésemos",78,2),new s("imos",-1,2),new s("arás",-1,2),new s("erás",-1,2),new s("irás",-1,2),new s("ís",-1,2),new s("ará",-1,2),new s("erá",-1,2),new s("irá",-1,2),new s("aré",-1,2),new s("eré",-1,2),new s("iré",-1,2),new s("ió",-1,2)],z=[new s("a",-1,1),new s("e",-1,2),new s("o",-1,1),new s("os",-1,1),new s("á",-1,1),new s("é",-1,2),new s("í",-1,1),new s("ó",-1,1)],x=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,4,10],A=new r;this.setCurrent=function(e){A.setCurrent(e)},this.getCurrent=function(){return A.getCurrent()},this.stem=function(){var e=A.cursor;return t(),A.limit_backward=e,A.cursor=A.limit,m(),A.cursor=A.limit,b()||(A.cursor=A.limit,f()||(A.cursor=A.limit,_())),A.cursor=A.limit,h(),A.cursor=A.limit_backward,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.es.stemmer,"stemmer-es"),e.es.stopWordFilter=e.generateStopWordFilter("a al algo algunas algunos ante antes como con contra cual cuando de del desde donde durante e el ella ellas ellos en entre era erais eran eras eres es esa esas ese eso esos esta estaba estabais estaban estabas estad estada estadas estado estados estamos estando estar estaremos estará estarán estarás estaré estaréis estaría estaríais estaríamos estarían estarías estas este estemos esto estos estoy estuve estuviera estuvierais estuvieran estuvieras estuvieron estuviese estuvieseis estuviesen estuvieses estuvimos estuviste estuvisteis estuviéramos estuviésemos estuvo está estábamos estáis están estás esté estéis estén estés fue fuera fuerais fueran fueras fueron fuese fueseis fuesen fueses fui fuimos fuiste fuisteis fuéramos fuésemos ha habida habidas habido habidos habiendo habremos habrá habrán habrás habré habréis habría habríais habríamos habrían habrías habéis había habíais habíamos habían habías han has hasta hay haya hayamos hayan hayas hayáis he hemos hube hubiera hubierais hubieran hubieras hubieron hubiese hubieseis hubiesen hubieses hubimos hubiste hubisteis hubiéramos hubiésemos hubo la las le les lo los me mi mis mucho muchos muy más mí mía mías mío míos nada ni no nos nosotras nosotros nuestra nuestras nuestro nuestros o os otra otras otro otros para pero poco por porque que quien quienes qué se sea seamos sean seas seremos será serán serás seré seréis sería seríais seríamos serían serías seáis sido siendo sin sobre sois somos son soy su sus suya suyas suyo suyos sí también tanto te tendremos tendrá tendrán tendrás tendré tendréis tendría tendríais tendríamos tendrían tendrías tened tenemos tenga tengamos tengan tengas tengo tengáis tenida tenidas tenido tenidos teniendo tenéis tenía teníais teníamos tenían tenías ti tiene tienen tienes todo todos tu tus tuve tuviera tuvierais tuvieran tuvieras tuvieron tuviese tuvieseis tuviesen tuvieses tuvimos tuviste tuvisteis tuviéramos tuviésemos tuvo tuya tuyas tuyo tuyos tú un una uno unos vosotras vosotros vuestra vuestras vuestro vuestros y ya yo él éramos".split(" ")),e.Pipeline.registerFunction(e.es.stopWordFilter,"stopWordFilter-es")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/min/lunr.fi.min.js b/assets/javascripts/lunr/min/lunr.fi.min.js new file mode 100644 index 00000000..29f5dfce --- /dev/null +++ b/assets/javascripts/lunr/min/lunr.fi.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Finnish` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(i,e){"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=e():e()(i.lunr)}(this,function(){return function(i){if(void 0===i)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===i.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");i.fi=function(){this.pipeline.reset(),this.pipeline.add(i.fi.trimmer,i.fi.stopWordFilter,i.fi.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(i.fi.stemmer))},i.fi.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",i.fi.trimmer=i.trimmerSupport.generateTrimmer(i.fi.wordCharacters),i.Pipeline.registerFunction(i.fi.trimmer,"trimmer-fi"),i.fi.stemmer=function(){var e=i.stemmerSupport.Among,r=i.stemmerSupport.SnowballProgram,n=new function(){function i(){f=A.limit,d=f,n()||(f=A.cursor,n()||(d=A.cursor))}function n(){for(var i;;){if(i=A.cursor,A.in_grouping(W,97,246))break;if(A.cursor=i,i>=A.limit)return!0;A.cursor++}for(A.cursor=i;!A.out_grouping(W,97,246);){if(A.cursor>=A.limit)return!0;A.cursor++}return!1}function t(){return d<=A.cursor}function s(){var i,e;if(A.cursor>=f)if(e=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,i=A.find_among_b(h,10)){switch(A.bra=A.cursor,A.limit_backward=e,i){case 1:if(!A.in_grouping_b(x,97,246))return;break;case 2:if(!t())return}A.slice_del()}else A.limit_backward=e}function o(){var i,e,r;if(A.cursor>=f)if(e=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,i=A.find_among_b(v,9))switch(A.bra=A.cursor,A.limit_backward=e,i){case 1:r=A.limit-A.cursor,A.eq_s_b(1,"k")||(A.cursor=A.limit-r,A.slice_del());break;case 2:A.slice_del(),A.ket=A.cursor,A.eq_s_b(3,"kse")&&(A.bra=A.cursor,A.slice_from("ksi"));break;case 3:A.slice_del();break;case 4:A.find_among_b(p,6)&&A.slice_del();break;case 5:A.find_among_b(g,6)&&A.slice_del();break;case 6:A.find_among_b(j,2)&&A.slice_del()}else A.limit_backward=e}function l(){return A.find_among_b(q,7)}function a(){return A.eq_s_b(1,"i")&&A.in_grouping_b(L,97,246)}function u(){var i,e,r;if(A.cursor>=f)if(e=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,i=A.find_among_b(C,30)){switch(A.bra=A.cursor,A.limit_backward=e,i){case 1:if(!A.eq_s_b(1,"a"))return;break;case 2:case 9:if(!A.eq_s_b(1,"e"))return;break;case 3:if(!A.eq_s_b(1,"i"))return;break;case 4:if(!A.eq_s_b(1,"o"))return;break;case 5:if(!A.eq_s_b(1,"ä"))return;break;case 6:if(!A.eq_s_b(1,"ö"))return;break;case 7:if(r=A.limit-A.cursor,!l()&&(A.cursor=A.limit-r,!A.eq_s_b(2,"ie"))){A.cursor=A.limit-r;break}if(A.cursor=A.limit-r,A.cursor<=A.limit_backward){A.cursor=A.limit-r;break}A.cursor--,A.bra=A.cursor;break;case 8:if(!A.in_grouping_b(W,97,246)||!A.out_grouping_b(W,97,246))return}A.slice_del(),k=!0}else A.limit_backward=e}function c(){var i,e,r;if(A.cursor>=d)if(e=A.limit_backward,A.limit_backward=d,A.ket=A.cursor,i=A.find_among_b(P,14)){if(A.bra=A.cursor,A.limit_backward=e,1==i){if(r=A.limit-A.cursor,A.eq_s_b(2,"po"))return;A.cursor=A.limit-r}A.slice_del()}else A.limit_backward=e}function m(){var i;A.cursor>=f&&(i=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,A.find_among_b(F,2)?(A.bra=A.cursor,A.limit_backward=i,A.slice_del()):A.limit_backward=i)}function w(){var i,e,r,n,t,s;if(A.cursor>=f){if(e=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,A.eq_s_b(1,"t")&&(A.bra=A.cursor,r=A.limit-A.cursor,A.in_grouping_b(W,97,246)&&(A.cursor=A.limit-r,A.slice_del(),A.limit_backward=e,n=A.limit-A.cursor,A.cursor>=d&&(A.cursor=d,t=A.limit_backward,A.limit_backward=A.cursor,A.cursor=A.limit-n,A.ket=A.cursor,i=A.find_among_b(S,2))))){if(A.bra=A.cursor,A.limit_backward=t,1==i){if(s=A.limit-A.cursor,A.eq_s_b(2,"po"))return;A.cursor=A.limit-s}return void A.slice_del()}A.limit_backward=e}}function _(){var i,e,r,n;if(A.cursor>=f){for(i=A.limit_backward,A.limit_backward=f,e=A.limit-A.cursor,l()&&(A.cursor=A.limit-e,A.ket=A.cursor,A.cursor>A.limit_backward&&(A.cursor--,A.bra=A.cursor,A.slice_del())),A.cursor=A.limit-e,A.ket=A.cursor,A.in_grouping_b(y,97,228)&&(A.bra=A.cursor,A.out_grouping_b(W,97,246)&&A.slice_del()),A.cursor=A.limit-e,A.ket=A.cursor,A.eq_s_b(1,"j")&&(A.bra=A.cursor,r=A.limit-A.cursor,A.eq_s_b(1,"o")?A.slice_del():(A.cursor=A.limit-r,A.eq_s_b(1,"u")&&A.slice_del())),A.cursor=A.limit-e,A.ket=A.cursor,A.eq_s_b(1,"o")&&(A.bra=A.cursor,A.eq_s_b(1,"j")&&A.slice_del()),A.cursor=A.limit-e,A.limit_backward=i;;){if(n=A.limit-A.cursor,A.out_grouping_b(W,97,246)){A.cursor=A.limit-n;break}if(A.cursor=A.limit-n,A.cursor<=A.limit_backward)return;A.cursor--}A.ket=A.cursor,A.cursor>A.limit_backward&&(A.cursor--,A.bra=A.cursor,b=A.slice_to(),A.eq_v_b(b)&&A.slice_del())}}var k,b,d,f,h=[new e("pa",-1,1),new e("sti",-1,2),new e("kaan",-1,1),new e("han",-1,1),new e("kin",-1,1),new e("hän",-1,1),new e("kään",-1,1),new e("ko",-1,1),new e("pä",-1,1),new e("kö",-1,1)],p=[new e("lla",-1,-1),new e("na",-1,-1),new e("ssa",-1,-1),new e("ta",-1,-1),new e("lta",3,-1),new e("sta",3,-1)],g=[new e("llä",-1,-1),new e("nä",-1,-1),new e("ssä",-1,-1),new e("tä",-1,-1),new e("ltä",3,-1),new e("stä",3,-1)],j=[new e("lle",-1,-1),new e("ine",-1,-1)],v=[new e("nsa",-1,3),new e("mme",-1,3),new e("nne",-1,3),new e("ni",-1,2),new e("si",-1,1),new e("an",-1,4),new e("en",-1,6),new e("än",-1,5),new e("nsä",-1,3)],q=[new e("aa",-1,-1),new e("ee",-1,-1),new e("ii",-1,-1),new e("oo",-1,-1),new e("uu",-1,-1),new e("ää",-1,-1),new e("öö",-1,-1)],C=[new e("a",-1,8),new e("lla",0,-1),new e("na",0,-1),new e("ssa",0,-1),new e("ta",0,-1),new e("lta",4,-1),new e("sta",4,-1),new e("tta",4,9),new e("lle",-1,-1),new e("ine",-1,-1),new e("ksi",-1,-1),new e("n",-1,7),new e("han",11,1),new e("den",11,-1,a),new e("seen",11,-1,l),new e("hen",11,2),new e("tten",11,-1,a),new e("hin",11,3),new e("siin",11,-1,a),new e("hon",11,4),new e("hän",11,5),new e("hön",11,6),new e("ä",-1,8),new e("llä",22,-1),new e("nä",22,-1),new e("ssä",22,-1),new e("tä",22,-1),new e("ltä",26,-1),new e("stä",26,-1),new e("ttä",26,9)],P=[new e("eja",-1,-1),new e("mma",-1,1),new e("imma",1,-1),new e("mpa",-1,1),new e("impa",3,-1),new e("mmi",-1,1),new e("immi",5,-1),new e("mpi",-1,1),new e("impi",7,-1),new e("ejä",-1,-1),new e("mmä",-1,1),new e("immä",10,-1),new e("mpä",-1,1),new e("impä",12,-1)],F=[new e("i",-1,-1),new e("j",-1,-1)],S=[new e("mma",-1,1),new e("imma",0,-1)],y=[17,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8],W=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],L=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],x=[17,97,24,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],A=new r;this.setCurrent=function(i){A.setCurrent(i)},this.getCurrent=function(){return A.getCurrent()},this.stem=function(){var e=A.cursor;return i(),k=!1,A.limit_backward=e,A.cursor=A.limit,s(),A.cursor=A.limit,o(),A.cursor=A.limit,u(),A.cursor=A.limit,c(),A.cursor=A.limit,k?(m(),A.cursor=A.limit):(A.cursor=A.limit,w(),A.cursor=A.limit),_(),!0}};return function(i){return"function"==typeof i.update?i.update(function(i){return n.setCurrent(i),n.stem(),n.getCurrent()}):(n.setCurrent(i),n.stem(),n.getCurrent())}}(),i.Pipeline.registerFunction(i.fi.stemmer,"stemmer-fi"),i.fi.stopWordFilter=i.generateStopWordFilter("ei eivät emme en et ette että he heidän heidät heihin heille heillä heiltä heissä heistä heitä hän häneen hänelle hänellä häneltä hänen hänessä hänestä hänet häntä itse ja johon joiden joihin joiksi joilla joille joilta joina joissa joista joita joka joksi jolla jolle jolta jona jonka jos jossa josta jota jotka kanssa keiden keihin keiksi keille keillä keiltä keinä keissä keistä keitä keneen keneksi kenelle kenellä keneltä kenen kenenä kenessä kenestä kenet ketkä ketkä ketä koska kuin kuka kun me meidän meidät meihin meille meillä meiltä meissä meistä meitä mihin miksi mikä mille millä miltä minkä minkä minua minulla minulle minulta minun minussa minusta minut minuun minä minä missä mistä mitkä mitä mukaan mutta ne niiden niihin niiksi niille niillä niiltä niin niin niinä niissä niistä niitä noiden noihin noiksi noilla noille noilta noin noina noissa noista noita nuo nyt näiden näihin näiksi näille näillä näiltä näinä näissä näistä näitä nämä ole olemme olen olet olette oli olimme olin olisi olisimme olisin olisit olisitte olisivat olit olitte olivat olla olleet ollut on ovat poikki se sekä sen siihen siinä siitä siksi sille sillä sillä siltä sinua sinulla sinulle sinulta sinun sinussa sinusta sinut sinuun sinä sinä sitä tai te teidän teidät teihin teille teillä teiltä teissä teistä teitä tuo tuohon tuoksi tuolla tuolle tuolta tuon tuona tuossa tuosta tuota tähän täksi tälle tällä tältä tämä tämän tänä tässä tästä tätä vaan vai vaikka yli".split(" ")),i.Pipeline.registerFunction(i.fi.stopWordFilter,"stopWordFilter-fi")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/min/lunr.fr.min.js b/assets/javascripts/lunr/min/lunr.fr.min.js new file mode 100644 index 00000000..68cd0094 --- /dev/null +++ b/assets/javascripts/lunr/min/lunr.fr.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `French` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.fr=function(){this.pipeline.reset(),this.pipeline.add(e.fr.trimmer,e.fr.stopWordFilter,e.fr.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.fr.stemmer))},e.fr.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.fr.trimmer=e.trimmerSupport.generateTrimmer(e.fr.wordCharacters),e.Pipeline.registerFunction(e.fr.trimmer,"trimmer-fr"),e.fr.stemmer=function(){var r=e.stemmerSupport.Among,s=e.stemmerSupport.SnowballProgram,i=new function(){function e(e,r,s){return!(!W.eq_s(1,e)||(W.ket=W.cursor,!W.in_grouping(F,97,251)))&&(W.slice_from(r),W.cursor=s,!0)}function i(e,r,s){return!!W.eq_s(1,e)&&(W.ket=W.cursor,W.slice_from(r),W.cursor=s,!0)}function n(){for(var r,s;;){if(r=W.cursor,W.in_grouping(F,97,251)){if(W.bra=W.cursor,s=W.cursor,e("u","U",r))continue;if(W.cursor=s,e("i","I",r))continue;if(W.cursor=s,i("y","Y",r))continue}if(W.cursor=r,W.bra=r,!e("y","Y",r)){if(W.cursor=r,W.eq_s(1,"q")&&(W.bra=W.cursor,i("u","U",r)))continue;if(W.cursor=r,r>=W.limit)return;W.cursor++}}}function t(){for(;!W.in_grouping(F,97,251);){if(W.cursor>=W.limit)return!0;W.cursor++}for(;!W.out_grouping(F,97,251);){if(W.cursor>=W.limit)return!0;W.cursor++}return!1}function u(){var e=W.cursor;if(q=W.limit,g=q,p=q,W.in_grouping(F,97,251)&&W.in_grouping(F,97,251)&&W.cursor=W.limit){W.cursor=q;break}W.cursor++}while(!W.in_grouping(F,97,251))}q=W.cursor,W.cursor=e,t()||(g=W.cursor,t()||(p=W.cursor))}function o(){for(var e,r;;){if(r=W.cursor,W.bra=r,!(e=W.find_among(h,4)))break;switch(W.ket=W.cursor,e){case 1:W.slice_from("i");break;case 2:W.slice_from("u");break;case 3:W.slice_from("y");break;case 4:if(W.cursor>=W.limit)return;W.cursor++}}}function c(){return q<=W.cursor}function a(){return g<=W.cursor}function l(){return p<=W.cursor}function w(){var e,r;if(W.ket=W.cursor,e=W.find_among_b(C,43)){switch(W.bra=W.cursor,e){case 1:if(!l())return!1;W.slice_del();break;case 2:if(!l())return!1;W.slice_del(),W.ket=W.cursor,W.eq_s_b(2,"ic")&&(W.bra=W.cursor,l()?W.slice_del():W.slice_from("iqU"));break;case 3:if(!l())return!1;W.slice_from("log");break;case 4:if(!l())return!1;W.slice_from("u");break;case 5:if(!l())return!1;W.slice_from("ent");break;case 6:if(!c())return!1;if(W.slice_del(),W.ket=W.cursor,e=W.find_among_b(z,6))switch(W.bra=W.cursor,e){case 1:l()&&(W.slice_del(),W.ket=W.cursor,W.eq_s_b(2,"at")&&(W.bra=W.cursor,l()&&W.slice_del()));break;case 2:l()?W.slice_del():a()&&W.slice_from("eux");break;case 3:l()&&W.slice_del();break;case 4:c()&&W.slice_from("i")}break;case 7:if(!l())return!1;if(W.slice_del(),W.ket=W.cursor,e=W.find_among_b(y,3))switch(W.bra=W.cursor,e){case 1:l()?W.slice_del():W.slice_from("abl");break;case 2:l()?W.slice_del():W.slice_from("iqU");break;case 3:l()&&W.slice_del()}break;case 8:if(!l())return!1;if(W.slice_del(),W.ket=W.cursor,W.eq_s_b(2,"at")&&(W.bra=W.cursor,l()&&(W.slice_del(),W.ket=W.cursor,W.eq_s_b(2,"ic")))){W.bra=W.cursor,l()?W.slice_del():W.slice_from("iqU");break}break;case 9:W.slice_from("eau");break;case 10:if(!a())return!1;W.slice_from("al");break;case 11:if(l())W.slice_del();else{if(!a())return!1;W.slice_from("eux")}break;case 12:if(!a()||!W.out_grouping_b(F,97,251))return!1;W.slice_del();break;case 13:return c()&&W.slice_from("ant"),!1;case 14:return c()&&W.slice_from("ent"),!1;case 15:return r=W.limit-W.cursor,W.in_grouping_b(F,97,251)&&c()&&(W.cursor=W.limit-r,W.slice_del()),!1}return!0}return!1}function f(){var e,r;if(W.cursor=q){if(s=W.limit_backward,W.limit_backward=q,W.ket=W.cursor,e=W.find_among_b(P,7))switch(W.bra=W.cursor,e){case 1:if(l()){if(i=W.limit-W.cursor,!W.eq_s_b(1,"s")&&(W.cursor=W.limit-i,!W.eq_s_b(1,"t")))break;W.slice_del()}break;case 2:W.slice_from("i");break;case 3:W.slice_del();break;case 4:W.eq_s_b(2,"gu")&&W.slice_del()}W.limit_backward=s}}function b(){var e=W.limit-W.cursor;W.find_among_b(U,5)&&(W.cursor=W.limit-e,W.ket=W.cursor,W.cursor>W.limit_backward&&(W.cursor--,W.bra=W.cursor,W.slice_del()))}function d(){for(var e,r=1;W.out_grouping_b(F,97,251);)r--;if(r<=0){if(W.ket=W.cursor,e=W.limit-W.cursor,!W.eq_s_b(1,"é")&&(W.cursor=W.limit-e,!W.eq_s_b(1,"è")))return;W.bra=W.cursor,W.slice_from("e")}}function k(){if(!w()&&(W.cursor=W.limit,!f()&&(W.cursor=W.limit,!m())))return W.cursor=W.limit,void _();W.cursor=W.limit,W.ket=W.cursor,W.eq_s_b(1,"Y")?(W.bra=W.cursor,W.slice_from("i")):(W.cursor=W.limit,W.eq_s_b(1,"ç")&&(W.bra=W.cursor,W.slice_from("c")))}var p,g,q,v=[new r("col",-1,-1),new r("par",-1,-1),new r("tap",-1,-1)],h=[new r("",-1,4),new r("I",0,1),new r("U",0,2),new r("Y",0,3)],z=[new r("iqU",-1,3),new r("abl",-1,3),new r("Ièr",-1,4),new r("ièr",-1,4),new r("eus",-1,2),new r("iv",-1,1)],y=[new r("ic",-1,2),new r("abil",-1,1),new r("iv",-1,3)],C=[new r("iqUe",-1,1),new r("atrice",-1,2),new r("ance",-1,1),new r("ence",-1,5),new r("logie",-1,3),new r("able",-1,1),new r("isme",-1,1),new r("euse",-1,11),new r("iste",-1,1),new r("ive",-1,8),new r("if",-1,8),new r("usion",-1,4),new r("ation",-1,2),new r("ution",-1,4),new r("ateur",-1,2),new r("iqUes",-1,1),new r("atrices",-1,2),new r("ances",-1,1),new r("ences",-1,5),new r("logies",-1,3),new r("ables",-1,1),new r("ismes",-1,1),new r("euses",-1,11),new r("istes",-1,1),new r("ives",-1,8),new r("ifs",-1,8),new r("usions",-1,4),new r("ations",-1,2),new r("utions",-1,4),new r("ateurs",-1,2),new r("ments",-1,15),new r("ements",30,6),new r("issements",31,12),new r("ités",-1,7),new r("ment",-1,15),new r("ement",34,6),new r("issement",35,12),new r("amment",34,13),new r("emment",34,14),new r("aux",-1,10),new r("eaux",39,9),new r("eux",-1,1),new r("ité",-1,7)],x=[new r("ira",-1,1),new r("ie",-1,1),new r("isse",-1,1),new r("issante",-1,1),new r("i",-1,1),new r("irai",4,1),new r("ir",-1,1),new r("iras",-1,1),new r("ies",-1,1),new r("îmes",-1,1),new r("isses",-1,1),new r("issantes",-1,1),new r("îtes",-1,1),new r("is",-1,1),new r("irais",13,1),new r("issais",13,1),new r("irions",-1,1),new r("issions",-1,1),new r("irons",-1,1),new r("issons",-1,1),new r("issants",-1,1),new r("it",-1,1),new r("irait",21,1),new r("issait",21,1),new r("issant",-1,1),new r("iraIent",-1,1),new r("issaIent",-1,1),new r("irent",-1,1),new r("issent",-1,1),new r("iront",-1,1),new r("ît",-1,1),new r("iriez",-1,1),new r("issiez",-1,1),new r("irez",-1,1),new r("issez",-1,1)],I=[new r("a",-1,3),new r("era",0,2),new r("asse",-1,3),new r("ante",-1,3),new r("ée",-1,2),new r("ai",-1,3),new r("erai",5,2),new r("er",-1,2),new r("as",-1,3),new r("eras",8,2),new r("âmes",-1,3),new r("asses",-1,3),new r("antes",-1,3),new r("âtes",-1,3),new r("ées",-1,2),new r("ais",-1,3),new r("erais",15,2),new r("ions",-1,1),new r("erions",17,2),new r("assions",17,3),new r("erons",-1,2),new r("ants",-1,3),new r("és",-1,2),new r("ait",-1,3),new r("erait",23,2),new r("ant",-1,3),new r("aIent",-1,3),new r("eraIent",26,2),new r("èrent",-1,2),new r("assent",-1,3),new r("eront",-1,2),new r("ât",-1,3),new r("ez",-1,2),new r("iez",32,2),new r("eriez",33,2),new r("assiez",33,3),new r("erez",32,2),new r("é",-1,2)],P=[new r("e",-1,3),new r("Ière",0,2),new r("ière",0,2),new r("ion",-1,1),new r("Ier",-1,2),new r("ier",-1,2),new r("ë",-1,4)],U=[new r("ell",-1,-1),new r("eill",-1,-1),new r("enn",-1,-1),new r("onn",-1,-1),new r("ett",-1,-1)],F=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,128,130,103,8,5],S=[1,65,20,0,0,0,0,0,0,0,0,0,0,0,0,0,128],W=new s;this.setCurrent=function(e){W.setCurrent(e)},this.getCurrent=function(){return W.getCurrent()},this.stem=function(){var e=W.cursor;return n(),W.cursor=e,u(),W.limit_backward=e,W.cursor=W.limit,k(),W.cursor=W.limit,b(),W.cursor=W.limit,d(),W.cursor=W.limit_backward,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.fr.stemmer,"stemmer-fr"),e.fr.stopWordFilter=e.generateStopWordFilter("ai aie aient aies ait as au aura aurai auraient aurais aurait auras aurez auriez aurions aurons auront aux avaient avais avait avec avez aviez avions avons ayant ayez ayons c ce ceci celà ces cet cette d dans de des du elle en es est et eu eue eues eurent eus eusse eussent eusses eussiez eussions eut eux eûmes eût eûtes furent fus fusse fussent fusses fussiez fussions fut fûmes fût fûtes ici il ils j je l la le les leur leurs lui m ma mais me mes moi mon même n ne nos notre nous on ont ou par pas pour qu que quel quelle quelles quels qui s sa sans se sera serai seraient serais serait seras serez seriez serions serons seront ses soi soient sois soit sommes son sont soyez soyons suis sur t ta te tes toi ton tu un une vos votre vous y à étaient étais était étant étiez étions été étée étées étés êtes".split(" ")),e.Pipeline.registerFunction(e.fr.stopWordFilter,"stopWordFilter-fr")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/min/lunr.hi.min.js b/assets/javascripts/lunr/min/lunr.hi.min.js new file mode 100644 index 00000000..7dbc4140 --- /dev/null +++ b/assets/javascripts/lunr/min/lunr.hi.min.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hi=function(){this.pipeline.reset(),this.pipeline.add(e.hi.trimmer,e.hi.stopWordFilter,e.hi.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.hi.stemmer))},e.hi.wordCharacters="ऀ-ःऄ-एऐ-टठ-यर-िी-ॏॐ-य़ॠ-९॰-ॿa-zA-Za-zA-Z0-90-9",e.hi.trimmer=e.trimmerSupport.generateTrimmer(e.hi.wordCharacters),e.Pipeline.registerFunction(e.hi.trimmer,"trimmer-hi"),e.hi.stopWordFilter=e.generateStopWordFilter("अत अपना अपनी अपने अभी अंदर आदि आप इत्यादि इन इनका इन्हीं इन्हें इन्हों इस इसका इसकी इसके इसमें इसी इसे उन उनका उनकी उनके उनको उन्हीं उन्हें उन्हों उस उसके उसी उसे एक एवं एस ऐसे और कई कर करता करते करना करने करें कहते कहा का काफ़ी कि कितना किन्हें किन्हों किया किर किस किसी किसे की कुछ कुल के को कोई कौन कौनसा गया घर जब जहाँ जा जितना जिन जिन्हें जिन्हों जिस जिसे जीधर जैसा जैसे जो तक तब तरह तिन तिन्हें तिन्हों तिस तिसे तो था थी थे दबारा दिया दुसरा दूसरे दो द्वारा न नके नहीं ना निहायत नीचे ने पर पहले पूरा पे फिर बनी बही बहुत बाद बाला बिलकुल भी भीतर मगर मानो मे में यदि यह यहाँ यही या यिह ये रखें रहा रहे ऱ्वासा लिए लिये लेकिन व वग़ैरह वर्ग वह वहाँ वहीं वाले वुह वे वो सकता सकते सबसे सभी साथ साबुत साभ सारा से सो संग ही हुआ हुई हुए है हैं हो होता होती होते होना होने".split(" ")),e.hi.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var r=e.wordcut;r.init(),e.hi.tokenizer=function(i){if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(r){return isLunr2?new e.Token(r.toLowerCase()):r.toLowerCase()});var t=i.toString().toLowerCase().replace(/^\s+/,"");return r.cut(t).split("|")},e.Pipeline.registerFunction(e.hi.stemmer,"stemmer-hi"),e.Pipeline.registerFunction(e.hi.stopWordFilter,"stopWordFilter-hi")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/min/lunr.hu.min.js b/assets/javascripts/lunr/min/lunr.hu.min.js new file mode 100644 index 00000000..ed9d909f --- /dev/null +++ b/assets/javascripts/lunr/min/lunr.hu.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Hungarian` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,n){"function"==typeof define&&define.amd?define(n):"object"==typeof exports?module.exports=n():n()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hu=function(){this.pipeline.reset(),this.pipeline.add(e.hu.trimmer,e.hu.stopWordFilter,e.hu.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.hu.stemmer))},e.hu.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.hu.trimmer=e.trimmerSupport.generateTrimmer(e.hu.wordCharacters),e.Pipeline.registerFunction(e.hu.trimmer,"trimmer-hu"),e.hu.stemmer=function(){var n=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,i=new function(){function e(){var e,n=L.cursor;if(d=L.limit,L.in_grouping(W,97,252))for(;;){if(e=L.cursor,L.out_grouping(W,97,252))return L.cursor=e,L.find_among(g,8)||(L.cursor=e,e=L.limit)return void(d=e);L.cursor++}if(L.cursor=n,L.out_grouping(W,97,252)){for(;!L.in_grouping(W,97,252);){if(L.cursor>=L.limit)return;L.cursor++}d=L.cursor}}function i(){return d<=L.cursor}function a(){var e;if(L.ket=L.cursor,(e=L.find_among_b(h,2))&&(L.bra=L.cursor,i()))switch(e){case 1:L.slice_from("a");break;case 2:L.slice_from("e")}}function t(){var e=L.limit-L.cursor;return!!L.find_among_b(p,23)&&(L.cursor=L.limit-e,!0)}function s(){if(L.cursor>L.limit_backward){L.cursor--,L.ket=L.cursor;var e=L.cursor-1;L.limit_backward<=e&&e<=L.limit&&(L.cursor=e,L.bra=e,L.slice_del())}}function c(){var e;if(L.ket=L.cursor,(e=L.find_among_b(_,2))&&(L.bra=L.cursor,i())){if((1==e||2==e)&&!t())return;L.slice_del(),s()}}function o(){L.ket=L.cursor,L.find_among_b(v,44)&&(L.bra=L.cursor,i()&&(L.slice_del(),a()))}function w(){var e;if(L.ket=L.cursor,(e=L.find_among_b(z,3))&&(L.bra=L.cursor,i()))switch(e){case 1:L.slice_from("e");break;case 2:case 3:L.slice_from("a")}}function l(){var e;if(L.ket=L.cursor,(e=L.find_among_b(y,6))&&(L.bra=L.cursor,i()))switch(e){case 1:case 2:L.slice_del();break;case 3:L.slice_from("a");break;case 4:L.slice_from("e")}}function u(){var e;if(L.ket=L.cursor,(e=L.find_among_b(j,2))&&(L.bra=L.cursor,i())){if((1==e||2==e)&&!t())return;L.slice_del(),s()}}function m(){var e;if(L.ket=L.cursor,(e=L.find_among_b(C,7))&&(L.bra=L.cursor,i()))switch(e){case 1:L.slice_from("a");break;case 2:L.slice_from("e");break;case 3:case 4:case 5:case 6:case 7:L.slice_del()}}function k(){var e;if(L.ket=L.cursor,(e=L.find_among_b(P,12))&&(L.bra=L.cursor,i()))switch(e){case 1:case 4:case 7:case 9:L.slice_del();break;case 2:case 5:case 8:L.slice_from("e");break;case 3:case 6:L.slice_from("a")}}function f(){var e;if(L.ket=L.cursor,(e=L.find_among_b(F,31))&&(L.bra=L.cursor,i()))switch(e){case 1:case 4:case 7:case 8:case 9:case 12:case 13:case 16:case 17:case 18:L.slice_del();break;case 2:case 5:case 10:case 14:case 19:L.slice_from("a");break;case 3:case 6:case 11:case 15:case 20:L.slice_from("e")}}function b(){var e;if(L.ket=L.cursor,(e=L.find_among_b(S,42))&&(L.bra=L.cursor,i()))switch(e){case 1:case 4:case 5:case 6:case 9:case 10:case 11:case 14:case 15:case 16:case 17:case 20:case 21:case 24:case 25:case 26:case 29:L.slice_del();break;case 2:case 7:case 12:case 18:case 22:case 27:L.slice_from("a");break;case 3:case 8:case 13:case 19:case 23:case 28:L.slice_from("e")}}var d,g=[new n("cs",-1,-1),new n("dzs",-1,-1),new n("gy",-1,-1),new n("ly",-1,-1),new n("ny",-1,-1),new n("sz",-1,-1),new n("ty",-1,-1),new n("zs",-1,-1)],h=[new n("á",-1,1),new n("é",-1,2)],p=[new n("bb",-1,-1),new n("cc",-1,-1),new n("dd",-1,-1),new n("ff",-1,-1),new n("gg",-1,-1),new n("jj",-1,-1),new n("kk",-1,-1),new n("ll",-1,-1),new n("mm",-1,-1),new n("nn",-1,-1),new n("pp",-1,-1),new n("rr",-1,-1),new n("ccs",-1,-1),new n("ss",-1,-1),new n("zzs",-1,-1),new n("tt",-1,-1),new n("vv",-1,-1),new n("ggy",-1,-1),new n("lly",-1,-1),new n("nny",-1,-1),new n("tty",-1,-1),new n("ssz",-1,-1),new n("zz",-1,-1)],_=[new n("al",-1,1),new n("el",-1,2)],v=[new n("ba",-1,-1),new n("ra",-1,-1),new n("be",-1,-1),new n("re",-1,-1),new n("ig",-1,-1),new n("nak",-1,-1),new n("nek",-1,-1),new n("val",-1,-1),new n("vel",-1,-1),new n("ul",-1,-1),new n("nál",-1,-1),new n("nél",-1,-1),new n("ból",-1,-1),new n("ról",-1,-1),new n("tól",-1,-1),new n("bõl",-1,-1),new n("rõl",-1,-1),new n("tõl",-1,-1),new n("ül",-1,-1),new n("n",-1,-1),new n("an",19,-1),new n("ban",20,-1),new n("en",19,-1),new n("ben",22,-1),new n("képpen",22,-1),new n("on",19,-1),new n("ön",19,-1),new n("képp",-1,-1),new n("kor",-1,-1),new n("t",-1,-1),new n("at",29,-1),new n("et",29,-1),new n("ként",29,-1),new n("anként",32,-1),new n("enként",32,-1),new n("onként",32,-1),new n("ot",29,-1),new n("ért",29,-1),new n("öt",29,-1),new n("hez",-1,-1),new n("hoz",-1,-1),new n("höz",-1,-1),new n("vá",-1,-1),new n("vé",-1,-1)],z=[new n("án",-1,2),new n("én",-1,1),new n("ánként",-1,3)],y=[new n("stul",-1,2),new n("astul",0,1),new n("ástul",0,3),new n("stül",-1,2),new n("estül",3,1),new n("éstül",3,4)],j=[new n("á",-1,1),new n("é",-1,2)],C=[new n("k",-1,7),new n("ak",0,4),new n("ek",0,6),new n("ok",0,5),new n("ák",0,1),new n("ék",0,2),new n("ök",0,3)],P=[new n("éi",-1,7),new n("áéi",0,6),new n("ééi",0,5),new n("é",-1,9),new n("ké",3,4),new n("aké",4,1),new n("eké",4,1),new n("oké",4,1),new n("áké",4,3),new n("éké",4,2),new n("öké",4,1),new n("éé",3,8)],F=[new n("a",-1,18),new n("ja",0,17),new n("d",-1,16),new n("ad",2,13),new n("ed",2,13),new n("od",2,13),new n("ád",2,14),new n("éd",2,15),new n("öd",2,13),new n("e",-1,18),new n("je",9,17),new n("nk",-1,4),new n("unk",11,1),new n("ánk",11,2),new n("énk",11,3),new n("ünk",11,1),new n("uk",-1,8),new n("juk",16,7),new n("ájuk",17,5),new n("ük",-1,8),new n("jük",19,7),new n("éjük",20,6),new n("m",-1,12),new n("am",22,9),new n("em",22,9),new n("om",22,9),new n("ám",22,10),new n("ém",22,11),new n("o",-1,18),new n("á",-1,19),new n("é",-1,20)],S=[new n("id",-1,10),new n("aid",0,9),new n("jaid",1,6),new n("eid",0,9),new n("jeid",3,6),new n("áid",0,7),new n("éid",0,8),new n("i",-1,15),new n("ai",7,14),new n("jai",8,11),new n("ei",7,14),new n("jei",10,11),new n("ái",7,12),new n("éi",7,13),new n("itek",-1,24),new n("eitek",14,21),new n("jeitek",15,20),new n("éitek",14,23),new n("ik",-1,29),new n("aik",18,26),new n("jaik",19,25),new n("eik",18,26),new n("jeik",21,25),new n("áik",18,27),new n("éik",18,28),new n("ink",-1,20),new n("aink",25,17),new n("jaink",26,16),new n("eink",25,17),new n("jeink",28,16),new n("áink",25,18),new n("éink",25,19),new n("aitok",-1,21),new n("jaitok",32,20),new n("áitok",-1,22),new n("im",-1,5),new n("aim",35,4),new n("jaim",36,1),new n("eim",35,4),new n("jeim",38,1),new n("áim",35,2),new n("éim",35,3)],W=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,52,14],L=new r;this.setCurrent=function(e){L.setCurrent(e)},this.getCurrent=function(){return L.getCurrent()},this.stem=function(){var n=L.cursor;return e(),L.limit_backward=n,L.cursor=L.limit,c(),L.cursor=L.limit,o(),L.cursor=L.limit,w(),L.cursor=L.limit,l(),L.cursor=L.limit,u(),L.cursor=L.limit,k(),L.cursor=L.limit,f(),L.cursor=L.limit,b(),L.cursor=L.limit,m(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.hu.stemmer,"stemmer-hu"),e.hu.stopWordFilter=e.generateStopWordFilter("a abban ahhoz ahogy ahol aki akik akkor alatt amely amelyek amelyekben amelyeket amelyet amelynek ami amikor amit amolyan amíg annak arra arról az azok azon azonban azt aztán azután azzal azért be belül benne bár cikk cikkek cikkeket csak de e ebben eddig egy egyes egyetlen egyik egyre egyéb egész ehhez ekkor el ellen elsõ elég elõ elõször elõtt emilyen ennek erre ez ezek ezen ezt ezzel ezért fel felé hanem hiszen hogy hogyan igen ill ill. illetve ilyen ilyenkor ismét ison itt jobban jó jól kell kellett keressünk keresztül ki kívül között közül legalább legyen lehet lehetett lenne lenni lesz lett maga magát majd majd meg mellett mely melyek mert mi mikor milyen minden mindenki mindent mindig mint mintha mit mivel miért most már más másik még míg nagy nagyobb nagyon ne nekem neki nem nincs néha néhány nélkül olyan ott pedig persze rá s saját sem semmi sok sokat sokkal szemben szerint szinte számára talán tehát teljes tovább továbbá több ugyanis utolsó után utána vagy vagyis vagyok valaki valami valamint való van vannak vele vissza viszont volna volt voltak voltam voltunk által általában át én éppen és így õ õk õket össze úgy új újabb újra".split(" ")),e.Pipeline.registerFunction(e.hu.stopWordFilter,"stopWordFilter-hu")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/min/lunr.it.min.js b/assets/javascripts/lunr/min/lunr.it.min.js new file mode 100644 index 00000000..344b6a3c --- /dev/null +++ b/assets/javascripts/lunr/min/lunr.it.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Italian` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.it=function(){this.pipeline.reset(),this.pipeline.add(e.it.trimmer,e.it.stopWordFilter,e.it.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.it.stemmer))},e.it.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.it.trimmer=e.trimmerSupport.generateTrimmer(e.it.wordCharacters),e.Pipeline.registerFunction(e.it.trimmer,"trimmer-it"),e.it.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(e,r,n){return!(!x.eq_s(1,e)||(x.ket=x.cursor,!x.in_grouping(L,97,249)))&&(x.slice_from(r),x.cursor=n,!0)}function i(){for(var r,n,i,o,t=x.cursor;;){if(x.bra=x.cursor,r=x.find_among(h,7))switch(x.ket=x.cursor,r){case 1:x.slice_from("à");continue;case 2:x.slice_from("è");continue;case 3:x.slice_from("ì");continue;case 4:x.slice_from("ò");continue;case 5:x.slice_from("ù");continue;case 6:x.slice_from("qU");continue;case 7:if(x.cursor>=x.limit)break;x.cursor++;continue}break}for(x.cursor=t;;)for(n=x.cursor;;){if(i=x.cursor,x.in_grouping(L,97,249)){if(x.bra=x.cursor,o=x.cursor,e("u","U",i))break;if(x.cursor=o,e("i","I",i))break}if(x.cursor=i,x.cursor>=x.limit)return void(x.cursor=n);x.cursor++}}function o(e){if(x.cursor=e,!x.in_grouping(L,97,249))return!1;for(;!x.out_grouping(L,97,249);){if(x.cursor>=x.limit)return!1;x.cursor++}return!0}function t(){if(x.in_grouping(L,97,249)){var e=x.cursor;if(x.out_grouping(L,97,249)){for(;!x.in_grouping(L,97,249);){if(x.cursor>=x.limit)return o(e);x.cursor++}return!0}return o(e)}return!1}function s(){var e,r=x.cursor;if(!t()){if(x.cursor=r,!x.out_grouping(L,97,249))return;if(e=x.cursor,x.out_grouping(L,97,249)){for(;!x.in_grouping(L,97,249);){if(x.cursor>=x.limit)return x.cursor=e,void(x.in_grouping(L,97,249)&&x.cursor=x.limit)return;x.cursor++}k=x.cursor}function a(){for(;!x.in_grouping(L,97,249);){if(x.cursor>=x.limit)return!1;x.cursor++}for(;!x.out_grouping(L,97,249);){if(x.cursor>=x.limit)return!1;x.cursor++}return!0}function u(){var e=x.cursor;k=x.limit,p=k,g=k,s(),x.cursor=e,a()&&(p=x.cursor,a()&&(g=x.cursor))}function c(){for(var e;;){if(x.bra=x.cursor,!(e=x.find_among(q,3)))break;switch(x.ket=x.cursor,e){case 1:x.slice_from("i");break;case 2:x.slice_from("u");break;case 3:if(x.cursor>=x.limit)return;x.cursor++}}}function w(){return k<=x.cursor}function l(){return p<=x.cursor}function m(){return g<=x.cursor}function f(){var e;if(x.ket=x.cursor,x.find_among_b(C,37)&&(x.bra=x.cursor,(e=x.find_among_b(z,5))&&w()))switch(e){case 1:x.slice_del();break;case 2:x.slice_from("e")}}function v(){var e;if(x.ket=x.cursor,!(e=x.find_among_b(S,51)))return!1;switch(x.bra=x.cursor,e){case 1:if(!m())return!1;x.slice_del();break;case 2:if(!m())return!1;x.slice_del(),x.ket=x.cursor,x.eq_s_b(2,"ic")&&(x.bra=x.cursor,m()&&x.slice_del());break;case 3:if(!m())return!1;x.slice_from("log");break;case 4:if(!m())return!1;x.slice_from("u");break;case 5:if(!m())return!1;x.slice_from("ente");break;case 6:if(!w())return!1;x.slice_del();break;case 7:if(!l())return!1;x.slice_del(),x.ket=x.cursor,e=x.find_among_b(P,4),e&&(x.bra=x.cursor,m()&&(x.slice_del(),1==e&&(x.ket=x.cursor,x.eq_s_b(2,"at")&&(x.bra=x.cursor,m()&&x.slice_del()))));break;case 8:if(!m())return!1;x.slice_del(),x.ket=x.cursor,e=x.find_among_b(F,3),e&&(x.bra=x.cursor,1==e&&m()&&x.slice_del());break;case 9:if(!m())return!1;x.slice_del(),x.ket=x.cursor,x.eq_s_b(2,"at")&&(x.bra=x.cursor,m()&&(x.slice_del(),x.ket=x.cursor,x.eq_s_b(2,"ic")&&(x.bra=x.cursor,m()&&x.slice_del())))}return!0}function b(){var e,r;x.cursor>=k&&(r=x.limit_backward,x.limit_backward=k,x.ket=x.cursor,e=x.find_among_b(W,87),e&&(x.bra=x.cursor,1==e&&x.slice_del()),x.limit_backward=r)}function d(){var e=x.limit-x.cursor;if(x.ket=x.cursor,x.in_grouping_b(y,97,242)&&(x.bra=x.cursor,w()&&(x.slice_del(),x.ket=x.cursor,x.eq_s_b(1,"i")&&(x.bra=x.cursor,w()))))return void x.slice_del();x.cursor=x.limit-e}function _(){d(),x.ket=x.cursor,x.eq_s_b(1,"h")&&(x.bra=x.cursor,x.in_grouping_b(U,99,103)&&w()&&x.slice_del())}var g,p,k,h=[new r("",-1,7),new r("qu",0,6),new r("á",0,1),new r("é",0,2),new r("í",0,3),new r("ó",0,4),new r("ú",0,5)],q=[new r("",-1,3),new r("I",0,1),new r("U",0,2)],C=[new r("la",-1,-1),new r("cela",0,-1),new r("gliela",0,-1),new r("mela",0,-1),new r("tela",0,-1),new r("vela",0,-1),new r("le",-1,-1),new r("cele",6,-1),new r("gliele",6,-1),new r("mele",6,-1),new r("tele",6,-1),new r("vele",6,-1),new r("ne",-1,-1),new r("cene",12,-1),new r("gliene",12,-1),new r("mene",12,-1),new r("sene",12,-1),new r("tene",12,-1),new r("vene",12,-1),new r("ci",-1,-1),new r("li",-1,-1),new r("celi",20,-1),new r("glieli",20,-1),new r("meli",20,-1),new r("teli",20,-1),new r("veli",20,-1),new r("gli",20,-1),new r("mi",-1,-1),new r("si",-1,-1),new r("ti",-1,-1),new r("vi",-1,-1),new r("lo",-1,-1),new r("celo",31,-1),new r("glielo",31,-1),new r("melo",31,-1),new r("telo",31,-1),new r("velo",31,-1)],z=[new r("ando",-1,1),new r("endo",-1,1),new r("ar",-1,2),new r("er",-1,2),new r("ir",-1,2)],P=[new r("ic",-1,-1),new r("abil",-1,-1),new r("os",-1,-1),new r("iv",-1,1)],F=[new r("ic",-1,1),new r("abil",-1,1),new r("iv",-1,1)],S=[new r("ica",-1,1),new r("logia",-1,3),new r("osa",-1,1),new r("ista",-1,1),new r("iva",-1,9),new r("anza",-1,1),new r("enza",-1,5),new r("ice",-1,1),new r("atrice",7,1),new r("iche",-1,1),new r("logie",-1,3),new r("abile",-1,1),new r("ibile",-1,1),new r("usione",-1,4),new r("azione",-1,2),new r("uzione",-1,4),new r("atore",-1,2),new r("ose",-1,1),new r("ante",-1,1),new r("mente",-1,1),new r("amente",19,7),new r("iste",-1,1),new r("ive",-1,9),new r("anze",-1,1),new r("enze",-1,5),new r("ici",-1,1),new r("atrici",25,1),new r("ichi",-1,1),new r("abili",-1,1),new r("ibili",-1,1),new r("ismi",-1,1),new r("usioni",-1,4),new r("azioni",-1,2),new r("uzioni",-1,4),new r("atori",-1,2),new r("osi",-1,1),new r("anti",-1,1),new r("amenti",-1,6),new r("imenti",-1,6),new r("isti",-1,1),new r("ivi",-1,9),new r("ico",-1,1),new r("ismo",-1,1),new r("oso",-1,1),new r("amento",-1,6),new r("imento",-1,6),new r("ivo",-1,9),new r("ità",-1,8),new r("istà",-1,1),new r("istè",-1,1),new r("istì",-1,1)],W=[new r("isca",-1,1),new r("enda",-1,1),new r("ata",-1,1),new r("ita",-1,1),new r("uta",-1,1),new r("ava",-1,1),new r("eva",-1,1),new r("iva",-1,1),new r("erebbe",-1,1),new r("irebbe",-1,1),new r("isce",-1,1),new r("ende",-1,1),new r("are",-1,1),new r("ere",-1,1),new r("ire",-1,1),new r("asse",-1,1),new r("ate",-1,1),new r("avate",16,1),new r("evate",16,1),new r("ivate",16,1),new r("ete",-1,1),new r("erete",20,1),new r("irete",20,1),new r("ite",-1,1),new r("ereste",-1,1),new r("ireste",-1,1),new r("ute",-1,1),new r("erai",-1,1),new r("irai",-1,1),new r("isci",-1,1),new r("endi",-1,1),new r("erei",-1,1),new r("irei",-1,1),new r("assi",-1,1),new r("ati",-1,1),new r("iti",-1,1),new r("eresti",-1,1),new r("iresti",-1,1),new r("uti",-1,1),new r("avi",-1,1),new r("evi",-1,1),new r("ivi",-1,1),new r("isco",-1,1),new r("ando",-1,1),new r("endo",-1,1),new r("Yamo",-1,1),new r("iamo",-1,1),new r("avamo",-1,1),new r("evamo",-1,1),new r("ivamo",-1,1),new r("eremo",-1,1),new r("iremo",-1,1),new r("assimo",-1,1),new r("ammo",-1,1),new r("emmo",-1,1),new r("eremmo",54,1),new r("iremmo",54,1),new r("immo",-1,1),new r("ano",-1,1),new r("iscano",58,1),new r("avano",58,1),new r("evano",58,1),new r("ivano",58,1),new r("eranno",-1,1),new r("iranno",-1,1),new r("ono",-1,1),new r("iscono",65,1),new r("arono",65,1),new r("erono",65,1),new r("irono",65,1),new r("erebbero",-1,1),new r("irebbero",-1,1),new r("assero",-1,1),new r("essero",-1,1),new r("issero",-1,1),new r("ato",-1,1),new r("ito",-1,1),new r("uto",-1,1),new r("avo",-1,1),new r("evo",-1,1),new r("ivo",-1,1),new r("ar",-1,1),new r("ir",-1,1),new r("erà",-1,1),new r("irà",-1,1),new r("erò",-1,1),new r("irò",-1,1)],L=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,128,128,8,2,1],y=[17,65,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,8,2],U=[17],x=new n;this.setCurrent=function(e){x.setCurrent(e)},this.getCurrent=function(){return x.getCurrent()},this.stem=function(){var e=x.cursor;return i(),x.cursor=e,u(),x.limit_backward=e,x.cursor=x.limit,f(),x.cursor=x.limit,v()||(x.cursor=x.limit,b()),x.cursor=x.limit,_(),x.cursor=x.limit_backward,c(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.it.stemmer,"stemmer-it"),e.it.stopWordFilter=e.generateStopWordFilter("a abbia abbiamo abbiano abbiate ad agl agli ai al all alla alle allo anche avemmo avendo avesse avessero avessi avessimo aveste avesti avete aveva avevamo avevano avevate avevi avevo avrai avranno avrebbe avrebbero avrei avremmo avremo avreste avresti avrete avrà avrò avuta avute avuti avuto c che chi ci coi col come con contro cui da dagl dagli dai dal dall dalla dalle dallo degl degli dei del dell della delle dello di dov dove e ebbe ebbero ebbi ed era erano eravamo eravate eri ero essendo faccia facciamo facciano facciate faccio facemmo facendo facesse facessero facessi facessimo faceste facesti faceva facevamo facevano facevate facevi facevo fai fanno farai faranno farebbe farebbero farei faremmo faremo fareste faresti farete farà farò fece fecero feci fosse fossero fossi fossimo foste fosti fu fui fummo furono gli ha hai hanno ho i il in io l la le lei li lo loro lui ma mi mia mie miei mio ne negl negli nei nel nell nella nelle nello noi non nostra nostre nostri nostro o per perché più quale quanta quante quanti quanto quella quelle quelli quello questa queste questi questo sarai saranno sarebbe sarebbero sarei saremmo saremo sareste saresti sarete sarà sarò se sei si sia siamo siano siate siete sono sta stai stando stanno starai staranno starebbe starebbero starei staremmo staremo stareste staresti starete starà starò stava stavamo stavano stavate stavi stavo stemmo stesse stessero stessi stessimo steste stesti stette stettero stetti stia stiamo stiano stiate sto su sua sue sugl sugli sui sul sull sulla sulle sullo suo suoi ti tra tu tua tue tuo tuoi tutti tutto un una uno vi voi vostra vostre vostri vostro è".split(" ")),e.Pipeline.registerFunction(e.it.stopWordFilter,"stopWordFilter-it")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/min/lunr.ja.min.js b/assets/javascripts/lunr/min/lunr.ja.min.js new file mode 100644 index 00000000..5f254ebe --- /dev/null +++ b/assets/javascripts/lunr/min/lunr.ja.min.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.ja=function(){this.pipeline.reset(),this.pipeline.add(e.ja.trimmer,e.ja.stopWordFilter,e.ja.stemmer),r?this.tokenizer=e.ja.tokenizer:(e.tokenizer&&(e.tokenizer=e.ja.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.ja.tokenizer))};var t=new e.TinySegmenter;e.ja.tokenizer=function(i){var n,o,s,p,a,u,m,l,c,f;if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t.toLowerCase()):t.toLowerCase()});for(o=i.toString().toLowerCase().replace(/^\s+/,""),n=o.length-1;n>=0;n--)if(/\S/.test(o.charAt(n))){o=o.substring(0,n+1);break}for(a=[],s=o.length,c=0,l=0;c<=s;c++)if(u=o.charAt(c),m=c-l,u.match(/\s/)||c==s){if(m>0)for(p=t.segment(o.slice(l,c)).filter(function(e){return!!e}),f=l,n=0;n=C.limit)break;C.cursor++;continue}break}for(C.cursor=o,C.bra=o,C.eq_s(1,"y")?(C.ket=C.cursor,C.slice_from("Y")):C.cursor=o;;)if(e=C.cursor,C.in_grouping(q,97,232)){if(i=C.cursor,C.bra=i,C.eq_s(1,"i"))C.ket=C.cursor,C.in_grouping(q,97,232)&&(C.slice_from("I"),C.cursor=e);else if(C.cursor=i,C.eq_s(1,"y"))C.ket=C.cursor,C.slice_from("Y"),C.cursor=e;else if(n(e))break}else if(n(e))break}function n(r){return C.cursor=r,r>=C.limit||(C.cursor++,!1)}function o(){_=C.limit,d=_,t()||(_=C.cursor,_<3&&(_=3),t()||(d=C.cursor))}function t(){for(;!C.in_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}for(;!C.out_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}return!1}function s(){for(var r;;)if(C.bra=C.cursor,r=C.find_among(p,3))switch(C.ket=C.cursor,r){case 1:C.slice_from("y");break;case 2:C.slice_from("i");break;case 3:if(C.cursor>=C.limit)return;C.cursor++}}function u(){return _<=C.cursor}function c(){return d<=C.cursor}function a(){var r=C.limit-C.cursor;C.find_among_b(g,3)&&(C.cursor=C.limit-r,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del()))}function l(){var r;w=!1,C.ket=C.cursor,C.eq_s_b(1,"e")&&(C.bra=C.cursor,u()&&(r=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-r,C.slice_del(),w=!0,a())))}function m(){var r;u()&&(r=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-r,C.eq_s_b(3,"gem")||(C.cursor=C.limit-r,C.slice_del(),a())))}function f(){var r,e,i,n,o,t,s=C.limit-C.cursor;if(C.ket=C.cursor,r=C.find_among_b(h,5))switch(C.bra=C.cursor,r){case 1:u()&&C.slice_from("heid");break;case 2:m();break;case 3:u()&&C.out_grouping_b(j,97,232)&&C.slice_del()}if(C.cursor=C.limit-s,l(),C.cursor=C.limit-s,C.ket=C.cursor,C.eq_s_b(4,"heid")&&(C.bra=C.cursor,c()&&(e=C.limit-C.cursor,C.eq_s_b(1,"c")||(C.cursor=C.limit-e,C.slice_del(),C.ket=C.cursor,C.eq_s_b(2,"en")&&(C.bra=C.cursor,m())))),C.cursor=C.limit-s,C.ket=C.cursor,r=C.find_among_b(k,6))switch(C.bra=C.cursor,r){case 1:if(c()){if(C.slice_del(),i=C.limit-C.cursor,C.ket=C.cursor,C.eq_s_b(2,"ig")&&(C.bra=C.cursor,c()&&(n=C.limit-C.cursor,!C.eq_s_b(1,"e")))){C.cursor=C.limit-n,C.slice_del();break}C.cursor=C.limit-i,a()}break;case 2:c()&&(o=C.limit-C.cursor,C.eq_s_b(1,"e")||(C.cursor=C.limit-o,C.slice_del()));break;case 3:c()&&(C.slice_del(),l());break;case 4:c()&&C.slice_del();break;case 5:c()&&w&&C.slice_del()}C.cursor=C.limit-s,C.out_grouping_b(z,73,232)&&(t=C.limit-C.cursor,C.find_among_b(v,4)&&C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-t,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del())))}var d,_,w,b=[new e("",-1,6),new e("á",0,1),new e("ä",0,1),new e("é",0,2),new e("ë",0,2),new e("í",0,3),new e("ï",0,3),new e("ó",0,4),new e("ö",0,4),new e("ú",0,5),new e("ü",0,5)],p=[new e("",-1,3),new e("I",0,2),new e("Y",0,1)],g=[new e("dd",-1,-1),new e("kk",-1,-1),new e("tt",-1,-1)],h=[new e("ene",-1,2),new e("se",-1,3),new e("en",-1,2),new e("heden",2,1),new e("s",-1,3)],k=[new e("end",-1,1),new e("ig",-1,2),new e("ing",-1,1),new e("lijk",-1,3),new e("baar",-1,4),new e("bar",-1,5)],v=[new e("aa",-1,-1),new e("ee",-1,-1),new e("oo",-1,-1),new e("uu",-1,-1)],q=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],z=[1,0,0,17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],j=[17,67,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],C=new i;this.setCurrent=function(r){C.setCurrent(r)},this.getCurrent=function(){return C.getCurrent()},this.stem=function(){var e=C.cursor;return r(),C.cursor=e,o(),C.limit_backward=e,C.cursor=C.limit,f(),C.cursor=C.limit_backward,s(),!0}};return function(r){return"function"==typeof r.update?r.update(function(r){return n.setCurrent(r),n.stem(),n.getCurrent()}):(n.setCurrent(r),n.stem(),n.getCurrent())}}(),r.Pipeline.registerFunction(r.nl.stemmer,"stemmer-nl"),r.nl.stopWordFilter=r.generateStopWordFilter(" aan al alles als altijd andere ben bij daar dan dat de der deze die dit doch doen door dus een eens en er ge geen geweest haar had heb hebben heeft hem het hier hij hoe hun iemand iets ik in is ja je kan kon kunnen maar me meer men met mij mijn moet na naar niet niets nog nu of om omdat onder ons ook op over reeds te tegen toch toen tot u uit uw van veel voor want waren was wat werd wezen wie wil worden wordt zal ze zelf zich zij zijn zo zonder zou".split(" ")),r.Pipeline.registerFunction(r.nl.stopWordFilter,"stopWordFilter-nl")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/min/lunr.no.min.js b/assets/javascripts/lunr/min/lunr.no.min.js new file mode 100644 index 00000000..92bc7e4e --- /dev/null +++ b/assets/javascripts/lunr/min/lunr.no.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Norwegian` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.no=function(){this.pipeline.reset(),this.pipeline.add(e.no.trimmer,e.no.stopWordFilter,e.no.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.no.stemmer))},e.no.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.no.trimmer=e.trimmerSupport.generateTrimmer(e.no.wordCharacters),e.Pipeline.registerFunction(e.no.trimmer,"trimmer-no"),e.no.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(){var e,r=w.cursor+3;if(a=w.limit,0<=r||r<=w.limit){for(s=r;;){if(e=w.cursor,w.in_grouping(d,97,248)){w.cursor=e;break}if(e>=w.limit)return;w.cursor=e+1}for(;!w.out_grouping(d,97,248);){if(w.cursor>=w.limit)return;w.cursor++}a=w.cursor,a=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(m,29),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:n=w.limit-w.cursor,w.in_grouping_b(c,98,122)?w.slice_del():(w.cursor=w.limit-n,w.eq_s_b(1,"k")&&w.out_grouping_b(d,97,248)&&w.slice_del());break;case 3:w.slice_from("er")}}function t(){var e,r=w.limit-w.cursor;w.cursor>=a&&(e=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,w.find_among_b(u,2)?(w.bra=w.cursor,w.limit_backward=e,w.cursor=w.limit-r,w.cursor>w.limit_backward&&(w.cursor--,w.bra=w.cursor,w.slice_del())):w.limit_backward=e)}function o(){var e,r;w.cursor>=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(l,11),e?(w.bra=w.cursor,w.limit_backward=r,1==e&&w.slice_del()):w.limit_backward=r)}var s,a,m=[new r("a",-1,1),new r("e",-1,1),new r("ede",1,1),new r("ande",1,1),new r("ende",1,1),new r("ane",1,1),new r("ene",1,1),new r("hetene",6,1),new r("erte",1,3),new r("en",-1,1),new r("heten",9,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",12,1),new r("s",-1,2),new r("as",14,1),new r("es",14,1),new r("edes",16,1),new r("endes",16,1),new r("enes",16,1),new r("hetenes",19,1),new r("ens",14,1),new r("hetens",21,1),new r("ers",14,1),new r("ets",14,1),new r("et",-1,1),new r("het",25,1),new r("ert",-1,3),new r("ast",-1,1)],u=[new r("dt",-1,-1),new r("vt",-1,-1)],l=[new r("leg",-1,1),new r("eleg",0,1),new r("ig",-1,1),new r("eig",2,1),new r("lig",2,1),new r("elig",4,1),new r("els",-1,1),new r("lov",-1,1),new r("elov",7,1),new r("slov",7,1),new r("hetslov",9,1)],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],c=[119,125,149,1],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,i(),w.cursor=w.limit,t(),w.cursor=w.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.no.stemmer,"stemmer-no"),e.no.stopWordFilter=e.generateStopWordFilter("alle at av bare begge ble blei bli blir blitt både båe da de deg dei deim deira deires dem den denne der dere deres det dette di din disse ditt du dykk dykkar då eg ein eit eitt eller elles en enn er et ett etter for fordi fra før ha hadde han hans har hennar henne hennes her hjå ho hoe honom hoss hossen hun hva hvem hver hvilke hvilken hvis hvor hvordan hvorfor i ikke ikkje ikkje ingen ingi inkje inn inni ja jeg kan kom korleis korso kun kunne kva kvar kvarhelst kven kvi kvifor man mange me med medan meg meget mellom men mi min mine mitt mot mykje ned no noe noen noka noko nokon nokor nokre nå når og også om opp oss over på samme seg selv si si sia sidan siden sin sine sitt sjøl skal skulle slik so som som somme somt så sånn til um upp ut uten var vart varte ved vere verte vi vil ville vore vors vort vår være være vært å".split(" ")),e.Pipeline.registerFunction(e.no.stopWordFilter,"stopWordFilter-no")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/min/lunr.pt.min.js b/assets/javascripts/lunr/min/lunr.pt.min.js new file mode 100644 index 00000000..6c16996d --- /dev/null +++ b/assets/javascripts/lunr/min/lunr.pt.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Portuguese` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.pt=function(){this.pipeline.reset(),this.pipeline.add(e.pt.trimmer,e.pt.stopWordFilter,e.pt.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.pt.stemmer))},e.pt.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.pt.trimmer=e.trimmerSupport.generateTrimmer(e.pt.wordCharacters),e.Pipeline.registerFunction(e.pt.trimmer,"trimmer-pt"),e.pt.stemmer=function(){var r=e.stemmerSupport.Among,s=e.stemmerSupport.SnowballProgram,n=new function(){function e(){for(var e;;){if(z.bra=z.cursor,e=z.find_among(k,3))switch(z.ket=z.cursor,e){case 1:z.slice_from("a~");continue;case 2:z.slice_from("o~");continue;case 3:if(z.cursor>=z.limit)break;z.cursor++;continue}break}}function n(){if(z.out_grouping(y,97,250)){for(;!z.in_grouping(y,97,250);){if(z.cursor>=z.limit)return!0;z.cursor++}return!1}return!0}function i(){if(z.in_grouping(y,97,250))for(;!z.out_grouping(y,97,250);){if(z.cursor>=z.limit)return!1;z.cursor++}return g=z.cursor,!0}function o(){var e,r,s=z.cursor;if(z.in_grouping(y,97,250))if(e=z.cursor,n()){if(z.cursor=e,i())return}else g=z.cursor;if(z.cursor=s,z.out_grouping(y,97,250)){if(r=z.cursor,n()){if(z.cursor=r,!z.in_grouping(y,97,250)||z.cursor>=z.limit)return;z.cursor++}g=z.cursor}}function t(){for(;!z.in_grouping(y,97,250);){if(z.cursor>=z.limit)return!1;z.cursor++}for(;!z.out_grouping(y,97,250);){if(z.cursor>=z.limit)return!1;z.cursor++}return!0}function a(){var e=z.cursor;g=z.limit,b=g,h=g,o(),z.cursor=e,t()&&(b=z.cursor,t()&&(h=z.cursor))}function u(){for(var e;;){if(z.bra=z.cursor,e=z.find_among(q,3))switch(z.ket=z.cursor,e){case 1:z.slice_from("ã");continue;case 2:z.slice_from("õ");continue;case 3:if(z.cursor>=z.limit)break;z.cursor++;continue}break}}function w(){return g<=z.cursor}function m(){return b<=z.cursor}function c(){return h<=z.cursor}function l(){var e;if(z.ket=z.cursor,!(e=z.find_among_b(F,45)))return!1;switch(z.bra=z.cursor,e){case 1:if(!c())return!1;z.slice_del();break;case 2:if(!c())return!1;z.slice_from("log");break;case 3:if(!c())return!1;z.slice_from("u");break;case 4:if(!c())return!1;z.slice_from("ente");break;case 5:if(!m())return!1;z.slice_del(),z.ket=z.cursor,e=z.find_among_b(j,4),e&&(z.bra=z.cursor,c()&&(z.slice_del(),1==e&&(z.ket=z.cursor,z.eq_s_b(2,"at")&&(z.bra=z.cursor,c()&&z.slice_del()))));break;case 6:if(!c())return!1;z.slice_del(),z.ket=z.cursor,e=z.find_among_b(C,3),e&&(z.bra=z.cursor,1==e&&c()&&z.slice_del());break;case 7:if(!c())return!1;z.slice_del(),z.ket=z.cursor,e=z.find_among_b(P,3),e&&(z.bra=z.cursor,1==e&&c()&&z.slice_del());break;case 8:if(!c())return!1;z.slice_del(),z.ket=z.cursor,z.eq_s_b(2,"at")&&(z.bra=z.cursor,c()&&z.slice_del());break;case 9:if(!w()||!z.eq_s_b(1,"e"))return!1;z.slice_from("ir")}return!0}function f(){var e,r;if(z.cursor>=g){if(r=z.limit_backward,z.limit_backward=g,z.ket=z.cursor,e=z.find_among_b(S,120))return z.bra=z.cursor,1==e&&z.slice_del(),z.limit_backward=r,!0;z.limit_backward=r}return!1}function d(){var e;z.ket=z.cursor,(e=z.find_among_b(W,7))&&(z.bra=z.cursor,1==e&&w()&&z.slice_del())}function v(e,r){if(z.eq_s_b(1,e)){z.bra=z.cursor;var s=z.limit-z.cursor;if(z.eq_s_b(1,r))return z.cursor=z.limit-s,w()&&z.slice_del(),!1}return!0}function p(){var e;if(z.ket=z.cursor,e=z.find_among_b(L,4))switch(z.bra=z.cursor,e){case 1:w()&&(z.slice_del(),z.ket=z.cursor,z.limit-z.cursor,v("u","g")&&v("i","c"));break;case 2:z.slice_from("c")}}function _(){if(!l()&&(z.cursor=z.limit,!f()))return z.cursor=z.limit,void d();z.cursor=z.limit,z.ket=z.cursor,z.eq_s_b(1,"i")&&(z.bra=z.cursor,z.eq_s_b(1,"c")&&(z.cursor=z.limit,w()&&z.slice_del()))}var h,b,g,k=[new r("",-1,3),new r("ã",0,1),new r("õ",0,2)],q=[new r("",-1,3),new r("a~",0,1),new r("o~",0,2)],j=[new r("ic",-1,-1),new r("ad",-1,-1),new r("os",-1,-1),new r("iv",-1,1)],C=[new r("ante",-1,1),new r("avel",-1,1),new r("ível",-1,1)],P=[new r("ic",-1,1),new r("abil",-1,1),new r("iv",-1,1)],F=[new r("ica",-1,1),new r("ância",-1,1),new r("ência",-1,4),new r("ira",-1,9),new r("adora",-1,1),new r("osa",-1,1),new r("ista",-1,1),new r("iva",-1,8),new r("eza",-1,1),new r("logía",-1,2),new r("idade",-1,7),new r("ante",-1,1),new r("mente",-1,6),new r("amente",12,5),new r("ável",-1,1),new r("ível",-1,1),new r("ución",-1,3),new r("ico",-1,1),new r("ismo",-1,1),new r("oso",-1,1),new r("amento",-1,1),new r("imento",-1,1),new r("ivo",-1,8),new r("aça~o",-1,1),new r("ador",-1,1),new r("icas",-1,1),new r("ências",-1,4),new r("iras",-1,9),new r("adoras",-1,1),new r("osas",-1,1),new r("istas",-1,1),new r("ivas",-1,8),new r("ezas",-1,1),new r("logías",-1,2),new r("idades",-1,7),new r("uciones",-1,3),new r("adores",-1,1),new r("antes",-1,1),new r("aço~es",-1,1),new r("icos",-1,1),new r("ismos",-1,1),new r("osos",-1,1),new r("amentos",-1,1),new r("imentos",-1,1),new r("ivos",-1,8)],S=[new r("ada",-1,1),new r("ida",-1,1),new r("ia",-1,1),new r("aria",2,1),new r("eria",2,1),new r("iria",2,1),new r("ara",-1,1),new r("era",-1,1),new r("ira",-1,1),new r("ava",-1,1),new r("asse",-1,1),new r("esse",-1,1),new r("isse",-1,1),new r("aste",-1,1),new r("este",-1,1),new r("iste",-1,1),new r("ei",-1,1),new r("arei",16,1),new r("erei",16,1),new r("irei",16,1),new r("am",-1,1),new r("iam",20,1),new r("ariam",21,1),new r("eriam",21,1),new r("iriam",21,1),new r("aram",20,1),new r("eram",20,1),new r("iram",20,1),new r("avam",20,1),new r("em",-1,1),new r("arem",29,1),new r("erem",29,1),new r("irem",29,1),new r("assem",29,1),new r("essem",29,1),new r("issem",29,1),new r("ado",-1,1),new r("ido",-1,1),new r("ando",-1,1),new r("endo",-1,1),new r("indo",-1,1),new r("ara~o",-1,1),new r("era~o",-1,1),new r("ira~o",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("ir",-1,1),new r("as",-1,1),new r("adas",47,1),new r("idas",47,1),new r("ias",47,1),new r("arias",50,1),new r("erias",50,1),new r("irias",50,1),new r("aras",47,1),new r("eras",47,1),new r("iras",47,1),new r("avas",47,1),new r("es",-1,1),new r("ardes",58,1),new r("erdes",58,1),new r("irdes",58,1),new r("ares",58,1),new r("eres",58,1),new r("ires",58,1),new r("asses",58,1),new r("esses",58,1),new r("isses",58,1),new r("astes",58,1),new r("estes",58,1),new r("istes",58,1),new r("is",-1,1),new r("ais",71,1),new r("eis",71,1),new r("areis",73,1),new r("ereis",73,1),new r("ireis",73,1),new r("áreis",73,1),new r("éreis",73,1),new r("íreis",73,1),new r("ásseis",73,1),new r("ésseis",73,1),new r("ísseis",73,1),new r("áveis",73,1),new r("íeis",73,1),new r("aríeis",84,1),new r("eríeis",84,1),new r("iríeis",84,1),new r("ados",-1,1),new r("idos",-1,1),new r("amos",-1,1),new r("áramos",90,1),new r("éramos",90,1),new r("íramos",90,1),new r("ávamos",90,1),new r("íamos",90,1),new r("aríamos",95,1),new r("eríamos",95,1),new r("iríamos",95,1),new r("emos",-1,1),new r("aremos",99,1),new r("eremos",99,1),new r("iremos",99,1),new r("ássemos",99,1),new r("êssemos",99,1),new r("íssemos",99,1),new r("imos",-1,1),new r("armos",-1,1),new r("ermos",-1,1),new r("irmos",-1,1),new r("ámos",-1,1),new r("arás",-1,1),new r("erás",-1,1),new r("irás",-1,1),new r("eu",-1,1),new r("iu",-1,1),new r("ou",-1,1),new r("ará",-1,1),new r("erá",-1,1),new r("irá",-1,1)],W=[new r("a",-1,1),new r("i",-1,1),new r("o",-1,1),new r("os",-1,1),new r("á",-1,1),new r("í",-1,1),new r("ó",-1,1)],L=[new r("e",-1,1),new r("ç",-1,2),new r("é",-1,1),new r("ê",-1,1)],y=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,3,19,12,2],z=new s;this.setCurrent=function(e){z.setCurrent(e)},this.getCurrent=function(){return z.getCurrent()},this.stem=function(){var r=z.cursor;return e(),z.cursor=r,a(),z.limit_backward=r,z.cursor=z.limit,_(),z.cursor=z.limit,p(),z.cursor=z.limit_backward,u(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.pt.stemmer,"stemmer-pt"),e.pt.stopWordFilter=e.generateStopWordFilter("a ao aos aquela aquelas aquele aqueles aquilo as até com como da das de dela delas dele deles depois do dos e ela elas ele eles em entre era eram essa essas esse esses esta estamos estas estava estavam este esteja estejam estejamos estes esteve estive estivemos estiver estivera estiveram estiverem estivermos estivesse estivessem estivéramos estivéssemos estou está estávamos estão eu foi fomos for fora foram forem formos fosse fossem fui fôramos fôssemos haja hajam hajamos havemos hei houve houvemos houver houvera houveram houverei houverem houveremos houveria houveriam houvermos houverá houverão houveríamos houvesse houvessem houvéramos houvéssemos há hão isso isto já lhe lhes mais mas me mesmo meu meus minha minhas muito na nas nem no nos nossa nossas nosso nossos num numa não nós o os ou para pela pelas pelo pelos por qual quando que quem se seja sejam sejamos sem serei seremos seria seriam será serão seríamos seu seus somos sou sua suas são só também te tem temos tenha tenham tenhamos tenho terei teremos teria teriam terá terão teríamos teu teus teve tinha tinham tive tivemos tiver tivera tiveram tiverem tivermos tivesse tivessem tivéramos tivéssemos tu tua tuas tém tínhamos um uma você vocês vos à às éramos".split(" ")),e.Pipeline.registerFunction(e.pt.stopWordFilter,"stopWordFilter-pt")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/min/lunr.ro.min.js b/assets/javascripts/lunr/min/lunr.ro.min.js new file mode 100644 index 00000000..72771401 --- /dev/null +++ b/assets/javascripts/lunr/min/lunr.ro.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Romanian` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ro=function(){this.pipeline.reset(),this.pipeline.add(e.ro.trimmer,e.ro.stopWordFilter,e.ro.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ro.stemmer))},e.ro.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.ro.trimmer=e.trimmerSupport.generateTrimmer(e.ro.wordCharacters),e.Pipeline.registerFunction(e.ro.trimmer,"trimmer-ro"),e.ro.stemmer=function(){var i=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,n=new function(){function e(e,i){L.eq_s(1,e)&&(L.ket=L.cursor,L.in_grouping(W,97,259)&&L.slice_from(i))}function n(){for(var i,r;;){if(i=L.cursor,L.in_grouping(W,97,259)&&(r=L.cursor,L.bra=r,e("u","U"),L.cursor=r,e("i","I")),L.cursor=i,L.cursor>=L.limit)break;L.cursor++}}function t(){if(L.out_grouping(W,97,259)){for(;!L.in_grouping(W,97,259);){if(L.cursor>=L.limit)return!0;L.cursor++}return!1}return!0}function a(){if(L.in_grouping(W,97,259))for(;!L.out_grouping(W,97,259);){if(L.cursor>=L.limit)return!0;L.cursor++}return!1}function o(){var e,i,r=L.cursor;if(L.in_grouping(W,97,259)){if(e=L.cursor,!t())return void(h=L.cursor);if(L.cursor=e,!a())return void(h=L.cursor)}L.cursor=r,L.out_grouping(W,97,259)&&(i=L.cursor,t()&&(L.cursor=i,L.in_grouping(W,97,259)&&L.cursor=L.limit)return!1;L.cursor++}for(;!L.out_grouping(W,97,259);){if(L.cursor>=L.limit)return!1;L.cursor++}return!0}function c(){var e=L.cursor;h=L.limit,k=h,g=h,o(),L.cursor=e,u()&&(k=L.cursor,u()&&(g=L.cursor))}function s(){for(var e;;){if(L.bra=L.cursor,e=L.find_among(z,3))switch(L.ket=L.cursor,e){case 1:L.slice_from("i");continue;case 2:L.slice_from("u");continue;case 3:if(L.cursor>=L.limit)break;L.cursor++;continue}break}}function w(){return h<=L.cursor}function m(){return k<=L.cursor}function l(){return g<=L.cursor}function f(){var e,i;if(L.ket=L.cursor,(e=L.find_among_b(C,16))&&(L.bra=L.cursor,m()))switch(e){case 1:L.slice_del();break;case 2:L.slice_from("a");break;case 3:L.slice_from("e");break;case 4:L.slice_from("i");break;case 5:i=L.limit-L.cursor,L.eq_s_b(2,"ab")||(L.cursor=L.limit-i,L.slice_from("i"));break;case 6:L.slice_from("at");break;case 7:L.slice_from("aţi")}}function p(){var e,i=L.limit-L.cursor;if(L.ket=L.cursor,(e=L.find_among_b(P,46))&&(L.bra=L.cursor,m())){switch(e){case 1:L.slice_from("abil");break;case 2:L.slice_from("ibil");break;case 3:L.slice_from("iv");break;case 4:L.slice_from("ic");break;case 5:L.slice_from("at");break;case 6:L.slice_from("it")}return _=!0,L.cursor=L.limit-i,!0}return!1}function d(){var e,i;for(_=!1;;)if(i=L.limit-L.cursor,!p()){L.cursor=L.limit-i;break}if(L.ket=L.cursor,(e=L.find_among_b(F,62))&&(L.bra=L.cursor,l())){switch(e){case 1:L.slice_del();break;case 2:L.eq_s_b(1,"ţ")&&(L.bra=L.cursor,L.slice_from("t"));break;case 3:L.slice_from("ist")}_=!0}}function b(){var e,i,r;if(L.cursor>=h){if(i=L.limit_backward,L.limit_backward=h,L.ket=L.cursor,e=L.find_among_b(q,94))switch(L.bra=L.cursor,e){case 1:if(r=L.limit-L.cursor,!L.out_grouping_b(W,97,259)&&(L.cursor=L.limit-r,!L.eq_s_b(1,"u")))break;case 2:L.slice_del()}L.limit_backward=i}}function v(){var e;L.ket=L.cursor,(e=L.find_among_b(S,5))&&(L.bra=L.cursor,w()&&1==e&&L.slice_del())}var _,g,k,h,z=[new i("",-1,3),new i("I",0,1),new i("U",0,2)],C=[new i("ea",-1,3),new i("aţia",-1,7),new i("aua",-1,2),new i("iua",-1,4),new i("aţie",-1,7),new i("ele",-1,3),new i("ile",-1,5),new i("iile",6,4),new i("iei",-1,4),new i("atei",-1,6),new i("ii",-1,4),new i("ului",-1,1),new i("ul",-1,1),new i("elor",-1,3),new i("ilor",-1,4),new i("iilor",14,4)],P=[new i("icala",-1,4),new i("iciva",-1,4),new i("ativa",-1,5),new i("itiva",-1,6),new i("icale",-1,4),new i("aţiune",-1,5),new i("iţiune",-1,6),new i("atoare",-1,5),new i("itoare",-1,6),new i("ătoare",-1,5),new i("icitate",-1,4),new i("abilitate",-1,1),new i("ibilitate",-1,2),new i("ivitate",-1,3),new i("icive",-1,4),new i("ative",-1,5),new i("itive",-1,6),new i("icali",-1,4),new i("atori",-1,5),new i("icatori",18,4),new i("itori",-1,6),new i("ători",-1,5),new i("icitati",-1,4),new i("abilitati",-1,1),new i("ivitati",-1,3),new i("icivi",-1,4),new i("ativi",-1,5),new i("itivi",-1,6),new i("icităi",-1,4),new i("abilităi",-1,1),new i("ivităi",-1,3),new i("icităţi",-1,4),new i("abilităţi",-1,1),new i("ivităţi",-1,3),new i("ical",-1,4),new i("ator",-1,5),new i("icator",35,4),new i("itor",-1,6),new i("ător",-1,5),new i("iciv",-1,4),new i("ativ",-1,5),new i("itiv",-1,6),new i("icală",-1,4),new i("icivă",-1,4),new i("ativă",-1,5),new i("itivă",-1,6)],F=[new i("ica",-1,1),new i("abila",-1,1),new i("ibila",-1,1),new i("oasa",-1,1),new i("ata",-1,1),new i("ita",-1,1),new i("anta",-1,1),new i("ista",-1,3),new i("uta",-1,1),new i("iva",-1,1),new i("ic",-1,1),new i("ice",-1,1),new i("abile",-1,1),new i("ibile",-1,1),new i("isme",-1,3),new i("iune",-1,2),new i("oase",-1,1),new i("ate",-1,1),new i("itate",17,1),new i("ite",-1,1),new i("ante",-1,1),new i("iste",-1,3),new i("ute",-1,1),new i("ive",-1,1),new i("ici",-1,1),new i("abili",-1,1),new i("ibili",-1,1),new i("iuni",-1,2),new i("atori",-1,1),new i("osi",-1,1),new i("ati",-1,1),new i("itati",30,1),new i("iti",-1,1),new i("anti",-1,1),new i("isti",-1,3),new i("uti",-1,1),new i("işti",-1,3),new i("ivi",-1,1),new i("ităi",-1,1),new i("oşi",-1,1),new i("ităţi",-1,1),new i("abil",-1,1),new i("ibil",-1,1),new i("ism",-1,3),new i("ator",-1,1),new i("os",-1,1),new i("at",-1,1),new i("it",-1,1),new i("ant",-1,1),new i("ist",-1,3),new i("ut",-1,1),new i("iv",-1,1),new i("ică",-1,1),new i("abilă",-1,1),new i("ibilă",-1,1),new i("oasă",-1,1),new i("ată",-1,1),new i("ită",-1,1),new i("antă",-1,1),new i("istă",-1,3),new i("ută",-1,1),new i("ivă",-1,1)],q=[new i("ea",-1,1),new i("ia",-1,1),new i("esc",-1,1),new i("ăsc",-1,1),new i("ind",-1,1),new i("ând",-1,1),new i("are",-1,1),new i("ere",-1,1),new i("ire",-1,1),new i("âre",-1,1),new i("se",-1,2),new i("ase",10,1),new i("sese",10,2),new i("ise",10,1),new i("use",10,1),new i("âse",10,1),new i("eşte",-1,1),new i("ăşte",-1,1),new i("eze",-1,1),new i("ai",-1,1),new i("eai",19,1),new i("iai",19,1),new i("sei",-1,2),new i("eşti",-1,1),new i("ăşti",-1,1),new i("ui",-1,1),new i("ezi",-1,1),new i("âi",-1,1),new i("aşi",-1,1),new i("seşi",-1,2),new i("aseşi",29,1),new i("seseşi",29,2),new i("iseşi",29,1),new i("useşi",29,1),new i("âseşi",29,1),new i("işi",-1,1),new i("uşi",-1,1),new i("âşi",-1,1),new i("aţi",-1,2),new i("eaţi",38,1),new i("iaţi",38,1),new i("eţi",-1,2),new i("iţi",-1,2),new i("âţi",-1,2),new i("arăţi",-1,1),new i("serăţi",-1,2),new i("aserăţi",45,1),new i("seserăţi",45,2),new i("iserăţi",45,1),new i("userăţi",45,1),new i("âserăţi",45,1),new i("irăţi",-1,1),new i("urăţi",-1,1),new i("ârăţi",-1,1),new i("am",-1,1),new i("eam",54,1),new i("iam",54,1),new i("em",-1,2),new i("asem",57,1),new i("sesem",57,2),new i("isem",57,1),new i("usem",57,1),new i("âsem",57,1),new i("im",-1,2),new i("âm",-1,2),new i("ăm",-1,2),new i("arăm",65,1),new i("serăm",65,2),new i("aserăm",67,1),new i("seserăm",67,2),new i("iserăm",67,1),new i("userăm",67,1),new i("âserăm",67,1),new i("irăm",65,1),new i("urăm",65,1),new i("ârăm",65,1),new i("au",-1,1),new i("eau",76,1),new i("iau",76,1),new i("indu",-1,1),new i("ându",-1,1),new i("ez",-1,1),new i("ească",-1,1),new i("ară",-1,1),new i("seră",-1,2),new i("aseră",84,1),new i("seseră",84,2),new i("iseră",84,1),new i("useră",84,1),new i("âseră",84,1),new i("iră",-1,1),new i("ură",-1,1),new i("âră",-1,1),new i("ează",-1,1)],S=[new i("a",-1,1),new i("e",-1,1),new i("ie",1,1),new i("i",-1,1),new i("ă",-1,1)],W=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,2,32,0,0,4],L=new r;this.setCurrent=function(e){L.setCurrent(e)},this.getCurrent=function(){return L.getCurrent()},this.stem=function(){var e=L.cursor;return n(),L.cursor=e,c(),L.limit_backward=e,L.cursor=L.limit,f(),L.cursor=L.limit,d(),L.cursor=L.limit,_||(L.cursor=L.limit,b(),L.cursor=L.limit),v(),L.cursor=L.limit_backward,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.ro.stemmer,"stemmer-ro"),e.ro.stopWordFilter=e.generateStopWordFilter("acea aceasta această aceea acei aceia acel acela acele acelea acest acesta aceste acestea aceşti aceştia acolo acord acum ai aia aibă aici al ale alea altceva altcineva am ar are asemenea asta astea astăzi asupra au avea avem aveţi azi aş aşadar aţi bine bucur bună ca care caut ce cel ceva chiar cinci cine cineva contra cu cum cumva curând curînd când cât câte câtva câţi cînd cît cîte cîtva cîţi că căci cărei căror cărui către da dacă dar datorită dată dau de deci deja deoarece departe deşi din dinaintea dintr- dintre doi doilea două drept după dă ea ei el ele eram este eu eşti face fata fi fie fiecare fii fim fiu fiţi frumos fără graţie halbă iar ieri la le li lor lui lângă lîngă mai mea mei mele mereu meu mi mie mine mult multă mulţi mulţumesc mâine mîine mă ne nevoie nici nicăieri nimeni nimeri nimic nişte noastre noastră noi noroc nostru nouă noştri nu opt ori oricare orice oricine oricum oricând oricât oricînd oricît oriunde patra patru patrulea pe pentru peste pic poate pot prea prima primul prin puţin puţina puţină până pînă rog sa sale sau se spate spre sub sunt suntem sunteţi sută sînt sîntem sînteţi să săi său ta tale te timp tine toate toată tot totuşi toţi trei treia treilea tu tăi tău un una unde undeva unei uneia unele uneori unii unor unora unu unui unuia unul vi voastre voastră voi vostru vouă voştri vreme vreo vreun vă zece zero zi zice îi îl îmi împotriva în înainte înaintea încotro încât încît între întrucât întrucît îţi ăla ălea ăsta ăstea ăştia şapte şase şi ştiu ţi ţie".split(" ")),e.Pipeline.registerFunction(e.ro.stopWordFilter,"stopWordFilter-ro")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/min/lunr.ru.min.js b/assets/javascripts/lunr/min/lunr.ru.min.js new file mode 100644 index 00000000..186cc485 --- /dev/null +++ b/assets/javascripts/lunr/min/lunr.ru.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Russian` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,n){"function"==typeof define&&define.amd?define(n):"object"==typeof exports?module.exports=n():n()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ru=function(){this.pipeline.reset(),this.pipeline.add(e.ru.trimmer,e.ru.stopWordFilter,e.ru.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ru.stemmer))},e.ru.wordCharacters="Ѐ-҄҇-ԯᴫᵸⷠ-ⷿꙀ-ꚟ︮︯",e.ru.trimmer=e.trimmerSupport.generateTrimmer(e.ru.wordCharacters),e.Pipeline.registerFunction(e.ru.trimmer,"trimmer-ru"),e.ru.stemmer=function(){var n=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,t=new function(){function e(){for(;!W.in_grouping(S,1072,1103);){if(W.cursor>=W.limit)return!1;W.cursor++}return!0}function t(){for(;!W.out_grouping(S,1072,1103);){if(W.cursor>=W.limit)return!1;W.cursor++}return!0}function w(){b=W.limit,_=b,e()&&(b=W.cursor,t()&&e()&&t()&&(_=W.cursor))}function i(){return _<=W.cursor}function u(e,n){var r,t;if(W.ket=W.cursor,r=W.find_among_b(e,n)){switch(W.bra=W.cursor,r){case 1:if(t=W.limit-W.cursor,!W.eq_s_b(1,"а")&&(W.cursor=W.limit-t,!W.eq_s_b(1,"я")))return!1;case 2:W.slice_del()}return!0}return!1}function o(){return u(h,9)}function s(e,n){var r;return W.ket=W.cursor,!!(r=W.find_among_b(e,n))&&(W.bra=W.cursor,1==r&&W.slice_del(),!0)}function c(){return s(g,26)}function m(){return!!c()&&(u(C,8),!0)}function f(){return s(k,2)}function l(){return u(P,46)}function a(){s(v,36)}function p(){var e;W.ket=W.cursor,(e=W.find_among_b(F,2))&&(W.bra=W.cursor,i()&&1==e&&W.slice_del())}function d(){var e;if(W.ket=W.cursor,e=W.find_among_b(q,4))switch(W.bra=W.cursor,e){case 1:if(W.slice_del(),W.ket=W.cursor,!W.eq_s_b(1,"н"))break;W.bra=W.cursor;case 2:if(!W.eq_s_b(1,"н"))break;case 3:W.slice_del()}}var _,b,h=[new n("в",-1,1),new n("ив",0,2),new n("ыв",0,2),new n("вши",-1,1),new n("ивши",3,2),new n("ывши",3,2),new n("вшись",-1,1),new n("ившись",6,2),new n("ывшись",6,2)],g=[new n("ее",-1,1),new n("ие",-1,1),new n("ое",-1,1),new n("ые",-1,1),new n("ими",-1,1),new n("ыми",-1,1),new n("ей",-1,1),new n("ий",-1,1),new n("ой",-1,1),new n("ый",-1,1),new n("ем",-1,1),new n("им",-1,1),new n("ом",-1,1),new n("ым",-1,1),new n("его",-1,1),new n("ого",-1,1),new n("ему",-1,1),new n("ому",-1,1),new n("их",-1,1),new n("ых",-1,1),new n("ею",-1,1),new n("ою",-1,1),new n("ую",-1,1),new n("юю",-1,1),new n("ая",-1,1),new n("яя",-1,1)],C=[new n("ем",-1,1),new n("нн",-1,1),new n("вш",-1,1),new n("ивш",2,2),new n("ывш",2,2),new n("щ",-1,1),new n("ющ",5,1),new n("ующ",6,2)],k=[new n("сь",-1,1),new n("ся",-1,1)],P=[new n("ла",-1,1),new n("ила",0,2),new n("ыла",0,2),new n("на",-1,1),new n("ена",3,2),new n("ете",-1,1),new n("ите",-1,2),new n("йте",-1,1),new n("ейте",7,2),new n("уйте",7,2),new n("ли",-1,1),new n("или",10,2),new n("ыли",10,2),new n("й",-1,1),new n("ей",13,2),new n("уй",13,2),new n("л",-1,1),new n("ил",16,2),new n("ыл",16,2),new n("ем",-1,1),new n("им",-1,2),new n("ым",-1,2),new n("н",-1,1),new n("ен",22,2),new n("ло",-1,1),new n("ило",24,2),new n("ыло",24,2),new n("но",-1,1),new n("ено",27,2),new n("нно",27,1),new n("ет",-1,1),new n("ует",30,2),new n("ит",-1,2),new n("ыт",-1,2),new n("ют",-1,1),new n("уют",34,2),new n("ят",-1,2),new n("ны",-1,1),new n("ены",37,2),new n("ть",-1,1),new n("ить",39,2),new n("ыть",39,2),new n("ешь",-1,1),new n("ишь",-1,2),new n("ю",-1,2),new n("ую",44,2)],v=[new n("а",-1,1),new n("ев",-1,1),new n("ов",-1,1),new n("е",-1,1),new n("ие",3,1),new n("ье",3,1),new n("и",-1,1),new n("еи",6,1),new n("ии",6,1),new n("ами",6,1),new n("ями",6,1),new n("иями",10,1),new n("й",-1,1),new n("ей",12,1),new n("ией",13,1),new n("ий",12,1),new n("ой",12,1),new n("ам",-1,1),new n("ем",-1,1),new n("ием",18,1),new n("ом",-1,1),new n("ям",-1,1),new n("иям",21,1),new n("о",-1,1),new n("у",-1,1),new n("ах",-1,1),new n("ях",-1,1),new n("иях",26,1),new n("ы",-1,1),new n("ь",-1,1),new n("ю",-1,1),new n("ию",30,1),new n("ью",30,1),new n("я",-1,1),new n("ия",33,1),new n("ья",33,1)],F=[new n("ост",-1,1),new n("ость",-1,1)],q=[new n("ейше",-1,1),new n("н",-1,2),new n("ейш",-1,1),new n("ь",-1,3)],S=[33,65,8,232],W=new r;this.setCurrent=function(e){W.setCurrent(e)},this.getCurrent=function(){return W.getCurrent()},this.stem=function(){return w(),W.cursor=W.limit,!(W.cursor=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor++,!0}return!1},in_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e<=s&&e>=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor--,!0}return!1},out_grouping:function(t,i,s){if(this.cursors||e>3]&1<<(7&e)))return this.cursor++,!0}return!1},out_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e>s||e>3]&1<<(7&e)))return this.cursor--,!0}return!1},eq_s:function(t,i){if(this.limit-this.cursor>1),f=0,l=o0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n+_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n+_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},find_among_b:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit_backward,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o=0;m--){if(n-l==u){f=-1;break}if(f=r.charCodeAt(n-1-l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n-_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n-_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},replace_s:function(t,i,s){var e=s.length-(i-t),n=r.substring(0,t),u=r.substring(i);return r=n+s+u,this.limit+=e,this.cursor>=i?this.cursor+=e:this.cursor>t&&(this.cursor=t),e},slice_check:function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>r.length)throw"faulty slice operation"},slice_from:function(r){this.slice_check(),this.replace_s(this.bra,this.ket,r)},slice_del:function(){this.slice_from("")},insert:function(r,t,i){var s=this.replace_s(r,t,i);r<=this.bra&&(this.bra+=s),r<=this.ket&&(this.ket+=s)},slice_to:function(){return this.slice_check(),r.substring(this.bra,this.ket)},eq_v_b:function(r){return this.eq_s_b(r.length,r)}}}},r.trimmerSupport={generateTrimmer:function(r){var t=new RegExp("^[^"+r+"]+"),i=new RegExp("[^"+r+"]+$");return function(r){return"function"==typeof r.update?r.update(function(r){return r.replace(t,"").replace(i,"")}):r.replace(t,"").replace(i,"")}}}}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/min/lunr.sv.min.js b/assets/javascripts/lunr/min/lunr.sv.min.js new file mode 100644 index 00000000..3e5eb640 --- /dev/null +++ b/assets/javascripts/lunr/min/lunr.sv.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Swedish` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.sv=function(){this.pipeline.reset(),this.pipeline.add(e.sv.trimmer,e.sv.stopWordFilter,e.sv.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sv.stemmer))},e.sv.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.sv.trimmer=e.trimmerSupport.generateTrimmer(e.sv.wordCharacters),e.Pipeline.registerFunction(e.sv.trimmer,"trimmer-sv"),e.sv.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,t=new function(){function e(){var e,r=w.cursor+3;if(o=w.limit,0<=r||r<=w.limit){for(a=r;;){if(e=w.cursor,w.in_grouping(l,97,246)){w.cursor=e;break}if(w.cursor=e,w.cursor>=w.limit)return;w.cursor++}for(;!w.out_grouping(l,97,246);){if(w.cursor>=w.limit)return;w.cursor++}o=w.cursor,o=o&&(w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(u,37),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.in_grouping_b(d,98,121)&&w.slice_del()}}function i(){var e=w.limit_backward;w.cursor>=o&&(w.limit_backward=o,w.cursor=w.limit,w.find_among_b(c,7)&&(w.cursor=w.limit,w.ket=w.cursor,w.cursor>w.limit_backward&&(w.bra=--w.cursor,w.slice_del())),w.limit_backward=e)}function s(){var e,r;if(w.cursor>=o){if(r=w.limit_backward,w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(m,5))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.slice_from("lös");break;case 3:w.slice_from("full")}w.limit_backward=r}}var a,o,u=[new r("a",-1,1),new r("arna",0,1),new r("erna",0,1),new r("heterna",2,1),new r("orna",0,1),new r("ad",-1,1),new r("e",-1,1),new r("ade",6,1),new r("ande",6,1),new r("arne",6,1),new r("are",6,1),new r("aste",6,1),new r("en",-1,1),new r("anden",12,1),new r("aren",12,1),new r("heten",12,1),new r("ern",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",18,1),new r("or",-1,1),new r("s",-1,2),new r("as",21,1),new r("arnas",22,1),new r("ernas",22,1),new r("ornas",22,1),new r("es",21,1),new r("ades",26,1),new r("andes",26,1),new r("ens",21,1),new r("arens",29,1),new r("hetens",29,1),new r("erns",21,1),new r("at",-1,1),new r("andet",-1,1),new r("het",-1,1),new r("ast",-1,1)],c=[new r("dd",-1,-1),new r("gd",-1,-1),new r("nn",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1),new r("tt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("els",-1,1),new r("fullt",-1,3),new r("löst",-1,2)],l=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,24,0,32],d=[119,127,149],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,t(),w.cursor=w.limit,i(),w.cursor=w.limit,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return t.setCurrent(e),t.stem(),t.getCurrent()}):(t.setCurrent(e),t.stem(),t.getCurrent())}}(),e.Pipeline.registerFunction(e.sv.stemmer,"stemmer-sv"),e.sv.stopWordFilter=e.generateStopWordFilter("alla allt att av blev bli blir blivit de dem den denna deras dess dessa det detta dig din dina ditt du där då efter ej eller en er era ert ett från för ha hade han hans har henne hennes hon honom hur här i icke ingen inom inte jag ju kan kunde man med mellan men mig min mina mitt mot mycket ni nu när någon något några och om oss på samma sedan sig sin sina sitta själv skulle som så sådan sådana sådant till under upp ut utan vad var vara varför varit varje vars vart vem vi vid vilka vilkas vilken vilket vår våra vårt än är åt över".split(" ")),e.Pipeline.registerFunction(e.sv.stopWordFilter,"stopWordFilter-sv")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/min/lunr.ta.min.js b/assets/javascripts/lunr/min/lunr.ta.min.js new file mode 100644 index 00000000..a644bed2 --- /dev/null +++ b/assets/javascripts/lunr/min/lunr.ta.min.js @@ -0,0 +1 @@ +!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ta=function(){this.pipeline.reset(),this.pipeline.add(e.ta.trimmer,e.ta.stopWordFilter,e.ta.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ta.stemmer))},e.ta.wordCharacters="஀-உஊ-ஏஐ-ஙச-ட஠-னப-யர-ஹ஺-ிீ-௉ொ-௏ௐ-௙௚-௟௠-௩௪-௯௰-௹௺-௿a-zA-Za-zA-Z0-90-9",e.ta.trimmer=e.trimmerSupport.generateTrimmer(e.ta.wordCharacters),e.Pipeline.registerFunction(e.ta.trimmer,"trimmer-ta"),e.ta.stopWordFilter=e.generateStopWordFilter("அங்கு அங்கே அது அதை அந்த அவர் அவர்கள் அவள் அவன் அவை ஆக ஆகவே ஆகையால் ஆதலால் ஆதலினால் ஆனாலும் ஆனால் இங்கு இங்கே இது இதை இந்த இப்படி இவர் இவர்கள் இவள் இவன் இவை இவ்வளவு உனக்கு உனது உன் உன்னால் எங்கு எங்கே எது எதை எந்த எப்படி எவர் எவர்கள் எவள் எவன் எவை எவ்வளவு எனக்கு எனது எனவே என் என்ன என்னால் ஏது ஏன் தனது தன்னால் தானே தான் நாங்கள் நாம் நான் நீ நீங்கள்".split(" ")),e.ta.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var t=e.wordcut;t.init(),e.ta.tokenizer=function(r){if(!arguments.length||null==r||void 0==r)return[];if(Array.isArray(r))return r.map(function(t){return isLunr2?new e.Token(t.toLowerCase()):t.toLowerCase()});var i=r.toString().toLowerCase().replace(/^\s+/,"");return t.cut(i).split("|")},e.Pipeline.registerFunction(e.ta.stemmer,"stemmer-ta"),e.Pipeline.registerFunction(e.ta.stopWordFilter,"stopWordFilter-ta")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/min/lunr.th.min.js b/assets/javascripts/lunr/min/lunr.th.min.js new file mode 100644 index 00000000..dee3aac6 --- /dev/null +++ b/assets/javascripts/lunr/min/lunr.th.min.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.th=function(){this.pipeline.reset(),this.pipeline.add(e.th.trimmer),r?this.tokenizer=e.th.tokenizer:(e.tokenizer&&(e.tokenizer=e.th.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.th.tokenizer))},e.th.wordCharacters="[฀-๿]",e.th.trimmer=e.trimmerSupport.generateTrimmer(e.th.wordCharacters),e.Pipeline.registerFunction(e.th.trimmer,"trimmer-th");var t=e.wordcut;t.init(),e.th.tokenizer=function(i){if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t):t});var n=i.toString().replace(/^\s+/,"");return t.cut(n).split("|")}}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/min/lunr.tr.min.js b/assets/javascripts/lunr/min/lunr.tr.min.js new file mode 100644 index 00000000..563f6ec1 --- /dev/null +++ b/assets/javascripts/lunr/min/lunr.tr.min.js @@ -0,0 +1,18 @@ +/*! + * Lunr languages, `Turkish` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2014, Mihai Valentin + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +!function(r,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(r.lunr)}(this,function(){return function(r){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");r.tr=function(){this.pipeline.reset(),this.pipeline.add(r.tr.trimmer,r.tr.stopWordFilter,r.tr.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(r.tr.stemmer))},r.tr.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",r.tr.trimmer=r.trimmerSupport.generateTrimmer(r.tr.wordCharacters),r.Pipeline.registerFunction(r.tr.trimmer,"trimmer-tr"),r.tr.stemmer=function(){var i=r.stemmerSupport.Among,e=r.stemmerSupport.SnowballProgram,n=new function(){function r(r,i,e){for(;;){var n=Dr.limit-Dr.cursor;if(Dr.in_grouping_b(r,i,e)){Dr.cursor=Dr.limit-n;break}if(Dr.cursor=Dr.limit-n,Dr.cursor<=Dr.limit_backward)return!1;Dr.cursor--}return!0}function n(){var i,e;i=Dr.limit-Dr.cursor,r(Wr,97,305);for(var n=0;nDr.limit_backward&&(Dr.cursor--,e=Dr.limit-Dr.cursor,i()))?(Dr.cursor=Dr.limit-e,!0):(Dr.cursor=Dr.limit-n,r()?(Dr.cursor=Dr.limit-n,!1):(Dr.cursor=Dr.limit-n,!(Dr.cursor<=Dr.limit_backward)&&(Dr.cursor--,!!i()&&(Dr.cursor=Dr.limit-n,!0))))}function u(r){return t(r,function(){return Dr.in_grouping_b(Wr,97,305)})}function o(){return u(function(){return Dr.eq_s_b(1,"n")})}function s(){return u(function(){return Dr.eq_s_b(1,"s")})}function c(){return u(function(){return Dr.eq_s_b(1,"y")})}function l(){return t(function(){return Dr.in_grouping_b(Lr,105,305)},function(){return Dr.out_grouping_b(Wr,97,305)})}function a(){return Dr.find_among_b(ur,10)&&l()}function m(){return n()&&Dr.in_grouping_b(Lr,105,305)&&s()}function d(){return Dr.find_among_b(or,2)}function f(){return n()&&Dr.in_grouping_b(Lr,105,305)&&c()}function b(){return n()&&Dr.find_among_b(sr,4)}function w(){return n()&&Dr.find_among_b(cr,4)&&o()}function _(){return n()&&Dr.find_among_b(lr,2)&&c()}function k(){return n()&&Dr.find_among_b(ar,2)}function p(){return n()&&Dr.find_among_b(mr,4)}function g(){return n()&&Dr.find_among_b(dr,2)}function y(){return n()&&Dr.find_among_b(fr,4)}function z(){return n()&&Dr.find_among_b(br,2)}function v(){return n()&&Dr.find_among_b(wr,2)&&c()}function h(){return Dr.eq_s_b(2,"ki")}function q(){return n()&&Dr.find_among_b(_r,2)&&o()}function C(){return n()&&Dr.find_among_b(kr,4)&&c()}function P(){return n()&&Dr.find_among_b(pr,4)}function F(){return n()&&Dr.find_among_b(gr,4)&&c()}function S(){return Dr.find_among_b(yr,4)}function W(){return n()&&Dr.find_among_b(zr,2)}function L(){return n()&&Dr.find_among_b(vr,4)}function x(){return n()&&Dr.find_among_b(hr,8)}function A(){return Dr.find_among_b(qr,2)}function E(){return n()&&Dr.find_among_b(Cr,32)&&c()}function j(){return Dr.find_among_b(Pr,8)&&c()}function T(){return n()&&Dr.find_among_b(Fr,4)&&c()}function Z(){return Dr.eq_s_b(3,"ken")&&c()}function B(){var r=Dr.limit-Dr.cursor;return!(T()||(Dr.cursor=Dr.limit-r,E()||(Dr.cursor=Dr.limit-r,j()||(Dr.cursor=Dr.limit-r,Z()))))}function D(){if(A()){var r=Dr.limit-Dr.cursor;if(S()||(Dr.cursor=Dr.limit-r,W()||(Dr.cursor=Dr.limit-r,C()||(Dr.cursor=Dr.limit-r,P()||(Dr.cursor=Dr.limit-r,F()||(Dr.cursor=Dr.limit-r))))),T())return!1}return!0}function G(){if(W()){Dr.bra=Dr.cursor,Dr.slice_del();var r=Dr.limit-Dr.cursor;return Dr.ket=Dr.cursor,x()||(Dr.cursor=Dr.limit-r,E()||(Dr.cursor=Dr.limit-r,j()||(Dr.cursor=Dr.limit-r,T()||(Dr.cursor=Dr.limit-r)))),nr=!1,!1}return!0}function H(){if(!L())return!0;var r=Dr.limit-Dr.cursor;return!E()&&(Dr.cursor=Dr.limit-r,!j())}function I(){var r,i=Dr.limit-Dr.cursor;return!(S()||(Dr.cursor=Dr.limit-i,F()||(Dr.cursor=Dr.limit-i,P()||(Dr.cursor=Dr.limit-i,C()))))||(Dr.bra=Dr.cursor,Dr.slice_del(),r=Dr.limit-Dr.cursor,Dr.ket=Dr.cursor,T()||(Dr.cursor=Dr.limit-r),!1)}function J(){var r,i=Dr.limit-Dr.cursor;if(Dr.ket=Dr.cursor,nr=!0,B()&&(Dr.cursor=Dr.limit-i,D()&&(Dr.cursor=Dr.limit-i,G()&&(Dr.cursor=Dr.limit-i,H()&&(Dr.cursor=Dr.limit-i,I()))))){if(Dr.cursor=Dr.limit-i,!x())return;Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,r=Dr.limit-Dr.cursor,S()||(Dr.cursor=Dr.limit-r,W()||(Dr.cursor=Dr.limit-r,C()||(Dr.cursor=Dr.limit-r,P()||(Dr.cursor=Dr.limit-r,F()||(Dr.cursor=Dr.limit-r))))),T()||(Dr.cursor=Dr.limit-r)}Dr.bra=Dr.cursor,Dr.slice_del()}function K(){var r,i,e,n;if(Dr.ket=Dr.cursor,h()){if(r=Dr.limit-Dr.cursor,p())return Dr.bra=Dr.cursor,Dr.slice_del(),i=Dr.limit-Dr.cursor,Dr.ket=Dr.cursor,W()?(Dr.bra=Dr.cursor,Dr.slice_del(),K()):(Dr.cursor=Dr.limit-i,a()&&(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K()))),!0;if(Dr.cursor=Dr.limit-r,w()){if(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,e=Dr.limit-Dr.cursor,d())Dr.bra=Dr.cursor,Dr.slice_del();else{if(Dr.cursor=Dr.limit-e,Dr.ket=Dr.cursor,!a()&&(Dr.cursor=Dr.limit-e,!m()&&(Dr.cursor=Dr.limit-e,!K())))return!0;Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K())}return!0}if(Dr.cursor=Dr.limit-r,g()){if(n=Dr.limit-Dr.cursor,d())Dr.bra=Dr.cursor,Dr.slice_del();else if(Dr.cursor=Dr.limit-n,m())Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K());else if(Dr.cursor=Dr.limit-n,!K())return!1;return!0}}return!1}function M(r){if(Dr.ket=Dr.cursor,!g()&&(Dr.cursor=Dr.limit-r,!k()))return!1;var i=Dr.limit-Dr.cursor;if(d())Dr.bra=Dr.cursor,Dr.slice_del();else if(Dr.cursor=Dr.limit-i,m())Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K());else if(Dr.cursor=Dr.limit-i,!K())return!1;return!0}function N(r){if(Dr.ket=Dr.cursor,!z()&&(Dr.cursor=Dr.limit-r,!b()))return!1;var i=Dr.limit-Dr.cursor;return!(!m()&&(Dr.cursor=Dr.limit-i,!d()))&&(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K()),!0)}function O(){var r,i=Dr.limit-Dr.cursor;return Dr.ket=Dr.cursor,!(!w()&&(Dr.cursor=Dr.limit-i,!v()))&&(Dr.bra=Dr.cursor,Dr.slice_del(),r=Dr.limit-Dr.cursor,Dr.ket=Dr.cursor,!(!W()||(Dr.bra=Dr.cursor,Dr.slice_del(),!K()))||(Dr.cursor=Dr.limit-r,Dr.ket=Dr.cursor,!(a()||(Dr.cursor=Dr.limit-r,m()||(Dr.cursor=Dr.limit-r,K())))||(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K()),!0)))}function Q(){var r,i,e=Dr.limit-Dr.cursor;if(Dr.ket=Dr.cursor,!p()&&(Dr.cursor=Dr.limit-e,!f()&&(Dr.cursor=Dr.limit-e,!_())))return!1;if(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,r=Dr.limit-Dr.cursor,a())Dr.bra=Dr.cursor,Dr.slice_del(),i=Dr.limit-Dr.cursor,Dr.ket=Dr.cursor,W()||(Dr.cursor=Dr.limit-i);else if(Dr.cursor=Dr.limit-r,!W())return!0;return Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,K(),!0}function R(){var r,i,e=Dr.limit-Dr.cursor;if(Dr.ket=Dr.cursor,W())return Dr.bra=Dr.cursor,Dr.slice_del(),void K();if(Dr.cursor=Dr.limit-e,Dr.ket=Dr.cursor,q())if(Dr.bra=Dr.cursor,Dr.slice_del(),r=Dr.limit-Dr.cursor,Dr.ket=Dr.cursor,d())Dr.bra=Dr.cursor,Dr.slice_del();else{if(Dr.cursor=Dr.limit-r,Dr.ket=Dr.cursor,!a()&&(Dr.cursor=Dr.limit-r,!m())){if(Dr.cursor=Dr.limit-r,Dr.ket=Dr.cursor,!W())return;if(Dr.bra=Dr.cursor,Dr.slice_del(),!K())return}Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K())}else if(Dr.cursor=Dr.limit-e,!M(e)&&(Dr.cursor=Dr.limit-e,!N(e))){if(Dr.cursor=Dr.limit-e,Dr.ket=Dr.cursor,y())return Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,i=Dr.limit-Dr.cursor,void(a()?(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K())):(Dr.cursor=Dr.limit-i,W()?(Dr.bra=Dr.cursor,Dr.slice_del(),K()):(Dr.cursor=Dr.limit-i,K())));if(Dr.cursor=Dr.limit-e,!O()){if(Dr.cursor=Dr.limit-e,d())return Dr.bra=Dr.cursor,void Dr.slice_del();Dr.cursor=Dr.limit-e,K()||(Dr.cursor=Dr.limit-e,Q()||(Dr.cursor=Dr.limit-e,Dr.ket=Dr.cursor,(a()||(Dr.cursor=Dr.limit-e,m()))&&(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K()))))}}}function U(){var r;if(Dr.ket=Dr.cursor,r=Dr.find_among_b(Sr,4))switch(Dr.bra=Dr.cursor,r){case 1:Dr.slice_from("p");break;case 2:Dr.slice_from("ç");break;case 3:Dr.slice_from("t");break;case 4:Dr.slice_from("k")}}function V(){for(;;){var r=Dr.limit-Dr.cursor;if(Dr.in_grouping_b(Wr,97,305)){Dr.cursor=Dr.limit-r;break}if(Dr.cursor=Dr.limit-r,Dr.cursor<=Dr.limit_backward)return!1;Dr.cursor--}return!0}function X(r,i,e){if(Dr.cursor=Dr.limit-r,V()){var n=Dr.limit-Dr.cursor;if(!Dr.eq_s_b(1,i)&&(Dr.cursor=Dr.limit-n,!Dr.eq_s_b(1,e)))return!0;Dr.cursor=Dr.limit-r;var t=Dr.cursor;return Dr.insert(Dr.cursor,Dr.cursor,e),Dr.cursor=t,!1}return!0}function Y(){var r=Dr.limit-Dr.cursor;(Dr.eq_s_b(1,"d")||(Dr.cursor=Dr.limit-r,Dr.eq_s_b(1,"g")))&&X(r,"a","ı")&&X(r,"e","i")&&X(r,"o","u")&&X(r,"ö","ü")}function $(){for(var r,i=Dr.cursor,e=2;;){for(r=Dr.cursor;!Dr.in_grouping(Wr,97,305);){if(Dr.cursor>=Dr.limit)return Dr.cursor=r,!(e>0)&&(Dr.cursor=i,!0);Dr.cursor++}e--}}function rr(r,i,e){for(;!Dr.eq_s(i,e);){if(Dr.cursor>=Dr.limit)return!0;Dr.cursor++}return(tr=i)!=Dr.limit||(Dr.cursor=r,!1)}function ir(){var r=Dr.cursor;return!rr(r,2,"ad")||(Dr.cursor=r,!rr(r,5,"soyad"))}function er(){var r=Dr.cursor;return!ir()&&(Dr.limit_backward=r,Dr.cursor=Dr.limit,Y(),Dr.cursor=Dr.limit,U(),!0)}var nr,tr,ur=[new i("m",-1,-1),new i("n",-1,-1),new i("miz",-1,-1),new i("niz",-1,-1),new i("muz",-1,-1),new i("nuz",-1,-1),new i("müz",-1,-1),new i("nüz",-1,-1),new i("mız",-1,-1),new i("nız",-1,-1)],or=[new i("leri",-1,-1),new i("ları",-1,-1)],sr=[new i("ni",-1,-1),new i("nu",-1,-1),new i("nü",-1,-1),new i("nı",-1,-1)],cr=[new i("in",-1,-1),new i("un",-1,-1),new i("ün",-1,-1),new i("ın",-1,-1)],lr=[new i("a",-1,-1),new i("e",-1,-1)],ar=[new i("na",-1,-1),new i("ne",-1,-1)],mr=[new i("da",-1,-1),new i("ta",-1,-1),new i("de",-1,-1),new i("te",-1,-1)],dr=[new i("nda",-1,-1),new i("nde",-1,-1)],fr=[new i("dan",-1,-1),new i("tan",-1,-1),new i("den",-1,-1),new i("ten",-1,-1)],br=[new i("ndan",-1,-1),new i("nden",-1,-1)],wr=[new i("la",-1,-1),new i("le",-1,-1)],_r=[new i("ca",-1,-1),new i("ce",-1,-1)],kr=[new i("im",-1,-1),new i("um",-1,-1),new i("üm",-1,-1),new i("ım",-1,-1)],pr=[new i("sin",-1,-1),new i("sun",-1,-1),new i("sün",-1,-1),new i("sın",-1,-1)],gr=[new i("iz",-1,-1),new i("uz",-1,-1),new i("üz",-1,-1),new i("ız",-1,-1)],yr=[new i("siniz",-1,-1),new i("sunuz",-1,-1),new i("sünüz",-1,-1),new i("sınız",-1,-1)],zr=[new i("lar",-1,-1),new i("ler",-1,-1)],vr=[new i("niz",-1,-1),new i("nuz",-1,-1),new i("nüz",-1,-1),new i("nız",-1,-1)],hr=[new i("dir",-1,-1),new i("tir",-1,-1),new i("dur",-1,-1),new i("tur",-1,-1),new i("dür",-1,-1),new i("tür",-1,-1),new i("dır",-1,-1),new i("tır",-1,-1)],qr=[new i("casına",-1,-1),new i("cesine",-1,-1)],Cr=[new i("di",-1,-1),new i("ti",-1,-1),new i("dik",-1,-1),new i("tik",-1,-1),new i("duk",-1,-1),new i("tuk",-1,-1),new i("dük",-1,-1),new i("tük",-1,-1),new i("dık",-1,-1),new i("tık",-1,-1),new i("dim",-1,-1),new i("tim",-1,-1),new i("dum",-1,-1),new i("tum",-1,-1),new i("düm",-1,-1),new i("tüm",-1,-1),new i("dım",-1,-1),new i("tım",-1,-1),new i("din",-1,-1),new i("tin",-1,-1),new i("dun",-1,-1),new i("tun",-1,-1),new i("dün",-1,-1),new i("tün",-1,-1),new i("dın",-1,-1),new i("tın",-1,-1),new i("du",-1,-1),new i("tu",-1,-1),new i("dü",-1,-1),new i("tü",-1,-1),new i("dı",-1,-1),new i("tı",-1,-1)],Pr=[new i("sa",-1,-1),new i("se",-1,-1),new i("sak",-1,-1),new i("sek",-1,-1),new i("sam",-1,-1),new i("sem",-1,-1),new i("san",-1,-1),new i("sen",-1,-1)],Fr=[new i("miş",-1,-1),new i("muş",-1,-1),new i("müş",-1,-1),new i("mış",-1,-1)],Sr=[new i("b",-1,1),new i("c",-1,2),new i("d",-1,3),new i("ğ",-1,4)],Wr=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,8,0,0,0,0,0,0,1],Lr=[1,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,1],xr=[1,64,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],Ar=[17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130],Er=[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],jr=[17],Tr=[65],Zr=[65],Br=[["a",xr,97,305],["e",Ar,101,252],["ı",Er,97,305],["i",jr,101,105],["o",Tr,111,117],["ö",Zr,246,252],["u",Tr,111,117]],Dr=new e;this.setCurrent=function(r){Dr.setCurrent(r)},this.getCurrent=function(){return Dr.getCurrent()},this.stem=function(){return!!($()&&(Dr.limit_backward=Dr.cursor,Dr.cursor=Dr.limit,J(),Dr.cursor=Dr.limit,nr&&(R(),Dr.cursor=Dr.limit_backward,er())))}};return function(r){return"function"==typeof r.update?r.update(function(r){return n.setCurrent(r),n.stem(),n.getCurrent()}):(n.setCurrent(r),n.stem(),n.getCurrent())}}(),r.Pipeline.registerFunction(r.tr.stemmer,"stemmer-tr"),r.tr.stopWordFilter=r.generateStopWordFilter("acaba altmış altı ama ancak arada aslında ayrıca bana bazı belki ben benden beni benim beri beş bile bin bir biri birkaç birkez birçok birşey birşeyi biz bizden bize bizi bizim bu buna bunda bundan bunlar bunları bunların bunu bunun burada böyle böylece da daha dahi de defa değil diye diğer doksan dokuz dolayı dolayısıyla dört edecek eden ederek edilecek ediliyor edilmesi ediyor elli en etmesi etti ettiği ettiğini eğer gibi göre halen hangi hatta hem henüz hep hepsi her herhangi herkesin hiç hiçbir iki ile ilgili ise itibaren itibariyle için işte kadar karşın katrilyon kendi kendilerine kendini kendisi kendisine kendisini kez ki kim kimden kime kimi kimse kırk milyar milyon mu mü mı nasıl ne neden nedenle nerde nerede nereye niye niçin o olan olarak oldu olduklarını olduğu olduğunu olmadı olmadığı olmak olması olmayan olmaz olsa olsun olup olur olursa oluyor on ona ondan onlar onlardan onları onların onu onun otuz oysa pek rağmen sadece sanki sekiz seksen sen senden seni senin siz sizden sizi sizin tarafından trilyon tüm var vardı ve veya ya yani yapacak yapmak yaptı yaptıkları yaptığı yaptığını yapılan yapılması yapıyor yedi yerine yetmiş yine yirmi yoksa yüz zaten çok çünkü öyle üzere üç şey şeyden şeyi şeyler şu şuna şunda şundan şunları şunu şöyle".split(" ")),r.Pipeline.registerFunction(r.tr.stopWordFilter,"stopWordFilter-tr")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/min/lunr.vi.min.js b/assets/javascripts/lunr/min/lunr.vi.min.js new file mode 100644 index 00000000..22aed28c --- /dev/null +++ b/assets/javascripts/lunr/min/lunr.vi.min.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.vi=function(){this.pipeline.reset(),this.pipeline.add(e.vi.stopWordFilter,e.vi.trimmer)},e.vi.wordCharacters="[A-Za-ẓ̀͐́͑̉̃̓ÂâÊêÔôĂ-ăĐ-đƠ-ơƯ-ư]",e.vi.trimmer=e.trimmerSupport.generateTrimmer(e.vi.wordCharacters),e.Pipeline.registerFunction(e.vi.trimmer,"trimmer-vi"),e.vi.stopWordFilter=e.generateStopWordFilter("là cái nhưng mà".split(" "))}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/min/lunr.zh.min.js b/assets/javascripts/lunr/min/lunr.zh.min.js new file mode 100644 index 00000000..9838ef96 --- /dev/null +++ b/assets/javascripts/lunr/min/lunr.zh.min.js @@ -0,0 +1 @@ +!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r(require("@node-rs/jieba")):r()(e.lunr)}(this,function(e){return function(r,t){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var i="2"==r.version[0];r.zh=function(){this.pipeline.reset(),this.pipeline.add(r.zh.trimmer,r.zh.stopWordFilter,r.zh.stemmer),i?this.tokenizer=r.zh.tokenizer:(r.tokenizer&&(r.tokenizer=r.zh.tokenizer),this.tokenizerFn&&(this.tokenizerFn=r.zh.tokenizer))},r.zh.tokenizer=function(n){if(!arguments.length||null==n||void 0==n)return[];if(Array.isArray(n))return n.map(function(e){return i?new r.Token(e.toLowerCase()):e.toLowerCase()});t&&e.load(t);var o=n.toString().trim().toLowerCase(),s=[];e.cut(o,!0).forEach(function(e){s=s.concat(e.split(" "))}),s=s.filter(function(e){return!!e});var u=0;return s.map(function(e,t){if(i){var n=o.indexOf(e,u),s={};return s.position=[n,e.length],s.index=t,u=n,new r.Token(e,s)}return e})},r.zh.wordCharacters="\\w一-龥",r.zh.trimmer=r.trimmerSupport.generateTrimmer(r.zh.wordCharacters),r.Pipeline.registerFunction(r.zh.trimmer,"trimmer-zh"),r.zh.stemmer=function(){return function(e){return e}}(),r.Pipeline.registerFunction(r.zh.stemmer,"stemmer-zh"),r.zh.stopWordFilter=r.generateStopWordFilter("的 一 不 在 人 有 是 为 以 于 上 他 而 后 之 来 及 了 因 下 可 到 由 这 与 也 此 但 并 个 其 已 无 小 我 们 起 最 再 今 去 好 只 又 或 很 亦 某 把 那 你 乃 它 吧 被 比 别 趁 当 从 到 得 打 凡 儿 尔 该 各 给 跟 和 何 还 即 几 既 看 据 距 靠 啦 了 另 么 每 们 嘛 拿 哪 那 您 凭 且 却 让 仍 啥 如 若 使 谁 虽 随 同 所 她 哇 嗡 往 哪 些 向 沿 哟 用 于 咱 则 怎 曾 至 致 着 诸 自".split(" ")),r.Pipeline.registerFunction(r.zh.stopWordFilter,"stopWordFilter-zh")}}); \ No newline at end of file diff --git a/assets/javascripts/lunr/tinyseg.js b/assets/javascripts/lunr/tinyseg.js new file mode 100644 index 00000000..167fa6dd --- /dev/null +++ b/assets/javascripts/lunr/tinyseg.js @@ -0,0 +1,206 @@ +/** + * export the module via AMD, CommonJS or as a browser global + * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js + */ +;(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(factory) + } else if (typeof exports === 'object') { + /** + * Node. Does not work with strict CommonJS, but + * only CommonJS-like environments that support module.exports, + * like Node. + */ + module.exports = factory() + } else { + // Browser globals (root is window) + factory()(root.lunr); + } +}(this, function () { + /** + * Just return a value to define the module export. + * This example returns an object, but the module + * can return a function as the exported value. + */ + + return function(lunr) { + // TinySegmenter 0.1 -- Super compact Japanese tokenizer in Javascript + // (c) 2008 Taku Kudo + // TinySegmenter is freely distributable under the terms of a new BSD licence. + // For details, see http://chasen.org/~taku/software/TinySegmenter/LICENCE.txt + + function TinySegmenter() { + var patterns = { + "[一二三四五六七八九十百千万億兆]":"M", + "[一-龠々〆ヵヶ]":"H", + "[ぁ-ん]":"I", + "[ァ-ヴーア-ン゙ー]":"K", + "[a-zA-Za-zA-Z]":"A", + "[0-90-9]":"N" + } + this.chartype_ = []; + for (var i in patterns) { + var regexp = new RegExp(i); + this.chartype_.push([regexp, patterns[i]]); + } + + this.BIAS__ = -332 + this.BC1__ = {"HH":6,"II":2461,"KH":406,"OH":-1378}; + this.BC2__ = {"AA":-3267,"AI":2744,"AN":-878,"HH":-4070,"HM":-1711,"HN":4012,"HO":3761,"IA":1327,"IH":-1184,"II":-1332,"IK":1721,"IO":5492,"KI":3831,"KK":-8741,"MH":-3132,"MK":3334,"OO":-2920}; + this.BC3__ = {"HH":996,"HI":626,"HK":-721,"HN":-1307,"HO":-836,"IH":-301,"KK":2762,"MK":1079,"MM":4034,"OA":-1652,"OH":266}; + this.BP1__ = {"BB":295,"OB":304,"OO":-125,"UB":352}; + this.BP2__ = {"BO":60,"OO":-1762}; + this.BQ1__ = {"BHH":1150,"BHM":1521,"BII":-1158,"BIM":886,"BMH":1208,"BNH":449,"BOH":-91,"BOO":-2597,"OHI":451,"OIH":-296,"OKA":1851,"OKH":-1020,"OKK":904,"OOO":2965}; + this.BQ2__ = {"BHH":118,"BHI":-1159,"BHM":466,"BIH":-919,"BKK":-1720,"BKO":864,"OHH":-1139,"OHM":-181,"OIH":153,"UHI":-1146}; + this.BQ3__ = {"BHH":-792,"BHI":2664,"BII":-299,"BKI":419,"BMH":937,"BMM":8335,"BNN":998,"BOH":775,"OHH":2174,"OHM":439,"OII":280,"OKH":1798,"OKI":-793,"OKO":-2242,"OMH":-2402,"OOO":11699}; + this.BQ4__ = {"BHH":-3895,"BIH":3761,"BII":-4654,"BIK":1348,"BKK":-1806,"BMI":-3385,"BOO":-12396,"OAH":926,"OHH":266,"OHK":-2036,"ONN":-973}; + this.BW1__ = {",と":660,",同":727,"B1あ":1404,"B1同":542,"、と":660,"、同":727,"」と":1682,"あっ":1505,"いう":1743,"いっ":-2055,"いる":672,"うし":-4817,"うん":665,"から":3472,"がら":600,"こう":-790,"こと":2083,"こん":-1262,"さら":-4143,"さん":4573,"した":2641,"して":1104,"すで":-3399,"そこ":1977,"それ":-871,"たち":1122,"ため":601,"った":3463,"つい":-802,"てい":805,"てき":1249,"でき":1127,"です":3445,"では":844,"とい":-4915,"とみ":1922,"どこ":3887,"ない":5713,"なっ":3015,"など":7379,"なん":-1113,"にし":2468,"には":1498,"にも":1671,"に対":-912,"の一":-501,"の中":741,"ませ":2448,"まで":1711,"まま":2600,"まる":-2155,"やむ":-1947,"よっ":-2565,"れた":2369,"れで":-913,"をし":1860,"を見":731,"亡く":-1886,"京都":2558,"取り":-2784,"大き":-2604,"大阪":1497,"平方":-2314,"引き":-1336,"日本":-195,"本当":-2423,"毎日":-2113,"目指":-724,"B1あ":1404,"B1同":542,"」と":1682}; + this.BW2__ = {"..":-11822,"11":-669,"――":-5730,"−−":-13175,"いう":-1609,"うか":2490,"かし":-1350,"かも":-602,"から":-7194,"かれ":4612,"がい":853,"がら":-3198,"きた":1941,"くな":-1597,"こと":-8392,"この":-4193,"させ":4533,"され":13168,"さん":-3977,"しい":-1819,"しか":-545,"した":5078,"して":972,"しな":939,"その":-3744,"たい":-1253,"たた":-662,"ただ":-3857,"たち":-786,"たと":1224,"たは":-939,"った":4589,"って":1647,"っと":-2094,"てい":6144,"てき":3640,"てく":2551,"ては":-3110,"ても":-3065,"でい":2666,"でき":-1528,"でし":-3828,"です":-4761,"でも":-4203,"とい":1890,"とこ":-1746,"とと":-2279,"との":720,"とみ":5168,"とも":-3941,"ない":-2488,"なが":-1313,"など":-6509,"なの":2614,"なん":3099,"にお":-1615,"にし":2748,"にな":2454,"によ":-7236,"に対":-14943,"に従":-4688,"に関":-11388,"のか":2093,"ので":-7059,"のに":-6041,"のの":-6125,"はい":1073,"はが":-1033,"はず":-2532,"ばれ":1813,"まし":-1316,"まで":-6621,"まれ":5409,"めて":-3153,"もい":2230,"もの":-10713,"らか":-944,"らし":-1611,"らに":-1897,"りし":651,"りま":1620,"れた":4270,"れて":849,"れば":4114,"ろう":6067,"われ":7901,"を通":-11877,"んだ":728,"んな":-4115,"一人":602,"一方":-1375,"一日":970,"一部":-1051,"上が":-4479,"会社":-1116,"出て":2163,"分の":-7758,"同党":970,"同日":-913,"大阪":-2471,"委員":-1250,"少な":-1050,"年度":-8669,"年間":-1626,"府県":-2363,"手権":-1982,"新聞":-4066,"日新":-722,"日本":-7068,"日米":3372,"曜日":-601,"朝鮮":-2355,"本人":-2697,"東京":-1543,"然と":-1384,"社会":-1276,"立て":-990,"第に":-1612,"米国":-4268,"11":-669}; + this.BW3__ = {"あた":-2194,"あり":719,"ある":3846,"い.":-1185,"い。":-1185,"いい":5308,"いえ":2079,"いく":3029,"いた":2056,"いっ":1883,"いる":5600,"いわ":1527,"うち":1117,"うと":4798,"えと":1454,"か.":2857,"か。":2857,"かけ":-743,"かっ":-4098,"かに":-669,"から":6520,"かり":-2670,"が,":1816,"が、":1816,"がき":-4855,"がけ":-1127,"がっ":-913,"がら":-4977,"がり":-2064,"きた":1645,"けど":1374,"こと":7397,"この":1542,"ころ":-2757,"さい":-714,"さを":976,"し,":1557,"し、":1557,"しい":-3714,"した":3562,"して":1449,"しな":2608,"しま":1200,"す.":-1310,"す。":-1310,"する":6521,"ず,":3426,"ず、":3426,"ずに":841,"そう":428,"た.":8875,"た。":8875,"たい":-594,"たの":812,"たり":-1183,"たる":-853,"だ.":4098,"だ。":4098,"だっ":1004,"った":-4748,"って":300,"てい":6240,"てお":855,"ても":302,"です":1437,"でに":-1482,"では":2295,"とう":-1387,"とし":2266,"との":541,"とも":-3543,"どう":4664,"ない":1796,"なく":-903,"など":2135,"に,":-1021,"に、":-1021,"にし":1771,"にな":1906,"には":2644,"の,":-724,"の、":-724,"の子":-1000,"は,":1337,"は、":1337,"べき":2181,"まし":1113,"ます":6943,"まっ":-1549,"まで":6154,"まれ":-793,"らし":1479,"られ":6820,"るる":3818,"れ,":854,"れ、":854,"れた":1850,"れて":1375,"れば":-3246,"れる":1091,"われ":-605,"んだ":606,"んで":798,"カ月":990,"会議":860,"入り":1232,"大会":2217,"始め":1681,"市":965,"新聞":-5055,"日,":974,"日、":974,"社会":2024,"カ月":990}; + this.TC1__ = {"AAA":1093,"HHH":1029,"HHM":580,"HII":998,"HOH":-390,"HOM":-331,"IHI":1169,"IOH":-142,"IOI":-1015,"IOM":467,"MMH":187,"OOI":-1832}; + this.TC2__ = {"HHO":2088,"HII":-1023,"HMM":-1154,"IHI":-1965,"KKH":703,"OII":-2649}; + this.TC3__ = {"AAA":-294,"HHH":346,"HHI":-341,"HII":-1088,"HIK":731,"HOH":-1486,"IHH":128,"IHI":-3041,"IHO":-1935,"IIH":-825,"IIM":-1035,"IOI":-542,"KHH":-1216,"KKA":491,"KKH":-1217,"KOK":-1009,"MHH":-2694,"MHM":-457,"MHO":123,"MMH":-471,"NNH":-1689,"NNO":662,"OHO":-3393}; + this.TC4__ = {"HHH":-203,"HHI":1344,"HHK":365,"HHM":-122,"HHN":182,"HHO":669,"HIH":804,"HII":679,"HOH":446,"IHH":695,"IHO":-2324,"IIH":321,"III":1497,"IIO":656,"IOO":54,"KAK":4845,"KKA":3386,"KKK":3065,"MHH":-405,"MHI":201,"MMH":-241,"MMM":661,"MOM":841}; + this.TQ1__ = {"BHHH":-227,"BHHI":316,"BHIH":-132,"BIHH":60,"BIII":1595,"BNHH":-744,"BOHH":225,"BOOO":-908,"OAKK":482,"OHHH":281,"OHIH":249,"OIHI":200,"OIIH":-68}; + this.TQ2__ = {"BIHH":-1401,"BIII":-1033,"BKAK":-543,"BOOO":-5591}; + this.TQ3__ = {"BHHH":478,"BHHM":-1073,"BHIH":222,"BHII":-504,"BIIH":-116,"BIII":-105,"BMHI":-863,"BMHM":-464,"BOMH":620,"OHHH":346,"OHHI":1729,"OHII":997,"OHMH":481,"OIHH":623,"OIIH":1344,"OKAK":2792,"OKHH":587,"OKKA":679,"OOHH":110,"OOII":-685}; + this.TQ4__ = {"BHHH":-721,"BHHM":-3604,"BHII":-966,"BIIH":-607,"BIII":-2181,"OAAA":-2763,"OAKK":180,"OHHH":-294,"OHHI":2446,"OHHO":480,"OHIH":-1573,"OIHH":1935,"OIHI":-493,"OIIH":626,"OIII":-4007,"OKAK":-8156}; + this.TW1__ = {"につい":-4681,"東京都":2026}; + this.TW2__ = {"ある程":-2049,"いった":-1256,"ころが":-2434,"しょう":3873,"その後":-4430,"だって":-1049,"ていた":1833,"として":-4657,"ともに":-4517,"もので":1882,"一気に":-792,"初めて":-1512,"同時に":-8097,"大きな":-1255,"対して":-2721,"社会党":-3216}; + this.TW3__ = {"いただ":-1734,"してい":1314,"として":-4314,"につい":-5483,"にとっ":-5989,"に当た":-6247,"ので,":-727,"ので、":-727,"のもの":-600,"れから":-3752,"十二月":-2287}; + this.TW4__ = {"いう.":8576,"いう。":8576,"からな":-2348,"してい":2958,"たが,":1516,"たが、":1516,"ている":1538,"という":1349,"ました":5543,"ません":1097,"ようと":-4258,"よると":5865}; + this.UC1__ = {"A":484,"K":93,"M":645,"O":-505}; + this.UC2__ = {"A":819,"H":1059,"I":409,"M":3987,"N":5775,"O":646}; + this.UC3__ = {"A":-1370,"I":2311}; + this.UC4__ = {"A":-2643,"H":1809,"I":-1032,"K":-3450,"M":3565,"N":3876,"O":6646}; + this.UC5__ = {"H":313,"I":-1238,"K":-799,"M":539,"O":-831}; + this.UC6__ = {"H":-506,"I":-253,"K":87,"M":247,"O":-387}; + this.UP1__ = {"O":-214}; + this.UP2__ = {"B":69,"O":935}; + this.UP3__ = {"B":189}; + this.UQ1__ = {"BH":21,"BI":-12,"BK":-99,"BN":142,"BO":-56,"OH":-95,"OI":477,"OK":410,"OO":-2422}; + this.UQ2__ = {"BH":216,"BI":113,"OK":1759}; + this.UQ3__ = {"BA":-479,"BH":42,"BI":1913,"BK":-7198,"BM":3160,"BN":6427,"BO":14761,"OI":-827,"ON":-3212}; + this.UW1__ = {",":156,"、":156,"「":-463,"あ":-941,"う":-127,"が":-553,"き":121,"こ":505,"で":-201,"と":-547,"ど":-123,"に":-789,"の":-185,"は":-847,"も":-466,"や":-470,"よ":182,"ら":-292,"り":208,"れ":169,"を":-446,"ん":-137,"・":-135,"主":-402,"京":-268,"区":-912,"午":871,"国":-460,"大":561,"委":729,"市":-411,"日":-141,"理":361,"生":-408,"県":-386,"都":-718,"「":-463,"・":-135}; + this.UW2__ = {",":-829,"、":-829,"〇":892,"「":-645,"」":3145,"あ":-538,"い":505,"う":134,"お":-502,"か":1454,"が":-856,"く":-412,"こ":1141,"さ":878,"ざ":540,"し":1529,"す":-675,"せ":300,"そ":-1011,"た":188,"だ":1837,"つ":-949,"て":-291,"で":-268,"と":-981,"ど":1273,"な":1063,"に":-1764,"の":130,"は":-409,"ひ":-1273,"べ":1261,"ま":600,"も":-1263,"や":-402,"よ":1639,"り":-579,"る":-694,"れ":571,"を":-2516,"ん":2095,"ア":-587,"カ":306,"キ":568,"ッ":831,"三":-758,"不":-2150,"世":-302,"中":-968,"主":-861,"事":492,"人":-123,"会":978,"保":362,"入":548,"初":-3025,"副":-1566,"北":-3414,"区":-422,"大":-1769,"天":-865,"太":-483,"子":-1519,"学":760,"実":1023,"小":-2009,"市":-813,"年":-1060,"強":1067,"手":-1519,"揺":-1033,"政":1522,"文":-1355,"新":-1682,"日":-1815,"明":-1462,"最":-630,"朝":-1843,"本":-1650,"東":-931,"果":-665,"次":-2378,"民":-180,"気":-1740,"理":752,"発":529,"目":-1584,"相":-242,"県":-1165,"立":-763,"第":810,"米":509,"自":-1353,"行":838,"西":-744,"見":-3874,"調":1010,"議":1198,"込":3041,"開":1758,"間":-1257,"「":-645,"」":3145,"ッ":831,"ア":-587,"カ":306,"キ":568}; + this.UW3__ = {",":4889,"1":-800,"−":-1723,"、":4889,"々":-2311,"〇":5827,"」":2670,"〓":-3573,"あ":-2696,"い":1006,"う":2342,"え":1983,"お":-4864,"か":-1163,"が":3271,"く":1004,"け":388,"げ":401,"こ":-3552,"ご":-3116,"さ":-1058,"し":-395,"す":584,"せ":3685,"そ":-5228,"た":842,"ち":-521,"っ":-1444,"つ":-1081,"て":6167,"で":2318,"と":1691,"ど":-899,"な":-2788,"に":2745,"の":4056,"は":4555,"ひ":-2171,"ふ":-1798,"へ":1199,"ほ":-5516,"ま":-4384,"み":-120,"め":1205,"も":2323,"や":-788,"よ":-202,"ら":727,"り":649,"る":5905,"れ":2773,"わ":-1207,"を":6620,"ん":-518,"ア":551,"グ":1319,"ス":874,"ッ":-1350,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278,"・":-3794,"一":-1619,"下":-1759,"世":-2087,"両":3815,"中":653,"主":-758,"予":-1193,"二":974,"人":2742,"今":792,"他":1889,"以":-1368,"低":811,"何":4265,"作":-361,"保":-2439,"元":4858,"党":3593,"全":1574,"公":-3030,"六":755,"共":-1880,"円":5807,"再":3095,"分":457,"初":2475,"別":1129,"前":2286,"副":4437,"力":365,"動":-949,"務":-1872,"化":1327,"北":-1038,"区":4646,"千":-2309,"午":-783,"協":-1006,"口":483,"右":1233,"各":3588,"合":-241,"同":3906,"和":-837,"員":4513,"国":642,"型":1389,"場":1219,"外":-241,"妻":2016,"学":-1356,"安":-423,"実":-1008,"家":1078,"小":-513,"少":-3102,"州":1155,"市":3197,"平":-1804,"年":2416,"広":-1030,"府":1605,"度":1452,"建":-2352,"当":-3885,"得":1905,"思":-1291,"性":1822,"戸":-488,"指":-3973,"政":-2013,"教":-1479,"数":3222,"文":-1489,"新":1764,"日":2099,"旧":5792,"昨":-661,"時":-1248,"曜":-951,"最":-937,"月":4125,"期":360,"李":3094,"村":364,"東":-805,"核":5156,"森":2438,"業":484,"氏":2613,"民":-1694,"決":-1073,"法":1868,"海":-495,"無":979,"物":461,"特":-3850,"生":-273,"用":914,"町":1215,"的":7313,"直":-1835,"省":792,"県":6293,"知":-1528,"私":4231,"税":401,"立":-960,"第":1201,"米":7767,"系":3066,"約":3663,"級":1384,"統":-4229,"総":1163,"線":1255,"者":6457,"能":725,"自":-2869,"英":785,"見":1044,"調":-562,"財":-733,"費":1777,"車":1835,"軍":1375,"込":-1504,"通":-1136,"選":-681,"郎":1026,"郡":4404,"部":1200,"金":2163,"長":421,"開":-1432,"間":1302,"関":-1282,"雨":2009,"電":-1045,"非":2066,"駅":1620,"1":-800,"」":2670,"・":-3794,"ッ":-1350,"ア":551,"グ":1319,"ス":874,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278}; + this.UW4__ = {",":3930,".":3508,"―":-4841,"、":3930,"。":3508,"〇":4999,"「":1895,"」":3798,"〓":-5156,"あ":4752,"い":-3435,"う":-640,"え":-2514,"お":2405,"か":530,"が":6006,"き":-4482,"ぎ":-3821,"く":-3788,"け":-4376,"げ":-4734,"こ":2255,"ご":1979,"さ":2864,"し":-843,"じ":-2506,"す":-731,"ず":1251,"せ":181,"そ":4091,"た":5034,"だ":5408,"ち":-3654,"っ":-5882,"つ":-1659,"て":3994,"で":7410,"と":4547,"な":5433,"に":6499,"ぬ":1853,"ね":1413,"の":7396,"は":8578,"ば":1940,"ひ":4249,"び":-4134,"ふ":1345,"へ":6665,"べ":-744,"ほ":1464,"ま":1051,"み":-2082,"む":-882,"め":-5046,"も":4169,"ゃ":-2666,"や":2795,"ょ":-1544,"よ":3351,"ら":-2922,"り":-9726,"る":-14896,"れ":-2613,"ろ":-4570,"わ":-1783,"を":13150,"ん":-2352,"カ":2145,"コ":1789,"セ":1287,"ッ":-724,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637,"・":-4371,"ー":-11870,"一":-2069,"中":2210,"予":782,"事":-190,"井":-1768,"人":1036,"以":544,"会":950,"体":-1286,"作":530,"側":4292,"先":601,"党":-2006,"共":-1212,"内":584,"円":788,"初":1347,"前":1623,"副":3879,"力":-302,"動":-740,"務":-2715,"化":776,"区":4517,"協":1013,"参":1555,"合":-1834,"和":-681,"員":-910,"器":-851,"回":1500,"国":-619,"園":-1200,"地":866,"場":-1410,"塁":-2094,"士":-1413,"多":1067,"大":571,"子":-4802,"学":-1397,"定":-1057,"寺":-809,"小":1910,"屋":-1328,"山":-1500,"島":-2056,"川":-2667,"市":2771,"年":374,"庁":-4556,"後":456,"性":553,"感":916,"所":-1566,"支":856,"改":787,"政":2182,"教":704,"文":522,"方":-856,"日":1798,"時":1829,"最":845,"月":-9066,"木":-485,"来":-442,"校":-360,"業":-1043,"氏":5388,"民":-2716,"気":-910,"沢":-939,"済":-543,"物":-735,"率":672,"球":-1267,"生":-1286,"産":-1101,"田":-2900,"町":1826,"的":2586,"目":922,"省":-3485,"県":2997,"空":-867,"立":-2112,"第":788,"米":2937,"系":786,"約":2171,"経":1146,"統":-1169,"総":940,"線":-994,"署":749,"者":2145,"能":-730,"般":-852,"行":-792,"規":792,"警":-1184,"議":-244,"谷":-1000,"賞":730,"車":-1481,"軍":1158,"輪":-1433,"込":-3370,"近":929,"道":-1291,"選":2596,"郎":-4866,"都":1192,"野":-1100,"銀":-2213,"長":357,"間":-2344,"院":-2297,"際":-2604,"電":-878,"領":-1659,"題":-792,"館":-1984,"首":1749,"高":2120,"「":1895,"」":3798,"・":-4371,"ッ":-724,"ー":-11870,"カ":2145,"コ":1789,"セ":1287,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637}; + this.UW5__ = {",":465,".":-299,"1":-514,"E2":-32768,"]":-2762,"、":465,"。":-299,"「":363,"あ":1655,"い":331,"う":-503,"え":1199,"お":527,"か":647,"が":-421,"き":1624,"ぎ":1971,"く":312,"げ":-983,"さ":-1537,"し":-1371,"す":-852,"だ":-1186,"ち":1093,"っ":52,"つ":921,"て":-18,"で":-850,"と":-127,"ど":1682,"な":-787,"に":-1224,"の":-635,"は":-578,"べ":1001,"み":502,"め":865,"ゃ":3350,"ょ":854,"り":-208,"る":429,"れ":504,"わ":419,"を":-1264,"ん":327,"イ":241,"ル":451,"ン":-343,"中":-871,"京":722,"会":-1153,"党":-654,"務":3519,"区":-901,"告":848,"員":2104,"大":-1296,"学":-548,"定":1785,"嵐":-1304,"市":-2991,"席":921,"年":1763,"思":872,"所":-814,"挙":1618,"新":-1682,"日":218,"月":-4353,"査":932,"格":1356,"機":-1508,"氏":-1347,"田":240,"町":-3912,"的":-3149,"相":1319,"省":-1052,"県":-4003,"研":-997,"社":-278,"空":-813,"統":1955,"者":-2233,"表":663,"語":-1073,"議":1219,"選":-1018,"郎":-368,"長":786,"間":1191,"題":2368,"館":-689,"1":-514,"E2":-32768,"「":363,"イ":241,"ル":451,"ン":-343}; + this.UW6__ = {",":227,".":808,"1":-270,"E1":306,"、":227,"。":808,"あ":-307,"う":189,"か":241,"が":-73,"く":-121,"こ":-200,"じ":1782,"す":383,"た":-428,"っ":573,"て":-1014,"で":101,"と":-105,"な":-253,"に":-149,"の":-417,"は":-236,"も":-206,"り":187,"る":-135,"を":195,"ル":-673,"ン":-496,"一":-277,"中":201,"件":-800,"会":624,"前":302,"区":1792,"員":-1212,"委":798,"学":-960,"市":887,"広":-695,"後":535,"業":-697,"相":753,"社":-507,"福":974,"空":-822,"者":1811,"連":463,"郎":1082,"1":-270,"E1":306,"ル":-673,"ン":-496}; + + return this; + } + TinySegmenter.prototype.ctype_ = function(str) { + for (var i in this.chartype_) { + if (str.match(this.chartype_[i][0])) { + return this.chartype_[i][1]; + } + } + return "O"; + } + + TinySegmenter.prototype.ts_ = function(v) { + if (v) { return v; } + return 0; + } + + TinySegmenter.prototype.segment = function(input) { + if (input == null || input == undefined || input == "") { + return []; + } + var result = []; + var seg = ["B3","B2","B1"]; + var ctype = ["O","O","O"]; + var o = input.split(""); + for (i = 0; i < o.length; ++i) { + seg.push(o[i]); + ctype.push(this.ctype_(o[i])) + } + seg.push("E1"); + seg.push("E2"); + seg.push("E3"); + ctype.push("O"); + ctype.push("O"); + ctype.push("O"); + var word = seg[3]; + var p1 = "U"; + var p2 = "U"; + var p3 = "U"; + for (var i = 4; i < seg.length - 3; ++i) { + var score = this.BIAS__; + var w1 = seg[i-3]; + var w2 = seg[i-2]; + var w3 = seg[i-1]; + var w4 = seg[i]; + var w5 = seg[i+1]; + var w6 = seg[i+2]; + var c1 = ctype[i-3]; + var c2 = ctype[i-2]; + var c3 = ctype[i-1]; + var c4 = ctype[i]; + var c5 = ctype[i+1]; + var c6 = ctype[i+2]; + score += this.ts_(this.UP1__[p1]); + score += this.ts_(this.UP2__[p2]); + score += this.ts_(this.UP3__[p3]); + score += this.ts_(this.BP1__[p1 + p2]); + score += this.ts_(this.BP2__[p2 + p3]); + score += this.ts_(this.UW1__[w1]); + score += this.ts_(this.UW2__[w2]); + score += this.ts_(this.UW3__[w3]); + score += this.ts_(this.UW4__[w4]); + score += this.ts_(this.UW5__[w5]); + score += this.ts_(this.UW6__[w6]); + score += this.ts_(this.BW1__[w2 + w3]); + score += this.ts_(this.BW2__[w3 + w4]); + score += this.ts_(this.BW3__[w4 + w5]); + score += this.ts_(this.TW1__[w1 + w2 + w3]); + score += this.ts_(this.TW2__[w2 + w3 + w4]); + score += this.ts_(this.TW3__[w3 + w4 + w5]); + score += this.ts_(this.TW4__[w4 + w5 + w6]); + score += this.ts_(this.UC1__[c1]); + score += this.ts_(this.UC2__[c2]); + score += this.ts_(this.UC3__[c3]); + score += this.ts_(this.UC4__[c4]); + score += this.ts_(this.UC5__[c5]); + score += this.ts_(this.UC6__[c6]); + score += this.ts_(this.BC1__[c2 + c3]); + score += this.ts_(this.BC2__[c3 + c4]); + score += this.ts_(this.BC3__[c4 + c5]); + score += this.ts_(this.TC1__[c1 + c2 + c3]); + score += this.ts_(this.TC2__[c2 + c3 + c4]); + score += this.ts_(this.TC3__[c3 + c4 + c5]); + score += this.ts_(this.TC4__[c4 + c5 + c6]); + // score += this.ts_(this.TC5__[c4 + c5 + c6]); + score += this.ts_(this.UQ1__[p1 + c1]); + score += this.ts_(this.UQ2__[p2 + c2]); + score += this.ts_(this.UQ3__[p3 + c3]); + score += this.ts_(this.BQ1__[p2 + c2 + c3]); + score += this.ts_(this.BQ2__[p2 + c3 + c4]); + score += this.ts_(this.BQ3__[p3 + c2 + c3]); + score += this.ts_(this.BQ4__[p3 + c3 + c4]); + score += this.ts_(this.TQ1__[p2 + c1 + c2 + c3]); + score += this.ts_(this.TQ2__[p2 + c2 + c3 + c4]); + score += this.ts_(this.TQ3__[p3 + c1 + c2 + c3]); + score += this.ts_(this.TQ4__[p3 + c2 + c3 + c4]); + var p = "O"; + if (score > 0) { + result.push(word); + word = ""; + p = "B"; + } + p1 = p2; + p2 = p3; + p3 = p; + word += seg[i]; + } + result.push(word); + + return result; + } + + lunr.TinySegmenter = TinySegmenter; + }; + +})); \ No newline at end of file diff --git a/assets/javascripts/lunr/wordcut.js b/assets/javascripts/lunr/wordcut.js new file mode 100644 index 00000000..146f4b44 --- /dev/null +++ b/assets/javascripts/lunr/wordcut.js @@ -0,0 +1,6708 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}(g.lunr || (g.lunr = {})).wordcut = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 1; + }) + this.addWords(words, false) + } + if(finalize){ + this.finalizeDict(); + } + }, + + dictSeek: function (l, r, ch, strOffset, pos) { + var ans = null; + while (l <= r) { + var m = Math.floor((l + r) / 2), + dict_item = this.dict[m], + len = dict_item.length; + if (len <= strOffset) { + l = m + 1; + } else { + var ch_ = dict_item[strOffset]; + if (ch_ < ch) { + l = m + 1; + } else if (ch_ > ch) { + r = m - 1; + } else { + ans = m; + if (pos == LEFT) { + r = m - 1; + } else { + l = m + 1; + } + } + } + } + return ans; + }, + + isFinal: function (acceptor) { + return this.dict[acceptor.l].length == acceptor.strOffset; + }, + + createAcceptor: function () { + return { + l: 0, + r: this.dict.length - 1, + strOffset: 0, + isFinal: false, + dict: this, + transit: function (ch) { + return this.dict.transit(this, ch); + }, + isError: false, + tag: "DICT", + w: 1, + type: "DICT" + }; + }, + + transit: function (acceptor, ch) { + var l = this.dictSeek(acceptor.l, + acceptor.r, + ch, + acceptor.strOffset, + LEFT); + if (l !== null) { + var r = this.dictSeek(l, + acceptor.r, + ch, + acceptor.strOffset, + RIGHT); + acceptor.l = l; + acceptor.r = r; + acceptor.strOffset++; + acceptor.isFinal = this.isFinal(acceptor); + } else { + acceptor.isError = true; + } + return acceptor; + }, + + sortuniq: function(a){ + return a.sort().filter(function(item, pos, arr){ + return !pos || item != arr[pos - 1]; + }) + }, + + flatten: function(a){ + //[[1,2],[3]] -> [1,2,3] + return [].concat.apply([], a); + } +}; +module.exports = WordcutDict; + +}).call(this,"/dist/tmp") +},{"glob":16,"path":22}],3:[function(require,module,exports){ +var WordRule = { + createAcceptor: function(tag) { + if (tag["WORD_RULE"]) + return null; + + return {strOffset: 0, + isFinal: false, + transit: function(ch) { + var lch = ch.toLowerCase(); + if (lch >= "a" && lch <= "z") { + this.isFinal = true; + this.strOffset++; + } else { + this.isError = true; + } + return this; + }, + isError: false, + tag: "WORD_RULE", + type: "WORD_RULE", + w: 1}; + } +}; + +var NumberRule = { + createAcceptor: function(tag) { + if (tag["NUMBER_RULE"]) + return null; + + return {strOffset: 0, + isFinal: false, + transit: function(ch) { + if (ch >= "0" && ch <= "9") { + this.isFinal = true; + this.strOffset++; + } else { + this.isError = true; + } + return this; + }, + isError: false, + tag: "NUMBER_RULE", + type: "NUMBER_RULE", + w: 1}; + } +}; + +var SpaceRule = { + tag: "SPACE_RULE", + createAcceptor: function(tag) { + + if (tag["SPACE_RULE"]) + return null; + + return {strOffset: 0, + isFinal: false, + transit: function(ch) { + if (ch == " " || ch == "\t" || ch == "\r" || ch == "\n" || + ch == "\u00A0" || ch=="\u2003"//nbsp and emsp + ) { + this.isFinal = true; + this.strOffset++; + } else { + this.isError = true; + } + return this; + }, + isError: false, + tag: SpaceRule.tag, + w: 1, + type: "SPACE_RULE"}; + } +} + +var SingleSymbolRule = { + tag: "SINSYM", + createAcceptor: function(tag) { + return {strOffset: 0, + isFinal: false, + transit: function(ch) { + if (this.strOffset == 0 && ch.match(/^[\@\(\)\/\,\-\."`]$/)) { + this.isFinal = true; + this.strOffset++; + } else { + this.isError = true; + } + return this; + }, + isError: false, + tag: "SINSYM", + w: 1, + type: "SINSYM"}; + } +} + + +var LatinRules = [WordRule, SpaceRule, SingleSymbolRule, NumberRule]; + +module.exports = LatinRules; + +},{}],4:[function(require,module,exports){ +var _ = require("underscore") + , WordcutCore = require("./wordcut_core"); +var PathInfoBuilder = { + + /* + buildByPartAcceptors: function(path, acceptors, i) { + var + var genInfos = partAcceptors.reduce(function(genInfos, acceptor) { + + }, []); + + return genInfos; + } + */ + + buildByAcceptors: function(path, finalAcceptors, i) { + var self = this; + var infos = finalAcceptors.map(function(acceptor) { + var p = i - acceptor.strOffset + 1 + , _info = path[p]; + + var info = {p: p, + mw: _info.mw + (acceptor.mw === undefined ? 0 : acceptor.mw), + w: acceptor.w + _info.w, + unk: (acceptor.unk ? acceptor.unk : 0) + _info.unk, + type: acceptor.type}; + + if (acceptor.type == "PART") { + for(var j = p + 1; j <= i; j++) { + path[j].merge = p; + } + info.merge = p; + } + + return info; + }); + return infos.filter(function(info) { return info; }); + }, + + fallback: function(path, leftBoundary, text, i) { + var _info = path[leftBoundary]; + if (text[i].match(/[\u0E48-\u0E4E]/)) { + if (leftBoundary != 0) + leftBoundary = path[leftBoundary].p; + return {p: leftBoundary, + mw: 0, + w: 1 + _info.w, + unk: 1 + _info.unk, + type: "UNK"}; +/* } else if(leftBoundary > 0 && path[leftBoundary].type !== "UNK") { + leftBoundary = path[leftBoundary].p; + return {p: leftBoundary, + w: 1 + _info.w, + unk: 1 + _info.unk, + type: "UNK"}; */ + } else { + return {p: leftBoundary, + mw: _info.mw, + w: 1 + _info.w, + unk: 1 + _info.unk, + type: "UNK"}; + } + }, + + build: function(path, finalAcceptors, i, leftBoundary, text) { + var basicPathInfos = this.buildByAcceptors(path, finalAcceptors, i); + if (basicPathInfos.length > 0) { + return basicPathInfos; + } else { + return [this.fallback(path, leftBoundary, text, i)]; + } + } +}; + +module.exports = function() { + return _.clone(PathInfoBuilder); +} + +},{"./wordcut_core":8,"underscore":25}],5:[function(require,module,exports){ +var _ = require("underscore"); + + +var PathSelector = { + selectPath: function(paths) { + var path = paths.reduce(function(selectedPath, path) { + if (selectedPath == null) { + return path; + } else { + if (path.unk < selectedPath.unk) + return path; + if (path.unk == selectedPath.unk) { + if (path.mw < selectedPath.mw) + return path + if (path.mw == selectedPath.mw) { + if (path.w < selectedPath.w) + return path; + } + } + return selectedPath; + } + }, null); + return path; + }, + + createPath: function() { + return [{p:null, w:0, unk:0, type: "INIT", mw:0}]; + } +}; + +module.exports = function() { + return _.clone(PathSelector); +}; + +},{"underscore":25}],6:[function(require,module,exports){ +function isMatch(pat, offset, ch) { + if (pat.length <= offset) + return false; + var _ch = pat[offset]; + return _ch == ch || + (_ch.match(/[กข]/) && ch.match(/[ก-ฮ]/)) || + (_ch.match(/[มบ]/) && ch.match(/[ก-ฮ]/)) || + (_ch.match(/\u0E49/) && ch.match(/[\u0E48-\u0E4B]/)); +} + +var Rule0 = { + pat: "เหก็ม", + createAcceptor: function(tag) { + return {strOffset: 0, + isFinal: false, + transit: function(ch) { + if (isMatch(Rule0.pat, this.strOffset,ch)) { + this.isFinal = (this.strOffset + 1 == Rule0.pat.length); + this.strOffset++; + } else { + this.isError = true; + } + return this; + }, + isError: false, + tag: "THAI_RULE", + type: "THAI_RULE", + w: 1}; + } +}; + +var PartRule = { + createAcceptor: function(tag) { + return {strOffset: 0, + patterns: [ + "แก", "เก", "ก้", "กก์", "กา", "กี", "กิ", "กืก" + ], + isFinal: false, + transit: function(ch) { + var offset = this.strOffset; + this.patterns = this.patterns.filter(function(pat) { + return isMatch(pat, offset, ch); + }); + + if (this.patterns.length > 0) { + var len = 1 + offset; + this.isFinal = this.patterns.some(function(pat) { + return pat.length == len; + }); + this.strOffset++; + } else { + this.isError = true; + } + return this; + }, + isError: false, + tag: "PART", + type: "PART", + unk: 1, + w: 1}; + } +}; + +var ThaiRules = [Rule0, PartRule]; + +module.exports = ThaiRules; + +},{}],7:[function(require,module,exports){ +var sys = require("sys") + , WordcutDict = require("./dict") + , WordcutCore = require("./wordcut_core") + , PathInfoBuilder = require("./path_info_builder") + , PathSelector = require("./path_selector") + , Acceptors = require("./acceptors") + , latinRules = require("./latin_rules") + , thaiRules = require("./thai_rules") + , _ = require("underscore"); + + +var Wordcut = Object.create(WordcutCore); +Wordcut.defaultPathInfoBuilder = PathInfoBuilder; +Wordcut.defaultPathSelector = PathSelector; +Wordcut.defaultAcceptors = Acceptors; +Wordcut.defaultLatinRules = latinRules; +Wordcut.defaultThaiRules = thaiRules; +Wordcut.defaultDict = WordcutDict; + + +Wordcut.initNoDict = function(dict_path) { + var self = this; + self.pathInfoBuilder = new self.defaultPathInfoBuilder; + self.pathSelector = new self.defaultPathSelector; + self.acceptors = new self.defaultAcceptors; + self.defaultLatinRules.forEach(function(rule) { + self.acceptors.creators.push(rule); + }); + self.defaultThaiRules.forEach(function(rule) { + self.acceptors.creators.push(rule); + }); +}; + +Wordcut.init = function(dict_path, withDefault, additionalWords) { + withDefault = withDefault || false; + this.initNoDict(); + var dict = _.clone(this.defaultDict); + dict.init(dict_path, withDefault, additionalWords); + this.acceptors.creators.push(dict); +}; + +module.exports = Wordcut; + +},{"./acceptors":1,"./dict":2,"./latin_rules":3,"./path_info_builder":4,"./path_selector":5,"./thai_rules":6,"./wordcut_core":8,"sys":28,"underscore":25}],8:[function(require,module,exports){ +var WordcutCore = { + + buildPath: function(text) { + var self = this + , path = self.pathSelector.createPath() + , leftBoundary = 0; + self.acceptors.reset(); + for (var i = 0; i < text.length; i++) { + var ch = text[i]; + self.acceptors.transit(ch); + + var possiblePathInfos = self + .pathInfoBuilder + .build(path, + self.acceptors.getFinalAcceptors(), + i, + leftBoundary, + text); + var selectedPath = self.pathSelector.selectPath(possiblePathInfos) + + path.push(selectedPath); + if (selectedPath.type !== "UNK") { + leftBoundary = i; + } + } + return path; + }, + + pathToRanges: function(path) { + var e = path.length - 1 + , ranges = []; + + while (e > 0) { + var info = path[e] + , s = info.p; + + if (info.merge !== undefined && ranges.length > 0) { + var r = ranges[ranges.length - 1]; + r.s = info.merge; + s = r.s; + } else { + ranges.push({s:s, e:e}); + } + e = s; + } + return ranges.reverse(); + }, + + rangesToText: function(text, ranges, delimiter) { + return ranges.map(function(r) { + return text.substring(r.s, r.e); + }).join(delimiter); + }, + + cut: function(text, delimiter) { + var path = this.buildPath(text) + , ranges = this.pathToRanges(path); + return this + .rangesToText(text, ranges, + (delimiter === undefined ? "|" : delimiter)); + }, + + cutIntoRanges: function(text, noText) { + var path = this.buildPath(text) + , ranges = this.pathToRanges(path); + + if (!noText) { + ranges.forEach(function(r) { + r.text = text.substring(r.s, r.e); + }); + } + return ranges; + }, + + cutIntoArray: function(text) { + var path = this.buildPath(text) + , ranges = this.pathToRanges(path); + + return ranges.map(function(r) { + return text.substring(r.s, r.e) + }); + } +}; + +module.exports = WordcutCore; + +},{}],9:[function(require,module,exports){ +// http://wiki.commonjs.org/wiki/Unit_Testing/1.0 +// +// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8! +// +// Originally from narwhal.js (http://narwhaljs.org) +// Copyright (c) 2009 Thomas Robinson <280north.com> +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the 'Software'), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +// when used in node, this will actually load the util module we depend on +// versus loading the builtin util module as happens otherwise +// this is a bug in node module loading as far as I am concerned +var util = require('util/'); + +var pSlice = Array.prototype.slice; +var hasOwn = Object.prototype.hasOwnProperty; + +// 1. The assert module provides functions that throw +// AssertionError's when particular conditions are not met. The +// assert module must conform to the following interface. + +var assert = module.exports = ok; + +// 2. The AssertionError is defined in assert. +// new assert.AssertionError({ message: message, +// actual: actual, +// expected: expected }) + +assert.AssertionError = function AssertionError(options) { + this.name = 'AssertionError'; + this.actual = options.actual; + this.expected = options.expected; + this.operator = options.operator; + if (options.message) { + this.message = options.message; + this.generatedMessage = false; + } else { + this.message = getMessage(this); + this.generatedMessage = true; + } + var stackStartFunction = options.stackStartFunction || fail; + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, stackStartFunction); + } + else { + // non v8 browsers so we can have a stacktrace + var err = new Error(); + if (err.stack) { + var out = err.stack; + + // try to strip useless frames + var fn_name = stackStartFunction.name; + var idx = out.indexOf('\n' + fn_name); + if (idx >= 0) { + // once we have located the function frame + // we need to strip out everything before it (and its line) + var next_line = out.indexOf('\n', idx + 1); + out = out.substring(next_line + 1); + } + + this.stack = out; + } + } +}; + +// assert.AssertionError instanceof Error +util.inherits(assert.AssertionError, Error); + +function replacer(key, value) { + if (util.isUndefined(value)) { + return '' + value; + } + if (util.isNumber(value) && !isFinite(value)) { + return value.toString(); + } + if (util.isFunction(value) || util.isRegExp(value)) { + return value.toString(); + } + return value; +} + +function truncate(s, n) { + if (util.isString(s)) { + return s.length < n ? s : s.slice(0, n); + } else { + return s; + } +} + +function getMessage(self) { + return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' + + self.operator + ' ' + + truncate(JSON.stringify(self.expected, replacer), 128); +} + +// At present only the three keys mentioned above are used and +// understood by the spec. Implementations or sub modules can pass +// other keys to the AssertionError's constructor - they will be +// ignored. + +// 3. All of the following functions must throw an AssertionError +// when a corresponding condition is not met, with a message that +// may be undefined if not provided. All assertion methods provide +// both the actual and expected values to the assertion error for +// display purposes. + +function fail(actual, expected, message, operator, stackStartFunction) { + throw new assert.AssertionError({ + message: message, + actual: actual, + expected: expected, + operator: operator, + stackStartFunction: stackStartFunction + }); +} + +// EXTENSION! allows for well behaved errors defined elsewhere. +assert.fail = fail; + +// 4. Pure assertion tests whether a value is truthy, as determined +// by !!guard. +// assert.ok(guard, message_opt); +// This statement is equivalent to assert.equal(true, !!guard, +// message_opt);. To test strictly for the value true, use +// assert.strictEqual(true, guard, message_opt);. + +function ok(value, message) { + if (!value) fail(value, true, message, '==', assert.ok); +} +assert.ok = ok; + +// 5. The equality assertion tests shallow, coercive equality with +// ==. +// assert.equal(actual, expected, message_opt); + +assert.equal = function equal(actual, expected, message) { + if (actual != expected) fail(actual, expected, message, '==', assert.equal); +}; + +// 6. The non-equality assertion tests for whether two objects are not equal +// with != assert.notEqual(actual, expected, message_opt); + +assert.notEqual = function notEqual(actual, expected, message) { + if (actual == expected) { + fail(actual, expected, message, '!=', assert.notEqual); + } +}; + +// 7. The equivalence assertion tests a deep equality relation. +// assert.deepEqual(actual, expected, message_opt); + +assert.deepEqual = function deepEqual(actual, expected, message) { + if (!_deepEqual(actual, expected)) { + fail(actual, expected, message, 'deepEqual', assert.deepEqual); + } +}; + +function _deepEqual(actual, expected) { + // 7.1. All identical values are equivalent, as determined by ===. + if (actual === expected) { + return true; + + } else if (util.isBuffer(actual) && util.isBuffer(expected)) { + if (actual.length != expected.length) return false; + + for (var i = 0; i < actual.length; i++) { + if (actual[i] !== expected[i]) return false; + } + + return true; + + // 7.2. If the expected value is a Date object, the actual value is + // equivalent if it is also a Date object that refers to the same time. + } else if (util.isDate(actual) && util.isDate(expected)) { + return actual.getTime() === expected.getTime(); + + // 7.3 If the expected value is a RegExp object, the actual value is + // equivalent if it is also a RegExp object with the same source and + // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`). + } else if (util.isRegExp(actual) && util.isRegExp(expected)) { + return actual.source === expected.source && + actual.global === expected.global && + actual.multiline === expected.multiline && + actual.lastIndex === expected.lastIndex && + actual.ignoreCase === expected.ignoreCase; + + // 7.4. Other pairs that do not both pass typeof value == 'object', + // equivalence is determined by ==. + } else if (!util.isObject(actual) && !util.isObject(expected)) { + return actual == expected; + + // 7.5 For all other Object pairs, including Array objects, equivalence is + // determined by having the same number of owned properties (as verified + // with Object.prototype.hasOwnProperty.call), the same set of keys + // (although not necessarily the same order), equivalent values for every + // corresponding key, and an identical 'prototype' property. Note: this + // accounts for both named and indexed properties on Arrays. + } else { + return objEquiv(actual, expected); + } +} + +function isArguments(object) { + return Object.prototype.toString.call(object) == '[object Arguments]'; +} + +function objEquiv(a, b) { + if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b)) + return false; + // an identical 'prototype' property. + if (a.prototype !== b.prototype) return false; + // if one is a primitive, the other must be same + if (util.isPrimitive(a) || util.isPrimitive(b)) { + return a === b; + } + var aIsArgs = isArguments(a), + bIsArgs = isArguments(b); + if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs)) + return false; + if (aIsArgs) { + a = pSlice.call(a); + b = pSlice.call(b); + return _deepEqual(a, b); + } + var ka = objectKeys(a), + kb = objectKeys(b), + key, i; + // having the same number of owned properties (keys incorporates + // hasOwnProperty) + if (ka.length != kb.length) + return false; + //the same set of keys (although not necessarily the same order), + ka.sort(); + kb.sort(); + //~~~cheap key test + for (i = ka.length - 1; i >= 0; i--) { + if (ka[i] != kb[i]) + return false; + } + //equivalent values for every corresponding key, and + //~~~possibly expensive deep test + for (i = ka.length - 1; i >= 0; i--) { + key = ka[i]; + if (!_deepEqual(a[key], b[key])) return false; + } + return true; +} + +// 8. The non-equivalence assertion tests for any deep inequality. +// assert.notDeepEqual(actual, expected, message_opt); + +assert.notDeepEqual = function notDeepEqual(actual, expected, message) { + if (_deepEqual(actual, expected)) { + fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual); + } +}; + +// 9. The strict equality assertion tests strict equality, as determined by ===. +// assert.strictEqual(actual, expected, message_opt); + +assert.strictEqual = function strictEqual(actual, expected, message) { + if (actual !== expected) { + fail(actual, expected, message, '===', assert.strictEqual); + } +}; + +// 10. The strict non-equality assertion tests for strict inequality, as +// determined by !==. assert.notStrictEqual(actual, expected, message_opt); + +assert.notStrictEqual = function notStrictEqual(actual, expected, message) { + if (actual === expected) { + fail(actual, expected, message, '!==', assert.notStrictEqual); + } +}; + +function expectedException(actual, expected) { + if (!actual || !expected) { + return false; + } + + if (Object.prototype.toString.call(expected) == '[object RegExp]') { + return expected.test(actual); + } else if (actual instanceof expected) { + return true; + } else if (expected.call({}, actual) === true) { + return true; + } + + return false; +} + +function _throws(shouldThrow, block, expected, message) { + var actual; + + if (util.isString(expected)) { + message = expected; + expected = null; + } + + try { + block(); + } catch (e) { + actual = e; + } + + message = (expected && expected.name ? ' (' + expected.name + ').' : '.') + + (message ? ' ' + message : '.'); + + if (shouldThrow && !actual) { + fail(actual, expected, 'Missing expected exception' + message); + } + + if (!shouldThrow && expectedException(actual, expected)) { + fail(actual, expected, 'Got unwanted exception' + message); + } + + if ((shouldThrow && actual && expected && + !expectedException(actual, expected)) || (!shouldThrow && actual)) { + throw actual; + } +} + +// 11. Expected to throw an error: +// assert.throws(block, Error_opt, message_opt); + +assert.throws = function(block, /*optional*/error, /*optional*/message) { + _throws.apply(this, [true].concat(pSlice.call(arguments))); +}; + +// EXTENSION! This is annoying to write outside this module. +assert.doesNotThrow = function(block, /*optional*/message) { + _throws.apply(this, [false].concat(pSlice.call(arguments))); +}; + +assert.ifError = function(err) { if (err) {throw err;}}; + +var objectKeys = Object.keys || function (obj) { + var keys = []; + for (var key in obj) { + if (hasOwn.call(obj, key)) keys.push(key); + } + return keys; +}; + +},{"util/":28}],10:[function(require,module,exports){ +'use strict'; +module.exports = balanced; +function balanced(a, b, str) { + if (a instanceof RegExp) a = maybeMatch(a, str); + if (b instanceof RegExp) b = maybeMatch(b, str); + + var r = range(a, b, str); + + return r && { + start: r[0], + end: r[1], + pre: str.slice(0, r[0]), + body: str.slice(r[0] + a.length, r[1]), + post: str.slice(r[1] + b.length) + }; +} + +function maybeMatch(reg, str) { + var m = str.match(reg); + return m ? m[0] : null; +} + +balanced.range = range; +function range(a, b, str) { + var begs, beg, left, right, result; + var ai = str.indexOf(a); + var bi = str.indexOf(b, ai + 1); + var i = ai; + + if (ai >= 0 && bi > 0) { + begs = []; + left = str.length; + + while (i >= 0 && !result) { + if (i == ai) { + begs.push(i); + ai = str.indexOf(a, i + 1); + } else if (begs.length == 1) { + result = [ begs.pop(), bi ]; + } else { + beg = begs.pop(); + if (beg < left) { + left = beg; + right = bi; + } + + bi = str.indexOf(b, i + 1); + } + + i = ai < bi && ai >= 0 ? ai : bi; + } + + if (begs.length) { + result = [ left, right ]; + } + } + + return result; +} + +},{}],11:[function(require,module,exports){ +var concatMap = require('concat-map'); +var balanced = require('balanced-match'); + +module.exports = expandTop; + +var escSlash = '\0SLASH'+Math.random()+'\0'; +var escOpen = '\0OPEN'+Math.random()+'\0'; +var escClose = '\0CLOSE'+Math.random()+'\0'; +var escComma = '\0COMMA'+Math.random()+'\0'; +var escPeriod = '\0PERIOD'+Math.random()+'\0'; + +function numeric(str) { + return parseInt(str, 10) == str + ? parseInt(str, 10) + : str.charCodeAt(0); +} + +function escapeBraces(str) { + return str.split('\\\\').join(escSlash) + .split('\\{').join(escOpen) + .split('\\}').join(escClose) + .split('\\,').join(escComma) + .split('\\.').join(escPeriod); +} + +function unescapeBraces(str) { + return str.split(escSlash).join('\\') + .split(escOpen).join('{') + .split(escClose).join('}') + .split(escComma).join(',') + .split(escPeriod).join('.'); +} + + +// Basically just str.split(","), but handling cases +// where we have nested braced sections, which should be +// treated as individual members, like {a,{b,c},d} +function parseCommaParts(str) { + if (!str) + return ['']; + + var parts = []; + var m = balanced('{', '}', str); + + if (!m) + return str.split(','); + + var pre = m.pre; + var body = m.body; + var post = m.post; + var p = pre.split(','); + + p[p.length-1] += '{' + body + '}'; + var postParts = parseCommaParts(post); + if (post.length) { + p[p.length-1] += postParts.shift(); + p.push.apply(p, postParts); + } + + parts.push.apply(parts, p); + + return parts; +} + +function expandTop(str) { + if (!str) + return []; + + // I don't know why Bash 4.3 does this, but it does. + // Anything starting with {} will have the first two bytes preserved + // but *only* at the top level, so {},a}b will not expand to anything, + // but a{},b}c will be expanded to [a}c,abc]. + // One could argue that this is a bug in Bash, but since the goal of + // this module is to match Bash's rules, we escape a leading {} + if (str.substr(0, 2) === '{}') { + str = '\\{\\}' + str.substr(2); + } + + return expand(escapeBraces(str), true).map(unescapeBraces); +} + +function identity(e) { + return e; +} + +function embrace(str) { + return '{' + str + '}'; +} +function isPadded(el) { + return /^-?0\d/.test(el); +} + +function lte(i, y) { + return i <= y; +} +function gte(i, y) { + return i >= y; +} + +function expand(str, isTop) { + var expansions = []; + + var m = balanced('{', '}', str); + if (!m || /\$$/.test(m.pre)) return [str]; + + var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); + var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); + var isSequence = isNumericSequence || isAlphaSequence; + var isOptions = m.body.indexOf(',') >= 0; + if (!isSequence && !isOptions) { + // {a},b} + if (m.post.match(/,.*\}/)) { + str = m.pre + '{' + m.body + escClose + m.post; + return expand(str); + } + return [str]; + } + + var n; + if (isSequence) { + n = m.body.split(/\.\./); + } else { + n = parseCommaParts(m.body); + if (n.length === 1) { + // x{{a,b}}y ==> x{a}y x{b}y + n = expand(n[0], false).map(embrace); + if (n.length === 1) { + var post = m.post.length + ? expand(m.post, false) + : ['']; + return post.map(function(p) { + return m.pre + n[0] + p; + }); + } + } + } + + // at this point, n is the parts, and we know it's not a comma set + // with a single entry. + + // no need to expand pre, since it is guaranteed to be free of brace-sets + var pre = m.pre; + var post = m.post.length + ? expand(m.post, false) + : ['']; + + var N; + + if (isSequence) { + var x = numeric(n[0]); + var y = numeric(n[1]); + var width = Math.max(n[0].length, n[1].length) + var incr = n.length == 3 + ? Math.abs(numeric(n[2])) + : 1; + var test = lte; + var reverse = y < x; + if (reverse) { + incr *= -1; + test = gte; + } + var pad = n.some(isPadded); + + N = []; + + for (var i = x; test(i, y); i += incr) { + var c; + if (isAlphaSequence) { + c = String.fromCharCode(i); + if (c === '\\') + c = ''; + } else { + c = String(i); + if (pad) { + var need = width - c.length; + if (need > 0) { + var z = new Array(need + 1).join('0'); + if (i < 0) + c = '-' + z + c.slice(1); + else + c = z + c; + } + } + } + N.push(c); + } + } else { + N = concatMap(n, function(el) { return expand(el, false) }); + } + + for (var j = 0; j < N.length; j++) { + for (var k = 0; k < post.length; k++) { + var expansion = pre + N[j] + post[k]; + if (!isTop || isSequence || expansion) + expansions.push(expansion); + } + } + + return expansions; +} + + +},{"balanced-match":10,"concat-map":13}],12:[function(require,module,exports){ + +},{}],13:[function(require,module,exports){ +module.exports = function (xs, fn) { + var res = []; + for (var i = 0; i < xs.length; i++) { + var x = fn(xs[i], i); + if (isArray(x)) res.push.apply(res, x); + else res.push(x); + } + return res; +}; + +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; + +},{}],14:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +function EventEmitter() { + this._events = this._events || {}; + this._maxListeners = this._maxListeners || undefined; +} +module.exports = EventEmitter; + +// Backwards-compat with node 0.10.x +EventEmitter.EventEmitter = EventEmitter; + +EventEmitter.prototype._events = undefined; +EventEmitter.prototype._maxListeners = undefined; + +// By default EventEmitters will print a warning if more than 10 listeners are +// added to it. This is a useful default which helps finding memory leaks. +EventEmitter.defaultMaxListeners = 10; + +// Obviously not all Emitters should be limited to 10. This function allows +// that to be increased. Set to zero for unlimited. +EventEmitter.prototype.setMaxListeners = function(n) { + if (!isNumber(n) || n < 0 || isNaN(n)) + throw TypeError('n must be a positive number'); + this._maxListeners = n; + return this; +}; + +EventEmitter.prototype.emit = function(type) { + var er, handler, len, args, i, listeners; + + if (!this._events) + this._events = {}; + + // If there is no 'error' event listener then throw. + if (type === 'error') { + if (!this._events.error || + (isObject(this._events.error) && !this._events.error.length)) { + er = arguments[1]; + if (er instanceof Error) { + throw er; // Unhandled 'error' event + } + throw TypeError('Uncaught, unspecified "error" event.'); + } + } + + handler = this._events[type]; + + if (isUndefined(handler)) + return false; + + if (isFunction(handler)) { + switch (arguments.length) { + // fast cases + case 1: + handler.call(this); + break; + case 2: + handler.call(this, arguments[1]); + break; + case 3: + handler.call(this, arguments[1], arguments[2]); + break; + // slower + default: + len = arguments.length; + args = new Array(len - 1); + for (i = 1; i < len; i++) + args[i - 1] = arguments[i]; + handler.apply(this, args); + } + } else if (isObject(handler)) { + len = arguments.length; + args = new Array(len - 1); + for (i = 1; i < len; i++) + args[i - 1] = arguments[i]; + + listeners = handler.slice(); + len = listeners.length; + for (i = 0; i < len; i++) + listeners[i].apply(this, args); + } + + return true; +}; + +EventEmitter.prototype.addListener = function(type, listener) { + var m; + + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + if (!this._events) + this._events = {}; + + // To avoid recursion in the case that type === "newListener"! Before + // adding it to the listeners, first emit "newListener". + if (this._events.newListener) + this.emit('newListener', type, + isFunction(listener.listener) ? + listener.listener : listener); + + if (!this._events[type]) + // Optimize the case of one listener. Don't need the extra array object. + this._events[type] = listener; + else if (isObject(this._events[type])) + // If we've already got an array, just append. + this._events[type].push(listener); + else + // Adding the second element, need to change to array. + this._events[type] = [this._events[type], listener]; + + // Check for listener leak + if (isObject(this._events[type]) && !this._events[type].warned) { + var m; + if (!isUndefined(this._maxListeners)) { + m = this._maxListeners; + } else { + m = EventEmitter.defaultMaxListeners; + } + + if (m && m > 0 && this._events[type].length > m) { + this._events[type].warned = true; + console.error('(node) warning: possible EventEmitter memory ' + + 'leak detected. %d listeners added. ' + + 'Use emitter.setMaxListeners() to increase limit.', + this._events[type].length); + if (typeof console.trace === 'function') { + // not supported in IE 10 + console.trace(); + } + } + } + + return this; +}; + +EventEmitter.prototype.on = EventEmitter.prototype.addListener; + +EventEmitter.prototype.once = function(type, listener) { + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + var fired = false; + + function g() { + this.removeListener(type, g); + + if (!fired) { + fired = true; + listener.apply(this, arguments); + } + } + + g.listener = listener; + this.on(type, g); + + return this; +}; + +// emits a 'removeListener' event iff the listener was removed +EventEmitter.prototype.removeListener = function(type, listener) { + var list, position, length, i; + + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + if (!this._events || !this._events[type]) + return this; + + list = this._events[type]; + length = list.length; + position = -1; + + if (list === listener || + (isFunction(list.listener) && list.listener === listener)) { + delete this._events[type]; + if (this._events.removeListener) + this.emit('removeListener', type, listener); + + } else if (isObject(list)) { + for (i = length; i-- > 0;) { + if (list[i] === listener || + (list[i].listener && list[i].listener === listener)) { + position = i; + break; + } + } + + if (position < 0) + return this; + + if (list.length === 1) { + list.length = 0; + delete this._events[type]; + } else { + list.splice(position, 1); + } + + if (this._events.removeListener) + this.emit('removeListener', type, listener); + } + + return this; +}; + +EventEmitter.prototype.removeAllListeners = function(type) { + var key, listeners; + + if (!this._events) + return this; + + // not listening for removeListener, no need to emit + if (!this._events.removeListener) { + if (arguments.length === 0) + this._events = {}; + else if (this._events[type]) + delete this._events[type]; + return this; + } + + // emit removeListener for all listeners on all events + if (arguments.length === 0) { + for (key in this._events) { + if (key === 'removeListener') continue; + this.removeAllListeners(key); + } + this.removeAllListeners('removeListener'); + this._events = {}; + return this; + } + + listeners = this._events[type]; + + if (isFunction(listeners)) { + this.removeListener(type, listeners); + } else { + // LIFO order + while (listeners.length) + this.removeListener(type, listeners[listeners.length - 1]); + } + delete this._events[type]; + + return this; +}; + +EventEmitter.prototype.listeners = function(type) { + var ret; + if (!this._events || !this._events[type]) + ret = []; + else if (isFunction(this._events[type])) + ret = [this._events[type]]; + else + ret = this._events[type].slice(); + return ret; +}; + +EventEmitter.listenerCount = function(emitter, type) { + var ret; + if (!emitter._events || !emitter._events[type]) + ret = 0; + else if (isFunction(emitter._events[type])) + ret = 1; + else + ret = emitter._events[type].length; + return ret; +}; + +function isFunction(arg) { + return typeof arg === 'function'; +} + +function isNumber(arg) { + return typeof arg === 'number'; +} + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} + +function isUndefined(arg) { + return arg === void 0; +} + +},{}],15:[function(require,module,exports){ +(function (process){ +exports.alphasort = alphasort +exports.alphasorti = alphasorti +exports.setopts = setopts +exports.ownProp = ownProp +exports.makeAbs = makeAbs +exports.finish = finish +exports.mark = mark +exports.isIgnored = isIgnored +exports.childrenIgnored = childrenIgnored + +function ownProp (obj, field) { + return Object.prototype.hasOwnProperty.call(obj, field) +} + +var path = require("path") +var minimatch = require("minimatch") +var isAbsolute = require("path-is-absolute") +var Minimatch = minimatch.Minimatch + +function alphasorti (a, b) { + return a.toLowerCase().localeCompare(b.toLowerCase()) +} + +function alphasort (a, b) { + return a.localeCompare(b) +} + +function setupIgnores (self, options) { + self.ignore = options.ignore || [] + + if (!Array.isArray(self.ignore)) + self.ignore = [self.ignore] + + if (self.ignore.length) { + self.ignore = self.ignore.map(ignoreMap) + } +} + +function ignoreMap (pattern) { + var gmatcher = null + if (pattern.slice(-3) === '/**') { + var gpattern = pattern.replace(/(\/\*\*)+$/, '') + gmatcher = new Minimatch(gpattern) + } + + return { + matcher: new Minimatch(pattern), + gmatcher: gmatcher + } +} + +function setopts (self, pattern, options) { + if (!options) + options = {} + + // base-matching: just use globstar for that. + if (options.matchBase && -1 === pattern.indexOf("/")) { + if (options.noglobstar) { + throw new Error("base matching requires globstar") + } + pattern = "**/" + pattern + } + + self.silent = !!options.silent + self.pattern = pattern + self.strict = options.strict !== false + self.realpath = !!options.realpath + self.realpathCache = options.realpathCache || Object.create(null) + self.follow = !!options.follow + self.dot = !!options.dot + self.mark = !!options.mark + self.nodir = !!options.nodir + if (self.nodir) + self.mark = true + self.sync = !!options.sync + self.nounique = !!options.nounique + self.nonull = !!options.nonull + self.nosort = !!options.nosort + self.nocase = !!options.nocase + self.stat = !!options.stat + self.noprocess = !!options.noprocess + + self.maxLength = options.maxLength || Infinity + self.cache = options.cache || Object.create(null) + self.statCache = options.statCache || Object.create(null) + self.symlinks = options.symlinks || Object.create(null) + + setupIgnores(self, options) + + self.changedCwd = false + var cwd = process.cwd() + if (!ownProp(options, "cwd")) + self.cwd = cwd + else { + self.cwd = options.cwd + self.changedCwd = path.resolve(options.cwd) !== cwd + } + + self.root = options.root || path.resolve(self.cwd, "/") + self.root = path.resolve(self.root) + if (process.platform === "win32") + self.root = self.root.replace(/\\/g, "/") + + self.nomount = !!options.nomount + + // disable comments and negation unless the user explicitly + // passes in false as the option. + options.nonegate = options.nonegate === false ? false : true + options.nocomment = options.nocomment === false ? false : true + deprecationWarning(options) + + self.minimatch = new Minimatch(pattern, options) + self.options = self.minimatch.options +} + +// TODO(isaacs): remove entirely in v6 +// exported to reset in tests +exports.deprecationWarned +function deprecationWarning(options) { + if (!options.nonegate || !options.nocomment) { + if (process.noDeprecation !== true && !exports.deprecationWarned) { + var msg = 'glob WARNING: comments and negation will be disabled in v6' + if (process.throwDeprecation) + throw new Error(msg) + else if (process.traceDeprecation) + console.trace(msg) + else + console.error(msg) + + exports.deprecationWarned = true + } + } +} + +function finish (self) { + var nou = self.nounique + var all = nou ? [] : Object.create(null) + + for (var i = 0, l = self.matches.length; i < l; i ++) { + var matches = self.matches[i] + if (!matches || Object.keys(matches).length === 0) { + if (self.nonull) { + // do like the shell, and spit out the literal glob + var literal = self.minimatch.globSet[i] + if (nou) + all.push(literal) + else + all[literal] = true + } + } else { + // had matches + var m = Object.keys(matches) + if (nou) + all.push.apply(all, m) + else + m.forEach(function (m) { + all[m] = true + }) + } + } + + if (!nou) + all = Object.keys(all) + + if (!self.nosort) + all = all.sort(self.nocase ? alphasorti : alphasort) + + // at *some* point we statted all of these + if (self.mark) { + for (var i = 0; i < all.length; i++) { + all[i] = self._mark(all[i]) + } + if (self.nodir) { + all = all.filter(function (e) { + return !(/\/$/.test(e)) + }) + } + } + + if (self.ignore.length) + all = all.filter(function(m) { + return !isIgnored(self, m) + }) + + self.found = all +} + +function mark (self, p) { + var abs = makeAbs(self, p) + var c = self.cache[abs] + var m = p + if (c) { + var isDir = c === 'DIR' || Array.isArray(c) + var slash = p.slice(-1) === '/' + + if (isDir && !slash) + m += '/' + else if (!isDir && slash) + m = m.slice(0, -1) + + if (m !== p) { + var mabs = makeAbs(self, m) + self.statCache[mabs] = self.statCache[abs] + self.cache[mabs] = self.cache[abs] + } + } + + return m +} + +// lotta situps... +function makeAbs (self, f) { + var abs = f + if (f.charAt(0) === '/') { + abs = path.join(self.root, f) + } else if (isAbsolute(f) || f === '') { + abs = f + } else if (self.changedCwd) { + abs = path.resolve(self.cwd, f) + } else { + abs = path.resolve(f) + } + return abs +} + + +// Return true, if pattern ends with globstar '**', for the accompanying parent directory. +// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents +function isIgnored (self, path) { + if (!self.ignore.length) + return false + + return self.ignore.some(function(item) { + return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path)) + }) +} + +function childrenIgnored (self, path) { + if (!self.ignore.length) + return false + + return self.ignore.some(function(item) { + return !!(item.gmatcher && item.gmatcher.match(path)) + }) +} + +}).call(this,require('_process')) +},{"_process":24,"minimatch":20,"path":22,"path-is-absolute":23}],16:[function(require,module,exports){ +(function (process){ +// Approach: +// +// 1. Get the minimatch set +// 2. For each pattern in the set, PROCESS(pattern, false) +// 3. Store matches per-set, then uniq them +// +// PROCESS(pattern, inGlobStar) +// Get the first [n] items from pattern that are all strings +// Join these together. This is PREFIX. +// If there is no more remaining, then stat(PREFIX) and +// add to matches if it succeeds. END. +// +// If inGlobStar and PREFIX is symlink and points to dir +// set ENTRIES = [] +// else readdir(PREFIX) as ENTRIES +// If fail, END +// +// with ENTRIES +// If pattern[n] is GLOBSTAR +// // handle the case where the globstar match is empty +// // by pruning it out, and testing the resulting pattern +// PROCESS(pattern[0..n] + pattern[n+1 .. $], false) +// // handle other cases. +// for ENTRY in ENTRIES (not dotfiles) +// // attach globstar + tail onto the entry +// // Mark that this entry is a globstar match +// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true) +// +// else // not globstar +// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot) +// Test ENTRY against pattern[n] +// If fails, continue +// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $]) +// +// Caveat: +// Cache all stats and readdirs results to minimize syscall. Since all +// we ever care about is existence and directory-ness, we can just keep +// `true` for files, and [children,...] for directories, or `false` for +// things that don't exist. + +module.exports = glob + +var fs = require('fs') +var minimatch = require('minimatch') +var Minimatch = minimatch.Minimatch +var inherits = require('inherits') +var EE = require('events').EventEmitter +var path = require('path') +var assert = require('assert') +var isAbsolute = require('path-is-absolute') +var globSync = require('./sync.js') +var common = require('./common.js') +var alphasort = common.alphasort +var alphasorti = common.alphasorti +var setopts = common.setopts +var ownProp = common.ownProp +var inflight = require('inflight') +var util = require('util') +var childrenIgnored = common.childrenIgnored +var isIgnored = common.isIgnored + +var once = require('once') + +function glob (pattern, options, cb) { + if (typeof options === 'function') cb = options, options = {} + if (!options) options = {} + + if (options.sync) { + if (cb) + throw new TypeError('callback provided to sync glob') + return globSync(pattern, options) + } + + return new Glob(pattern, options, cb) +} + +glob.sync = globSync +var GlobSync = glob.GlobSync = globSync.GlobSync + +// old api surface +glob.glob = glob + +glob.hasMagic = function (pattern, options_) { + var options = util._extend({}, options_) + options.noprocess = true + + var g = new Glob(pattern, options) + var set = g.minimatch.set + if (set.length > 1) + return true + + for (var j = 0; j < set[0].length; j++) { + if (typeof set[0][j] !== 'string') + return true + } + + return false +} + +glob.Glob = Glob +inherits(Glob, EE) +function Glob (pattern, options, cb) { + if (typeof options === 'function') { + cb = options + options = null + } + + if (options && options.sync) { + if (cb) + throw new TypeError('callback provided to sync glob') + return new GlobSync(pattern, options) + } + + if (!(this instanceof Glob)) + return new Glob(pattern, options, cb) + + setopts(this, pattern, options) + this._didRealPath = false + + // process each pattern in the minimatch set + var n = this.minimatch.set.length + + // The matches are stored as {: true,...} so that + // duplicates are automagically pruned. + // Later, we do an Object.keys() on these. + // Keep them as a list so we can fill in when nonull is set. + this.matches = new Array(n) + + if (typeof cb === 'function') { + cb = once(cb) + this.on('error', cb) + this.on('end', function (matches) { + cb(null, matches) + }) + } + + var self = this + var n = this.minimatch.set.length + this._processing = 0 + this.matches = new Array(n) + + this._emitQueue = [] + this._processQueue = [] + this.paused = false + + if (this.noprocess) + return this + + if (n === 0) + return done() + + for (var i = 0; i < n; i ++) { + this._process(this.minimatch.set[i], i, false, done) + } + + function done () { + --self._processing + if (self._processing <= 0) + self._finish() + } +} + +Glob.prototype._finish = function () { + assert(this instanceof Glob) + if (this.aborted) + return + + if (this.realpath && !this._didRealpath) + return this._realpath() + + common.finish(this) + this.emit('end', this.found) +} + +Glob.prototype._realpath = function () { + if (this._didRealpath) + return + + this._didRealpath = true + + var n = this.matches.length + if (n === 0) + return this._finish() + + var self = this + for (var i = 0; i < this.matches.length; i++) + this._realpathSet(i, next) + + function next () { + if (--n === 0) + self._finish() + } +} + +Glob.prototype._realpathSet = function (index, cb) { + var matchset = this.matches[index] + if (!matchset) + return cb() + + var found = Object.keys(matchset) + var self = this + var n = found.length + + if (n === 0) + return cb() + + var set = this.matches[index] = Object.create(null) + found.forEach(function (p, i) { + // If there's a problem with the stat, then it means that + // one or more of the links in the realpath couldn't be + // resolved. just return the abs value in that case. + p = self._makeAbs(p) + fs.realpath(p, self.realpathCache, function (er, real) { + if (!er) + set[real] = true + else if (er.syscall === 'stat') + set[p] = true + else + self.emit('error', er) // srsly wtf right here + + if (--n === 0) { + self.matches[index] = set + cb() + } + }) + }) +} + +Glob.prototype._mark = function (p) { + return common.mark(this, p) +} + +Glob.prototype._makeAbs = function (f) { + return common.makeAbs(this, f) +} + +Glob.prototype.abort = function () { + this.aborted = true + this.emit('abort') +} + +Glob.prototype.pause = function () { + if (!this.paused) { + this.paused = true + this.emit('pause') + } +} + +Glob.prototype.resume = function () { + if (this.paused) { + this.emit('resume') + this.paused = false + if (this._emitQueue.length) { + var eq = this._emitQueue.slice(0) + this._emitQueue.length = 0 + for (var i = 0; i < eq.length; i ++) { + var e = eq[i] + this._emitMatch(e[0], e[1]) + } + } + if (this._processQueue.length) { + var pq = this._processQueue.slice(0) + this._processQueue.length = 0 + for (var i = 0; i < pq.length; i ++) { + var p = pq[i] + this._processing-- + this._process(p[0], p[1], p[2], p[3]) + } + } + } +} + +Glob.prototype._process = function (pattern, index, inGlobStar, cb) { + assert(this instanceof Glob) + assert(typeof cb === 'function') + + if (this.aborted) + return + + this._processing++ + if (this.paused) { + this._processQueue.push([pattern, index, inGlobStar, cb]) + return + } + + //console.error('PROCESS %d', this._processing, pattern) + + // Get the first [n] parts of pattern that are all strings. + var n = 0 + while (typeof pattern[n] === 'string') { + n ++ + } + // now n is the index of the first one that is *not* a string. + + // see if there's anything else + var prefix + switch (n) { + // if not, then this is rather simple + case pattern.length: + this._processSimple(pattern.join('/'), index, cb) + return + + case 0: + // pattern *starts* with some non-trivial item. + // going to readdir(cwd), but not include the prefix in matches. + prefix = null + break + + default: + // pattern has some string bits in the front. + // whatever it starts with, whether that's 'absolute' like /foo/bar, + // or 'relative' like '../baz' + prefix = pattern.slice(0, n).join('/') + break + } + + var remain = pattern.slice(n) + + // get the list of entries. + var read + if (prefix === null) + read = '.' + else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + if (!prefix || !isAbsolute(prefix)) + prefix = '/' + prefix + read = prefix + } else + read = prefix + + var abs = this._makeAbs(read) + + //if ignored, skip _processing + if (childrenIgnored(this, read)) + return cb() + + var isGlobStar = remain[0] === minimatch.GLOBSTAR + if (isGlobStar) + this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb) + else + this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb) +} + +Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) { + var self = this + this._readdir(abs, inGlobStar, function (er, entries) { + return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb) + }) +} + +Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { + + // if the abs isn't a dir, then nothing can match! + if (!entries) + return cb() + + // It will only match dot entries if it starts with a dot, or if + // dot is set. Stuff like @(.foo|.bar) isn't allowed. + var pn = remain[0] + var negate = !!this.minimatch.negate + var rawGlob = pn._glob + var dotOk = this.dot || rawGlob.charAt(0) === '.' + + var matchedEntries = [] + for (var i = 0; i < entries.length; i++) { + var e = entries[i] + if (e.charAt(0) !== '.' || dotOk) { + var m + if (negate && !prefix) { + m = !e.match(pn) + } else { + m = e.match(pn) + } + if (m) + matchedEntries.push(e) + } + } + + //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries) + + var len = matchedEntries.length + // If there are no matched entries, then nothing matches. + if (len === 0) + return cb() + + // if this is the last remaining pattern bit, then no need for + // an additional stat *unless* the user has specified mark or + // stat explicitly. We know they exist, since readdir returned + // them. + + if (remain.length === 1 && !this.mark && !this.stat) { + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + if (prefix) { + if (prefix !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + + if (e.charAt(0) === '/' && !this.nomount) { + e = path.join(this.root, e) + } + this._emitMatch(index, e) + } + // This was the last one, and no stats were needed + return cb() + } + + // now test all matched entries as stand-ins for that part + // of the pattern. + remain.shift() + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + var newPattern + if (prefix) { + if (prefix !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + this._process([e].concat(remain), index, inGlobStar, cb) + } + cb() +} + +Glob.prototype._emitMatch = function (index, e) { + if (this.aborted) + return + + if (this.matches[index][e]) + return + + if (isIgnored(this, e)) + return + + if (this.paused) { + this._emitQueue.push([index, e]) + return + } + + var abs = this._makeAbs(e) + + if (this.nodir) { + var c = this.cache[abs] + if (c === 'DIR' || Array.isArray(c)) + return + } + + if (this.mark) + e = this._mark(e) + + this.matches[index][e] = true + + var st = this.statCache[abs] + if (st) + this.emit('stat', e, st) + + this.emit('match', e) +} + +Glob.prototype._readdirInGlobStar = function (abs, cb) { + if (this.aborted) + return + + // follow all symlinked directories forever + // just proceed as if this is a non-globstar situation + if (this.follow) + return this._readdir(abs, false, cb) + + var lstatkey = 'lstat\0' + abs + var self = this + var lstatcb = inflight(lstatkey, lstatcb_) + + if (lstatcb) + fs.lstat(abs, lstatcb) + + function lstatcb_ (er, lstat) { + if (er) + return cb() + + var isSym = lstat.isSymbolicLink() + self.symlinks[abs] = isSym + + // If it's not a symlink or a dir, then it's definitely a regular file. + // don't bother doing a readdir in that case. + if (!isSym && !lstat.isDirectory()) { + self.cache[abs] = 'FILE' + cb() + } else + self._readdir(abs, false, cb) + } +} + +Glob.prototype._readdir = function (abs, inGlobStar, cb) { + if (this.aborted) + return + + cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb) + if (!cb) + return + + //console.error('RD %j %j', +inGlobStar, abs) + if (inGlobStar && !ownProp(this.symlinks, abs)) + return this._readdirInGlobStar(abs, cb) + + if (ownProp(this.cache, abs)) { + var c = this.cache[abs] + if (!c || c === 'FILE') + return cb() + + if (Array.isArray(c)) + return cb(null, c) + } + + var self = this + fs.readdir(abs, readdirCb(this, abs, cb)) +} + +function readdirCb (self, abs, cb) { + return function (er, entries) { + if (er) + self._readdirError(abs, er, cb) + else + self._readdirEntries(abs, entries, cb) + } +} + +Glob.prototype._readdirEntries = function (abs, entries, cb) { + if (this.aborted) + return + + // if we haven't asked to stat everything, then just + // assume that everything in there exists, so we can avoid + // having to stat it a second time. + if (!this.mark && !this.stat) { + for (var i = 0; i < entries.length; i ++) { + var e = entries[i] + if (abs === '/') + e = abs + e + else + e = abs + '/' + e + this.cache[e] = true + } + } + + this.cache[abs] = entries + return cb(null, entries) +} + +Glob.prototype._readdirError = function (f, er, cb) { + if (this.aborted) + return + + // handle errors, and cache the information + switch (er.code) { + case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 + case 'ENOTDIR': // totally normal. means it *does* exist. + this.cache[this._makeAbs(f)] = 'FILE' + break + + case 'ENOENT': // not terribly unusual + case 'ELOOP': + case 'ENAMETOOLONG': + case 'UNKNOWN': + this.cache[this._makeAbs(f)] = false + break + + default: // some unusual error. Treat as failure. + this.cache[this._makeAbs(f)] = false + if (this.strict) { + this.emit('error', er) + // If the error is handled, then we abort + // if not, we threw out of here + this.abort() + } + if (!this.silent) + console.error('glob error', er) + break + } + + return cb() +} + +Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) { + var self = this + this._readdir(abs, inGlobStar, function (er, entries) { + self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb) + }) +} + + +Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { + //console.error('pgs2', prefix, remain[0], entries) + + // no entries means not a dir, so it can never have matches + // foo.txt/** doesn't match foo.txt + if (!entries) + return cb() + + // test without the globstar, and with every child both below + // and replacing the globstar. + var remainWithoutGlobStar = remain.slice(1) + var gspref = prefix ? [ prefix ] : [] + var noGlobStar = gspref.concat(remainWithoutGlobStar) + + // the noGlobStar pattern exits the inGlobStar state + this._process(noGlobStar, index, false, cb) + + var isSym = this.symlinks[abs] + var len = entries.length + + // If it's a symlink, and we're in a globstar, then stop + if (isSym && inGlobStar) + return cb() + + for (var i = 0; i < len; i++) { + var e = entries[i] + if (e.charAt(0) === '.' && !this.dot) + continue + + // these two cases enter the inGlobStar state + var instead = gspref.concat(entries[i], remainWithoutGlobStar) + this._process(instead, index, true, cb) + + var below = gspref.concat(entries[i], remain) + this._process(below, index, true, cb) + } + + cb() +} + +Glob.prototype._processSimple = function (prefix, index, cb) { + // XXX review this. Shouldn't it be doing the mounting etc + // before doing stat? kinda weird? + var self = this + this._stat(prefix, function (er, exists) { + self._processSimple2(prefix, index, er, exists, cb) + }) +} +Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) { + + //console.error('ps2', prefix, exists) + + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + // If it doesn't exist, then just mark the lack of results + if (!exists) + return cb() + + if (prefix && isAbsolute(prefix) && !this.nomount) { + var trail = /[\/\\]$/.test(prefix) + if (prefix.charAt(0) === '/') { + prefix = path.join(this.root, prefix) + } else { + prefix = path.resolve(this.root, prefix) + if (trail) + prefix += '/' + } + } + + if (process.platform === 'win32') + prefix = prefix.replace(/\\/g, '/') + + // Mark this as a match + this._emitMatch(index, prefix) + cb() +} + +// Returns either 'DIR', 'FILE', or false +Glob.prototype._stat = function (f, cb) { + var abs = this._makeAbs(f) + var needDir = f.slice(-1) === '/' + + if (f.length > this.maxLength) + return cb() + + if (!this.stat && ownProp(this.cache, abs)) { + var c = this.cache[abs] + + if (Array.isArray(c)) + c = 'DIR' + + // It exists, but maybe not how we need it + if (!needDir || c === 'DIR') + return cb(null, c) + + if (needDir && c === 'FILE') + return cb() + + // otherwise we have to stat, because maybe c=true + // if we know it exists, but not what it is. + } + + var exists + var stat = this.statCache[abs] + if (stat !== undefined) { + if (stat === false) + return cb(null, stat) + else { + var type = stat.isDirectory() ? 'DIR' : 'FILE' + if (needDir && type === 'FILE') + return cb() + else + return cb(null, type, stat) + } + } + + var self = this + var statcb = inflight('stat\0' + abs, lstatcb_) + if (statcb) + fs.lstat(abs, statcb) + + function lstatcb_ (er, lstat) { + if (lstat && lstat.isSymbolicLink()) { + // If it's a symlink, then treat it as the target, unless + // the target does not exist, then treat it as a file. + return fs.stat(abs, function (er, stat) { + if (er) + self._stat2(f, abs, null, lstat, cb) + else + self._stat2(f, abs, er, stat, cb) + }) + } else { + self._stat2(f, abs, er, lstat, cb) + } + } +} + +Glob.prototype._stat2 = function (f, abs, er, stat, cb) { + if (er) { + this.statCache[abs] = false + return cb() + } + + var needDir = f.slice(-1) === '/' + this.statCache[abs] = stat + + if (abs.slice(-1) === '/' && !stat.isDirectory()) + return cb(null, false, stat) + + var c = stat.isDirectory() ? 'DIR' : 'FILE' + this.cache[abs] = this.cache[abs] || c + + if (needDir && c !== 'DIR') + return cb() + + return cb(null, c, stat) +} + +}).call(this,require('_process')) +},{"./common.js":15,"./sync.js":17,"_process":24,"assert":9,"events":14,"fs":12,"inflight":18,"inherits":19,"minimatch":20,"once":21,"path":22,"path-is-absolute":23,"util":28}],17:[function(require,module,exports){ +(function (process){ +module.exports = globSync +globSync.GlobSync = GlobSync + +var fs = require('fs') +var minimatch = require('minimatch') +var Minimatch = minimatch.Minimatch +var Glob = require('./glob.js').Glob +var util = require('util') +var path = require('path') +var assert = require('assert') +var isAbsolute = require('path-is-absolute') +var common = require('./common.js') +var alphasort = common.alphasort +var alphasorti = common.alphasorti +var setopts = common.setopts +var ownProp = common.ownProp +var childrenIgnored = common.childrenIgnored + +function globSync (pattern, options) { + if (typeof options === 'function' || arguments.length === 3) + throw new TypeError('callback provided to sync glob\n'+ + 'See: https://github.com/isaacs/node-glob/issues/167') + + return new GlobSync(pattern, options).found +} + +function GlobSync (pattern, options) { + if (!pattern) + throw new Error('must provide pattern') + + if (typeof options === 'function' || arguments.length === 3) + throw new TypeError('callback provided to sync glob\n'+ + 'See: https://github.com/isaacs/node-glob/issues/167') + + if (!(this instanceof GlobSync)) + return new GlobSync(pattern, options) + + setopts(this, pattern, options) + + if (this.noprocess) + return this + + var n = this.minimatch.set.length + this.matches = new Array(n) + for (var i = 0; i < n; i ++) { + this._process(this.minimatch.set[i], i, false) + } + this._finish() +} + +GlobSync.prototype._finish = function () { + assert(this instanceof GlobSync) + if (this.realpath) { + var self = this + this.matches.forEach(function (matchset, index) { + var set = self.matches[index] = Object.create(null) + for (var p in matchset) { + try { + p = self._makeAbs(p) + var real = fs.realpathSync(p, self.realpathCache) + set[real] = true + } catch (er) { + if (er.syscall === 'stat') + set[self._makeAbs(p)] = true + else + throw er + } + } + }) + } + common.finish(this) +} + + +GlobSync.prototype._process = function (pattern, index, inGlobStar) { + assert(this instanceof GlobSync) + + // Get the first [n] parts of pattern that are all strings. + var n = 0 + while (typeof pattern[n] === 'string') { + n ++ + } + // now n is the index of the first one that is *not* a string. + + // See if there's anything else + var prefix + switch (n) { + // if not, then this is rather simple + case pattern.length: + this._processSimple(pattern.join('/'), index) + return + + case 0: + // pattern *starts* with some non-trivial item. + // going to readdir(cwd), but not include the prefix in matches. + prefix = null + break + + default: + // pattern has some string bits in the front. + // whatever it starts with, whether that's 'absolute' like /foo/bar, + // or 'relative' like '../baz' + prefix = pattern.slice(0, n).join('/') + break + } + + var remain = pattern.slice(n) + + // get the list of entries. + var read + if (prefix === null) + read = '.' + else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + if (!prefix || !isAbsolute(prefix)) + prefix = '/' + prefix + read = prefix + } else + read = prefix + + var abs = this._makeAbs(read) + + //if ignored, skip processing + if (childrenIgnored(this, read)) + return + + var isGlobStar = remain[0] === minimatch.GLOBSTAR + if (isGlobStar) + this._processGlobStar(prefix, read, abs, remain, index, inGlobStar) + else + this._processReaddir(prefix, read, abs, remain, index, inGlobStar) +} + + +GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) { + var entries = this._readdir(abs, inGlobStar) + + // if the abs isn't a dir, then nothing can match! + if (!entries) + return + + // It will only match dot entries if it starts with a dot, or if + // dot is set. Stuff like @(.foo|.bar) isn't allowed. + var pn = remain[0] + var negate = !!this.minimatch.negate + var rawGlob = pn._glob + var dotOk = this.dot || rawGlob.charAt(0) === '.' + + var matchedEntries = [] + for (var i = 0; i < entries.length; i++) { + var e = entries[i] + if (e.charAt(0) !== '.' || dotOk) { + var m + if (negate && !prefix) { + m = !e.match(pn) + } else { + m = e.match(pn) + } + if (m) + matchedEntries.push(e) + } + } + + var len = matchedEntries.length + // If there are no matched entries, then nothing matches. + if (len === 0) + return + + // if this is the last remaining pattern bit, then no need for + // an additional stat *unless* the user has specified mark or + // stat explicitly. We know they exist, since readdir returned + // them. + + if (remain.length === 1 && !this.mark && !this.stat) { + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + if (prefix) { + if (prefix.slice(-1) !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + + if (e.charAt(0) === '/' && !this.nomount) { + e = path.join(this.root, e) + } + this.matches[index][e] = true + } + // This was the last one, and no stats were needed + return + } + + // now test all matched entries as stand-ins for that part + // of the pattern. + remain.shift() + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + var newPattern + if (prefix) + newPattern = [prefix, e] + else + newPattern = [e] + this._process(newPattern.concat(remain), index, inGlobStar) + } +} + + +GlobSync.prototype._emitMatch = function (index, e) { + var abs = this._makeAbs(e) + if (this.mark) + e = this._mark(e) + + if (this.matches[index][e]) + return + + if (this.nodir) { + var c = this.cache[this._makeAbs(e)] + if (c === 'DIR' || Array.isArray(c)) + return + } + + this.matches[index][e] = true + if (this.stat) + this._stat(e) +} + + +GlobSync.prototype._readdirInGlobStar = function (abs) { + // follow all symlinked directories forever + // just proceed as if this is a non-globstar situation + if (this.follow) + return this._readdir(abs, false) + + var entries + var lstat + var stat + try { + lstat = fs.lstatSync(abs) + } catch (er) { + // lstat failed, doesn't exist + return null + } + + var isSym = lstat.isSymbolicLink() + this.symlinks[abs] = isSym + + // If it's not a symlink or a dir, then it's definitely a regular file. + // don't bother doing a readdir in that case. + if (!isSym && !lstat.isDirectory()) + this.cache[abs] = 'FILE' + else + entries = this._readdir(abs, false) + + return entries +} + +GlobSync.prototype._readdir = function (abs, inGlobStar) { + var entries + + if (inGlobStar && !ownProp(this.symlinks, abs)) + return this._readdirInGlobStar(abs) + + if (ownProp(this.cache, abs)) { + var c = this.cache[abs] + if (!c || c === 'FILE') + return null + + if (Array.isArray(c)) + return c + } + + try { + return this._readdirEntries(abs, fs.readdirSync(abs)) + } catch (er) { + this._readdirError(abs, er) + return null + } +} + +GlobSync.prototype._readdirEntries = function (abs, entries) { + // if we haven't asked to stat everything, then just + // assume that everything in there exists, so we can avoid + // having to stat it a second time. + if (!this.mark && !this.stat) { + for (var i = 0; i < entries.length; i ++) { + var e = entries[i] + if (abs === '/') + e = abs + e + else + e = abs + '/' + e + this.cache[e] = true + } + } + + this.cache[abs] = entries + + // mark and cache dir-ness + return entries +} + +GlobSync.prototype._readdirError = function (f, er) { + // handle errors, and cache the information + switch (er.code) { + case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 + case 'ENOTDIR': // totally normal. means it *does* exist. + this.cache[this._makeAbs(f)] = 'FILE' + break + + case 'ENOENT': // not terribly unusual + case 'ELOOP': + case 'ENAMETOOLONG': + case 'UNKNOWN': + this.cache[this._makeAbs(f)] = false + break + + default: // some unusual error. Treat as failure. + this.cache[this._makeAbs(f)] = false + if (this.strict) + throw er + if (!this.silent) + console.error('glob error', er) + break + } +} + +GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) { + + var entries = this._readdir(abs, inGlobStar) + + // no entries means not a dir, so it can never have matches + // foo.txt/** doesn't match foo.txt + if (!entries) + return + + // test without the globstar, and with every child both below + // and replacing the globstar. + var remainWithoutGlobStar = remain.slice(1) + var gspref = prefix ? [ prefix ] : [] + var noGlobStar = gspref.concat(remainWithoutGlobStar) + + // the noGlobStar pattern exits the inGlobStar state + this._process(noGlobStar, index, false) + + var len = entries.length + var isSym = this.symlinks[abs] + + // If it's a symlink, and we're in a globstar, then stop + if (isSym && inGlobStar) + return + + for (var i = 0; i < len; i++) { + var e = entries[i] + if (e.charAt(0) === '.' && !this.dot) + continue + + // these two cases enter the inGlobStar state + var instead = gspref.concat(entries[i], remainWithoutGlobStar) + this._process(instead, index, true) + + var below = gspref.concat(entries[i], remain) + this._process(below, index, true) + } +} + +GlobSync.prototype._processSimple = function (prefix, index) { + // XXX review this. Shouldn't it be doing the mounting etc + // before doing stat? kinda weird? + var exists = this._stat(prefix) + + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + // If it doesn't exist, then just mark the lack of results + if (!exists) + return + + if (prefix && isAbsolute(prefix) && !this.nomount) { + var trail = /[\/\\]$/.test(prefix) + if (prefix.charAt(0) === '/') { + prefix = path.join(this.root, prefix) + } else { + prefix = path.resolve(this.root, prefix) + if (trail) + prefix += '/' + } + } + + if (process.platform === 'win32') + prefix = prefix.replace(/\\/g, '/') + + // Mark this as a match + this.matches[index][prefix] = true +} + +// Returns either 'DIR', 'FILE', or false +GlobSync.prototype._stat = function (f) { + var abs = this._makeAbs(f) + var needDir = f.slice(-1) === '/' + + if (f.length > this.maxLength) + return false + + if (!this.stat && ownProp(this.cache, abs)) { + var c = this.cache[abs] + + if (Array.isArray(c)) + c = 'DIR' + + // It exists, but maybe not how we need it + if (!needDir || c === 'DIR') + return c + + if (needDir && c === 'FILE') + return false + + // otherwise we have to stat, because maybe c=true + // if we know it exists, but not what it is. + } + + var exists + var stat = this.statCache[abs] + if (!stat) { + var lstat + try { + lstat = fs.lstatSync(abs) + } catch (er) { + return false + } + + if (lstat.isSymbolicLink()) { + try { + stat = fs.statSync(abs) + } catch (er) { + stat = lstat + } + } else { + stat = lstat + } + } + + this.statCache[abs] = stat + + var c = stat.isDirectory() ? 'DIR' : 'FILE' + this.cache[abs] = this.cache[abs] || c + + if (needDir && c !== 'DIR') + return false + + return c +} + +GlobSync.prototype._mark = function (p) { + return common.mark(this, p) +} + +GlobSync.prototype._makeAbs = function (f) { + return common.makeAbs(this, f) +} + +}).call(this,require('_process')) +},{"./common.js":15,"./glob.js":16,"_process":24,"assert":9,"fs":12,"minimatch":20,"path":22,"path-is-absolute":23,"util":28}],18:[function(require,module,exports){ +(function (process){ +var wrappy = require('wrappy') +var reqs = Object.create(null) +var once = require('once') + +module.exports = wrappy(inflight) + +function inflight (key, cb) { + if (reqs[key]) { + reqs[key].push(cb) + return null + } else { + reqs[key] = [cb] + return makeres(key) + } +} + +function makeres (key) { + return once(function RES () { + var cbs = reqs[key] + var len = cbs.length + var args = slice(arguments) + + // XXX It's somewhat ambiguous whether a new callback added in this + // pass should be queued for later execution if something in the + // list of callbacks throws, or if it should just be discarded. + // However, it's such an edge case that it hardly matters, and either + // choice is likely as surprising as the other. + // As it happens, we do go ahead and schedule it for later execution. + try { + for (var i = 0; i < len; i++) { + cbs[i].apply(null, args) + } + } finally { + if (cbs.length > len) { + // added more in the interim. + // de-zalgo, just in case, but don't call again. + cbs.splice(0, len) + process.nextTick(function () { + RES.apply(null, args) + }) + } else { + delete reqs[key] + } + } + }) +} + +function slice (args) { + var length = args.length + var array = [] + + for (var i = 0; i < length; i++) array[i] = args[i] + return array +} + +}).call(this,require('_process')) +},{"_process":24,"once":21,"wrappy":29}],19:[function(require,module,exports){ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } +} + +},{}],20:[function(require,module,exports){ +module.exports = minimatch +minimatch.Minimatch = Minimatch + +var path = { sep: '/' } +try { + path = require('path') +} catch (er) {} + +var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} +var expand = require('brace-expansion') + +var plTypes = { + '!': { open: '(?:(?!(?:', close: '))[^/]*?)'}, + '?': { open: '(?:', close: ')?' }, + '+': { open: '(?:', close: ')+' }, + '*': { open: '(?:', close: ')*' }, + '@': { open: '(?:', close: ')' } +} + +// any single thing other than / +// don't need to escape / when using new RegExp() +var qmark = '[^/]' + +// * => any number of characters +var star = qmark + '*?' + +// ** when dots are allowed. Anything goes, except .. and . +// not (^ or / followed by one or two dots followed by $ or /), +// followed by anything, any number of times. +var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?' + +// not a ^ or / followed by a dot, +// followed by anything, any number of times. +var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?' + +// characters that need to be escaped in RegExp. +var reSpecials = charSet('().*{}+?[]^$\\!') + +// "abc" -> { a:true, b:true, c:true } +function charSet (s) { + return s.split('').reduce(function (set, c) { + set[c] = true + return set + }, {}) +} + +// normalizes slashes. +var slashSplit = /\/+/ + +minimatch.filter = filter +function filter (pattern, options) { + options = options || {} + return function (p, i, list) { + return minimatch(p, pattern, options) + } +} + +function ext (a, b) { + a = a || {} + b = b || {} + var t = {} + Object.keys(b).forEach(function (k) { + t[k] = b[k] + }) + Object.keys(a).forEach(function (k) { + t[k] = a[k] + }) + return t +} + +minimatch.defaults = function (def) { + if (!def || !Object.keys(def).length) return minimatch + + var orig = minimatch + + var m = function minimatch (p, pattern, options) { + return orig.minimatch(p, pattern, ext(def, options)) + } + + m.Minimatch = function Minimatch (pattern, options) { + return new orig.Minimatch(pattern, ext(def, options)) + } + + return m +} + +Minimatch.defaults = function (def) { + if (!def || !Object.keys(def).length) return Minimatch + return minimatch.defaults(def).Minimatch +} + +function minimatch (p, pattern, options) { + if (typeof pattern !== 'string') { + throw new TypeError('glob pattern string required') + } + + if (!options) options = {} + + // shortcut: comments match nothing. + if (!options.nocomment && pattern.charAt(0) === '#') { + return false + } + + // "" only matches "" + if (pattern.trim() === '') return p === '' + + return new Minimatch(pattern, options).match(p) +} + +function Minimatch (pattern, options) { + if (!(this instanceof Minimatch)) { + return new Minimatch(pattern, options) + } + + if (typeof pattern !== 'string') { + throw new TypeError('glob pattern string required') + } + + if (!options) options = {} + pattern = pattern.trim() + + // windows support: need to use /, not \ + if (path.sep !== '/') { + pattern = pattern.split(path.sep).join('/') + } + + this.options = options + this.set = [] + this.pattern = pattern + this.regexp = null + this.negate = false + this.comment = false + this.empty = false + + // make the set of regexps etc. + this.make() +} + +Minimatch.prototype.debug = function () {} + +Minimatch.prototype.make = make +function make () { + // don't do it more than once. + if (this._made) return + + var pattern = this.pattern + var options = this.options + + // empty patterns and comments match nothing. + if (!options.nocomment && pattern.charAt(0) === '#') { + this.comment = true + return + } + if (!pattern) { + this.empty = true + return + } + + // step 1: figure out negation, etc. + this.parseNegate() + + // step 2: expand braces + var set = this.globSet = this.braceExpand() + + if (options.debug) this.debug = console.error + + this.debug(this.pattern, set) + + // step 3: now we have a set, so turn each one into a series of path-portion + // matching patterns. + // These will be regexps, except in the case of "**", which is + // set to the GLOBSTAR object for globstar behavior, + // and will not contain any / characters + set = this.globParts = set.map(function (s) { + return s.split(slashSplit) + }) + + this.debug(this.pattern, set) + + // glob --> regexps + set = set.map(function (s, si, set) { + return s.map(this.parse, this) + }, this) + + this.debug(this.pattern, set) + + // filter out everything that didn't compile properly. + set = set.filter(function (s) { + return s.indexOf(false) === -1 + }) + + this.debug(this.pattern, set) + + this.set = set +} + +Minimatch.prototype.parseNegate = parseNegate +function parseNegate () { + var pattern = this.pattern + var negate = false + var options = this.options + var negateOffset = 0 + + if (options.nonegate) return + + for (var i = 0, l = pattern.length + ; i < l && pattern.charAt(i) === '!' + ; i++) { + negate = !negate + negateOffset++ + } + + if (negateOffset) this.pattern = pattern.substr(negateOffset) + this.negate = negate +} + +// Brace expansion: +// a{b,c}d -> abd acd +// a{b,}c -> abc ac +// a{0..3}d -> a0d a1d a2d a3d +// a{b,c{d,e}f}g -> abg acdfg acefg +// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg +// +// Invalid sets are not expanded. +// a{2..}b -> a{2..}b +// a{b}c -> a{b}c +minimatch.braceExpand = function (pattern, options) { + return braceExpand(pattern, options) +} + +Minimatch.prototype.braceExpand = braceExpand + +function braceExpand (pattern, options) { + if (!options) { + if (this instanceof Minimatch) { + options = this.options + } else { + options = {} + } + } + + pattern = typeof pattern === 'undefined' + ? this.pattern : pattern + + if (typeof pattern === 'undefined') { + throw new TypeError('undefined pattern') + } + + if (options.nobrace || + !pattern.match(/\{.*\}/)) { + // shortcut. no need to expand. + return [pattern] + } + + return expand(pattern) +} + +// parse a component of the expanded set. +// At this point, no pattern may contain "/" in it +// so we're going to return a 2d array, where each entry is the full +// pattern, split on '/', and then turned into a regular expression. +// A regexp is made at the end which joins each array with an +// escaped /, and another full one which joins each regexp with |. +// +// Following the lead of Bash 4.1, note that "**" only has special meaning +// when it is the *only* thing in a path portion. Otherwise, any series +// of * is equivalent to a single *. Globstar behavior is enabled by +// default, and can be disabled by setting options.noglobstar. +Minimatch.prototype.parse = parse +var SUBPARSE = {} +function parse (pattern, isSub) { + if (pattern.length > 1024 * 64) { + throw new TypeError('pattern is too long') + } + + var options = this.options + + // shortcuts + if (!options.noglobstar && pattern === '**') return GLOBSTAR + if (pattern === '') return '' + + var re = '' + var hasMagic = !!options.nocase + var escaping = false + // ? => one single character + var patternListStack = [] + var negativeLists = [] + var stateChar + var inClass = false + var reClassStart = -1 + var classStart = -1 + // . and .. never match anything that doesn't start with ., + // even when options.dot is set. + var patternStart = pattern.charAt(0) === '.' ? '' // anything + // not (start or / followed by . or .. followed by / or end) + : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))' + : '(?!\\.)' + var self = this + + function clearStateChar () { + if (stateChar) { + // we had some state-tracking character + // that wasn't consumed by this pass. + switch (stateChar) { + case '*': + re += star + hasMagic = true + break + case '?': + re += qmark + hasMagic = true + break + default: + re += '\\' + stateChar + break + } + self.debug('clearStateChar %j %j', stateChar, re) + stateChar = false + } + } + + for (var i = 0, len = pattern.length, c + ; (i < len) && (c = pattern.charAt(i)) + ; i++) { + this.debug('%s\t%s %s %j', pattern, i, re, c) + + // skip over any that are escaped. + if (escaping && reSpecials[c]) { + re += '\\' + c + escaping = false + continue + } + + switch (c) { + case '/': + // completely not allowed, even escaped. + // Should already be path-split by now. + return false + + case '\\': + clearStateChar() + escaping = true + continue + + // the various stateChar values + // for the "extglob" stuff. + case '?': + case '*': + case '+': + case '@': + case '!': + this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c) + + // all of those are literals inside a class, except that + // the glob [!a] means [^a] in regexp + if (inClass) { + this.debug(' in class') + if (c === '!' && i === classStart + 1) c = '^' + re += c + continue + } + + // if we already have a stateChar, then it means + // that there was something like ** or +? in there. + // Handle the stateChar, then proceed with this one. + self.debug('call clearStateChar %j', stateChar) + clearStateChar() + stateChar = c + // if extglob is disabled, then +(asdf|foo) isn't a thing. + // just clear the statechar *now*, rather than even diving into + // the patternList stuff. + if (options.noext) clearStateChar() + continue + + case '(': + if (inClass) { + re += '(' + continue + } + + if (!stateChar) { + re += '\\(' + continue + } + + patternListStack.push({ + type: stateChar, + start: i - 1, + reStart: re.length, + open: plTypes[stateChar].open, + close: plTypes[stateChar].close + }) + // negation is (?:(?!js)[^/]*) + re += stateChar === '!' ? '(?:(?!(?:' : '(?:' + this.debug('plType %j %j', stateChar, re) + stateChar = false + continue + + case ')': + if (inClass || !patternListStack.length) { + re += '\\)' + continue + } + + clearStateChar() + hasMagic = true + var pl = patternListStack.pop() + // negation is (?:(?!js)[^/]*) + // The others are (?:) + re += pl.close + if (pl.type === '!') { + negativeLists.push(pl) + } + pl.reEnd = re.length + continue + + case '|': + if (inClass || !patternListStack.length || escaping) { + re += '\\|' + escaping = false + continue + } + + clearStateChar() + re += '|' + continue + + // these are mostly the same in regexp and glob + case '[': + // swallow any state-tracking char before the [ + clearStateChar() + + if (inClass) { + re += '\\' + c + continue + } + + inClass = true + classStart = i + reClassStart = re.length + re += c + continue + + case ']': + // a right bracket shall lose its special + // meaning and represent itself in + // a bracket expression if it occurs + // first in the list. -- POSIX.2 2.8.3.2 + if (i === classStart + 1 || !inClass) { + re += '\\' + c + escaping = false + continue + } + + // handle the case where we left a class open. + // "[z-a]" is valid, equivalent to "\[z-a\]" + if (inClass) { + // split where the last [ was, make sure we don't have + // an invalid re. if so, re-walk the contents of the + // would-be class to re-translate any characters that + // were passed through as-is + // TODO: It would probably be faster to determine this + // without a try/catch and a new RegExp, but it's tricky + // to do safely. For now, this is safe and works. + var cs = pattern.substring(classStart + 1, i) + try { + RegExp('[' + cs + ']') + } catch (er) { + // not a valid class! + var sp = this.parse(cs, SUBPARSE) + re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]' + hasMagic = hasMagic || sp[1] + inClass = false + continue + } + } + + // finish up the class. + hasMagic = true + inClass = false + re += c + continue + + default: + // swallow any state char that wasn't consumed + clearStateChar() + + if (escaping) { + // no need + escaping = false + } else if (reSpecials[c] + && !(c === '^' && inClass)) { + re += '\\' + } + + re += c + + } // switch + } // for + + // handle the case where we left a class open. + // "[abc" is valid, equivalent to "\[abc" + if (inClass) { + // split where the last [ was, and escape it + // this is a huge pita. We now have to re-walk + // the contents of the would-be class to re-translate + // any characters that were passed through as-is + cs = pattern.substr(classStart + 1) + sp = this.parse(cs, SUBPARSE) + re = re.substr(0, reClassStart) + '\\[' + sp[0] + hasMagic = hasMagic || sp[1] + } + + // handle the case where we had a +( thing at the *end* + // of the pattern. + // each pattern list stack adds 3 chars, and we need to go through + // and escape any | chars that were passed through as-is for the regexp. + // Go through and escape them, taking care not to double-escape any + // | chars that were already escaped. + for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) { + var tail = re.slice(pl.reStart + pl.open.length) + this.debug('setting tail', re, pl) + // maybe some even number of \, then maybe 1 \, followed by a | + tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) { + if (!$2) { + // the | isn't already escaped, so escape it. + $2 = '\\' + } + + // need to escape all those slashes *again*, without escaping the + // one that we need for escaping the | character. As it works out, + // escaping an even number of slashes can be done by simply repeating + // it exactly after itself. That's why this trick works. + // + // I am sorry that you have to see this. + return $1 + $1 + $2 + '|' + }) + + this.debug('tail=%j\n %s', tail, tail, pl, re) + var t = pl.type === '*' ? star + : pl.type === '?' ? qmark + : '\\' + pl.type + + hasMagic = true + re = re.slice(0, pl.reStart) + t + '\\(' + tail + } + + // handle trailing things that only matter at the very end. + clearStateChar() + if (escaping) { + // trailing \\ + re += '\\\\' + } + + // only need to apply the nodot start if the re starts with + // something that could conceivably capture a dot + var addPatternStart = false + switch (re.charAt(0)) { + case '.': + case '[': + case '(': addPatternStart = true + } + + // Hack to work around lack of negative lookbehind in JS + // A pattern like: *.!(x).!(y|z) needs to ensure that a name + // like 'a.xyz.yz' doesn't match. So, the first negative + // lookahead, has to look ALL the way ahead, to the end of + // the pattern. + for (var n = negativeLists.length - 1; n > -1; n--) { + var nl = negativeLists[n] + + var nlBefore = re.slice(0, nl.reStart) + var nlFirst = re.slice(nl.reStart, nl.reEnd - 8) + var nlLast = re.slice(nl.reEnd - 8, nl.reEnd) + var nlAfter = re.slice(nl.reEnd) + + nlLast += nlAfter + + // Handle nested stuff like *(*.js|!(*.json)), where open parens + // mean that we should *not* include the ) in the bit that is considered + // "after" the negated section. + var openParensBefore = nlBefore.split('(').length - 1 + var cleanAfter = nlAfter + for (i = 0; i < openParensBefore; i++) { + cleanAfter = cleanAfter.replace(/\)[+*?]?/, '') + } + nlAfter = cleanAfter + + var dollar = '' + if (nlAfter === '' && isSub !== SUBPARSE) { + dollar = '$' + } + var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast + re = newRe + } + + // if the re is not "" at this point, then we need to make sure + // it doesn't match against an empty path part. + // Otherwise a/* will match a/, which it should not. + if (re !== '' && hasMagic) { + re = '(?=.)' + re + } + + if (addPatternStart) { + re = patternStart + re + } + + // parsing just a piece of a larger pattern. + if (isSub === SUBPARSE) { + return [re, hasMagic] + } + + // skip the regexp for non-magical patterns + // unescape anything in it, though, so that it'll be + // an exact match against a file etc. + if (!hasMagic) { + return globUnescape(pattern) + } + + var flags = options.nocase ? 'i' : '' + try { + var regExp = new RegExp('^' + re + '$', flags) + } catch (er) { + // If it was an invalid regular expression, then it can't match + // anything. This trick looks for a character after the end of + // the string, which is of course impossible, except in multi-line + // mode, but it's not a /m regex. + return new RegExp('$.') + } + + regExp._glob = pattern + regExp._src = re + + return regExp +} + +minimatch.makeRe = function (pattern, options) { + return new Minimatch(pattern, options || {}).makeRe() +} + +Minimatch.prototype.makeRe = makeRe +function makeRe () { + if (this.regexp || this.regexp === false) return this.regexp + + // at this point, this.set is a 2d array of partial + // pattern strings, or "**". + // + // It's better to use .match(). This function shouldn't + // be used, really, but it's pretty convenient sometimes, + // when you just want to work with a regex. + var set = this.set + + if (!set.length) { + this.regexp = false + return this.regexp + } + var options = this.options + + var twoStar = options.noglobstar ? star + : options.dot ? twoStarDot + : twoStarNoDot + var flags = options.nocase ? 'i' : '' + + var re = set.map(function (pattern) { + return pattern.map(function (p) { + return (p === GLOBSTAR) ? twoStar + : (typeof p === 'string') ? regExpEscape(p) + : p._src + }).join('\\\/') + }).join('|') + + // must match entire pattern + // ending in a * or ** will make it less strict. + re = '^(?:' + re + ')$' + + // can match anything, as long as it's not this. + if (this.negate) re = '^(?!' + re + ').*$' + + try { + this.regexp = new RegExp(re, flags) + } catch (ex) { + this.regexp = false + } + return this.regexp +} + +minimatch.match = function (list, pattern, options) { + options = options || {} + var mm = new Minimatch(pattern, options) + list = list.filter(function (f) { + return mm.match(f) + }) + if (mm.options.nonull && !list.length) { + list.push(pattern) + } + return list +} + +Minimatch.prototype.match = match +function match (f, partial) { + this.debug('match', f, this.pattern) + // short-circuit in the case of busted things. + // comments, etc. + if (this.comment) return false + if (this.empty) return f === '' + + if (f === '/' && partial) return true + + var options = this.options + + // windows: need to use /, not \ + if (path.sep !== '/') { + f = f.split(path.sep).join('/') + } + + // treat the test path as a set of pathparts. + f = f.split(slashSplit) + this.debug(this.pattern, 'split', f) + + // just ONE of the pattern sets in this.set needs to match + // in order for it to be valid. If negating, then just one + // match means that we have failed. + // Either way, return on the first hit. + + var set = this.set + this.debug(this.pattern, 'set', set) + + // Find the basename of the path by looking for the last non-empty segment + var filename + var i + for (i = f.length - 1; i >= 0; i--) { + filename = f[i] + if (filename) break + } + + for (i = 0; i < set.length; i++) { + var pattern = set[i] + var file = f + if (options.matchBase && pattern.length === 1) { + file = [filename] + } + var hit = this.matchOne(file, pattern, partial) + if (hit) { + if (options.flipNegate) return true + return !this.negate + } + } + + // didn't get any hits. this is success if it's a negative + // pattern, failure otherwise. + if (options.flipNegate) return false + return this.negate +} + +// set partial to true to test if, for example, +// "/a/b" matches the start of "/*/b/*/d" +// Partial means, if you run out of file before you run +// out of pattern, then that's fine, as long as all +// the parts match. +Minimatch.prototype.matchOne = function (file, pattern, partial) { + var options = this.options + + this.debug('matchOne', + { 'this': this, file: file, pattern: pattern }) + + this.debug('matchOne', file.length, pattern.length) + + for (var fi = 0, + pi = 0, + fl = file.length, + pl = pattern.length + ; (fi < fl) && (pi < pl) + ; fi++, pi++) { + this.debug('matchOne loop') + var p = pattern[pi] + var f = file[fi] + + this.debug(pattern, p, f) + + // should be impossible. + // some invalid regexp stuff in the set. + if (p === false) return false + + if (p === GLOBSTAR) { + this.debug('GLOBSTAR', [pattern, p, f]) + + // "**" + // a/**/b/**/c would match the following: + // a/b/x/y/z/c + // a/x/y/z/b/c + // a/b/x/b/x/c + // a/b/c + // To do this, take the rest of the pattern after + // the **, and see if it would match the file remainder. + // If so, return success. + // If not, the ** "swallows" a segment, and try again. + // This is recursively awful. + // + // a/**/b/**/c matching a/b/x/y/z/c + // - a matches a + // - doublestar + // - matchOne(b/x/y/z/c, b/**/c) + // - b matches b + // - doublestar + // - matchOne(x/y/z/c, c) -> no + // - matchOne(y/z/c, c) -> no + // - matchOne(z/c, c) -> no + // - matchOne(c, c) yes, hit + var fr = fi + var pr = pi + 1 + if (pr === pl) { + this.debug('** at the end') + // a ** at the end will just swallow the rest. + // We have found a match. + // however, it will not swallow /.x, unless + // options.dot is set. + // . and .. are *never* matched by **, for explosively + // exponential reasons. + for (; fi < fl; fi++) { + if (file[fi] === '.' || file[fi] === '..' || + (!options.dot && file[fi].charAt(0) === '.')) return false + } + return true + } + + // ok, let's see if we can swallow whatever we can. + while (fr < fl) { + var swallowee = file[fr] + + this.debug('\nglobstar while', file, fr, pattern, pr, swallowee) + + // XXX remove this slice. Just pass the start index. + if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { + this.debug('globstar found match!', fr, fl, swallowee) + // found a match. + return true + } else { + // can't swallow "." or ".." ever. + // can only swallow ".foo" when explicitly asked. + if (swallowee === '.' || swallowee === '..' || + (!options.dot && swallowee.charAt(0) === '.')) { + this.debug('dot detected!', file, fr, pattern, pr) + break + } + + // ** swallows a segment, and continue. + this.debug('globstar swallow a segment, and continue') + fr++ + } + } + + // no match was found. + // However, in partial mode, we can't say this is necessarily over. + // If there's more *pattern* left, then + if (partial) { + // ran out of file + this.debug('\n>>> no match, partial?', file, fr, pattern, pr) + if (fr === fl) return true + } + return false + } + + // something other than ** + // non-magic patterns just have to match exactly + // patterns with magic have been turned into regexps. + var hit + if (typeof p === 'string') { + if (options.nocase) { + hit = f.toLowerCase() === p.toLowerCase() + } else { + hit = f === p + } + this.debug('string match', p, f, hit) + } else { + hit = f.match(p) + this.debug('pattern match', p, f, hit) + } + + if (!hit) return false + } + + // Note: ending in / means that we'll get a final "" + // at the end of the pattern. This can only match a + // corresponding "" at the end of the file. + // If the file ends in /, then it can only match a + // a pattern that ends in /, unless the pattern just + // doesn't have any more for it. But, a/b/ should *not* + // match "a/b/*", even though "" matches against the + // [^/]*? pattern, except in partial mode, where it might + // simply not be reached yet. + // However, a/b/ should still satisfy a/* + + // now either we fell off the end of the pattern, or we're done. + if (fi === fl && pi === pl) { + // ran out of pattern and filename at the same time. + // an exact hit! + return true + } else if (fi === fl) { + // ran out of file, but still had pattern left. + // this is ok if we're doing the match as part of + // a glob fs traversal. + return partial + } else if (pi === pl) { + // ran out of pattern, still have file left. + // this is only acceptable if we're on the very last + // empty segment of a file with a trailing slash. + // a/* should match a/b/ + var emptyFileEnd = (fi === fl - 1) && (file[fi] === '') + return emptyFileEnd + } + + // should be unreachable. + throw new Error('wtf?') +} + +// replace stuff like \* with * +function globUnescape (s) { + return s.replace(/\\(.)/g, '$1') +} + +function regExpEscape (s) { + return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') +} + +},{"brace-expansion":11,"path":22}],21:[function(require,module,exports){ +var wrappy = require('wrappy') +module.exports = wrappy(once) +module.exports.strict = wrappy(onceStrict) + +once.proto = once(function () { + Object.defineProperty(Function.prototype, 'once', { + value: function () { + return once(this) + }, + configurable: true + }) + + Object.defineProperty(Function.prototype, 'onceStrict', { + value: function () { + return onceStrict(this) + }, + configurable: true + }) +}) + +function once (fn) { + var f = function () { + if (f.called) return f.value + f.called = true + return f.value = fn.apply(this, arguments) + } + f.called = false + return f +} + +function onceStrict (fn) { + var f = function () { + if (f.called) + throw new Error(f.onceError) + f.called = true + return f.value = fn.apply(this, arguments) + } + var name = fn.name || 'Function wrapped with `once`' + f.onceError = name + " shouldn't be called more than once" + f.called = false + return f +} + +},{"wrappy":29}],22:[function(require,module,exports){ +(function (process){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// resolves . and .. elements in a path array with directory names there +// must be no slashes, empty elements, or device names (c:\) in the array +// (so also no leading and trailing slashes - it does not distinguish +// relative and absolute paths) +function normalizeArray(parts, allowAboveRoot) { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up--; up) { + parts.unshift('..'); + } + } + + return parts; +} + +// Split a filename into [root, dir, basename, ext], unix version +// 'root' is just a slash, or nothing. +var splitPathRe = + /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; +var splitPath = function(filename) { + return splitPathRe.exec(filename).slice(1); +}; + +// path.resolve([from ...], to) +// posix version +exports.resolve = function() { + var resolvedPath = '', + resolvedAbsolute = false; + + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? arguments[i] : process.cwd(); + + // Skip empty and invalid entries + if (typeof path !== 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + continue; + } + + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = path.charAt(0) === '/'; + } + + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + + // Normalize the path + resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { + return !!p; + }), !resolvedAbsolute).join('/'); + + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; +}; + +// path.normalize(path) +// posix version +exports.normalize = function(path) { + var isAbsolute = exports.isAbsolute(path), + trailingSlash = substr(path, -1) === '/'; + + // Normalize the path + path = normalizeArray(filter(path.split('/'), function(p) { + return !!p; + }), !isAbsolute).join('/'); + + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + + return (isAbsolute ? '/' : '') + path; +}; + +// posix version +exports.isAbsolute = function(path) { + return path.charAt(0) === '/'; +}; + +// posix version +exports.join = function() { + var paths = Array.prototype.slice.call(arguments, 0); + return exports.normalize(filter(paths, function(p, index) { + if (typeof p !== 'string') { + throw new TypeError('Arguments to path.join must be strings'); + } + return p; + }).join('/')); +}; + + +// path.relative(from, to) +// posix version +exports.relative = function(from, to) { + from = exports.resolve(from).substr(1); + to = exports.resolve(to).substr(1); + + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + + return outputParts.join('/'); +}; + +exports.sep = '/'; +exports.delimiter = ':'; + +exports.dirname = function(path) { + var result = splitPath(path), + root = result[0], + dir = result[1]; + + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.substr(0, dir.length - 1); + } + + return root + dir; +}; + + +exports.basename = function(path, ext) { + var f = splitPath(path)[2]; + // TODO: make this comparison case-insensitive on windows? + if (ext && f.substr(-1 * ext.length) === ext) { + f = f.substr(0, f.length - ext.length); + } + return f; +}; + + +exports.extname = function(path) { + return splitPath(path)[3]; +}; + +function filter (xs, f) { + if (xs.filter) return xs.filter(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + if (f(xs[i], i, xs)) res.push(xs[i]); + } + return res; +} + +// String.prototype.substr - negative index don't work in IE8 +var substr = 'ab'.substr(-1) === 'b' + ? function (str, start, len) { return str.substr(start, len) } + : function (str, start, len) { + if (start < 0) start = str.length + start; + return str.substr(start, len); + } +; + +}).call(this,require('_process')) +},{"_process":24}],23:[function(require,module,exports){ +(function (process){ +'use strict'; + +function posix(path) { + return path.charAt(0) === '/'; +} + +function win32(path) { + // https://github.com/nodejs/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56 + var splitDeviceRe = /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/; + var result = splitDeviceRe.exec(path); + var device = result[1] || ''; + var isUnc = Boolean(device && device.charAt(1) !== ':'); + + // UNC paths are always absolute + return Boolean(result[2] || isUnc); +} + +module.exports = process.platform === 'win32' ? win32 : posix; +module.exports.posix = posix; +module.exports.win32 = win32; + +}).call(this,require('_process')) +},{"_process":24}],24:[function(require,module,exports){ +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +} ()) +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; +process.prependListener = noop; +process.prependOnceListener = noop; + +process.listeners = function (name) { return [] } + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + +},{}],25:[function(require,module,exports){ +// Underscore.js 1.8.3 +// http://underscorejs.org +// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +(function() { + + // Baseline setup + // -------------- + + // Establish the root object, `window` in the browser, or `exports` on the server. + var root = this; + + // Save the previous value of the `_` variable. + var previousUnderscore = root._; + + // Save bytes in the minified (but not gzipped) version: + var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; + + // Create quick reference variables for speed access to core prototypes. + var + push = ArrayProto.push, + slice = ArrayProto.slice, + toString = ObjProto.toString, + hasOwnProperty = ObjProto.hasOwnProperty; + + // All **ECMAScript 5** native function implementations that we hope to use + // are declared here. + var + nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeBind = FuncProto.bind, + nativeCreate = Object.create; + + // Naked function reference for surrogate-prototype-swapping. + var Ctor = function(){}; + + // Create a safe reference to the Underscore object for use below. + var _ = function(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; + }; + + // Export the Underscore object for **Node.js**, with + // backwards-compatibility for the old `require()` API. If we're in + // the browser, add `_` as a global object. + if (typeof exports !== 'undefined') { + if (typeof module !== 'undefined' && module.exports) { + exports = module.exports = _; + } + exports._ = _; + } else { + root._ = _; + } + + // Current version. + _.VERSION = '1.8.3'; + + // Internal function that returns an efficient (for current engines) version + // of the passed-in callback, to be repeatedly applied in other Underscore + // functions. + var optimizeCb = function(func, context, argCount) { + if (context === void 0) return func; + switch (argCount == null ? 3 : argCount) { + case 1: return function(value) { + return func.call(context, value); + }; + case 2: return function(value, other) { + return func.call(context, value, other); + }; + case 3: return function(value, index, collection) { + return func.call(context, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(context, accumulator, value, index, collection); + }; + } + return function() { + return func.apply(context, arguments); + }; + }; + + // A mostly-internal function to generate callbacks that can be applied + // to each element in a collection, returning the desired result — either + // identity, an arbitrary callback, a property matcher, or a property accessor. + var cb = function(value, context, argCount) { + if (value == null) return _.identity; + if (_.isFunction(value)) return optimizeCb(value, context, argCount); + if (_.isObject(value)) return _.matcher(value); + return _.property(value); + }; + _.iteratee = function(value, context) { + return cb(value, context, Infinity); + }; + + // An internal function for creating assigner functions. + var createAssigner = function(keysFunc, undefinedOnly) { + return function(obj) { + var length = arguments.length; + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key]; + } + } + return obj; + }; + }; + + // An internal function for creating a new object that inherits from another. + var baseCreate = function(prototype) { + if (!_.isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; + }; + + var property = function(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; + }; + + // Helper for collection methods to determine whether a collection + // should be iterated as an array or as an object + // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength + // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 + var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; + var getLength = property('length'); + var isArrayLike = function(collection) { + var length = getLength(collection); + return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX; + }; + + // Collection Functions + // -------------------- + + // The cornerstone, an `each` implementation, aka `forEach`. + // Handles raw objects in addition to array-likes. Treats all + // sparse array-likes as if they were dense. + _.each = _.forEach = function(obj, iteratee, context) { + iteratee = optimizeCb(iteratee, context); + var i, length; + if (isArrayLike(obj)) { + for (i = 0, length = obj.length; i < length; i++) { + iteratee(obj[i], i, obj); + } + } else { + var keys = _.keys(obj); + for (i = 0, length = keys.length; i < length; i++) { + iteratee(obj[keys[i]], keys[i], obj); + } + } + return obj; + }; + + // Return the results of applying the iteratee to each element. + _.map = _.collect = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length, + results = Array(length); + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + results[index] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + }; + + // Create a reducing function iterating left or right. + function createReduce(dir) { + // Optimized iterator function as using arguments.length + // in the main function will deoptimize the, see #1991. + function iterator(obj, iteratee, memo, keys, index, length) { + for (; index >= 0 && index < length; index += dir) { + var currentKey = keys ? keys[index] : index; + memo = iteratee(memo, obj[currentKey], currentKey, obj); + } + return memo; + } + + return function(obj, iteratee, memo, context) { + iteratee = optimizeCb(iteratee, context, 4); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length, + index = dir > 0 ? 0 : length - 1; + // Determine the initial value if none is provided. + if (arguments.length < 3) { + memo = obj[keys ? keys[index] : index]; + index += dir; + } + return iterator(obj, iteratee, memo, keys, index, length); + }; + } + + // **Reduce** builds up a single result from a list of values, aka `inject`, + // or `foldl`. + _.reduce = _.foldl = _.inject = createReduce(1); + + // The right-associative version of reduce, also known as `foldr`. + _.reduceRight = _.foldr = createReduce(-1); + + // Return the first value which passes a truth test. Aliased as `detect`. + _.find = _.detect = function(obj, predicate, context) { + var key; + if (isArrayLike(obj)) { + key = _.findIndex(obj, predicate, context); + } else { + key = _.findKey(obj, predicate, context); + } + if (key !== void 0 && key !== -1) return obj[key]; + }; + + // Return all the elements that pass a truth test. + // Aliased as `select`. + _.filter = _.select = function(obj, predicate, context) { + var results = []; + predicate = cb(predicate, context); + _.each(obj, function(value, index, list) { + if (predicate(value, index, list)) results.push(value); + }); + return results; + }; + + // Return all the elements for which a truth test fails. + _.reject = function(obj, predicate, context) { + return _.filter(obj, _.negate(cb(predicate)), context); + }; + + // Determine whether all of the elements match a truth test. + // Aliased as `all`. + _.every = _.all = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + if (!predicate(obj[currentKey], currentKey, obj)) return false; + } + return true; + }; + + // Determine if at least one element in the object matches a truth test. + // Aliased as `any`. + _.some = _.any = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + if (predicate(obj[currentKey], currentKey, obj)) return true; + } + return false; + }; + + // Determine if the array or object contains a given item (using `===`). + // Aliased as `includes` and `include`. + _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) { + if (!isArrayLike(obj)) obj = _.values(obj); + if (typeof fromIndex != 'number' || guard) fromIndex = 0; + return _.indexOf(obj, item, fromIndex) >= 0; + }; + + // Invoke a method (with arguments) on every item in a collection. + _.invoke = function(obj, method) { + var args = slice.call(arguments, 2); + var isFunc = _.isFunction(method); + return _.map(obj, function(value) { + var func = isFunc ? method : value[method]; + return func == null ? func : func.apply(value, args); + }); + }; + + // Convenience version of a common use case of `map`: fetching a property. + _.pluck = function(obj, key) { + return _.map(obj, _.property(key)); + }; + + // Convenience version of a common use case of `filter`: selecting only objects + // containing specific `key:value` pairs. + _.where = function(obj, attrs) { + return _.filter(obj, _.matcher(attrs)); + }; + + // Convenience version of a common use case of `find`: getting the first object + // containing specific `key:value` pairs. + _.findWhere = function(obj, attrs) { + return _.find(obj, _.matcher(attrs)); + }; + + // Return the maximum element (or element-based computation). + _.max = function(obj, iteratee, context) { + var result = -Infinity, lastComputed = -Infinity, + value, computed; + if (iteratee == null && obj != null) { + obj = isArrayLike(obj) ? obj : _.values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value > result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + _.each(obj, function(value, index, list) { + computed = iteratee(value, index, list); + if (computed > lastComputed || computed === -Infinity && result === -Infinity) { + result = value; + lastComputed = computed; + } + }); + } + return result; + }; + + // Return the minimum element (or element-based computation). + _.min = function(obj, iteratee, context) { + var result = Infinity, lastComputed = Infinity, + value, computed; + if (iteratee == null && obj != null) { + obj = isArrayLike(obj) ? obj : _.values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value < result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + _.each(obj, function(value, index, list) { + computed = iteratee(value, index, list); + if (computed < lastComputed || computed === Infinity && result === Infinity) { + result = value; + lastComputed = computed; + } + }); + } + return result; + }; + + // Shuffle a collection, using the modern version of the + // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle). + _.shuffle = function(obj) { + var set = isArrayLike(obj) ? obj : _.values(obj); + var length = set.length; + var shuffled = Array(length); + for (var index = 0, rand; index < length; index++) { + rand = _.random(0, index); + if (rand !== index) shuffled[index] = shuffled[rand]; + shuffled[rand] = set[index]; + } + return shuffled; + }; + + // Sample **n** random values from a collection. + // If **n** is not specified, returns a single random element. + // The internal `guard` argument allows it to work with `map`. + _.sample = function(obj, n, guard) { + if (n == null || guard) { + if (!isArrayLike(obj)) obj = _.values(obj); + return obj[_.random(obj.length - 1)]; + } + return _.shuffle(obj).slice(0, Math.max(0, n)); + }; + + // Sort the object's values by a criterion produced by an iteratee. + _.sortBy = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + return _.pluck(_.map(obj, function(value, index, list) { + return { + value: value, + index: index, + criteria: iteratee(value, index, list) + }; + }).sort(function(left, right) { + var a = left.criteria; + var b = right.criteria; + if (a !== b) { + if (a > b || a === void 0) return 1; + if (a < b || b === void 0) return -1; + } + return left.index - right.index; + }), 'value'); + }; + + // An internal function used for aggregate "group by" operations. + var group = function(behavior) { + return function(obj, iteratee, context) { + var result = {}; + iteratee = cb(iteratee, context); + _.each(obj, function(value, index) { + var key = iteratee(value, index, obj); + behavior(result, value, key); + }); + return result; + }; + }; + + // Groups the object's values by a criterion. Pass either a string attribute + // to group by, or a function that returns the criterion. + _.groupBy = group(function(result, value, key) { + if (_.has(result, key)) result[key].push(value); else result[key] = [value]; + }); + + // Indexes the object's values by a criterion, similar to `groupBy`, but for + // when you know that your index values will be unique. + _.indexBy = group(function(result, value, key) { + result[key] = value; + }); + + // Counts instances of an object that group by a certain criterion. Pass + // either a string attribute to count by, or a function that returns the + // criterion. + _.countBy = group(function(result, value, key) { + if (_.has(result, key)) result[key]++; else result[key] = 1; + }); + + // Safely create a real, live array from anything iterable. + _.toArray = function(obj) { + if (!obj) return []; + if (_.isArray(obj)) return slice.call(obj); + if (isArrayLike(obj)) return _.map(obj, _.identity); + return _.values(obj); + }; + + // Return the number of elements in an object. + _.size = function(obj) { + if (obj == null) return 0; + return isArrayLike(obj) ? obj.length : _.keys(obj).length; + }; + + // Split a collection into two arrays: one whose elements all satisfy the given + // predicate, and one whose elements all do not satisfy the predicate. + _.partition = function(obj, predicate, context) { + predicate = cb(predicate, context); + var pass = [], fail = []; + _.each(obj, function(value, key, obj) { + (predicate(value, key, obj) ? pass : fail).push(value); + }); + return [pass, fail]; + }; + + // Array Functions + // --------------- + + // Get the first element of an array. Passing **n** will return the first N + // values in the array. Aliased as `head` and `take`. The **guard** check + // allows it to work with `_.map`. + _.first = _.head = _.take = function(array, n, guard) { + if (array == null) return void 0; + if (n == null || guard) return array[0]; + return _.initial(array, array.length - n); + }; + + // Returns everything but the last entry of the array. Especially useful on + // the arguments object. Passing **n** will return all the values in + // the array, excluding the last N. + _.initial = function(array, n, guard) { + return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); + }; + + // Get the last element of an array. Passing **n** will return the last N + // values in the array. + _.last = function(array, n, guard) { + if (array == null) return void 0; + if (n == null || guard) return array[array.length - 1]; + return _.rest(array, Math.max(0, array.length - n)); + }; + + // Returns everything but the first entry of the array. Aliased as `tail` and `drop`. + // Especially useful on the arguments object. Passing an **n** will return + // the rest N values in the array. + _.rest = _.tail = _.drop = function(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); + }; + + // Trim out all falsy values from an array. + _.compact = function(array) { + return _.filter(array, _.identity); + }; + + // Internal implementation of a recursive `flatten` function. + var flatten = function(input, shallow, strict, startIndex) { + var output = [], idx = 0; + for (var i = startIndex || 0, length = getLength(input); i < length; i++) { + var value = input[i]; + if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) { + //flatten current level of array or arguments object + if (!shallow) value = flatten(value, shallow, strict); + var j = 0, len = value.length; + output.length += len; + while (j < len) { + output[idx++] = value[j++]; + } + } else if (!strict) { + output[idx++] = value; + } + } + return output; + }; + + // Flatten out an array, either recursively (by default), or just one level. + _.flatten = function(array, shallow) { + return flatten(array, shallow, false); + }; + + // Return a version of the array that does not contain the specified value(s). + _.without = function(array) { + return _.difference(array, slice.call(arguments, 1)); + }; + + // Produce a duplicate-free version of the array. If the array has already + // been sorted, you have the option of using a faster algorithm. + // Aliased as `unique`. + _.uniq = _.unique = function(array, isSorted, iteratee, context) { + if (!_.isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!_.contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!_.contains(result, value)) { + result.push(value); + } + } + return result; + }; + + // Produce an array that contains the union: each distinct element from all of + // the passed-in arrays. + _.union = function() { + return _.uniq(flatten(arguments, true, true)); + }; + + // Produce an array that contains every item shared between all the + // passed-in arrays. + _.intersection = function(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = getLength(array); i < length; i++) { + var item = array[i]; + if (_.contains(result, item)) continue; + for (var j = 1; j < argsLength; j++) { + if (!_.contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; + }; + + // Take the difference between one array and a number of other arrays. + // Only the elements present in just the first array will remain. + _.difference = function(array) { + var rest = flatten(arguments, true, true, 1); + return _.filter(array, function(value){ + return !_.contains(rest, value); + }); + }; + + // Zip together multiple lists into a single array -- elements that share + // an index go together. + _.zip = function() { + return _.unzip(arguments); + }; + + // Complement of _.zip. Unzip accepts an array of arrays and groups + // each array's elements on shared indices + _.unzip = function(array) { + var length = array && _.max(array, getLength).length || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = _.pluck(array, index); + } + return result; + }; + + // Converts lists into objects. Pass either a single array of `[key, value]` + // pairs, or two parallel arrays of the same length -- one of keys, and one of + // the corresponding values. + _.object = function(list, values) { + var result = {}; + for (var i = 0, length = getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; + }; + + // Generator function to create the findIndex and findLastIndex functions + function createPredicateIndexFinder(dir) { + return function(array, predicate, context) { + predicate = cb(predicate, context); + var length = getLength(array); + var index = dir > 0 ? 0 : length - 1; + for (; index >= 0 && index < length; index += dir) { + if (predicate(array[index], index, array)) return index; + } + return -1; + }; + } + + // Returns the first index on an array-like that passes a predicate test + _.findIndex = createPredicateIndexFinder(1); + _.findLastIndex = createPredicateIndexFinder(-1); + + // Use a comparator function to figure out the smallest index at which + // an object should be inserted so as to maintain order. Uses binary search. + _.sortedIndex = function(array, obj, iteratee, context) { + iteratee = cb(iteratee, context, 1); + var value = iteratee(obj); + var low = 0, high = getLength(array); + while (low < high) { + var mid = Math.floor((low + high) / 2); + if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; + } + return low; + }; + + // Generator function to create the indexOf and lastIndexOf functions + function createIndexFinder(dir, predicateFind, sortedIndex) { + return function(array, item, idx) { + var i = 0, length = getLength(array); + if (typeof idx == 'number') { + if (dir > 0) { + i = idx >= 0 ? idx : Math.max(idx + length, i); + } else { + length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1; + } + } else if (sortedIndex && idx && length) { + idx = sortedIndex(array, item); + return array[idx] === item ? idx : -1; + } + if (item !== item) { + idx = predicateFind(slice.call(array, i, length), _.isNaN); + return idx >= 0 ? idx + i : -1; + } + for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { + if (array[idx] === item) return idx; + } + return -1; + }; + } + + // Return the position of the first occurrence of an item in an array, + // or -1 if the item is not included in the array. + // If the array is large and already in sort order, pass `true` + // for **isSorted** to use binary search. + _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex); + _.lastIndexOf = createIndexFinder(-1, _.findLastIndex); + + // Generate an integer Array containing an arithmetic progression. A port of + // the native Python `range()` function. See + // [the Python documentation](http://docs.python.org/library/functions.html#range). + _.range = function(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + step = step || 1; + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; + }; + + // Function (ahem) Functions + // ------------------ + + // Determines whether to execute a function as a constructor + // or a normal function with the provided arguments + var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) { + if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args); + var self = baseCreate(sourceFunc.prototype); + var result = sourceFunc.apply(self, args); + if (_.isObject(result)) return result; + return self; + }; + + // Create a function bound to a given object (assigning `this`, and arguments, + // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if + // available. + _.bind = function(func, context) { + if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1)); + if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function'); + var args = slice.call(arguments, 2); + var bound = function() { + return executeBound(func, bound, context, this, args.concat(slice.call(arguments))); + }; + return bound; + }; + + // Partially apply a function by creating a version that has had some of its + // arguments pre-filled, without changing its dynamic `this` context. _ acts + // as a placeholder, allowing any combination of arguments to be pre-filled. + _.partial = function(func) { + var boundArgs = slice.call(arguments, 1); + var bound = function() { + var position = 0, length = boundArgs.length; + var args = Array(length); + for (var i = 0; i < length; i++) { + args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i]; + } + while (position < arguments.length) args.push(arguments[position++]); + return executeBound(func, bound, this, this, args); + }; + return bound; + }; + + // Bind a number of an object's methods to that object. Remaining arguments + // are the method names to be bound. Useful for ensuring that all callbacks + // defined on an object belong to it. + _.bindAll = function(obj) { + var i, length = arguments.length, key; + if (length <= 1) throw new Error('bindAll must be passed function names'); + for (i = 1; i < length; i++) { + key = arguments[i]; + obj[key] = _.bind(obj[key], obj); + } + return obj; + }; + + // Memoize an expensive function by storing its results. + _.memoize = function(func, hasher) { + var memoize = function(key) { + var cache = memoize.cache; + var address = '' + (hasher ? hasher.apply(this, arguments) : key); + if (!_.has(cache, address)) cache[address] = func.apply(this, arguments); + return cache[address]; + }; + memoize.cache = {}; + return memoize; + }; + + // Delays a function for the given number of milliseconds, and then calls + // it with the arguments supplied. + _.delay = function(func, wait) { + var args = slice.call(arguments, 2); + return setTimeout(function(){ + return func.apply(null, args); + }, wait); + }; + + // Defers a function, scheduling it to run after the current call stack has + // cleared. + _.defer = _.partial(_.delay, _, 1); + + // Returns a function, that, when invoked, will only be triggered at most once + // during a given window of time. Normally, the throttled function will run + // as much as it can, without ever going more than once per `wait` duration; + // but if you'd like to disable the execution on the leading edge, pass + // `{leading: false}`. To disable execution on the trailing edge, ditto. + _.throttle = function(func, wait, options) { + var context, args, result; + var timeout = null; + var previous = 0; + if (!options) options = {}; + var later = function() { + previous = options.leading === false ? 0 : _.now(); + timeout = null; + result = func.apply(context, args); + if (!timeout) context = args = null; + }; + return function() { + var now = _.now(); + if (!previous && options.leading === false) previous = now; + var remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0 || remaining > wait) { + if (timeout) { + clearTimeout(timeout); + timeout = null; + } + previous = now; + result = func.apply(context, args); + if (!timeout) context = args = null; + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + return result; + }; + }; + + // Returns a function, that, as long as it continues to be invoked, will not + // be triggered. The function will be called after it stops being called for + // N milliseconds. If `immediate` is passed, trigger the function on the + // leading edge, instead of the trailing. + _.debounce = function(func, wait, immediate) { + var timeout, args, context, timestamp, result; + + var later = function() { + var last = _.now() - timestamp; + + if (last < wait && last >= 0) { + timeout = setTimeout(later, wait - last); + } else { + timeout = null; + if (!immediate) { + result = func.apply(context, args); + if (!timeout) context = args = null; + } + } + }; + + return function() { + context = this; + args = arguments; + timestamp = _.now(); + var callNow = immediate && !timeout; + if (!timeout) timeout = setTimeout(later, wait); + if (callNow) { + result = func.apply(context, args); + context = args = null; + } + + return result; + }; + }; + + // Returns the first function passed as an argument to the second, + // allowing you to adjust arguments, run code before and after, and + // conditionally execute the original function. + _.wrap = function(func, wrapper) { + return _.partial(wrapper, func); + }; + + // Returns a negated version of the passed-in predicate. + _.negate = function(predicate) { + return function() { + return !predicate.apply(this, arguments); + }; + }; + + // Returns a function that is the composition of a list of functions, each + // consuming the return value of the function that follows. + _.compose = function() { + var args = arguments; + var start = args.length - 1; + return function() { + var i = start; + var result = args[start].apply(this, arguments); + while (i--) result = args[i].call(this, result); + return result; + }; + }; + + // Returns a function that will only be executed on and after the Nth call. + _.after = function(times, func) { + return function() { + if (--times < 1) { + return func.apply(this, arguments); + } + }; + }; + + // Returns a function that will only be executed up to (but not including) the Nth call. + _.before = function(times, func) { + var memo; + return function() { + if (--times > 0) { + memo = func.apply(this, arguments); + } + if (times <= 1) func = null; + return memo; + }; + }; + + // Returns a function that will be executed at most one time, no matter how + // often you call it. Useful for lazy initialization. + _.once = _.partial(_.before, 2); + + // Object Functions + // ---------------- + + // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. + var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); + var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; + + function collectNonEnumProps(obj, keys) { + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto; + + // Constructor is a special case. + var prop = 'constructor'; + if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop); + + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) { + keys.push(prop); + } + } + } + + // Retrieve the names of an object's own properties. + // Delegates to **ECMAScript 5**'s native `Object.keys` + _.keys = function(obj) { + if (!_.isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (_.has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + }; + + // Retrieve all the property names of an object. + _.allKeys = function(obj) { + if (!_.isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + }; + + // Retrieve the values of an object's properties. + _.values = function(obj) { + var keys = _.keys(obj); + var length = keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[keys[i]]; + } + return values; + }; + + // Returns the results of applying the iteratee to each element of the object + // In contrast to _.map it returns an object + _.mapObject = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var keys = _.keys(obj), + length = keys.length, + results = {}, + currentKey; + for (var index = 0; index < length; index++) { + currentKey = keys[index]; + results[currentKey] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + }; + + // Convert an object into a list of `[key, value]` pairs. + _.pairs = function(obj) { + var keys = _.keys(obj); + var length = keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [keys[i], obj[keys[i]]]; + } + return pairs; + }; + + // Invert the keys and values of an object. The values must be serializable. + _.invert = function(obj) { + var result = {}; + var keys = _.keys(obj); + for (var i = 0, length = keys.length; i < length; i++) { + result[obj[keys[i]]] = keys[i]; + } + return result; + }; + + // Return a sorted list of the function names available on the object. + // Aliased as `methods` + _.functions = _.methods = function(obj) { + var names = []; + for (var key in obj) { + if (_.isFunction(obj[key])) names.push(key); + } + return names.sort(); + }; + + // Extend a given object with all the properties in passed-in object(s). + _.extend = createAssigner(_.allKeys); + + // Assigns a given object with all the own properties in the passed-in object(s) + // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) + _.extendOwn = _.assign = createAssigner(_.keys); + + // Returns the first key on an object that passes a predicate test + _.findKey = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = _.keys(obj), key; + for (var i = 0, length = keys.length; i < length; i++) { + key = keys[i]; + if (predicate(obj[key], key, obj)) return key; + } + }; + + // Return a copy of the object only containing the whitelisted properties. + _.pick = function(object, oiteratee, context) { + var result = {}, obj = object, iteratee, keys; + if (obj == null) return result; + if (_.isFunction(oiteratee)) { + keys = _.allKeys(obj); + iteratee = optimizeCb(oiteratee, context); + } else { + keys = flatten(arguments, false, false, 1); + iteratee = function(value, key, obj) { return key in obj; }; + obj = Object(obj); + } + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i]; + var value = obj[key]; + if (iteratee(value, key, obj)) result[key] = value; + } + return result; + }; + + // Return a copy of the object without the blacklisted properties. + _.omit = function(obj, iteratee, context) { + if (_.isFunction(iteratee)) { + iteratee = _.negate(iteratee); + } else { + var keys = _.map(flatten(arguments, false, false, 1), String); + iteratee = function(value, key) { + return !_.contains(keys, key); + }; + } + return _.pick(obj, iteratee, context); + }; + + // Fill in a given object with default properties. + _.defaults = createAssigner(_.allKeys, true); + + // Creates an object that inherits from the given prototype object. + // If additional properties are provided then they will be added to the + // created object. + _.create = function(prototype, props) { + var result = baseCreate(prototype); + if (props) _.extendOwn(result, props); + return result; + }; + + // Create a (shallow-cloned) duplicate of an object. + _.clone = function(obj) { + if (!_.isObject(obj)) return obj; + return _.isArray(obj) ? obj.slice() : _.extend({}, obj); + }; + + // Invokes interceptor with the obj, and then returns obj. + // The primary purpose of this method is to "tap into" a method chain, in + // order to perform operations on intermediate results within the chain. + _.tap = function(obj, interceptor) { + interceptor(obj); + return obj; + }; + + // Returns whether an object has a given set of `key:value` pairs. + _.isMatch = function(object, attrs) { + var keys = _.keys(attrs), length = keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; + }; + + + // Internal recursive comparison function for `isEqual`. + var eq = function(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // A strict comparison is necessary because `null == undefined`. + if (a == null || b == null) return a === b; + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = toString.call(a); + if (className !== toString.call(b)) return false; + switch (className) { + // Strings, numbers, regular expressions, dates, and booleans are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + } + + var areArrays = className === '[object Array]'; + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; + + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor && + _.isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } + + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); + + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var keys = _.keys(a), key; + length = keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (_.keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = keys[length]; + if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; + }; + + // Perform a deep comparison to check if two objects are equal. + _.isEqual = function(a, b) { + return eq(a, b); + }; + + // Is a given array, string, or object empty? + // An "empty" object has no enumerable own-properties. + _.isEmpty = function(obj) { + if (obj == null) return true; + if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0; + return _.keys(obj).length === 0; + }; + + // Is a given value a DOM element? + _.isElement = function(obj) { + return !!(obj && obj.nodeType === 1); + }; + + // Is a given value an array? + // Delegates to ECMA5's native Array.isArray + _.isArray = nativeIsArray || function(obj) { + return toString.call(obj) === '[object Array]'; + }; + + // Is a given variable an object? + _.isObject = function(obj) { + var type = typeof obj; + return type === 'function' || type === 'object' && !!obj; + }; + + // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError. + _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) { + _['is' + name] = function(obj) { + return toString.call(obj) === '[object ' + name + ']'; + }; + }); + + // Define a fallback version of the method in browsers (ahem, IE < 9), where + // there isn't any inspectable "Arguments" type. + if (!_.isArguments(arguments)) { + _.isArguments = function(obj) { + return _.has(obj, 'callee'); + }; + } + + // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8, + // IE 11 (#1621), and in Safari 8 (#1929). + if (typeof /./ != 'function' && typeof Int8Array != 'object') { + _.isFunction = function(obj) { + return typeof obj == 'function' || false; + }; + } + + // Is a given object a finite number? + _.isFinite = function(obj) { + return isFinite(obj) && !isNaN(parseFloat(obj)); + }; + + // Is the given value `NaN`? (NaN is the only number which does not equal itself). + _.isNaN = function(obj) { + return _.isNumber(obj) && obj !== +obj; + }; + + // Is a given value a boolean? + _.isBoolean = function(obj) { + return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; + }; + + // Is a given value equal to null? + _.isNull = function(obj) { + return obj === null; + }; + + // Is a given variable undefined? + _.isUndefined = function(obj) { + return obj === void 0; + }; + + // Shortcut function for checking if an object has a given property directly + // on itself (in other words, not on a prototype). + _.has = function(obj, key) { + return obj != null && hasOwnProperty.call(obj, key); + }; + + // Utility Functions + // ----------------- + + // Run Underscore.js in *noConflict* mode, returning the `_` variable to its + // previous owner. Returns a reference to the Underscore object. + _.noConflict = function() { + root._ = previousUnderscore; + return this; + }; + + // Keep the identity function around for default iteratees. + _.identity = function(value) { + return value; + }; + + // Predicate-generating functions. Often useful outside of Underscore. + _.constant = function(value) { + return function() { + return value; + }; + }; + + _.noop = function(){}; + + _.property = property; + + // Generates a function for a given object that returns a given property. + _.propertyOf = function(obj) { + return obj == null ? function(){} : function(key) { + return obj[key]; + }; + }; + + // Returns a predicate for checking whether an object has a given set of + // `key:value` pairs. + _.matcher = _.matches = function(attrs) { + attrs = _.extendOwn({}, attrs); + return function(obj) { + return _.isMatch(obj, attrs); + }; + }; + + // Run a function **n** times. + _.times = function(n, iteratee, context) { + var accum = Array(Math.max(0, n)); + iteratee = optimizeCb(iteratee, context, 1); + for (var i = 0; i < n; i++) accum[i] = iteratee(i); + return accum; + }; + + // Return a random integer between min and max (inclusive). + _.random = function(min, max) { + if (max == null) { + max = min; + min = 0; + } + return min + Math.floor(Math.random() * (max - min + 1)); + }; + + // A (possibly faster) way to get the current timestamp as an integer. + _.now = Date.now || function() { + return new Date().getTime(); + }; + + // List of HTML entities for escaping. + var escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; + var unescapeMap = _.invert(escapeMap); + + // Functions for escaping and unescaping strings to/from HTML interpolation. + var createEscaper = function(map) { + var escaper = function(match) { + return map[match]; + }; + // Regexes for identifying a key that needs to be escaped + var source = '(?:' + _.keys(map).join('|') + ')'; + var testRegexp = RegExp(source); + var replaceRegexp = RegExp(source, 'g'); + return function(string) { + string = string == null ? '' : '' + string; + return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; + }; + }; + _.escape = createEscaper(escapeMap); + _.unescape = createEscaper(unescapeMap); + + // If the value of the named `property` is a function then invoke it with the + // `object` as context; otherwise, return it. + _.result = function(object, property, fallback) { + var value = object == null ? void 0 : object[property]; + if (value === void 0) { + value = fallback; + } + return _.isFunction(value) ? value.call(object) : value; + }; + + // Generate a unique integer id (unique within the entire client session). + // Useful for temporary DOM ids. + var idCounter = 0; + _.uniqueId = function(prefix) { + var id = ++idCounter + ''; + return prefix ? prefix + id : id; + }; + + // By default, Underscore uses ERB-style template delimiters, change the + // following template settings to use alternative delimiters. + _.templateSettings = { + evaluate : /<%([\s\S]+?)%>/g, + interpolate : /<%=([\s\S]+?)%>/g, + escape : /<%-([\s\S]+?)%>/g + }; + + // When customizing `templateSettings`, if you don't want to define an + // interpolation, evaluation or escaping regex, we need one that is + // guaranteed not to match. + var noMatch = /(.)^/; + + // Certain characters need to be escaped so that they can be put into a + // string literal. + var escapes = { + "'": "'", + '\\': '\\', + '\r': 'r', + '\n': 'n', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + var escaper = /\\|'|\r|\n|\u2028|\u2029/g; + + var escapeChar = function(match) { + return '\\' + escapes[match]; + }; + + // JavaScript micro-templating, similar to John Resig's implementation. + // Underscore templating handles arbitrary delimiters, preserves whitespace, + // and correctly escapes quotes within interpolated code. + // NB: `oldSettings` only exists for backwards compatibility. + _.template = function(text, settings, oldSettings) { + if (!settings && oldSettings) settings = oldSettings; + settings = _.defaults({}, settings, _.templateSettings); + + // Combine delimiters into one regular expression via alternation. + var matcher = RegExp([ + (settings.escape || noMatch).source, + (settings.interpolate || noMatch).source, + (settings.evaluate || noMatch).source + ].join('|') + '|$', 'g'); + + // Compile the template source, escaping string literals appropriately. + var index = 0; + var source = "__p+='"; + text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { + source += text.slice(index, offset).replace(escaper, escapeChar); + index = offset + match.length; + + if (escape) { + source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; + } else if (interpolate) { + source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; + } else if (evaluate) { + source += "';\n" + evaluate + "\n__p+='"; + } + + // Adobe VMs need the match returned to produce the correct offest. + return match; + }); + source += "';\n"; + + // If a variable is not specified, place data values in local scope. + if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; + + source = "var __t,__p='',__j=Array.prototype.join," + + "print=function(){__p+=__j.call(arguments,'');};\n" + + source + 'return __p;\n'; + + try { + var render = new Function(settings.variable || 'obj', '_', source); + } catch (e) { + e.source = source; + throw e; + } + + var template = function(data) { + return render.call(this, data, _); + }; + + // Provide the compiled source as a convenience for precompilation. + var argument = settings.variable || 'obj'; + template.source = 'function(' + argument + '){\n' + source + '}'; + + return template; + }; + + // Add a "chain" function. Start chaining a wrapped Underscore object. + _.chain = function(obj) { + var instance = _(obj); + instance._chain = true; + return instance; + }; + + // OOP + // --------------- + // If Underscore is called as a function, it returns a wrapped object that + // can be used OO-style. This wrapper holds altered versions of all the + // underscore functions. Wrapped objects may be chained. + + // Helper function to continue chaining intermediate results. + var result = function(instance, obj) { + return instance._chain ? _(obj).chain() : obj; + }; + + // Add your own custom functions to the Underscore object. + _.mixin = function(obj) { + _.each(_.functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return result(this, func.apply(_, args)); + }; + }); + }; + + // Add all of the Underscore functions to the wrapper object. + _.mixin(_); + + // Add all mutator Array functions to the wrapper. + _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0]; + return result(this, obj); + }; + }); + + // Add all accessor Array functions to the wrapper. + _.each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + return result(this, method.apply(this._wrapped, arguments)); + }; + }); + + // Extracts the result from a wrapped and chained object. + _.prototype.value = function() { + return this._wrapped; + }; + + // Provide unwrapping proxy for some methods used in engine operations + // such as arithmetic and JSON stringification. + _.prototype.valueOf = _.prototype.toJSON = _.prototype.value; + + _.prototype.toString = function() { + return '' + this._wrapped; + }; + + // AMD registration happens at the end for compatibility with AMD loaders + // that may not enforce next-turn semantics on modules. Even though general + // practice for AMD registration is to be anonymous, underscore registers + // as a named module because, like jQuery, it is a base library that is + // popular enough to be bundled in a third party lib, but not be part of + // an AMD load request. Those cases could generate an error when an + // anonymous define() is called outside of a loader request. + if (typeof define === 'function' && define.amd) { + define('underscore', [], function() { + return _; + }); + } +}.call(this)); + +},{}],26:[function(require,module,exports){ +arguments[4][19][0].apply(exports,arguments) +},{"dup":19}],27:[function(require,module,exports){ +module.exports = function isBuffer(arg) { + return arg && typeof arg === 'object' + && typeof arg.copy === 'function' + && typeof arg.fill === 'function' + && typeof arg.readUInt8 === 'function'; +} +},{}],28:[function(require,module,exports){ +(function (process,global){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var formatRegExp = /%[sdj%]/g; +exports.format = function(f) { + if (!isString(f)) { + var objects = []; + for (var i = 0; i < arguments.length; i++) { + objects.push(inspect(arguments[i])); + } + return objects.join(' '); + } + + var i = 1; + var args = arguments; + var len = args.length; + var str = String(f).replace(formatRegExp, function(x) { + if (x === '%%') return '%'; + if (i >= len) return x; + switch (x) { + case '%s': return String(args[i++]); + case '%d': return Number(args[i++]); + case '%j': + try { + return JSON.stringify(args[i++]); + } catch (_) { + return '[Circular]'; + } + default: + return x; + } + }); + for (var x = args[i]; i < len; x = args[++i]) { + if (isNull(x) || !isObject(x)) { + str += ' ' + x; + } else { + str += ' ' + inspect(x); + } + } + return str; +}; + + +// Mark that a method should not be used. +// Returns a modified function which warns once by default. +// If --no-deprecation is set, then it is a no-op. +exports.deprecate = function(fn, msg) { + // Allow for deprecating things in the process of starting up. + if (isUndefined(global.process)) { + return function() { + return exports.deprecate(fn, msg).apply(this, arguments); + }; + } + + if (process.noDeprecation === true) { + return fn; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (process.throwDeprecation) { + throw new Error(msg); + } else if (process.traceDeprecation) { + console.trace(msg); + } else { + console.error(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; +}; + + +var debugs = {}; +var debugEnviron; +exports.debuglog = function(set) { + if (isUndefined(debugEnviron)) + debugEnviron = process.env.NODE_DEBUG || ''; + set = set.toUpperCase(); + if (!debugs[set]) { + if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { + var pid = process.pid; + debugs[set] = function() { + var msg = exports.format.apply(exports, arguments); + console.error('%s %d: %s', set, pid, msg); + }; + } else { + debugs[set] = function() {}; + } + } + return debugs[set]; +}; + + +/** + * Echos the value of a value. Trys to print the value out + * in the best way possible given the different types. + * + * @param {Object} obj The object to print out. + * @param {Object} opts Optional options object that alters the output. + */ +/* legacy: obj, showHidden, depth, colors*/ +function inspect(obj, opts) { + // default options + var ctx = { + seen: [], + stylize: stylizeNoColor + }; + // legacy... + if (arguments.length >= 3) ctx.depth = arguments[2]; + if (arguments.length >= 4) ctx.colors = arguments[3]; + if (isBoolean(opts)) { + // legacy... + ctx.showHidden = opts; + } else if (opts) { + // got an "options" object + exports._extend(ctx, opts); + } + // set default options + if (isUndefined(ctx.showHidden)) ctx.showHidden = false; + if (isUndefined(ctx.depth)) ctx.depth = 2; + if (isUndefined(ctx.colors)) ctx.colors = false; + if (isUndefined(ctx.customInspect)) ctx.customInspect = true; + if (ctx.colors) ctx.stylize = stylizeWithColor; + return formatValue(ctx, obj, ctx.depth); +} +exports.inspect = inspect; + + +// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics +inspect.colors = { + 'bold' : [1, 22], + 'italic' : [3, 23], + 'underline' : [4, 24], + 'inverse' : [7, 27], + 'white' : [37, 39], + 'grey' : [90, 39], + 'black' : [30, 39], + 'blue' : [34, 39], + 'cyan' : [36, 39], + 'green' : [32, 39], + 'magenta' : [35, 39], + 'red' : [31, 39], + 'yellow' : [33, 39] +}; + +// Don't use 'blue' not visible on cmd.exe +inspect.styles = { + 'special': 'cyan', + 'number': 'yellow', + 'boolean': 'yellow', + 'undefined': 'grey', + 'null': 'bold', + 'string': 'green', + 'date': 'magenta', + // "name": intentionally not styling + 'regexp': 'red' +}; + + +function stylizeWithColor(str, styleType) { + var style = inspect.styles[styleType]; + + if (style) { + return '\u001b[' + inspect.colors[style][0] + 'm' + str + + '\u001b[' + inspect.colors[style][1] + 'm'; + } else { + return str; + } +} + + +function stylizeNoColor(str, styleType) { + return str; +} + + +function arrayToHash(array) { + var hash = {}; + + array.forEach(function(val, idx) { + hash[val] = true; + }); + + return hash; +} + + +function formatValue(ctx, value, recurseTimes) { + // Provide a hook for user-specified inspect functions. + // Check that value is an object with an inspect function on it + if (ctx.customInspect && + value && + isFunction(value.inspect) && + // Filter out the util module, it's inspect function is special + value.inspect !== exports.inspect && + // Also filter out any prototype objects using the circular check. + !(value.constructor && value.constructor.prototype === value)) { + var ret = value.inspect(recurseTimes, ctx); + if (!isString(ret)) { + ret = formatValue(ctx, ret, recurseTimes); + } + return ret; + } + + // Primitive types cannot have properties + var primitive = formatPrimitive(ctx, value); + if (primitive) { + return primitive; + } + + // Look up the keys of the object. + var keys = Object.keys(value); + var visibleKeys = arrayToHash(keys); + + if (ctx.showHidden) { + keys = Object.getOwnPropertyNames(value); + } + + // IE doesn't make error fields non-enumerable + // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx + if (isError(value) + && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { + return formatError(value); + } + + // Some type of object without properties can be shortcutted. + if (keys.length === 0) { + if (isFunction(value)) { + var name = value.name ? ': ' + value.name : ''; + return ctx.stylize('[Function' + name + ']', 'special'); + } + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } + if (isDate(value)) { + return ctx.stylize(Date.prototype.toString.call(value), 'date'); + } + if (isError(value)) { + return formatError(value); + } + } + + var base = '', array = false, braces = ['{', '}']; + + // Make Array say that they are Array + if (isArray(value)) { + array = true; + braces = ['[', ']']; + } + + // Make functions say that they are functions + if (isFunction(value)) { + var n = value.name ? ': ' + value.name : ''; + base = ' [Function' + n + ']'; + } + + // Make RegExps say that they are RegExps + if (isRegExp(value)) { + base = ' ' + RegExp.prototype.toString.call(value); + } + + // Make dates with properties first say the date + if (isDate(value)) { + base = ' ' + Date.prototype.toUTCString.call(value); + } + + // Make error with message first say the error + if (isError(value)) { + base = ' ' + formatError(value); + } + + if (keys.length === 0 && (!array || value.length == 0)) { + return braces[0] + base + braces[1]; + } + + if (recurseTimes < 0) { + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } else { + return ctx.stylize('[Object]', 'special'); + } + } + + ctx.seen.push(value); + + var output; + if (array) { + output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); + } else { + output = keys.map(function(key) { + return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); + }); + } + + ctx.seen.pop(); + + return reduceToSingleString(output, base, braces); +} + + +function formatPrimitive(ctx, value) { + if (isUndefined(value)) + return ctx.stylize('undefined', 'undefined'); + if (isString(value)) { + var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') + .replace(/'/g, "\\'") + .replace(/\\"/g, '"') + '\''; + return ctx.stylize(simple, 'string'); + } + if (isNumber(value)) + return ctx.stylize('' + value, 'number'); + if (isBoolean(value)) + return ctx.stylize('' + value, 'boolean'); + // For some reason typeof null is "object", so special case here. + if (isNull(value)) + return ctx.stylize('null', 'null'); +} + + +function formatError(value) { + return '[' + Error.prototype.toString.call(value) + ']'; +} + + +function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { + var output = []; + for (var i = 0, l = value.length; i < l; ++i) { + if (hasOwnProperty(value, String(i))) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + String(i), true)); + } else { + output.push(''); + } + } + keys.forEach(function(key) { + if (!key.match(/^\d+$/)) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + key, true)); + } + }); + return output; +} + + +function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { + var name, str, desc; + desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; + if (desc.get) { + if (desc.set) { + str = ctx.stylize('[Getter/Setter]', 'special'); + } else { + str = ctx.stylize('[Getter]', 'special'); + } + } else { + if (desc.set) { + str = ctx.stylize('[Setter]', 'special'); + } + } + if (!hasOwnProperty(visibleKeys, key)) { + name = '[' + key + ']'; + } + if (!str) { + if (ctx.seen.indexOf(desc.value) < 0) { + if (isNull(recurseTimes)) { + str = formatValue(ctx, desc.value, null); + } else { + str = formatValue(ctx, desc.value, recurseTimes - 1); + } + if (str.indexOf('\n') > -1) { + if (array) { + str = str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n').substr(2); + } else { + str = '\n' + str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n'); + } + } + } else { + str = ctx.stylize('[Circular]', 'special'); + } + } + if (isUndefined(name)) { + if (array && key.match(/^\d+$/)) { + return str; + } + name = JSON.stringify('' + key); + if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { + name = name.substr(1, name.length - 2); + name = ctx.stylize(name, 'name'); + } else { + name = name.replace(/'/g, "\\'") + .replace(/\\"/g, '"') + .replace(/(^"|"$)/g, "'"); + name = ctx.stylize(name, 'string'); + } + } + + return name + ': ' + str; +} + + +function reduceToSingleString(output, base, braces) { + var numLinesEst = 0; + var length = output.reduce(function(prev, cur) { + numLinesEst++; + if (cur.indexOf('\n') >= 0) numLinesEst++; + return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; + }, 0); + + if (length > 60) { + return braces[0] + + (base === '' ? '' : base + '\n ') + + ' ' + + output.join(',\n ') + + ' ' + + braces[1]; + } + + return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; +} + + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. +function isArray(ar) { + return Array.isArray(ar); +} +exports.isArray = isArray; + +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; + +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; + +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; + +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; + +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; + +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; + +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; + +function isRegExp(re) { + return isObject(re) && objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; + +function isDate(d) { + return isObject(d) && objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; + +function isError(e) { + return isObject(e) && + (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; + +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; + +function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; + +exports.isBuffer = require('./support/isBuffer'); + +function objectToString(o) { + return Object.prototype.toString.call(o); +} + + +function pad(n) { + return n < 10 ? '0' + n.toString(10) : n.toString(10); +} + + +var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', + 'Oct', 'Nov', 'Dec']; + +// 26 Feb 16:19:34 +function timestamp() { + var d = new Date(); + var time = [pad(d.getHours()), + pad(d.getMinutes()), + pad(d.getSeconds())].join(':'); + return [d.getDate(), months[d.getMonth()], time].join(' '); +} + + +// log is just a thin wrapper to console.log that prepends a timestamp +exports.log = function() { + console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); +}; + + +/** + * Inherit the prototype methods from one constructor into another. + * + * The Function.prototype.inherits from lang.js rewritten as a standalone + * function (not on Function.prototype). NOTE: If this file is to be loaded + * during bootstrapping this function needs to be rewritten using some native + * functions as prototype setup using normal JavaScript does not work as + * expected during bootstrapping (see mirror.js in r114903). + * + * @param {function} ctor Constructor function which needs to inherit the + * prototype. + * @param {function} superCtor Constructor function to inherit prototype from. + */ +exports.inherits = require('inherits'); + +exports._extend = function(origin, add) { + // Don't do anything if add isn't an object + if (!add || !isObject(add)) return origin; + + var keys = Object.keys(add); + var i = keys.length; + while (i--) { + origin[keys[i]] = add[keys[i]]; + } + return origin; +}; + +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"./support/isBuffer":27,"_process":24,"inherits":26}],29:[function(require,module,exports){ +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) + + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + + return wrapper + + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} + +},{}]},{},[7])(7) +}); \ No newline at end of file diff --git a/assets/javascripts/workers/search.16e2a7d4.min.js b/assets/javascripts/workers/search.16e2a7d4.min.js new file mode 100644 index 00000000..e0dc159e --- /dev/null +++ b/assets/javascripts/workers/search.16e2a7d4.min.js @@ -0,0 +1,48 @@ +"use strict";(()=>{var ge=Object.create;var W=Object.defineProperty,ye=Object.defineProperties,me=Object.getOwnPropertyDescriptor,ve=Object.getOwnPropertyDescriptors,xe=Object.getOwnPropertyNames,G=Object.getOwnPropertySymbols,Se=Object.getPrototypeOf,X=Object.prototype.hasOwnProperty,Qe=Object.prototype.propertyIsEnumerable;var J=(t,e,r)=>e in t?W(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,M=(t,e)=>{for(var r in e||(e={}))X.call(e,r)&&J(t,r,e[r]);if(G)for(var r of G(e))Qe.call(e,r)&&J(t,r,e[r]);return t},Z=(t,e)=>ye(t,ve(e));var K=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var be=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of xe(e))!X.call(t,i)&&i!==r&&W(t,i,{get:()=>e[i],enumerable:!(n=me(e,i))||n.enumerable});return t};var H=(t,e,r)=>(r=t!=null?ge(Se(t)):{},be(e||!t||!t.__esModule?W(r,"default",{value:t,enumerable:!0}):r,t));var z=(t,e,r)=>new Promise((n,i)=>{var s=u=>{try{a(r.next(u))}catch(c){i(c)}},o=u=>{try{a(r.throw(u))}catch(c){i(c)}},a=u=>u.done?n(u.value):Promise.resolve(u.value).then(s,o);a((r=r.apply(t,e)).next())});var re=K((ee,te)=>{/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 + * Copyright (C) 2020 Oliver Nightingale + * @license MIT + */(function(){var t=function(e){var r=new t.Builder;return r.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),r.searchPipeline.add(t.stemmer),e.call(r,r),r.build()};t.version="2.3.9";/*! + * lunr.utils + * Copyright (C) 2020 Oliver Nightingale + */t.utils={},t.utils.warn=function(e){return function(r){e.console&&console.warn&&console.warn(r)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var r=Object.create(null),n=Object.keys(e),i=0;i0){var h=t.utils.clone(r)||{};h.position=[a,c],h.index=s.length,s.push(new t.Token(n.slice(a,o),h))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;/*! + * lunr.Pipeline + * Copyright (C) 2020 Oliver Nightingale + */t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,r){r in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+r),e.label=r,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var r=e.label&&e.label in this.registeredFunctions;r||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. +`,e)},t.Pipeline.load=function(e){var r=new t.Pipeline;return e.forEach(function(n){var i=t.Pipeline.registeredFunctions[n];if(i)r.add(i);else throw new Error("Cannot load unregistered function: "+n)}),r},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(r){t.Pipeline.warnIfFunctionNotRegistered(r),this._stack.push(r)},this)},t.Pipeline.prototype.after=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(e);if(n==-1)throw new Error("Cannot find existingFn");n=n+1,this._stack.splice(n,0,r)},t.Pipeline.prototype.before=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(e);if(n==-1)throw new Error("Cannot find existingFn");this._stack.splice(n,0,r)},t.Pipeline.prototype.remove=function(e){var r=this._stack.indexOf(e);r!=-1&&this._stack.splice(r,1)},t.Pipeline.prototype.run=function(e){for(var r=this._stack.length,n=0;n1&&(oe&&(n=s),o!=e);)i=n-r,s=r+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ou?h+=2:a==u&&(r+=n[c+1]*i[h+1],c+=2,h+=2);return r},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),r=1,n=0;r0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}if(s.str.length==0&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var c=s.node.edges["*"];else{var c=new t.TokenSet;s.node.edges["*"]=c}s.str.length==1&&(c.final=!0),i.push({node:c,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var h=s.str.charAt(0),y=s.str.charAt(1),g;y in s.node.edges?g=s.node.edges[y]:(g=new t.TokenSet,s.node.edges[y]=g),s.str.length==1&&(g.final=!0),i.push({node:g,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return n},t.TokenSet.fromString=function(e){for(var r=new t.TokenSet,n=r,i=0,s=e.length;i=e;r--){var n=this.uncheckedNodes[r],i=n.child.toString();i in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[i]:(n.child._str=i,this.minimizedNodes[i]=n.child),this.uncheckedNodes.pop()}};/*! + * lunr.Index + * Copyright (C) 2020 Oliver Nightingale + */t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(r){var n=new t.QueryParser(e,r);n.parse()})},t.Index.prototype.query=function(e){for(var r=new t.Query(this.fields),n=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,r){var n=e[this._ref],i=Object.keys(this._fields);this._documents[n]=r||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,r;do e=this.next(),r=e.charCodeAt(0);while(r>47&&r<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var r=e.next();if(r==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(r.charCodeAt(0)==92){e.escapeCharacter();continue}if(r==":")return t.QueryLexer.lexField;if(r=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(r=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(r=="+"&&e.width()===1||r=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(r.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,r){this.lexer=new t.QueryLexer(e),this.query=r,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var r=e.peekLexeme();if(r!=null)switch(r.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(n+=" with value '"+r.str+"'"),new t.QueryParseError(n,r.start,r.end)}},t.QueryParser.parsePresence=function(e){var r=e.consumeLexeme();if(r!=null){switch(r.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+r.str+"'";throw new t.QueryParseError(n,r.start,r.end)}var i=e.peekLexeme();if(i==null){var n="expecting term or field, found nothing";throw new t.QueryParseError(n,r.start,r.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var n="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(n,i.start,i.end)}}},t.QueryParser.parseField=function(e){var r=e.consumeLexeme();if(r!=null){if(e.query.allFields.indexOf(r.str)==-1){var n=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+r.str+"', possible fields: "+n;throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.fields=[r.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,r.start,r.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var r=e.consumeLexeme();if(r!=null){e.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(n==null){e.nextClause();return}switch(n.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+n.type+"'";throw new t.QueryParseError(i,n.start,n.end)}}},t.QueryParser.parseEditDistance=function(e){var r=e.consumeLexeme();if(r!=null){var n=parseInt(r.str,10);if(isNaN(n)){var i="edit distance must be numeric";throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.editDistance=n;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var r=e.consumeLexeme();if(r!=null){var n=parseInt(r.str,10);if(isNaN(n)){var i="boost must be numeric";throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.boost=n;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,r){typeof define=="function"&&define.amd?define(r):typeof ee=="object"?te.exports=r():e.lunr=r()}(this,function(){return t})})()});var q=K((Re,ne)=>{"use strict";/*! + * escape-html + * Copyright(c) 2012-2013 TJ Holowaychuk + * Copyright(c) 2015 Andreas Lubbe + * Copyright(c) 2015 Tiancheng "Timothy" Gu + * MIT Licensed + */var Le=/["'&<>]/;ne.exports=we;function we(t){var e=""+t,r=Le.exec(e);if(!r)return e;var n,i="",s=0,o=0;for(s=r.index;s=0;r--){let n=t[r];typeof n=="string"?n=document.createTextNode(n):n.parentNode&&n.parentNode.removeChild(n),r?e.insertBefore(this.previousSibling,n):e.replaceChild(n,this)}}}));var ie=H(q());function se(t){let e=new Map,r=new Set;for(let n of t){let[i,s]=n.location.split("#"),o=n.location,a=n.title,u=n.tags,c=(0,ie.default)(n.text).replace(/\s+(?=[,.:;!?])/g,"").replace(/\s+/g," ");if(s){let h=e.get(i);r.has(h)?e.set(o,{location:o,title:a,text:c,parent:h}):(h.title=n.title,h.text=c,r.add(h))}else e.set(o,M({location:o,title:a,text:c},u&&{tags:u}))}return e}var oe=H(q());function ae(t,e){let r=new RegExp(t.separator,"img"),n=(i,s,o)=>`${s}${o}`;return i=>{i=i.replace(/[\s*+\-:~^]+/g," ").trim();let s=new RegExp(`(^|${t.separator})(${i.replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&").replace(r,"|")})`,"img");return o=>(e?(0,oe.default)(o):o).replace(s,n).replace(/<\/mark>(\s+)]*>/img,"$1")}}function ue(t){let e=new lunr.Query(["title","text"]);return new lunr.QueryParser(t,e).parse(),e.clauses}function ce(t,e){var i;let r=new Set(t),n={};for(let s=0;s!n.has(i)))]}var U=class{constructor({config:e,docs:r,options:n}){this.options=n,this.documents=se(r),this.highlight=ae(e,!1),lunr.tokenizer.separator=new RegExp(e.separator),this.index=lunr(function(){e.lang.length===1&&e.lang[0]!=="en"?this.use(lunr[e.lang[0]]):e.lang.length>1&&this.use(lunr.multiLanguage(...e.lang));let i=Ee(["trimmer","stopWordFilter","stemmer"],n.pipeline);for(let s of e.lang.map(o=>o==="en"?lunr:lunr[o]))for(let o of i)this.pipeline.remove(s[o]),this.searchPipeline.remove(s[o]);this.ref("location"),this.field("title",{boost:1e3}),this.field("text"),this.field("tags",{boost:1e6,extractor:s=>{let{tags:o=[]}=s;return o.reduce((a,u)=>[...a,...lunr.tokenizer(u)],[])}});for(let s of r)this.add(s,{boost:s.boost})})}search(e){if(e)try{let r=this.highlight(e),n=ue(e).filter(o=>o.presence!==lunr.Query.presence.PROHIBITED),i=this.index.search(`${e}*`).reduce((o,{ref:a,score:u,matchData:c})=>{let h=this.documents.get(a);if(typeof h!="undefined"){let{location:y,title:g,text:b,tags:m,parent:Q}=h,p=ce(n,Object.keys(c.metadata)),d=+!Q+ +Object.values(p).every(w=>w);o.push(Z(M({location:y,title:r(g),text:r(b)},m&&{tags:m.map(r)}),{score:u*(1+d),terms:p}))}return o},[]).sort((o,a)=>a.score-o.score).reduce((o,a)=>{let u=this.documents.get(a.location);if(typeof u!="undefined"){let c="parent"in u?u.parent.location:u.location;o.set(c,[...o.get(c)||[],a])}return o},new Map),s;if(this.options.suggestions){let o=this.index.query(a=>{for(let u of n)a.term(u.term,{fields:["title"],presence:lunr.Query.presence.REQUIRED,wildcard:lunr.Query.wildcard.TRAILING})});s=o.length?Object.keys(o[0].matchData.metadata):[]}return M({items:[...i.values()]},typeof s!="undefined"&&{suggestions:s})}catch(r){console.warn(`Invalid query: ${e} \u2013 see https://bit.ly/2s3ChXG`)}return{items:[]}}};var Y;function ke(t){return z(this,null,function*(){let e="../lunr";if(typeof parent!="undefined"&&"IFrameWorker"in parent){let n=document.querySelector("script[src]"),[i]=n.src.split("/worker");e=e.replace("..",i)}let r=[];for(let n of t.lang){switch(n){case"ja":r.push(`${e}/tinyseg.js`);break;case"hi":case"th":r.push(`${e}/wordcut.js`);break}n!=="en"&&r.push(`${e}/min/lunr.${n}.min.js`)}t.lang.length>1&&r.push(`${e}/min/lunr.multi.min.js`),r.length&&(yield importScripts(`${e}/min/lunr.stemmer.support.min.js`,...r))})}function Te(t){return z(this,null,function*(){switch(t.type){case 0:return yield ke(t.data.config),Y=new U(t.data),{type:1};case 2:return{type:3,data:Y?Y.search(t.data):{items:[]}};default:throw new TypeError("Invalid message type")}})}self.lunr=le.default;addEventListener("message",t=>z(void 0,null,function*(){postMessage(yield Te(t.data))}));})(); +//# sourceMappingURL=search.16e2a7d4.min.js.map + diff --git a/assets/javascripts/workers/search.16e2a7d4.min.js.map b/assets/javascripts/workers/search.16e2a7d4.min.js.map new file mode 100644 index 00000000..fa01f374 --- /dev/null +++ b/assets/javascripts/workers/search.16e2a7d4.min.js.map @@ -0,0 +1,8 @@ +{ + "version": 3, + "sources": ["node_modules/lunr/lunr.js", "node_modules/escape-html/index.js", "src/assets/javascripts/integrations/search/worker/main/index.ts", "src/assets/javascripts/polyfills/index.ts", "src/assets/javascripts/integrations/search/document/index.ts", "src/assets/javascripts/integrations/search/highlighter/index.ts", "src/assets/javascripts/integrations/search/query/_/index.ts", "src/assets/javascripts/integrations/search/_/index.ts"], + "sourceRoot": "../../../..", + "sourcesContent": ["/**\n * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9\n * Copyright (C) 2020 Oliver Nightingale\n * @license MIT\n */\n\n;(function(){\n\n/**\n * A convenience function for configuring and constructing\n * a new lunr Index.\n *\n * A lunr.Builder instance is created and the pipeline setup\n * with a trimmer, stop word filter and stemmer.\n *\n * This builder object is yielded to the configuration function\n * that is passed as a parameter, allowing the list of fields\n * and other builder parameters to be customised.\n *\n * All documents _must_ be added within the passed config function.\n *\n * @example\n * var idx = lunr(function () {\n * this.field('title')\n * this.field('body')\n * this.ref('id')\n *\n * documents.forEach(function (doc) {\n * this.add(doc)\n * }, this)\n * })\n *\n * @see {@link lunr.Builder}\n * @see {@link lunr.Pipeline}\n * @see {@link lunr.trimmer}\n * @see {@link lunr.stopWordFilter}\n * @see {@link lunr.stemmer}\n * @namespace {function} lunr\n */\nvar lunr = function (config) {\n var builder = new lunr.Builder\n\n builder.pipeline.add(\n lunr.trimmer,\n lunr.stopWordFilter,\n lunr.stemmer\n )\n\n builder.searchPipeline.add(\n lunr.stemmer\n )\n\n config.call(builder, builder)\n return builder.build()\n}\n\nlunr.version = \"2.3.9\"\n/*!\n * lunr.utils\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * A namespace containing utils for the rest of the lunr library\n * @namespace lunr.utils\n */\nlunr.utils = {}\n\n/**\n * Print a warning message to the console.\n *\n * @param {String} message The message to be printed.\n * @memberOf lunr.utils\n * @function\n */\nlunr.utils.warn = (function (global) {\n /* eslint-disable no-console */\n return function (message) {\n if (global.console && console.warn) {\n console.warn(message)\n }\n }\n /* eslint-enable no-console */\n})(this)\n\n/**\n * Convert an object to a string.\n *\n * In the case of `null` and `undefined` the function returns\n * the empty string, in all other cases the result of calling\n * `toString` on the passed object is returned.\n *\n * @param {Any} obj The object to convert to a string.\n * @return {String} string representation of the passed object.\n * @memberOf lunr.utils\n */\nlunr.utils.asString = function (obj) {\n if (obj === void 0 || obj === null) {\n return \"\"\n } else {\n return obj.toString()\n }\n}\n\n/**\n * Clones an object.\n *\n * Will create a copy of an existing object such that any mutations\n * on the copy cannot affect the original.\n *\n * Only shallow objects are supported, passing a nested object to this\n * function will cause a TypeError.\n *\n * Objects with primitives, and arrays of primitives are supported.\n *\n * @param {Object} obj The object to clone.\n * @return {Object} a clone of the passed object.\n * @throws {TypeError} when a nested object is passed.\n * @memberOf Utils\n */\nlunr.utils.clone = function (obj) {\n if (obj === null || obj === undefined) {\n return obj\n }\n\n var clone = Object.create(null),\n keys = Object.keys(obj)\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i],\n val = obj[key]\n\n if (Array.isArray(val)) {\n clone[key] = val.slice()\n continue\n }\n\n if (typeof val === 'string' ||\n typeof val === 'number' ||\n typeof val === 'boolean') {\n clone[key] = val\n continue\n }\n\n throw new TypeError(\"clone is not deep and does not support nested objects\")\n }\n\n return clone\n}\nlunr.FieldRef = function (docRef, fieldName, stringValue) {\n this.docRef = docRef\n this.fieldName = fieldName\n this._stringValue = stringValue\n}\n\nlunr.FieldRef.joiner = \"/\"\n\nlunr.FieldRef.fromString = function (s) {\n var n = s.indexOf(lunr.FieldRef.joiner)\n\n if (n === -1) {\n throw \"malformed field ref string\"\n }\n\n var fieldRef = s.slice(0, n),\n docRef = s.slice(n + 1)\n\n return new lunr.FieldRef (docRef, fieldRef, s)\n}\n\nlunr.FieldRef.prototype.toString = function () {\n if (this._stringValue == undefined) {\n this._stringValue = this.fieldName + lunr.FieldRef.joiner + this.docRef\n }\n\n return this._stringValue\n}\n/*!\n * lunr.Set\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * A lunr set.\n *\n * @constructor\n */\nlunr.Set = function (elements) {\n this.elements = Object.create(null)\n\n if (elements) {\n this.length = elements.length\n\n for (var i = 0; i < this.length; i++) {\n this.elements[elements[i]] = true\n }\n } else {\n this.length = 0\n }\n}\n\n/**\n * A complete set that contains all elements.\n *\n * @static\n * @readonly\n * @type {lunr.Set}\n */\nlunr.Set.complete = {\n intersect: function (other) {\n return other\n },\n\n union: function () {\n return this\n },\n\n contains: function () {\n return true\n }\n}\n\n/**\n * An empty set that contains no elements.\n *\n * @static\n * @readonly\n * @type {lunr.Set}\n */\nlunr.Set.empty = {\n intersect: function () {\n return this\n },\n\n union: function (other) {\n return other\n },\n\n contains: function () {\n return false\n }\n}\n\n/**\n * Returns true if this set contains the specified object.\n *\n * @param {object} object - Object whose presence in this set is to be tested.\n * @returns {boolean} - True if this set contains the specified object.\n */\nlunr.Set.prototype.contains = function (object) {\n return !!this.elements[object]\n}\n\n/**\n * Returns a new set containing only the elements that are present in both\n * this set and the specified set.\n *\n * @param {lunr.Set} other - set to intersect with this set.\n * @returns {lunr.Set} a new set that is the intersection of this and the specified set.\n */\n\nlunr.Set.prototype.intersect = function (other) {\n var a, b, elements, intersection = []\n\n if (other === lunr.Set.complete) {\n return this\n }\n\n if (other === lunr.Set.empty) {\n return other\n }\n\n if (this.length < other.length) {\n a = this\n b = other\n } else {\n a = other\n b = this\n }\n\n elements = Object.keys(a.elements)\n\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i]\n if (element in b.elements) {\n intersection.push(element)\n }\n }\n\n return new lunr.Set (intersection)\n}\n\n/**\n * Returns a new set combining the elements of this and the specified set.\n *\n * @param {lunr.Set} other - set to union with this set.\n * @return {lunr.Set} a new set that is the union of this and the specified set.\n */\n\nlunr.Set.prototype.union = function (other) {\n if (other === lunr.Set.complete) {\n return lunr.Set.complete\n }\n\n if (other === lunr.Set.empty) {\n return this\n }\n\n return new lunr.Set(Object.keys(this.elements).concat(Object.keys(other.elements)))\n}\n/**\n * A function to calculate the inverse document frequency for\n * a posting. This is shared between the builder and the index\n *\n * @private\n * @param {object} posting - The posting for a given term\n * @param {number} documentCount - The total number of documents.\n */\nlunr.idf = function (posting, documentCount) {\n var documentsWithTerm = 0\n\n for (var fieldName in posting) {\n if (fieldName == '_index') continue // Ignore the term index, its not a field\n documentsWithTerm += Object.keys(posting[fieldName]).length\n }\n\n var x = (documentCount - documentsWithTerm + 0.5) / (documentsWithTerm + 0.5)\n\n return Math.log(1 + Math.abs(x))\n}\n\n/**\n * A token wraps a string representation of a token\n * as it is passed through the text processing pipeline.\n *\n * @constructor\n * @param {string} [str=''] - The string token being wrapped.\n * @param {object} [metadata={}] - Metadata associated with this token.\n */\nlunr.Token = function (str, metadata) {\n this.str = str || \"\"\n this.metadata = metadata || {}\n}\n\n/**\n * Returns the token string that is being wrapped by this object.\n *\n * @returns {string}\n */\nlunr.Token.prototype.toString = function () {\n return this.str\n}\n\n/**\n * A token update function is used when updating or optionally\n * when cloning a token.\n *\n * @callback lunr.Token~updateFunction\n * @param {string} str - The string representation of the token.\n * @param {Object} metadata - All metadata associated with this token.\n */\n\n/**\n * Applies the given function to the wrapped string token.\n *\n * @example\n * token.update(function (str, metadata) {\n * return str.toUpperCase()\n * })\n *\n * @param {lunr.Token~updateFunction} fn - A function to apply to the token string.\n * @returns {lunr.Token}\n */\nlunr.Token.prototype.update = function (fn) {\n this.str = fn(this.str, this.metadata)\n return this\n}\n\n/**\n * Creates a clone of this token. Optionally a function can be\n * applied to the cloned token.\n *\n * @param {lunr.Token~updateFunction} [fn] - An optional function to apply to the cloned token.\n * @returns {lunr.Token}\n */\nlunr.Token.prototype.clone = function (fn) {\n fn = fn || function (s) { return s }\n return new lunr.Token (fn(this.str, this.metadata), this.metadata)\n}\n/*!\n * lunr.tokenizer\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * A function for splitting a string into tokens ready to be inserted into\n * the search index. Uses `lunr.tokenizer.separator` to split strings, change\n * the value of this property to change how strings are split into tokens.\n *\n * This tokenizer will convert its parameter to a string by calling `toString` and\n * then will split this string on the character in `lunr.tokenizer.separator`.\n * Arrays will have their elements converted to strings and wrapped in a lunr.Token.\n *\n * Optional metadata can be passed to the tokenizer, this metadata will be cloned and\n * added as metadata to every token that is created from the object to be tokenized.\n *\n * @static\n * @param {?(string|object|object[])} obj - The object to convert into tokens\n * @param {?object} metadata - Optional metadata to associate with every token\n * @returns {lunr.Token[]}\n * @see {@link lunr.Pipeline}\n */\nlunr.tokenizer = function (obj, metadata) {\n if (obj == null || obj == undefined) {\n return []\n }\n\n if (Array.isArray(obj)) {\n return obj.map(function (t) {\n return new lunr.Token(\n lunr.utils.asString(t).toLowerCase(),\n lunr.utils.clone(metadata)\n )\n })\n }\n\n var str = obj.toString().toLowerCase(),\n len = str.length,\n tokens = []\n\n for (var sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) {\n var char = str.charAt(sliceEnd),\n sliceLength = sliceEnd - sliceStart\n\n if ((char.match(lunr.tokenizer.separator) || sliceEnd == len)) {\n\n if (sliceLength > 0) {\n var tokenMetadata = lunr.utils.clone(metadata) || {}\n tokenMetadata[\"position\"] = [sliceStart, sliceLength]\n tokenMetadata[\"index\"] = tokens.length\n\n tokens.push(\n new lunr.Token (\n str.slice(sliceStart, sliceEnd),\n tokenMetadata\n )\n )\n }\n\n sliceStart = sliceEnd + 1\n }\n\n }\n\n return tokens\n}\n\n/**\n * The separator used to split a string into tokens. Override this property to change the behaviour of\n * `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens.\n *\n * @static\n * @see lunr.tokenizer\n */\nlunr.tokenizer.separator = /[\\s\\-]+/\n/*!\n * lunr.Pipeline\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * lunr.Pipelines maintain an ordered list of functions to be applied to all\n * tokens in documents entering the search index and queries being ran against\n * the index.\n *\n * An instance of lunr.Index created with the lunr shortcut will contain a\n * pipeline with a stop word filter and an English language stemmer. Extra\n * functions can be added before or after either of these functions or these\n * default functions can be removed.\n *\n * When run the pipeline will call each function in turn, passing a token, the\n * index of that token in the original list of all tokens and finally a list of\n * all the original tokens.\n *\n * The output of functions in the pipeline will be passed to the next function\n * in the pipeline. To exclude a token from entering the index the function\n * should return undefined, the rest of the pipeline will not be called with\n * this token.\n *\n * For serialisation of pipelines to work, all functions used in an instance of\n * a pipeline should be registered with lunr.Pipeline. Registered functions can\n * then be loaded. If trying to load a serialised pipeline that uses functions\n * that are not registered an error will be thrown.\n *\n * If not planning on serialising the pipeline then registering pipeline functions\n * is not necessary.\n *\n * @constructor\n */\nlunr.Pipeline = function () {\n this._stack = []\n}\n\nlunr.Pipeline.registeredFunctions = Object.create(null)\n\n/**\n * A pipeline function maps lunr.Token to lunr.Token. A lunr.Token contains the token\n * string as well as all known metadata. A pipeline function can mutate the token string\n * or mutate (or add) metadata for a given token.\n *\n * A pipeline function can indicate that the passed token should be discarded by returning\n * null, undefined or an empty string. This token will not be passed to any downstream pipeline\n * functions and will not be added to the index.\n *\n * Multiple tokens can be returned by returning an array of tokens. Each token will be passed\n * to any downstream pipeline functions and all will returned tokens will be added to the index.\n *\n * Any number of pipeline functions may be chained together using a lunr.Pipeline.\n *\n * @interface lunr.PipelineFunction\n * @param {lunr.Token} token - A token from the document being processed.\n * @param {number} i - The index of this token in the complete list of tokens for this document/field.\n * @param {lunr.Token[]} tokens - All tokens for this document/field.\n * @returns {(?lunr.Token|lunr.Token[])}\n */\n\n/**\n * Register a function with the pipeline.\n *\n * Functions that are used in the pipeline should be registered if the pipeline\n * needs to be serialised, or a serialised pipeline needs to be loaded.\n *\n * Registering a function does not add it to a pipeline, functions must still be\n * added to instances of the pipeline for them to be used when running a pipeline.\n *\n * @param {lunr.PipelineFunction} fn - The function to check for.\n * @param {String} label - The label to register this function with\n */\nlunr.Pipeline.registerFunction = function (fn, label) {\n if (label in this.registeredFunctions) {\n lunr.utils.warn('Overwriting existing registered function: ' + label)\n }\n\n fn.label = label\n lunr.Pipeline.registeredFunctions[fn.label] = fn\n}\n\n/**\n * Warns if the function is not registered as a Pipeline function.\n *\n * @param {lunr.PipelineFunction} fn - The function to check for.\n * @private\n */\nlunr.Pipeline.warnIfFunctionNotRegistered = function (fn) {\n var isRegistered = fn.label && (fn.label in this.registeredFunctions)\n\n if (!isRegistered) {\n lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\\n', fn)\n }\n}\n\n/**\n * Loads a previously serialised pipeline.\n *\n * All functions to be loaded must already be registered with lunr.Pipeline.\n * If any function from the serialised data has not been registered then an\n * error will be thrown.\n *\n * @param {Object} serialised - The serialised pipeline to load.\n * @returns {lunr.Pipeline}\n */\nlunr.Pipeline.load = function (serialised) {\n var pipeline = new lunr.Pipeline\n\n serialised.forEach(function (fnName) {\n var fn = lunr.Pipeline.registeredFunctions[fnName]\n\n if (fn) {\n pipeline.add(fn)\n } else {\n throw new Error('Cannot load unregistered function: ' + fnName)\n }\n })\n\n return pipeline\n}\n\n/**\n * Adds new functions to the end of the pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction[]} functions - Any number of functions to add to the pipeline.\n */\nlunr.Pipeline.prototype.add = function () {\n var fns = Array.prototype.slice.call(arguments)\n\n fns.forEach(function (fn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(fn)\n this._stack.push(fn)\n }, this)\n}\n\n/**\n * Adds a single function after a function that already exists in the\n * pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.\n * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.\n */\nlunr.Pipeline.prototype.after = function (existingFn, newFn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(newFn)\n\n var pos = this._stack.indexOf(existingFn)\n if (pos == -1) {\n throw new Error('Cannot find existingFn')\n }\n\n pos = pos + 1\n this._stack.splice(pos, 0, newFn)\n}\n\n/**\n * Adds a single function before a function that already exists in the\n * pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.\n * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.\n */\nlunr.Pipeline.prototype.before = function (existingFn, newFn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(newFn)\n\n var pos = this._stack.indexOf(existingFn)\n if (pos == -1) {\n throw new Error('Cannot find existingFn')\n }\n\n this._stack.splice(pos, 0, newFn)\n}\n\n/**\n * Removes a function from the pipeline.\n *\n * @param {lunr.PipelineFunction} fn The function to remove from the pipeline.\n */\nlunr.Pipeline.prototype.remove = function (fn) {\n var pos = this._stack.indexOf(fn)\n if (pos == -1) {\n return\n }\n\n this._stack.splice(pos, 1)\n}\n\n/**\n * Runs the current list of functions that make up the pipeline against the\n * passed tokens.\n *\n * @param {Array} tokens The tokens to run through the pipeline.\n * @returns {Array}\n */\nlunr.Pipeline.prototype.run = function (tokens) {\n var stackLength = this._stack.length\n\n for (var i = 0; i < stackLength; i++) {\n var fn = this._stack[i]\n var memo = []\n\n for (var j = 0; j < tokens.length; j++) {\n var result = fn(tokens[j], j, tokens)\n\n if (result === null || result === void 0 || result === '') continue\n\n if (Array.isArray(result)) {\n for (var k = 0; k < result.length; k++) {\n memo.push(result[k])\n }\n } else {\n memo.push(result)\n }\n }\n\n tokens = memo\n }\n\n return tokens\n}\n\n/**\n * Convenience method for passing a string through a pipeline and getting\n * strings out. This method takes care of wrapping the passed string in a\n * token and mapping the resulting tokens back to strings.\n *\n * @param {string} str - The string to pass through the pipeline.\n * @param {?object} metadata - Optional metadata to associate with the token\n * passed to the pipeline.\n * @returns {string[]}\n */\nlunr.Pipeline.prototype.runString = function (str, metadata) {\n var token = new lunr.Token (str, metadata)\n\n return this.run([token]).map(function (t) {\n return t.toString()\n })\n}\n\n/**\n * Resets the pipeline by removing any existing processors.\n *\n */\nlunr.Pipeline.prototype.reset = function () {\n this._stack = []\n}\n\n/**\n * Returns a representation of the pipeline ready for serialisation.\n *\n * Logs a warning if the function has not been registered.\n *\n * @returns {Array}\n */\nlunr.Pipeline.prototype.toJSON = function () {\n return this._stack.map(function (fn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(fn)\n\n return fn.label\n })\n}\n/*!\n * lunr.Vector\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * A vector is used to construct the vector space of documents and queries. These\n * vectors support operations to determine the similarity between two documents or\n * a document and a query.\n *\n * Normally no parameters are required for initializing a vector, but in the case of\n * loading a previously dumped vector the raw elements can be provided to the constructor.\n *\n * For performance reasons vectors are implemented with a flat array, where an elements\n * index is immediately followed by its value. E.g. [index, value, index, value]. This\n * allows the underlying array to be as sparse as possible and still offer decent\n * performance when being used for vector calculations.\n *\n * @constructor\n * @param {Number[]} [elements] - The flat list of element index and element value pairs.\n */\nlunr.Vector = function (elements) {\n this._magnitude = 0\n this.elements = elements || []\n}\n\n\n/**\n * Calculates the position within the vector to insert a given index.\n *\n * This is used internally by insert and upsert. If there are duplicate indexes then\n * the position is returned as if the value for that index were to be updated, but it\n * is the callers responsibility to check whether there is a duplicate at that index\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @returns {Number}\n */\nlunr.Vector.prototype.positionForIndex = function (index) {\n // For an empty vector the tuple can be inserted at the beginning\n if (this.elements.length == 0) {\n return 0\n }\n\n var start = 0,\n end = this.elements.length / 2,\n sliceLength = end - start,\n pivotPoint = Math.floor(sliceLength / 2),\n pivotIndex = this.elements[pivotPoint * 2]\n\n while (sliceLength > 1) {\n if (pivotIndex < index) {\n start = pivotPoint\n }\n\n if (pivotIndex > index) {\n end = pivotPoint\n }\n\n if (pivotIndex == index) {\n break\n }\n\n sliceLength = end - start\n pivotPoint = start + Math.floor(sliceLength / 2)\n pivotIndex = this.elements[pivotPoint * 2]\n }\n\n if (pivotIndex == index) {\n return pivotPoint * 2\n }\n\n if (pivotIndex > index) {\n return pivotPoint * 2\n }\n\n if (pivotIndex < index) {\n return (pivotPoint + 1) * 2\n }\n}\n\n/**\n * Inserts an element at an index within the vector.\n *\n * Does not allow duplicates, will throw an error if there is already an entry\n * for this index.\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @param {Number} val - The value to be inserted into the vector.\n */\nlunr.Vector.prototype.insert = function (insertIdx, val) {\n this.upsert(insertIdx, val, function () {\n throw \"duplicate index\"\n })\n}\n\n/**\n * Inserts or updates an existing index within the vector.\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @param {Number} val - The value to be inserted into the vector.\n * @param {function} fn - A function that is called for updates, the existing value and the\n * requested value are passed as arguments\n */\nlunr.Vector.prototype.upsert = function (insertIdx, val, fn) {\n this._magnitude = 0\n var position = this.positionForIndex(insertIdx)\n\n if (this.elements[position] == insertIdx) {\n this.elements[position + 1] = fn(this.elements[position + 1], val)\n } else {\n this.elements.splice(position, 0, insertIdx, val)\n }\n}\n\n/**\n * Calculates the magnitude of this vector.\n *\n * @returns {Number}\n */\nlunr.Vector.prototype.magnitude = function () {\n if (this._magnitude) return this._magnitude\n\n var sumOfSquares = 0,\n elementsLength = this.elements.length\n\n for (var i = 1; i < elementsLength; i += 2) {\n var val = this.elements[i]\n sumOfSquares += val * val\n }\n\n return this._magnitude = Math.sqrt(sumOfSquares)\n}\n\n/**\n * Calculates the dot product of this vector and another vector.\n *\n * @param {lunr.Vector} otherVector - The vector to compute the dot product with.\n * @returns {Number}\n */\nlunr.Vector.prototype.dot = function (otherVector) {\n var dotProduct = 0,\n a = this.elements, b = otherVector.elements,\n aLen = a.length, bLen = b.length,\n aVal = 0, bVal = 0,\n i = 0, j = 0\n\n while (i < aLen && j < bLen) {\n aVal = a[i], bVal = b[j]\n if (aVal < bVal) {\n i += 2\n } else if (aVal > bVal) {\n j += 2\n } else if (aVal == bVal) {\n dotProduct += a[i + 1] * b[j + 1]\n i += 2\n j += 2\n }\n }\n\n return dotProduct\n}\n\n/**\n * Calculates the similarity between this vector and another vector.\n *\n * @param {lunr.Vector} otherVector - The other vector to calculate the\n * similarity with.\n * @returns {Number}\n */\nlunr.Vector.prototype.similarity = function (otherVector) {\n return this.dot(otherVector) / this.magnitude() || 0\n}\n\n/**\n * Converts the vector to an array of the elements within the vector.\n *\n * @returns {Number[]}\n */\nlunr.Vector.prototype.toArray = function () {\n var output = new Array (this.elements.length / 2)\n\n for (var i = 1, j = 0; i < this.elements.length; i += 2, j++) {\n output[j] = this.elements[i]\n }\n\n return output\n}\n\n/**\n * A JSON serializable representation of the vector.\n *\n * @returns {Number[]}\n */\nlunr.Vector.prototype.toJSON = function () {\n return this.elements\n}\n/* eslint-disable */\n/*!\n * lunr.stemmer\n * Copyright (C) 2020 Oliver Nightingale\n * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt\n */\n\n/**\n * lunr.stemmer is an english language stemmer, this is a JavaScript\n * implementation of the PorterStemmer taken from http://tartarus.org/~martin\n *\n * @static\n * @implements {lunr.PipelineFunction}\n * @param {lunr.Token} token - The string to stem\n * @returns {lunr.Token}\n * @see {@link lunr.Pipeline}\n * @function\n */\nlunr.stemmer = (function(){\n var step2list = {\n \"ational\" : \"ate\",\n \"tional\" : \"tion\",\n \"enci\" : \"ence\",\n \"anci\" : \"ance\",\n \"izer\" : \"ize\",\n \"bli\" : \"ble\",\n \"alli\" : \"al\",\n \"entli\" : \"ent\",\n \"eli\" : \"e\",\n \"ousli\" : \"ous\",\n \"ization\" : \"ize\",\n \"ation\" : \"ate\",\n \"ator\" : \"ate\",\n \"alism\" : \"al\",\n \"iveness\" : \"ive\",\n \"fulness\" : \"ful\",\n \"ousness\" : \"ous\",\n \"aliti\" : \"al\",\n \"iviti\" : \"ive\",\n \"biliti\" : \"ble\",\n \"logi\" : \"log\"\n },\n\n step3list = {\n \"icate\" : \"ic\",\n \"ative\" : \"\",\n \"alize\" : \"al\",\n \"iciti\" : \"ic\",\n \"ical\" : \"ic\",\n \"ful\" : \"\",\n \"ness\" : \"\"\n },\n\n c = \"[^aeiou]\", // consonant\n v = \"[aeiouy]\", // vowel\n C = c + \"[^aeiouy]*\", // consonant sequence\n V = v + \"[aeiou]*\", // vowel sequence\n\n mgr0 = \"^(\" + C + \")?\" + V + C, // [C]VC... is m>0\n meq1 = \"^(\" + C + \")?\" + V + C + \"(\" + V + \")?$\", // [C]VC[V] is m=1\n mgr1 = \"^(\" + C + \")?\" + V + C + V + C, // [C]VCVC... is m>1\n s_v = \"^(\" + C + \")?\" + v; // vowel in stem\n\n var re_mgr0 = new RegExp(mgr0);\n var re_mgr1 = new RegExp(mgr1);\n var re_meq1 = new RegExp(meq1);\n var re_s_v = new RegExp(s_v);\n\n var re_1a = /^(.+?)(ss|i)es$/;\n var re2_1a = /^(.+?)([^s])s$/;\n var re_1b = /^(.+?)eed$/;\n var re2_1b = /^(.+?)(ed|ing)$/;\n var re_1b_2 = /.$/;\n var re2_1b_2 = /(at|bl|iz)$/;\n var re3_1b_2 = new RegExp(\"([^aeiouylsz])\\\\1$\");\n var re4_1b_2 = new RegExp(\"^\" + C + v + \"[^aeiouwxy]$\");\n\n var re_1c = /^(.+?[^aeiou])y$/;\n var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;\n\n var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;\n\n var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;\n var re2_4 = /^(.+?)(s|t)(ion)$/;\n\n var re_5 = /^(.+?)e$/;\n var re_5_1 = /ll$/;\n var re3_5 = new RegExp(\"^\" + C + v + \"[^aeiouwxy]$\");\n\n var porterStemmer = function porterStemmer(w) {\n var stem,\n suffix,\n firstch,\n re,\n re2,\n re3,\n re4;\n\n if (w.length < 3) { return w; }\n\n firstch = w.substr(0,1);\n if (firstch == \"y\") {\n w = firstch.toUpperCase() + w.substr(1);\n }\n\n // Step 1a\n re = re_1a\n re2 = re2_1a;\n\n if (re.test(w)) { w = w.replace(re,\"$1$2\"); }\n else if (re2.test(w)) { w = w.replace(re2,\"$1$2\"); }\n\n // Step 1b\n re = re_1b;\n re2 = re2_1b;\n if (re.test(w)) {\n var fp = re.exec(w);\n re = re_mgr0;\n if (re.test(fp[1])) {\n re = re_1b_2;\n w = w.replace(re,\"\");\n }\n } else if (re2.test(w)) {\n var fp = re2.exec(w);\n stem = fp[1];\n re2 = re_s_v;\n if (re2.test(stem)) {\n w = stem;\n re2 = re2_1b_2;\n re3 = re3_1b_2;\n re4 = re4_1b_2;\n if (re2.test(w)) { w = w + \"e\"; }\n else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,\"\"); }\n else if (re4.test(w)) { w = w + \"e\"; }\n }\n }\n\n // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say)\n re = re_1c;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n w = stem + \"i\";\n }\n\n // Step 2\n re = re_2;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n suffix = fp[2];\n re = re_mgr0;\n if (re.test(stem)) {\n w = stem + step2list[suffix];\n }\n }\n\n // Step 3\n re = re_3;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n suffix = fp[2];\n re = re_mgr0;\n if (re.test(stem)) {\n w = stem + step3list[suffix];\n }\n }\n\n // Step 4\n re = re_4;\n re2 = re2_4;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n re = re_mgr1;\n if (re.test(stem)) {\n w = stem;\n }\n } else if (re2.test(w)) {\n var fp = re2.exec(w);\n stem = fp[1] + fp[2];\n re2 = re_mgr1;\n if (re2.test(stem)) {\n w = stem;\n }\n }\n\n // Step 5\n re = re_5;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n re = re_mgr1;\n re2 = re_meq1;\n re3 = re3_5;\n if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) {\n w = stem;\n }\n }\n\n re = re_5_1;\n re2 = re_mgr1;\n if (re.test(w) && re2.test(w)) {\n re = re_1b_2;\n w = w.replace(re,\"\");\n }\n\n // and turn initial Y back to y\n\n if (firstch == \"y\") {\n w = firstch.toLowerCase() + w.substr(1);\n }\n\n return w;\n };\n\n return function (token) {\n return token.update(porterStemmer);\n }\n})();\n\nlunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer')\n/*!\n * lunr.stopWordFilter\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * lunr.generateStopWordFilter builds a stopWordFilter function from the provided\n * list of stop words.\n *\n * The built in lunr.stopWordFilter is built using this generator and can be used\n * to generate custom stopWordFilters for applications or non English languages.\n *\n * @function\n * @param {Array} token The token to pass through the filter\n * @returns {lunr.PipelineFunction}\n * @see lunr.Pipeline\n * @see lunr.stopWordFilter\n */\nlunr.generateStopWordFilter = function (stopWords) {\n var words = stopWords.reduce(function (memo, stopWord) {\n memo[stopWord] = stopWord\n return memo\n }, {})\n\n return function (token) {\n if (token && words[token.toString()] !== token.toString()) return token\n }\n}\n\n/**\n * lunr.stopWordFilter is an English language stop word list filter, any words\n * contained in the list will not be passed through the filter.\n *\n * This is intended to be used in the Pipeline. If the token does not pass the\n * filter then undefined will be returned.\n *\n * @function\n * @implements {lunr.PipelineFunction}\n * @params {lunr.Token} token - A token to check for being a stop word.\n * @returns {lunr.Token}\n * @see {@link lunr.Pipeline}\n */\nlunr.stopWordFilter = lunr.generateStopWordFilter([\n 'a',\n 'able',\n 'about',\n 'across',\n 'after',\n 'all',\n 'almost',\n 'also',\n 'am',\n 'among',\n 'an',\n 'and',\n 'any',\n 'are',\n 'as',\n 'at',\n 'be',\n 'because',\n 'been',\n 'but',\n 'by',\n 'can',\n 'cannot',\n 'could',\n 'dear',\n 'did',\n 'do',\n 'does',\n 'either',\n 'else',\n 'ever',\n 'every',\n 'for',\n 'from',\n 'get',\n 'got',\n 'had',\n 'has',\n 'have',\n 'he',\n 'her',\n 'hers',\n 'him',\n 'his',\n 'how',\n 'however',\n 'i',\n 'if',\n 'in',\n 'into',\n 'is',\n 'it',\n 'its',\n 'just',\n 'least',\n 'let',\n 'like',\n 'likely',\n 'may',\n 'me',\n 'might',\n 'most',\n 'must',\n 'my',\n 'neither',\n 'no',\n 'nor',\n 'not',\n 'of',\n 'off',\n 'often',\n 'on',\n 'only',\n 'or',\n 'other',\n 'our',\n 'own',\n 'rather',\n 'said',\n 'say',\n 'says',\n 'she',\n 'should',\n 'since',\n 'so',\n 'some',\n 'than',\n 'that',\n 'the',\n 'their',\n 'them',\n 'then',\n 'there',\n 'these',\n 'they',\n 'this',\n 'tis',\n 'to',\n 'too',\n 'twas',\n 'us',\n 'wants',\n 'was',\n 'we',\n 'were',\n 'what',\n 'when',\n 'where',\n 'which',\n 'while',\n 'who',\n 'whom',\n 'why',\n 'will',\n 'with',\n 'would',\n 'yet',\n 'you',\n 'your'\n])\n\nlunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter')\n/*!\n * lunr.trimmer\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * lunr.trimmer is a pipeline function for trimming non word\n * characters from the beginning and end of tokens before they\n * enter the index.\n *\n * This implementation may not work correctly for non latin\n * characters and should either be removed or adapted for use\n * with languages with non-latin characters.\n *\n * @static\n * @implements {lunr.PipelineFunction}\n * @param {lunr.Token} token The token to pass through the filter\n * @returns {lunr.Token}\n * @see lunr.Pipeline\n */\nlunr.trimmer = function (token) {\n return token.update(function (s) {\n return s.replace(/^\\W+/, '').replace(/\\W+$/, '')\n })\n}\n\nlunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer')\n/*!\n * lunr.TokenSet\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * A token set is used to store the unique list of all tokens\n * within an index. Token sets are also used to represent an\n * incoming query to the index, this query token set and index\n * token set are then intersected to find which tokens to look\n * up in the inverted index.\n *\n * A token set can hold multiple tokens, as in the case of the\n * index token set, or it can hold a single token as in the\n * case of a simple query token set.\n *\n * Additionally token sets are used to perform wildcard matching.\n * Leading, contained and trailing wildcards are supported, and\n * from this edit distance matching can also be provided.\n *\n * Token sets are implemented as a minimal finite state automata,\n * where both common prefixes and suffixes are shared between tokens.\n * This helps to reduce the space used for storing the token set.\n *\n * @constructor\n */\nlunr.TokenSet = function () {\n this.final = false\n this.edges = {}\n this.id = lunr.TokenSet._nextId\n lunr.TokenSet._nextId += 1\n}\n\n/**\n * Keeps track of the next, auto increment, identifier to assign\n * to a new tokenSet.\n *\n * TokenSets require a unique identifier to be correctly minimised.\n *\n * @private\n */\nlunr.TokenSet._nextId = 1\n\n/**\n * Creates a TokenSet instance from the given sorted array of words.\n *\n * @param {String[]} arr - A sorted array of strings to create the set from.\n * @returns {lunr.TokenSet}\n * @throws Will throw an error if the input array is not sorted.\n */\nlunr.TokenSet.fromArray = function (arr) {\n var builder = new lunr.TokenSet.Builder\n\n for (var i = 0, len = arr.length; i < len; i++) {\n builder.insert(arr[i])\n }\n\n builder.finish()\n return builder.root\n}\n\n/**\n * Creates a token set from a query clause.\n *\n * @private\n * @param {Object} clause - A single clause from lunr.Query.\n * @param {string} clause.term - The query clause term.\n * @param {number} [clause.editDistance] - The optional edit distance for the term.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.fromClause = function (clause) {\n if ('editDistance' in clause) {\n return lunr.TokenSet.fromFuzzyString(clause.term, clause.editDistance)\n } else {\n return lunr.TokenSet.fromString(clause.term)\n }\n}\n\n/**\n * Creates a token set representing a single string with a specified\n * edit distance.\n *\n * Insertions, deletions, substitutions and transpositions are each\n * treated as an edit distance of 1.\n *\n * Increasing the allowed edit distance will have a dramatic impact\n * on the performance of both creating and intersecting these TokenSets.\n * It is advised to keep the edit distance less than 3.\n *\n * @param {string} str - The string to create the token set from.\n * @param {number} editDistance - The allowed edit distance to match.\n * @returns {lunr.Vector}\n */\nlunr.TokenSet.fromFuzzyString = function (str, editDistance) {\n var root = new lunr.TokenSet\n\n var stack = [{\n node: root,\n editsRemaining: editDistance,\n str: str\n }]\n\n while (stack.length) {\n var frame = stack.pop()\n\n // no edit\n if (frame.str.length > 0) {\n var char = frame.str.charAt(0),\n noEditNode\n\n if (char in frame.node.edges) {\n noEditNode = frame.node.edges[char]\n } else {\n noEditNode = new lunr.TokenSet\n frame.node.edges[char] = noEditNode\n }\n\n if (frame.str.length == 1) {\n noEditNode.final = true\n }\n\n stack.push({\n node: noEditNode,\n editsRemaining: frame.editsRemaining,\n str: frame.str.slice(1)\n })\n }\n\n if (frame.editsRemaining == 0) {\n continue\n }\n\n // insertion\n if (\"*\" in frame.node.edges) {\n var insertionNode = frame.node.edges[\"*\"]\n } else {\n var insertionNode = new lunr.TokenSet\n frame.node.edges[\"*\"] = insertionNode\n }\n\n if (frame.str.length == 0) {\n insertionNode.final = true\n }\n\n stack.push({\n node: insertionNode,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str\n })\n\n // deletion\n // can only do a deletion if we have enough edits remaining\n // and if there are characters left to delete in the string\n if (frame.str.length > 1) {\n stack.push({\n node: frame.node,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str.slice(1)\n })\n }\n\n // deletion\n // just removing the last character from the str\n if (frame.str.length == 1) {\n frame.node.final = true\n }\n\n // substitution\n // can only do a substitution if we have enough edits remaining\n // and if there are characters left to substitute\n if (frame.str.length >= 1) {\n if (\"*\" in frame.node.edges) {\n var substitutionNode = frame.node.edges[\"*\"]\n } else {\n var substitutionNode = new lunr.TokenSet\n frame.node.edges[\"*\"] = substitutionNode\n }\n\n if (frame.str.length == 1) {\n substitutionNode.final = true\n }\n\n stack.push({\n node: substitutionNode,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str.slice(1)\n })\n }\n\n // transposition\n // can only do a transposition if there are edits remaining\n // and there are enough characters to transpose\n if (frame.str.length > 1) {\n var charA = frame.str.charAt(0),\n charB = frame.str.charAt(1),\n transposeNode\n\n if (charB in frame.node.edges) {\n transposeNode = frame.node.edges[charB]\n } else {\n transposeNode = new lunr.TokenSet\n frame.node.edges[charB] = transposeNode\n }\n\n if (frame.str.length == 1) {\n transposeNode.final = true\n }\n\n stack.push({\n node: transposeNode,\n editsRemaining: frame.editsRemaining - 1,\n str: charA + frame.str.slice(2)\n })\n }\n }\n\n return root\n}\n\n/**\n * Creates a TokenSet from a string.\n *\n * The string may contain one or more wildcard characters (*)\n * that will allow wildcard matching when intersecting with\n * another TokenSet.\n *\n * @param {string} str - The string to create a TokenSet from.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.fromString = function (str) {\n var node = new lunr.TokenSet,\n root = node\n\n /*\n * Iterates through all characters within the passed string\n * appending a node for each character.\n *\n * When a wildcard character is found then a self\n * referencing edge is introduced to continually match\n * any number of any characters.\n */\n for (var i = 0, len = str.length; i < len; i++) {\n var char = str[i],\n final = (i == len - 1)\n\n if (char == \"*\") {\n node.edges[char] = node\n node.final = final\n\n } else {\n var next = new lunr.TokenSet\n next.final = final\n\n node.edges[char] = next\n node = next\n }\n }\n\n return root\n}\n\n/**\n * Converts this TokenSet into an array of strings\n * contained within the TokenSet.\n *\n * This is not intended to be used on a TokenSet that\n * contains wildcards, in these cases the results are\n * undefined and are likely to cause an infinite loop.\n *\n * @returns {string[]}\n */\nlunr.TokenSet.prototype.toArray = function () {\n var words = []\n\n var stack = [{\n prefix: \"\",\n node: this\n }]\n\n while (stack.length) {\n var frame = stack.pop(),\n edges = Object.keys(frame.node.edges),\n len = edges.length\n\n if (frame.node.final) {\n /* In Safari, at this point the prefix is sometimes corrupted, see:\n * https://github.com/olivernn/lunr.js/issues/279 Calling any\n * String.prototype method forces Safari to \"cast\" this string to what\n * it's supposed to be, fixing the bug. */\n frame.prefix.charAt(0)\n words.push(frame.prefix)\n }\n\n for (var i = 0; i < len; i++) {\n var edge = edges[i]\n\n stack.push({\n prefix: frame.prefix.concat(edge),\n node: frame.node.edges[edge]\n })\n }\n }\n\n return words\n}\n\n/**\n * Generates a string representation of a TokenSet.\n *\n * This is intended to allow TokenSets to be used as keys\n * in objects, largely to aid the construction and minimisation\n * of a TokenSet. As such it is not designed to be a human\n * friendly representation of the TokenSet.\n *\n * @returns {string}\n */\nlunr.TokenSet.prototype.toString = function () {\n // NOTE: Using Object.keys here as this.edges is very likely\n // to enter 'hash-mode' with many keys being added\n //\n // avoiding a for-in loop here as it leads to the function\n // being de-optimised (at least in V8). From some simple\n // benchmarks the performance is comparable, but allowing\n // V8 to optimize may mean easy performance wins in the future.\n\n if (this._str) {\n return this._str\n }\n\n var str = this.final ? '1' : '0',\n labels = Object.keys(this.edges).sort(),\n len = labels.length\n\n for (var i = 0; i < len; i++) {\n var label = labels[i],\n node = this.edges[label]\n\n str = str + label + node.id\n }\n\n return str\n}\n\n/**\n * Returns a new TokenSet that is the intersection of\n * this TokenSet and the passed TokenSet.\n *\n * This intersection will take into account any wildcards\n * contained within the TokenSet.\n *\n * @param {lunr.TokenSet} b - An other TokenSet to intersect with.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.prototype.intersect = function (b) {\n var output = new lunr.TokenSet,\n frame = undefined\n\n var stack = [{\n qNode: b,\n output: output,\n node: this\n }]\n\n while (stack.length) {\n frame = stack.pop()\n\n // NOTE: As with the #toString method, we are using\n // Object.keys and a for loop instead of a for-in loop\n // as both of these objects enter 'hash' mode, causing\n // the function to be de-optimised in V8\n var qEdges = Object.keys(frame.qNode.edges),\n qLen = qEdges.length,\n nEdges = Object.keys(frame.node.edges),\n nLen = nEdges.length\n\n for (var q = 0; q < qLen; q++) {\n var qEdge = qEdges[q]\n\n for (var n = 0; n < nLen; n++) {\n var nEdge = nEdges[n]\n\n if (nEdge == qEdge || qEdge == '*') {\n var node = frame.node.edges[nEdge],\n qNode = frame.qNode.edges[qEdge],\n final = node.final && qNode.final,\n next = undefined\n\n if (nEdge in frame.output.edges) {\n // an edge already exists for this character\n // no need to create a new node, just set the finality\n // bit unless this node is already final\n next = frame.output.edges[nEdge]\n next.final = next.final || final\n\n } else {\n // no edge exists yet, must create one\n // set the finality bit and insert it\n // into the output\n next = new lunr.TokenSet\n next.final = final\n frame.output.edges[nEdge] = next\n }\n\n stack.push({\n qNode: qNode,\n output: next,\n node: node\n })\n }\n }\n }\n }\n\n return output\n}\nlunr.TokenSet.Builder = function () {\n this.previousWord = \"\"\n this.root = new lunr.TokenSet\n this.uncheckedNodes = []\n this.minimizedNodes = {}\n}\n\nlunr.TokenSet.Builder.prototype.insert = function (word) {\n var node,\n commonPrefix = 0\n\n if (word < this.previousWord) {\n throw new Error (\"Out of order word insertion\")\n }\n\n for (var i = 0; i < word.length && i < this.previousWord.length; i++) {\n if (word[i] != this.previousWord[i]) break\n commonPrefix++\n }\n\n this.minimize(commonPrefix)\n\n if (this.uncheckedNodes.length == 0) {\n node = this.root\n } else {\n node = this.uncheckedNodes[this.uncheckedNodes.length - 1].child\n }\n\n for (var i = commonPrefix; i < word.length; i++) {\n var nextNode = new lunr.TokenSet,\n char = word[i]\n\n node.edges[char] = nextNode\n\n this.uncheckedNodes.push({\n parent: node,\n char: char,\n child: nextNode\n })\n\n node = nextNode\n }\n\n node.final = true\n this.previousWord = word\n}\n\nlunr.TokenSet.Builder.prototype.finish = function () {\n this.minimize(0)\n}\n\nlunr.TokenSet.Builder.prototype.minimize = function (downTo) {\n for (var i = this.uncheckedNodes.length - 1; i >= downTo; i--) {\n var node = this.uncheckedNodes[i],\n childKey = node.child.toString()\n\n if (childKey in this.minimizedNodes) {\n node.parent.edges[node.char] = this.minimizedNodes[childKey]\n } else {\n // Cache the key for this node since\n // we know it can't change anymore\n node.child._str = childKey\n\n this.minimizedNodes[childKey] = node.child\n }\n\n this.uncheckedNodes.pop()\n }\n}\n/*!\n * lunr.Index\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * An index contains the built index of all documents and provides a query interface\n * to the index.\n *\n * Usually instances of lunr.Index will not be created using this constructor, instead\n * lunr.Builder should be used to construct new indexes, or lunr.Index.load should be\n * used to load previously built and serialized indexes.\n *\n * @constructor\n * @param {Object} attrs - The attributes of the built search index.\n * @param {Object} attrs.invertedIndex - An index of term/field to document reference.\n * @param {Object} attrs.fieldVectors - Field vectors\n * @param {lunr.TokenSet} attrs.tokenSet - An set of all corpus tokens.\n * @param {string[]} attrs.fields - The names of indexed document fields.\n * @param {lunr.Pipeline} attrs.pipeline - The pipeline to use for search terms.\n */\nlunr.Index = function (attrs) {\n this.invertedIndex = attrs.invertedIndex\n this.fieldVectors = attrs.fieldVectors\n this.tokenSet = attrs.tokenSet\n this.fields = attrs.fields\n this.pipeline = attrs.pipeline\n}\n\n/**\n * A result contains details of a document matching a search query.\n * @typedef {Object} lunr.Index~Result\n * @property {string} ref - The reference of the document this result represents.\n * @property {number} score - A number between 0 and 1 representing how similar this document is to the query.\n * @property {lunr.MatchData} matchData - Contains metadata about this match including which term(s) caused the match.\n */\n\n/**\n * Although lunr provides the ability to create queries using lunr.Query, it also provides a simple\n * query language which itself is parsed into an instance of lunr.Query.\n *\n * For programmatically building queries it is advised to directly use lunr.Query, the query language\n * is best used for human entered text rather than program generated text.\n *\n * At its simplest queries can just be a single term, e.g. `hello`, multiple terms are also supported\n * and will be combined with OR, e.g `hello world` will match documents that contain either 'hello'\n * or 'world', though those that contain both will rank higher in the results.\n *\n * Wildcards can be included in terms to match one or more unspecified characters, these wildcards can\n * be inserted anywhere within the term, and more than one wildcard can exist in a single term. Adding\n * wildcards will increase the number of documents that will be found but can also have a negative\n * impact on query performance, especially with wildcards at the beginning of a term.\n *\n * Terms can be restricted to specific fields, e.g. `title:hello`, only documents with the term\n * hello in the title field will match this query. Using a field not present in the index will lead\n * to an error being thrown.\n *\n * Modifiers can also be added to terms, lunr supports edit distance and boost modifiers on terms. A term\n * boost will make documents matching that term score higher, e.g. `foo^5`. Edit distance is also supported\n * to provide fuzzy matching, e.g. 'hello~2' will match documents with hello with an edit distance of 2.\n * Avoid large values for edit distance to improve query performance.\n *\n * Each term also supports a presence modifier. By default a term's presence in document is optional, however\n * this can be changed to either required or prohibited. For a term's presence to be required in a document the\n * term should be prefixed with a '+', e.g. `+foo bar` is a search for documents that must contain 'foo' and\n * optionally contain 'bar'. Conversely a leading '-' sets the terms presence to prohibited, i.e. it must not\n * appear in a document, e.g. `-foo bar` is a search for documents that do not contain 'foo' but may contain 'bar'.\n *\n * To escape special characters the backslash character '\\' can be used, this allows searches to include\n * characters that would normally be considered modifiers, e.g. `foo\\~2` will search for a term \"foo~2\" instead\n * of attempting to apply a boost of 2 to the search term \"foo\".\n *\n * @typedef {string} lunr.Index~QueryString\n * @example Simple single term query\n * hello\n * @example Multiple term query\n * hello world\n * @example term scoped to a field\n * title:hello\n * @example term with a boost of 10\n * hello^10\n * @example term with an edit distance of 2\n * hello~2\n * @example terms with presence modifiers\n * -foo +bar baz\n */\n\n/**\n * Performs a search against the index using lunr query syntax.\n *\n * Results will be returned sorted by their score, the most relevant results\n * will be returned first. For details on how the score is calculated, please see\n * the {@link https://lunrjs.com/guides/searching.html#scoring|guide}.\n *\n * For more programmatic querying use lunr.Index#query.\n *\n * @param {lunr.Index~QueryString} queryString - A string containing a lunr query.\n * @throws {lunr.QueryParseError} If the passed query string cannot be parsed.\n * @returns {lunr.Index~Result[]}\n */\nlunr.Index.prototype.search = function (queryString) {\n return this.query(function (query) {\n var parser = new lunr.QueryParser(queryString, query)\n parser.parse()\n })\n}\n\n/**\n * A query builder callback provides a query object to be used to express\n * the query to perform on the index.\n *\n * @callback lunr.Index~queryBuilder\n * @param {lunr.Query} query - The query object to build up.\n * @this lunr.Query\n */\n\n/**\n * Performs a query against the index using the yielded lunr.Query object.\n *\n * If performing programmatic queries against the index, this method is preferred\n * over lunr.Index#search so as to avoid the additional query parsing overhead.\n *\n * A query object is yielded to the supplied function which should be used to\n * express the query to be run against the index.\n *\n * Note that although this function takes a callback parameter it is _not_ an\n * asynchronous operation, the callback is just yielded a query object to be\n * customized.\n *\n * @param {lunr.Index~queryBuilder} fn - A function that is used to build the query.\n * @returns {lunr.Index~Result[]}\n */\nlunr.Index.prototype.query = function (fn) {\n // for each query clause\n // * process terms\n // * expand terms from token set\n // * find matching documents and metadata\n // * get document vectors\n // * score documents\n\n var query = new lunr.Query(this.fields),\n matchingFields = Object.create(null),\n queryVectors = Object.create(null),\n termFieldCache = Object.create(null),\n requiredMatches = Object.create(null),\n prohibitedMatches = Object.create(null)\n\n /*\n * To support field level boosts a query vector is created per\n * field. An empty vector is eagerly created to support negated\n * queries.\n */\n for (var i = 0; i < this.fields.length; i++) {\n queryVectors[this.fields[i]] = new lunr.Vector\n }\n\n fn.call(query, query)\n\n for (var i = 0; i < query.clauses.length; i++) {\n /*\n * Unless the pipeline has been disabled for this term, which is\n * the case for terms with wildcards, we need to pass the clause\n * term through the search pipeline. A pipeline returns an array\n * of processed terms. Pipeline functions may expand the passed\n * term, which means we may end up performing multiple index lookups\n * for a single query term.\n */\n var clause = query.clauses[i],\n terms = null,\n clauseMatches = lunr.Set.empty\n\n if (clause.usePipeline) {\n terms = this.pipeline.runString(clause.term, {\n fields: clause.fields\n })\n } else {\n terms = [clause.term]\n }\n\n for (var m = 0; m < terms.length; m++) {\n var term = terms[m]\n\n /*\n * Each term returned from the pipeline needs to use the same query\n * clause object, e.g. the same boost and or edit distance. The\n * simplest way to do this is to re-use the clause object but mutate\n * its term property.\n */\n clause.term = term\n\n /*\n * From the term in the clause we create a token set which will then\n * be used to intersect the indexes token set to get a list of terms\n * to lookup in the inverted index\n */\n var termTokenSet = lunr.TokenSet.fromClause(clause),\n expandedTerms = this.tokenSet.intersect(termTokenSet).toArray()\n\n /*\n * If a term marked as required does not exist in the tokenSet it is\n * impossible for the search to return any matches. We set all the field\n * scoped required matches set to empty and stop examining any further\n * clauses.\n */\n if (expandedTerms.length === 0 && clause.presence === lunr.Query.presence.REQUIRED) {\n for (var k = 0; k < clause.fields.length; k++) {\n var field = clause.fields[k]\n requiredMatches[field] = lunr.Set.empty\n }\n\n break\n }\n\n for (var j = 0; j < expandedTerms.length; j++) {\n /*\n * For each term get the posting and termIndex, this is required for\n * building the query vector.\n */\n var expandedTerm = expandedTerms[j],\n posting = this.invertedIndex[expandedTerm],\n termIndex = posting._index\n\n for (var k = 0; k < clause.fields.length; k++) {\n /*\n * For each field that this query term is scoped by (by default\n * all fields are in scope) we need to get all the document refs\n * that have this term in that field.\n *\n * The posting is the entry in the invertedIndex for the matching\n * term from above.\n */\n var field = clause.fields[k],\n fieldPosting = posting[field],\n matchingDocumentRefs = Object.keys(fieldPosting),\n termField = expandedTerm + \"/\" + field,\n matchingDocumentsSet = new lunr.Set(matchingDocumentRefs)\n\n /*\n * if the presence of this term is required ensure that the matching\n * documents are added to the set of required matches for this clause.\n *\n */\n if (clause.presence == lunr.Query.presence.REQUIRED) {\n clauseMatches = clauseMatches.union(matchingDocumentsSet)\n\n if (requiredMatches[field] === undefined) {\n requiredMatches[field] = lunr.Set.complete\n }\n }\n\n /*\n * if the presence of this term is prohibited ensure that the matching\n * documents are added to the set of prohibited matches for this field,\n * creating that set if it does not yet exist.\n */\n if (clause.presence == lunr.Query.presence.PROHIBITED) {\n if (prohibitedMatches[field] === undefined) {\n prohibitedMatches[field] = lunr.Set.empty\n }\n\n prohibitedMatches[field] = prohibitedMatches[field].union(matchingDocumentsSet)\n\n /*\n * Prohibited matches should not be part of the query vector used for\n * similarity scoring and no metadata should be extracted so we continue\n * to the next field\n */\n continue\n }\n\n /*\n * The query field vector is populated using the termIndex found for\n * the term and a unit value with the appropriate boost applied.\n * Using upsert because there could already be an entry in the vector\n * for the term we are working with. In that case we just add the scores\n * together.\n */\n queryVectors[field].upsert(termIndex, clause.boost, function (a, b) { return a + b })\n\n /**\n * If we've already seen this term, field combo then we've already collected\n * the matching documents and metadata, no need to go through all that again\n */\n if (termFieldCache[termField]) {\n continue\n }\n\n for (var l = 0; l < matchingDocumentRefs.length; l++) {\n /*\n * All metadata for this term/field/document triple\n * are then extracted and collected into an instance\n * of lunr.MatchData ready to be returned in the query\n * results\n */\n var matchingDocumentRef = matchingDocumentRefs[l],\n matchingFieldRef = new lunr.FieldRef (matchingDocumentRef, field),\n metadata = fieldPosting[matchingDocumentRef],\n fieldMatch\n\n if ((fieldMatch = matchingFields[matchingFieldRef]) === undefined) {\n matchingFields[matchingFieldRef] = new lunr.MatchData (expandedTerm, field, metadata)\n } else {\n fieldMatch.add(expandedTerm, field, metadata)\n }\n\n }\n\n termFieldCache[termField] = true\n }\n }\n }\n\n /**\n * If the presence was required we need to update the requiredMatches field sets.\n * We do this after all fields for the term have collected their matches because\n * the clause terms presence is required in _any_ of the fields not _all_ of the\n * fields.\n */\n if (clause.presence === lunr.Query.presence.REQUIRED) {\n for (var k = 0; k < clause.fields.length; k++) {\n var field = clause.fields[k]\n requiredMatches[field] = requiredMatches[field].intersect(clauseMatches)\n }\n }\n }\n\n /**\n * Need to combine the field scoped required and prohibited\n * matching documents into a global set of required and prohibited\n * matches\n */\n var allRequiredMatches = lunr.Set.complete,\n allProhibitedMatches = lunr.Set.empty\n\n for (var i = 0; i < this.fields.length; i++) {\n var field = this.fields[i]\n\n if (requiredMatches[field]) {\n allRequiredMatches = allRequiredMatches.intersect(requiredMatches[field])\n }\n\n if (prohibitedMatches[field]) {\n allProhibitedMatches = allProhibitedMatches.union(prohibitedMatches[field])\n }\n }\n\n var matchingFieldRefs = Object.keys(matchingFields),\n results = [],\n matches = Object.create(null)\n\n /*\n * If the query is negated (contains only prohibited terms)\n * we need to get _all_ fieldRefs currently existing in the\n * index. This is only done when we know that the query is\n * entirely prohibited terms to avoid any cost of getting all\n * fieldRefs unnecessarily.\n *\n * Additionally, blank MatchData must be created to correctly\n * populate the results.\n */\n if (query.isNegated()) {\n matchingFieldRefs = Object.keys(this.fieldVectors)\n\n for (var i = 0; i < matchingFieldRefs.length; i++) {\n var matchingFieldRef = matchingFieldRefs[i]\n var fieldRef = lunr.FieldRef.fromString(matchingFieldRef)\n matchingFields[matchingFieldRef] = new lunr.MatchData\n }\n }\n\n for (var i = 0; i < matchingFieldRefs.length; i++) {\n /*\n * Currently we have document fields that match the query, but we\n * need to return documents. The matchData and scores are combined\n * from multiple fields belonging to the same document.\n *\n * Scores are calculated by field, using the query vectors created\n * above, and combined into a final document score using addition.\n */\n var fieldRef = lunr.FieldRef.fromString(matchingFieldRefs[i]),\n docRef = fieldRef.docRef\n\n if (!allRequiredMatches.contains(docRef)) {\n continue\n }\n\n if (allProhibitedMatches.contains(docRef)) {\n continue\n }\n\n var fieldVector = this.fieldVectors[fieldRef],\n score = queryVectors[fieldRef.fieldName].similarity(fieldVector),\n docMatch\n\n if ((docMatch = matches[docRef]) !== undefined) {\n docMatch.score += score\n docMatch.matchData.combine(matchingFields[fieldRef])\n } else {\n var match = {\n ref: docRef,\n score: score,\n matchData: matchingFields[fieldRef]\n }\n matches[docRef] = match\n results.push(match)\n }\n }\n\n /*\n * Sort the results objects by score, highest first.\n */\n return results.sort(function (a, b) {\n return b.score - a.score\n })\n}\n\n/**\n * Prepares the index for JSON serialization.\n *\n * The schema for this JSON blob will be described in a\n * separate JSON schema file.\n *\n * @returns {Object}\n */\nlunr.Index.prototype.toJSON = function () {\n var invertedIndex = Object.keys(this.invertedIndex)\n .sort()\n .map(function (term) {\n return [term, this.invertedIndex[term]]\n }, this)\n\n var fieldVectors = Object.keys(this.fieldVectors)\n .map(function (ref) {\n return [ref, this.fieldVectors[ref].toJSON()]\n }, this)\n\n return {\n version: lunr.version,\n fields: this.fields,\n fieldVectors: fieldVectors,\n invertedIndex: invertedIndex,\n pipeline: this.pipeline.toJSON()\n }\n}\n\n/**\n * Loads a previously serialized lunr.Index\n *\n * @param {Object} serializedIndex - A previously serialized lunr.Index\n * @returns {lunr.Index}\n */\nlunr.Index.load = function (serializedIndex) {\n var attrs = {},\n fieldVectors = {},\n serializedVectors = serializedIndex.fieldVectors,\n invertedIndex = Object.create(null),\n serializedInvertedIndex = serializedIndex.invertedIndex,\n tokenSetBuilder = new lunr.TokenSet.Builder,\n pipeline = lunr.Pipeline.load(serializedIndex.pipeline)\n\n if (serializedIndex.version != lunr.version) {\n lunr.utils.warn(\"Version mismatch when loading serialised index. Current version of lunr '\" + lunr.version + \"' does not match serialized index '\" + serializedIndex.version + \"'\")\n }\n\n for (var i = 0; i < serializedVectors.length; i++) {\n var tuple = serializedVectors[i],\n ref = tuple[0],\n elements = tuple[1]\n\n fieldVectors[ref] = new lunr.Vector(elements)\n }\n\n for (var i = 0; i < serializedInvertedIndex.length; i++) {\n var tuple = serializedInvertedIndex[i],\n term = tuple[0],\n posting = tuple[1]\n\n tokenSetBuilder.insert(term)\n invertedIndex[term] = posting\n }\n\n tokenSetBuilder.finish()\n\n attrs.fields = serializedIndex.fields\n\n attrs.fieldVectors = fieldVectors\n attrs.invertedIndex = invertedIndex\n attrs.tokenSet = tokenSetBuilder.root\n attrs.pipeline = pipeline\n\n return new lunr.Index(attrs)\n}\n/*!\n * lunr.Builder\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * lunr.Builder performs indexing on a set of documents and\n * returns instances of lunr.Index ready for querying.\n *\n * All configuration of the index is done via the builder, the\n * fields to index, the document reference, the text processing\n * pipeline and document scoring parameters are all set on the\n * builder before indexing.\n *\n * @constructor\n * @property {string} _ref - Internal reference to the document reference field.\n * @property {string[]} _fields - Internal reference to the document fields to index.\n * @property {object} invertedIndex - The inverted index maps terms to document fields.\n * @property {object} documentTermFrequencies - Keeps track of document term frequencies.\n * @property {object} documentLengths - Keeps track of the length of documents added to the index.\n * @property {lunr.tokenizer} tokenizer - Function for splitting strings into tokens for indexing.\n * @property {lunr.Pipeline} pipeline - The pipeline performs text processing on tokens before indexing.\n * @property {lunr.Pipeline} searchPipeline - A pipeline for processing search terms before querying the index.\n * @property {number} documentCount - Keeps track of the total number of documents indexed.\n * @property {number} _b - A parameter to control field length normalization, setting this to 0 disabled normalization, 1 fully normalizes field lengths, the default value is 0.75.\n * @property {number} _k1 - A parameter to control how quickly an increase in term frequency results in term frequency saturation, the default value is 1.2.\n * @property {number} termIndex - A counter incremented for each unique term, used to identify a terms position in the vector space.\n * @property {array} metadataWhitelist - A list of metadata keys that have been whitelisted for entry in the index.\n */\nlunr.Builder = function () {\n this._ref = \"id\"\n this._fields = Object.create(null)\n this._documents = Object.create(null)\n this.invertedIndex = Object.create(null)\n this.fieldTermFrequencies = {}\n this.fieldLengths = {}\n this.tokenizer = lunr.tokenizer\n this.pipeline = new lunr.Pipeline\n this.searchPipeline = new lunr.Pipeline\n this.documentCount = 0\n this._b = 0.75\n this._k1 = 1.2\n this.termIndex = 0\n this.metadataWhitelist = []\n}\n\n/**\n * Sets the document field used as the document reference. Every document must have this field.\n * The type of this field in the document should be a string, if it is not a string it will be\n * coerced into a string by calling toString.\n *\n * The default ref is 'id'.\n *\n * The ref should _not_ be changed during indexing, it should be set before any documents are\n * added to the index. Changing it during indexing can lead to inconsistent results.\n *\n * @param {string} ref - The name of the reference field in the document.\n */\nlunr.Builder.prototype.ref = function (ref) {\n this._ref = ref\n}\n\n/**\n * A function that is used to extract a field from a document.\n *\n * Lunr expects a field to be at the top level of a document, if however the field\n * is deeply nested within a document an extractor function can be used to extract\n * the right field for indexing.\n *\n * @callback fieldExtractor\n * @param {object} doc - The document being added to the index.\n * @returns {?(string|object|object[])} obj - The object that will be indexed for this field.\n * @example Extracting a nested field\n * function (doc) { return doc.nested.field }\n */\n\n/**\n * Adds a field to the list of document fields that will be indexed. Every document being\n * indexed should have this field. Null values for this field in indexed documents will\n * not cause errors but will limit the chance of that document being retrieved by searches.\n *\n * All fields should be added before adding documents to the index. Adding fields after\n * a document has been indexed will have no effect on already indexed documents.\n *\n * Fields can be boosted at build time. This allows terms within that field to have more\n * importance when ranking search results. Use a field boost to specify that matches within\n * one field are more important than other fields.\n *\n * @param {string} fieldName - The name of a field to index in all documents.\n * @param {object} attributes - Optional attributes associated with this field.\n * @param {number} [attributes.boost=1] - Boost applied to all terms within this field.\n * @param {fieldExtractor} [attributes.extractor] - Function to extract a field from a document.\n * @throws {RangeError} fieldName cannot contain unsupported characters '/'\n */\nlunr.Builder.prototype.field = function (fieldName, attributes) {\n if (/\\//.test(fieldName)) {\n throw new RangeError (\"Field '\" + fieldName + \"' contains illegal character '/'\")\n }\n\n this._fields[fieldName] = attributes || {}\n}\n\n/**\n * A parameter to tune the amount of field length normalisation that is applied when\n * calculating relevance scores. A value of 0 will completely disable any normalisation\n * and a value of 1 will fully normalise field lengths. The default is 0.75. Values of b\n * will be clamped to the range 0 - 1.\n *\n * @param {number} number - The value to set for this tuning parameter.\n */\nlunr.Builder.prototype.b = function (number) {\n if (number < 0) {\n this._b = 0\n } else if (number > 1) {\n this._b = 1\n } else {\n this._b = number\n }\n}\n\n/**\n * A parameter that controls the speed at which a rise in term frequency results in term\n * frequency saturation. The default value is 1.2. Setting this to a higher value will give\n * slower saturation levels, a lower value will result in quicker saturation.\n *\n * @param {number} number - The value to set for this tuning parameter.\n */\nlunr.Builder.prototype.k1 = function (number) {\n this._k1 = number\n}\n\n/**\n * Adds a document to the index.\n *\n * Before adding fields to the index the index should have been fully setup, with the document\n * ref and all fields to index already having been specified.\n *\n * The document must have a field name as specified by the ref (by default this is 'id') and\n * it should have all fields defined for indexing, though null or undefined values will not\n * cause errors.\n *\n * Entire documents can be boosted at build time. Applying a boost to a document indicates that\n * this document should rank higher in search results than other documents.\n *\n * @param {object} doc - The document to add to the index.\n * @param {object} attributes - Optional attributes associated with this document.\n * @param {number} [attributes.boost=1] - Boost applied to all terms within this document.\n */\nlunr.Builder.prototype.add = function (doc, attributes) {\n var docRef = doc[this._ref],\n fields = Object.keys(this._fields)\n\n this._documents[docRef] = attributes || {}\n this.documentCount += 1\n\n for (var i = 0; i < fields.length; i++) {\n var fieldName = fields[i],\n extractor = this._fields[fieldName].extractor,\n field = extractor ? extractor(doc) : doc[fieldName],\n tokens = this.tokenizer(field, {\n fields: [fieldName]\n }),\n terms = this.pipeline.run(tokens),\n fieldRef = new lunr.FieldRef (docRef, fieldName),\n fieldTerms = Object.create(null)\n\n this.fieldTermFrequencies[fieldRef] = fieldTerms\n this.fieldLengths[fieldRef] = 0\n\n // store the length of this field for this document\n this.fieldLengths[fieldRef] += terms.length\n\n // calculate term frequencies for this field\n for (var j = 0; j < terms.length; j++) {\n var term = terms[j]\n\n if (fieldTerms[term] == undefined) {\n fieldTerms[term] = 0\n }\n\n fieldTerms[term] += 1\n\n // add to inverted index\n // create an initial posting if one doesn't exist\n if (this.invertedIndex[term] == undefined) {\n var posting = Object.create(null)\n posting[\"_index\"] = this.termIndex\n this.termIndex += 1\n\n for (var k = 0; k < fields.length; k++) {\n posting[fields[k]] = Object.create(null)\n }\n\n this.invertedIndex[term] = posting\n }\n\n // add an entry for this term/fieldName/docRef to the invertedIndex\n if (this.invertedIndex[term][fieldName][docRef] == undefined) {\n this.invertedIndex[term][fieldName][docRef] = Object.create(null)\n }\n\n // store all whitelisted metadata about this token in the\n // inverted index\n for (var l = 0; l < this.metadataWhitelist.length; l++) {\n var metadataKey = this.metadataWhitelist[l],\n metadata = term.metadata[metadataKey]\n\n if (this.invertedIndex[term][fieldName][docRef][metadataKey] == undefined) {\n this.invertedIndex[term][fieldName][docRef][metadataKey] = []\n }\n\n this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata)\n }\n }\n\n }\n}\n\n/**\n * Calculates the average document length for this index\n *\n * @private\n */\nlunr.Builder.prototype.calculateAverageFieldLengths = function () {\n\n var fieldRefs = Object.keys(this.fieldLengths),\n numberOfFields = fieldRefs.length,\n accumulator = {},\n documentsWithField = {}\n\n for (var i = 0; i < numberOfFields; i++) {\n var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),\n field = fieldRef.fieldName\n\n documentsWithField[field] || (documentsWithField[field] = 0)\n documentsWithField[field] += 1\n\n accumulator[field] || (accumulator[field] = 0)\n accumulator[field] += this.fieldLengths[fieldRef]\n }\n\n var fields = Object.keys(this._fields)\n\n for (var i = 0; i < fields.length; i++) {\n var fieldName = fields[i]\n accumulator[fieldName] = accumulator[fieldName] / documentsWithField[fieldName]\n }\n\n this.averageFieldLength = accumulator\n}\n\n/**\n * Builds a vector space model of every document using lunr.Vector\n *\n * @private\n */\nlunr.Builder.prototype.createFieldVectors = function () {\n var fieldVectors = {},\n fieldRefs = Object.keys(this.fieldTermFrequencies),\n fieldRefsLength = fieldRefs.length,\n termIdfCache = Object.create(null)\n\n for (var i = 0; i < fieldRefsLength; i++) {\n var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),\n fieldName = fieldRef.fieldName,\n fieldLength = this.fieldLengths[fieldRef],\n fieldVector = new lunr.Vector,\n termFrequencies = this.fieldTermFrequencies[fieldRef],\n terms = Object.keys(termFrequencies),\n termsLength = terms.length\n\n\n var fieldBoost = this._fields[fieldName].boost || 1,\n docBoost = this._documents[fieldRef.docRef].boost || 1\n\n for (var j = 0; j < termsLength; j++) {\n var term = terms[j],\n tf = termFrequencies[term],\n termIndex = this.invertedIndex[term]._index,\n idf, score, scoreWithPrecision\n\n if (termIdfCache[term] === undefined) {\n idf = lunr.idf(this.invertedIndex[term], this.documentCount)\n termIdfCache[term] = idf\n } else {\n idf = termIdfCache[term]\n }\n\n score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (fieldLength / this.averageFieldLength[fieldName])) + tf)\n score *= fieldBoost\n score *= docBoost\n scoreWithPrecision = Math.round(score * 1000) / 1000\n // Converts 1.23456789 to 1.234.\n // Reducing the precision so that the vectors take up less\n // space when serialised. Doing it now so that they behave\n // the same before and after serialisation. Also, this is\n // the fastest approach to reducing a number's precision in\n // JavaScript.\n\n fieldVector.insert(termIndex, scoreWithPrecision)\n }\n\n fieldVectors[fieldRef] = fieldVector\n }\n\n this.fieldVectors = fieldVectors\n}\n\n/**\n * Creates a token set of all tokens in the index using lunr.TokenSet\n *\n * @private\n */\nlunr.Builder.prototype.createTokenSet = function () {\n this.tokenSet = lunr.TokenSet.fromArray(\n Object.keys(this.invertedIndex).sort()\n )\n}\n\n/**\n * Builds the index, creating an instance of lunr.Index.\n *\n * This completes the indexing process and should only be called\n * once all documents have been added to the index.\n *\n * @returns {lunr.Index}\n */\nlunr.Builder.prototype.build = function () {\n this.calculateAverageFieldLengths()\n this.createFieldVectors()\n this.createTokenSet()\n\n return new lunr.Index({\n invertedIndex: this.invertedIndex,\n fieldVectors: this.fieldVectors,\n tokenSet: this.tokenSet,\n fields: Object.keys(this._fields),\n pipeline: this.searchPipeline\n })\n}\n\n/**\n * Applies a plugin to the index builder.\n *\n * A plugin is a function that is called with the index builder as its context.\n * Plugins can be used to customise or extend the behaviour of the index\n * in some way. A plugin is just a function, that encapsulated the custom\n * behaviour that should be applied when building the index.\n *\n * The plugin function will be called with the index builder as its argument, additional\n * arguments can also be passed when calling use. The function will be called\n * with the index builder as its context.\n *\n * @param {Function} plugin The plugin to apply.\n */\nlunr.Builder.prototype.use = function (fn) {\n var args = Array.prototype.slice.call(arguments, 1)\n args.unshift(this)\n fn.apply(this, args)\n}\n/**\n * Contains and collects metadata about a matching document.\n * A single instance of lunr.MatchData is returned as part of every\n * lunr.Index~Result.\n *\n * @constructor\n * @param {string} term - The term this match data is associated with\n * @param {string} field - The field in which the term was found\n * @param {object} metadata - The metadata recorded about this term in this field\n * @property {object} metadata - A cloned collection of metadata associated with this document.\n * @see {@link lunr.Index~Result}\n */\nlunr.MatchData = function (term, field, metadata) {\n var clonedMetadata = Object.create(null),\n metadataKeys = Object.keys(metadata || {})\n\n // Cloning the metadata to prevent the original\n // being mutated during match data combination.\n // Metadata is kept in an array within the inverted\n // index so cloning the data can be done with\n // Array#slice\n for (var i = 0; i < metadataKeys.length; i++) {\n var key = metadataKeys[i]\n clonedMetadata[key] = metadata[key].slice()\n }\n\n this.metadata = Object.create(null)\n\n if (term !== undefined) {\n this.metadata[term] = Object.create(null)\n this.metadata[term][field] = clonedMetadata\n }\n}\n\n/**\n * An instance of lunr.MatchData will be created for every term that matches a\n * document. However only one instance is required in a lunr.Index~Result. This\n * method combines metadata from another instance of lunr.MatchData with this\n * objects metadata.\n *\n * @param {lunr.MatchData} otherMatchData - Another instance of match data to merge with this one.\n * @see {@link lunr.Index~Result}\n */\nlunr.MatchData.prototype.combine = function (otherMatchData) {\n var terms = Object.keys(otherMatchData.metadata)\n\n for (var i = 0; i < terms.length; i++) {\n var term = terms[i],\n fields = Object.keys(otherMatchData.metadata[term])\n\n if (this.metadata[term] == undefined) {\n this.metadata[term] = Object.create(null)\n }\n\n for (var j = 0; j < fields.length; j++) {\n var field = fields[j],\n keys = Object.keys(otherMatchData.metadata[term][field])\n\n if (this.metadata[term][field] == undefined) {\n this.metadata[term][field] = Object.create(null)\n }\n\n for (var k = 0; k < keys.length; k++) {\n var key = keys[k]\n\n if (this.metadata[term][field][key] == undefined) {\n this.metadata[term][field][key] = otherMatchData.metadata[term][field][key]\n } else {\n this.metadata[term][field][key] = this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key])\n }\n\n }\n }\n }\n}\n\n/**\n * Add metadata for a term/field pair to this instance of match data.\n *\n * @param {string} term - The term this match data is associated with\n * @param {string} field - The field in which the term was found\n * @param {object} metadata - The metadata recorded about this term in this field\n */\nlunr.MatchData.prototype.add = function (term, field, metadata) {\n if (!(term in this.metadata)) {\n this.metadata[term] = Object.create(null)\n this.metadata[term][field] = metadata\n return\n }\n\n if (!(field in this.metadata[term])) {\n this.metadata[term][field] = metadata\n return\n }\n\n var metadataKeys = Object.keys(metadata)\n\n for (var i = 0; i < metadataKeys.length; i++) {\n var key = metadataKeys[i]\n\n if (key in this.metadata[term][field]) {\n this.metadata[term][field][key] = this.metadata[term][field][key].concat(metadata[key])\n } else {\n this.metadata[term][field][key] = metadata[key]\n }\n }\n}\n/**\n * A lunr.Query provides a programmatic way of defining queries to be performed\n * against a {@link lunr.Index}.\n *\n * Prefer constructing a lunr.Query using the {@link lunr.Index#query} method\n * so the query object is pre-initialized with the right index fields.\n *\n * @constructor\n * @property {lunr.Query~Clause[]} clauses - An array of query clauses.\n * @property {string[]} allFields - An array of all available fields in a lunr.Index.\n */\nlunr.Query = function (allFields) {\n this.clauses = []\n this.allFields = allFields\n}\n\n/**\n * Constants for indicating what kind of automatic wildcard insertion will be used when constructing a query clause.\n *\n * This allows wildcards to be added to the beginning and end of a term without having to manually do any string\n * concatenation.\n *\n * The wildcard constants can be bitwise combined to select both leading and trailing wildcards.\n *\n * @constant\n * @default\n * @property {number} wildcard.NONE - The term will have no wildcards inserted, this is the default behaviour\n * @property {number} wildcard.LEADING - Prepend the term with a wildcard, unless a leading wildcard already exists\n * @property {number} wildcard.TRAILING - Append a wildcard to the term, unless a trailing wildcard already exists\n * @see lunr.Query~Clause\n * @see lunr.Query#clause\n * @see lunr.Query#term\n * @example query term with trailing wildcard\n * query.term('foo', { wildcard: lunr.Query.wildcard.TRAILING })\n * @example query term with leading and trailing wildcard\n * query.term('foo', {\n * wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING\n * })\n */\n\nlunr.Query.wildcard = new String (\"*\")\nlunr.Query.wildcard.NONE = 0\nlunr.Query.wildcard.LEADING = 1\nlunr.Query.wildcard.TRAILING = 2\n\n/**\n * Constants for indicating what kind of presence a term must have in matching documents.\n *\n * @constant\n * @enum {number}\n * @see lunr.Query~Clause\n * @see lunr.Query#clause\n * @see lunr.Query#term\n * @example query term with required presence\n * query.term('foo', { presence: lunr.Query.presence.REQUIRED })\n */\nlunr.Query.presence = {\n /**\n * Term's presence in a document is optional, this is the default value.\n */\n OPTIONAL: 1,\n\n /**\n * Term's presence in a document is required, documents that do not contain\n * this term will not be returned.\n */\n REQUIRED: 2,\n\n /**\n * Term's presence in a document is prohibited, documents that do contain\n * this term will not be returned.\n */\n PROHIBITED: 3\n}\n\n/**\n * A single clause in a {@link lunr.Query} contains a term and details on how to\n * match that term against a {@link lunr.Index}.\n *\n * @typedef {Object} lunr.Query~Clause\n * @property {string[]} fields - The fields in an index this clause should be matched against.\n * @property {number} [boost=1] - Any boost that should be applied when matching this clause.\n * @property {number} [editDistance] - Whether the term should have fuzzy matching applied, and how fuzzy the match should be.\n * @property {boolean} [usePipeline] - Whether the term should be passed through the search pipeline.\n * @property {number} [wildcard=lunr.Query.wildcard.NONE] - Whether the term should have wildcards appended or prepended.\n * @property {number} [presence=lunr.Query.presence.OPTIONAL] - The terms presence in any matching documents.\n */\n\n/**\n * Adds a {@link lunr.Query~Clause} to this query.\n *\n * Unless the clause contains the fields to be matched all fields will be matched. In addition\n * a default boost of 1 is applied to the clause.\n *\n * @param {lunr.Query~Clause} clause - The clause to add to this query.\n * @see lunr.Query~Clause\n * @returns {lunr.Query}\n */\nlunr.Query.prototype.clause = function (clause) {\n if (!('fields' in clause)) {\n clause.fields = this.allFields\n }\n\n if (!('boost' in clause)) {\n clause.boost = 1\n }\n\n if (!('usePipeline' in clause)) {\n clause.usePipeline = true\n }\n\n if (!('wildcard' in clause)) {\n clause.wildcard = lunr.Query.wildcard.NONE\n }\n\n if ((clause.wildcard & lunr.Query.wildcard.LEADING) && (clause.term.charAt(0) != lunr.Query.wildcard)) {\n clause.term = \"*\" + clause.term\n }\n\n if ((clause.wildcard & lunr.Query.wildcard.TRAILING) && (clause.term.slice(-1) != lunr.Query.wildcard)) {\n clause.term = \"\" + clause.term + \"*\"\n }\n\n if (!('presence' in clause)) {\n clause.presence = lunr.Query.presence.OPTIONAL\n }\n\n this.clauses.push(clause)\n\n return this\n}\n\n/**\n * A negated query is one in which every clause has a presence of\n * prohibited. These queries require some special processing to return\n * the expected results.\n *\n * @returns boolean\n */\nlunr.Query.prototype.isNegated = function () {\n for (var i = 0; i < this.clauses.length; i++) {\n if (this.clauses[i].presence != lunr.Query.presence.PROHIBITED) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * Adds a term to the current query, under the covers this will create a {@link lunr.Query~Clause}\n * to the list of clauses that make up this query.\n *\n * The term is used as is, i.e. no tokenization will be performed by this method. Instead conversion\n * to a token or token-like string should be done before calling this method.\n *\n * The term will be converted to a string by calling `toString`. Multiple terms can be passed as an\n * array, each term in the array will share the same options.\n *\n * @param {object|object[]} term - The term(s) to add to the query.\n * @param {object} [options] - Any additional properties to add to the query clause.\n * @returns {lunr.Query}\n * @see lunr.Query#clause\n * @see lunr.Query~Clause\n * @example adding a single term to a query\n * query.term(\"foo\")\n * @example adding a single term to a query and specifying search fields, term boost and automatic trailing wildcard\n * query.term(\"foo\", {\n * fields: [\"title\"],\n * boost: 10,\n * wildcard: lunr.Query.wildcard.TRAILING\n * })\n * @example using lunr.tokenizer to convert a string to tokens before using them as terms\n * query.term(lunr.tokenizer(\"foo bar\"))\n */\nlunr.Query.prototype.term = function (term, options) {\n if (Array.isArray(term)) {\n term.forEach(function (t) { this.term(t, lunr.utils.clone(options)) }, this)\n return this\n }\n\n var clause = options || {}\n clause.term = term.toString()\n\n this.clause(clause)\n\n return this\n}\nlunr.QueryParseError = function (message, start, end) {\n this.name = \"QueryParseError\"\n this.message = message\n this.start = start\n this.end = end\n}\n\nlunr.QueryParseError.prototype = new Error\nlunr.QueryLexer = function (str) {\n this.lexemes = []\n this.str = str\n this.length = str.length\n this.pos = 0\n this.start = 0\n this.escapeCharPositions = []\n}\n\nlunr.QueryLexer.prototype.run = function () {\n var state = lunr.QueryLexer.lexText\n\n while (state) {\n state = state(this)\n }\n}\n\nlunr.QueryLexer.prototype.sliceString = function () {\n var subSlices = [],\n sliceStart = this.start,\n sliceEnd = this.pos\n\n for (var i = 0; i < this.escapeCharPositions.length; i++) {\n sliceEnd = this.escapeCharPositions[i]\n subSlices.push(this.str.slice(sliceStart, sliceEnd))\n sliceStart = sliceEnd + 1\n }\n\n subSlices.push(this.str.slice(sliceStart, this.pos))\n this.escapeCharPositions.length = 0\n\n return subSlices.join('')\n}\n\nlunr.QueryLexer.prototype.emit = function (type) {\n this.lexemes.push({\n type: type,\n str: this.sliceString(),\n start: this.start,\n end: this.pos\n })\n\n this.start = this.pos\n}\n\nlunr.QueryLexer.prototype.escapeCharacter = function () {\n this.escapeCharPositions.push(this.pos - 1)\n this.pos += 1\n}\n\nlunr.QueryLexer.prototype.next = function () {\n if (this.pos >= this.length) {\n return lunr.QueryLexer.EOS\n }\n\n var char = this.str.charAt(this.pos)\n this.pos += 1\n return char\n}\n\nlunr.QueryLexer.prototype.width = function () {\n return this.pos - this.start\n}\n\nlunr.QueryLexer.prototype.ignore = function () {\n if (this.start == this.pos) {\n this.pos += 1\n }\n\n this.start = this.pos\n}\n\nlunr.QueryLexer.prototype.backup = function () {\n this.pos -= 1\n}\n\nlunr.QueryLexer.prototype.acceptDigitRun = function () {\n var char, charCode\n\n do {\n char = this.next()\n charCode = char.charCodeAt(0)\n } while (charCode > 47 && charCode < 58)\n\n if (char != lunr.QueryLexer.EOS) {\n this.backup()\n }\n}\n\nlunr.QueryLexer.prototype.more = function () {\n return this.pos < this.length\n}\n\nlunr.QueryLexer.EOS = 'EOS'\nlunr.QueryLexer.FIELD = 'FIELD'\nlunr.QueryLexer.TERM = 'TERM'\nlunr.QueryLexer.EDIT_DISTANCE = 'EDIT_DISTANCE'\nlunr.QueryLexer.BOOST = 'BOOST'\nlunr.QueryLexer.PRESENCE = 'PRESENCE'\n\nlunr.QueryLexer.lexField = function (lexer) {\n lexer.backup()\n lexer.emit(lunr.QueryLexer.FIELD)\n lexer.ignore()\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexTerm = function (lexer) {\n if (lexer.width() > 1) {\n lexer.backup()\n lexer.emit(lunr.QueryLexer.TERM)\n }\n\n lexer.ignore()\n\n if (lexer.more()) {\n return lunr.QueryLexer.lexText\n }\n}\n\nlunr.QueryLexer.lexEditDistance = function (lexer) {\n lexer.ignore()\n lexer.acceptDigitRun()\n lexer.emit(lunr.QueryLexer.EDIT_DISTANCE)\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexBoost = function (lexer) {\n lexer.ignore()\n lexer.acceptDigitRun()\n lexer.emit(lunr.QueryLexer.BOOST)\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexEOS = function (lexer) {\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n}\n\n// This matches the separator used when tokenising fields\n// within a document. These should match otherwise it is\n// not possible to search for some tokens within a document.\n//\n// It is possible for the user to change the separator on the\n// tokenizer so it _might_ clash with any other of the special\n// characters already used within the search string, e.g. :.\n//\n// This means that it is possible to change the separator in\n// such a way that makes some words unsearchable using a search\n// string.\nlunr.QueryLexer.termSeparator = lunr.tokenizer.separator\n\nlunr.QueryLexer.lexText = function (lexer) {\n while (true) {\n var char = lexer.next()\n\n if (char == lunr.QueryLexer.EOS) {\n return lunr.QueryLexer.lexEOS\n }\n\n // Escape character is '\\'\n if (char.charCodeAt(0) == 92) {\n lexer.escapeCharacter()\n continue\n }\n\n if (char == \":\") {\n return lunr.QueryLexer.lexField\n }\n\n if (char == \"~\") {\n lexer.backup()\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n return lunr.QueryLexer.lexEditDistance\n }\n\n if (char == \"^\") {\n lexer.backup()\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n return lunr.QueryLexer.lexBoost\n }\n\n // \"+\" indicates term presence is required\n // checking for length to ensure that only\n // leading \"+\" are considered\n if (char == \"+\" && lexer.width() === 1) {\n lexer.emit(lunr.QueryLexer.PRESENCE)\n return lunr.QueryLexer.lexText\n }\n\n // \"-\" indicates term presence is prohibited\n // checking for length to ensure that only\n // leading \"-\" are considered\n if (char == \"-\" && lexer.width() === 1) {\n lexer.emit(lunr.QueryLexer.PRESENCE)\n return lunr.QueryLexer.lexText\n }\n\n if (char.match(lunr.QueryLexer.termSeparator)) {\n return lunr.QueryLexer.lexTerm\n }\n }\n}\n\nlunr.QueryParser = function (str, query) {\n this.lexer = new lunr.QueryLexer (str)\n this.query = query\n this.currentClause = {}\n this.lexemeIdx = 0\n}\n\nlunr.QueryParser.prototype.parse = function () {\n this.lexer.run()\n this.lexemes = this.lexer.lexemes\n\n var state = lunr.QueryParser.parseClause\n\n while (state) {\n state = state(this)\n }\n\n return this.query\n}\n\nlunr.QueryParser.prototype.peekLexeme = function () {\n return this.lexemes[this.lexemeIdx]\n}\n\nlunr.QueryParser.prototype.consumeLexeme = function () {\n var lexeme = this.peekLexeme()\n this.lexemeIdx += 1\n return lexeme\n}\n\nlunr.QueryParser.prototype.nextClause = function () {\n var completedClause = this.currentClause\n this.query.clause(completedClause)\n this.currentClause = {}\n}\n\nlunr.QueryParser.parseClause = function (parser) {\n var lexeme = parser.peekLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n switch (lexeme.type) {\n case lunr.QueryLexer.PRESENCE:\n return lunr.QueryParser.parsePresence\n case lunr.QueryLexer.FIELD:\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expected either a field or a term, found \" + lexeme.type\n\n if (lexeme.str.length >= 1) {\n errorMessage += \" with value '\" + lexeme.str + \"'\"\n }\n\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n}\n\nlunr.QueryParser.parsePresence = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n switch (lexeme.str) {\n case \"-\":\n parser.currentClause.presence = lunr.Query.presence.PROHIBITED\n break\n case \"+\":\n parser.currentClause.presence = lunr.Query.presence.REQUIRED\n break\n default:\n var errorMessage = \"unrecognised presence operator'\" + lexeme.str + \"'\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n var errorMessage = \"expecting term or field, found nothing\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.FIELD:\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expecting term or field, found '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseField = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n if (parser.query.allFields.indexOf(lexeme.str) == -1) {\n var possibleFields = parser.query.allFields.map(function (f) { return \"'\" + f + \"'\" }).join(', '),\n errorMessage = \"unrecognised field '\" + lexeme.str + \"', possible fields: \" + possibleFields\n\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.fields = [lexeme.str]\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n var errorMessage = \"expecting term, found nothing\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expecting term, found '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseTerm = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n parser.currentClause.term = lexeme.str.toLowerCase()\n\n if (lexeme.str.indexOf(\"*\") != -1) {\n parser.currentClause.usePipeline = false\n }\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseEditDistance = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n var editDistance = parseInt(lexeme.str, 10)\n\n if (isNaN(editDistance)) {\n var errorMessage = \"edit distance must be numeric\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.editDistance = editDistance\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseBoost = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n var boost = parseInt(lexeme.str, 10)\n\n if (isNaN(boost)) {\n var errorMessage = \"boost must be numeric\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.boost = boost\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\n /**\n * export the module via AMD, CommonJS or as a browser global\n * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js\n */\n ;(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(factory)\n } else if (typeof exports === 'object') {\n /**\n * Node. Does not work with strict CommonJS, but\n * only CommonJS-like enviroments that support module.exports,\n * like Node.\n */\n module.exports = factory()\n } else {\n // Browser globals (root is window)\n root.lunr = factory()\n }\n }(this, function () {\n /**\n * Just return a value to define the module export.\n * This example returns an object, but the module\n * can return a function as the exported value.\n */\n return lunr\n }))\n})();\n", "/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport lunr from \"lunr\"\n\nimport \"~/polyfills\"\n\nimport { Search, SearchIndexConfig } from \"../../_\"\nimport {\n SearchMessage,\n SearchMessageType\n} from \"../message\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Add support for usage with `iframe-worker` polyfill\n *\n * While `importScripts` is synchronous when executed inside of a web worker,\n * it's not possible to provide a synchronous polyfilled implementation. The\n * cool thing is that awaiting a non-Promise is a noop, so extending the type\n * definition to return a `Promise` shouldn't break anything.\n *\n * @see https://bit.ly/2PjDnXi - GitHub comment\n */\ndeclare global {\n function importScripts(...urls: string[]): Promise | void\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Search index\n */\nlet index: Search\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch (= import) multi-language support through `lunr-languages`\n *\n * This function automatically imports the stemmers necessary to process the\n * languages, which are defined through the search index configuration.\n *\n * If the worker runs inside of an `iframe` (when using `iframe-worker` as\n * a shim), the base URL for the stemmers to be loaded must be determined by\n * searching for the first `script` element with a `src` attribute, which will\n * contain the contents of this script.\n *\n * @param config - Search index configuration\n *\n * @returns Promise resolving with no result\n */\nasync function setupSearchLanguages(\n config: SearchIndexConfig\n): Promise {\n let base = \"../lunr\"\n\n /* Detect `iframe-worker` and fix base URL */\n if (typeof parent !== \"undefined\" && \"IFrameWorker\" in parent) {\n const worker = document.querySelector(\"script[src]\")!\n const [path] = worker.src.split(\"/worker\")\n\n /* Prefix base with path */\n base = base.replace(\"..\", path)\n }\n\n /* Add scripts for languages */\n const scripts = []\n for (const lang of config.lang) {\n switch (lang) {\n\n /* Add segmenter for Japanese */\n case \"ja\":\n scripts.push(`${base}/tinyseg.js`)\n break\n\n /* Add segmenter for Hindi and Thai */\n case \"hi\":\n case \"th\":\n scripts.push(`${base}/wordcut.js`)\n break\n }\n\n /* Add language support */\n if (lang !== \"en\")\n scripts.push(`${base}/min/lunr.${lang}.min.js`)\n }\n\n /* Add multi-language support */\n if (config.lang.length > 1)\n scripts.push(`${base}/min/lunr.multi.min.js`)\n\n /* Load scripts synchronously */\n if (scripts.length)\n await importScripts(\n `${base}/min/lunr.stemmer.support.min.js`,\n ...scripts\n )\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Message handler\n *\n * @param message - Source message\n *\n * @returns Target message\n */\nexport async function handler(\n message: SearchMessage\n): Promise {\n switch (message.type) {\n\n /* Search setup message */\n case SearchMessageType.SETUP:\n await setupSearchLanguages(message.data.config)\n index = new Search(message.data)\n return {\n type: SearchMessageType.READY\n }\n\n /* Search query message */\n case SearchMessageType.QUERY:\n return {\n type: SearchMessageType.RESULT,\n data: index ? index.search(message.data) : { items: [] }\n }\n\n /* All other messages */\n default:\n throw new TypeError(\"Invalid message type\")\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Worker\n * ------------------------------------------------------------------------- */\n\n/* @ts-expect-error - expose Lunr.js in global scope, or stemmers won't work */\nself.lunr = lunr\n\n/* Handle messages */\naddEventListener(\"message\", async ev => {\n postMessage(await handler(ev.data))\n})\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Polyfills\n * ------------------------------------------------------------------------- */\n\n/* Polyfill `Object.entries` */\nif (!Object.entries)\n Object.entries = function (obj: object) {\n const data: [string, string][] = []\n for (const key of Object.keys(obj))\n // @ts-expect-error - ignore property access warning\n data.push([key, obj[key]])\n\n /* Return entries */\n return data\n }\n\n/* Polyfill `Object.values` */\nif (!Object.values)\n Object.values = function (obj: object) {\n const data: string[] = []\n for (const key of Object.keys(obj))\n // @ts-expect-error - ignore property access warning\n data.push(obj[key])\n\n /* Return values */\n return data\n }\n\n/* ------------------------------------------------------------------------- */\n\n/* Polyfills for `Element` */\nif (typeof Element !== \"undefined\") {\n\n /* Polyfill `Element.scrollTo` */\n if (!Element.prototype.scrollTo)\n Element.prototype.scrollTo = function (\n x?: ScrollToOptions | number, y?: number\n ): void {\n if (typeof x === \"object\") {\n this.scrollLeft = x.left!\n this.scrollTop = x.top!\n } else {\n this.scrollLeft = x!\n this.scrollTop = y!\n }\n }\n\n /* Polyfill `Element.replaceWith` */\n if (!Element.prototype.replaceWith)\n Element.prototype.replaceWith = function (\n ...nodes: Array\n ): void {\n const parent = this.parentNode\n if (parent) {\n if (nodes.length === 0)\n parent.removeChild(this)\n\n /* Replace children and create text nodes */\n for (let i = nodes.length - 1; i >= 0; i--) {\n let node = nodes[i]\n if (typeof node === \"string\")\n node = document.createTextNode(node)\n else if (node.parentNode)\n node.parentNode.removeChild(node)\n\n /* Replace child or insert before previous sibling */\n if (!i)\n parent.replaceChild(node, this)\n else\n parent.insertBefore(this.previousSibling!, node)\n }\n }\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport escapeHTML from \"escape-html\"\n\nimport { SearchIndexDocument } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search document\n */\nexport interface SearchDocument extends SearchIndexDocument {\n parent?: SearchIndexDocument /* Parent article */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search document mapping\n */\nexport type SearchDocumentMap = Map\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create a search document mapping\n *\n * @param docs - Search index documents\n *\n * @returns Search document map\n */\nexport function setupSearchDocumentMap(\n docs: SearchIndexDocument[]\n): SearchDocumentMap {\n const documents = new Map()\n const parents = new Set()\n for (const doc of docs) {\n const [path, hash] = doc.location.split(\"#\")\n\n /* Extract location, title and tags */\n const location = doc.location\n const title = doc.title\n const tags = doc.tags\n\n /* Escape and cleanup text */\n const text = escapeHTML(doc.text)\n .replace(/\\s+(?=[,.:;!?])/g, \"\")\n .replace(/\\s+/g, \" \")\n\n /* Handle section */\n if (hash) {\n const parent = documents.get(path)!\n\n /* Ignore first section, override article */\n if (!parents.has(parent)) {\n parent.title = doc.title\n parent.text = text\n\n /* Remember that we processed the article */\n parents.add(parent)\n\n /* Add subsequent section */\n } else {\n documents.set(location, {\n location,\n title,\n text,\n parent\n })\n }\n\n /* Add article */\n } else {\n documents.set(location, {\n location,\n title,\n text,\n ...tags && { tags }\n })\n }\n }\n return documents\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport escapeHTML from \"escape-html\"\n\nimport { SearchIndexConfig } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search highlight function\n *\n * @param value - Value\n *\n * @returns Highlighted value\n */\nexport type SearchHighlightFn = (value: string) => string\n\n/**\n * Search highlight factory function\n *\n * @param query - Query value\n *\n * @returns Search highlight function\n */\nexport type SearchHighlightFactoryFn = (query: string) => SearchHighlightFn\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create a search highlighter\n *\n * @param config - Search index configuration\n * @param escape - Whether to escape HTML\n *\n * @returns Search highlight factory function\n */\nexport function setupSearchHighlighter(\n config: SearchIndexConfig, escape: boolean\n): SearchHighlightFactoryFn {\n const separator = new RegExp(config.separator, \"img\")\n const highlight = (_: unknown, data: string, term: string) => {\n return `${data}${term}`\n }\n\n /* Return factory function */\n return (query: string) => {\n query = query\n .replace(/[\\s*+\\-:~^]+/g, \" \")\n .trim()\n\n /* Create search term match expression */\n const match = new RegExp(`(^|${config.separator})(${\n query\n .replace(/[|\\\\{}()[\\]^$+*?.-]/g, \"\\\\$&\")\n .replace(separator, \"|\")\n })`, \"img\")\n\n /* Highlight string value */\n return value => (\n escape\n ? escapeHTML(value)\n : value\n )\n .replace(match, highlight)\n .replace(/<\\/mark>(\\s+)]*>/img, \"$1\")\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search query clause\n */\nexport interface SearchQueryClause {\n presence: lunr.Query.presence /* Clause presence */\n term: string /* Clause term */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search query terms\n */\nexport type SearchQueryTerms = Record\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Parse a search query for analysis\n *\n * @param value - Query value\n *\n * @returns Search query clauses\n */\nexport function parseSearchQuery(\n value: string\n): SearchQueryClause[] {\n const query = new (lunr as any).Query([\"title\", \"text\"])\n const parser = new (lunr as any).QueryParser(value, query)\n\n /* Parse and return query clauses */\n parser.parse()\n return query.clauses\n}\n\n/**\n * Analyze the search query clauses in regard to the search terms found\n *\n * @param query - Search query clauses\n * @param terms - Search terms\n *\n * @returns Search query terms\n */\nexport function getSearchQueryTerms(\n query: SearchQueryClause[], terms: string[]\n): SearchQueryTerms {\n const clauses = new Set(query)\n\n /* Match query clauses against terms */\n const result: SearchQueryTerms = {}\n for (let t = 0; t < terms.length; t++)\n for (const clause of clauses)\n if (terms[t].startsWith(clause.term)) {\n result[clause.term] = true\n clauses.delete(clause)\n }\n\n /* Annotate unmatched non-stopword query clauses */\n for (const clause of clauses)\n if (lunr.stopWordFilter?.(clause.term as any))\n result[clause.term] = false\n\n /* Return query terms */\n return result\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n SearchDocument,\n SearchDocumentMap,\n setupSearchDocumentMap\n} from \"../document\"\nimport {\n SearchHighlightFactoryFn,\n setupSearchHighlighter\n} from \"../highlighter\"\nimport { SearchOptions } from \"../options\"\nimport {\n SearchQueryTerms,\n getSearchQueryTerms,\n parseSearchQuery\n} from \"../query\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search index configuration\n */\nexport interface SearchIndexConfig {\n lang: string[] /* Search languages */\n separator: string /* Search separator */\n}\n\n/**\n * Search index document\n */\nexport interface SearchIndexDocument {\n location: string /* Document location */\n title: string /* Document title */\n text: string /* Document text */\n tags?: string[] /* Document tags */\n boost?: number /* Document boost */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search index\n *\n * This interfaces describes the format of the `search_index.json` file which\n * is automatically built by the MkDocs search plugin.\n */\nexport interface SearchIndex {\n config: SearchIndexConfig /* Search index configuration */\n docs: SearchIndexDocument[] /* Search index documents */\n options: SearchOptions /* Search options */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search metadata\n */\nexport interface SearchMetadata {\n score: number /* Score (relevance) */\n terms: SearchQueryTerms /* Search query terms */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search result document\n */\nexport type SearchResultDocument = SearchDocument & SearchMetadata\n\n/**\n * Search result item\n */\nexport type SearchResultItem = SearchResultDocument[]\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search result\n */\nexport interface SearchResult {\n items: SearchResultItem[] /* Search result items */\n suggestions?: string[] /* Search suggestions */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Compute the difference of two lists of strings\n *\n * @param a - 1st list of strings\n * @param b - 2nd list of strings\n *\n * @returns Difference\n */\nfunction difference(a: string[], b: string[]): string[] {\n const [x, y] = [new Set(a), new Set(b)]\n return [\n ...new Set([...x].filter(value => !y.has(value)))\n ]\n}\n\n/* ----------------------------------------------------------------------------\n * Class\n * ------------------------------------------------------------------------- */\n\n/**\n * Search index\n */\nexport class Search {\n\n /**\n * Search document mapping\n *\n * A mapping of URLs (including hash fragments) to the actual articles and\n * sections of the documentation. The search document mapping must be created\n * regardless of whether the index was prebuilt or not, as Lunr.js itself\n * only stores the actual index.\n */\n protected documents: SearchDocumentMap\n\n /**\n * Search highlight factory function\n */\n protected highlight: SearchHighlightFactoryFn\n\n /**\n * The underlying Lunr.js search index\n */\n protected index: lunr.Index\n\n /**\n * Search options\n */\n protected options: SearchOptions\n\n /**\n * Create the search integration\n *\n * @param data - Search index\n */\n public constructor({ config, docs, options }: SearchIndex) {\n this.options = options\n\n /* Set up document map and highlighter factory */\n this.documents = setupSearchDocumentMap(docs)\n this.highlight = setupSearchHighlighter(config, false)\n\n /* Set separator for tokenizer */\n lunr.tokenizer.separator = new RegExp(config.separator)\n\n /* Create search index */\n this.index = lunr(function () {\n\n /* Set up multi-language support */\n if (config.lang.length === 1 && config.lang[0] !== \"en\") {\n this.use((lunr as any)[config.lang[0]])\n } else if (config.lang.length > 1) {\n this.use((lunr as any).multiLanguage(...config.lang))\n }\n\n /* Compute functions to be removed from the pipeline */\n const fns = difference([\n \"trimmer\", \"stopWordFilter\", \"stemmer\"\n ], options.pipeline)\n\n /* Remove functions from the pipeline for registered languages */\n for (const lang of config.lang.map(language => (\n language === \"en\" ? lunr : (lunr as any)[language]\n ))) {\n for (const fn of fns) {\n this.pipeline.remove(lang[fn])\n this.searchPipeline.remove(lang[fn])\n }\n }\n\n /* Set up reference */\n this.ref(\"location\")\n\n /* Set up fields */\n this.field(\"title\", { boost: 1e3 })\n this.field(\"text\")\n this.field(\"tags\", { boost: 1e6, extractor: doc => {\n const { tags = [] } = doc as SearchDocument\n return tags.reduce((list, tag) => [\n ...list,\n ...lunr.tokenizer(tag)\n ], [] as lunr.Token[])\n } })\n\n /* Index documents */\n for (const doc of docs)\n this.add(doc, { boost: doc.boost })\n })\n }\n\n /**\n * Search for matching documents\n *\n * The search index which MkDocs provides is divided up into articles, which\n * contain the whole content of the individual pages, and sections, which only\n * contain the contents of the subsections obtained by breaking the individual\n * pages up at `h1` ... `h6`. As there may be many sections on different pages\n * with identical titles (for example within this very project, e.g. \"Usage\"\n * or \"Installation\"), they need to be put into the context of the containing\n * page. For this reason, section results are grouped within their respective\n * articles which are the top-level results that are returned.\n *\n * @param query - Query value\n *\n * @returns Search results\n */\n public search(query: string): SearchResult {\n if (query) {\n try {\n const highlight = this.highlight(query)\n\n /* Parse query to extract clauses for analysis */\n const clauses = parseSearchQuery(query)\n .filter(clause => (\n clause.presence !== lunr.Query.presence.PROHIBITED\n ))\n\n /* Perform search and post-process results */\n const groups = this.index.search(`${query}*`)\n\n /* Apply post-query boosts based on title and search query terms */\n .reduce((item, { ref, score, matchData }) => {\n const document = this.documents.get(ref)\n if (typeof document !== \"undefined\") {\n const { location, title, text, tags, parent } = document\n\n /* Compute and analyze search query terms */\n const terms = getSearchQueryTerms(\n clauses,\n Object.keys(matchData.metadata)\n )\n\n /* Highlight title and text and apply post-query boosts */\n const boost = +!parent + +Object.values(terms).every(t => t)\n item.push({\n location,\n title: highlight(title),\n text: highlight(text),\n ...tags && { tags: tags.map(highlight) },\n score: score * (1 + boost),\n terms\n })\n }\n return item\n }, [])\n\n /* Sort search results again after applying boosts */\n .sort((a, b) => b.score - a.score)\n\n /* Group search results by page */\n .reduce((items, result) => {\n const document = this.documents.get(result.location)\n if (typeof document !== \"undefined\") {\n const ref = \"parent\" in document\n ? document.parent!.location\n : document.location\n items.set(ref, [...items.get(ref) || [], result])\n }\n return items\n }, new Map())\n\n /* Generate search suggestions, if desired */\n let suggestions: string[] | undefined\n if (this.options.suggestions) {\n const titles = this.index.query(builder => {\n for (const clause of clauses)\n builder.term(clause.term, {\n fields: [\"title\"],\n presence: lunr.Query.presence.REQUIRED,\n wildcard: lunr.Query.wildcard.TRAILING\n })\n })\n\n /* Retrieve suggestions for best match */\n suggestions = titles.length\n ? Object.keys(titles[0].matchData.metadata)\n : []\n }\n\n /* Return items and suggestions */\n return {\n items: [...groups.values()],\n ...typeof suggestions !== \"undefined\" && { suggestions }\n }\n\n /* Log errors to console (for now) */\n } catch {\n console.warn(`Invalid query: ${query} \u2013 see https://bit.ly/2s3ChXG`)\n }\n }\n\n /* Return nothing in case of error or empty query */\n return { items: [] }\n }\n}\n"], + "mappings": "glCAAA,IAAAA,GAAAC,EAAA,CAAAC,GAAAC,KAAA;AAAA;AAAA;AAAA;AAAA,IAME,UAAU,CAiCZ,IAAIC,EAAO,SAAUC,EAAQ,CAC3B,IAAIC,EAAU,IAAIF,EAAK,QAEvB,OAAAE,EAAQ,SAAS,IACfF,EAAK,QACLA,EAAK,eACLA,EAAK,OACP,EAEAE,EAAQ,eAAe,IACrBF,EAAK,OACP,EAEAC,EAAO,KAAKC,EAASA,CAAO,EACrBA,EAAQ,MAAM,CACvB,EAEAF,EAAK,QAAU,QACf;AAAA;AAAA;AAAA,GASAA,EAAK,MAAQ,CAAC,EASdA,EAAK,MAAM,KAAQ,SAAUG,EAAQ,CAEnC,OAAO,SAAUC,EAAS,CACpBD,EAAO,SAAW,QAAQ,MAC5B,QAAQ,KAAKC,CAAO,CAExB,CAEF,EAAG,IAAI,EAaPJ,EAAK,MAAM,SAAW,SAAUK,EAAK,CACnC,OAAsBA,GAAQ,KACrB,GAEAA,EAAI,SAAS,CAExB,EAkBAL,EAAK,MAAM,MAAQ,SAAUK,EAAK,CAChC,GAAIA,GAAQ,KACV,OAAOA,EAMT,QAHIC,EAAQ,OAAO,OAAO,IAAI,EAC1BC,EAAO,OAAO,KAAKF,CAAG,EAEjB,EAAI,EAAG,EAAIE,EAAK,OAAQ,IAAK,CACpC,IAAIC,EAAMD,EAAK,GACXE,EAAMJ,EAAIG,GAEd,GAAI,MAAM,QAAQC,CAAG,EAAG,CACtBH,EAAME,GAAOC,EAAI,MAAM,EACvB,QACF,CAEA,GAAI,OAAOA,GAAQ,UACf,OAAOA,GAAQ,UACf,OAAOA,GAAQ,UAAW,CAC5BH,EAAME,GAAOC,EACb,QACF,CAEA,MAAM,IAAI,UAAU,uDAAuD,CAC7E,CAEA,OAAOH,CACT,EACAN,EAAK,SAAW,SAAUU,EAAQC,EAAWC,EAAa,CACxD,KAAK,OAASF,EACd,KAAK,UAAYC,EACjB,KAAK,aAAeC,CACtB,EAEAZ,EAAK,SAAS,OAAS,IAEvBA,EAAK,SAAS,WAAa,SAAUa,EAAG,CACtC,IAAIC,EAAID,EAAE,QAAQb,EAAK,SAAS,MAAM,EAEtC,GAAIc,IAAM,GACR,KAAM,6BAGR,IAAIC,EAAWF,EAAE,MAAM,EAAGC,CAAC,EACvBJ,EAASG,EAAE,MAAMC,EAAI,CAAC,EAE1B,OAAO,IAAId,EAAK,SAAUU,EAAQK,EAAUF,CAAC,CAC/C,EAEAb,EAAK,SAAS,UAAU,SAAW,UAAY,CAC7C,OAAI,KAAK,cAAgB,OACvB,KAAK,aAAe,KAAK,UAAYA,EAAK,SAAS,OAAS,KAAK,QAG5D,KAAK,YACd,EACA;AAAA;AAAA;AAAA,GAUAA,EAAK,IAAM,SAAUgB,EAAU,CAG7B,GAFA,KAAK,SAAW,OAAO,OAAO,IAAI,EAE9BA,EAAU,CACZ,KAAK,OAASA,EAAS,OAEvB,QAASC,EAAI,EAAGA,EAAI,KAAK,OAAQA,IAC/B,KAAK,SAASD,EAASC,IAAM,EAEjC,MACE,KAAK,OAAS,CAElB,EASAjB,EAAK,IAAI,SAAW,CAClB,UAAW,SAAUkB,EAAO,CAC1B,OAAOA,CACT,EAEA,MAAO,UAAY,CACjB,OAAO,IACT,EAEA,SAAU,UAAY,CACpB,MAAO,EACT,CACF,EASAlB,EAAK,IAAI,MAAQ,CACf,UAAW,UAAY,CACrB,OAAO,IACT,EAEA,MAAO,SAAUkB,EAAO,CACtB,OAAOA,CACT,EAEA,SAAU,UAAY,CACpB,MAAO,EACT,CACF,EAQAlB,EAAK,IAAI,UAAU,SAAW,SAAUmB,EAAQ,CAC9C,MAAO,CAAC,CAAC,KAAK,SAASA,EACzB,EAUAnB,EAAK,IAAI,UAAU,UAAY,SAAUkB,EAAO,CAC9C,IAAIE,EAAGC,EAAGL,EAAUM,EAAe,CAAC,EAEpC,GAAIJ,IAAUlB,EAAK,IAAI,SACrB,OAAO,KAGT,GAAIkB,IAAUlB,EAAK,IAAI,MACrB,OAAOkB,EAGL,KAAK,OAASA,EAAM,QACtBE,EAAI,KACJC,EAAIH,IAEJE,EAAIF,EACJG,EAAI,MAGNL,EAAW,OAAO,KAAKI,EAAE,QAAQ,EAEjC,QAASH,EAAI,EAAGA,EAAID,EAAS,OAAQC,IAAK,CACxC,IAAIM,EAAUP,EAASC,GACnBM,KAAWF,EAAE,UACfC,EAAa,KAAKC,CAAO,CAE7B,CAEA,OAAO,IAAIvB,EAAK,IAAKsB,CAAY,CACnC,EASAtB,EAAK,IAAI,UAAU,MAAQ,SAAUkB,EAAO,CAC1C,OAAIA,IAAUlB,EAAK,IAAI,SACdA,EAAK,IAAI,SAGdkB,IAAUlB,EAAK,IAAI,MACd,KAGF,IAAIA,EAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,OAAO,OAAO,KAAKkB,EAAM,QAAQ,CAAC,CAAC,CACpF,EASAlB,EAAK,IAAM,SAAUwB,EAASC,EAAe,CAC3C,IAAIC,EAAoB,EAExB,QAASf,KAAaa,EAChBb,GAAa,WACjBe,GAAqB,OAAO,KAAKF,EAAQb,EAAU,EAAE,QAGvD,IAAIgB,GAAKF,EAAgBC,EAAoB,KAAQA,EAAoB,IAEzE,OAAO,KAAK,IAAI,EAAI,KAAK,IAAIC,CAAC,CAAC,CACjC,EAUA3B,EAAK,MAAQ,SAAU4B,EAAKC,EAAU,CACpC,KAAK,IAAMD,GAAO,GAClB,KAAK,SAAWC,GAAY,CAAC,CAC/B,EAOA7B,EAAK,MAAM,UAAU,SAAW,UAAY,CAC1C,OAAO,KAAK,GACd,EAsBAA,EAAK,MAAM,UAAU,OAAS,SAAU8B,EAAI,CAC1C,YAAK,IAAMA,EAAG,KAAK,IAAK,KAAK,QAAQ,EAC9B,IACT,EASA9B,EAAK,MAAM,UAAU,MAAQ,SAAU8B,EAAI,CACzC,OAAAA,EAAKA,GAAM,SAAUjB,EAAG,CAAE,OAAOA,CAAE,EAC5B,IAAIb,EAAK,MAAO8B,EAAG,KAAK,IAAK,KAAK,QAAQ,EAAG,KAAK,QAAQ,CACnE,EACA;AAAA;AAAA;AAAA,GAuBA9B,EAAK,UAAY,SAAUK,EAAKwB,EAAU,CACxC,GAAIxB,GAAO,MAAQA,GAAO,KACxB,MAAO,CAAC,EAGV,GAAI,MAAM,QAAQA,CAAG,EACnB,OAAOA,EAAI,IAAI,SAAU0B,EAAG,CAC1B,OAAO,IAAI/B,EAAK,MACdA,EAAK,MAAM,SAAS+B,CAAC,EAAE,YAAY,EACnC/B,EAAK,MAAM,MAAM6B,CAAQ,CAC3B,CACF,CAAC,EAOH,QAJID,EAAMvB,EAAI,SAAS,EAAE,YAAY,EACjC2B,EAAMJ,EAAI,OACVK,EAAS,CAAC,EAELC,EAAW,EAAGC,EAAa,EAAGD,GAAYF,EAAKE,IAAY,CAClE,IAAIE,EAAOR,EAAI,OAAOM,CAAQ,EAC1BG,EAAcH,EAAWC,EAE7B,GAAKC,EAAK,MAAMpC,EAAK,UAAU,SAAS,GAAKkC,GAAYF,EAAM,CAE7D,GAAIK,EAAc,EAAG,CACnB,IAAIC,EAAgBtC,EAAK,MAAM,MAAM6B,CAAQ,GAAK,CAAC,EACnDS,EAAc,SAAc,CAACH,EAAYE,CAAW,EACpDC,EAAc,MAAWL,EAAO,OAEhCA,EAAO,KACL,IAAIjC,EAAK,MACP4B,EAAI,MAAMO,EAAYD,CAAQ,EAC9BI,CACF,CACF,CACF,CAEAH,EAAaD,EAAW,CAC1B,CAEF,CAEA,OAAOD,CACT,EASAjC,EAAK,UAAU,UAAY,UAC3B;AAAA;AAAA;AAAA,GAkCAA,EAAK,SAAW,UAAY,CAC1B,KAAK,OAAS,CAAC,CACjB,EAEAA,EAAK,SAAS,oBAAsB,OAAO,OAAO,IAAI,EAmCtDA,EAAK,SAAS,iBAAmB,SAAU8B,EAAIS,EAAO,CAChDA,KAAS,KAAK,qBAChBvC,EAAK,MAAM,KAAK,6CAA+CuC,CAAK,EAGtET,EAAG,MAAQS,EACXvC,EAAK,SAAS,oBAAoB8B,EAAG,OAASA,CAChD,EAQA9B,EAAK,SAAS,4BAA8B,SAAU8B,EAAI,CACxD,IAAIU,EAAeV,EAAG,OAAUA,EAAG,SAAS,KAAK,oBAE5CU,GACHxC,EAAK,MAAM,KAAK;AAAA,EAAmG8B,CAAE,CAEzH,EAYA9B,EAAK,SAAS,KAAO,SAAUyC,EAAY,CACzC,IAAIC,EAAW,IAAI1C,EAAK,SAExB,OAAAyC,EAAW,QAAQ,SAAUE,EAAQ,CACnC,IAAIb,EAAK9B,EAAK,SAAS,oBAAoB2C,GAE3C,GAAIb,EACFY,EAAS,IAAIZ,CAAE,MAEf,OAAM,IAAI,MAAM,sCAAwCa,CAAM,CAElE,CAAC,EAEMD,CACT,EASA1C,EAAK,SAAS,UAAU,IAAM,UAAY,CACxC,IAAI4C,EAAM,MAAM,UAAU,MAAM,KAAK,SAAS,EAE9CA,EAAI,QAAQ,SAAUd,EAAI,CACxB9B,EAAK,SAAS,4BAA4B8B,CAAE,EAC5C,KAAK,OAAO,KAAKA,CAAE,CACrB,EAAG,IAAI,CACT,EAWA9B,EAAK,SAAS,UAAU,MAAQ,SAAU6C,EAAYC,EAAO,CAC3D9C,EAAK,SAAS,4BAA4B8C,CAAK,EAE/C,IAAIC,EAAM,KAAK,OAAO,QAAQF,CAAU,EACxC,GAAIE,GAAO,GACT,MAAM,IAAI,MAAM,wBAAwB,EAG1CA,EAAMA,EAAM,EACZ,KAAK,OAAO,OAAOA,EAAK,EAAGD,CAAK,CAClC,EAWA9C,EAAK,SAAS,UAAU,OAAS,SAAU6C,EAAYC,EAAO,CAC5D9C,EAAK,SAAS,4BAA4B8C,CAAK,EAE/C,IAAIC,EAAM,KAAK,OAAO,QAAQF,CAAU,EACxC,GAAIE,GAAO,GACT,MAAM,IAAI,MAAM,wBAAwB,EAG1C,KAAK,OAAO,OAAOA,EAAK,EAAGD,CAAK,CAClC,EAOA9C,EAAK,SAAS,UAAU,OAAS,SAAU8B,EAAI,CAC7C,IAAIiB,EAAM,KAAK,OAAO,QAAQjB,CAAE,EAC5BiB,GAAO,IAIX,KAAK,OAAO,OAAOA,EAAK,CAAC,CAC3B,EASA/C,EAAK,SAAS,UAAU,IAAM,SAAUiC,EAAQ,CAG9C,QAFIe,EAAc,KAAK,OAAO,OAErB/B,EAAI,EAAGA,EAAI+B,EAAa/B,IAAK,CAIpC,QAHIa,EAAK,KAAK,OAAOb,GACjBgC,EAAO,CAAC,EAEHC,EAAI,EAAGA,EAAIjB,EAAO,OAAQiB,IAAK,CACtC,IAAIC,EAASrB,EAAGG,EAAOiB,GAAIA,EAAGjB,CAAM,EAEpC,GAAI,EAAAkB,GAAW,MAA6BA,IAAW,IAEvD,GAAI,MAAM,QAAQA,CAAM,EACtB,QAASC,EAAI,EAAGA,EAAID,EAAO,OAAQC,IACjCH,EAAK,KAAKE,EAAOC,EAAE,OAGrBH,EAAK,KAAKE,CAAM,CAEpB,CAEAlB,EAASgB,CACX,CAEA,OAAOhB,CACT,EAYAjC,EAAK,SAAS,UAAU,UAAY,SAAU4B,EAAKC,EAAU,CAC3D,IAAIwB,EAAQ,IAAIrD,EAAK,MAAO4B,EAAKC,CAAQ,EAEzC,OAAO,KAAK,IAAI,CAACwB,CAAK,CAAC,EAAE,IAAI,SAAUtB,EAAG,CACxC,OAAOA,EAAE,SAAS,CACpB,CAAC,CACH,EAMA/B,EAAK,SAAS,UAAU,MAAQ,UAAY,CAC1C,KAAK,OAAS,CAAC,CACjB,EASAA,EAAK,SAAS,UAAU,OAAS,UAAY,CAC3C,OAAO,KAAK,OAAO,IAAI,SAAU8B,EAAI,CACnC,OAAA9B,EAAK,SAAS,4BAA4B8B,CAAE,EAErCA,EAAG,KACZ,CAAC,CACH,EACA;AAAA;AAAA;AAAA,GAqBA9B,EAAK,OAAS,SAAUgB,EAAU,CAChC,KAAK,WAAa,EAClB,KAAK,SAAWA,GAAY,CAAC,CAC/B,EAaAhB,EAAK,OAAO,UAAU,iBAAmB,SAAUsD,EAAO,CAExD,GAAI,KAAK,SAAS,QAAU,EAC1B,MAAO,GAST,QANIC,EAAQ,EACRC,EAAM,KAAK,SAAS,OAAS,EAC7BnB,EAAcmB,EAAMD,EACpBE,EAAa,KAAK,MAAMpB,EAAc,CAAC,EACvCqB,EAAa,KAAK,SAASD,EAAa,GAErCpB,EAAc,IACfqB,EAAaJ,IACfC,EAAQE,GAGNC,EAAaJ,IACfE,EAAMC,GAGJC,GAAcJ,IAIlBjB,EAAcmB,EAAMD,EACpBE,EAAaF,EAAQ,KAAK,MAAMlB,EAAc,CAAC,EAC/CqB,EAAa,KAAK,SAASD,EAAa,GAO1C,GAJIC,GAAcJ,GAIdI,EAAaJ,EACf,OAAOG,EAAa,EAGtB,GAAIC,EAAaJ,EACf,OAAQG,EAAa,GAAK,CAE9B,EAWAzD,EAAK,OAAO,UAAU,OAAS,SAAU2D,EAAWlD,EAAK,CACvD,KAAK,OAAOkD,EAAWlD,EAAK,UAAY,CACtC,KAAM,iBACR,CAAC,CACH,EAUAT,EAAK,OAAO,UAAU,OAAS,SAAU2D,EAAWlD,EAAKqB,EAAI,CAC3D,KAAK,WAAa,EAClB,IAAI8B,EAAW,KAAK,iBAAiBD,CAAS,EAE1C,KAAK,SAASC,IAAaD,EAC7B,KAAK,SAASC,EAAW,GAAK9B,EAAG,KAAK,SAAS8B,EAAW,GAAInD,CAAG,EAEjE,KAAK,SAAS,OAAOmD,EAAU,EAAGD,EAAWlD,CAAG,CAEpD,EAOAT,EAAK,OAAO,UAAU,UAAY,UAAY,CAC5C,GAAI,KAAK,WAAY,OAAO,KAAK,WAKjC,QAHI6D,EAAe,EACfC,EAAiB,KAAK,SAAS,OAE1B7C,EAAI,EAAGA,EAAI6C,EAAgB7C,GAAK,EAAG,CAC1C,IAAIR,EAAM,KAAK,SAASQ,GACxB4C,GAAgBpD,EAAMA,CACxB,CAEA,OAAO,KAAK,WAAa,KAAK,KAAKoD,CAAY,CACjD,EAQA7D,EAAK,OAAO,UAAU,IAAM,SAAU+D,EAAa,CAOjD,QANIC,EAAa,EACb5C,EAAI,KAAK,SAAUC,EAAI0C,EAAY,SACnCE,EAAO7C,EAAE,OAAQ8C,EAAO7C,EAAE,OAC1B8C,EAAO,EAAGC,EAAO,EACjBnD,EAAI,EAAGiC,EAAI,EAERjC,EAAIgD,GAAQf,EAAIgB,GACrBC,EAAO/C,EAAEH,GAAImD,EAAO/C,EAAE6B,GAClBiB,EAAOC,EACTnD,GAAK,EACIkD,EAAOC,EAChBlB,GAAK,EACIiB,GAAQC,IACjBJ,GAAc5C,EAAEH,EAAI,GAAKI,EAAE6B,EAAI,GAC/BjC,GAAK,EACLiC,GAAK,GAIT,OAAOc,CACT,EASAhE,EAAK,OAAO,UAAU,WAAa,SAAU+D,EAAa,CACxD,OAAO,KAAK,IAAIA,CAAW,EAAI,KAAK,UAAU,GAAK,CACrD,EAOA/D,EAAK,OAAO,UAAU,QAAU,UAAY,CAG1C,QAFIqE,EAAS,IAAI,MAAO,KAAK,SAAS,OAAS,CAAC,EAEvCpD,EAAI,EAAGiC,EAAI,EAAGjC,EAAI,KAAK,SAAS,OAAQA,GAAK,EAAGiC,IACvDmB,EAAOnB,GAAK,KAAK,SAASjC,GAG5B,OAAOoD,CACT,EAOArE,EAAK,OAAO,UAAU,OAAS,UAAY,CACzC,OAAO,KAAK,QACd,EAEA;AAAA;AAAA;AAAA;AAAA,GAiBAA,EAAK,QAAW,UAAU,CACxB,IAAIsE,EAAY,CACZ,QAAY,MACZ,OAAW,OACX,KAAS,OACT,KAAS,OACT,KAAS,MACT,IAAQ,MACR,KAAS,KACT,MAAU,MACV,IAAQ,IACR,MAAU,MACV,QAAY,MACZ,MAAU,MACV,KAAS,MACT,MAAU,KACV,QAAY,MACZ,QAAY,MACZ,QAAY,MACZ,MAAU,KACV,MAAU,MACV,OAAW,MACX,KAAS,KACX,EAEAC,EAAY,CACV,MAAU,KACV,MAAU,GACV,MAAU,KACV,MAAU,KACV,KAAS,KACT,IAAQ,GACR,KAAS,EACX,EAEAC,EAAI,WACJC,EAAI,WACJC,EAAIF,EAAI,aACRG,EAAIF,EAAI,WAERG,EAAO,KAAOF,EAAI,KAAOC,EAAID,EAC7BG,EAAO,KAAOH,EAAI,KAAOC,EAAID,EAAI,IAAMC,EAAI,MAC3CG,EAAO,KAAOJ,EAAI,KAAOC,EAAID,EAAIC,EAAID,EACrCK,EAAM,KAAOL,EAAI,KAAOD,EAEtBO,EAAU,IAAI,OAAOJ,CAAI,EACzBK,EAAU,IAAI,OAAOH,CAAI,EACzBI,EAAU,IAAI,OAAOL,CAAI,EACzBM,EAAS,IAAI,OAAOJ,CAAG,EAEvBK,EAAQ,kBACRC,EAAS,iBACTC,EAAQ,aACRC,EAAS,kBACTC,EAAU,KACVC,EAAW,cACXC,EAAW,IAAI,OAAO,oBAAoB,EAC1CC,EAAW,IAAI,OAAO,IAAMjB,EAAID,EAAI,cAAc,EAElDmB,EAAQ,mBACRC,EAAO,2IAEPC,EAAO,iDAEPC,EAAO,sFACPC,EAAQ,oBAERC,EAAO,WACPC,EAAS,MACTC,EAAQ,IAAI,OAAO,IAAMzB,EAAID,EAAI,cAAc,EAE/C2B,EAAgB,SAAuBC,EAAG,CAC5C,IAAIC,EACFC,EACAC,EACAC,EACAC,EACAC,EACAC,EAEF,GAAIP,EAAE,OAAS,EAAK,OAAOA,EAiB3B,GAfAG,EAAUH,EAAE,OAAO,EAAE,CAAC,EAClBG,GAAW,MACbH,EAAIG,EAAQ,YAAY,EAAIH,EAAE,OAAO,CAAC,GAIxCI,EAAKrB,EACLsB,EAAMrB,EAEFoB,EAAG,KAAKJ,CAAC,EAAKA,EAAIA,EAAE,QAAQI,EAAG,MAAM,EAChCC,EAAI,KAAKL,CAAC,IAAKA,EAAIA,EAAE,QAAQK,EAAI,MAAM,GAGhDD,EAAKnB,EACLoB,EAAMnB,EACFkB,EAAG,KAAKJ,CAAC,EAAG,CACd,IAAIQ,EAAKJ,EAAG,KAAKJ,CAAC,EAClBI,EAAKzB,EACDyB,EAAG,KAAKI,EAAG,EAAE,IACfJ,EAAKjB,EACLa,EAAIA,EAAE,QAAQI,EAAG,EAAE,EAEvB,SAAWC,EAAI,KAAKL,CAAC,EAAG,CACtB,IAAIQ,EAAKH,EAAI,KAAKL,CAAC,EACnBC,EAAOO,EAAG,GACVH,EAAMvB,EACFuB,EAAI,KAAKJ,CAAI,IACfD,EAAIC,EACJI,EAAMjB,EACNkB,EAAMjB,EACNkB,EAAMjB,EACFe,EAAI,KAAKL,CAAC,EAAKA,EAAIA,EAAI,IAClBM,EAAI,KAAKN,CAAC,GAAKI,EAAKjB,EAASa,EAAIA,EAAE,QAAQI,EAAG,EAAE,GAChDG,EAAI,KAAKP,CAAC,IAAKA,EAAIA,EAAI,KAEpC,CAIA,GADAI,EAAKb,EACDa,EAAG,KAAKJ,CAAC,EAAG,CACd,IAAIQ,EAAKJ,EAAG,KAAKJ,CAAC,EAClBC,EAAOO,EAAG,GACVR,EAAIC,EAAO,GACb,CAIA,GADAG,EAAKZ,EACDY,EAAG,KAAKJ,CAAC,EAAG,CACd,IAAIQ,EAAKJ,EAAG,KAAKJ,CAAC,EAClBC,EAAOO,EAAG,GACVN,EAASM,EAAG,GACZJ,EAAKzB,EACDyB,EAAG,KAAKH,CAAI,IACdD,EAAIC,EAAOhC,EAAUiC,GAEzB,CAIA,GADAE,EAAKX,EACDW,EAAG,KAAKJ,CAAC,EAAG,CACd,IAAIQ,EAAKJ,EAAG,KAAKJ,CAAC,EAClBC,EAAOO,EAAG,GACVN,EAASM,EAAG,GACZJ,EAAKzB,EACDyB,EAAG,KAAKH,CAAI,IACdD,EAAIC,EAAO/B,EAAUgC,GAEzB,CAKA,GAFAE,EAAKV,EACLW,EAAMV,EACFS,EAAG,KAAKJ,CAAC,EAAG,CACd,IAAIQ,EAAKJ,EAAG,KAAKJ,CAAC,EAClBC,EAAOO,EAAG,GACVJ,EAAKxB,EACDwB,EAAG,KAAKH,CAAI,IACdD,EAAIC,EAER,SAAWI,EAAI,KAAKL,CAAC,EAAG,CACtB,IAAIQ,EAAKH,EAAI,KAAKL,CAAC,EACnBC,EAAOO,EAAG,GAAKA,EAAG,GAClBH,EAAMzB,EACFyB,EAAI,KAAKJ,CAAI,IACfD,EAAIC,EAER,CAIA,GADAG,EAAKR,EACDQ,EAAG,KAAKJ,CAAC,EAAG,CACd,IAAIQ,EAAKJ,EAAG,KAAKJ,CAAC,EAClBC,EAAOO,EAAG,GACVJ,EAAKxB,EACLyB,EAAMxB,EACNyB,EAAMR,GACFM,EAAG,KAAKH,CAAI,GAAMI,EAAI,KAAKJ,CAAI,GAAK,CAAEK,EAAI,KAAKL,CAAI,KACrDD,EAAIC,EAER,CAEA,OAAAG,EAAKP,EACLQ,EAAMzB,EACFwB,EAAG,KAAKJ,CAAC,GAAKK,EAAI,KAAKL,CAAC,IAC1BI,EAAKjB,EACLa,EAAIA,EAAE,QAAQI,EAAG,EAAE,GAKjBD,GAAW,MACbH,EAAIG,EAAQ,YAAY,EAAIH,EAAE,OAAO,CAAC,GAGjCA,CACT,EAEA,OAAO,SAAUhD,EAAO,CACtB,OAAOA,EAAM,OAAO+C,CAAa,CACnC,CACF,EAAG,EAEHpG,EAAK,SAAS,iBAAiBA,EAAK,QAAS,SAAS,EACtD;AAAA;AAAA;AAAA,GAkBAA,EAAK,uBAAyB,SAAU8G,EAAW,CACjD,IAAIC,EAAQD,EAAU,OAAO,SAAU7D,EAAM+D,EAAU,CACrD,OAAA/D,EAAK+D,GAAYA,EACV/D,CACT,EAAG,CAAC,CAAC,EAEL,OAAO,SAAUI,EAAO,CACtB,GAAIA,GAAS0D,EAAM1D,EAAM,SAAS,KAAOA,EAAM,SAAS,EAAG,OAAOA,CACpE,CACF,EAeArD,EAAK,eAAiBA,EAAK,uBAAuB,CAChD,IACA,OACA,QACA,SACA,QACA,MACA,SACA,OACA,KACA,QACA,KACA,MACA,MACA,MACA,KACA,KACA,KACA,UACA,OACA,MACA,KACA,MACA,SACA,QACA,OACA,MACA,KACA,OACA,SACA,OACA,OACA,QACA,MACA,OACA,MACA,MACA,MACA,MACA,OACA,KACA,MACA,OACA,MACA,MACA,MACA,UACA,IACA,KACA,KACA,OACA,KACA,KACA,MACA,OACA,QACA,MACA,OACA,SACA,MACA,KACA,QACA,OACA,OACA,KACA,UACA,KACA,MACA,MACA,KACA,MACA,QACA,KACA,OACA,KACA,QACA,MACA,MACA,SACA,OACA,MACA,OACA,MACA,SACA,QACA,KACA,OACA,OACA,OACA,MACA,QACA,OACA,OACA,QACA,QACA,OACA,OACA,MACA,KACA,MACA,OACA,KACA,QACA,MACA,KACA,OACA,OACA,OACA,QACA,QACA,QACA,MACA,OACA,MACA,OACA,OACA,QACA,MACA,MACA,MACF,CAAC,EAEDA,EAAK,SAAS,iBAAiBA,EAAK,eAAgB,gBAAgB,EACpE;AAAA;AAAA;AAAA,GAoBAA,EAAK,QAAU,SAAUqD,EAAO,CAC9B,OAAOA,EAAM,OAAO,SAAUxC,EAAG,CAC/B,OAAOA,EAAE,QAAQ,OAAQ,EAAE,EAAE,QAAQ,OAAQ,EAAE,CACjD,CAAC,CACH,EAEAb,EAAK,SAAS,iBAAiBA,EAAK,QAAS,SAAS,EACtD;AAAA;AAAA;AAAA,GA0BAA,EAAK,SAAW,UAAY,CAC1B,KAAK,MAAQ,GACb,KAAK,MAAQ,CAAC,EACd,KAAK,GAAKA,EAAK,SAAS,QACxBA,EAAK,SAAS,SAAW,CAC3B,EAUAA,EAAK,SAAS,QAAU,EASxBA,EAAK,SAAS,UAAY,SAAUiH,EAAK,CAGvC,QAFI/G,EAAU,IAAIF,EAAK,SAAS,QAEvBiB,EAAI,EAAGe,EAAMiF,EAAI,OAAQhG,EAAIe,EAAKf,IACzCf,EAAQ,OAAO+G,EAAIhG,EAAE,EAGvB,OAAAf,EAAQ,OAAO,EACRA,EAAQ,IACjB,EAWAF,EAAK,SAAS,WAAa,SAAUkH,EAAQ,CAC3C,MAAI,iBAAkBA,EACblH,EAAK,SAAS,gBAAgBkH,EAAO,KAAMA,EAAO,YAAY,EAE9DlH,EAAK,SAAS,WAAWkH,EAAO,IAAI,CAE/C,EAiBAlH,EAAK,SAAS,gBAAkB,SAAU4B,EAAKuF,EAAc,CAS3D,QARIC,EAAO,IAAIpH,EAAK,SAEhBqH,EAAQ,CAAC,CACX,KAAMD,EACN,eAAgBD,EAChB,IAAKvF,CACP,CAAC,EAEMyF,EAAM,QAAQ,CACnB,IAAIC,EAAQD,EAAM,IAAI,EAGtB,GAAIC,EAAM,IAAI,OAAS,EAAG,CACxB,IAAIlF,EAAOkF,EAAM,IAAI,OAAO,CAAC,EACzBC,EAEAnF,KAAQkF,EAAM,KAAK,MACrBC,EAAaD,EAAM,KAAK,MAAMlF,IAE9BmF,EAAa,IAAIvH,EAAK,SACtBsH,EAAM,KAAK,MAAMlF,GAAQmF,GAGvBD,EAAM,IAAI,QAAU,IACtBC,EAAW,MAAQ,IAGrBF,EAAM,KAAK,CACT,KAAME,EACN,eAAgBD,EAAM,eACtB,IAAKA,EAAM,IAAI,MAAM,CAAC,CACxB,CAAC,CACH,CAEA,GAAIA,EAAM,gBAAkB,EAK5B,IAAI,MAAOA,EAAM,KAAK,MACpB,IAAIE,EAAgBF,EAAM,KAAK,MAAM,SAChC,CACL,IAAIE,EAAgB,IAAIxH,EAAK,SAC7BsH,EAAM,KAAK,MAAM,KAAOE,CAC1B,CAgCA,GA9BIF,EAAM,IAAI,QAAU,IACtBE,EAAc,MAAQ,IAGxBH,EAAM,KAAK,CACT,KAAMG,EACN,eAAgBF,EAAM,eAAiB,EACvC,IAAKA,EAAM,GACb,CAAC,EAKGA,EAAM,IAAI,OAAS,GACrBD,EAAM,KAAK,CACT,KAAMC,EAAM,KACZ,eAAgBA,EAAM,eAAiB,EACvC,IAAKA,EAAM,IAAI,MAAM,CAAC,CACxB,CAAC,EAKCA,EAAM,IAAI,QAAU,IACtBA,EAAM,KAAK,MAAQ,IAMjBA,EAAM,IAAI,QAAU,EAAG,CACzB,GAAI,MAAOA,EAAM,KAAK,MACpB,IAAIG,EAAmBH,EAAM,KAAK,MAAM,SACnC,CACL,IAAIG,EAAmB,IAAIzH,EAAK,SAChCsH,EAAM,KAAK,MAAM,KAAOG,CAC1B,CAEIH,EAAM,IAAI,QAAU,IACtBG,EAAiB,MAAQ,IAG3BJ,EAAM,KAAK,CACT,KAAMI,EACN,eAAgBH,EAAM,eAAiB,EACvC,IAAKA,EAAM,IAAI,MAAM,CAAC,CACxB,CAAC,CACH,CAKA,GAAIA,EAAM,IAAI,OAAS,EAAG,CACxB,IAAII,EAAQJ,EAAM,IAAI,OAAO,CAAC,EAC1BK,EAAQL,EAAM,IAAI,OAAO,CAAC,EAC1BM,EAEAD,KAASL,EAAM,KAAK,MACtBM,EAAgBN,EAAM,KAAK,MAAMK,IAEjCC,EAAgB,IAAI5H,EAAK,SACzBsH,EAAM,KAAK,MAAMK,GAASC,GAGxBN,EAAM,IAAI,QAAU,IACtBM,EAAc,MAAQ,IAGxBP,EAAM,KAAK,CACT,KAAMO,EACN,eAAgBN,EAAM,eAAiB,EACvC,IAAKI,EAAQJ,EAAM,IAAI,MAAM,CAAC,CAChC,CAAC,CACH,EACF,CAEA,OAAOF,CACT,EAYApH,EAAK,SAAS,WAAa,SAAU4B,EAAK,CAYxC,QAXIiG,EAAO,IAAI7H,EAAK,SAChBoH,EAAOS,EAUF,EAAI,EAAG7F,EAAMJ,EAAI,OAAQ,EAAII,EAAK,IAAK,CAC9C,IAAII,EAAOR,EAAI,GACXkG,EAAS,GAAK9F,EAAM,EAExB,GAAII,GAAQ,IACVyF,EAAK,MAAMzF,GAAQyF,EACnBA,EAAK,MAAQC,MAER,CACL,IAAIC,EAAO,IAAI/H,EAAK,SACpB+H,EAAK,MAAQD,EAEbD,EAAK,MAAMzF,GAAQ2F,EACnBF,EAAOE,CACT,CACF,CAEA,OAAOX,CACT,EAYApH,EAAK,SAAS,UAAU,QAAU,UAAY,CAQ5C,QAPI+G,EAAQ,CAAC,EAETM,EAAQ,CAAC,CACX,OAAQ,GACR,KAAM,IACR,CAAC,EAEMA,EAAM,QAAQ,CACnB,IAAIC,EAAQD,EAAM,IAAI,EAClBW,EAAQ,OAAO,KAAKV,EAAM,KAAK,KAAK,EACpCtF,EAAMgG,EAAM,OAEZV,EAAM,KAAK,QAKbA,EAAM,OAAO,OAAO,CAAC,EACrBP,EAAM,KAAKO,EAAM,MAAM,GAGzB,QAASrG,EAAI,EAAGA,EAAIe,EAAKf,IAAK,CAC5B,IAAIgH,EAAOD,EAAM/G,GAEjBoG,EAAM,KAAK,CACT,OAAQC,EAAM,OAAO,OAAOW,CAAI,EAChC,KAAMX,EAAM,KAAK,MAAMW,EACzB,CAAC,CACH,CACF,CAEA,OAAOlB,CACT,EAYA/G,EAAK,SAAS,UAAU,SAAW,UAAY,CAS7C,GAAI,KAAK,KACP,OAAO,KAAK,KAOd,QAJI4B,EAAM,KAAK,MAAQ,IAAM,IACzBsG,EAAS,OAAO,KAAK,KAAK,KAAK,EAAE,KAAK,EACtClG,EAAMkG,EAAO,OAER,EAAI,EAAG,EAAIlG,EAAK,IAAK,CAC5B,IAAIO,EAAQ2F,EAAO,GACfL,EAAO,KAAK,MAAMtF,GAEtBX,EAAMA,EAAMW,EAAQsF,EAAK,EAC3B,CAEA,OAAOjG,CACT,EAYA5B,EAAK,SAAS,UAAU,UAAY,SAAUqB,EAAG,CAU/C,QATIgD,EAAS,IAAIrE,EAAK,SAClBsH,EAAQ,OAERD,EAAQ,CAAC,CACX,MAAOhG,EACP,OAAQgD,EACR,KAAM,IACR,CAAC,EAEMgD,EAAM,QAAQ,CACnBC,EAAQD,EAAM,IAAI,EAWlB,QALIc,EAAS,OAAO,KAAKb,EAAM,MAAM,KAAK,EACtCc,EAAOD,EAAO,OACdE,EAAS,OAAO,KAAKf,EAAM,KAAK,KAAK,EACrCgB,EAAOD,EAAO,OAETE,EAAI,EAAGA,EAAIH,EAAMG,IAGxB,QAFIC,EAAQL,EAAOI,GAEVzH,EAAI,EAAGA,EAAIwH,EAAMxH,IAAK,CAC7B,IAAI2H,EAAQJ,EAAOvH,GAEnB,GAAI2H,GAASD,GAASA,GAAS,IAAK,CAClC,IAAIX,EAAOP,EAAM,KAAK,MAAMmB,GACxBC,EAAQpB,EAAM,MAAM,MAAMkB,GAC1BV,EAAQD,EAAK,OAASa,EAAM,MAC5BX,EAAO,OAEPU,KAASnB,EAAM,OAAO,OAIxBS,EAAOT,EAAM,OAAO,MAAMmB,GAC1BV,EAAK,MAAQA,EAAK,OAASD,IAM3BC,EAAO,IAAI/H,EAAK,SAChB+H,EAAK,MAAQD,EACbR,EAAM,OAAO,MAAMmB,GAASV,GAG9BV,EAAM,KAAK,CACT,MAAOqB,EACP,OAAQX,EACR,KAAMF,CACR,CAAC,CACH,CACF,CAEJ,CAEA,OAAOxD,CACT,EACArE,EAAK,SAAS,QAAU,UAAY,CAClC,KAAK,aAAe,GACpB,KAAK,KAAO,IAAIA,EAAK,SACrB,KAAK,eAAiB,CAAC,EACvB,KAAK,eAAiB,CAAC,CACzB,EAEAA,EAAK,SAAS,QAAQ,UAAU,OAAS,SAAU2I,EAAM,CACvD,IAAId,EACAe,EAAe,EAEnB,GAAID,EAAO,KAAK,aACd,MAAM,IAAI,MAAO,6BAA6B,EAGhD,QAAS,EAAI,EAAG,EAAIA,EAAK,QAAU,EAAI,KAAK,aAAa,QACnDA,EAAK,IAAM,KAAK,aAAa,GAD8B,IAE/DC,IAGF,KAAK,SAASA,CAAY,EAEtB,KAAK,eAAe,QAAU,EAChCf,EAAO,KAAK,KAEZA,EAAO,KAAK,eAAe,KAAK,eAAe,OAAS,GAAG,MAG7D,QAAS,EAAIe,EAAc,EAAID,EAAK,OAAQ,IAAK,CAC/C,IAAIE,EAAW,IAAI7I,EAAK,SACpBoC,EAAOuG,EAAK,GAEhBd,EAAK,MAAMzF,GAAQyG,EAEnB,KAAK,eAAe,KAAK,CACvB,OAAQhB,EACR,KAAMzF,EACN,MAAOyG,CACT,CAAC,EAEDhB,EAAOgB,CACT,CAEAhB,EAAK,MAAQ,GACb,KAAK,aAAec,CACtB,EAEA3I,EAAK,SAAS,QAAQ,UAAU,OAAS,UAAY,CACnD,KAAK,SAAS,CAAC,CACjB,EAEAA,EAAK,SAAS,QAAQ,UAAU,SAAW,SAAU8I,EAAQ,CAC3D,QAAS7H,EAAI,KAAK,eAAe,OAAS,EAAGA,GAAK6H,EAAQ7H,IAAK,CAC7D,IAAI4G,EAAO,KAAK,eAAe5G,GAC3B8H,EAAWlB,EAAK,MAAM,SAAS,EAE/BkB,KAAY,KAAK,eACnBlB,EAAK,OAAO,MAAMA,EAAK,MAAQ,KAAK,eAAekB,IAInDlB,EAAK,MAAM,KAAOkB,EAElB,KAAK,eAAeA,GAAYlB,EAAK,OAGvC,KAAK,eAAe,IAAI,CAC1B,CACF,EACA;AAAA;AAAA;AAAA,GAqBA7H,EAAK,MAAQ,SAAUgJ,EAAO,CAC5B,KAAK,cAAgBA,EAAM,cAC3B,KAAK,aAAeA,EAAM,aAC1B,KAAK,SAAWA,EAAM,SACtB,KAAK,OAASA,EAAM,OACpB,KAAK,SAAWA,EAAM,QACxB,EAyEAhJ,EAAK,MAAM,UAAU,OAAS,SAAUiJ,EAAa,CACnD,OAAO,KAAK,MAAM,SAAUC,EAAO,CACjC,IAAIC,EAAS,IAAInJ,EAAK,YAAYiJ,EAAaC,CAAK,EACpDC,EAAO,MAAM,CACf,CAAC,CACH,EA2BAnJ,EAAK,MAAM,UAAU,MAAQ,SAAU8B,EAAI,CAoBzC,QAZIoH,EAAQ,IAAIlJ,EAAK,MAAM,KAAK,MAAM,EAClCoJ,EAAiB,OAAO,OAAO,IAAI,EACnCC,EAAe,OAAO,OAAO,IAAI,EACjCC,EAAiB,OAAO,OAAO,IAAI,EACnCC,EAAkB,OAAO,OAAO,IAAI,EACpCC,EAAoB,OAAO,OAAO,IAAI,EAOjCvI,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IACtCoI,EAAa,KAAK,OAAOpI,IAAM,IAAIjB,EAAK,OAG1C8B,EAAG,KAAKoH,EAAOA,CAAK,EAEpB,QAASjI,EAAI,EAAGA,EAAIiI,EAAM,QAAQ,OAAQjI,IAAK,CAS7C,IAAIiG,EAASgC,EAAM,QAAQjI,GACvBwI,EAAQ,KACRC,EAAgB1J,EAAK,IAAI,MAEzBkH,EAAO,YACTuC,EAAQ,KAAK,SAAS,UAAUvC,EAAO,KAAM,CAC3C,OAAQA,EAAO,MACjB,CAAC,EAEDuC,EAAQ,CAACvC,EAAO,IAAI,EAGtB,QAASyC,EAAI,EAAGA,EAAIF,EAAM,OAAQE,IAAK,CACrC,IAAIC,EAAOH,EAAME,GAQjBzC,EAAO,KAAO0C,EAOd,IAAIC,EAAe7J,EAAK,SAAS,WAAWkH,CAAM,EAC9C4C,EAAgB,KAAK,SAAS,UAAUD,CAAY,EAAE,QAAQ,EAQlE,GAAIC,EAAc,SAAW,GAAK5C,EAAO,WAAalH,EAAK,MAAM,SAAS,SAAU,CAClF,QAASoD,EAAI,EAAGA,EAAI8D,EAAO,OAAO,OAAQ9D,IAAK,CAC7C,IAAI2G,EAAQ7C,EAAO,OAAO9D,GAC1BmG,EAAgBQ,GAAS/J,EAAK,IAAI,KACpC,CAEA,KACF,CAEA,QAASkD,EAAI,EAAGA,EAAI4G,EAAc,OAAQ5G,IASxC,QAJI8G,EAAeF,EAAc5G,GAC7B1B,EAAU,KAAK,cAAcwI,GAC7BC,EAAYzI,EAAQ,OAEf4B,EAAI,EAAGA,EAAI8D,EAAO,OAAO,OAAQ9D,IAAK,CAS7C,IAAI2G,EAAQ7C,EAAO,OAAO9D,GACtB8G,EAAe1I,EAAQuI,GACvBI,EAAuB,OAAO,KAAKD,CAAY,EAC/CE,EAAYJ,EAAe,IAAMD,EACjCM,EAAuB,IAAIrK,EAAK,IAAImK,CAAoB,EAoB5D,GAbIjD,EAAO,UAAYlH,EAAK,MAAM,SAAS,WACzC0J,EAAgBA,EAAc,MAAMW,CAAoB,EAEpDd,EAAgBQ,KAAW,SAC7BR,EAAgBQ,GAAS/J,EAAK,IAAI,WASlCkH,EAAO,UAAYlH,EAAK,MAAM,SAAS,WAAY,CACjDwJ,EAAkBO,KAAW,SAC/BP,EAAkBO,GAAS/J,EAAK,IAAI,OAGtCwJ,EAAkBO,GAASP,EAAkBO,GAAO,MAAMM,CAAoB,EAO9E,QACF,CAeA,GANAhB,EAAaU,GAAO,OAAOE,EAAW/C,EAAO,MAAO,SAAU9F,GAAGC,GAAG,CAAE,OAAOD,GAAIC,EAAE,CAAC,EAMhF,CAAAiI,EAAec,GAInB,SAASE,EAAI,EAAGA,EAAIH,EAAqB,OAAQG,IAAK,CAOpD,IAAIC,EAAsBJ,EAAqBG,GAC3CE,EAAmB,IAAIxK,EAAK,SAAUuK,EAAqBR,CAAK,EAChElI,EAAWqI,EAAaK,GACxBE,GAECA,EAAarB,EAAeoB,MAAuB,OACtDpB,EAAeoB,GAAoB,IAAIxK,EAAK,UAAWgK,EAAcD,EAAOlI,CAAQ,EAEpF4I,EAAW,IAAIT,EAAcD,EAAOlI,CAAQ,CAGhD,CAEAyH,EAAec,GAAa,GAC9B,CAEJ,CAQA,GAAIlD,EAAO,WAAalH,EAAK,MAAM,SAAS,SAC1C,QAASoD,EAAI,EAAGA,EAAI8D,EAAO,OAAO,OAAQ9D,IAAK,CAC7C,IAAI2G,EAAQ7C,EAAO,OAAO9D,GAC1BmG,EAAgBQ,GAASR,EAAgBQ,GAAO,UAAUL,CAAa,CACzE,CAEJ,CAUA,QAHIgB,EAAqB1K,EAAK,IAAI,SAC9B2K,EAAuB3K,EAAK,IAAI,MAE3BiB,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IAAK,CAC3C,IAAI8I,EAAQ,KAAK,OAAO9I,GAEpBsI,EAAgBQ,KAClBW,EAAqBA,EAAmB,UAAUnB,EAAgBQ,EAAM,GAGtEP,EAAkBO,KACpBY,EAAuBA,EAAqB,MAAMnB,EAAkBO,EAAM,EAE9E,CAEA,IAAIa,EAAoB,OAAO,KAAKxB,CAAc,EAC9CyB,EAAU,CAAC,EACXC,EAAU,OAAO,OAAO,IAAI,EAYhC,GAAI5B,EAAM,UAAU,EAAG,CACrB0B,EAAoB,OAAO,KAAK,KAAK,YAAY,EAEjD,QAAS3J,EAAI,EAAGA,EAAI2J,EAAkB,OAAQ3J,IAAK,CACjD,IAAIuJ,EAAmBI,EAAkB3J,GACrCF,EAAWf,EAAK,SAAS,WAAWwK,CAAgB,EACxDpB,EAAeoB,GAAoB,IAAIxK,EAAK,SAC9C,CACF,CAEA,QAASiB,EAAI,EAAGA,EAAI2J,EAAkB,OAAQ3J,IAAK,CASjD,IAAIF,EAAWf,EAAK,SAAS,WAAW4K,EAAkB3J,EAAE,EACxDP,EAASK,EAAS,OAEtB,GAAI,EAAC2J,EAAmB,SAAShK,CAAM,GAInC,CAAAiK,EAAqB,SAASjK,CAAM,EAIxC,KAAIqK,EAAc,KAAK,aAAahK,GAChCiK,EAAQ3B,EAAatI,EAAS,WAAW,WAAWgK,CAAW,EAC/DE,EAEJ,IAAKA,EAAWH,EAAQpK,MAAa,OACnCuK,EAAS,OAASD,EAClBC,EAAS,UAAU,QAAQ7B,EAAerI,EAAS,MAC9C,CACL,IAAImK,EAAQ,CACV,IAAKxK,EACL,MAAOsK,EACP,UAAW5B,EAAerI,EAC5B,EACA+J,EAAQpK,GAAUwK,EAClBL,EAAQ,KAAKK,CAAK,CACpB,EACF,CAKA,OAAOL,EAAQ,KAAK,SAAUzJ,GAAGC,GAAG,CAClC,OAAOA,GAAE,MAAQD,GAAE,KACrB,CAAC,CACH,EAUApB,EAAK,MAAM,UAAU,OAAS,UAAY,CACxC,IAAImL,EAAgB,OAAO,KAAK,KAAK,aAAa,EAC/C,KAAK,EACL,IAAI,SAAUvB,EAAM,CACnB,MAAO,CAACA,EAAM,KAAK,cAAcA,EAAK,CACxC,EAAG,IAAI,EAELwB,EAAe,OAAO,KAAK,KAAK,YAAY,EAC7C,IAAI,SAAUC,EAAK,CAClB,MAAO,CAACA,EAAK,KAAK,aAAaA,GAAK,OAAO,CAAC,CAC9C,EAAG,IAAI,EAET,MAAO,CACL,QAASrL,EAAK,QACd,OAAQ,KAAK,OACb,aAAcoL,EACd,cAAeD,EACf,SAAU,KAAK,SAAS,OAAO,CACjC,CACF,EAQAnL,EAAK,MAAM,KAAO,SAAUsL,EAAiB,CAC3C,IAAItC,EAAQ,CAAC,EACToC,EAAe,CAAC,EAChBG,EAAoBD,EAAgB,aACpCH,EAAgB,OAAO,OAAO,IAAI,EAClCK,EAA0BF,EAAgB,cAC1CG,EAAkB,IAAIzL,EAAK,SAAS,QACpC0C,EAAW1C,EAAK,SAAS,KAAKsL,EAAgB,QAAQ,EAEtDA,EAAgB,SAAWtL,EAAK,SAClCA,EAAK,MAAM,KAAK,4EAA8EA,EAAK,QAAU,sCAAwCsL,EAAgB,QAAU,GAAG,EAGpL,QAASrK,EAAI,EAAGA,EAAIsK,EAAkB,OAAQtK,IAAK,CACjD,IAAIyK,EAAQH,EAAkBtK,GAC1BoK,EAAMK,EAAM,GACZ1K,EAAW0K,EAAM,GAErBN,EAAaC,GAAO,IAAIrL,EAAK,OAAOgB,CAAQ,CAC9C,CAEA,QAASC,EAAI,EAAGA,EAAIuK,EAAwB,OAAQvK,IAAK,CACvD,IAAIyK,EAAQF,EAAwBvK,GAChC2I,EAAO8B,EAAM,GACblK,EAAUkK,EAAM,GAEpBD,EAAgB,OAAO7B,CAAI,EAC3BuB,EAAcvB,GAAQpI,CACxB,CAEA,OAAAiK,EAAgB,OAAO,EAEvBzC,EAAM,OAASsC,EAAgB,OAE/BtC,EAAM,aAAeoC,EACrBpC,EAAM,cAAgBmC,EACtBnC,EAAM,SAAWyC,EAAgB,KACjCzC,EAAM,SAAWtG,EAEV,IAAI1C,EAAK,MAAMgJ,CAAK,CAC7B,EACA;AAAA;AAAA;AAAA,GA6BAhJ,EAAK,QAAU,UAAY,CACzB,KAAK,KAAO,KACZ,KAAK,QAAU,OAAO,OAAO,IAAI,EACjC,KAAK,WAAa,OAAO,OAAO,IAAI,EACpC,KAAK,cAAgB,OAAO,OAAO,IAAI,EACvC,KAAK,qBAAuB,CAAC,EAC7B,KAAK,aAAe,CAAC,EACrB,KAAK,UAAYA,EAAK,UACtB,KAAK,SAAW,IAAIA,EAAK,SACzB,KAAK,eAAiB,IAAIA,EAAK,SAC/B,KAAK,cAAgB,EACrB,KAAK,GAAK,IACV,KAAK,IAAM,IACX,KAAK,UAAY,EACjB,KAAK,kBAAoB,CAAC,CAC5B,EAcAA,EAAK,QAAQ,UAAU,IAAM,SAAUqL,EAAK,CAC1C,KAAK,KAAOA,CACd,EAkCArL,EAAK,QAAQ,UAAU,MAAQ,SAAUW,EAAWgL,EAAY,CAC9D,GAAI,KAAK,KAAKhL,CAAS,EACrB,MAAM,IAAI,WAAY,UAAYA,EAAY,kCAAkC,EAGlF,KAAK,QAAQA,GAAagL,GAAc,CAAC,CAC3C,EAUA3L,EAAK,QAAQ,UAAU,EAAI,SAAU4L,EAAQ,CACvCA,EAAS,EACX,KAAK,GAAK,EACDA,EAAS,EAClB,KAAK,GAAK,EAEV,KAAK,GAAKA,CAEd,EASA5L,EAAK,QAAQ,UAAU,GAAK,SAAU4L,EAAQ,CAC5C,KAAK,IAAMA,CACb,EAmBA5L,EAAK,QAAQ,UAAU,IAAM,SAAU6L,EAAKF,EAAY,CACtD,IAAIjL,EAASmL,EAAI,KAAK,MAClBC,EAAS,OAAO,KAAK,KAAK,OAAO,EAErC,KAAK,WAAWpL,GAAUiL,GAAc,CAAC,EACzC,KAAK,eAAiB,EAEtB,QAAS1K,EAAI,EAAGA,EAAI6K,EAAO,OAAQ7K,IAAK,CACtC,IAAIN,EAAYmL,EAAO7K,GACnB8K,EAAY,KAAK,QAAQpL,GAAW,UACpCoJ,EAAQgC,EAAYA,EAAUF,CAAG,EAAIA,EAAIlL,GACzCsB,EAAS,KAAK,UAAU8H,EAAO,CAC7B,OAAQ,CAACpJ,CAAS,CACpB,CAAC,EACD8I,EAAQ,KAAK,SAAS,IAAIxH,CAAM,EAChClB,EAAW,IAAIf,EAAK,SAAUU,EAAQC,CAAS,EAC/CqL,EAAa,OAAO,OAAO,IAAI,EAEnC,KAAK,qBAAqBjL,GAAYiL,EACtC,KAAK,aAAajL,GAAY,EAG9B,KAAK,aAAaA,IAAa0I,EAAM,OAGrC,QAASvG,EAAI,EAAGA,EAAIuG,EAAM,OAAQvG,IAAK,CACrC,IAAI0G,EAAOH,EAAMvG,GAUjB,GARI8I,EAAWpC,IAAS,OACtBoC,EAAWpC,GAAQ,GAGrBoC,EAAWpC,IAAS,EAIhB,KAAK,cAAcA,IAAS,KAAW,CACzC,IAAIpI,EAAU,OAAO,OAAO,IAAI,EAChCA,EAAQ,OAAY,KAAK,UACzB,KAAK,WAAa,EAElB,QAAS4B,EAAI,EAAGA,EAAI0I,EAAO,OAAQ1I,IACjC5B,EAAQsK,EAAO1I,IAAM,OAAO,OAAO,IAAI,EAGzC,KAAK,cAAcwG,GAAQpI,CAC7B,CAGI,KAAK,cAAcoI,GAAMjJ,GAAWD,IAAW,OACjD,KAAK,cAAckJ,GAAMjJ,GAAWD,GAAU,OAAO,OAAO,IAAI,GAKlE,QAAS4J,EAAI,EAAGA,EAAI,KAAK,kBAAkB,OAAQA,IAAK,CACtD,IAAI2B,EAAc,KAAK,kBAAkB3B,GACrCzI,EAAW+H,EAAK,SAASqC,GAEzB,KAAK,cAAcrC,GAAMjJ,GAAWD,GAAQuL,IAAgB,OAC9D,KAAK,cAAcrC,GAAMjJ,GAAWD,GAAQuL,GAAe,CAAC,GAG9D,KAAK,cAAcrC,GAAMjJ,GAAWD,GAAQuL,GAAa,KAAKpK,CAAQ,CACxE,CACF,CAEF,CACF,EAOA7B,EAAK,QAAQ,UAAU,6BAA+B,UAAY,CAOhE,QALIkM,EAAY,OAAO,KAAK,KAAK,YAAY,EACzCC,EAAiBD,EAAU,OAC3BE,EAAc,CAAC,EACfC,EAAqB,CAAC,EAEjBpL,EAAI,EAAGA,EAAIkL,EAAgBlL,IAAK,CACvC,IAAIF,EAAWf,EAAK,SAAS,WAAWkM,EAAUjL,EAAE,EAChD8I,EAAQhJ,EAAS,UAErBsL,EAAmBtC,KAAWsC,EAAmBtC,GAAS,GAC1DsC,EAAmBtC,IAAU,EAE7BqC,EAAYrC,KAAWqC,EAAYrC,GAAS,GAC5CqC,EAAYrC,IAAU,KAAK,aAAahJ,EAC1C,CAIA,QAFI+K,EAAS,OAAO,KAAK,KAAK,OAAO,EAE5B7K,EAAI,EAAGA,EAAI6K,EAAO,OAAQ7K,IAAK,CACtC,IAAIN,EAAYmL,EAAO7K,GACvBmL,EAAYzL,GAAayL,EAAYzL,GAAa0L,EAAmB1L,EACvE,CAEA,KAAK,mBAAqByL,CAC5B,EAOApM,EAAK,QAAQ,UAAU,mBAAqB,UAAY,CAMtD,QALIoL,EAAe,CAAC,EAChBc,EAAY,OAAO,KAAK,KAAK,oBAAoB,EACjDI,EAAkBJ,EAAU,OAC5BK,EAAe,OAAO,OAAO,IAAI,EAE5BtL,EAAI,EAAGA,EAAIqL,EAAiBrL,IAAK,CAaxC,QAZIF,EAAWf,EAAK,SAAS,WAAWkM,EAAUjL,EAAE,EAChDN,EAAYI,EAAS,UACrByL,EAAc,KAAK,aAAazL,GAChCgK,EAAc,IAAI/K,EAAK,OACvByM,EAAkB,KAAK,qBAAqB1L,GAC5C0I,EAAQ,OAAO,KAAKgD,CAAe,EACnCC,EAAcjD,EAAM,OAGpBkD,EAAa,KAAK,QAAQhM,GAAW,OAAS,EAC9CiM,EAAW,KAAK,WAAW7L,EAAS,QAAQ,OAAS,EAEhDmC,EAAI,EAAGA,EAAIwJ,EAAaxJ,IAAK,CACpC,IAAI0G,EAAOH,EAAMvG,GACb2J,EAAKJ,EAAgB7C,GACrBK,EAAY,KAAK,cAAcL,GAAM,OACrCkD,EAAK9B,EAAO+B,EAEZR,EAAa3C,KAAU,QACzBkD,EAAM9M,EAAK,IAAI,KAAK,cAAc4J,GAAO,KAAK,aAAa,EAC3D2C,EAAa3C,GAAQkD,GAErBA,EAAMP,EAAa3C,GAGrBoB,EAAQ8B,IAAQ,KAAK,IAAM,GAAKD,IAAO,KAAK,KAAO,EAAI,KAAK,GAAK,KAAK,IAAML,EAAc,KAAK,mBAAmB7L,KAAekM,GACjI7B,GAAS2B,EACT3B,GAAS4B,EACTG,EAAqB,KAAK,MAAM/B,EAAQ,GAAI,EAAI,IAQhDD,EAAY,OAAOd,EAAW8C,CAAkB,CAClD,CAEA3B,EAAarK,GAAYgK,CAC3B,CAEA,KAAK,aAAeK,CACtB,EAOApL,EAAK,QAAQ,UAAU,eAAiB,UAAY,CAClD,KAAK,SAAWA,EAAK,SAAS,UAC5B,OAAO,KAAK,KAAK,aAAa,EAAE,KAAK,CACvC,CACF,EAUAA,EAAK,QAAQ,UAAU,MAAQ,UAAY,CACzC,YAAK,6BAA6B,EAClC,KAAK,mBAAmB,EACxB,KAAK,eAAe,EAEb,IAAIA,EAAK,MAAM,CACpB,cAAe,KAAK,cACpB,aAAc,KAAK,aACnB,SAAU,KAAK,SACf,OAAQ,OAAO,KAAK,KAAK,OAAO,EAChC,SAAU,KAAK,cACjB,CAAC,CACH,EAgBAA,EAAK,QAAQ,UAAU,IAAM,SAAU8B,EAAI,CACzC,IAAIkL,EAAO,MAAM,UAAU,MAAM,KAAK,UAAW,CAAC,EAClDA,EAAK,QAAQ,IAAI,EACjBlL,EAAG,MAAM,KAAMkL,CAAI,CACrB,EAaAhN,EAAK,UAAY,SAAU4J,EAAMG,EAAOlI,EAAU,CAShD,QARIoL,EAAiB,OAAO,OAAO,IAAI,EACnCC,EAAe,OAAO,KAAKrL,GAAY,CAAC,CAAC,EAOpCZ,EAAI,EAAGA,EAAIiM,EAAa,OAAQjM,IAAK,CAC5C,IAAIT,EAAM0M,EAAajM,GACvBgM,EAAezM,GAAOqB,EAASrB,GAAK,MAAM,CAC5C,CAEA,KAAK,SAAW,OAAO,OAAO,IAAI,EAE9BoJ,IAAS,SACX,KAAK,SAASA,GAAQ,OAAO,OAAO,IAAI,EACxC,KAAK,SAASA,GAAMG,GAASkD,EAEjC,EAWAjN,EAAK,UAAU,UAAU,QAAU,SAAUmN,EAAgB,CAG3D,QAFI1D,EAAQ,OAAO,KAAK0D,EAAe,QAAQ,EAEtClM,EAAI,EAAGA,EAAIwI,EAAM,OAAQxI,IAAK,CACrC,IAAI2I,EAAOH,EAAMxI,GACb6K,EAAS,OAAO,KAAKqB,EAAe,SAASvD,EAAK,EAElD,KAAK,SAASA,IAAS,OACzB,KAAK,SAASA,GAAQ,OAAO,OAAO,IAAI,GAG1C,QAAS1G,EAAI,EAAGA,EAAI4I,EAAO,OAAQ5I,IAAK,CACtC,IAAI6G,EAAQ+B,EAAO5I,GACf3C,EAAO,OAAO,KAAK4M,EAAe,SAASvD,GAAMG,EAAM,EAEvD,KAAK,SAASH,GAAMG,IAAU,OAChC,KAAK,SAASH,GAAMG,GAAS,OAAO,OAAO,IAAI,GAGjD,QAAS3G,EAAI,EAAGA,EAAI7C,EAAK,OAAQ6C,IAAK,CACpC,IAAI5C,EAAMD,EAAK6C,GAEX,KAAK,SAASwG,GAAMG,GAAOvJ,IAAQ,KACrC,KAAK,SAASoJ,GAAMG,GAAOvJ,GAAO2M,EAAe,SAASvD,GAAMG,GAAOvJ,GAEvE,KAAK,SAASoJ,GAAMG,GAAOvJ,GAAO,KAAK,SAASoJ,GAAMG,GAAOvJ,GAAK,OAAO2M,EAAe,SAASvD,GAAMG,GAAOvJ,EAAI,CAGtH,CACF,CACF,CACF,EASAR,EAAK,UAAU,UAAU,IAAM,SAAU4J,EAAMG,EAAOlI,EAAU,CAC9D,GAAI,EAAE+H,KAAQ,KAAK,UAAW,CAC5B,KAAK,SAASA,GAAQ,OAAO,OAAO,IAAI,EACxC,KAAK,SAASA,GAAMG,GAASlI,EAC7B,MACF,CAEA,GAAI,EAAEkI,KAAS,KAAK,SAASH,IAAQ,CACnC,KAAK,SAASA,GAAMG,GAASlI,EAC7B,MACF,CAIA,QAFIqL,EAAe,OAAO,KAAKrL,CAAQ,EAE9BZ,EAAI,EAAGA,EAAIiM,EAAa,OAAQjM,IAAK,CAC5C,IAAIT,EAAM0M,EAAajM,GAEnBT,KAAO,KAAK,SAASoJ,GAAMG,GAC7B,KAAK,SAASH,GAAMG,GAAOvJ,GAAO,KAAK,SAASoJ,GAAMG,GAAOvJ,GAAK,OAAOqB,EAASrB,EAAI,EAEtF,KAAK,SAASoJ,GAAMG,GAAOvJ,GAAOqB,EAASrB,EAE/C,CACF,EAYAR,EAAK,MAAQ,SAAUoN,EAAW,CAChC,KAAK,QAAU,CAAC,EAChB,KAAK,UAAYA,CACnB,EA0BApN,EAAK,MAAM,SAAW,IAAI,OAAQ,GAAG,EACrCA,EAAK,MAAM,SAAS,KAAO,EAC3BA,EAAK,MAAM,SAAS,QAAU,EAC9BA,EAAK,MAAM,SAAS,SAAW,EAa/BA,EAAK,MAAM,SAAW,CAIpB,SAAU,EAMV,SAAU,EAMV,WAAY,CACd,EAyBAA,EAAK,MAAM,UAAU,OAAS,SAAUkH,EAAQ,CAC9C,MAAM,WAAYA,IAChBA,EAAO,OAAS,KAAK,WAGjB,UAAWA,IACfA,EAAO,MAAQ,GAGX,gBAAiBA,IACrBA,EAAO,YAAc,IAGjB,aAAcA,IAClBA,EAAO,SAAWlH,EAAK,MAAM,SAAS,MAGnCkH,EAAO,SAAWlH,EAAK,MAAM,SAAS,SAAakH,EAAO,KAAK,OAAO,CAAC,GAAKlH,EAAK,MAAM,WAC1FkH,EAAO,KAAO,IAAMA,EAAO,MAGxBA,EAAO,SAAWlH,EAAK,MAAM,SAAS,UAAckH,EAAO,KAAK,MAAM,EAAE,GAAKlH,EAAK,MAAM,WAC3FkH,EAAO,KAAO,GAAKA,EAAO,KAAO,KAG7B,aAAcA,IAClBA,EAAO,SAAWlH,EAAK,MAAM,SAAS,UAGxC,KAAK,QAAQ,KAAKkH,CAAM,EAEjB,IACT,EASAlH,EAAK,MAAM,UAAU,UAAY,UAAY,CAC3C,QAASiB,EAAI,EAAGA,EAAI,KAAK,QAAQ,OAAQA,IACvC,GAAI,KAAK,QAAQA,GAAG,UAAYjB,EAAK,MAAM,SAAS,WAClD,MAAO,GAIX,MAAO,EACT,EA4BAA,EAAK,MAAM,UAAU,KAAO,SAAU4J,EAAMyD,EAAS,CACnD,GAAI,MAAM,QAAQzD,CAAI,EACpB,OAAAA,EAAK,QAAQ,SAAU7H,EAAG,CAAE,KAAK,KAAKA,EAAG/B,EAAK,MAAM,MAAMqN,CAAO,CAAC,CAAE,EAAG,IAAI,EACpE,KAGT,IAAInG,EAASmG,GAAW,CAAC,EACzB,OAAAnG,EAAO,KAAO0C,EAAK,SAAS,EAE5B,KAAK,OAAO1C,CAAM,EAEX,IACT,EACAlH,EAAK,gBAAkB,SAAUI,EAASmD,EAAOC,EAAK,CACpD,KAAK,KAAO,kBACZ,KAAK,QAAUpD,EACf,KAAK,MAAQmD,EACb,KAAK,IAAMC,CACb,EAEAxD,EAAK,gBAAgB,UAAY,IAAI,MACrCA,EAAK,WAAa,SAAU4B,EAAK,CAC/B,KAAK,QAAU,CAAC,EAChB,KAAK,IAAMA,EACX,KAAK,OAASA,EAAI,OAClB,KAAK,IAAM,EACX,KAAK,MAAQ,EACb,KAAK,oBAAsB,CAAC,CAC9B,EAEA5B,EAAK,WAAW,UAAU,IAAM,UAAY,CAG1C,QAFIsN,EAAQtN,EAAK,WAAW,QAErBsN,GACLA,EAAQA,EAAM,IAAI,CAEtB,EAEAtN,EAAK,WAAW,UAAU,YAAc,UAAY,CAKlD,QAJIuN,EAAY,CAAC,EACbpL,EAAa,KAAK,MAClBD,EAAW,KAAK,IAEX,EAAI,EAAG,EAAI,KAAK,oBAAoB,OAAQ,IACnDA,EAAW,KAAK,oBAAoB,GACpCqL,EAAU,KAAK,KAAK,IAAI,MAAMpL,EAAYD,CAAQ,CAAC,EACnDC,EAAaD,EAAW,EAG1B,OAAAqL,EAAU,KAAK,KAAK,IAAI,MAAMpL,EAAY,KAAK,GAAG,CAAC,EACnD,KAAK,oBAAoB,OAAS,EAE3BoL,EAAU,KAAK,EAAE,CAC1B,EAEAvN,EAAK,WAAW,UAAU,KAAO,SAAUwN,EAAM,CAC/C,KAAK,QAAQ,KAAK,CAChB,KAAMA,EACN,IAAK,KAAK,YAAY,EACtB,MAAO,KAAK,MACZ,IAAK,KAAK,GACZ,CAAC,EAED,KAAK,MAAQ,KAAK,GACpB,EAEAxN,EAAK,WAAW,UAAU,gBAAkB,UAAY,CACtD,KAAK,oBAAoB,KAAK,KAAK,IAAM,CAAC,EAC1C,KAAK,KAAO,CACd,EAEAA,EAAK,WAAW,UAAU,KAAO,UAAY,CAC3C,GAAI,KAAK,KAAO,KAAK,OACnB,OAAOA,EAAK,WAAW,IAGzB,IAAIoC,EAAO,KAAK,IAAI,OAAO,KAAK,GAAG,EACnC,YAAK,KAAO,EACLA,CACT,EAEApC,EAAK,WAAW,UAAU,MAAQ,UAAY,CAC5C,OAAO,KAAK,IAAM,KAAK,KACzB,EAEAA,EAAK,WAAW,UAAU,OAAS,UAAY,CACzC,KAAK,OAAS,KAAK,MACrB,KAAK,KAAO,GAGd,KAAK,MAAQ,KAAK,GACpB,EAEAA,EAAK,WAAW,UAAU,OAAS,UAAY,CAC7C,KAAK,KAAO,CACd,EAEAA,EAAK,WAAW,UAAU,eAAiB,UAAY,CACrD,IAAIoC,EAAMqL,EAEV,GACErL,EAAO,KAAK,KAAK,EACjBqL,EAAWrL,EAAK,WAAW,CAAC,QACrBqL,EAAW,IAAMA,EAAW,IAEjCrL,GAAQpC,EAAK,WAAW,KAC1B,KAAK,OAAO,CAEhB,EAEAA,EAAK,WAAW,UAAU,KAAO,UAAY,CAC3C,OAAO,KAAK,IAAM,KAAK,MACzB,EAEAA,EAAK,WAAW,IAAM,MACtBA,EAAK,WAAW,MAAQ,QACxBA,EAAK,WAAW,KAAO,OACvBA,EAAK,WAAW,cAAgB,gBAChCA,EAAK,WAAW,MAAQ,QACxBA,EAAK,WAAW,SAAW,WAE3BA,EAAK,WAAW,SAAW,SAAU0N,EAAO,CAC1C,OAAAA,EAAM,OAAO,EACbA,EAAM,KAAK1N,EAAK,WAAW,KAAK,EAChC0N,EAAM,OAAO,EACN1N,EAAK,WAAW,OACzB,EAEAA,EAAK,WAAW,QAAU,SAAU0N,EAAO,CAQzC,GAPIA,EAAM,MAAM,EAAI,IAClBA,EAAM,OAAO,EACbA,EAAM,KAAK1N,EAAK,WAAW,IAAI,GAGjC0N,EAAM,OAAO,EAETA,EAAM,KAAK,EACb,OAAO1N,EAAK,WAAW,OAE3B,EAEAA,EAAK,WAAW,gBAAkB,SAAU0N,EAAO,CACjD,OAAAA,EAAM,OAAO,EACbA,EAAM,eAAe,EACrBA,EAAM,KAAK1N,EAAK,WAAW,aAAa,EACjCA,EAAK,WAAW,OACzB,EAEAA,EAAK,WAAW,SAAW,SAAU0N,EAAO,CAC1C,OAAAA,EAAM,OAAO,EACbA,EAAM,eAAe,EACrBA,EAAM,KAAK1N,EAAK,WAAW,KAAK,EACzBA,EAAK,WAAW,OACzB,EAEAA,EAAK,WAAW,OAAS,SAAU0N,EAAO,CACpCA,EAAM,MAAM,EAAI,GAClBA,EAAM,KAAK1N,EAAK,WAAW,IAAI,CAEnC,EAaAA,EAAK,WAAW,cAAgBA,EAAK,UAAU,UAE/CA,EAAK,WAAW,QAAU,SAAU0N,EAAO,CACzC,OAAa,CACX,IAAItL,EAAOsL,EAAM,KAAK,EAEtB,GAAItL,GAAQpC,EAAK,WAAW,IAC1B,OAAOA,EAAK,WAAW,OAIzB,GAAIoC,EAAK,WAAW,CAAC,GAAK,GAAI,CAC5BsL,EAAM,gBAAgB,EACtB,QACF,CAEA,GAAItL,GAAQ,IACV,OAAOpC,EAAK,WAAW,SAGzB,GAAIoC,GAAQ,IACV,OAAAsL,EAAM,OAAO,EACTA,EAAM,MAAM,EAAI,GAClBA,EAAM,KAAK1N,EAAK,WAAW,IAAI,EAE1BA,EAAK,WAAW,gBAGzB,GAAIoC,GAAQ,IACV,OAAAsL,EAAM,OAAO,EACTA,EAAM,MAAM,EAAI,GAClBA,EAAM,KAAK1N,EAAK,WAAW,IAAI,EAE1BA,EAAK,WAAW,SAczB,GARIoC,GAAQ,KAAOsL,EAAM,MAAM,IAAM,GAQjCtL,GAAQ,KAAOsL,EAAM,MAAM,IAAM,EACnC,OAAAA,EAAM,KAAK1N,EAAK,WAAW,QAAQ,EAC5BA,EAAK,WAAW,QAGzB,GAAIoC,EAAK,MAAMpC,EAAK,WAAW,aAAa,EAC1C,OAAOA,EAAK,WAAW,OAE3B,CACF,EAEAA,EAAK,YAAc,SAAU4B,EAAKsH,EAAO,CACvC,KAAK,MAAQ,IAAIlJ,EAAK,WAAY4B,CAAG,EACrC,KAAK,MAAQsH,EACb,KAAK,cAAgB,CAAC,EACtB,KAAK,UAAY,CACnB,EAEAlJ,EAAK,YAAY,UAAU,MAAQ,UAAY,CAC7C,KAAK,MAAM,IAAI,EACf,KAAK,QAAU,KAAK,MAAM,QAI1B,QAFIsN,EAAQtN,EAAK,YAAY,YAEtBsN,GACLA,EAAQA,EAAM,IAAI,EAGpB,OAAO,KAAK,KACd,EAEAtN,EAAK,YAAY,UAAU,WAAa,UAAY,CAClD,OAAO,KAAK,QAAQ,KAAK,UAC3B,EAEAA,EAAK,YAAY,UAAU,cAAgB,UAAY,CACrD,IAAI2N,EAAS,KAAK,WAAW,EAC7B,YAAK,WAAa,EACXA,CACT,EAEA3N,EAAK,YAAY,UAAU,WAAa,UAAY,CAClD,IAAI4N,EAAkB,KAAK,cAC3B,KAAK,MAAM,OAAOA,CAAe,EACjC,KAAK,cAAgB,CAAC,CACxB,EAEA5N,EAAK,YAAY,YAAc,SAAUmJ,EAAQ,CAC/C,IAAIwE,EAASxE,EAAO,WAAW,EAE/B,GAAIwE,GAAU,KAId,OAAQA,EAAO,KAAM,CACnB,KAAK3N,EAAK,WAAW,SACnB,OAAOA,EAAK,YAAY,cAC1B,KAAKA,EAAK,WAAW,MACnB,OAAOA,EAAK,YAAY,WAC1B,KAAKA,EAAK,WAAW,KACnB,OAAOA,EAAK,YAAY,UAC1B,QACE,IAAI6N,EAAe,4CAA8CF,EAAO,KAExE,MAAIA,EAAO,IAAI,QAAU,IACvBE,GAAgB,gBAAkBF,EAAO,IAAM,KAG3C,IAAI3N,EAAK,gBAAiB6N,EAAcF,EAAO,MAAOA,EAAO,GAAG,CAC1E,CACF,EAEA3N,EAAK,YAAY,cAAgB,SAAUmJ,EAAQ,CACjD,IAAIwE,EAASxE,EAAO,cAAc,EAElC,GAAIwE,GAAU,KAId,QAAQA,EAAO,IAAK,CAClB,IAAK,IACHxE,EAAO,cAAc,SAAWnJ,EAAK,MAAM,SAAS,WACpD,MACF,IAAK,IACHmJ,EAAO,cAAc,SAAWnJ,EAAK,MAAM,SAAS,SACpD,MACF,QACE,IAAI6N,EAAe,kCAAoCF,EAAO,IAAM,IACpE,MAAM,IAAI3N,EAAK,gBAAiB6N,EAAcF,EAAO,MAAOA,EAAO,GAAG,CAC1E,CAEA,IAAIG,EAAa3E,EAAO,WAAW,EAEnC,GAAI2E,GAAc,KAAW,CAC3B,IAAID,EAAe,yCACnB,MAAM,IAAI7N,EAAK,gBAAiB6N,EAAcF,EAAO,MAAOA,EAAO,GAAG,CACxE,CAEA,OAAQG,EAAW,KAAM,CACvB,KAAK9N,EAAK,WAAW,MACnB,OAAOA,EAAK,YAAY,WAC1B,KAAKA,EAAK,WAAW,KACnB,OAAOA,EAAK,YAAY,UAC1B,QACE,IAAI6N,EAAe,mCAAqCC,EAAW,KAAO,IAC1E,MAAM,IAAI9N,EAAK,gBAAiB6N,EAAcC,EAAW,MAAOA,EAAW,GAAG,CAClF,EACF,EAEA9N,EAAK,YAAY,WAAa,SAAUmJ,EAAQ,CAC9C,IAAIwE,EAASxE,EAAO,cAAc,EAElC,GAAIwE,GAAU,KAId,IAAIxE,EAAO,MAAM,UAAU,QAAQwE,EAAO,GAAG,GAAK,GAAI,CACpD,IAAII,EAAiB5E,EAAO,MAAM,UAAU,IAAI,SAAU6E,EAAG,CAAE,MAAO,IAAMA,EAAI,GAAI,CAAC,EAAE,KAAK,IAAI,EAC5FH,EAAe,uBAAyBF,EAAO,IAAM,uBAAyBI,EAElF,MAAM,IAAI/N,EAAK,gBAAiB6N,EAAcF,EAAO,MAAOA,EAAO,GAAG,CACxE,CAEAxE,EAAO,cAAc,OAAS,CAACwE,EAAO,GAAG,EAEzC,IAAIG,EAAa3E,EAAO,WAAW,EAEnC,GAAI2E,GAAc,KAAW,CAC3B,IAAID,EAAe,gCACnB,MAAM,IAAI7N,EAAK,gBAAiB6N,EAAcF,EAAO,MAAOA,EAAO,GAAG,CACxE,CAEA,OAAQG,EAAW,KAAM,CACvB,KAAK9N,EAAK,WAAW,KACnB,OAAOA,EAAK,YAAY,UAC1B,QACE,IAAI6N,EAAe,0BAA4BC,EAAW,KAAO,IACjE,MAAM,IAAI9N,EAAK,gBAAiB6N,EAAcC,EAAW,MAAOA,EAAW,GAAG,CAClF,EACF,EAEA9N,EAAK,YAAY,UAAY,SAAUmJ,EAAQ,CAC7C,IAAIwE,EAASxE,EAAO,cAAc,EAElC,GAAIwE,GAAU,KAId,CAAAxE,EAAO,cAAc,KAAOwE,EAAO,IAAI,YAAY,EAE/CA,EAAO,IAAI,QAAQ,GAAG,GAAK,KAC7BxE,EAAO,cAAc,YAAc,IAGrC,IAAI2E,EAAa3E,EAAO,WAAW,EAEnC,GAAI2E,GAAc,KAAW,CAC3B3E,EAAO,WAAW,EAClB,MACF,CAEA,OAAQ2E,EAAW,KAAM,CACvB,KAAK9N,EAAK,WAAW,KACnB,OAAAmJ,EAAO,WAAW,EACXnJ,EAAK,YAAY,UAC1B,KAAKA,EAAK,WAAW,MACnB,OAAAmJ,EAAO,WAAW,EACXnJ,EAAK,YAAY,WAC1B,KAAKA,EAAK,WAAW,cACnB,OAAOA,EAAK,YAAY,kBAC1B,KAAKA,EAAK,WAAW,MACnB,OAAOA,EAAK,YAAY,WAC1B,KAAKA,EAAK,WAAW,SACnB,OAAAmJ,EAAO,WAAW,EACXnJ,EAAK,YAAY,cAC1B,QACE,IAAI6N,EAAe,2BAA6BC,EAAW,KAAO,IAClE,MAAM,IAAI9N,EAAK,gBAAiB6N,EAAcC,EAAW,MAAOA,EAAW,GAAG,CAClF,EACF,EAEA9N,EAAK,YAAY,kBAAoB,SAAUmJ,EAAQ,CACrD,IAAIwE,EAASxE,EAAO,cAAc,EAElC,GAAIwE,GAAU,KAId,KAAIxG,EAAe,SAASwG,EAAO,IAAK,EAAE,EAE1C,GAAI,MAAMxG,CAAY,EAAG,CACvB,IAAI0G,EAAe,gCACnB,MAAM,IAAI7N,EAAK,gBAAiB6N,EAAcF,EAAO,MAAOA,EAAO,GAAG,CACxE,CAEAxE,EAAO,cAAc,aAAehC,EAEpC,IAAI2G,EAAa3E,EAAO,WAAW,EAEnC,GAAI2E,GAAc,KAAW,CAC3B3E,EAAO,WAAW,EAClB,MACF,CAEA,OAAQ2E,EAAW,KAAM,CACvB,KAAK9N,EAAK,WAAW,KACnB,OAAAmJ,EAAO,WAAW,EACXnJ,EAAK,YAAY,UAC1B,KAAKA,EAAK,WAAW,MACnB,OAAAmJ,EAAO,WAAW,EACXnJ,EAAK,YAAY,WAC1B,KAAKA,EAAK,WAAW,cACnB,OAAOA,EAAK,YAAY,kBAC1B,KAAKA,EAAK,WAAW,MACnB,OAAOA,EAAK,YAAY,WAC1B,KAAKA,EAAK,WAAW,SACnB,OAAAmJ,EAAO,WAAW,EACXnJ,EAAK,YAAY,cAC1B,QACE,IAAI6N,EAAe,2BAA6BC,EAAW,KAAO,IAClE,MAAM,IAAI9N,EAAK,gBAAiB6N,EAAcC,EAAW,MAAOA,EAAW,GAAG,CAClF,EACF,EAEA9N,EAAK,YAAY,WAAa,SAAUmJ,EAAQ,CAC9C,IAAIwE,EAASxE,EAAO,cAAc,EAElC,GAAIwE,GAAU,KAId,KAAIM,EAAQ,SAASN,EAAO,IAAK,EAAE,EAEnC,GAAI,MAAMM,CAAK,EAAG,CAChB,IAAIJ,EAAe,wBACnB,MAAM,IAAI7N,EAAK,gBAAiB6N,EAAcF,EAAO,MAAOA,EAAO,GAAG,CACxE,CAEAxE,EAAO,cAAc,MAAQ8E,EAE7B,IAAIH,EAAa3E,EAAO,WAAW,EAEnC,GAAI2E,GAAc,KAAW,CAC3B3E,EAAO,WAAW,EAClB,MACF,CAEA,OAAQ2E,EAAW,KAAM,CACvB,KAAK9N,EAAK,WAAW,KACnB,OAAAmJ,EAAO,WAAW,EACXnJ,EAAK,YAAY,UAC1B,KAAKA,EAAK,WAAW,MACnB,OAAAmJ,EAAO,WAAW,EACXnJ,EAAK,YAAY,WAC1B,KAAKA,EAAK,WAAW,cACnB,OAAOA,EAAK,YAAY,kBAC1B,KAAKA,EAAK,WAAW,MACnB,OAAOA,EAAK,YAAY,WAC1B,KAAKA,EAAK,WAAW,SACnB,OAAAmJ,EAAO,WAAW,EACXnJ,EAAK,YAAY,cAC1B,QACE,IAAI6N,EAAe,2BAA6BC,EAAW,KAAO,IAClE,MAAM,IAAI9N,EAAK,gBAAiB6N,EAAcC,EAAW,MAAOA,EAAW,GAAG,CAClF,EACF,EAMI,SAAU1G,EAAM8G,EAAS,CACrB,OAAO,QAAW,YAAc,OAAO,IAEzC,OAAOA,CAAO,EACL,OAAOpO,IAAY,SAM5BC,GAAO,QAAUmO,EAAQ,EAGzB9G,EAAK,KAAO8G,EAAQ,CAExB,EAAE,KAAM,UAAY,CAMlB,OAAOlO,CACT,CAAC,CACH,GAAG,ICl5GH,IAAAmO,EAAAC,EAAA,CAAAC,GAAAC,KAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAeA,IAAIC,GAAkB,UAOtBD,GAAO,QAAUE,GAUjB,SAASA,GAAWC,EAAQ,CAC1B,IAAIC,EAAM,GAAKD,EACXE,EAAQJ,GAAgB,KAAKG,CAAG,EAEpC,GAAI,CAACC,EACH,OAAOD,EAGT,IAAIE,EACAC,EAAO,GACPC,EAAQ,EACRC,EAAY,EAEhB,IAAKD,EAAQH,EAAM,MAAOG,EAAQJ,EAAI,OAAQI,IAAS,CACrD,OAAQJ,EAAI,WAAWI,CAAK,EAAG,CAC7B,IAAK,IACHF,EAAS,SACT,MACF,IAAK,IACHA,EAAS,QACT,MACF,IAAK,IACHA,EAAS,QACT,MACF,IAAK,IACHA,EAAS,OACT,MACF,IAAK,IACHA,EAAS,OACT,MACF,QACE,QACJ,CAEIG,IAAcD,IAChBD,GAAQH,EAAI,UAAUK,EAAWD,CAAK,GAGxCC,EAAYD,EAAQ,EACpBD,GAAQD,CACV,CAEA,OAAOG,IAAcD,EACjBD,EAAOH,EAAI,UAAUK,EAAWD,CAAK,EACrCD,CACN,ICvDA,IAAAG,GAAiB,QCKZ,OAAO,UACV,OAAO,QAAU,SAAUC,EAAa,CACtC,IAAMC,EAA2B,CAAC,EAClC,QAAWC,KAAO,OAAO,KAAKF,CAAG,EAE/BC,EAAK,KAAK,CAACC,EAAKF,EAAIE,EAAI,CAAC,EAG3B,OAAOD,CACT,GAGG,OAAO,SACV,OAAO,OAAS,SAAUD,EAAa,CACrC,IAAMC,EAAiB,CAAC,EACxB,QAAWC,KAAO,OAAO,KAAKF,CAAG,EAE/BC,EAAK,KAAKD,EAAIE,EAAI,EAGpB,OAAOD,CACT,GAKE,OAAO,SAAY,cAGhB,QAAQ,UAAU,WACrB,QAAQ,UAAU,SAAW,SAC3BE,EAA8BC,EACxB,CACF,OAAOD,GAAM,UACf,KAAK,WAAaA,EAAE,KACpB,KAAK,UAAYA,EAAE,MAEnB,KAAK,WAAaA,EAClB,KAAK,UAAYC,EAErB,GAGG,QAAQ,UAAU,cACrB,QAAQ,UAAU,YAAc,YAC3BC,EACG,CACN,IAAMC,EAAS,KAAK,WACpB,GAAIA,EAAQ,CACND,EAAM,SAAW,GACnBC,EAAO,YAAY,IAAI,EAGzB,QAASC,EAAIF,EAAM,OAAS,EAAGE,GAAK,EAAGA,IAAK,CAC1C,IAAIC,EAAOH,EAAME,GACb,OAAOC,GAAS,SAClBA,EAAO,SAAS,eAAeA,CAAI,EAC5BA,EAAK,YACZA,EAAK,WAAW,YAAYA,CAAI,EAG7BD,EAGHD,EAAO,aAAa,KAAK,gBAAkBE,CAAI,EAF/CF,EAAO,aAAaE,EAAM,IAAI,CAGlC,CACF,CACF,ICxEJ,IAAAC,GAAuB,OAiChB,SAASC,GACdC,EACmB,CACnB,IAAMC,EAAY,IAAI,IAChBC,EAAY,IAAI,IACtB,QAAWC,KAAOH,EAAM,CACtB,GAAM,CAACI,EAAMC,CAAI,EAAIF,EAAI,SAAS,MAAM,GAAG,EAGrCG,EAAWH,EAAI,SACfI,EAAWJ,EAAI,MACfK,EAAWL,EAAI,KAGfM,KAAO,GAAAC,SAAWP,EAAI,IAAI,EAC7B,QAAQ,mBAAoB,EAAE,EAC9B,QAAQ,OAAQ,GAAG,EAGtB,GAAIE,EAAM,CACR,IAAMM,EAASV,EAAU,IAAIG,CAAI,EAG5BF,EAAQ,IAAIS,CAAM,EASrBV,EAAU,IAAIK,EAAU,CACtB,SAAAA,EACA,MAAAC,EACA,KAAAE,EACA,OAAAE,CACF,CAAC,GAbDA,EAAO,MAAQR,EAAI,MACnBQ,EAAO,KAAQF,EAGfP,EAAQ,IAAIS,CAAM,EAatB,MACEV,EAAU,IAAIK,EAAUM,EAAA,CACtB,SAAAN,EACA,MAAAC,EACA,KAAAE,GACGD,GAAQ,CAAE,KAAAA,CAAK,EACnB,CAEL,CACA,OAAOP,CACT,CCpFA,IAAAY,GAAuB,OAsChB,SAASC,GACdC,EAA2BC,EACD,CAC1B,IAAMC,EAAY,IAAI,OAAOF,EAAO,UAAW,KAAK,EAC9CG,EAAY,CAACC,EAAYC,EAAcC,IACpC,GAAGD,4BAA+BC,WAI3C,OAAQC,GAAkB,CACxBA,EAAQA,EACL,QAAQ,gBAAiB,GAAG,EAC5B,KAAK,EAGR,IAAMC,EAAQ,IAAI,OAAO,MAAMR,EAAO,cACpCO,EACG,QAAQ,uBAAwB,MAAM,EACtC,QAAQL,EAAW,GAAG,KACtB,KAAK,EAGV,OAAOO,IACLR,KACI,GAAAS,SAAWD,CAAK,EAChBA,GAED,QAAQD,EAAOL,CAAS,EACxB,QAAQ,8BAA+B,IAAI,CAClD,CACF,CCtCO,SAASQ,GACdC,EACqB,CACrB,IAAMC,EAAS,IAAK,KAAa,MAAM,CAAC,QAAS,MAAM,CAAC,EAIxD,OAHe,IAAK,KAAa,YAAYD,EAAOC,CAAK,EAGlD,MAAM,EACNA,EAAM,OACf,CAUO,SAASC,GACdD,EAA4BE,EACV,CAzEpB,IAAAC,EA0EE,IAAMC,EAAU,IAAI,IAAuBJ,CAAK,EAG1CK,EAA2B,CAAC,EAClC,QAASC,EAAI,EAAGA,EAAIJ,EAAM,OAAQI,IAChC,QAAWC,KAAUH,EACfF,EAAMI,GAAG,WAAWC,EAAO,IAAI,IACjCF,EAAOE,EAAO,MAAQ,GACtBH,EAAQ,OAAOG,CAAM,GAI3B,QAAWA,KAAUH,GACfD,EAAA,KAAK,iBAAL,MAAAA,EAAA,UAAsBI,EAAO,QAC/BF,EAAOE,EAAO,MAAQ,IAG1B,OAAOF,CACT,CC2BA,SAASG,GAAWC,EAAaC,EAAuB,CACtD,GAAM,CAACC,EAAGC,CAAC,EAAI,CAAC,IAAI,IAAIH,CAAC,EAAG,IAAI,IAAIC,CAAC,CAAC,EACtC,MAAO,CACL,GAAG,IAAI,IAAI,CAAC,GAAGC,CAAC,EAAE,OAAOE,GAAS,CAACD,EAAE,IAAIC,CAAK,CAAC,CAAC,CAClD,CACF,CASO,IAAMC,EAAN,KAAa,CAgCX,YAAY,CAAE,OAAAC,EAAQ,KAAAC,EAAM,QAAAC,CAAQ,EAAgB,CACzD,KAAK,QAAUA,EAGf,KAAK,UAAYC,GAAuBF,CAAI,EAC5C,KAAK,UAAYG,GAAuBJ,EAAQ,EAAK,EAGrD,KAAK,UAAU,UAAY,IAAI,OAAOA,EAAO,SAAS,EAGtD,KAAK,MAAQ,KAAK,UAAY,CAGxBA,EAAO,KAAK,SAAW,GAAKA,EAAO,KAAK,KAAO,KACjD,KAAK,IAAK,KAAaA,EAAO,KAAK,GAAG,EAC7BA,EAAO,KAAK,OAAS,GAC9B,KAAK,IAAK,KAAa,cAAc,GAAGA,EAAO,IAAI,CAAC,EAItD,IAAMK,EAAMZ,GAAW,CACrB,UAAW,iBAAkB,SAC/B,EAAGS,EAAQ,QAAQ,EAGnB,QAAWI,KAAQN,EAAO,KAAK,IAAIO,GACjCA,IAAa,KAAO,KAAQ,KAAaA,EAC1C,EACC,QAAWC,KAAMH,EACf,KAAK,SAAS,OAAOC,EAAKE,EAAG,EAC7B,KAAK,eAAe,OAAOF,EAAKE,EAAG,EAKvC,KAAK,IAAI,UAAU,EAGnB,KAAK,MAAM,QAAS,CAAE,MAAO,GAAI,CAAC,EAClC,KAAK,MAAM,MAAM,EACjB,KAAK,MAAM,OAAQ,CAAE,MAAO,IAAK,UAAWC,GAAO,CACjD,GAAM,CAAE,KAAAC,EAAO,CAAC,CAAE,EAAID,EACtB,OAAOC,EAAK,OAAO,CAACC,EAAMC,IAAQ,CAChC,GAAGD,EACH,GAAG,KAAK,UAAUC,CAAG,CACvB,EAAG,CAAC,CAAiB,CACvB,CAAE,CAAC,EAGH,QAAWH,KAAOR,EAChB,KAAK,IAAIQ,EAAK,CAAE,MAAOA,EAAI,KAAM,CAAC,CACtC,CAAC,CACH,CAkBO,OAAOI,EAA6B,CACzC,GAAIA,EACF,GAAI,CACF,IAAMC,EAAY,KAAK,UAAUD,CAAK,EAGhCE,EAAUC,GAAiBH,CAAK,EACnC,OAAOI,GACNA,EAAO,WAAa,KAAK,MAAM,SAAS,UACzC,EAGGC,EAAS,KAAK,MAAM,OAAO,GAAGL,IAAQ,EAGzC,OAAyB,CAACM,EAAM,CAAE,IAAAC,EAAK,MAAAC,EAAO,UAAAC,CAAU,IAAM,CAC7D,IAAMC,EAAW,KAAK,UAAU,IAAIH,CAAG,EACvC,GAAI,OAAOG,GAAa,YAAa,CACnC,GAAM,CAAE,SAAAC,EAAU,MAAAC,EAAO,KAAAC,EAAM,KAAAhB,EAAM,OAAAiB,CAAO,EAAIJ,EAG1CK,EAAQC,GACZd,EACA,OAAO,KAAKO,EAAU,QAAQ,CAChC,EAGMQ,EAAQ,CAAC,CAACH,GAAS,CAAC,OAAO,OAAOC,CAAK,EAAE,MAAMG,GAAKA,CAAC,EAC3DZ,EAAK,KAAKa,EAAAC,EAAA,CACR,SAAAT,EACA,MAAOV,EAAUW,CAAK,EACtB,KAAOX,EAAUY,CAAI,GAClBhB,GAAQ,CAAE,KAAMA,EAAK,IAAII,CAAS,CAAE,GAJ/B,CAKR,MAAOO,GAAS,EAAIS,GACpB,MAAAF,CACF,EAAC,CACH,CACA,OAAOT,CACT,EAAG,CAAC,CAAC,EAGJ,KAAK,CAACzB,EAAGC,IAAMA,EAAE,MAAQD,EAAE,KAAK,EAGhC,OAAO,CAACwC,EAAOC,IAAW,CACzB,IAAMZ,EAAW,KAAK,UAAU,IAAIY,EAAO,QAAQ,EACnD,GAAI,OAAOZ,GAAa,YAAa,CACnC,IAAMH,EAAM,WAAYG,EACpBA,EAAS,OAAQ,SACjBA,EAAS,SACbW,EAAM,IAAId,EAAK,CAAC,GAAGc,EAAM,IAAId,CAAG,GAAK,CAAC,EAAGe,CAAM,CAAC,CAClD,CACA,OAAOD,CACT,EAAG,IAAI,GAA+B,EAGpCE,EACJ,GAAI,KAAK,QAAQ,YAAa,CAC5B,IAAMC,EAAS,KAAK,MAAM,MAAMC,GAAW,CACzC,QAAWrB,KAAUF,EACnBuB,EAAQ,KAAKrB,EAAO,KAAM,CACxB,OAAQ,CAAC,OAAO,EAChB,SAAU,KAAK,MAAM,SAAS,SAC9B,SAAU,KAAK,MAAM,SAAS,QAChC,CAAC,CACL,CAAC,EAGDmB,EAAcC,EAAO,OACjB,OAAO,KAAKA,EAAO,GAAG,UAAU,QAAQ,EACxC,CAAC,CACP,CAGA,OAAOJ,EAAA,CACL,MAAO,CAAC,GAAGf,EAAO,OAAO,CAAC,GACvB,OAAOkB,GAAgB,aAAe,CAAE,YAAAA,CAAY,EAI3D,OAAQG,EAAN,CACA,QAAQ,KAAK,kBAAkB1B,qCAAoC,CACrE,CAIF,MAAO,CAAE,MAAO,CAAC,CAAE,CACrB,CACF,EL3QA,IAAI2B,EAqBJ,SAAeC,GACbC,EACe,QAAAC,EAAA,sBACf,IAAIC,EAAO,UAGX,GAAI,OAAO,QAAW,aAAe,iBAAkB,OAAQ,CAC7D,IAAMC,EAAS,SAAS,cAAiC,aAAa,EAChE,CAACC,CAAI,EAAID,EAAO,IAAI,MAAM,SAAS,EAGzCD,EAAOA,EAAK,QAAQ,KAAME,CAAI,CAChC,CAGA,IAAMC,EAAU,CAAC,EACjB,QAAWC,KAAQN,EAAO,KAAM,CAC9B,OAAQM,EAAM,CAGZ,IAAK,KACHD,EAAQ,KAAK,GAAGH,cAAiB,EACjC,MAGF,IAAK,KACL,IAAK,KACHG,EAAQ,KAAK,GAAGH,cAAiB,EACjC,KACJ,CAGII,IAAS,MACXD,EAAQ,KAAK,GAAGH,cAAiBI,UAAa,CAClD,CAGIN,EAAO,KAAK,OAAS,GACvBK,EAAQ,KAAK,GAAGH,yBAA4B,EAG1CG,EAAQ,SACV,MAAM,cACJ,GAAGH,oCACH,GAAGG,CACL,EACJ,GAaA,SAAsBE,GACpBC,EACwB,QAAAP,EAAA,sBACxB,OAAQO,EAAQ,KAAM,CAGpB,OACE,aAAMT,GAAqBS,EAAQ,KAAK,MAAM,EAC9CV,EAAQ,IAAIW,EAAOD,EAAQ,IAAI,EACxB,CACL,MACF,EAGF,OACE,MAAO,CACL,OACA,KAAMV,EAAQA,EAAM,OAAOU,EAAQ,IAAI,EAAI,CAAE,MAAO,CAAC,CAAE,CACzD,EAGF,QACE,MAAM,IAAI,UAAU,sBAAsB,CAC9C,CACF,GAOA,KAAK,KAAO,GAAAE,QAGZ,iBAAiB,UAAiBC,GAAMV,EAAA,wBACtC,YAAY,MAAMM,GAAQI,EAAG,IAAI,CAAC,CACpC,EAAC", + "names": ["require_lunr", "__commonJSMin", "exports", "module", "lunr", "config", "builder", "global", "message", "obj", "clone", "keys", "key", "val", "docRef", "fieldName", "stringValue", "s", "n", "fieldRef", "elements", "i", "other", "object", "a", "b", "intersection", "element", "posting", "documentCount", "documentsWithTerm", "x", "str", "metadata", "fn", "t", "len", "tokens", "sliceEnd", "sliceStart", "char", "sliceLength", "tokenMetadata", "label", "isRegistered", "serialised", "pipeline", "fnName", "fns", "existingFn", "newFn", "pos", "stackLength", "memo", "j", "result", "k", "token", "index", "start", "end", "pivotPoint", "pivotIndex", "insertIdx", "position", "sumOfSquares", "elementsLength", "otherVector", "dotProduct", "aLen", "bLen", "aVal", "bVal", "output", "step2list", "step3list", "c", "v", "C", "V", "mgr0", "meq1", "mgr1", "s_v", "re_mgr0", "re_mgr1", "re_meq1", "re_s_v", "re_1a", "re2_1a", "re_1b", "re2_1b", "re_1b_2", "re2_1b_2", "re3_1b_2", "re4_1b_2", "re_1c", "re_2", "re_3", "re_4", "re2_4", "re_5", "re_5_1", "re3_5", "porterStemmer", "w", "stem", "suffix", "firstch", "re", "re2", "re3", "re4", "fp", "stopWords", "words", "stopWord", "arr", "clause", "editDistance", "root", "stack", "frame", "noEditNode", "insertionNode", "substitutionNode", "charA", "charB", "transposeNode", "node", "final", "next", "edges", "edge", "labels", "qEdges", "qLen", "nEdges", "nLen", "q", "qEdge", "nEdge", "qNode", "word", "commonPrefix", "nextNode", "downTo", "childKey", "attrs", "queryString", "query", "parser", "matchingFields", "queryVectors", "termFieldCache", "requiredMatches", "prohibitedMatches", "terms", "clauseMatches", "m", "term", "termTokenSet", "expandedTerms", "field", "expandedTerm", "termIndex", "fieldPosting", "matchingDocumentRefs", "termField", "matchingDocumentsSet", "l", "matchingDocumentRef", "matchingFieldRef", "fieldMatch", "allRequiredMatches", "allProhibitedMatches", "matchingFieldRefs", "results", "matches", "fieldVector", "score", "docMatch", "match", "invertedIndex", "fieldVectors", "ref", "serializedIndex", "serializedVectors", "serializedInvertedIndex", "tokenSetBuilder", "tuple", "attributes", "number", "doc", "fields", "extractor", "fieldTerms", "metadataKey", "fieldRefs", "numberOfFields", "accumulator", "documentsWithField", "fieldRefsLength", "termIdfCache", "fieldLength", "termFrequencies", "termsLength", "fieldBoost", "docBoost", "tf", "idf", "scoreWithPrecision", "args", "clonedMetadata", "metadataKeys", "otherMatchData", "allFields", "options", "state", "subSlices", "type", "charCode", "lexer", "lexeme", "completedClause", "errorMessage", "nextLexeme", "possibleFields", "f", "boost", "factory", "require_escape_html", "__commonJSMin", "exports", "module", "matchHtmlRegExp", "escapeHtml", "string", "str", "match", "escape", "html", "index", "lastIndex", "import_lunr", "obj", "data", "key", "x", "y", "nodes", "parent", "i", "node", "import_escape_html", "setupSearchDocumentMap", "docs", "documents", "parents", "doc", "path", "hash", "location", "title", "tags", "text", "escapeHTML", "parent", "__spreadValues", "import_escape_html", "setupSearchHighlighter", "config", "escape", "separator", "highlight", "_", "data", "term", "query", "match", "value", "escapeHTML", "parseSearchQuery", "value", "query", "getSearchQueryTerms", "terms", "_a", "clauses", "result", "t", "clause", "difference", "a", "b", "x", "y", "value", "Search", "config", "docs", "options", "setupSearchDocumentMap", "setupSearchHighlighter", "fns", "lang", "language", "fn", "doc", "tags", "list", "tag", "query", "highlight", "clauses", "parseSearchQuery", "clause", "groups", "item", "ref", "score", "matchData", "document", "location", "title", "text", "parent", "terms", "getSearchQueryTerms", "boost", "t", "__spreadProps", "__spreadValues", "items", "result", "suggestions", "titles", "builder", "e", "index", "setupSearchLanguages", "config", "__async", "base", "worker", "path", "scripts", "lang", "handler", "message", "Search", "lunr", "ev"] +} diff --git a/assets/logo.svg b/assets/logo.svg new file mode 100644 index 00000000..103b603c --- /dev/null +++ b/assets/logo.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/assets/stylesheets/main.20d9efc8.min.css b/assets/stylesheets/main.20d9efc8.min.css new file mode 100644 index 00000000..d1d3d5ec --- /dev/null +++ b/assets/stylesheets/main.20d9efc8.min.css @@ -0,0 +1 @@ +@charset "UTF-8";html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;-ms-text-size-adjust:none;text-size-adjust:none;box-sizing:border-box}*,:after,:before{box-sizing:inherit}@media (prefers-reduced-motion){*,:after,:before{transition:none!important}}body{margin:0}a,button,input,label{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}hr{border:0;box-sizing:initial;display:block;height:.05rem;overflow:visible;padding:0}small{font-size:80%}sub,sup{line-height:1em}img{border-style:none}table{border-collapse:initial;border-spacing:0}td,th{font-weight:400;vertical-align:top}button{background:transparent;border:0;font-family:inherit;font-size:inherit;margin:0;padding:0}input{border:0;outline:none}:root,[data-md-color-scheme=default]{--md-default-fg-color:rgba(0,0,0,.87);--md-default-fg-color--light:rgba(0,0,0,.54);--md-default-fg-color--lighter:rgba(0,0,0,.32);--md-default-fg-color--lightest:rgba(0,0,0,.07);--md-default-bg-color:#fff;--md-default-bg-color--light:hsla(0,0%,100%,.7);--md-default-bg-color--lighter:hsla(0,0%,100%,.3);--md-default-bg-color--lightest:hsla(0,0%,100%,.12);--md-primary-fg-color:#4051b5;--md-primary-fg-color--light:#5d6cc0;--md-primary-fg-color--dark:#303fa1;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7);--md-accent-fg-color:#526cfe;--md-accent-fg-color--transparent:rgba(82,108,254,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7);--md-code-fg-color:#36464e;--md-code-bg-color:#f5f5f5;--md-code-hl-color:rgba(255,255,0,.5);--md-code-hl-number-color:#d52a2a;--md-code-hl-special-color:#db1457;--md-code-hl-function-color:#a846b9;--md-code-hl-constant-color:#6e59d9;--md-code-hl-keyword-color:#3f6ec6;--md-code-hl-string-color:#1c7d4d;--md-code-hl-name-color:var(--md-code-fg-color);--md-code-hl-operator-color:var(--md-default-fg-color--light);--md-code-hl-punctuation-color:var(--md-default-fg-color--light);--md-code-hl-comment-color:var(--md-default-fg-color--light);--md-code-hl-generic-color:var(--md-default-fg-color--light);--md-code-hl-variable-color:var(--md-default-fg-color--light);--md-typeset-color:var(--md-default-fg-color);--md-typeset-a-color:var(--md-primary-fg-color);--md-typeset-mark-color:rgba(255,255,0,.5);--md-typeset-del-color:rgba(245,80,61,.15);--md-typeset-ins-color:rgba(11,213,112,.15);--md-typeset-kbd-color:#fafafa;--md-typeset-kbd-accent-color:#fff;--md-typeset-kbd-border-color:#b8b8b8;--md-typeset-table-color:rgba(0,0,0,.12);--md-admonition-fg-color:var(--md-default-fg-color);--md-admonition-bg-color:var(--md-default-bg-color);--md-footer-fg-color:#fff;--md-footer-fg-color--light:hsla(0,0%,100%,.7);--md-footer-fg-color--lighter:hsla(0,0%,100%,.3);--md-footer-bg-color:rgba(0,0,0,.87);--md-footer-bg-color--dark:rgba(0,0,0,.32);--md-shadow-z1:0 0.2rem 0.5rem rgba(0,0,0,.05),0 0 0.05rem rgba(0,0,0,.1);--md-shadow-z2:0 0.2rem 0.5rem rgba(0,0,0,.1),0 0 0.05rem rgba(0,0,0,.25);--md-shadow-z3:0 0.2rem 0.5rem rgba(0,0,0,.2),0 0 0.05rem rgba(0,0,0,.35)}.md-icon svg{fill:currentcolor;display:block;height:1.2rem;width:1.2rem}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--md-text-font-family:var(--md-text-font,_),-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif;--md-code-font-family:var(--md-code-font,_),SFMono-Regular,Consolas,Menlo,monospace}body,input{font-feature-settings:"kern","liga";font-family:var(--md-text-font-family)}body,code,input,kbd,pre{color:var(--md-typeset-color)}code,kbd,pre{font-feature-settings:"kern";font-family:var(--md-code-font-family)}:root{--md-typeset-table-sort-icon:url('data:image/svg+xml;charset=utf-8,');--md-typeset-table-sort-icon--asc:url('data:image/svg+xml;charset=utf-8,');--md-typeset-table-sort-icon--desc:url('data:image/svg+xml;charset=utf-8,')}.md-typeset{-webkit-print-color-adjust:exact;color-adjust:exact;font-size:.8rem;line-height:1.6}@media print{.md-typeset{font-size:.68rem}}.md-typeset blockquote,.md-typeset dl,.md-typeset figure,.md-typeset ol,.md-typeset pre,.md-typeset ul{margin-bottom:1em;margin-top:1em}.md-typeset h1{color:var(--md-default-fg-color--light);font-size:2em;line-height:1.3;margin:0 0 1.25em}.md-typeset h1,.md-typeset h2{font-weight:300;letter-spacing:-.01em}.md-typeset h2{font-size:1.5625em;line-height:1.4;margin:1.6em 0 .64em}.md-typeset h3{font-size:1.25em;font-weight:400;letter-spacing:-.01em;line-height:1.5;margin:1.6em 0 .8em}.md-typeset h2+h3{margin-top:.8em}.md-typeset h4{font-weight:700;letter-spacing:-.01em;margin:1em 0}.md-typeset h5,.md-typeset h6{color:var(--md-default-fg-color--light);font-size:.8em;font-weight:700;letter-spacing:-.01em;margin:1.25em 0}.md-typeset h5{text-transform:uppercase}.md-typeset hr{border-bottom:.05rem solid var(--md-default-fg-color--lightest);display:flow-root;margin:1.5em 0}.md-typeset a{color:var(--md-typeset-a-color);word-break:break-word}.md-typeset a,.md-typeset a:before{transition:color 125ms}.md-typeset a:focus,.md-typeset a:hover{color:var(--md-accent-fg-color)}.md-typeset a:focus code,.md-typeset a:hover code{background-color:var(--md-accent-fg-color--transparent)}.md-typeset a code{color:currentcolor;transition:background-color 125ms}.md-typeset a.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset code,.md-typeset kbd,.md-typeset pre{color:var(--md-code-fg-color);direction:ltr;font-variant-ligatures:none}@media print{.md-typeset code,.md-typeset kbd,.md-typeset pre{white-space:pre-wrap}}.md-typeset code{background-color:var(--md-code-bg-color);border-radius:.1rem;-webkit-box-decoration-break:clone;box-decoration-break:clone;font-size:.85em;padding:0 .2941176471em;word-break:break-word}.md-typeset code:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-typeset pre{display:flow-root;line-height:1.4;position:relative}.md-typeset pre>code{-webkit-box-decoration-break:slice;box-decoration-break:slice;box-shadow:none;display:block;margin:0;outline-color:var(--md-accent-fg-color);overflow:auto;padding:.7720588235em 1.1764705882em;scrollbar-color:var(--md-default-fg-color--lighter) transparent;scrollbar-width:thin;touch-action:auto;word-break:normal}.md-typeset pre>code:hover{scrollbar-color:var(--md-accent-fg-color) transparent}.md-typeset pre>code::-webkit-scrollbar{height:.2rem;width:.2rem}.md-typeset pre>code::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-typeset pre>code::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.md-typeset kbd{background-color:var(--md-typeset-kbd-color);border-radius:.1rem;box-shadow:0 .1rem 0 .05rem var(--md-typeset-kbd-border-color),0 .1rem 0 var(--md-typeset-kbd-border-color),0 -.1rem .2rem var(--md-typeset-kbd-accent-color) inset;color:var(--md-default-fg-color);display:inline-block;font-size:.75em;padding:0 .6666666667em;vertical-align:text-top;word-break:break-word}.md-typeset mark{background-color:var(--md-typeset-mark-color);-webkit-box-decoration-break:clone;box-decoration-break:clone;color:inherit;word-break:break-word}.md-typeset abbr{border-bottom:.05rem dotted var(--md-default-fg-color--light);cursor:help;text-decoration:none}@media (hover:none){.md-typeset abbr{position:relative}.md-typeset abbr[title]:-webkit-any(:focus,:hover):after{background-color:var(--md-default-fg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z3);color:var(--md-default-bg-color);content:attr(title);display:inline-block;font-size:.7rem;margin-top:2em;max-width:80%;min-width:-webkit-max-content;min-width:max-content;padding:.2rem .3rem;position:absolute;width:auto}.md-typeset abbr[title]:-moz-any(:focus,:hover):after{background-color:var(--md-default-fg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z3);color:var(--md-default-bg-color);content:attr(title);display:inline-block;font-size:.7rem;margin-top:2em;max-width:80%;min-width:-moz-max-content;min-width:max-content;padding:.2rem .3rem;position:absolute;width:auto}[dir=ltr] .md-typeset abbr[title]:-webkit-any(:focus,:hover):after{left:0}[dir=ltr] .md-typeset abbr[title]:-moz-any(:focus,:hover):after{left:0}[dir=ltr] .md-typeset abbr[title]:is(:focus,:hover):after{left:0}[dir=rtl] .md-typeset abbr[title]:-webkit-any(:focus,:hover):after{right:0}[dir=rtl] .md-typeset abbr[title]:-moz-any(:focus,:hover):after{right:0}[dir=rtl] .md-typeset abbr[title]:is(:focus,:hover):after{right:0}.md-typeset abbr[title]:is(:focus,:hover):after{background-color:var(--md-default-fg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z3);color:var(--md-default-bg-color);content:attr(title);display:inline-block;font-size:.7rem;margin-top:2em;max-width:80%;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;padding:.2rem .3rem;position:absolute;width:auto}}.md-typeset small{opacity:.75}[dir=ltr] .md-typeset sub,[dir=ltr] .md-typeset sup{margin-left:.078125em}[dir=rtl] .md-typeset sub,[dir=rtl] .md-typeset sup{margin-right:.078125em}[dir=ltr] .md-typeset blockquote{padding-left:.6rem}[dir=rtl] .md-typeset blockquote{padding-right:.6rem}[dir=ltr] .md-typeset blockquote{border-left:.2rem solid var(--md-default-fg-color--lighter)}[dir=rtl] .md-typeset blockquote{border-right:.2rem solid var(--md-default-fg-color--lighter)}.md-typeset blockquote{color:var(--md-default-fg-color--light);margin-left:0;margin-right:0}.md-typeset ul{list-style-type:disc}[dir=ltr] .md-typeset ol,[dir=ltr] .md-typeset ul{margin-left:.625em}[dir=rtl] .md-typeset ol,[dir=rtl] .md-typeset ul{margin-right:.625em}.md-typeset ol,.md-typeset ul{padding:0}.md-typeset ol:not([hidden]),.md-typeset ul:not([hidden]){display:flow-root}.md-typeset ol ol,.md-typeset ul ol{list-style-type:lower-alpha}.md-typeset ol ol ol,.md-typeset ul ol ol{list-style-type:lower-roman}[dir=ltr] .md-typeset ol li,[dir=ltr] .md-typeset ul li{margin-left:1.25em}[dir=rtl] .md-typeset ol li,[dir=rtl] .md-typeset ul li{margin-right:1.25em}.md-typeset ol li,.md-typeset ul li{margin-bottom:.5em}.md-typeset ol li blockquote,.md-typeset ol li p,.md-typeset ul li blockquote,.md-typeset ul li p{margin:.5em 0}.md-typeset ol li:last-child,.md-typeset ul li:last-child{margin-bottom:0}.md-typeset ol li :-webkit-any(ul,ol),.md-typeset ul li :-webkit-any(ul,ol){margin-bottom:.5em;margin-top:.5em}.md-typeset ol li :-moz-any(ul,ol),.md-typeset ul li :-moz-any(ul,ol){margin-bottom:.5em;margin-top:.5em}[dir=ltr] .md-typeset ol li :-webkit-any(ul,ol),[dir=ltr] .md-typeset ul li :-webkit-any(ul,ol){margin-left:.625em}[dir=ltr] .md-typeset ol li :-moz-any(ul,ol),[dir=ltr] .md-typeset ul li :-moz-any(ul,ol){margin-left:.625em}[dir=ltr] .md-typeset ol li :is(ul,ol),[dir=ltr] .md-typeset ul li :is(ul,ol){margin-left:.625em}[dir=rtl] .md-typeset ol li :-webkit-any(ul,ol),[dir=rtl] .md-typeset ul li :-webkit-any(ul,ol){margin-right:.625em}[dir=rtl] .md-typeset ol li :-moz-any(ul,ol),[dir=rtl] .md-typeset ul li :-moz-any(ul,ol){margin-right:.625em}[dir=rtl] .md-typeset ol li :is(ul,ol),[dir=rtl] .md-typeset ul li :is(ul,ol){margin-right:.625em}.md-typeset ol li :is(ul,ol),.md-typeset ul li :is(ul,ol){margin-bottom:.5em;margin-top:.5em}[dir=ltr] .md-typeset dd{margin-left:1.875em}[dir=rtl] .md-typeset dd{margin-right:1.875em}.md-typeset dd{margin-bottom:1.5em;margin-top:1em}.md-typeset img,.md-typeset svg,.md-typeset video{height:auto;max-width:100%}.md-typeset img[align=left]{margin:1em 1em 1em 0}.md-typeset img[align=right]{margin:1em 0 1em 1em}.md-typeset img[align]:only-child{margin-top:0}.md-typeset img[src$="#gh-dark-mode-only"],.md-typeset img[src$="#only-dark"]{display:none}.md-typeset figure{display:flow-root;margin:1em auto;max-width:100%;text-align:center;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.md-typeset figure img{display:block}.md-typeset figcaption{font-style:italic;margin:1em auto;max-width:24rem}.md-typeset iframe{max-width:100%}.md-typeset table:not([class]){background-color:var(--md-default-bg-color);border:.05rem solid var(--md-typeset-table-color);border-radius:.1rem;display:inline-block;font-size:.64rem;max-width:100%;overflow:auto;touch-action:auto}@media print{.md-typeset table:not([class]){display:table}}.md-typeset table:not([class])+*{margin-top:1.5em}.md-typeset table:not([class]) :-webkit-any(th,td)>:first-child{margin-top:0}.md-typeset table:not([class]) :-moz-any(th,td)>:first-child{margin-top:0}.md-typeset table:not([class]) :is(th,td)>:first-child{margin-top:0}.md-typeset table:not([class]) :-webkit-any(th,td)>:last-child{margin-bottom:0}.md-typeset table:not([class]) :-moz-any(th,td)>:last-child{margin-bottom:0}.md-typeset table:not([class]) :is(th,td)>:last-child{margin-bottom:0}.md-typeset table:not([class]) :-webkit-any(th,td):not([align]){text-align:left}.md-typeset table:not([class]) :-moz-any(th,td):not([align]){text-align:left}.md-typeset table:not([class]) :is(th,td):not([align]){text-align:left}[dir=rtl] .md-typeset table:not([class]) :-webkit-any(th,td):not([align]){text-align:right}[dir=rtl] .md-typeset table:not([class]) :-moz-any(th,td):not([align]){text-align:right}[dir=rtl] .md-typeset table:not([class]) :is(th,td):not([align]){text-align:right}.md-typeset table:not([class]) th{font-weight:700;min-width:5rem;padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) td{border-top:.05rem solid var(--md-typeset-table-color);padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) tbody tr{transition:background-color 125ms}.md-typeset table:not([class]) tbody tr:hover{background-color:rgba(0,0,0,.035);box-shadow:0 .05rem 0 var(--md-default-bg-color) inset}.md-typeset table:not([class]) a{word-break:normal}.md-typeset table th[role=columnheader]{cursor:pointer}[dir=ltr] .md-typeset table th[role=columnheader]:after{margin-left:.5em}[dir=rtl] .md-typeset table th[role=columnheader]:after{margin-right:.5em}.md-typeset table th[role=columnheader]:after{content:"";display:inline-block;height:1.2em;-webkit-mask-image:var(--md-typeset-table-sort-icon);mask-image:var(--md-typeset-table-sort-icon);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset table th[role=columnheader]:hover:after{background-color:var(--md-default-fg-color--lighter)}.md-typeset table th[role=columnheader][aria-sort=ascending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--asc);mask-image:var(--md-typeset-table-sort-icon--asc)}.md-typeset table th[role=columnheader][aria-sort=descending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--desc);mask-image:var(--md-typeset-table-sort-icon--desc)}.md-typeset__scrollwrap{margin:1em -.8rem;overflow-x:auto;touch-action:auto}.md-typeset__table{display:inline-block;margin-bottom:.5em;padding:0 .8rem}@media print{.md-typeset__table{display:block}}html .md-typeset__table table{display:table;margin:0;overflow:hidden;width:100%}@media screen and (max-width:44.9375em){.md-content__inner>pre{margin:1em -.8rem}.md-content__inner>pre code{border-radius:0}}.md-banner{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color);overflow:auto}@media print{.md-banner{display:none}}.md-banner--warning{background:var(--md-typeset-mark-color);color:var(--md-default-fg-color)}.md-banner__inner{font-size:.7rem;margin:.6rem auto;padding:0 .8rem}[dir=ltr] .md-banner__button{float:right}[dir=rtl] .md-banner__button{float:left}.md-banner__button{color:inherit;cursor:pointer;transition:opacity .25s}.md-banner__button:hover{opacity:.7}html{font-size:125%;height:100%;overflow-x:hidden}@media screen and (min-width:100em){html{font-size:137.5%}}@media screen and (min-width:125em){html{font-size:150%}}body{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;font-size:.5rem;min-height:100%;position:relative;width:100%}@media print{body{display:block}}@media screen and (max-width:59.9375em){body[data-md-scrolllock]{position:fixed}}.md-grid{margin-left:auto;margin-right:auto;max-width:61rem}.md-container{display:flex;flex-direction:column;flex-grow:1}@media print{.md-container{display:block}}.md-main{flex-grow:1}.md-main__inner{display:flex;height:100%;margin-top:1.5rem}.md-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.md-toggle{display:none}.md-option{height:0;opacity:0;position:absolute;width:0}.md-option:checked+label:not([hidden]){display:block}.md-option.focus-visible+label{outline-color:var(--md-accent-fg-color);outline-style:auto}.md-skip{background-color:var(--md-default-fg-color);border-radius:.1rem;color:var(--md-default-bg-color);font-size:.64rem;margin:.5rem;opacity:0;outline-color:var(--md-accent-fg-color);padding:.3rem .5rem;position:fixed;transform:translateY(.4rem);z-index:-1}.md-skip:focus{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 175ms 75ms;z-index:10}@page{margin:25mm}:root{--md-clipboard-icon:url('data:image/svg+xml;charset=utf-8,')}.md-clipboard{border-radius:.1rem;color:var(--md-default-fg-color--lightest);cursor:pointer;height:1.5em;outline-color:var(--md-accent-fg-color);outline-offset:.1rem;position:absolute;right:.5em;top:.5em;transition:color .25s;width:1.5em;z-index:1}@media print{.md-clipboard{display:none}}.md-clipboard:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}:hover>.md-clipboard{color:var(--md-default-fg-color--light)}.md-clipboard:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-clipboard:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-clipboard:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-clipboard:after{background-color:currentcolor;content:"";display:block;height:1.125em;margin:0 auto;-webkit-mask-image:var(--md-clipboard-icon);mask-image:var(--md-clipboard-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1.125em}.md-clipboard--inline{cursor:pointer}.md-clipboard--inline code{transition:color .25s,background-color .25s}.md-clipboard--inline:-webkit-any(:focus,:hover) code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-clipboard--inline:-moz-any(:focus,:hover) code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-clipboard--inline:is(:focus,:hover) code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}@keyframes consent{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes overlay{0%{opacity:0}to{opacity:1}}.md-consent__overlay{animation:overlay .25s both;-webkit-backdrop-filter:blur(.1rem);backdrop-filter:blur(.1rem);background-color:rgba(0,0,0,.54);height:100%;opacity:1;position:fixed;top:0;width:100%;z-index:5}.md-consent__inner{animation:consent .5s cubic-bezier(.1,.7,.1,1) both;background-color:var(--md-default-bg-color);border:0;border-radius:.1rem;bottom:0;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2);max-height:100%;overflow:auto;padding:0;position:fixed;width:100%;z-index:5}.md-consent__form{padding:.8rem}.md-consent__settings{display:none;margin:1em 0}input:checked+.md-consent__settings{display:block}.md-consent__controls{margin-bottom:.8rem}.md-typeset .md-consent__controls .md-button{display:inline}@media screen and (max-width:44.9375em){.md-typeset .md-consent__controls .md-button{display:block;margin-top:.4rem;text-align:center;width:100%}}.md-consent label{cursor:pointer}.md-content{flex-grow:1;min-width:0}.md-content__inner{margin:0 .8rem 1.2rem;padding-top:.6rem}@media screen and (min-width:76.25em){[dir=ltr] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}[dir=ltr] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner,[dir=rtl] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-right:1.2rem}[dir=rtl] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}}.md-content__inner:before{content:"";display:block;height:.4rem}.md-content__inner>:last-child{margin-bottom:0}[dir=ltr] .md-content__button{float:right}[dir=rtl] .md-content__button{float:left}[dir=ltr] .md-content__button{margin-left:.4rem}[dir=rtl] .md-content__button{margin-right:.4rem}.md-content__button{margin:.4rem 0;padding:0}@media print{.md-content__button{display:none}}.md-typeset .md-content__button{color:var(--md-default-fg-color--lighter)}.md-content__button svg{display:inline;vertical-align:top}[dir=rtl] .md-content__button svg{transform:scaleX(-1)}[dir=ltr] .md-dialog{right:.8rem}[dir=rtl] .md-dialog{left:.8rem}.md-dialog{background-color:var(--md-default-fg-color);border-radius:.1rem;bottom:.8rem;box-shadow:var(--md-shadow-z3);min-width:11.1rem;opacity:0;padding:.4rem .6rem;pointer-events:none;position:fixed;transform:translateY(100%);transition:transform 0ms .4s,opacity .4s;z-index:4}@media print{.md-dialog{display:none}}.md-dialog--active{opacity:1;pointer-events:auto;transform:translateY(0);transition:transform .4s cubic-bezier(.075,.85,.175,1),opacity .4s}.md-dialog__inner{color:var(--md-default-bg-color);font-size:.7rem}.md-feedback{margin:2em 0 1em;text-align:center}.md-feedback fieldset{border:none;margin:0;padding:0}.md-feedback__title{font-weight:700;margin:1em auto}.md-feedback__inner{position:relative}.md-feedback__list{align-content:baseline;display:flex;flex-wrap:wrap;justify-content:center;position:relative}.md-feedback__list:hover .md-icon:not(:disabled){color:var(--md-default-fg-color--lighter)}:disabled .md-feedback__list{min-height:1.8rem}.md-feedback__icon{color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;margin:0 .1rem;transition:color 125ms}.md-feedback__icon:not(:disabled).md-icon:hover{color:var(--md-accent-fg-color)}.md-feedback__icon:disabled{color:var(--md-default-fg-color--lightest);pointer-events:none}.md-feedback__note{opacity:0;position:relative;transform:translateY(.4rem);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s}.md-feedback__note>*{margin:0 auto;max-width:16rem}:disabled .md-feedback__note{opacity:1;transform:translateY(0)}.md-footer{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color)}@media print{.md-footer{display:none}}.md-footer__inner{justify-content:space-between;overflow:auto;padding:.2rem}.md-footer__inner:not([hidden]){display:flex}.md-footer__link{display:flex;flex-grow:0.01;outline-color:var(--md-accent-fg-color);overflow:hidden;padding-bottom:.4rem;padding-top:1.4rem;transition:opacity .25s}.md-footer__link:-webkit-any(:focus,:hover){opacity:.7}.md-footer__link:-moz-any(:focus,:hover){opacity:.7}.md-footer__link:is(:focus,:hover){opacity:.7}[dir=rtl] .md-footer__link svg{transform:scaleX(-1)}@media screen and (max-width:44.9375em){.md-footer__link--prev .md-footer__title{display:none}}[dir=ltr] .md-footer__link--next{margin-left:auto}[dir=rtl] .md-footer__link--next{margin-right:auto}.md-footer__link--next{text-align:right}[dir=rtl] .md-footer__link--next{text-align:left}.md-footer__title{flex-grow:1;font-size:.9rem;line-height:2.4rem;max-width:calc(100% - 2.4rem);padding:0 1rem;position:relative;white-space:nowrap}.md-footer__button{margin:.2rem;padding:.4rem}.md-footer__direction{font-size:.64rem;left:0;margin-top:-1rem;opacity:.7;padding:0 1rem;position:absolute;right:0}.md-footer-meta{background-color:var(--md-footer-bg-color--dark)}.md-footer-meta__inner{display:flex;flex-wrap:wrap;justify-content:space-between;padding:.2rem}html .md-footer-meta.md-typeset a{color:var(--md-footer-fg-color--light)}html .md-footer-meta.md-typeset a:-webkit-any(:focus,:hover){color:var(--md-footer-fg-color)}html .md-footer-meta.md-typeset a:-moz-any(:focus,:hover){color:var(--md-footer-fg-color)}html .md-footer-meta.md-typeset a:is(:focus,:hover){color:var(--md-footer-fg-color)}.md-copyright{color:var(--md-footer-fg-color--lighter);font-size:.64rem;margin:auto .6rem;padding:.4rem 0;width:100%}@media screen and (min-width:45em){.md-copyright{width:auto}}.md-copyright__highlight{color:var(--md-footer-fg-color--light)}.md-social{margin:0 .4rem;padding:.2rem 0 .6rem}@media screen and (min-width:45em){.md-social{padding:.6rem 0}}.md-social__link{display:inline-block;height:1.6rem;text-align:center;width:1.6rem}.md-social__link:before{line-height:1.9}.md-social__link svg{fill:currentcolor;max-height:.8rem;vertical-align:-25%}.md-typeset .md-button{border:.1rem solid;border-radius:.1rem;color:var(--md-primary-fg-color);cursor:pointer;display:inline-block;font-weight:700;padding:.625em 2em;transition:color 125ms,background-color 125ms,border-color 125ms}.md-typeset .md-button--primary{background-color:var(--md-primary-fg-color);border-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color)}.md-typeset .md-button:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-typeset .md-button:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-typeset .md-button:is(:focus,:hover){background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[dir=ltr] .md-typeset .md-input{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .md-input,[dir=rtl] .md-typeset .md-input{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .md-input{border-top-left-radius:.1rem}.md-typeset .md-input{border-bottom:.1rem solid var(--md-default-fg-color--lighter);box-shadow:var(--md-shadow-z1);font-size:.8rem;height:1.8rem;padding:0 .6rem;transition:border .25s,box-shadow .25s}.md-typeset .md-input:-webkit-any(:focus,:hover){border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input:-moz-any(:focus,:hover){border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input:is(:focus,:hover){border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input--stretch{width:100%}.md-header{background-color:var(--md-primary-fg-color);box-shadow:0 0 .2rem transparent,0 .2rem .4rem transparent;color:var(--md-primary-bg-color);display:block;left:0;position:-webkit-sticky;position:sticky;right:0;top:0;z-index:4}@media print{.md-header{display:none}}.md-header[hidden]{transform:translateY(-100%);transition:transform .25s cubic-bezier(.8,0,.6,1),box-shadow .25s}.md-header--shadow{box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2);transition:transform .25s cubic-bezier(.1,.7,.1,1),box-shadow .25s}.md-header__inner{align-items:center;display:flex;padding:0 .2rem}.md-header__button{color:currentcolor;cursor:pointer;margin:.2rem;outline-color:var(--md-accent-fg-color);padding:.4rem;position:relative;transition:opacity .25s;vertical-align:middle;z-index:1}.md-header__button:hover{opacity:.7}.md-header__button:not([hidden]){display:inline-block}.md-header__button:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-header__button.md-logo{margin:.2rem;padding:.4rem}@media screen and (max-width:76.1875em){.md-header__button.md-logo{display:none}}.md-header__button.md-logo :-webkit-any(img,svg){fill:currentcolor;display:block;height:1.2rem;width:auto}.md-header__button.md-logo :-moz-any(img,svg){fill:currentcolor;display:block;height:1.2rem;width:auto}.md-header__button.md-logo :is(img,svg){fill:currentcolor;display:block;height:1.2rem;width:auto}@media screen and (min-width:60em){.md-header__button[for=__search]{display:none}}.no-js .md-header__button[for=__search]{display:none}[dir=rtl] .md-header__button[for=__search] svg{transform:scaleX(-1)}@media screen and (min-width:76.25em){.md-header__button[for=__drawer]{display:none}}.md-header__topic{display:flex;max-width:100%;position:absolute;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;white-space:nowrap}.md-header__topic+.md-header__topic{opacity:0;pointer-events:none;transform:translateX(1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__topic+.md-header__topic{transform:translateX(-1.25rem)}.md-header__topic:first-child{font-weight:700}[dir=ltr] .md-header__title{margin-right:.4rem}[dir=rtl] .md-header__title{margin-left:.4rem}[dir=ltr] .md-header__title{margin-left:1rem}[dir=rtl] .md-header__title{margin-right:1rem}.md-header__title{flex-grow:1;font-size:.9rem;height:2.4rem;line-height:2.4rem}.md-header__title--active .md-header__topic{opacity:0;pointer-events:none;transform:translateX(-1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__title--active .md-header__topic{transform:translateX(1.25rem)}.md-header__title--active .md-header__topic+.md-header__topic{opacity:1;pointer-events:auto;transform:translateX(0);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;z-index:0}.md-header__title>.md-header__ellipsis{height:100%;position:relative;width:100%}.md-header__option{display:flex;flex-shrink:0;max-width:100%;transition:max-width 0ms .25s,opacity .25s .25s;white-space:nowrap}[data-md-toggle=search]:checked~.md-header .md-header__option{max-width:0;opacity:0;transition:max-width 0ms,opacity 0ms}.md-header__source{display:none}@media screen and (min-width:60em){[dir=ltr] .md-header__source{margin-left:1rem}[dir=rtl] .md-header__source{margin-right:1rem}.md-header__source{display:block;max-width:11.7rem;width:11.7rem}}@media screen and (min-width:76.25em){[dir=ltr] .md-header__source{margin-left:1.4rem}[dir=rtl] .md-header__source{margin-right:1.4rem}}:root{--md-nav-icon--prev:url('data:image/svg+xml;charset=utf-8,');--md-nav-icon--next:url('data:image/svg+xml;charset=utf-8,');--md-toc-icon:url('data:image/svg+xml;charset=utf-8,')}.md-nav{font-size:.7rem;line-height:1.3}.md-nav__title{display:block;font-weight:700;overflow:hidden;padding:0 .6rem;text-overflow:ellipsis}.md-nav__title .md-nav__button{display:none}.md-nav__title .md-nav__button img{height:100%;width:auto}.md-nav__title .md-nav__button.md-logo :-webkit-any(img,svg){fill:currentcolor;display:block;height:2.4rem;max-width:100%;object-fit:contain;width:auto}.md-nav__title .md-nav__button.md-logo :-moz-any(img,svg){fill:currentcolor;display:block;height:2.4rem;max-width:100%;object-fit:contain;width:auto}.md-nav__title .md-nav__button.md-logo :is(img,svg){fill:currentcolor;display:block;height:2.4rem;max-width:100%;object-fit:contain;width:auto}.md-nav__list{list-style:none;margin:0;padding:0}.md-nav__item{padding:0 .6rem}[dir=ltr] .md-nav__item .md-nav__item{padding-right:0}[dir=rtl] .md-nav__item .md-nav__item{padding-left:0}.md-nav__link{align-items:center;cursor:pointer;display:flex;justify-content:space-between;margin-top:.625em;overflow:hidden;scroll-snap-align:start;text-overflow:ellipsis;transition:color 125ms}.md-nav__link--passed{color:var(--md-default-fg-color--light)}.md-nav__item .md-nav__link--active{color:var(--md-typeset-a-color)}.md-nav__item .md-nav__link--index [href]{width:100%}.md-nav__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav__link.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-nav--primary .md-nav__link[for=__toc]{display:none}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{background-color:currentcolor;display:block;height:100%;-webkit-mask-image:var(--md-toc-icon);mask-image:var(--md-toc-icon);width:100%}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:none}.md-nav__link>*{cursor:pointer;display:flex}.md-nav__icon{flex-shrink:0}.md-nav__source{display:none}@media screen and (max-width:76.1875em){.md-nav--primary,.md-nav--primary .md-nav{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;height:100%;left:0;position:absolute;right:0;top:0;z-index:1}.md-nav--primary :-webkit-any(.md-nav__title,.md-nav__item){font-size:.8rem;line-height:1.5}.md-nav--primary :-moz-any(.md-nav__title,.md-nav__item){font-size:.8rem;line-height:1.5}.md-nav--primary :is(.md-nav__title,.md-nav__item){font-size:.8rem;line-height:1.5}.md-nav--primary .md-nav__title{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);cursor:pointer;height:5.6rem;line-height:2.4rem;padding:3rem .8rem .2rem;position:relative;white-space:nowrap}[dir=ltr] .md-nav--primary .md-nav__title .md-nav__icon{left:.4rem}[dir=rtl] .md-nav--primary .md-nav__title .md-nav__icon{right:.4rem}.md-nav--primary .md-nav__title .md-nav__icon{display:block;height:1.2rem;margin:.2rem;position:absolute;top:.4rem;width:1.2rem}.md-nav--primary .md-nav__title .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--prev);mask-image:var(--md-nav-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}.md-nav--primary .md-nav__title~.md-nav__list{background-color:var(--md-default-bg-color);box-shadow:0 .05rem 0 var(--md-default-fg-color--lightest) inset;overflow-y:auto;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory;touch-action:pan-y}.md-nav--primary .md-nav__title~.md-nav__list>:first-child{border-top:0}.md-nav--primary .md-nav__title[for=__drawer]{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);font-weight:700}.md-nav--primary .md-nav__title .md-logo{display:block;left:.2rem;margin:.2rem;padding:.4rem;position:absolute;right:.2rem;top:.2rem}.md-nav--primary .md-nav__list{flex:1}.md-nav--primary .md-nav__item{border-top:.05rem solid var(--md-default-fg-color--lightest);padding:0}.md-nav--primary .md-nav__item--active>.md-nav__link{color:var(--md-typeset-a-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__link{margin-top:0;padding:.6rem .8rem}[dir=ltr] .md-nav--primary .md-nav__link .md-nav__icon{margin-right:-.2rem}[dir=rtl] .md-nav--primary .md-nav__link .md-nav__icon{margin-left:-.2rem}.md-nav--primary .md-nav__link .md-nav__icon{font-size:1.2rem;height:1.2rem;width:1.2rem}.md-nav--primary .md-nav__link .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[dir=rtl] .md-nav--primary .md-nav__icon:after{transform:scale(-1)}.md-nav--primary .md-nav--secondary .md-nav{background-color:initial;position:static}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-left:1.4rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-right:1.4rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-left:2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-right:2rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-left:2.6rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-right:2.6rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-left:3.2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-right:3.2rem}.md-nav--secondary{background-color:initial}.md-nav__toggle~.md-nav{display:flex;opacity:0;transform:translateX(100%);transition:transform .25s cubic-bezier(.8,0,.6,1),opacity 125ms 50ms}[dir=rtl] .md-nav__toggle~.md-nav{transform:translateX(-100%)}.md-nav__toggle:checked~.md-nav{opacity:1;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 125ms 125ms}.md-nav__toggle:checked~.md-nav>.md-nav__list{-webkit-backface-visibility:hidden;backface-visibility:hidden}}@media screen and (max-width:59.9375em){.md-nav--primary .md-nav__link[for=__toc]{display:flex}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--primary .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:flex}.md-nav__source{background-color:var(--md-primary-fg-color--dark);color:var(--md-primary-bg-color);display:block;padding:0 .2rem}}@media screen and (min-width:60em) and (max-width:76.1875em){.md-nav--integrated .md-nav__link[for=__toc]{display:flex}.md-nav--integrated .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--integrated .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--integrated .md-nav__link[for=__toc]~.md-nav{display:flex}}@media screen and (min-width:60em){.md-nav--secondary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:-webkit-sticky;position:sticky;top:0;z-index:1}.md-nav--secondary .md-nav__title[for=__toc]{scroll-snap-align:start}.md-nav--secondary .md-nav__title .md-nav__icon{display:none}}@media screen and (min-width:76.25em){.md-nav{transition:max-height .25s cubic-bezier(.86,0,.07,1)}.md-nav--primary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:-webkit-sticky;position:sticky;top:0;z-index:1}.md-nav--primary .md-nav__title[for=__drawer]{scroll-snap-align:start}.md-nav--primary .md-nav__title .md-nav__icon,.md-nav__toggle~.md-nav{display:none}.md-nav__toggle:-webkit-any(:checked,:indeterminate)~.md-nav{display:block}.md-nav__toggle:-moz-any(:checked,:indeterminate)~.md-nav{display:block}.md-nav__toggle:is(:checked,:indeterminate)~.md-nav{display:block}.md-nav__item--nested>.md-nav>.md-nav__title{display:none}.md-nav__item--section{display:block;margin:1.25em 0}.md-nav__item--section:last-child{margin-bottom:0}.md-nav__item--section>.md-nav__link{font-weight:700;pointer-events:none}.md-nav__item--section>.md-nav__link--index [href]{pointer-events:auto}.md-nav__item--section>.md-nav__link .md-nav__icon{display:none}.md-nav__item--section>.md-nav{display:block}.md-nav__item--section>.md-nav>.md-nav__list>.md-nav__item{padding:0}.md-nav__icon{border-radius:100%;height:.9rem;transition:background-color .25s,transform .25s;width:.9rem}[dir=rtl] .md-nav__icon{transform:rotate(180deg)}.md-nav__icon:hover{background-color:var(--md-accent-fg-color--transparent)}.md-nav__icon:after{background-color:currentcolor;content:"";display:inline-block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:-.1rem;width:100%}.md-nav__item--nested .md-nav__toggle:checked~.md-nav__link .md-nav__icon,.md-nav__item--nested .md-nav__toggle:indeterminate~.md-nav__link .md-nav__icon{transform:rotate(90deg)}.md-nav--lifted>.md-nav__list>.md-nav__item,.md-nav--lifted>.md-nav__list>.md-nav__item--nested,.md-nav--lifted>.md-nav__title{display:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active{display:block;padding:0}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);font-weight:700;margin-top:0;padding:0 .6rem;position:-webkit-sticky;position:sticky;top:0;z-index:1}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link:not(.md-nav__link--index){pointer-events:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link .md-nav__icon{display:none}.md-nav--lifted .md-nav[data-md-level="1"]{display:block}[dir=ltr] .md-nav--lifted .md-nav[data-md-level="1"]>.md-nav__list>.md-nav__item{padding-right:.6rem}[dir=rtl] .md-nav--lifted .md-nav[data-md-level="1"]>.md-nav__list>.md-nav__item{padding-left:.6rem}.md-nav--integrated>.md-nav__list>.md-nav__item--active:not(.md-nav__item--nested){padding:0 .6rem}.md-nav--integrated>.md-nav__list>.md-nav__item--active:not(.md-nav__item--nested)>.md-nav__link{padding:0}[dir=ltr] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-left:.05rem solid var(--md-primary-fg-color)}[dir=rtl] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-right:.05rem solid var(--md-primary-fg-color)}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{display:block;margin-bottom:1.25em}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary>.md-nav__title{display:none}}:root{--md-search-result-icon:url('data:image/svg+xml;charset=utf-8,')}.md-search{position:relative}@media screen and (min-width:60em){.md-search{padding:.2rem 0}}.no-js .md-search{display:none}.md-search__overlay{opacity:0;z-index:1}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__overlay{left:-2.2rem}[dir=rtl] .md-search__overlay{right:-2.2rem}.md-search__overlay{background-color:var(--md-default-bg-color);border-radius:1rem;height:2rem;overflow:hidden;pointer-events:none;position:absolute;top:-1rem;transform-origin:center;transition:transform .3s .1s,opacity .2s .2s;width:2rem}[data-md-toggle=search]:checked~.md-header .md-search__overlay{opacity:1;transition:transform .4s,opacity .1s}}@media screen and (min-width:60em){[dir=ltr] .md-search__overlay{left:0}[dir=rtl] .md-search__overlay{right:0}.md-search__overlay{background-color:rgba(0,0,0,.54);cursor:pointer;height:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0}[data-md-toggle=search]:checked~.md-header .md-search__overlay{height:200vh;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@media screen and (max-width:29.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(45)}}@media screen and (min-width:30em) and (max-width:44.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(60)}}@media screen and (min-width:45em) and (max-width:59.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(75)}}.md-search__inner{-webkit-backface-visibility:hidden;backface-visibility:hidden}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__inner{left:0}[dir=rtl] .md-search__inner{right:0}.md-search__inner{height:0;opacity:0;overflow:hidden;position:fixed;top:0;transform:translateX(5%);transition:width 0ms .3s,height 0ms .3s,transform .15s cubic-bezier(.4,0,.2,1) .15s,opacity .15s .15s;width:0;z-index:2}[dir=rtl] .md-search__inner{transform:translateX(-5%)}[data-md-toggle=search]:checked~.md-header .md-search__inner{height:100%;opacity:1;transform:translateX(0);transition:width 0ms 0ms,height 0ms 0ms,transform .15s cubic-bezier(.1,.7,.1,1) .15s,opacity .15s .15s;width:100%}}@media screen and (min-width:60em){[dir=ltr] .md-search__inner{float:right}[dir=rtl] .md-search__inner{float:left}.md-search__inner{padding:.1rem 0;position:relative;transition:width .25s cubic-bezier(.1,.7,.1,1);width:11.7rem}}@media screen and (min-width:60em) and (max-width:76.1875em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:23.4rem}}@media screen and (min-width:76.25em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:34.4rem}}.md-search__form{background-color:var(--md-default-bg-color);box-shadow:0 0 .6rem transparent;height:2.4rem;position:relative;transition:color .25s,background-color .25s;z-index:2}@media screen and (min-width:60em){.md-search__form{background-color:rgba(0,0,0,.26);border-radius:.1rem;height:1.8rem}.md-search__form:hover{background-color:hsla(0,0%,100%,.12)}}[data-md-toggle=search]:checked~.md-header .md-search__form{background-color:var(--md-default-bg-color);border-radius:.1rem .1rem 0 0;box-shadow:0 0 .6rem rgba(0,0,0,.07);color:var(--md-default-fg-color)}[dir=ltr] .md-search__input{padding-left:3.6rem;padding-right:2.2rem}[dir=rtl] .md-search__input{padding-left:2.2rem;padding-right:3.6rem}.md-search__input{background:transparent;font-size:.9rem;height:100%;position:relative;text-overflow:ellipsis;width:100%;z-index:2}.md-search__input::-ms-input-placeholder{-ms-transition:color .25s;transition:color .25s}.md-search__input::placeholder{transition:color .25s}.md-search__input::-ms-input-placeholder{color:var(--md-default-fg-color--light)}.md-search__input::placeholder,.md-search__input~.md-search__icon{color:var(--md-default-fg-color--light)}.md-search__input::-ms-clear{display:none}@media screen and (max-width:59.9375em){.md-search__input{font-size:.9rem;height:2.4rem;width:100%}}@media screen and (min-width:60em){[dir=ltr] .md-search__input{padding-left:2.2rem}[dir=rtl] .md-search__input{padding-right:2.2rem}.md-search__input{color:inherit;font-size:.8rem}.md-search__input::-ms-input-placeholder{color:var(--md-primary-bg-color--light)}.md-search__input::placeholder{color:var(--md-primary-bg-color--light)}.md-search__input+.md-search__icon{color:var(--md-primary-bg-color)}[data-md-toggle=search]:checked~.md-header .md-search__input{text-overflow:clip}[data-md-toggle=search]:checked~.md-header .md-search__input::-ms-input-placeholder{color:var(--md-default-fg-color--light)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::placeholder{color:var(--md-default-fg-color--light)}}.md-search__icon{cursor:pointer;display:inline-block;height:1.2rem;transition:color .25s,opacity .25s;width:1.2rem}.md-search__icon:hover{opacity:.7}[dir=ltr] .md-search__icon[for=__search]{left:.5rem}[dir=rtl] .md-search__icon[for=__search]{right:.5rem}.md-search__icon[for=__search]{position:absolute;top:.3rem;z-index:2}[dir=rtl] .md-search__icon[for=__search] svg{transform:scaleX(-1)}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__icon[for=__search]{left:.8rem}[dir=rtl] .md-search__icon[for=__search]{right:.8rem}.md-search__icon[for=__search]{top:.6rem}.md-search__icon[for=__search] svg:first-child{display:none}}@media screen and (min-width:60em){.md-search__icon[for=__search]{pointer-events:none}.md-search__icon[for=__search] svg:last-child{display:none}}[dir=ltr] .md-search__options{right:.5rem}[dir=rtl] .md-search__options{left:.5rem}.md-search__options{pointer-events:none;position:absolute;top:.3rem;z-index:2}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__options{right:.8rem}[dir=rtl] .md-search__options{left:.8rem}.md-search__options{top:.6rem}}[dir=ltr] .md-search__options>*{margin-left:.2rem}[dir=rtl] .md-search__options>*{margin-right:.2rem}.md-search__options>*{color:var(--md-default-fg-color--light);opacity:0;transform:scale(.75);transition:transform .15s cubic-bezier(.1,.7,.1,1),opacity .15s}.md-search__options>:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__options>*{opacity:1;pointer-events:auto;transform:scale(1)}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__options>:hover{opacity:.7}[dir=ltr] .md-search__suggest{padding-left:3.6rem;padding-right:2.2rem}[dir=rtl] .md-search__suggest{padding-left:2.2rem;padding-right:3.6rem}.md-search__suggest{align-items:center;color:var(--md-default-fg-color--lighter);display:flex;font-size:.9rem;height:100%;opacity:0;position:absolute;top:0;transition:opacity 50ms;white-space:nowrap;width:100%}@media screen and (min-width:60em){[dir=ltr] .md-search__suggest{padding-left:2.2rem}[dir=rtl] .md-search__suggest{padding-right:2.2rem}.md-search__suggest{font-size:.8rem}}[data-md-toggle=search]:checked~.md-header .md-search__suggest{opacity:1;transition:opacity .3s .1s}[dir=ltr] .md-search__output{border-bottom-left-radius:.1rem}[dir=ltr] .md-search__output,[dir=rtl] .md-search__output{border-bottom-right-radius:.1rem}[dir=rtl] .md-search__output{border-bottom-left-radius:.1rem}.md-search__output{overflow:hidden;position:absolute;width:100%;z-index:1}@media screen and (max-width:59.9375em){.md-search__output{bottom:0;top:2.4rem}}@media screen and (min-width:60em){.md-search__output{opacity:0;top:1.9rem;transition:opacity .4s}[data-md-toggle=search]:checked~.md-header .md-search__output{box-shadow:var(--md-shadow-z3);opacity:1}}.md-search__scrollwrap{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:var(--md-default-bg-color);height:100%;overflow-y:auto;touch-action:pan-y}@media (-webkit-max-device-pixel-ratio:1),(max-resolution:1dppx){.md-search__scrollwrap{transform:translateZ(0)}}@media screen and (min-width:60em) and (max-width:76.1875em){.md-search__scrollwrap{width:23.4rem}}@media screen and (min-width:76.25em){.md-search__scrollwrap{width:34.4rem}}@media screen and (min-width:60em){.md-search__scrollwrap{max-height:0;scrollbar-color:var(--md-default-fg-color--lighter) transparent;scrollbar-width:thin}[data-md-toggle=search]:checked~.md-header .md-search__scrollwrap{max-height:75vh}.md-search__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) transparent}.md-search__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-search__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}}.md-search-result{color:var(--md-default-fg-color);word-break:break-word}.md-search-result__meta{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);font-size:.64rem;line-height:1.8rem;padding:0 .8rem;scroll-snap-align:start}@media screen and (min-width:60em){[dir=ltr] .md-search-result__meta{padding-left:2.2rem}[dir=rtl] .md-search-result__meta{padding-right:2.2rem}}.md-search-result__list{list-style:none;margin:0;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.md-search-result__item{box-shadow:0 -.05rem var(--md-default-fg-color--lightest)}.md-search-result__item:first-child{box-shadow:none}.md-search-result__link{display:block;outline:none;scroll-snap-align:start;transition:background-color .25s}.md-search-result__link:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:is(:focus,:hover){background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:last-child p:last-child{margin-bottom:.6rem}.md-search-result__more summary{color:var(--md-typeset-a-color);cursor:pointer;display:block;font-size:.64rem;outline:none;padding:.75em .8rem;scroll-snap-align:start;transition:color .25s,background-color .25s}@media screen and (min-width:60em){[dir=ltr] .md-search-result__more summary{padding-left:2.2rem}[dir=rtl] .md-search-result__more summary{padding-right:2.2rem}}.md-search-result__more summary:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-search-result__more summary:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-search-result__more summary:is(:focus,:hover){background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-search-result__more summary::marker{display:none}.md-search-result__more summary::-webkit-details-marker{display:none}.md-search-result__more summary~*>*{opacity:.65}.md-search-result__article{overflow:hidden;padding:0 .8rem;position:relative}@media screen and (min-width:60em){[dir=ltr] .md-search-result__article{padding-left:2.2rem}[dir=rtl] .md-search-result__article{padding-right:2.2rem}}.md-search-result__article--document .md-search-result__title{font-size:.8rem;font-weight:400;line-height:1.4;margin:.55rem 0}[dir=ltr] .md-search-result__icon{left:0}[dir=rtl] .md-search-result__icon{right:0}.md-search-result__icon{color:var(--md-default-fg-color--light);height:1.2rem;margin:.5rem;position:absolute;width:1.2rem}@media screen and (max-width:59.9375em){.md-search-result__icon{display:none}}.md-search-result__icon:after{background-color:currentcolor;content:"";display:inline-block;height:100%;-webkit-mask-image:var(--md-search-result-icon);mask-image:var(--md-search-result-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[dir=rtl] .md-search-result__icon:after{transform:scaleX(-1)}.md-search-result__title{font-size:.64rem;font-weight:700;line-height:1.6;margin:.5em 0}.md-search-result__teaser{-webkit-box-orient:vertical;-webkit-line-clamp:2;color:var(--md-default-fg-color--light);display:-webkit-box;font-size:.64rem;line-height:1.6;margin:.5em 0;max-height:2rem;overflow:hidden;text-overflow:ellipsis}@media screen and (max-width:44.9375em){.md-search-result__teaser{-webkit-line-clamp:3;max-height:3rem}}@media screen and (min-width:60em) and (max-width:76.1875em){.md-search-result__teaser{-webkit-line-clamp:3;max-height:3rem}}.md-search-result__teaser mark{background-color:initial;text-decoration:underline}.md-search-result__terms{font-size:.64rem;font-style:italic;margin:.5em 0}.md-search-result mark{background-color:initial;color:var(--md-accent-fg-color)}.md-select{position:relative;z-index:1}.md-select__inner{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);left:50%;margin-top:.2rem;max-height:0;opacity:0;position:absolute;top:calc(100% - .2rem);transform:translate3d(-50%,.3rem,0);transition:transform .25s 375ms,opacity .25s .25s,max-height 0ms .5s}.md-select:-webkit-any(:focus-within,:hover) .md-select__inner{max-height:10rem;opacity:1;transform:translate3d(-50%,0,0);-webkit-transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms;transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}.md-select:-moz-any(:focus-within,:hover) .md-select__inner{max-height:10rem;opacity:1;transform:translate3d(-50%,0,0);-moz-transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms;transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}.md-select:is(:focus-within,:hover) .md-select__inner{max-height:10rem;opacity:1;transform:translate3d(-50%,0,0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}.md-select__inner:after{border-bottom:.2rem solid transparent;border-bottom-color:var(--md-default-bg-color);border-left:.2rem solid transparent;border-right:.2rem solid transparent;border-top:0;content:"";height:0;left:50%;margin-left:-.2rem;margin-top:-.2rem;position:absolute;top:0;width:0}.md-select__list{border-radius:.1rem;font-size:.8rem;list-style-type:none;margin:0;max-height:inherit;overflow:auto;padding:0}.md-select__item{line-height:1.8rem}[dir=ltr] .md-select__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-select__link{padding-left:1.2rem;padding-right:.6rem}.md-select__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:background-color .25s,color .25s;width:100%}.md-select__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-select__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-select__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-select__link:focus{background-color:var(--md-default-fg-color--lightest)}.md-sidebar{align-self:flex-start;flex-shrink:0;padding:1.2rem 0;position:-webkit-sticky;position:sticky;top:2.4rem;width:12.1rem}@media print{.md-sidebar{display:none}}@media screen and (max-width:76.1875em){[dir=ltr] .md-sidebar--primary{left:-12.1rem}[dir=rtl] .md-sidebar--primary{right:-12.1rem}.md-sidebar--primary{background-color:var(--md-default-bg-color);display:block;height:100%;position:fixed;top:0;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s;width:12.1rem;z-index:5}[data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:var(--md-shadow-z3);transform:translateX(12.1rem)}[dir=rtl] [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{transform:translateX(-12.1rem)}.md-sidebar--primary .md-sidebar__scrollwrap{bottom:0;left:0;margin:0;overflow:hidden;position:absolute;right:0;-ms-scroll-snap-type:none;scroll-snap-type:none;top:0}}@media screen and (min-width:76.25em){.md-sidebar{height:0}.no-js .md-sidebar{height:auto}.md-header--lifted~.md-container .md-sidebar{top:4.8rem}}.md-sidebar--secondary{display:none;order:2}@media screen and (min-width:60em){.md-sidebar--secondary{height:0}.no-js .md-sidebar--secondary{height:auto}.md-sidebar--secondary:not([hidden]){display:block}.md-sidebar--secondary .md-sidebar__scrollwrap{touch-action:pan-y}}.md-sidebar__scrollwrap{scrollbar-gutter:stable;-webkit-backface-visibility:hidden;backface-visibility:hidden;margin:0 .2rem;overflow-y:auto;scrollbar-color:var(--md-default-fg-color--lighter) transparent;scrollbar-width:thin}.md-sidebar__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) transparent}.md-sidebar__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}@supports selector(::-webkit-scrollbar){.md-sidebar__scrollwrap{scrollbar-gutter:auto}[dir=ltr] .md-sidebar__inner{padding-right:calc(100% - 11.5rem)}[dir=rtl] .md-sidebar__inner{padding-left:calc(100% - 11.5rem)}}@media screen and (max-width:76.1875em){.md-overlay{background-color:rgba(0,0,0,.54);height:0;opacity:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0;z-index:5}[data-md-toggle=drawer]:checked~.md-overlay{height:100%;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@keyframes facts{0%{height:0}to{height:.65rem}}@keyframes fact{0%{opacity:0;transform:translateY(100%)}50%{opacity:0}to{opacity:1;transform:translateY(0)}}:root{--md-source-forks-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-repositories-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-stars-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-version-icon:url('data:image/svg+xml;charset=utf-8,')}.md-source{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:block;font-size:.65rem;line-height:1.2;outline-color:var(--md-accent-fg-color);transition:opacity .25s;white-space:nowrap}.md-source:hover{opacity:.7}.md-source__icon{display:inline-block;height:2.4rem;vertical-align:middle;width:2rem}[dir=ltr] .md-source__icon svg{margin-left:.6rem}[dir=rtl] .md-source__icon svg{margin-right:.6rem}.md-source__icon svg{margin-top:.6rem}[dir=ltr] .md-source__icon+.md-source__repository{margin-left:-2rem}[dir=rtl] .md-source__icon+.md-source__repository{margin-right:-2rem}[dir=ltr] .md-source__icon+.md-source__repository{padding-left:2rem}[dir=rtl] .md-source__icon+.md-source__repository{padding-right:2rem}[dir=ltr] .md-source__repository{margin-left:.6rem}[dir=rtl] .md-source__repository{margin-right:.6rem}.md-source__repository{display:inline-block;max-width:calc(100% - 1.2rem);overflow:hidden;text-overflow:ellipsis;vertical-align:middle}.md-source__facts{display:flex;font-size:.55rem;gap:.4rem;list-style-type:none;margin:.1rem 0 0;opacity:.75;overflow:hidden;padding:0;width:100%}.md-source__repository--active .md-source__facts{animation:facts .25s ease-in}.md-source__fact{overflow:hidden;text-overflow:ellipsis}.md-source__repository--active .md-source__fact{animation:fact .4s ease-out}[dir=ltr] .md-source__fact:before{margin-right:.1rem}[dir=rtl] .md-source__fact:before{margin-left:.1rem}.md-source__fact:before{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:text-top;width:.6rem}.md-source__fact:nth-child(1n+2){flex-shrink:0}.md-source__fact--version:before{-webkit-mask-image:var(--md-source-version-icon);mask-image:var(--md-source-version-icon)}.md-source__fact--stars:before{-webkit-mask-image:var(--md-source-stars-icon);mask-image:var(--md-source-stars-icon)}.md-source__fact--forks:before{-webkit-mask-image:var(--md-source-forks-icon);mask-image:var(--md-source-forks-icon)}.md-source__fact--repositories:before{-webkit-mask-image:var(--md-source-repositories-icon);mask-image:var(--md-source-repositories-icon)}.md-tabs{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);display:block;line-height:1.3;overflow:auto;width:100%;z-index:3}@media print{.md-tabs{display:none}}@media screen and (max-width:76.1875em){.md-tabs{display:none}}.md-tabs[hidden]{pointer-events:none}[dir=ltr] .md-tabs__list{margin-left:.2rem}[dir=rtl] .md-tabs__list{margin-right:.2rem}.md-tabs__list{contain:content;list-style:none;margin:0;padding:0;white-space:nowrap}.md-tabs__item{display:inline-block;height:2.4rem;padding-left:.6rem;padding-right:.6rem}.md-tabs__link{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:block;font-size:.7rem;margin-top:.8rem;opacity:.7;outline-color:var(--md-accent-fg-color);outline-offset:.2rem;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s}.md-tabs__link--active,.md-tabs__link:-webkit-any(:focus,:hover){color:inherit;opacity:1}.md-tabs__link--active,.md-tabs__link:-moz-any(:focus,:hover){color:inherit;opacity:1}.md-tabs__link--active,.md-tabs__link:is(:focus,:hover){color:inherit;opacity:1}.md-tabs__item:nth-child(2) .md-tabs__link{transition-delay:20ms}.md-tabs__item:nth-child(3) .md-tabs__link{transition-delay:40ms}.md-tabs__item:nth-child(4) .md-tabs__link{transition-delay:60ms}.md-tabs__item:nth-child(5) .md-tabs__link{transition-delay:80ms}.md-tabs__item:nth-child(6) .md-tabs__link{transition-delay:.1s}.md-tabs__item:nth-child(7) .md-tabs__link{transition-delay:.12s}.md-tabs__item:nth-child(8) .md-tabs__link{transition-delay:.14s}.md-tabs__item:nth-child(9) .md-tabs__link{transition-delay:.16s}.md-tabs__item:nth-child(10) .md-tabs__link{transition-delay:.18s}.md-tabs__item:nth-child(11) .md-tabs__link{transition-delay:.2s}.md-tabs__item:nth-child(12) .md-tabs__link{transition-delay:.22s}.md-tabs__item:nth-child(13) .md-tabs__link{transition-delay:.24s}.md-tabs__item:nth-child(14) .md-tabs__link{transition-delay:.26s}.md-tabs__item:nth-child(15) .md-tabs__link{transition-delay:.28s}.md-tabs__item:nth-child(16) .md-tabs__link{transition-delay:.3s}.md-tabs[hidden] .md-tabs__link{opacity:0;transform:translateY(50%);transition:transform 0ms .1s,opacity .1s}:root{--md-tag-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .md-tags{margin-bottom:.75em;margin-top:-.125em}[dir=ltr] .md-typeset .md-tag{margin-right:.5em}[dir=rtl] .md-typeset .md-tag{margin-left:.5em}.md-typeset .md-tag{background:var(--md-default-fg-color--lightest);border-radius:2.4rem;display:inline-block;font-size:.64rem;font-weight:700;letter-spacing:normal;line-height:1.6;margin-bottom:.5em;padding:.3125em .9375em;vertical-align:middle}.md-typeset .md-tag[href]{-webkit-tap-highlight-color:transparent;color:inherit;outline:none;transition:color 125ms,background-color 125ms}.md-typeset .md-tag[href]:focus,.md-typeset .md-tag[href]:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[id]>.md-typeset .md-tag{vertical-align:text-top}.md-typeset .md-tag-icon:before{background-color:var(--md-default-fg-color--lighter);content:"";display:inline-block;height:1.2em;margin-right:.4em;-webkit-mask-image:var(--md-tag-icon);mask-image:var(--md-tag-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset .md-tag-icon:-webkit-any(a:focus,a:hover):before{background-color:var(--md-accent-bg-color)}.md-typeset .md-tag-icon:-moz-any(a:focus,a:hover):before{background-color:var(--md-accent-bg-color)}.md-typeset .md-tag-icon:is(a:focus,a:hover):before{background-color:var(--md-accent-bg-color)}@keyframes pulse{0%{box-shadow:0 0 0 0 var(--md-default-fg-color--lightest);transform:scale(.95)}75%{box-shadow:0 0 0 .625em transparent;transform:scale(1)}to{box-shadow:0 0 0 0 transparent;transform:scale(.95)}}:root{--md-tooltip-width:20rem}.md-tooltip{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);font-family:var(--md-text-font-family);left:clamp(var(--md-tooltip-0,0rem) + .8rem,var(--md-tooltip-x),100vw + var(--md-tooltip-0,0rem) + .8rem - var(--md-tooltip-width) - 2 * .8rem);max-width:calc(100vw - 1.6rem);opacity:0;position:absolute;top:var(--md-tooltip-y);transform:translateY(-.4rem);transition:transform 0ms .25s,opacity .25s,z-index .25s;width:var(--md-tooltip-width);z-index:0}.md-tooltip--active{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,z-index 0ms;z-index:2}:-webkit-any(.focus-visible>.md-tooltip,.md-tooltip:target){outline:var(--md-accent-fg-color) auto}:-moz-any(.focus-visible>.md-tooltip,.md-tooltip:target){outline:var(--md-accent-fg-color) auto}:is(.focus-visible>.md-tooltip,.md-tooltip:target){outline:var(--md-accent-fg-color) auto}.md-tooltip__inner{font-size:.64rem;padding:.8rem}.md-tooltip__inner.md-typeset>:first-child{margin-top:0}.md-tooltip__inner.md-typeset>:last-child{margin-bottom:0}.md-annotation{font-weight:400;outline:none;white-space:normal}[dir=rtl] .md-annotation{direction:rtl}.md-annotation:not([hidden]){display:inline-block;line-height:1.325}.md-annotation__index{cursor:pointer;font-family:var(--md-code-font-family);font-size:.85em;margin:0 1ch;outline:none;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:0}.md-annotation .md-annotation__index{color:#fff;transition:z-index .25s}.md-annotation .md-annotation__index:-webkit-any(:focus,:hover){color:#fff}.md-annotation .md-annotation__index:-moz-any(:focus,:hover){color:#fff}.md-annotation .md-annotation__index:is(:focus,:hover){color:#fff}.md-annotation__index:after{background-color:var(--md-default-fg-color--lighter);border-radius:2ch;content:"";height:2.2ch;left:-.125em;margin:0 -.4ch;padding:0 .4ch;position:absolute;top:0;transition:color .25s,background-color .25s;width:calc(100% + 1.2ch);width:max(2.2ch,100% + 1.2ch);z-index:-1}@media not all and (prefers-reduced-motion){[data-md-visible]>.md-annotation__index:after{animation:pulse 2s infinite}}.md-tooltip--active+.md-annotation__index:after{animation:none;transition:color .25s,background-color .25s}code .md-annotation__index{font-family:var(--md-code-font-family);font-size:inherit}:-webkit-any(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index){color:var(--md-accent-bg-color)}:-moz-any(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index){color:var(--md-accent-bg-color)}:is(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index){color:var(--md-accent-bg-color)}:-webkit-any(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index):after{background-color:var(--md-accent-fg-color)}:-moz-any(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index):after{background-color:var(--md-accent-fg-color)}:is(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index):after{background-color:var(--md-accent-fg-color)}.md-tooltip--active+.md-annotation__index{animation:none;transition:none;z-index:2}.md-annotation__index [data-md-annotation-id]{display:inline-block;line-height:90%}.md-annotation__index [data-md-annotation-id]:before{content:attr(data-md-annotation-id);display:inline-block;padding-bottom:.1em;transform:scale(1.15);transition:transform .4s cubic-bezier(.1,.7,.1,1);vertical-align:.065em}@media not print{.md-annotation__index [data-md-annotation-id]:before{content:"+"}:focus-within>.md-annotation__index [data-md-annotation-id]:before{transform:scale(1.25) rotate(45deg)}}[dir=ltr] .md-top{margin-left:50%}[dir=rtl] .md-top{margin-right:50%}.md-top{background-color:var(--md-default-bg-color);border-radius:1.6rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color--light);display:block;font-size:.7rem;outline:none;padding:.4rem .8rem;position:fixed;top:3.2rem;transform:translate(-50%);transition:color 125ms,background-color 125ms,transform 125ms cubic-bezier(.4,0,.2,1),opacity 125ms;z-index:2}@media print{.md-top{display:none}}[dir=rtl] .md-top{transform:translate(50%)}.md-top[hidden]{opacity:0;pointer-events:none;transform:translate(-50%,.2rem);transition-duration:0ms}[dir=rtl] .md-top[hidden]{transform:translate(50%,.2rem)}.md-top:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top:is(:focus,:hover){background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top svg{display:inline-block;vertical-align:-.5em}@keyframes hoverfix{0%{pointer-events:none}}:root{--md-version-icon:url('data:image/svg+xml;charset=utf-8,')}.md-version{flex-shrink:0;font-size:.8rem;height:2.4rem}[dir=ltr] .md-version__current{margin-left:1.4rem;margin-right:.4rem}[dir=rtl] .md-version__current{margin-left:.4rem;margin-right:1.4rem}.md-version__current{color:inherit;cursor:pointer;outline:none;position:relative;top:.05rem}[dir=ltr] .md-version__current:after{margin-left:.4rem}[dir=rtl] .md-version__current:after{margin-right:.4rem}.md-version__current:after{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-image:var(--md-version-icon);mask-image:var(--md-version-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.4rem}.md-version__list{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);list-style-type:none;margin:.2rem .8rem;max-height:0;opacity:0;overflow:auto;padding:0;position:absolute;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory;top:.15rem;transition:max-height 0ms .5s,opacity .25s .25s;z-index:3}.md-version:-webkit-any(:focus-within,:hover) .md-version__list{max-height:10rem;opacity:1;-webkit-transition:max-height 0ms,opacity .25s;transition:max-height 0ms,opacity .25s}.md-version:-moz-any(:focus-within,:hover) .md-version__list{max-height:10rem;opacity:1;-moz-transition:max-height 0ms,opacity .25s;transition:max-height 0ms,opacity .25s}.md-version:is(:focus-within,:hover) .md-version__list{max-height:10rem;opacity:1;transition:max-height 0ms,opacity .25s}@media (pointer:coarse){.md-version:hover .md-version__list{animation:hoverfix .25s forwards}.md-version:focus-within .md-version__list{animation:none}}.md-version__item{line-height:1.8rem}[dir=ltr] .md-version__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-version__link{padding-left:1.2rem;padding-right:.6rem}.md-version__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:color .25s,background-color .25s;white-space:nowrap;width:100%}.md-version__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-version__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-version__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-version__link:focus{background-color:var(--md-default-fg-color--lightest)}:root{--md-admonition-icon--note:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--abstract:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--info:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--tip:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--success:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--question:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--warning:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--failure:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--danger:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--bug:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--quote:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .admonition,.md-typeset details{background-color:var(--md-admonition-bg-color);border:.05rem solid #448aff;border-radius:.2rem;box-shadow:var(--md-shadow-z1);color:var(--md-admonition-fg-color);display:flow-root;font-size:.64rem;margin:1.5625em 0;padding:0 .6rem;page-break-inside:avoid}@media print{.md-typeset .admonition,.md-typeset details{box-shadow:none}}.md-typeset .admonition>*,.md-typeset details>*{box-sizing:border-box}.md-typeset .admonition :-webkit-any(.admonition,details),.md-typeset details :-webkit-any(.admonition,details){margin-bottom:1em;margin-top:1em}.md-typeset .admonition :-moz-any(.admonition,details),.md-typeset details :-moz-any(.admonition,details){margin-bottom:1em;margin-top:1em}.md-typeset .admonition :is(.admonition,details),.md-typeset details :is(.admonition,details){margin-bottom:1em;margin-top:1em}.md-typeset .admonition .md-typeset__scrollwrap,.md-typeset details .md-typeset__scrollwrap{margin:1em -.6rem}.md-typeset .admonition .md-typeset__table,.md-typeset details .md-typeset__table{padding:0 .6rem}.md-typeset .admonition>.tabbed-set:only-child,.md-typeset details>.tabbed-set:only-child{margin-top:0}html .md-typeset .admonition>:last-child,html .md-typeset details>:last-child{margin-bottom:.6rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{padding-left:2rem;padding-right:.6rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{padding-left:.6rem;padding-right:2rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{border-left-width:.2rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-right-width:.2rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset .admonition-title,.md-typeset summary{background-color:rgba(68,138,255,.1);border:none;font-weight:700;margin:0 -.6rem;padding-bottom:.4rem;padding-top:.4rem;position:relative}html .md-typeset .admonition-title:last-child,html .md-typeset summary:last-child{margin-bottom:0}[dir=ltr] .md-typeset .admonition-title:before,[dir=ltr] .md-typeset summary:before{left:.6rem}[dir=rtl] .md-typeset .admonition-title:before,[dir=rtl] .md-typeset summary:before{right:.6rem}.md-typeset .admonition-title:before,.md-typeset summary:before{background-color:#448aff;content:"";height:1rem;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;width:1rem}.md-typeset .admonition-title code,.md-typeset summary code{box-shadow:0 0 0 .05rem var(--md-default-fg-color--lightest)}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.note){border-color:#448aff}.md-typeset :-moz-any(.admonition,details):-moz-any(.note){border-color:#448aff}.md-typeset :is(.admonition,details):is(.note){border-color:#448aff}.md-typeset :-webkit-any(.note)>:-webkit-any(.admonition-title,summary){background-color:rgba(68,138,255,.1)}.md-typeset :-moz-any(.note)>:-moz-any(.admonition-title,summary){background-color:rgba(68,138,255,.1)}.md-typeset :is(.note)>:is(.admonition-title,summary){background-color:rgba(68,138,255,.1)}.md-typeset :-webkit-any(.note)>:-webkit-any(.admonition-title,summary):before{background-color:#448aff;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note)}.md-typeset :-moz-any(.note)>:-moz-any(.admonition-title,summary):before{background-color:#448aff;mask-image:var(--md-admonition-icon--note)}.md-typeset :is(.note)>:is(.admonition-title,summary):before{background-color:#448aff;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note)}.md-typeset :-webkit-any(.note)>:-webkit-any(.admonition-title,summary):after{color:#448aff}.md-typeset :-moz-any(.note)>:-moz-any(.admonition-title,summary):after{color:#448aff}.md-typeset :is(.note)>:is(.admonition-title,summary):after{color:#448aff}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.abstract,.summary,.tldr){border-color:#00b0ff}.md-typeset :-moz-any(.admonition,details):-moz-any(.abstract,.summary,.tldr){border-color:#00b0ff}.md-typeset :is(.admonition,details):is(.abstract,.summary,.tldr){border-color:#00b0ff}.md-typeset :-webkit-any(.abstract,.summary,.tldr)>:-webkit-any(.admonition-title,summary){background-color:rgba(0,176,255,.1)}.md-typeset :-moz-any(.abstract,.summary,.tldr)>:-moz-any(.admonition-title,summary){background-color:rgba(0,176,255,.1)}.md-typeset :is(.abstract,.summary,.tldr)>:is(.admonition-title,summary){background-color:rgba(0,176,255,.1)}.md-typeset :-webkit-any(.abstract,.summary,.tldr)>:-webkit-any(.admonition-title,summary):before{background-color:#00b0ff;-webkit-mask-image:var(--md-admonition-icon--abstract);mask-image:var(--md-admonition-icon--abstract)}.md-typeset :-moz-any(.abstract,.summary,.tldr)>:-moz-any(.admonition-title,summary):before{background-color:#00b0ff;mask-image:var(--md-admonition-icon--abstract)}.md-typeset :is(.abstract,.summary,.tldr)>:is(.admonition-title,summary):before{background-color:#00b0ff;-webkit-mask-image:var(--md-admonition-icon--abstract);mask-image:var(--md-admonition-icon--abstract)}.md-typeset :-webkit-any(.abstract,.summary,.tldr)>:-webkit-any(.admonition-title,summary):after{color:#00b0ff}.md-typeset :-moz-any(.abstract,.summary,.tldr)>:-moz-any(.admonition-title,summary):after{color:#00b0ff}.md-typeset :is(.abstract,.summary,.tldr)>:is(.admonition-title,summary):after{color:#00b0ff}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.info,.todo){border-color:#00b8d4}.md-typeset :-moz-any(.admonition,details):-moz-any(.info,.todo){border-color:#00b8d4}.md-typeset :is(.admonition,details):is(.info,.todo){border-color:#00b8d4}.md-typeset :-webkit-any(.info,.todo)>:-webkit-any(.admonition-title,summary){background-color:rgba(0,184,212,.1)}.md-typeset :-moz-any(.info,.todo)>:-moz-any(.admonition-title,summary){background-color:rgba(0,184,212,.1)}.md-typeset :is(.info,.todo)>:is(.admonition-title,summary){background-color:rgba(0,184,212,.1)}.md-typeset :-webkit-any(.info,.todo)>:-webkit-any(.admonition-title,summary):before{background-color:#00b8d4;-webkit-mask-image:var(--md-admonition-icon--info);mask-image:var(--md-admonition-icon--info)}.md-typeset :-moz-any(.info,.todo)>:-moz-any(.admonition-title,summary):before{background-color:#00b8d4;mask-image:var(--md-admonition-icon--info)}.md-typeset :is(.info,.todo)>:is(.admonition-title,summary):before{background-color:#00b8d4;-webkit-mask-image:var(--md-admonition-icon--info);mask-image:var(--md-admonition-icon--info)}.md-typeset :-webkit-any(.info,.todo)>:-webkit-any(.admonition-title,summary):after{color:#00b8d4}.md-typeset :-moz-any(.info,.todo)>:-moz-any(.admonition-title,summary):after{color:#00b8d4}.md-typeset :is(.info,.todo)>:is(.admonition-title,summary):after{color:#00b8d4}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.tip,.hint,.important){border-color:#00bfa5}.md-typeset :-moz-any(.admonition,details):-moz-any(.tip,.hint,.important){border-color:#00bfa5}.md-typeset :is(.admonition,details):is(.tip,.hint,.important){border-color:#00bfa5}.md-typeset :-webkit-any(.tip,.hint,.important)>:-webkit-any(.admonition-title,summary){background-color:rgba(0,191,165,.1)}.md-typeset :-moz-any(.tip,.hint,.important)>:-moz-any(.admonition-title,summary){background-color:rgba(0,191,165,.1)}.md-typeset :is(.tip,.hint,.important)>:is(.admonition-title,summary){background-color:rgba(0,191,165,.1)}.md-typeset :-webkit-any(.tip,.hint,.important)>:-webkit-any(.admonition-title,summary):before{background-color:#00bfa5;-webkit-mask-image:var(--md-admonition-icon--tip);mask-image:var(--md-admonition-icon--tip)}.md-typeset :-moz-any(.tip,.hint,.important)>:-moz-any(.admonition-title,summary):before{background-color:#00bfa5;mask-image:var(--md-admonition-icon--tip)}.md-typeset :is(.tip,.hint,.important)>:is(.admonition-title,summary):before{background-color:#00bfa5;-webkit-mask-image:var(--md-admonition-icon--tip);mask-image:var(--md-admonition-icon--tip)}.md-typeset :-webkit-any(.tip,.hint,.important)>:-webkit-any(.admonition-title,summary):after{color:#00bfa5}.md-typeset :-moz-any(.tip,.hint,.important)>:-moz-any(.admonition-title,summary):after{color:#00bfa5}.md-typeset :is(.tip,.hint,.important)>:is(.admonition-title,summary):after{color:#00bfa5}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.success,.check,.done){border-color:#00c853}.md-typeset :-moz-any(.admonition,details):-moz-any(.success,.check,.done){border-color:#00c853}.md-typeset :is(.admonition,details):is(.success,.check,.done){border-color:#00c853}.md-typeset :-webkit-any(.success,.check,.done)>:-webkit-any(.admonition-title,summary){background-color:rgba(0,200,83,.1)}.md-typeset :-moz-any(.success,.check,.done)>:-moz-any(.admonition-title,summary){background-color:rgba(0,200,83,.1)}.md-typeset :is(.success,.check,.done)>:is(.admonition-title,summary){background-color:rgba(0,200,83,.1)}.md-typeset :-webkit-any(.success,.check,.done)>:-webkit-any(.admonition-title,summary):before{background-color:#00c853;-webkit-mask-image:var(--md-admonition-icon--success);mask-image:var(--md-admonition-icon--success)}.md-typeset :-moz-any(.success,.check,.done)>:-moz-any(.admonition-title,summary):before{background-color:#00c853;mask-image:var(--md-admonition-icon--success)}.md-typeset :is(.success,.check,.done)>:is(.admonition-title,summary):before{background-color:#00c853;-webkit-mask-image:var(--md-admonition-icon--success);mask-image:var(--md-admonition-icon--success)}.md-typeset :-webkit-any(.success,.check,.done)>:-webkit-any(.admonition-title,summary):after{color:#00c853}.md-typeset :-moz-any(.success,.check,.done)>:-moz-any(.admonition-title,summary):after{color:#00c853}.md-typeset :is(.success,.check,.done)>:is(.admonition-title,summary):after{color:#00c853}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.question,.help,.faq){border-color:#64dd17}.md-typeset :-moz-any(.admonition,details):-moz-any(.question,.help,.faq){border-color:#64dd17}.md-typeset :is(.admonition,details):is(.question,.help,.faq){border-color:#64dd17}.md-typeset :-webkit-any(.question,.help,.faq)>:-webkit-any(.admonition-title,summary){background-color:rgba(100,221,23,.1)}.md-typeset :-moz-any(.question,.help,.faq)>:-moz-any(.admonition-title,summary){background-color:rgba(100,221,23,.1)}.md-typeset :is(.question,.help,.faq)>:is(.admonition-title,summary){background-color:rgba(100,221,23,.1)}.md-typeset :-webkit-any(.question,.help,.faq)>:-webkit-any(.admonition-title,summary):before{background-color:#64dd17;-webkit-mask-image:var(--md-admonition-icon--question);mask-image:var(--md-admonition-icon--question)}.md-typeset :-moz-any(.question,.help,.faq)>:-moz-any(.admonition-title,summary):before{background-color:#64dd17;mask-image:var(--md-admonition-icon--question)}.md-typeset :is(.question,.help,.faq)>:is(.admonition-title,summary):before{background-color:#64dd17;-webkit-mask-image:var(--md-admonition-icon--question);mask-image:var(--md-admonition-icon--question)}.md-typeset :-webkit-any(.question,.help,.faq)>:-webkit-any(.admonition-title,summary):after{color:#64dd17}.md-typeset :-moz-any(.question,.help,.faq)>:-moz-any(.admonition-title,summary):after{color:#64dd17}.md-typeset :is(.question,.help,.faq)>:is(.admonition-title,summary):after{color:#64dd17}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.warning,.caution,.attention){border-color:#ff9100}.md-typeset :-moz-any(.admonition,details):-moz-any(.warning,.caution,.attention){border-color:#ff9100}.md-typeset :is(.admonition,details):is(.warning,.caution,.attention){border-color:#ff9100}.md-typeset :-webkit-any(.warning,.caution,.attention)>:-webkit-any(.admonition-title,summary){background-color:rgba(255,145,0,.1)}.md-typeset :-moz-any(.warning,.caution,.attention)>:-moz-any(.admonition-title,summary){background-color:rgba(255,145,0,.1)}.md-typeset :is(.warning,.caution,.attention)>:is(.admonition-title,summary){background-color:rgba(255,145,0,.1)}.md-typeset :-webkit-any(.warning,.caution,.attention)>:-webkit-any(.admonition-title,summary):before{background-color:#ff9100;-webkit-mask-image:var(--md-admonition-icon--warning);mask-image:var(--md-admonition-icon--warning)}.md-typeset :-moz-any(.warning,.caution,.attention)>:-moz-any(.admonition-title,summary):before{background-color:#ff9100;mask-image:var(--md-admonition-icon--warning)}.md-typeset :is(.warning,.caution,.attention)>:is(.admonition-title,summary):before{background-color:#ff9100;-webkit-mask-image:var(--md-admonition-icon--warning);mask-image:var(--md-admonition-icon--warning)}.md-typeset :-webkit-any(.warning,.caution,.attention)>:-webkit-any(.admonition-title,summary):after{color:#ff9100}.md-typeset :-moz-any(.warning,.caution,.attention)>:-moz-any(.admonition-title,summary):after{color:#ff9100}.md-typeset :is(.warning,.caution,.attention)>:is(.admonition-title,summary):after{color:#ff9100}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.failure,.fail,.missing){border-color:#ff5252}.md-typeset :-moz-any(.admonition,details):-moz-any(.failure,.fail,.missing){border-color:#ff5252}.md-typeset :is(.admonition,details):is(.failure,.fail,.missing){border-color:#ff5252}.md-typeset :-webkit-any(.failure,.fail,.missing)>:-webkit-any(.admonition-title,summary){background-color:rgba(255,82,82,.1)}.md-typeset :-moz-any(.failure,.fail,.missing)>:-moz-any(.admonition-title,summary){background-color:rgba(255,82,82,.1)}.md-typeset :is(.failure,.fail,.missing)>:is(.admonition-title,summary){background-color:rgba(255,82,82,.1)}.md-typeset :-webkit-any(.failure,.fail,.missing)>:-webkit-any(.admonition-title,summary):before{background-color:#ff5252;-webkit-mask-image:var(--md-admonition-icon--failure);mask-image:var(--md-admonition-icon--failure)}.md-typeset :-moz-any(.failure,.fail,.missing)>:-moz-any(.admonition-title,summary):before{background-color:#ff5252;mask-image:var(--md-admonition-icon--failure)}.md-typeset :is(.failure,.fail,.missing)>:is(.admonition-title,summary):before{background-color:#ff5252;-webkit-mask-image:var(--md-admonition-icon--failure);mask-image:var(--md-admonition-icon--failure)}.md-typeset :-webkit-any(.failure,.fail,.missing)>:-webkit-any(.admonition-title,summary):after{color:#ff5252}.md-typeset :-moz-any(.failure,.fail,.missing)>:-moz-any(.admonition-title,summary):after{color:#ff5252}.md-typeset :is(.failure,.fail,.missing)>:is(.admonition-title,summary):after{color:#ff5252}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.danger,.error){border-color:#ff1744}.md-typeset :-moz-any(.admonition,details):-moz-any(.danger,.error){border-color:#ff1744}.md-typeset :is(.admonition,details):is(.danger,.error){border-color:#ff1744}.md-typeset :-webkit-any(.danger,.error)>:-webkit-any(.admonition-title,summary){background-color:rgba(255,23,68,.1)}.md-typeset :-moz-any(.danger,.error)>:-moz-any(.admonition-title,summary){background-color:rgba(255,23,68,.1)}.md-typeset :is(.danger,.error)>:is(.admonition-title,summary){background-color:rgba(255,23,68,.1)}.md-typeset :-webkit-any(.danger,.error)>:-webkit-any(.admonition-title,summary):before{background-color:#ff1744;-webkit-mask-image:var(--md-admonition-icon--danger);mask-image:var(--md-admonition-icon--danger)}.md-typeset :-moz-any(.danger,.error)>:-moz-any(.admonition-title,summary):before{background-color:#ff1744;mask-image:var(--md-admonition-icon--danger)}.md-typeset :is(.danger,.error)>:is(.admonition-title,summary):before{background-color:#ff1744;-webkit-mask-image:var(--md-admonition-icon--danger);mask-image:var(--md-admonition-icon--danger)}.md-typeset :-webkit-any(.danger,.error)>:-webkit-any(.admonition-title,summary):after{color:#ff1744}.md-typeset :-moz-any(.danger,.error)>:-moz-any(.admonition-title,summary):after{color:#ff1744}.md-typeset :is(.danger,.error)>:is(.admonition-title,summary):after{color:#ff1744}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.bug){border-color:#f50057}.md-typeset :-moz-any(.admonition,details):-moz-any(.bug){border-color:#f50057}.md-typeset :is(.admonition,details):is(.bug){border-color:#f50057}.md-typeset :-webkit-any(.bug)>:-webkit-any(.admonition-title,summary){background-color:rgba(245,0,87,.1)}.md-typeset :-moz-any(.bug)>:-moz-any(.admonition-title,summary){background-color:rgba(245,0,87,.1)}.md-typeset :is(.bug)>:is(.admonition-title,summary){background-color:rgba(245,0,87,.1)}.md-typeset :-webkit-any(.bug)>:-webkit-any(.admonition-title,summary):before{background-color:#f50057;-webkit-mask-image:var(--md-admonition-icon--bug);mask-image:var(--md-admonition-icon--bug)}.md-typeset :-moz-any(.bug)>:-moz-any(.admonition-title,summary):before{background-color:#f50057;mask-image:var(--md-admonition-icon--bug)}.md-typeset :is(.bug)>:is(.admonition-title,summary):before{background-color:#f50057;-webkit-mask-image:var(--md-admonition-icon--bug);mask-image:var(--md-admonition-icon--bug)}.md-typeset :-webkit-any(.bug)>:-webkit-any(.admonition-title,summary):after{color:#f50057}.md-typeset :-moz-any(.bug)>:-moz-any(.admonition-title,summary):after{color:#f50057}.md-typeset :is(.bug)>:is(.admonition-title,summary):after{color:#f50057}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.example){border-color:#7c4dff}.md-typeset :-moz-any(.admonition,details):-moz-any(.example){border-color:#7c4dff}.md-typeset :is(.admonition,details):is(.example){border-color:#7c4dff}.md-typeset :-webkit-any(.example)>:-webkit-any(.admonition-title,summary){background-color:rgba(124,77,255,.1)}.md-typeset :-moz-any(.example)>:-moz-any(.admonition-title,summary){background-color:rgba(124,77,255,.1)}.md-typeset :is(.example)>:is(.admonition-title,summary){background-color:rgba(124,77,255,.1)}.md-typeset :-webkit-any(.example)>:-webkit-any(.admonition-title,summary):before{background-color:#7c4dff;-webkit-mask-image:var(--md-admonition-icon--example);mask-image:var(--md-admonition-icon--example)}.md-typeset :-moz-any(.example)>:-moz-any(.admonition-title,summary):before{background-color:#7c4dff;mask-image:var(--md-admonition-icon--example)}.md-typeset :is(.example)>:is(.admonition-title,summary):before{background-color:#7c4dff;-webkit-mask-image:var(--md-admonition-icon--example);mask-image:var(--md-admonition-icon--example)}.md-typeset :-webkit-any(.example)>:-webkit-any(.admonition-title,summary):after{color:#7c4dff}.md-typeset :-moz-any(.example)>:-moz-any(.admonition-title,summary):after{color:#7c4dff}.md-typeset :is(.example)>:is(.admonition-title,summary):after{color:#7c4dff}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.quote,.cite){border-color:#9e9e9e}.md-typeset :-moz-any(.admonition,details):-moz-any(.quote,.cite){border-color:#9e9e9e}.md-typeset :is(.admonition,details):is(.quote,.cite){border-color:#9e9e9e}.md-typeset :-webkit-any(.quote,.cite)>:-webkit-any(.admonition-title,summary){background-color:hsla(0,0%,62%,.1)}.md-typeset :-moz-any(.quote,.cite)>:-moz-any(.admonition-title,summary){background-color:hsla(0,0%,62%,.1)}.md-typeset :is(.quote,.cite)>:is(.admonition-title,summary){background-color:hsla(0,0%,62%,.1)}.md-typeset :-webkit-any(.quote,.cite)>:-webkit-any(.admonition-title,summary):before{background-color:#9e9e9e;-webkit-mask-image:var(--md-admonition-icon--quote);mask-image:var(--md-admonition-icon--quote)}.md-typeset :-moz-any(.quote,.cite)>:-moz-any(.admonition-title,summary):before{background-color:#9e9e9e;mask-image:var(--md-admonition-icon--quote)}.md-typeset :is(.quote,.cite)>:is(.admonition-title,summary):before{background-color:#9e9e9e;-webkit-mask-image:var(--md-admonition-icon--quote);mask-image:var(--md-admonition-icon--quote)}.md-typeset :-webkit-any(.quote,.cite)>:-webkit-any(.admonition-title,summary):after{color:#9e9e9e}.md-typeset :-moz-any(.quote,.cite)>:-moz-any(.admonition-title,summary):after{color:#9e9e9e}.md-typeset :is(.quote,.cite)>:is(.admonition-title,summary):after{color:#9e9e9e}:root{--md-footnotes-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .footnote{color:var(--md-default-fg-color--light);font-size:.64rem}[dir=ltr] .md-typeset .footnote>ol{margin-left:0}[dir=rtl] .md-typeset .footnote>ol{margin-right:0}.md-typeset .footnote>ol>li{transition:color 125ms}.md-typeset .footnote>ol>li:target{color:var(--md-default-fg-color)}.md-typeset .footnote>ol>li:focus-within .footnote-backref{opacity:1;transform:translateX(0);transition:none}.md-typeset .footnote>ol>li:-webkit-any(:hover,:target) .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li:-moz-any(:hover,:target) .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li:is(:hover,:target) .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li>:first-child{margin-top:0}.md-typeset .footnote-ref{font-size:.75em;font-weight:700}html .md-typeset .footnote-ref{outline-offset:.1rem}.md-typeset [id^="fnref:"]:target>.footnote-ref{outline:auto}.md-typeset .footnote-backref{color:var(--md-typeset-a-color);display:inline-block;font-size:0;opacity:0;transform:translateX(.25rem);transition:color .25s,transform .25s .25s,opacity 125ms .25s;vertical-align:text-bottom}@media print{.md-typeset .footnote-backref{color:var(--md-typeset-a-color);opacity:1;transform:translateX(0)}}[dir=rtl] .md-typeset .footnote-backref{transform:translateX(-.25rem)}.md-typeset .footnote-backref:hover{color:var(--md-accent-fg-color)}.md-typeset .footnote-backref:before{background-color:currentcolor;content:"";display:inline-block;height:.8rem;-webkit-mask-image:var(--md-footnotes-icon);mask-image:var(--md-footnotes-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.8rem}[dir=rtl] .md-typeset .footnote-backref:before svg{transform:scaleX(-1)}[dir=ltr] .md-typeset .headerlink{margin-left:.5rem}[dir=rtl] .md-typeset .headerlink{margin-right:.5rem}.md-typeset .headerlink{color:var(--md-default-fg-color--lighter);display:inline-block;opacity:0;transition:color .25s,opacity 125ms}@media print{.md-typeset .headerlink{display:none}}.md-typeset .headerlink:focus,.md-typeset :-webkit-any(:hover,:target)>.headerlink{opacity:1;-webkit-transition:color .25s,opacity 125ms;transition:color .25s,opacity 125ms}.md-typeset .headerlink:focus,.md-typeset :-moz-any(:hover,:target)>.headerlink{opacity:1;-moz-transition:color .25s,opacity 125ms;transition:color .25s,opacity 125ms}.md-typeset .headerlink:focus,.md-typeset :is(:hover,:target)>.headerlink{opacity:1;transition:color .25s,opacity 125ms}.md-typeset .headerlink:-webkit-any(:focus,:hover),.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset .headerlink:-moz-any(:focus,:hover),.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset .headerlink:is(:focus,:hover),.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset :target{--md-scroll-margin:3.6rem;--md-scroll-offset:0rem;scroll-margin-top:calc(var(--md-scroll-margin) - var(--md-scroll-offset))}@media screen and (min-width:76.25em){.md-header--lifted~.md-container .md-typeset :target{--md-scroll-margin:6rem}}.md-typeset :-webkit-any(h1,h2,h3):target{--md-scroll-offset:0.2rem}.md-typeset :-moz-any(h1,h2,h3):target{--md-scroll-offset:0.2rem}.md-typeset :is(h1,h2,h3):target{--md-scroll-offset:0.2rem}.md-typeset h4:target{--md-scroll-offset:0.15rem}.md-typeset div.arithmatex{overflow:auto}@media screen and (max-width:44.9375em){.md-typeset div.arithmatex{margin:0 -.8rem}}.md-typeset div.arithmatex>*{margin-left:auto!important;margin-right:auto!important;padding:0 .8rem;touch-action:auto;width:-webkit-min-content;width:-moz-min-content;width:min-content}.md-typeset div.arithmatex>* mjx-container{margin:0!important}.md-typeset :-webkit-any(del,ins,.comment).critic{-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset :-moz-any(del,ins,.comment).critic{box-decoration-break:clone}.md-typeset :is(del,ins,.comment).critic{-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset del.critic{background-color:var(--md-typeset-del-color)}.md-typeset ins.critic{background-color:var(--md-typeset-ins-color)}.md-typeset .critic.comment{color:var(--md-code-hl-comment-color)}.md-typeset .critic.comment:before{content:"/* "}.md-typeset .critic.comment:after{content:" */"}.md-typeset .critic.block{box-shadow:none;display:block;margin:1em 0;overflow:auto;padding-left:.8rem;padding-right:.8rem}.md-typeset .critic.block>:first-child{margin-top:.5em}.md-typeset .critic.block>:last-child{margin-bottom:.5em}:root{--md-details-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset details{display:flow-root;overflow:visible;padding-top:0}.md-typeset details[open]>summary:after{transform:rotate(90deg)}.md-typeset details:not([open]){box-shadow:none;padding-bottom:0}.md-typeset details:not([open])>summary{border-radius:.1rem}[dir=ltr] .md-typeset summary{padding-right:1.8rem}[dir=rtl] .md-typeset summary{padding-left:1.8rem}[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset summary{cursor:pointer;display:block;min-height:1rem}.md-typeset summary.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset summary:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[dir=ltr] .md-typeset summary:after{right:.4rem}[dir=rtl] .md-typeset summary:after{left:.4rem}.md-typeset summary:after{background-color:currentcolor;content:"";height:1rem;-webkit-mask-image:var(--md-details-icon);mask-image:var(--md-details-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;transform:rotate(0deg);transition:transform .25s;width:1rem}[dir=rtl] .md-typeset summary:after{transform:rotate(180deg)}.md-typeset summary::marker{display:none}.md-typeset summary::-webkit-details-marker{display:none}.md-typeset :-webkit-any(.emojione,.twemoji,.gemoji){display:inline-flex;height:1.125em;vertical-align:text-top}.md-typeset :-moz-any(.emojione,.twemoji,.gemoji){display:inline-flex;height:1.125em;vertical-align:text-top}.md-typeset :is(.emojione,.twemoji,.gemoji){display:inline-flex;height:1.125em;vertical-align:text-top}.md-typeset :-webkit-any(.emojione,.twemoji,.gemoji) svg{fill:currentcolor;max-height:100%;width:1.125em}.md-typeset :-moz-any(.emojione,.twemoji,.gemoji) svg{fill:currentcolor;max-height:100%;width:1.125em}.md-typeset :is(.emojione,.twemoji,.gemoji) svg{fill:currentcolor;max-height:100%;width:1.125em}.highlight :-webkit-any(.o,.ow){color:var(--md-code-hl-operator-color)}.highlight :-moz-any(.o,.ow){color:var(--md-code-hl-operator-color)}.highlight :is(.o,.ow){color:var(--md-code-hl-operator-color)}.highlight .p{color:var(--md-code-hl-punctuation-color)}.highlight :-webkit-any(.cpf,.l,.s,.sb,.sc,.s2,.si,.s1,.ss){color:var(--md-code-hl-string-color)}.highlight :-moz-any(.cpf,.l,.s,.sb,.sc,.s2,.si,.s1,.ss){color:var(--md-code-hl-string-color)}.highlight :is(.cpf,.l,.s,.sb,.sc,.s2,.si,.s1,.ss){color:var(--md-code-hl-string-color)}.highlight :-webkit-any(.cp,.se,.sh,.sr,.sx){color:var(--md-code-hl-special-color)}.highlight :-moz-any(.cp,.se,.sh,.sr,.sx){color:var(--md-code-hl-special-color)}.highlight :is(.cp,.se,.sh,.sr,.sx){color:var(--md-code-hl-special-color)}.highlight :-webkit-any(.m,.mb,.mf,.mh,.mi,.il,.mo){color:var(--md-code-hl-number-color)}.highlight :-moz-any(.m,.mb,.mf,.mh,.mi,.il,.mo){color:var(--md-code-hl-number-color)}.highlight :is(.m,.mb,.mf,.mh,.mi,.il,.mo){color:var(--md-code-hl-number-color)}.highlight :-webkit-any(.k,.kd,.kn,.kp,.kr,.kt){color:var(--md-code-hl-keyword-color)}.highlight :-moz-any(.k,.kd,.kn,.kp,.kr,.kt){color:var(--md-code-hl-keyword-color)}.highlight :is(.k,.kd,.kn,.kp,.kr,.kt){color:var(--md-code-hl-keyword-color)}.highlight :-webkit-any(.kc,.n){color:var(--md-code-hl-name-color)}.highlight :-moz-any(.kc,.n){color:var(--md-code-hl-name-color)}.highlight :is(.kc,.n){color:var(--md-code-hl-name-color)}.highlight :-webkit-any(.no,.nb,.bp){color:var(--md-code-hl-constant-color)}.highlight :-moz-any(.no,.nb,.bp){color:var(--md-code-hl-constant-color)}.highlight :is(.no,.nb,.bp){color:var(--md-code-hl-constant-color)}.highlight :-webkit-any(.nc,.ne,.nf,.nn){color:var(--md-code-hl-function-color)}.highlight :-moz-any(.nc,.ne,.nf,.nn){color:var(--md-code-hl-function-color)}.highlight :is(.nc,.ne,.nf,.nn){color:var(--md-code-hl-function-color)}.highlight :-webkit-any(.nd,.ni,.nl,.nt){color:var(--md-code-hl-keyword-color)}.highlight :-moz-any(.nd,.ni,.nl,.nt){color:var(--md-code-hl-keyword-color)}.highlight :is(.nd,.ni,.nl,.nt){color:var(--md-code-hl-keyword-color)}.highlight :-webkit-any(.c,.cm,.c1,.ch,.cs,.sd){color:var(--md-code-hl-comment-color)}.highlight :-moz-any(.c,.cm,.c1,.ch,.cs,.sd){color:var(--md-code-hl-comment-color)}.highlight :is(.c,.cm,.c1,.ch,.cs,.sd){color:var(--md-code-hl-comment-color)}.highlight :-webkit-any(.na,.nv,.vc,.vg,.vi){color:var(--md-code-hl-variable-color)}.highlight :-moz-any(.na,.nv,.vc,.vg,.vi){color:var(--md-code-hl-variable-color)}.highlight :is(.na,.nv,.vc,.vg,.vi){color:var(--md-code-hl-variable-color)}.highlight :-webkit-any(.ge,.gr,.gh,.go,.gp,.gs,.gu,.gt){color:var(--md-code-hl-generic-color)}.highlight :-moz-any(.ge,.gr,.gh,.go,.gp,.gs,.gu,.gt){color:var(--md-code-hl-generic-color)}.highlight :is(.ge,.gr,.gh,.go,.gp,.gs,.gu,.gt){color:var(--md-code-hl-generic-color)}.highlight :-webkit-any(.gd,.gi){border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight :-moz-any(.gd,.gi){border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight :is(.gd,.gi){border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight .gd{background-color:var(--md-typeset-del-color)}.highlight .gi{background-color:var(--md-typeset-ins-color)}.highlight .hll{background-color:var(--md-code-hl-color);display:block;margin:0 -1.1764705882em;padding:0 1.1764705882em}.highlight span.filename{background-color:var(--md-code-bg-color);border-bottom:.05rem solid var(--md-default-fg-color--lightest);border-top-left-radius:.1rem;border-top-right-radius:.1rem;display:flow-root;font-size:.85em;font-weight:700;margin-top:1em;padding:.6617647059em 1.1764705882em;position:relative}.highlight span.filename+pre{margin-top:0}.highlight span.filename+pre>code{border-top-left-radius:0;border-top-right-radius:0}.highlight [data-linenos]:before{background-color:var(--md-code-bg-color);box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;color:var(--md-default-fg-color--light);content:attr(data-linenos);float:left;left:-1.1764705882em;margin-left:-1.1764705882em;margin-right:1.1764705882em;padding-left:1.1764705882em;position:-webkit-sticky;position:sticky;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:3}.highlight code a[id]{position:absolute;visibility:hidden}.highlight code[data-md-copying] .hll{display:contents}.highlight code[data-md-copying] .md-annotation{display:none}.highlighttable{display:flow-root}.highlighttable :-webkit-any(tbody,td){display:block;padding:0}.highlighttable :-moz-any(tbody,td){display:block;padding:0}.highlighttable :is(tbody,td){display:block;padding:0}.highlighttable tr{display:flex}.highlighttable pre{margin:0}.highlighttable th.filename{flex-grow:1;padding:0;text-align:left}.highlighttable th.filename span.filename{margin-top:0}.highlighttable .linenos{background-color:var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-top-left-radius:.1rem;font-size:.85em;padding:.7720588235em 0 .7720588235em 1.1764705882em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.highlighttable .linenodiv{box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;padding-right:.5882352941em}.highlighttable .linenodiv pre{color:var(--md-default-fg-color--light);text-align:right}.highlighttable .code{flex:1;min-width:0}.linenodiv a{color:inherit}.md-typeset .highlighttable{direction:ltr;margin:1em 0}.md-typeset .highlighttable>tbody>tr>.code>div>pre>code{border-bottom-left-radius:0;border-top-left-radius:0}.md-typeset .highlight+.result{border:.05rem solid var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-bottom-right-radius:.1rem;border-top-width:.1rem;margin-top:-1.125em;overflow:visible;padding:0 1em}.md-typeset .highlight+.result:after{clear:both;content:"";display:block}@media screen and (max-width:44.9375em){.md-content__inner>.highlight{margin:1em -.8rem}.md-content__inner>.highlight>.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.code>div>pre>code,.md-content__inner>.highlight>.highlighttable>tbody>tr>.filename span.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.linenos,.md-content__inner>.highlight>pre>code{border-radius:0}.md-content__inner>.highlight+.result{border-left-width:0;border-radius:0;border-right-width:0;margin-left:-.8rem;margin-right:-.8rem}}.md-typeset .keys kbd:-webkit-any(:before,:after){-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys kbd:-moz-any(:before,:after){-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys kbd:is(:before,:after){-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys span{color:var(--md-default-fg-color--light);padding:0 .2em}.md-typeset .keys .key-alt:before,.md-typeset .keys .key-left-alt:before,.md-typeset .keys .key-right-alt:before{content:"⎇";padding-right:.4em}.md-typeset .keys .key-command:before,.md-typeset .keys .key-left-command:before,.md-typeset .keys .key-right-command:before{content:"⌘";padding-right:.4em}.md-typeset .keys .key-control:before,.md-typeset .keys .key-left-control:before,.md-typeset .keys .key-right-control:before{content:"⌃";padding-right:.4em}.md-typeset .keys .key-left-meta:before,.md-typeset .keys .key-meta:before,.md-typeset .keys .key-right-meta:before{content:"◆";padding-right:.4em}.md-typeset .keys .key-left-option:before,.md-typeset .keys .key-option:before,.md-typeset .keys .key-right-option:before{content:"⌥";padding-right:.4em}.md-typeset .keys .key-left-shift:before,.md-typeset .keys .key-right-shift:before,.md-typeset .keys .key-shift:before{content:"⇧";padding-right:.4em}.md-typeset .keys .key-left-super:before,.md-typeset .keys .key-right-super:before,.md-typeset .keys .key-super:before{content:"❖";padding-right:.4em}.md-typeset .keys .key-left-windows:before,.md-typeset .keys .key-right-windows:before,.md-typeset .keys .key-windows:before{content:"⊞";padding-right:.4em}.md-typeset .keys .key-arrow-down:before{content:"↓";padding-right:.4em}.md-typeset .keys .key-arrow-left:before{content:"←";padding-right:.4em}.md-typeset .keys .key-arrow-right:before{content:"→";padding-right:.4em}.md-typeset .keys .key-arrow-up:before{content:"↑";padding-right:.4em}.md-typeset .keys .key-backspace:before{content:"⌫";padding-right:.4em}.md-typeset .keys .key-backtab:before{content:"⇤";padding-right:.4em}.md-typeset .keys .key-caps-lock:before{content:"⇪";padding-right:.4em}.md-typeset .keys .key-clear:before{content:"⌧";padding-right:.4em}.md-typeset .keys .key-context-menu:before{content:"☰";padding-right:.4em}.md-typeset .keys .key-delete:before{content:"⌦";padding-right:.4em}.md-typeset .keys .key-eject:before{content:"⏏";padding-right:.4em}.md-typeset .keys .key-end:before{content:"⤓";padding-right:.4em}.md-typeset .keys .key-escape:before{content:"⎋";padding-right:.4em}.md-typeset .keys .key-home:before{content:"⤒";padding-right:.4em}.md-typeset .keys .key-insert:before{content:"⎀";padding-right:.4em}.md-typeset .keys .key-page-down:before{content:"⇟";padding-right:.4em}.md-typeset .keys .key-page-up:before{content:"⇞";padding-right:.4em}.md-typeset .keys .key-print-screen:before{content:"⎙";padding-right:.4em}.md-typeset .keys .key-tab:after{content:"⇥";padding-left:.4em}.md-typeset .keys .key-num-enter:after{content:"⌤";padding-left:.4em}.md-typeset .keys .key-enter:after{content:"⏎";padding-left:.4em}:root{--md-tabbed-icon--prev:url('data:image/svg+xml;charset=utf-8,');--md-tabbed-icon--next:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .tabbed-set{border-radius:.1rem;display:flex;flex-flow:column wrap;margin:1em 0;position:relative}.md-typeset .tabbed-set>input{height:0;opacity:0;position:absolute;width:0}.md-typeset .tabbed-set>input:target{--md-scroll-offset:0.625em}.md-typeset .tabbed-labels{-ms-overflow-style:none;box-shadow:0 -.05rem var(--md-default-fg-color--lightest) inset;display:flex;max-width:100%;overflow:auto;scrollbar-width:none}@media print{.md-typeset .tabbed-labels{display:contents}}@media screen{.js .md-typeset .tabbed-labels{position:relative}.js .md-typeset .tabbed-labels:before{background:var(--md-accent-fg-color);bottom:0;content:"";display:block;height:2px;left:0;position:absolute;transform:translateX(var(--md-indicator-x));transition:width 225ms,transform .25s;transition-timing-function:cubic-bezier(.4,0,.2,1);width:var(--md-indicator-width)}}.md-typeset .tabbed-labels::-webkit-scrollbar{display:none}.md-typeset .tabbed-labels>label{border-bottom:.1rem solid transparent;border-radius:.1rem .1rem 0 0;color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;font-size:.64rem;font-weight:700;padding:.78125em 1.25em .625em;scroll-margin-inline-start:1rem;transition:background-color .25s,color .25s;white-space:nowrap;width:auto}@media print{.md-typeset .tabbed-labels>label:first-child{order:1}.md-typeset .tabbed-labels>label:nth-child(2){order:2}.md-typeset .tabbed-labels>label:nth-child(3){order:3}.md-typeset .tabbed-labels>label:nth-child(4){order:4}.md-typeset .tabbed-labels>label:nth-child(5){order:5}.md-typeset .tabbed-labels>label:nth-child(6){order:6}.md-typeset .tabbed-labels>label:nth-child(7){order:7}.md-typeset .tabbed-labels>label:nth-child(8){order:8}.md-typeset .tabbed-labels>label:nth-child(9){order:9}.md-typeset .tabbed-labels>label:nth-child(10){order:10}.md-typeset .tabbed-labels>label:nth-child(11){order:11}.md-typeset .tabbed-labels>label:nth-child(12){order:12}.md-typeset .tabbed-labels>label:nth-child(13){order:13}.md-typeset .tabbed-labels>label:nth-child(14){order:14}.md-typeset .tabbed-labels>label:nth-child(15){order:15}.md-typeset .tabbed-labels>label:nth-child(16){order:16}.md-typeset .tabbed-labels>label:nth-child(17){order:17}.md-typeset .tabbed-labels>label:nth-child(18){order:18}.md-typeset .tabbed-labels>label:nth-child(19){order:19}.md-typeset .tabbed-labels>label:nth-child(20){order:20}}.md-typeset .tabbed-labels>label:hover{color:var(--md-accent-fg-color)}.md-typeset .tabbed-content{width:100%}@media print{.md-typeset .tabbed-content{display:contents}}.md-typeset .tabbed-block{display:none}@media print{.md-typeset .tabbed-block{display:block}.md-typeset .tabbed-block:first-child{order:1}.md-typeset .tabbed-block:nth-child(2){order:2}.md-typeset .tabbed-block:nth-child(3){order:3}.md-typeset .tabbed-block:nth-child(4){order:4}.md-typeset .tabbed-block:nth-child(5){order:5}.md-typeset .tabbed-block:nth-child(6){order:6}.md-typeset .tabbed-block:nth-child(7){order:7}.md-typeset .tabbed-block:nth-child(8){order:8}.md-typeset .tabbed-block:nth-child(9){order:9}.md-typeset .tabbed-block:nth-child(10){order:10}.md-typeset .tabbed-block:nth-child(11){order:11}.md-typeset .tabbed-block:nth-child(12){order:12}.md-typeset .tabbed-block:nth-child(13){order:13}.md-typeset .tabbed-block:nth-child(14){order:14}.md-typeset .tabbed-block:nth-child(15){order:15}.md-typeset .tabbed-block:nth-child(16){order:16}.md-typeset .tabbed-block:nth-child(17){order:17}.md-typeset .tabbed-block:nth-child(18){order:18}.md-typeset .tabbed-block:nth-child(19){order:19}.md-typeset .tabbed-block:nth-child(20){order:20}}.md-typeset .tabbed-block>.highlight:first-child>pre,.md-typeset .tabbed-block>pre:first-child{margin:0}.md-typeset .tabbed-block>.highlight:first-child>pre>code,.md-typeset .tabbed-block>pre:first-child>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child>.filename{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable{margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.filename span.filename,.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.linenos{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.code>div>pre>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child+.result{margin-top:-.125em}.md-typeset .tabbed-block>.tabbed-set{margin:0}.md-typeset .tabbed-button{align-self:center;border-radius:100%;color:var(--md-default-fg-color--light);cursor:pointer;display:block;height:.9rem;margin-top:.1rem;pointer-events:auto;transition:background-color .25s;width:.9rem}.md-typeset .tabbed-button:hover{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-typeset .tabbed-button:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-tabbed-icon--prev);mask-image:var(--md-tabbed-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color .25s,transform .25s;width:100%}.md-typeset .tabbed-control{background:linear-gradient(to right,var(--md-default-bg-color) 60%,transparent);display:flex;height:1.9rem;justify-content:start;pointer-events:none;position:absolute;transition:opacity 125ms;width:1.2rem}[dir=rtl] .md-typeset .tabbed-control{transform:rotate(180deg)}.md-typeset .tabbed-control[hidden]{opacity:0}.md-typeset .tabbed-control--next{background:linear-gradient(to left,var(--md-default-bg-color) 60%,transparent);justify-content:end;right:0}.md-typeset .tabbed-control--next .tabbed-button:after{-webkit-mask-image:var(--md-tabbed-icon--next);mask-image:var(--md-tabbed-icon--next)}@media screen and (max-width:44.9375em){[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels{padding-right:.8rem}.md-content__inner>.tabbed-set .tabbed-labels{margin:0 -.8rem;max-width:100vw;scroll-padding-inline-start:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-left:.8rem}.md-content__inner>.tabbed-set .tabbed-labels:after{content:""}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-left:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-right:-.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-right:.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{width:2rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-right:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-left:-.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-left:.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{width:2rem}}@media screen{.md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){color:var(--md-accent-fg-color)}.md-typeset .no-js .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .no-js .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .no-js .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .no-js .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .no-js .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .no-js .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .no-js .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .no-js .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .no-js .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .no-js .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .no-js .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .no-js .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .no-js .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .no-js .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .no-js .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .no-js .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .no-js .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .no-js .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .no-js .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .no-js .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9),.no-js .md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.no-js .md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.no-js .md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.no-js .md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.no-js .md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.no-js .md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.no-js .md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.no-js .md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.no-js .md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.no-js .md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.no-js .md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.no-js .md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.no-js .md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.no-js .md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.no-js .md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.no-js .md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.no-js .md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.no-js .md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.no-js .md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.no-js .md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){border-color:var(--md-accent-fg-color)}}.md-typeset .tabbed-set>input:first-child.focus-visible~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10).focus-visible~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11).focus-visible~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12).focus-visible~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13).focus-visible~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14).focus-visible~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15).focus-visible~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16).focus-visible~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17).focus-visible~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18).focus-visible~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19).focus-visible~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2).focus-visible~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20).focus-visible~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3).focus-visible~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4).focus-visible~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5).focus-visible~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6).focus-visible~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7).focus-visible~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8).focus-visible~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9).focus-visible~.tabbed-labels>:nth-child(9){background-color:var(--md-accent-fg-color--transparent)}.md-typeset .tabbed-set>input:first-child:checked~.tabbed-content>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-content>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-content>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-content>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-content>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-content>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-content>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-content>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-content>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-content>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-content>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-content>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-content>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-content>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-content>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-content>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-content>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-content>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-content>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-content>:nth-child(9){display:block}:root{--md-tasklist-icon:url('data:image/svg+xml;charset=utf-8,');--md-tasklist-icon--checked:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .task-list-item{list-style-type:none;position:relative}[dir=ltr] .md-typeset .task-list-item [type=checkbox]{left:-2em}[dir=rtl] .md-typeset .task-list-item [type=checkbox]{right:-2em}.md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em}.md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}[dir=ltr] .md-typeset .task-list-indicator:before{left:-1.5em}[dir=rtl] .md-typeset .task-list-indicator:before{right:-1.5em}.md-typeset .task-list-indicator:before{background-color:var(--md-default-fg-color--lightest);content:"";height:1.25em;-webkit-mask-image:var(--md-tasklist-icon);mask-image:var(--md-tasklist-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.15em;width:1.25em}.md-typeset [type=checkbox]:checked+.task-list-indicator:before{background-color:#00e676;-webkit-mask-image:var(--md-tasklist-icon--checked);mask-image:var(--md-tasklist-icon--checked)}:root>*{--md-mermaid-font-family:var(--md-text-font-family),sans-serif;--md-mermaid-edge-color:var(--md-code-fg-color);--md-mermaid-node-bg-color:var(--md-accent-fg-color--transparent);--md-mermaid-node-fg-color:var(--md-accent-fg-color);--md-mermaid-label-bg-color:var(--md-default-bg-color);--md-mermaid-label-fg-color:var(--md-code-fg-color)}.mermaid{line-height:normal;margin:1em 0}@media screen and (min-width:45em){[dir=ltr] .md-typeset .inline{float:left}[dir=rtl] .md-typeset .inline{float:right}[dir=ltr] .md-typeset .inline{margin-right:.8rem}[dir=rtl] .md-typeset .inline{margin-left:.8rem}.md-typeset .inline{margin-bottom:.8rem;margin-top:0;width:11.7rem}[dir=ltr] .md-typeset .inline.end{float:right}[dir=rtl] .md-typeset .inline.end{float:left}[dir=ltr] .md-typeset .inline.end{margin-left:.8rem;margin-right:0}[dir=rtl] .md-typeset .inline.end{margin-left:0;margin-right:.8rem}} \ No newline at end of file diff --git a/assets/stylesheets/main.20d9efc8.min.css.map b/assets/stylesheets/main.20d9efc8.min.css.map new file mode 100644 index 00000000..5247bacd --- /dev/null +++ b/assets/stylesheets/main.20d9efc8.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["src/assets/stylesheets/main/extensions/pymdownx/_keys.scss","../../../src/assets/stylesheets/main.scss","src/assets/stylesheets/main/_resets.scss","src/assets/stylesheets/main/_colors.scss","src/assets/stylesheets/main/_icons.scss","src/assets/stylesheets/main/_typeset.scss","src/assets/stylesheets/utilities/_break.scss","src/assets/stylesheets/main/layout/_banner.scss","src/assets/stylesheets/main/layout/_base.scss","src/assets/stylesheets/main/layout/_clipboard.scss","src/assets/stylesheets/main/layout/_consent.scss","src/assets/stylesheets/main/layout/_content.scss","src/assets/stylesheets/main/layout/_dialog.scss","src/assets/stylesheets/main/layout/_feedback.scss","src/assets/stylesheets/main/layout/_footer.scss","src/assets/stylesheets/main/layout/_form.scss","src/assets/stylesheets/main/layout/_header.scss","src/assets/stylesheets/main/layout/_nav.scss","src/assets/stylesheets/main/layout/_search.scss","src/assets/stylesheets/main/layout/_select.scss","src/assets/stylesheets/main/layout/_sidebar.scss","src/assets/stylesheets/main/layout/_source.scss","src/assets/stylesheets/main/layout/_tabs.scss","src/assets/stylesheets/main/layout/_tag.scss","src/assets/stylesheets/main/layout/_tooltip.scss","src/assets/stylesheets/main/layout/_top.scss","src/assets/stylesheets/main/layout/_version.scss","src/assets/stylesheets/main/extensions/markdown/_admonition.scss","node_modules/material-design-color/material-color.scss","src/assets/stylesheets/main/extensions/markdown/_footnotes.scss","src/assets/stylesheets/main/extensions/markdown/_toc.scss","src/assets/stylesheets/main/extensions/pymdownx/_arithmatex.scss","src/assets/stylesheets/main/extensions/pymdownx/_critic.scss","src/assets/stylesheets/main/extensions/pymdownx/_details.scss","src/assets/stylesheets/main/extensions/pymdownx/_emoji.scss","src/assets/stylesheets/main/extensions/pymdownx/_highlight.scss","src/assets/stylesheets/main/extensions/pymdownx/_tabbed.scss","src/assets/stylesheets/main/extensions/pymdownx/_tasklist.scss","src/assets/stylesheets/main/integrations/_mermaid.scss","src/assets/stylesheets/main/_modifiers.scss"],"names":[],"mappings":"AAgGM,gBCi+GN,CCriHA,KAEE,6BAAA,CAAA,0BAAA,CAAA,yBAAA,CAAA,qBAAA,CADA,qBDzBF,CC8BA,iBAGE,kBD3BF,CC8BE,gCANF,iBAOI,yBDzBF,CACF,CC6BA,KACE,QD1BF,CC8BA,qBAIE,uCD3BF,CC+BA,EACE,aAAA,CACA,oBD5BF,CCgCA,GAME,QAAA,CAJA,kBAAA,CADA,aAAA,CAEA,aAAA,CAEA,gBAAA,CADA,SD3BF,CCiCA,MACE,aD9BF,CCkCA,QAEE,eD/BF,CCmCA,IACE,iBDhCF,CCoCA,MACE,uBAAA,CACA,gBDjCF,CCqCA,MAEE,eAAA,CACA,kBDlCF,CCsCA,OAKE,sBAAA,CACA,QAAA,CAFA,mBAAA,CADA,iBAAA,CAFA,QAAA,CACA,SD/BF,CCuCA,MACE,QAAA,CACA,YDpCF,CErCA,qCAGE,qCAAA,CACA,4CAAA,CACA,8CAAA,CACA,+CAAA,CACA,0BAAA,CACA,+CAAA,CACA,iDAAA,CACA,mDAAA,CAGA,6BAAA,CACA,oCAAA,CACA,mCAAA,CACA,0BAAA,CACA,+CAAA,CAGA,4BAAA,CACA,qDAAA,CACA,yBAAA,CACA,8CAAA,CAGA,0BAAA,CACA,0BAAA,CAGA,qCAAA,CACA,iCAAA,CACA,kCAAA,CACA,mCAAA,CACA,mCAAA,CACA,kCAAA,CACA,iCAAA,CACA,+CAAA,CACA,6DAAA,CACA,gEAAA,CACA,4DAAA,CACA,4DAAA,CACA,6DAAA,CAGA,6CAAA,CAGA,+CAAA,CAGA,0CAAA,CAGA,0CAAA,CACA,2CAAA,CAGA,8BAAA,CACA,kCAAA,CACA,qCAAA,CAGA,wCAAA,CAGA,mDAAA,CACA,mDAAA,CAGA,yBAAA,CACA,8CAAA,CACA,gDAAA,CACA,oCAAA,CACA,0CAAA,CAGA,yEAAA,CAKA,yEAAA,CAKA,yEFUF,CG9GE,aAIE,iBAAA,CAHA,aAAA,CAEA,aAAA,CADA,YHmHJ,CIxHA,KACE,kCAAA,CACA,iCAAA,CAGA,uGAAA,CAKA,mFJyHF,CInHA,WAGE,mCAAA,CACA,sCJsHF,CIlHA,wBANE,6BJgIF,CI1HA,aAIE,4BAAA,CACA,sCJqHF,CI7GA,MACE,0NAAA,CACA,mNAAA,CACA,oNJgHF,CIzGA,YAGE,gCAAA,CAAA,kBAAA,CAFA,eAAA,CACA,eJ6GF,CIxGE,aAPF,YAQI,gBJ2GF,CACF,CIxGE,uGAME,iBAAA,CAAA,cJ0GJ,CItGE,eAEE,uCAAA,CAEA,aAAA,CACA,eAAA,CAJA,iBJ6GJ,CIpGE,8BAPE,eAAA,CAGA,qBJ+GJ,CI3GE,eAGE,kBAAA,CACA,eAAA,CAHA,oBJ0GJ,CIlGE,eAGE,gBAAA,CADA,eAAA,CAGA,qBAAA,CADA,eAAA,CAHA,mBJwGJ,CIhGE,kBACE,eJkGJ,CI9FE,eAEE,eAAA,CACA,qBAAA,CAFA,YJkGJ,CI5FE,8BAGE,uCAAA,CAEA,cAAA,CADA,eAAA,CAEA,qBAAA,CAJA,eJkGJ,CI1FE,eACE,wBJ4FJ,CIxFE,eAGE,+DAAA,CAFA,iBAAA,CACA,cJ2FJ,CItFE,cACE,+BAAA,CACA,qBJwFJ,CIrFI,mCAEE,sBJsFN,CIlFI,wCAEE,+BJmFN,CIhFM,kDACE,uDJkFR,CI7EI,mBACE,kBAAA,CACA,iCJ+EN,CI3EI,4BACE,uCAAA,CACA,oBJ6EN,CIxEE,iDAGE,6BAAA,CACA,aAAA,CACA,2BJ0EJ,CIvEI,aARF,iDASI,oBJ4EJ,CACF,CIxEE,iBAIE,wCAAA,CACA,mBAAA,CACA,kCAAA,CAAA,0BAAA,CAJA,eAAA,CADA,uBAAA,CAEA,qBJ6EJ,CIvEI,qCAEE,uCAAA,CADA,YJ0EN,CIpEE,gBAEE,iBAAA,CACA,eAAA,CAFA,iBJwEJ,CInEI,qBAQE,kCAAA,CAAA,0BAAA,CADA,eAAA,CANA,aAAA,CACA,QAAA,CAIA,uCAAA,CAFA,aAAA,CADA,oCAAA,CAQA,+DAAA,CADA,oBAAA,CADA,iBAAA,CAJA,iBJ2EN,CIlEM,2BACE,qDJoER,CIhEM,wCAEE,YAAA,CADA,WJmER,CI9DM,8CACE,oDJgER,CI7DQ,oDACE,0CJ+DV,CIxDE,gBAOE,4CAAA,CACA,mBAAA,CACA,mKACE,CAPF,gCAAA,CAFA,oBAAA,CAGA,eAAA,CAFA,uBAAA,CAGA,uBAAA,CACA,qBJ6DJ,CInDE,iBAGE,6CAAA,CACA,kCAAA,CAAA,0BAAA,CAHA,aAAA,CACA,qBJuDJ,CIjDE,iBAEE,6DAAA,CACA,WAAA,CAFA,oBJqDJ,CIhDI,oBANF,iBAOI,iBJmDJ,CIhDI,yDAWE,2CAAA,CACA,mBAAA,CACA,8BAAA,CAJA,gCAAA,CAKA,mBAAA,CAXA,oBAAA,CAOA,eAAA,CAHA,cAAA,CADA,aAAA,CADA,6BAAA,CAAA,qBAAA,CAGA,mBAAA,CAPA,iBAAA,CAGA,UJ4DN,CIhEI,sDAWE,2CAAA,CACA,mBAAA,CACA,8BAAA,CAJA,gCAAA,CAKA,mBAAA,CAXA,oBAAA,CAOA,eAAA,CAHA,cAAA,CADA,aAAA,CADA,0BAAA,CAAA,qBAAA,CAGA,mBAAA,CAPA,iBAAA,CAGA,UJ4DN,CIhEI,mEAEE,MJ8DN,CIhEI,gEAEE,MJ8DN,CIhEI,0DAEE,MJ8DN,CIhEI,mEAEE,OJ8DN,CIhEI,gEAEE,OJ8DN,CIhEI,0DAEE,OJ8DN,CIhEI,gDAWE,2CAAA,CACA,mBAAA,CACA,8BAAA,CAJA,gCAAA,CAKA,mBAAA,CAXA,oBAAA,CAOA,eAAA,CAHA,cAAA,CADA,aAAA,CADA,6BAAA,CAAA,0BAAA,CAAA,qBAAA,CAGA,mBAAA,CAPA,iBAAA,CAGA,UJ4DN,CACF,CI7CE,kBACE,WJ+CJ,CI3CE,oDAEE,qBJ6CJ,CI/CE,oDAEE,sBJ6CJ,CIzCE,iCACE,kBJ8CJ,CI/CE,iCACE,mBJ8CJ,CI/CE,iCAIE,2DJ2CJ,CI/CE,iCAIE,4DJ2CJ,CI/CE,uBAGE,uCAAA,CADA,aAAA,CAAA,cJ6CJ,CIvCE,eACE,oBJyCJ,CIrCE,kDAEE,kBJwCJ,CI1CE,kDAEE,mBJwCJ,CI1CE,8BAGE,SJuCJ,CIpCI,0DACE,iBJuCN,CInCI,oCACE,2BJsCN,CInCM,0CACE,2BJsCR,CIjCI,wDAEE,kBJoCN,CItCI,wDAEE,mBJoCN,CItCI,oCACE,kBJqCN,CIjCM,kGAEE,aJqCR,CIjCM,0DACE,eJoCR,CIhCM,4EACE,kBAAA,CAAA,eJoCR,CIrCM,sEACE,kBAAA,CAAA,eJoCR,CIrCM,gGAEE,kBJmCR,CIrCM,0FAEE,kBJmCR,CIrCM,8EAEE,kBJmCR,CIrCM,gGAEE,mBJmCR,CIrCM,0FAEE,mBJmCR,CIrCM,8EAEE,mBJmCR,CIrCM,0DACE,kBAAA,CAAA,eJoCR,CI7BE,yBAEE,mBJ+BJ,CIjCE,yBAEE,oBJ+BJ,CIjCE,eACE,mBAAA,CAAA,cJgCJ,CI3BE,kDAIE,WAAA,CADA,cJ8BJ,CItBI,4BAEE,oBJwBN,CIpBI,6BAEE,oBJsBN,CIlBI,kCACE,YJoBN,CIhBI,8EAEE,YJiBN,CIZE,mBACE,iBAAA,CAGA,eAAA,CADA,cAAA,CAEA,iBAAA,CAHA,yBAAA,CAAA,sBAAA,CAAA,iBJiBJ,CIXI,uBACE,aJaN,CIRE,uBAGE,iBAAA,CADA,eAAA,CADA,eJYJ,CINE,mBACE,cJQJ,CIJE,+BAKE,2CAAA,CACA,iDAAA,CACA,mBAAA,CANA,oBAAA,CAGA,gBAAA,CAFA,cAAA,CACA,aAAA,CAKA,iBJMJ,CIHI,aAXF,+BAYI,aJMJ,CACF,CIDI,iCACE,gBJGN,CIIM,gEACE,YJFR,CICM,6DACE,YJFR,CICM,uDACE,YJFR,CIMM,+DACE,eJJR,CIGM,4DACE,eJJR,CIGM,sDACE,eJJR,CISI,gEACE,eJPN,CIMI,6DACE,eJPN,CIMI,uDACE,eJPN,CIUM,0EACE,gBJRR,CIOM,uEACE,gBJRR,CIOM,iEACE,gBJRR,CIaI,kCAGE,eAAA,CAFA,cAAA,CACA,sBAAA,CAEA,kBJXN,CIeI,kCAGE,qDAAA,CAFA,sBAAA,CACA,kBJZN,CIiBI,wCACE,iCJfN,CIkBM,8CACE,iCAAA,CACA,sDJhBR,CIqBI,iCACE,iBJnBN,CIwBE,wCACE,cJtBJ,CIyBI,wDAIE,gBJjBN,CIaI,wDAIE,iBJjBN,CIaI,8CAUE,UAAA,CATA,oBAAA,CAEA,YAAA,CAGA,oDAAA,CAAA,4CAAA,CACA,6BAAA,CAAA,qBAAA,CACA,yBAAA,CAAA,iBAAA,CACA,iCAAA,CAJA,0BAAA,CAHA,WJfN,CI2BI,oDACE,oDJzBN,CI6BI,mEACE,kDAAA,CACA,yDAAA,CAAA,iDJ3BN,CI+BI,oEACE,kDAAA,CACA,0DAAA,CAAA,kDJ7BN,CIkCE,wBACE,iBAAA,CACA,eAAA,CACA,iBJhCJ,CIoCE,mBACE,oBAAA,CACA,kBAAA,CACA,eJlCJ,CIqCI,aANF,mBAOI,aJlCJ,CACF,CIqCI,8BACE,aAAA,CAEA,QAAA,CACA,eAAA,CAFA,UJjCN,CK1VI,wCD0YF,uBACE,iBJ5CF,CI+CE,4BACE,eJ7CJ,CACF,CM5hBA,WAGE,0CAAA,CADA,+BAAA,CADA,aNgiBF,CM3hBE,aANF,WAOI,YN8hBF,CACF,CM3hBE,oBAEE,uCAAA,CADA,gCN8hBJ,CMzhBE,kBAGE,eAAA,CAFA,iBAAA,CACA,eN4hBJ,CMvhBE,6BACE,WN4hBJ,CM7hBE,6BACE,UN4hBJ,CM7hBE,mBAEE,aAAA,CACA,cAAA,CACA,uBNyhBJ,CMthBI,yBACE,UNwhBN,COxjBA,KASE,cAAA,CARA,WAAA,CACA,iBP4jBF,CKxZI,oCEtKJ,KAaI,gBPqjBF,CACF,CK7ZI,oCEtKJ,KAkBI,cPqjBF,CACF,COhjBA,KASE,2CAAA,CAPA,YAAA,CACA,qBAAA,CAKA,eAAA,CAHA,eAAA,CAJA,iBAAA,CAGA,UPsjBF,CO9iBE,aAZF,KAaI,aPijBF,CACF,CK9ZI,wCEhJF,yBAII,cP8iBJ,CACF,COriBA,SAEE,gBAAA,CAAA,iBAAA,CADA,ePyiBF,COpiBA,cACE,YAAA,CACA,qBAAA,CACA,WPuiBF,COpiBE,aANF,cAOI,aPuiBF,CACF,COniBA,SACE,WPsiBF,COniBE,gBACE,YAAA,CACA,WAAA,CACA,iBPqiBJ,COhiBA,aACE,eAAA,CAEA,sBAAA,CADA,kBPoiBF,CO1hBA,WACE,YP6hBF,COxhBA,WAGE,QAAA,CACA,SAAA,CAHA,iBAAA,CACA,OP6hBF,COxhBE,uCACE,aP0hBJ,COthBE,+BAEE,uCAAA,CADA,kBPyhBJ,COnhBA,SASE,2CAAA,CACA,mBAAA,CAHA,gCAAA,CACA,gBAAA,CAHA,YAAA,CAQA,SAAA,CAFA,uCAAA,CALA,mBAAA,CALA,cAAA,CAWA,2BAAA,CARA,UP6hBF,COjhBE,eAGE,SAAA,CADA,uBAAA,CAEA,oEACE,CAJF,UPshBJ,COxgBA,MACE,WP2gBF,CQrqBA,MACE,+PRuqBF,CQjqBA,cAQE,mBAAA,CADA,0CAAA,CAIA,cAAA,CALA,YAAA,CAGA,uCAAA,CACA,oBAAA,CATA,iBAAA,CAEA,UAAA,CADA,QAAA,CAUA,qBAAA,CAPA,WAAA,CADA,SR4qBF,CQjqBE,aAfF,cAgBI,YRoqBF,CACF,CQjqBE,kCAEE,uCAAA,CADA,YRoqBJ,CQ/pBE,qBACE,uCRiqBJ,CQ7pBE,yCACE,+BR+pBJ,CQhqBE,sCACE,+BR+pBJ,CQhqBE,gCACE,+BR+pBJ,CQ1pBE,oBAKE,6BAAA,CAKA,UAAA,CATA,aAAA,CAEA,cAAA,CACA,aAAA,CAEA,2CAAA,CAAA,mCAAA,CACA,4BAAA,CAAA,oBAAA,CACA,6BAAA,CAAA,qBAAA,CACA,yBAAA,CAAA,iBAAA,CAPA,aRoqBJ,CQxpBE,sBACE,cR0pBJ,CQvpBI,2BACE,2CRypBN,CQnpBI,sDAEE,uDAAA,CADA,+BRspBN,CQvpBI,mDAEE,uDAAA,CADA,+BRspBN,CQvpBI,6CAEE,uDAAA,CADA,+BRspBN,CS5tBA,mBACE,GAEE,SAAA,CADA,0BTguBF,CS5tBA,GAEE,SAAA,CADA,uBT+tBF,CACF,CS1tBA,mBACE,GACE,ST4tBF,CSztBA,GACE,ST2tBF,CACF,CShtBE,qBASE,2BAAA,CADA,mCAAA,CAAA,2BAAA,CAFA,gCAAA,CADA,WAAA,CAEA,SAAA,CANA,cAAA,CACA,KAAA,CAEA,UAAA,CADA,STwtBJ,CS9sBE,mBAcE,mDAAA,CANA,2CAAA,CACA,QAAA,CACA,mBAAA,CARA,QAAA,CASA,gEACE,CAPF,eAAA,CAEA,aAAA,CADA,SAAA,CALA,cAAA,CAGA,UAAA,CADA,STytBJ,CS1sBE,kBACE,aT4sBJ,CSxsBE,sBACE,YAAA,CACA,YT0sBJ,CSvsBI,oCACE,aTysBN,CSpsBE,sBACE,mBTssBJ,CSnsBI,6CACE,cTqsBN,CK/lBI,wCIvGA,6CAKI,aAAA,CAEA,gBAAA,CACA,iBAAA,CAFA,UTusBN,CACF,CShsBE,kBACE,cTksBJ,CUnyBA,YACE,WAAA,CAIA,WVmyBF,CUhyBE,mBACE,qBAAA,CACA,iBVkyBJ,CKtoBI,sCKtJE,4EACE,kBV+xBN,CU3xBI,0JACE,mBV6xBN,CU9xBI,8EACE,kBV6xBN,CACF,CUxxBI,0BAGE,UAAA,CAFA,aAAA,CACA,YV2xBN,CUtxBI,+BACE,eVwxBN,CUlxBE,8BACE,WVuxBJ,CUxxBE,8BACE,UVuxBJ,CUxxBE,8BAGE,iBVqxBJ,CUxxBE,8BAGE,kBVqxBJ,CUxxBE,oBAEE,cAAA,CAEA,SVoxBJ,CUjxBI,aAPF,oBAQI,YVoxBJ,CACF,CUjxBI,gCACE,yCVmxBN,CU/wBI,wBACE,cAAA,CACA,kBVixBN,CU9wBM,kCACE,oBVgxBR,CWj1BA,qBAEE,WX+1BF,CWj2BA,qBAEE,UX+1BF,CWj2BA,WAOE,2CAAA,CACA,mBAAA,CALA,YAAA,CAMA,8BAAA,CAJA,iBAAA,CAMA,SAAA,CALA,mBAAA,CASA,mBAAA,CAdA,cAAA,CASA,0BAAA,CAEA,wCACE,CATF,SX61BF,CW/0BE,aAlBF,WAmBI,YXk1BF,CACF,CW/0BE,mBAEE,SAAA,CAIA,mBAAA,CALA,uBAAA,CAEA,kEXk1BJ,CW30BE,kBACE,gCAAA,CACA,eX60BJ,CYh3BA,aACE,gBAAA,CACA,iBZm3BF,CYh3BE,sBAGE,WAAA,CAFA,QAAA,CACA,SZm3BJ,CY92BE,oBAEE,eAAA,CADA,eZi3BJ,CY52BE,oBACE,iBZ82BJ,CY12BE,mBAIE,sBAAA,CAFA,YAAA,CACA,cAAA,CAEA,sBAAA,CAJA,iBZg3BJ,CYz2BI,iDACE,yCZ22BN,CYv2BI,6BACE,iBZy2BN,CYp2BE,mBAGE,uCAAA,CACA,cAAA,CAHA,aAAA,CACA,cAAA,CAGA,sBZs2BJ,CYn2BI,gDACE,+BZq2BN,CYj2BI,4BACE,0CAAA,CACA,mBZm2BN,CY91BE,mBAGE,SAAA,CAFA,iBAAA,CACA,2BAAA,CAEA,8DZg2BJ,CY31BI,qBAEE,aAAA,CADA,eZ81BN,CYz1BI,6BAEE,SAAA,CADA,uBZ41BN,Ca16BA,WAEE,0CAAA,CADA,+Bb86BF,Ca16BE,aALF,WAMI,Yb66BF,CACF,Ca16BE,kBACE,6BAAA,CAEA,aAAA,CADA,ab66BJ,Caz6BI,gCACE,Yb26BN,Cat6BE,iBACE,YAAA,CAKA,cAAA,CAIA,uCAAA,CADA,eAAA,CADA,oBAAA,CADA,kBAAA,CAIA,uBbo6BJ,Caj6BI,4CACE,Ubm6BN,Cap6BI,yCACE,Ubm6BN,Cap6BI,mCACE,Ubm6BN,Ca/5BI,+BACE,oBbi6BN,CKlxBI,wCQrII,yCACE,Yb05BR,CACF,Car5BI,iCACE,gBbw5BN,Caz5BI,iCACE,iBbw5BN,Caz5BI,uBAEE,gBbu5BN,Cap5BM,iCACE,ebs5BR,Cah5BE,kBAEE,WAAA,CAGA,eAAA,CACA,kBAAA,CAHA,6BAAA,CACA,cAAA,CAHA,iBAAA,CAMA,kBbk5BJ,Ca94BE,mBACE,YAAA,CACA,abg5BJ,Ca54BE,sBAKE,gBAAA,CAHA,MAAA,CACA,gBAAA,CAGA,UAAA,CAFA,cAAA,CAHA,iBAAA,CACA,Obk5BJ,Caz4BA,gBACE,gDb44BF,Caz4BE,uBACE,YAAA,CACA,cAAA,CACA,6BAAA,CACA,ab24BJ,Cav4BE,kCACE,sCby4BJ,Cat4BI,6DACE,+Bbw4BN,Caz4BI,0DACE,+Bbw4BN,Caz4BI,oDACE,+Bbw4BN,Cah4BA,cAIE,wCAAA,CACA,gBAAA,CAHA,iBAAA,CACA,eAAA,CAFA,Ubu4BF,CK91BI,mCQ1CJ,cASI,Ubm4BF,CACF,Ca/3BE,yBACE,sCbi4BJ,Ca13BA,WACE,cAAA,CACA,qBb63BF,CK32BI,mCQpBJ,WAMI,eb63BF,CACF,Ca13BE,iBACE,oBAAA,CAEA,aAAA,CACA,iBAAA,CAFA,Yb83BJ,Caz3BI,wBACE,eb23BN,Cav3BI,qBAGE,iBAAA,CAFA,gBAAA,CACA,mBb03BN,CcjiCE,uBAKE,kBAAA,CACA,mBAAA,CAHA,gCAAA,CAIA,cAAA,CANA,oBAAA,CAGA,eAAA,CAFA,kBAAA,CAMA,gEdoiCJ,Cc9hCI,gCAEE,2CAAA,CACA,uCAAA,CAFA,gCdkiCN,Cc5hCI,kDAEE,0CAAA,CACA,sCAAA,CAFA,+BdgiCN,CcjiCI,+CAEE,0CAAA,CACA,sCAAA,CAFA,+BdgiCN,CcjiCI,yCAEE,0CAAA,CACA,sCAAA,CAFA,+BdgiCN,CczhCE,gCAKE,4Bd8hCJ,CcniCE,gEAME,6Bd6hCJ,CcniCE,gCAME,4Bd6hCJ,CcniCE,sBAIE,6DAAA,CAGA,8BAAA,CAJA,eAAA,CAFA,aAAA,CACA,eAAA,CAMA,sCd2hCJ,CcthCI,iDACE,6CAAA,CACA,8BdwhCN,Cc1hCI,8CACE,6CAAA,CACA,8BdwhCN,Cc1hCI,wCACE,6CAAA,CACA,8BdwhCN,CcphCI,+BACE,UdshCN,CezkCA,WAOE,2CAAA,CAGA,0DACE,CALF,gCAAA,CADA,aAAA,CAFA,MAAA,CAFA,uBAAA,CAAA,eAAA,CAEA,OAAA,CADA,KAAA,CAEA,SfglCF,CerkCE,aAfF,WAgBI,YfwkCF,CACF,CerkCE,mBACE,2BAAA,CACA,iEfukCJ,CejkCE,mBACE,gEACE,CAEF,kEfikCJ,Ce3jCE,kBAEE,kBAAA,CADA,YAAA,CAEA,ef6jCJ,CezjCE,mBAKE,kBAAA,CAGA,cAAA,CALA,YAAA,CAIA,uCAAA,CAHA,aAAA,CAHA,iBAAA,CAQA,uBAAA,CAHA,qBAAA,CAJA,SfkkCJ,CexjCI,yBACE,Uf0jCN,CetjCI,iCACE,oBfwjCN,CepjCI,uCAEE,uCAAA,CADA,YfujCN,CeljCI,2BACE,YAAA,CACA,afojCN,CKv8BI,wCU/GA,2BAMI,YfojCN,CACF,CejjCM,iDAIE,iBAAA,CAHA,aAAA,CAEA,aAAA,CADA,UfqjCR,CevjCM,8CAIE,iBAAA,CAHA,aAAA,CAEA,aAAA,CADA,UfqjCR,CevjCM,wCAIE,iBAAA,CAHA,aAAA,CAEA,aAAA,CADA,UfqjCR,CKr+BI,mCUzEA,iCAII,Yf8iCN,CACF,Ce3iCM,wCACE,Yf6iCR,CeziCM,+CACE,oBf2iCR,CKh/BI,sCUtDA,iCAII,YfsiCN,CACF,CejiCE,kBAEE,YAAA,CACA,cAAA,CAFA,iBAAA,CAIA,8DACE,CAFF,kBfoiCJ,Ce9hCI,oCAGE,SAAA,CAIA,mBAAA,CALA,6BAAA,CAEA,8DACE,CAJF,UfoiCN,Ce3hCM,8CACE,8Bf6hCR,CexhCI,8BACE,ef0hCN,CerhCE,4BAGE,kBf0hCJ,Ce7hCE,4BAGE,iBf0hCJ,Ce7hCE,4BAIE,gBfyhCJ,Ce7hCE,4BAIE,iBfyhCJ,Ce7hCE,kBACE,WAAA,CAIA,eAAA,CAHA,aAAA,CAIA,kBfuhCJ,CephCI,4CAGE,SAAA,CAIA,mBAAA,CALA,8BAAA,CAEA,8DACE,CAJF,Uf0hCN,CejhCM,sDACE,6BfmhCR,Ce/gCM,8DAGE,SAAA,CAIA,mBAAA,CALA,uBAAA,CAEA,8DACE,CAJF,SfqhCR,Ce1gCI,uCAGE,WAAA,CAFA,iBAAA,CACA,Uf6gCN,CevgCE,mBACE,YAAA,CACA,aAAA,CACA,cAAA,CAEA,+CACE,CAFF,kBf0gCJ,CepgCI,8DACE,WAAA,CACA,SAAA,CACA,oCfsgCN,Ce//BE,mBACE,YfigCJ,CKtjCI,mCUoDF,6BAQI,gBfigCJ,CezgCA,6BAQI,iBfigCJ,CezgCA,mBAKI,aAAA,CAEA,iBAAA,CADA,afmgCJ,CACF,CK9jCI,sCUoDF,6BAaI,kBfigCJ,Ce9gCA,6BAaI,mBfigCJ,CACF,CgBzuCA,MACE,0MAAA,CACA,gMAAA,CACA,yNhB4uCF,CgBtuCA,QACE,eAAA,CACA,ehByuCF,CgBtuCE,eACE,aAAA,CAGA,eAAA,CADA,eAAA,CADA,eAAA,CAGA,sBhBwuCJ,CgBruCI,+BACE,YhBuuCN,CgBpuCM,mCAEE,WAAA,CADA,UhBuuCR,CgB/tCQ,6DAME,iBAAA,CALA,aAAA,CAGA,aAAA,CADA,cAAA,CAEA,kBAAA,CAHA,UhBquCV,CgBvuCQ,0DAME,iBAAA,CALA,aAAA,CAGA,aAAA,CADA,cAAA,CAEA,kBAAA,CAHA,UhBquCV,CgBvuCQ,oDAME,iBAAA,CALA,aAAA,CAGA,aAAA,CADA,cAAA,CAEA,kBAAA,CAHA,UhBquCV,CgB1tCE,cAGE,eAAA,CAFA,QAAA,CACA,ShB6tCJ,CgBxtCE,cACE,ehB0tCJ,CgBvtCI,sCACE,ehBytCN,CgB1tCI,sCACE,chBytCN,CgBptCE,cAEE,kBAAA,CAKA,cAAA,CANA,YAAA,CAEA,6BAAA,CACA,iBAAA,CACA,eAAA,CAIA,uBAAA,CAHA,sBAAA,CAEA,sBhButCJ,CgBntCI,sBACE,uChBqtCN,CgBjtCI,oCACE,+BhBmtCN,CgB/sCI,0CACE,UhBitCN,CgB7sCI,yCACE,+BhB+sCN,CgBhtCI,sCACE,+BhB+sCN,CgBhtCI,gCACE,+BhB+sCN,CgB3sCI,4BACE,uCAAA,CACA,oBhB6sCN,CgBzsCI,0CACE,YhB2sCN,CgBxsCM,yDAKE,6BAAA,CAJA,aAAA,CAEA,WAAA,CACA,qCAAA,CAAA,6BAAA,CAFA,UhB6sCR,CgBtsCM,kDACE,YhBwsCR,CgBnsCI,gBAEE,cAAA,CADA,YhBssCN,CgBhsCE,cACE,ahBksCJ,CgB9rCE,gBACE,YhBgsCJ,CK9oCI,wCW3CA,0CASE,2CAAA,CAHA,YAAA,CACA,qBAAA,CACA,WAAA,CAJA,MAAA,CAFA,iBAAA,CAEA,OAAA,CADA,KAAA,CAEA,ShB+rCJ,CgBprCI,4DACE,eAAA,CACA,ehBsrCN,CgBxrCI,yDACE,eAAA,CACA,ehBsrCN,CgBxrCI,mDACE,eAAA,CACA,ehBsrCN,CgBlrCI,gCAOE,qDAAA,CAHA,uCAAA,CAIA,cAAA,CANA,aAAA,CAGA,kBAAA,CAFA,wBAAA,CAFA,iBAAA,CAKA,kBhBsrCN,CgBjrCM,wDAGE,UhBurCR,CgB1rCM,wDAGE,WhBurCR,CgB1rCM,8CAIE,aAAA,CAEA,aAAA,CACA,YAAA,CANA,iBAAA,CACA,SAAA,CAGA,YhBqrCR,CgBhrCQ,oDAIE,6BAAA,CAKA,UAAA,CARA,aAAA,CAEA,WAAA,CAEA,2CAAA,CAAA,mCAAA,CACA,4BAAA,CAAA,oBAAA,CACA,6BAAA,CAAA,qBAAA,CACA,yBAAA,CAAA,iBAAA,CANA,UhByrCV,CgB7qCM,8CAEE,2CAAA,CACA,gEACE,CAHF,eAAA,CAIA,gCAAA,CAAA,4BAAA,CACA,kBhB8qCR,CgB3qCQ,2DACE,YhB6qCV,CgBxqCM,8CAGE,2CAAA,CAFA,gCAAA,CACA,ehB2qCR,CgBtqCM,yCAIE,aAAA,CADA,UAAA,CAEA,YAAA,CACA,aAAA,CALA,iBAAA,CAEA,WAAA,CADA,ShB4qCR,CgBnqCI,+BACE,MhBqqCN,CgBjqCI,+BAEE,4DAAA,CADA,ShBoqCN,CgBhqCM,qDACE,+BhBkqCR,CgB/pCQ,gFACE,+BhBiqCV,CgBlqCQ,6EACE,+BhBiqCV,CgBlqCQ,uEACE,+BhBiqCV,CgB3pCI,+BACE,YAAA,CACA,mBhB6pCN,CgB1pCM,uDAGE,mBhB6pCR,CgBhqCM,uDAGE,kBhB6pCR,CgBhqCM,6CAIE,gBAAA,CAFA,aAAA,CADA,YhB+pCR,CgBzpCQ,mDAIE,6BAAA,CAKA,UAAA,CARA,aAAA,CAEA,WAAA,CAEA,2CAAA,CAAA,mCAAA,CACA,4BAAA,CAAA,oBAAA,CACA,6BAAA,CAAA,qBAAA,CACA,yBAAA,CAAA,iBAAA,CANA,UhBkqCV,CgBlpCM,+CACE,mBhBopCR,CgB5oCM,4CAEE,wBAAA,CADA,ehB+oCR,CgB3oCQ,oEACE,mBhB6oCV,CgB9oCQ,oEACE,oBhB6oCV,CgBzoCQ,4EACE,iBhB2oCV,CgB5oCQ,4EACE,kBhB2oCV,CgBvoCQ,oFACE,mBhByoCV,CgB1oCQ,oFACE,oBhByoCV,CgBroCQ,4FACE,mBhBuoCV,CgBxoCQ,4FACE,oBhBuoCV,CgBhoCE,mBACE,wBhBkoCJ,CgB9nCE,wBACE,YAAA,CAEA,SAAA,CADA,0BAAA,CAEA,oEhBgoCJ,CgB3nCI,kCACE,2BhB6nCN,CgBxnCE,gCAEE,SAAA,CADA,uBAAA,CAEA,qEhB0nCJ,CgBrnCI,8CAEE,kCAAA,CAAA,0BhBsnCN,CACF,CK5xCI,wCW8KA,0CACE,YhBinCJ,CgB9mCI,yDACE,UhBgnCN,CgB5mCI,wDACE,YhB8mCN,CgB1mCI,kDACE,YhB4mCN,CgBvmCE,gBAIE,iDAAA,CADA,gCAAA,CAFA,aAAA,CACA,ehB2mCJ,CACF,CKz1CM,6DWuPF,6CACE,YhBqmCJ,CgBlmCI,4DACE,UhBomCN,CgBhmCI,2DACE,YhBkmCN,CgB9lCI,qDACE,YhBgmCN,CACF,CKj1CI,mCWyPA,kCAME,qCAAA,CACA,qDAAA,CANA,uBAAA,CAAA,eAAA,CACA,KAAA,CAGA,ShB2lCJ,CgBtlCI,6CACE,uBhBwlCN,CgBplCI,gDACE,YhBslCN,CACF,CKh2CI,sCW7JJ,QA6aI,oDhBolCF,CgBjlCE,gCAME,qCAAA,CACA,qDAAA,CANA,uBAAA,CAAA,eAAA,CACA,KAAA,CAGA,ShBmlCJ,CgB9kCI,8CACE,uBhBglCN,CgBtkCE,sEACE,YhB2kCJ,CgBvkCE,6DACE,ahBykCJ,CgB1kCE,0DACE,ahBykCJ,CgB1kCE,oDACE,ahBykCJ,CgBrkCE,6CACE,YhBukCJ,CgBnkCE,uBACE,aAAA,CACA,ehBqkCJ,CgBlkCI,kCACE,ehBokCN,CgBhkCI,qCACE,eAAA,CACA,mBhBkkCN,CgB/jCM,mDACE,mBhBikCR,CgB7jCM,mDACE,YhB+jCR,CgB1jCI,+BACE,ahB4jCN,CgBzjCM,2DACE,ShB2jCR,CgBrjCE,cAGE,kBAAA,CADA,YAAA,CAEA,+CACE,CAJF,WhB0jCJ,CgBljCI,wBACE,wBhBojCN,CgBhjCI,oBACE,uDhBkjCN,CgB9iCI,oBAKE,6BAAA,CAKA,UAAA,CATA,oBAAA,CAEA,WAAA,CAGA,2CAAA,CAAA,mCAAA,CACA,4BAAA,CAAA,oBAAA,CACA,6BAAA,CAAA,qBAAA,CACA,yBAAA,CAAA,iBAAA,CALA,qBAAA,CAFA,UhBwjCN,CgB5iCI,0JAEE,uBhB6iCN,CgB/hCI,+HACE,YhBqiCN,CgBliCM,oDACE,aAAA,CACA,ShBoiCR,CgBjiCQ,kEAOE,qCAAA,CACA,qDAAA,CAFA,eAAA,CAFA,YAAA,CACA,eAAA,CAJA,uBAAA,CAAA,eAAA,CACA,KAAA,CACA,ShBwiCV,CgBhiCU,4FACE,mBhBkiCZ,CgB9hCU,gFACE,YhBgiCZ,CgBxhCI,2CACE,ahB0hCN,CgBvhCM,iFACE,mBhByhCR,CgB1hCM,iFACE,kBhByhCR,CgBhhCI,mFACE,ehBkhCN,CgB/gCM,iGACE,ShBihCR,CgB5gCI,qFAGE,mDhB8gCN,CgBjhCI,qFAGE,oDhB8gCN,CgBjhCI,2EACE,aAAA,CACA,oBhB+gCN,CgB3gCM,0FACE,YhB6gCR,CACF,CiBloDA,MACE,igBjBqoDF,CiB/nDA,WACE,iBjBkoDF,CKp+CI,mCY/JJ,WAKI,ejBkoDF,CACF,CiB/nDE,kBACE,YjBioDJ,CiB7nDE,oBAEE,SAAA,CADA,SjBgoDJ,CK79CI,wCYpKF,8BAQI,YjBuoDJ,CiB/oDA,8BAQI,ajBuoDJ,CiB/oDA,oBAYI,2CAAA,CACA,kBAAA,CAHA,WAAA,CACA,eAAA,CAOA,mBAAA,CAZA,iBAAA,CACA,SAAA,CAOA,uBAAA,CACA,4CACE,CAPF,UjBsoDJ,CiB1nDI,+DACE,SAAA,CACA,oCjB4nDN,CACF,CKngDI,mCYjJF,8BAiCI,MjB8nDJ,CiB/pDA,8BAiCI,OjB8nDJ,CiB/pDA,oBAoCI,gCAAA,CACA,cAAA,CAFA,QAAA,CAJA,cAAA,CACA,KAAA,CAMA,sDACE,CALF,OjB6nDJ,CiBnnDI,+DAME,YAAA,CACA,SAAA,CACA,4CACE,CARF,UjBwnDN,CACF,CKlgDI,wCYxGA,+DAII,mBjB0mDN,CACF,CKhjDM,6DY/DF,+DASI,mBjB0mDN,CACF,CKrjDM,6DY/DF,+DAcI,mBjB0mDN,CACF,CiBrmDE,kBAEE,kCAAA,CAAA,0BjBsmDJ,CKphDI,wCYpFF,4BAQI,MjB6mDJ,CiBrnDA,4BAQI,OjB6mDJ,CiBrnDA,kBAWI,QAAA,CAGA,SAAA,CAFA,eAAA,CANA,cAAA,CACA,KAAA,CAMA,wBAAA,CAEA,qGACE,CANF,OAAA,CADA,SjB4mDJ,CiB/lDI,4BACE,yBjBimDN,CiB7lDI,6DAEE,WAAA,CAEA,SAAA,CADA,uBAAA,CAEA,sGACE,CALF,UjBmmDN,CACF,CK/jDI,mCYjEF,4BA2CI,WjB6lDJ,CiBxoDA,4BA2CI,UjB6lDJ,CiBxoDA,kBA6CI,eAAA,CAHA,iBAAA,CAIA,8CAAA,CAFA,ajB4lDJ,CACF,CK9lDM,6DYOF,6DAII,ajBulDN,CACF,CK7kDI,sCYfA,6DASI,ajBulDN,CACF,CiBllDE,iBAIE,2CAAA,CACA,gCAAA,CAFA,aAAA,CAFA,iBAAA,CAKA,2CACE,CALF,SjBwlDJ,CK1lDI,mCYAF,iBAaI,gCAAA,CACA,mBAAA,CAFA,ajBolDJ,CiB/kDI,uBACE,oCjBilDN,CACF,CiB7kDI,4DAEE,2CAAA,CACA,6BAAA,CACA,oCAAA,CAHA,gCjBklDN,CiB1kDE,4BAKE,mBAAA,CAAA,oBjB+kDJ,CiBplDE,4BAKE,mBAAA,CAAA,oBjB+kDJ,CiBplDE,kBAQE,sBAAA,CAFA,eAAA,CAFA,WAAA,CAHA,iBAAA,CAMA,sBAAA,CAJA,UAAA,CADA,SjBklDJ,CiBzkDI,yCACE,yBAAA,CAAA,qBjB2kDN,CiB5kDI,+BACE,qBjB2kDN,CiBvkDI,yCAEE,uCjBwkDN,CiB1kDI,kEAEE,uCjBwkDN,CiBpkDI,6BACE,YjBskDN,CK1mDI,wCYaF,kBA8BI,eAAA,CADA,aAAA,CADA,UjBukDJ,CACF,CKpoDI,mCYgCF,4BAmCI,mBjBukDJ,CiB1mDA,4BAmCI,oBjBukDJ,CiB1mDA,kBAoCI,aAAA,CACA,ejBqkDJ,CiBlkDI,yCACE,uCjBokDN,CiBrkDI,+BACE,uCjBokDN,CiBhkDI,mCACE,gCjBkkDN,CiB9jDI,6DACE,kBjBgkDN,CiB7jDM,oFAEE,uCjB8jDR,CiBhkDM,wJAEE,uCjB8jDR,CACF,CiBxjDE,iBAIE,cAAA,CAHA,oBAAA,CAEA,aAAA,CAEA,kCACE,CAJF,YjB6jDJ,CiBrjDI,uBACE,UjBujDN,CiBnjDI,yCAGE,UjBsjDN,CiBzjDI,yCAGE,WjBsjDN,CiBzjDI,+BACE,iBAAA,CACA,SAAA,CAEA,SjBqjDN,CiBljDM,6CACE,oBjBojDR,CKvpDI,wCY2FA,yCAcI,UjBmjDN,CiBjkDE,yCAcI,WjBmjDN,CiBjkDE,+BAaI,SjBojDN,CiBhjDM,+CACE,YjBkjDR,CACF,CKnrDI,mCY8GA,+BAwBI,mBjBijDN,CiB9iDM,8CACE,YjBgjDR,CACF,CiB1iDE,8BAGE,WjB8iDJ,CiBjjDE,8BAGE,UjB8iDJ,CiBjjDE,oBAKE,mBAAA,CAJA,iBAAA,CACA,SAAA,CAEA,SjB6iDJ,CK/qDI,wCY8HF,8BAUI,WjB4iDJ,CiBtjDA,8BAUI,UjB4iDJ,CiBtjDA,oBASI,SjB6iDJ,CACF,CiBziDI,gCACE,iBjB+iDN,CiBhjDI,gCACE,kBjB+iDN,CiBhjDI,sBAEE,uCAAA,CAEA,SAAA,CADA,oBAAA,CAEA,+DjB2iDN,CiBtiDM,yCAEE,uCAAA,CADA,YjByiDR,CiBpiDM,yFAGE,SAAA,CACA,mBAAA,CAFA,kBjBuiDR,CiBliDQ,8FACE,UjBoiDV,CiB7hDE,8BAOE,mBAAA,CAAA,oBjBoiDJ,CiB3iDE,8BAOE,mBAAA,CAAA,oBjBoiDJ,CiB3iDE,oBAIE,kBAAA,CAIA,yCAAA,CALA,YAAA,CAMA,eAAA,CAHA,WAAA,CAKA,SAAA,CAVA,iBAAA,CACA,KAAA,CAUA,uBAAA,CAFA,kBAAA,CALA,UjBsiDJ,CKzuDI,mCY8LF,8BAgBI,mBjBgiDJ,CiBhjDA,8BAgBI,oBjBgiDJ,CiBhjDA,oBAiBI,ejB+hDJ,CACF,CiB5hDI,+DACE,SAAA,CACA,0BjB8hDN,CiBzhDE,6BAKE,+BjB4hDJ,CiBjiDE,0DAME,gCjB2hDJ,CiBjiDE,6BAME,+BjB2hDJ,CiBjiDE,mBAIE,eAAA,CAHA,iBAAA,CAEA,UAAA,CADA,SjB+hDJ,CKxuDI,wCYuMF,mBAWI,QAAA,CADA,UjB4hDJ,CACF,CKjwDI,mCY0NF,mBAiBI,SAAA,CADA,UAAA,CAEA,sBjB2hDJ,CiBxhDI,8DACE,8BAAA,CACA,SjB0hDN,CACF,CiBrhDE,uBAKE,kCAAA,CAAA,0BAAA,CAFA,2CAAA,CAFA,WAAA,CACA,eAAA,CAOA,kBjBmhDJ,CiBhhDI,iEAZF,uBAaI,uBjBmhDJ,CACF,CK9yDM,6DY6QJ,uBAkBI,ajBmhDJ,CACF,CK7xDI,sCYuPF,uBAuBI,ajBmhDJ,CACF,CKlyDI,mCYuPF,uBA4BI,YAAA,CAEA,+DAAA,CADA,oBjBohDJ,CiBhhDI,kEACE,ejBkhDN,CiB9gDI,6BACE,qDjBghDN,CiB5gDI,0CAEE,YAAA,CADA,WjB+gDN,CiB1gDI,gDACE,oDjB4gDN,CiBzgDM,sDACE,0CjB2gDR,CACF,CiBpgDA,kBACE,gCAAA,CACA,qBjBugDF,CiBpgDE,wBAKE,qDAAA,CAHA,uCAAA,CACA,gBAAA,CACA,kBAAA,CAHA,eAAA,CAKA,uBjBsgDJ,CKt0DI,mCY0TF,kCAUI,mBjBsgDJ,CiBhhDA,kCAUI,oBjBsgDJ,CACF,CiBlgDE,wBAGE,eAAA,CAFA,QAAA,CACA,SAAA,CAGA,wBAAA,CAAA,qBAAA,CAAA,oBAAA,CAAA,gBjBmgDJ,CiB//CE,wBACE,yDjBigDJ,CiB9/CI,oCACE,ejBggDN,CiB3/CE,wBACE,aAAA,CACA,YAAA,CAEA,uBAAA,CADA,gCjB8/CJ,CiB1/CI,mDACE,uDjB4/CN,CiB7/CI,gDACE,uDjB4/CN,CiB7/CI,0CACE,uDjB4/CN,CiBx/CI,gDACE,mBjB0/CN,CiBr/CE,gCAGE,+BAAA,CAGA,cAAA,CALA,aAAA,CAGA,gBAAA,CACA,YAAA,CAHA,mBAAA,CAQA,uBAAA,CAHA,2CjBw/CJ,CK72DI,mCY8WF,0CAcI,mBjBq/CJ,CiBngDA,0CAcI,oBjBq/CJ,CACF,CiBl/CI,2DAEE,uDAAA,CADA,+BjBq/CN,CiBt/CI,wDAEE,uDAAA,CADA,+BjBq/CN,CiBt/CI,kDAEE,uDAAA,CADA,+BjBq/CN,CiBh/CI,wCACE,YjBk/CN,CiB7+CI,wDACE,YjB++CN,CiB3+CI,oCACE,WjB6+CN,CiBx+CE,2BAGE,eAAA,CADA,eAAA,CADA,iBjB4+CJ,CKp4DI,mCYuZF,qCAOI,mBjB0+CJ,CiBj/CA,qCAOI,oBjB0+CJ,CACF,CiBp+CM,8DAGE,eAAA,CADA,eAAA,CAEA,eAAA,CAHA,ejBy+CR,CiBh+CE,kCAEE,MjBs+CJ,CiBx+CE,kCAEE,OjBs+CJ,CiBx+CE,wBAME,uCAAA,CAFA,aAAA,CACA,YAAA,CAJA,iBAAA,CAEA,YjBq+CJ,CKp4DI,wCY4ZF,wBAUI,YjBk+CJ,CACF,CiB/9CI,8BAIE,6BAAA,CAKA,UAAA,CARA,oBAAA,CAEA,WAAA,CAEA,+CAAA,CAAA,uCAAA,CACA,4BAAA,CAAA,oBAAA,CACA,6BAAA,CAAA,qBAAA,CACA,yBAAA,CAAA,iBAAA,CANA,UjBw+CN,CiB99CM,wCACE,oBjBg+CR,CiB19CE,yBAGE,gBAAA,CADA,eAAA,CAEA,eAAA,CAHA,ajB+9CJ,CiBx9CE,0BASE,2BAAA,CACA,oBAAA,CALA,uCAAA,CAJA,mBAAA,CAKA,gBAAA,CACA,eAAA,CAJA,aAAA,CADA,eAAA,CAEA,eAAA,CAIA,sBjB49CJ,CKz6DI,wCYqcF,0BAeI,oBAAA,CADA,ejB29CJ,CACF,CKx9DM,6DY8eJ,0BAqBI,oBAAA,CADA,ejB29CJ,CACF,CiBv9CI,+BAEE,wBAAA,CADA,yBjB09CN,CiBp9CE,yBAEE,gBAAA,CACA,iBAAA,CAFA,ajBw9CJ,CiBl9CE,uBAEE,wBAAA,CADA,+BjBq9CJ,CkB3nEA,WACE,iBAAA,CACA,SlB8nEF,CkB3nEE,kBAOE,2CAAA,CACA,mBAAA,CACA,8BAAA,CAHA,gCAAA,CAHA,QAAA,CAEA,gBAAA,CADA,YAAA,CAOA,SAAA,CAVA,iBAAA,CACA,sBAAA,CAQA,mCAAA,CAEA,oElB6nEJ,CkBvnEI,+DACE,gBAAA,CAEA,SAAA,CADA,+BAAA,CAEA,sFACE,CADF,8ElBynEN,CkB7nEI,4DACE,gBAAA,CAEA,SAAA,CADA,+BAAA,CAEA,mFACE,CADF,8ElBynEN,CkB7nEI,sDACE,gBAAA,CAEA,SAAA,CADA,+BAAA,CAEA,8ElBynEN,CkBlnEI,wBAUE,qCAAA,CAAA,8CAAA,CAFA,mCAAA,CAAA,oCAAA,CACA,YAAA,CAEA,UAAA,CANA,QAAA,CAFA,QAAA,CAIA,kBAAA,CADA,iBAAA,CALA,iBAAA,CACA,KAAA,CAEA,OlB2nEN,CkB/mEE,iBAOE,mBAAA,CAFA,eAAA,CACA,oBAAA,CAJA,QAAA,CADA,kBAAA,CAGA,aAAA,CADA,SlBqnEJ,CkB7mEE,iBACE,kBlB+mEJ,CkB3mEE,2BAGE,kBAAA,CAAA,oBlBinEJ,CkBpnEE,2BAGE,mBAAA,CAAA,mBlBinEJ,CkBpnEE,iBAKE,cAAA,CAJA,aAAA,CAGA,YAAA,CAKA,uBAAA,CAHA,2CACE,CALF,UlBknEJ,CkBxmEI,4CACE,+BlB0mEN,CkB3mEI,yCACE,+BlB0mEN,CkB3mEI,mCACE,+BlB0mEN,CkBtmEI,uBACE,qDlBwmEN,CmB5rEA,YAIE,qBAAA,CADA,aAAA,CAGA,gBAAA,CALA,uBAAA,CAAA,eAAA,CACA,UAAA,CAGA,anBgsEF,CmB5rEE,aATF,YAUI,YnB+rEF,CACF,CKjhEI,wCc3KF,+BAMI,anBmsEJ,CmBzsEA,+BAMI,cnBmsEJ,CmBzsEA,qBAWI,2CAAA,CAHA,aAAA,CAEA,WAAA,CANA,cAAA,CACA,KAAA,CAOA,uBAAA,CACA,iEACE,CALF,aAAA,CAFA,SnBksEJ,CmBvrEI,mEACE,8BAAA,CACA,6BnByrEN,CmBtrEM,6EACE,8BnBwrER,CmBnrEI,6CAEE,QAAA,CAAA,MAAA,CACA,QAAA,CAEA,eAAA,CAJA,iBAAA,CACA,OAAA,CAEA,yBAAA,CAAA,qBAAA,CAFA,KnBwrEN,CACF,CKhkEI,sCctKJ,YAuDI,QnBmrEF,CmBhrEE,mBACE,WnBkrEJ,CmB9qEE,6CACE,UnBgrEJ,CACF,CmB5qEE,uBACE,YAAA,CACA,OnB8qEJ,CK/kEI,mCcjGF,uBAMI,QnB8qEJ,CmB3qEI,8BACE,WnB6qEN,CmBzqEI,qCACE,anB2qEN,CmBvqEI,+CACE,kBnByqEN,CACF,CmBpqEE,wBAUE,uBAAA,CANA,kCAAA,CAAA,0BAAA,CAHA,cAAA,CACA,eAAA,CASA,+DAAA,CAFA,oBnBmqEJ,CmB9pEI,8BACE,qDnBgqEN,CmB5pEI,2CAEE,YAAA,CADA,WnB+pEN,CmB1pEI,iDACE,oDnB4pEN,CmBzpEM,uDACE,0CnB2pER,CmB7oEE,wCAGE,wBACE,qBnB6oEJ,CmBzoEE,6BACE,kCnB2oEJ,CmB5oEE,6BACE,iCnB2oEJ,CACF,CKvmEI,wCc5BF,YAME,gCAAA,CADA,QAAA,CAEA,SAAA,CANA,cAAA,CACA,KAAA,CAMA,sDACE,CALF,OAAA,CADA,SnB4oEF,CmBjoEE,4CAEE,WAAA,CACA,SAAA,CACA,4CACE,CAJF,UnBsoEJ,CACF,CoBnzEA,iBACE,GACE,QpBqzEF,CoBlzEA,GACE,apBozEF,CACF,CoBhzEA,gBACE,GAEE,SAAA,CADA,0BpBmzEF,CoB/yEA,IACE,SpBizEF,CoB9yEA,GAEE,SAAA,CADA,uBpBizEF,CACF,CoBxyEA,MACE,mgBAAA,CACA,oiBAAA,CACA,0nBAAA,CACA,mhBpB0yEF,CoBpyEA,WAOE,kCAAA,CAAA,0BAAA,CANA,aAAA,CACA,gBAAA,CACA,eAAA,CAEA,uCAAA,CAGA,uBAAA,CAJA,kBpB0yEF,CoBnyEE,iBACE,UpBqyEJ,CoBjyEE,iBACE,oBAAA,CAEA,aAAA,CACA,qBAAA,CAFA,UpBqyEJ,CoBhyEI,+BAEE,iBpBkyEN,CoBpyEI,+BAEE,kBpBkyEN,CoBpyEI,qBACE,gBpBmyEN,CoB9xEI,kDACE,iBpBiyEN,CoBlyEI,kDACE,kBpBiyEN,CoBlyEI,kDAEE,iBpBgyEN,CoBlyEI,kDAEE,kBpBgyEN,CoB3xEE,iCAGE,iBpBgyEJ,CoBnyEE,iCAGE,kBpBgyEJ,CoBnyEE,uBACE,oBAAA,CACA,6BAAA,CAEA,eAAA,CACA,sBAAA,CACA,qBpB6xEJ,CoBzxEE,kBACE,YAAA,CAMA,gBAAA,CALA,SAAA,CAMA,oBAAA,CAJA,gBAAA,CAKA,WAAA,CAHA,eAAA,CADA,SAAA,CAFA,UpBiyEJ,CoBxxEI,iDACE,4BpB0xEN,CoBrxEE,iBACE,eAAA,CACA,sBpBuxEJ,CoBpxEI,gDACE,2BpBsxEN,CoBlxEI,kCAIE,kBpB0xEN,CoB9xEI,kCAIE,iBpB0xEN,CoB9xEI,wBAME,6BAAA,CAIA,UAAA,CATA,oBAAA,CAEA,YAAA,CAIA,4BAAA,CAAA,oBAAA,CACA,6BAAA,CAAA,qBAAA,CACA,yBAAA,CAAA,iBAAA,CAJA,uBAAA,CAHA,WpB4xEN,CoBhxEI,iCACE,apBkxEN,CoB9wEI,iCACE,gDAAA,CAAA,wCpBgxEN,CoB5wEI,+BACE,8CAAA,CAAA,sCpB8wEN,CoB1wEI,+BACE,8CAAA,CAAA,sCpB4wEN,CoBxwEI,sCACE,qDAAA,CAAA,6CpB0wEN,CqBj6EA,SASE,2CAAA,CAFA,gCAAA,CAHA,aAAA,CAIA,eAAA,CAFA,aAAA,CADA,UAAA,CAFA,SrBw6EF,CqB/5EE,aAZF,SAaI,YrBk6EF,CACF,CKvvEI,wCgBzLJ,SAkBI,YrBk6EF,CACF,CqB/5EE,iBACE,mBrBi6EJ,CqB75EE,yBAEE,iBrBm6EJ,CqBr6EE,yBAEE,kBrBm6EJ,CqBr6EE,eAME,eAAA,CADA,eAAA,CAJA,QAAA,CAEA,SAAA,CACA,kBrBi6EJ,CqB35EE,eACE,oBAAA,CACA,aAAA,CACA,kBAAA,CAAA,mBrB65EJ,CqBx5EE,eAOE,kCAAA,CAAA,0BAAA,CANA,aAAA,CAEA,eAAA,CADA,gBAAA,CAMA,UAAA,CAJA,uCAAA,CACA,oBAAA,CAIA,8DrBy5EJ,CqBp5EI,iEAEE,aAAA,CACA,SrBq5EN,CqBx5EI,8DAEE,aAAA,CACA,SrBq5EN,CqBx5EI,wDAEE,aAAA,CACA,SrBq5EN,CqBh5EM,2CACE,qBrBk5ER,CqBn5EM,2CACE,qBrBq5ER,CqBt5EM,2CACE,qBrBw5ER,CqBz5EM,2CACE,qBrB25ER,CqB55EM,2CACE,oBrB85ER,CqB/5EM,2CACE,qBrBi6ER,CqBl6EM,2CACE,qBrBo6ER,CqBr6EM,2CACE,qBrBu6ER,CqBx6EM,4CACE,qBrB06ER,CqB36EM,4CACE,oBrB66ER,CqB96EM,4CACE,qBrBg7ER,CqBj7EM,4CACE,qBrBm7ER,CqBp7EM,4CACE,qBrBs7ER,CqBv7EM,4CACE,qBrBy7ER,CqB17EM,4CACE,oBrB47ER,CqBt7EI,gCAEE,SAAA,CADA,yBAAA,CAEA,wCrBw7EN,CsBrgFA,MACE,wStBwgFF,CsB//EE,qBAEE,mBAAA,CADA,kBtBmgFJ,CsB9/EE,8BAEE,iBtBygFJ,CsB3gFE,8BAEE,gBtBygFJ,CsB3gFE,oBAUE,+CAAA,CACA,oBAAA,CAVA,oBAAA,CAKA,gBAAA,CADA,eAAA,CAGA,qBAAA,CADA,eAAA,CAJA,kBAAA,CACA,uBAAA,CAKA,qBtBkgFJ,CsB7/EI,0BAGE,uCAAA,CAFA,aAAA,CACA,YAAA,CAEA,6CtB+/EN,CsB1/EM,gEAGE,0CAAA,CADA,+BtB4/ER,CsBt/EI,yBACE,uBtBw/EN,CsBh/EI,gCAME,oDAAA,CAMA,UAAA,CAXA,oBAAA,CAEA,YAAA,CACA,iBAAA,CAGA,qCAAA,CAAA,6BAAA,CACA,4BAAA,CAAA,oBAAA,CACA,6BAAA,CAAA,qBAAA,CACA,yBAAA,CAAA,iBAAA,CACA,iCAAA,CANA,0BAAA,CAHA,WtB4/EN,CsB9+EI,6DACE,0CtBg/EN,CsBj/EI,0DACE,0CtBg/EN,CsBj/EI,oDACE,0CtBg/EN,CuBzjFA,iBACE,GACE,uDAAA,CACA,oBvB4jFF,CuBzjFA,IACE,mCAAA,CACA,kBvB2jFF,CuBxjFA,GACE,8BAAA,CACA,oBvB0jFF,CACF,CuBljFA,MACE,wBvBojFF,CuB9iFA,YAwBE,kCAAA,CAAA,0BAAA,CALA,2CAAA,CACA,mBAAA,CACA,8BAAA,CAJA,gCAAA,CACA,sCAAA,CAfA,+IACE,CAYF,8BAAA,CASA,SAAA,CAxBA,iBAAA,CACA,uBAAA,CAoBA,4BAAA,CAIA,uDACE,CAZF,6BAAA,CADA,SvByjFF,CuBviFE,oBAGE,SAAA,CADA,uBAAA,CAEA,2EACE,CAJF,SvB4iFJ,CuBliFE,4DACE,sCvBoiFJ,CuBriFE,yDACE,sCvBoiFJ,CuBriFE,mDACE,sCvBoiFJ,CuBhiFE,mBAEE,gBAAA,CADA,avBmiFJ,CuB/hFI,2CACE,YvBiiFN,CuB7hFI,0CACE,evB+hFN,CuBvhFA,eACE,eAAA,CAEA,YAAA,CADA,kBvB2hFF,CuBvhFE,yBACE,avByhFJ,CuBrhFE,6BACE,oBAAA,CAGA,iBvBqhFJ,CuBjhFE,sBAOE,cAAA,CAFA,sCAAA,CADA,eAAA,CADA,YAAA,CAGA,YAAA,CALA,iBAAA,CAOA,wBAAA,CAAA,qBAAA,CAAA,oBAAA,CAAA,gBAAA,CANA,SvByhFJ,CuBhhFI,qCACE,UAAA,CACA,uBvBkhFN,CuB/gFM,gEACE,UvBihFR,CuBlhFM,6DACE,UvBihFR,CuBlhFM,uDACE,UvBihFR,CuBzgFI,4BAYE,oDAAA,CACA,iBAAA,CAIA,UAAA,CARA,YAAA,CANA,YAAA,CAOA,cAAA,CACA,cAAA,CAVA,iBAAA,CACA,KAAA,CAYA,2CACE,CARF,wBAAA,CACA,6BAAA,CAJA,UvBohFN,CuBpgFM,4CAGE,8CACE,2BvBogFR,CACF,CuBhgFM,gDAIE,cAAA,CAHA,2CvBmgFR,CuB3/EI,2BAEE,sCAAA,CADA,iBvB8/EN,CuBz/EI,qFACE,+BvB2/EN,CuB5/EI,kFACE,+BvB2/EN,CuB5/EI,4EACE,+BvB2/EN,CuBx/EM,2FACE,0CvB0/ER,CuB3/EM,wFACE,0CvB0/ER,CuB3/EM,kFACE,0CvB0/ER,CuBr/EI,0CAGE,cAAA,CADA,eAAA,CADA,SvBy/EN,CuBn/EI,8CACE,oBAAA,CACA,evBq/EN,CuBl/EM,qDAME,mCAAA,CALA,oBAAA,CACA,mBAAA,CAEA,qBAAA,CACA,iDAAA,CAFA,qBvBu/ER,CuBh/EQ,iBAVF,qDAWI,WvBm/ER,CuBh/EQ,mEACE,mCvBk/EV,CACF,CwBhtFA,kBAKE,exB4tFF,CwBjuFA,kBAKE,gBxB4tFF,CwBjuFA,QASE,2CAAA,CACA,oBAAA,CAEA,8BAAA,CALA,uCAAA,CAHA,aAAA,CAIA,eAAA,CAGA,YAAA,CALA,mBAAA,CALA,cAAA,CACA,UAAA,CAWA,yBAAA,CACA,mGACE,CAZF,SxB8tFF,CwB5sFE,aArBF,QAsBI,YxB+sFF,CACF,CwB5sFE,kBACE,wBxB8sFJ,CwB1sFE,gBAEE,SAAA,CAEA,mBAAA,CAHA,+BAAA,CAEA,uBxB6sFJ,CwBzsFI,0BACE,8BxB2sFN,CwBtsFE,mCAEE,0CAAA,CADA,+BxBysFJ,CwB1sFE,gCAEE,0CAAA,CADA,+BxBysFJ,CwB1sFE,0BAEE,0CAAA,CADA,+BxBysFJ,CwBpsFE,YACE,oBAAA,CACA,oBxBssFJ,CyB1vFA,oBACE,GACE,mBzB6vFF,CACF,CyBrvFA,MACE,wfzBuvFF,CyBjvFA,YACE,aAAA,CAEA,eAAA,CADA,azBqvFF,CyBjvFE,+BAOE,kBAAA,CAAA,kBzBkvFJ,CyBzvFE,+BAOE,iBAAA,CAAA,mBzBkvFJ,CyBzvFE,qBAQE,aAAA,CAEA,cAAA,CADA,YAAA,CARA,iBAAA,CAKA,UzBmvFJ,CyB5uFI,qCAIE,iBzBovFN,CyBxvFI,qCAIE,kBzBovFN,CyBxvFI,2BAKE,6BAAA,CAKA,UAAA,CATA,oBAAA,CAEA,YAAA,CAGA,yCAAA,CAAA,iCAAA,CACA,4BAAA,CAAA,oBAAA,CACA,6BAAA,CAAA,qBAAA,CACA,yBAAA,CAAA,iBAAA,CAPA,WzBsvFN,CyBzuFE,kBAUE,2CAAA,CACA,mBAAA,CACA,8BAAA,CAJA,gCAAA,CACA,oBAAA,CAJA,kBAAA,CADA,YAAA,CASA,SAAA,CANA,aAAA,CADA,SAAA,CALA,iBAAA,CAgBA,gCAAA,CAAA,4BAAA,CAfA,UAAA,CAYA,+CACE,CAZF,SzBuvFJ,CyBtuFI,gEACE,gBAAA,CACA,SAAA,CACA,8CACE,CADF,sCzBwuFN,CyB3uFI,6DACE,gBAAA,CACA,SAAA,CACA,2CACE,CADF,sCzBwuFN,CyB3uFI,uDACE,gBAAA,CACA,SAAA,CACA,sCzBwuFN,CyBluFI,wBAGE,oCACE,gCzBkuFN,CyB9tFI,2CACE,czBguFN,CACF,CyB3tFE,kBACE,kBzB6tFJ,CyBztFE,4BAGE,kBAAA,CAAA,oBzBguFJ,CyBnuFE,4BAGE,mBAAA,CAAA,mBzBguFJ,CyBnuFE,kBAME,cAAA,CALA,aAAA,CAIA,YAAA,CAKA,uBAAA,CAHA,2CACE,CAJF,kBAAA,CAFA,UzBiuFJ,CyBttFI,6CACE,+BzBwtFN,CyBztFI,0CACE,+BzBwtFN,CyBztFI,oCACE,+BzBwtFN,CyBptFI,wBACE,qDzBstFN,C0BvzFA,MAEI,uWAAA,CAAA,8WAAA,CAAA,sPAAA,CAAA,8xBAAA,CAAA,0MAAA,CAAA,gbAAA,CAAA,gMAAA,CAAA,iQAAA,CAAA,0VAAA,CAAA,6aAAA,CAAA,8SAAA,CAAA,gM1Bg1FJ,C0Bp0FE,4CAQE,8CAAA,CACA,2BAAA,CACA,mBAAA,CACA,8BAAA,CANA,mCAAA,CAHA,iBAAA,CAIA,gBAAA,CAHA,iBAAA,CACA,eAAA,CAGA,uB1B20FJ,C0Bp0FI,aAdF,4CAeI,e1Bw0FJ,CACF,C0Bp0FI,gDACE,qB1Bu0FN,C0Bn0FI,gHAEE,iBAAA,CADA,c1Bu0FN,C0Bx0FI,0GAEE,iBAAA,CADA,c1Bu0FN,C0Bx0FI,8FAEE,iBAAA,CADA,c1Bu0FN,C0Bl0FI,4FACE,iB1Bq0FN,C0Bj0FI,kFACE,e1Bo0FN,C0Bh0FI,0FACE,Y1Bm0FN,C0B/zFI,8EACE,mB1Bk0FN,C0B7zFE,sEAME,iBAAA,CAAA,mB1Bq0FJ,C0B30FE,sEAME,kBAAA,CAAA,kB1Bq0FJ,C0B30FE,sEAUE,uB1Bi0FJ,C0B30FE,sEAUE,wB1Bi0FJ,C0B30FE,sEAWE,4B1Bg0FJ,C0B30FE,4IAYE,6B1B+zFJ,C0B30FE,sEAYE,4B1B+zFJ,C0B30FE,kDAQE,oCAAA,CACA,WAAA,CAFA,eAAA,CAHA,eAAA,CACA,oBAAA,CAAA,iBAAA,CAHA,iB1By0FJ,C0B5zFI,kFACE,e1B+zFN,C0B3zFI,oFAGE,U1Bs0FN,C0Bz0FI,oFAGE,W1Bs0FN,C0Bz0FI,gEAME,wBCsIU,CDjIV,UAAA,CANA,WAAA,CAEA,kDAAA,CAAA,0CAAA,CACA,4BAAA,CAAA,oBAAA,CACA,6BAAA,CAAA,qBAAA,CACA,yBAAA,CAAA,iBAAA,CATA,iBAAA,CACA,UAAA,CAEA,U1Bq0FN,C0B1zFI,4DACE,4D1B6zFN,C0BxyFE,iEACE,oB1B2yFJ,C0B5yFE,2DACE,oB1B2yFJ,C0B5yFE,+CACE,oB1B2yFJ,C0BvyFE,wEACE,oC1B0yFJ,C0B3yFE,kEACE,oC1B0yFJ,C0B3yFE,sDACE,oC1B0yFJ,C0BvyFI,+EACE,wBAnBG,CAoBH,kDAAA,CAAA,0C1ByyFN,C0B3yFI,yEACE,wBAnBG,CAoBH,0C1ByyFN,C0B3yFI,6DACE,wBAnBG,CAoBH,kDAAA,CAAA,0C1ByyFN,C0BryFI,8EACE,a1BuyFN,C0BxyFI,wEACE,a1BuyFN,C0BxyFI,4DACE,a1BuyFN,C0BvzFE,oFACE,oB1B0zFJ,C0B3zFE,8EACE,oB1B0zFJ,C0B3zFE,kEACE,oB1B0zFJ,C0BtzFE,2FACE,mC1ByzFJ,C0B1zFE,qFACE,mC1ByzFJ,C0B1zFE,yEACE,mC1ByzFJ,C0BtzFI,kGACE,wBAnBG,CAoBH,sDAAA,CAAA,8C1BwzFN,C0B1zFI,4FACE,wBAnBG,CAoBH,8C1BwzFN,C0B1zFI,gFACE,wBAnBG,CAoBH,sDAAA,CAAA,8C1BwzFN,C0BpzFI,iGACE,a1BszFN,C0BvzFI,2FACE,a1BszFN,C0BvzFI,+EACE,a1BszFN,C0Bt0FE,uEACE,oB1By0FJ,C0B10FE,iEACE,oB1By0FJ,C0B10FE,qDACE,oB1By0FJ,C0Br0FE,8EACE,mC1Bw0FJ,C0Bz0FE,wEACE,mC1Bw0FJ,C0Bz0FE,4DACE,mC1Bw0FJ,C0Br0FI,qFACE,wBAnBG,CAoBH,kDAAA,CAAA,0C1Bu0FN,C0Bz0FI,+EACE,wBAnBG,CAoBH,0C1Bu0FN,C0Bz0FI,mEACE,wBAnBG,CAoBH,kDAAA,CAAA,0C1Bu0FN,C0Bn0FI,oFACE,a1Bq0FN,C0Bt0FI,8EACE,a1Bq0FN,C0Bt0FI,kEACE,a1Bq0FN,C0Br1FE,iFACE,oB1Bw1FJ,C0Bz1FE,2EACE,oB1Bw1FJ,C0Bz1FE,+DACE,oB1Bw1FJ,C0Bp1FE,wFACE,mC1Bu1FJ,C0Bx1FE,kFACE,mC1Bu1FJ,C0Bx1FE,sEACE,mC1Bu1FJ,C0Bp1FI,+FACE,wBAnBG,CAoBH,iDAAA,CAAA,yC1Bs1FN,C0Bx1FI,yFACE,wBAnBG,CAoBH,yC1Bs1FN,C0Bx1FI,6EACE,wBAnBG,CAoBH,iDAAA,CAAA,yC1Bs1FN,C0Bl1FI,8FACE,a1Bo1FN,C0Br1FI,wFACE,a1Bo1FN,C0Br1FI,4EACE,a1Bo1FN,C0Bp2FE,iFACE,oB1Bu2FJ,C0Bx2FE,2EACE,oB1Bu2FJ,C0Bx2FE,+DACE,oB1Bu2FJ,C0Bn2FE,wFACE,kC1Bs2FJ,C0Bv2FE,kFACE,kC1Bs2FJ,C0Bv2FE,sEACE,kC1Bs2FJ,C0Bn2FI,+FACE,wBAnBG,CAoBH,qDAAA,CAAA,6C1Bq2FN,C0Bv2FI,yFACE,wBAnBG,CAoBH,6C1Bq2FN,C0Bv2FI,6EACE,wBAnBG,CAoBH,qDAAA,CAAA,6C1Bq2FN,C0Bj2FI,8FACE,a1Bm2FN,C0Bp2FI,wFACE,a1Bm2FN,C0Bp2FI,4EACE,a1Bm2FN,C0Bn3FE,gFACE,oB1Bs3FJ,C0Bv3FE,0EACE,oB1Bs3FJ,C0Bv3FE,8DACE,oB1Bs3FJ,C0Bl3FE,uFACE,oC1Bq3FJ,C0Bt3FE,iFACE,oC1Bq3FJ,C0Bt3FE,qEACE,oC1Bq3FJ,C0Bl3FI,8FACE,wBAnBG,CAoBH,sDAAA,CAAA,8C1Bo3FN,C0Bt3FI,wFACE,wBAnBG,CAoBH,8C1Bo3FN,C0Bt3FI,4EACE,wBAnBG,CAoBH,sDAAA,CAAA,8C1Bo3FN,C0Bh3FI,6FACE,a1Bk3FN,C0Bn3FI,uFACE,a1Bk3FN,C0Bn3FI,2EACE,a1Bk3FN,C0Bl4FE,wFACE,oB1Bq4FJ,C0Bt4FE,kFACE,oB1Bq4FJ,C0Bt4FE,sEACE,oB1Bq4FJ,C0Bj4FE,+FACE,mC1Bo4FJ,C0Br4FE,yFACE,mC1Bo4FJ,C0Br4FE,6EACE,mC1Bo4FJ,C0Bj4FI,sGACE,wBAnBG,CAoBH,qDAAA,CAAA,6C1Bm4FN,C0Br4FI,gGACE,wBAnBG,CAoBH,6C1Bm4FN,C0Br4FI,oFACE,wBAnBG,CAoBH,qDAAA,CAAA,6C1Bm4FN,C0B/3FI,qGACE,a1Bi4FN,C0Bl4FI,+FACE,a1Bi4FN,C0Bl4FI,mFACE,a1Bi4FN,C0Bj5FE,mFACE,oB1Bo5FJ,C0Br5FE,6EACE,oB1Bo5FJ,C0Br5FE,iEACE,oB1Bo5FJ,C0Bh5FE,0FACE,mC1Bm5FJ,C0Bp5FE,oFACE,mC1Bm5FJ,C0Bp5FE,wEACE,mC1Bm5FJ,C0Bh5FI,iGACE,wBAnBG,CAoBH,qDAAA,CAAA,6C1Bk5FN,C0Bp5FI,2FACE,wBAnBG,CAoBH,6C1Bk5FN,C0Bp5FI,+EACE,wBAnBG,CAoBH,qDAAA,CAAA,6C1Bk5FN,C0B94FI,gGACE,a1Bg5FN,C0Bj5FI,0FACE,a1Bg5FN,C0Bj5FI,8EACE,a1Bg5FN,C0Bh6FE,0EACE,oB1Bm6FJ,C0Bp6FE,oEACE,oB1Bm6FJ,C0Bp6FE,wDACE,oB1Bm6FJ,C0B/5FE,iFACE,mC1Bk6FJ,C0Bn6FE,2EACE,mC1Bk6FJ,C0Bn6FE,+DACE,mC1Bk6FJ,C0B/5FI,wFACE,wBAnBG,CAoBH,oDAAA,CAAA,4C1Bi6FN,C0Bn6FI,kFACE,wBAnBG,CAoBH,4C1Bi6FN,C0Bn6FI,sEACE,wBAnBG,CAoBH,oDAAA,CAAA,4C1Bi6FN,C0B75FI,uFACE,a1B+5FN,C0Bh6FI,iFACE,a1B+5FN,C0Bh6FI,qEACE,a1B+5FN,C0B/6FE,gEACE,oB1Bk7FJ,C0Bn7FE,0DACE,oB1Bk7FJ,C0Bn7FE,8CACE,oB1Bk7FJ,C0B96FE,uEACE,kC1Bi7FJ,C0Bl7FE,iEACE,kC1Bi7FJ,C0Bl7FE,qDACE,kC1Bi7FJ,C0B96FI,8EACE,wBAnBG,CAoBH,iDAAA,CAAA,yC1Bg7FN,C0Bl7FI,wEACE,wBAnBG,CAoBH,yC1Bg7FN,C0Bl7FI,4DACE,wBAnBG,CAoBH,iDAAA,CAAA,yC1Bg7FN,C0B56FI,6EACE,a1B86FN,C0B/6FI,uEACE,a1B86FN,C0B/6FI,2DACE,a1B86FN,C0B97FE,oEACE,oB1Bi8FJ,C0Bl8FE,8DACE,oB1Bi8FJ,C0Bl8FE,kDACE,oB1Bi8FJ,C0B77FE,2EACE,oC1Bg8FJ,C0Bj8FE,qEACE,oC1Bg8FJ,C0Bj8FE,yDACE,oC1Bg8FJ,C0B77FI,kFACE,wBAnBG,CAoBH,qDAAA,CAAA,6C1B+7FN,C0Bj8FI,4EACE,wBAnBG,CAoBH,6C1B+7FN,C0Bj8FI,gEACE,wBAnBG,CAoBH,qDAAA,CAAA,6C1B+7FN,C0B37FI,iFACE,a1B67FN,C0B97FI,2EACE,a1B67FN,C0B97FI,+DACE,a1B67FN,C0B78FE,wEACE,oB1Bg9FJ,C0Bj9FE,kEACE,oB1Bg9FJ,C0Bj9FE,sDACE,oB1Bg9FJ,C0B58FE,+EACE,kC1B+8FJ,C0Bh9FE,yEACE,kC1B+8FJ,C0Bh9FE,6DACE,kC1B+8FJ,C0B58FI,sFACE,wBAnBG,CAoBH,mDAAA,CAAA,2C1B88FN,C0Bh9FI,gFACE,wBAnBG,CAoBH,2C1B88FN,C0Bh9FI,oEACE,wBAnBG,CAoBH,mDAAA,CAAA,2C1B88FN,C0B18FI,qFACE,a1B48FN,C0B78FI,+EACE,a1B48FN,C0B78FI,mEACE,a1B48FN,C4B9mGA,MACE,wM5BinGF,C4BxmGE,sBACE,uCAAA,CACA,gB5B2mGJ,C4BxmGI,mCACE,a5B0mGN,C4B3mGI,mCACE,c5B0mGN,C4BtmGM,4BACE,sB5BwmGR,C4BrmGQ,mCACE,gC5BumGV,C4BnmGQ,2DAEE,SAAA,CADA,uBAAA,CAEA,e5BqmGV,C4BjmGQ,0EAEE,SAAA,CADA,uB5BomGV,C4BrmGQ,uEAEE,SAAA,CADA,uB5BomGV,C4BrmGQ,iEAEE,SAAA,CADA,uB5BomGV,C4B/lGQ,yCACE,Y5BimGV,C4B1lGE,0BAEE,eAAA,CADA,e5B6lGJ,C4BzlGI,+BACE,oB5B2lGN,C4BtlGE,gDACE,Y5BwlGJ,C4BplGE,8BAEE,+BAAA,CADA,oBAAA,CAGA,WAAA,CAGA,SAAA,CADA,4BAAA,CAEA,4DACE,CAJF,0B5BwlGJ,C4B/kGI,aAdF,8BAeI,+BAAA,CAEA,SAAA,CADA,uB5BmlGJ,CACF,C4B/kGI,wCACE,6B5BilGN,C4B7kGI,oCACE,+B5B+kGN,C4B3kGI,qCAIE,6BAAA,CAKA,UAAA,CARA,oBAAA,CAEA,YAAA,CAEA,2CAAA,CAAA,mCAAA,CACA,4BAAA,CAAA,oBAAA,CACA,6BAAA,CAAA,qBAAA,CACA,yBAAA,CAAA,iBAAA,CANA,W5BolGN,C4BvkGQ,mDACE,oB5BykGV,C6BvrGE,kCAEE,iB7B6rGJ,C6B/rGE,kCAEE,kB7B6rGJ,C6B/rGE,wBAGE,yCAAA,CAFA,oBAAA,CAGA,SAAA,CACA,mC7B0rGJ,C6BrrGI,aAVF,wBAWI,Y7BwrGJ,CACF,C6BprGE,mFAEE,SAAA,CACA,2CACE,CADF,mC7BsrGJ,C6BzrGE,gFAEE,SAAA,CACA,wCACE,CADF,mC7BsrGJ,C6BzrGE,0EAEE,SAAA,CACA,mC7BsrGJ,C6BhrGE,mFAEE,+B7BkrGJ,C6BprGE,gFAEE,+B7BkrGJ,C6BprGE,0EAEE,+B7BkrGJ,C6B9qGE,oBACE,yBAAA,CACA,uBAAA,CAGA,yE7B8qGJ,CK/iGI,sCwBrHE,qDACE,uB7BuqGN,CACF,C6BlqGE,0CACE,yB7BoqGJ,C6BrqGE,uCACE,yB7BoqGJ,C6BrqGE,iCACE,yB7BoqGJ,C6BhqGE,sBACE,0B7BkqGJ,C8B7tGE,2BACE,a9BguGJ,CK3iGI,wCyBtLF,2BAKI,e9BguGJ,CACF,C8B7tGI,6BAEE,0BAAA,CAAA,2BAAA,CACA,eAAA,CACA,iBAAA,CAHA,yBAAA,CAAA,sBAAA,CAAA,iB9BkuGN,C8B5tGM,2CACE,kB9B8tGR,C+B/uGE,kDACE,kCAAA,CAAA,0B/BkvGJ,C+BnvGE,+CACE,0B/BkvGJ,C+BnvGE,yCACE,kCAAA,CAAA,0B/BkvGJ,C+B9uGE,uBACE,4C/BgvGJ,C+B5uGE,uBACE,4C/B8uGJ,C+B1uGE,4BACE,qC/B4uGJ,C+BzuGI,mCACE,a/B2uGN,C+BvuGI,kCACE,a/ByuGN,C+BpuGE,0BAKE,eAAA,CAJA,aAAA,CACA,YAAA,CAEA,aAAA,CADA,kBAAA,CAAA,mB/BwuGJ,C+BnuGI,uCACE,e/BquGN,C+BjuGI,sCACE,kB/BmuGN,CgClxGA,MACE,8LhCqxGF,CgC5wGE,oBACE,iBAAA,CAEA,gBAAA,CADA,ahCgxGJ,CgC5wGI,wCACE,uBhC8wGN,CgC1wGI,gCAEE,eAAA,CADA,gBhC6wGN,CgCtwGM,wCACE,mBhCwwGR,CgClwGE,8BAGE,oBhCuwGJ,CgC1wGE,8BAGE,mBhCuwGJ,CgC1wGE,8BAIE,4BhCswGJ,CgC1wGE,4DAKE,6BhCqwGJ,CgC1wGE,8BAKE,4BhCqwGJ,CgC1wGE,oBAME,cAAA,CALA,aAAA,CACA,ehCwwGJ,CgCjwGI,kCACE,uCAAA,CACA,oBhCmwGN,CgC/vGI,wCAEE,uCAAA,CADA,YhCkwGN,CgC7vGI,oCAGE,WhCywGN,CgC5wGI,oCAGE,UhCywGN,CgC5wGI,0BAME,6BAAA,CAOA,UAAA,CARA,WAAA,CAEA,yCAAA,CAAA,iCAAA,CACA,4BAAA,CAAA,oBAAA,CACA,6BAAA,CAAA,qBAAA,CACA,yBAAA,CAAA,iBAAA,CATA,iBAAA,CACA,UAAA,CASA,sBAAA,CACA,yBAAA,CARA,UhCwwGN,CgC5vGM,oCACE,wBhC8vGR,CgCzvGI,4BACE,YhC2vGN,CgCtvGI,4CACE,YhCwvGN,CiC30GE,qDACE,mBAAA,CACA,cAAA,CACA,uBjC80GJ,CiCj1GE,kDACE,mBAAA,CACA,cAAA,CACA,uBjC80GJ,CiCj1GE,4CACE,mBAAA,CACA,cAAA,CACA,uBjC80GJ,CiC30GI,yDAGE,iBAAA,CADA,eAAA,CADA,ajC+0GN,CiCh1GI,sDAGE,iBAAA,CADA,eAAA,CADA,ajC+0GN,CiCh1GI,gDAGE,iBAAA,CADA,eAAA,CADA,ajC+0GN,CkCr1GE,gCACE,sClCw1GJ,CkCz1GE,6BACE,sClCw1GJ,CkCz1GE,uBACE,sClCw1GJ,CkCr1GE,cACE,yClCu1GJ,CkC30GE,4DACE,oClC60GJ,CkC90GE,yDACE,oClC60GJ,CkC90GE,mDACE,oClC60GJ,CkCr0GE,6CACE,qClCu0GJ,CkCx0GE,0CACE,qClCu0GJ,CkCx0GE,oCACE,qClCu0GJ,CkC7zGE,oDACE,oClC+zGJ,CkCh0GE,iDACE,oClC+zGJ,CkCh0GE,2CACE,oClC+zGJ,CkCtzGE,gDACE,qClCwzGJ,CkCzzGE,6CACE,qClCwzGJ,CkCzzGE,uCACE,qClCwzGJ,CkCnzGE,gCACE,kClCqzGJ,CkCtzGE,6BACE,kClCqzGJ,CkCtzGE,uBACE,kClCqzGJ,CkC/yGE,qCACE,sClCizGJ,CkClzGE,kCACE,sClCizGJ,CkClzGE,4BACE,sClCizGJ,CkC1yGE,yCACE,sClC4yGJ,CkC7yGE,sCACE,sClC4yGJ,CkC7yGE,gCACE,sClC4yGJ,CkCryGE,yCACE,qClCuyGJ,CkCxyGE,sCACE,qClCuyGJ,CkCxyGE,gCACE,qClCuyGJ,CkC9xGE,gDACE,qClCgyGJ,CkCjyGE,6CACE,qClCgyGJ,CkCjyGE,uCACE,qClCgyGJ,CkCxxGE,6CACE,sClC0xGJ,CkC3xGE,0CACE,sClC0xGJ,CkC3xGE,oCACE,sClC0xGJ,CkC/wGE,yDACE,qClCixGJ,CkClxGE,sDACE,qClCixGJ,CkClxGE,gDACE,qClCixGJ,CkC5wGE,iCAGE,mBAAA,CAFA,gBAAA,CACA,gBlC+wGJ,CkCjxGE,8BAGE,mBAAA,CAFA,gBAAA,CACA,gBlC+wGJ,CkCjxGE,wBAGE,mBAAA,CAFA,gBAAA,CACA,gBlC+wGJ,CkC3wGE,eACE,4ClC6wGJ,CkC1wGE,eACE,4ClC4wGJ,CkCxwGE,gBAIE,wCAAA,CAHA,aAAA,CACA,wBAAA,CACA,wBlC2wGJ,CkCtwGE,yBAOE,wCAAA,CACA,+DAAA,CACA,4BAAA,CACA,6BAAA,CARA,iBAAA,CAIA,eAAA,CADA,eAAA,CAFA,cAAA,CACA,oCAAA,CAHA,iBlCixGJ,CkCrwGI,6BACE,YlCuwGN,CkCpwGM,kCACE,wBAAA,CACA,yBlCswGR,CkChwGE,iCAWE,wCAAA,CACA,+DAAA,CAFA,uCAAA,CAGA,0BAAA,CAPA,UAAA,CAJA,oBAAA,CAMA,2BAAA,CADA,2BAAA,CAEA,2BAAA,CARA,uBAAA,CAAA,eAAA,CAaA,wBAAA,CAAA,qBAAA,CAAA,oBAAA,CAAA,gBAAA,CATA,SlCywGJ,CkCvvGE,sBACE,iBAAA,CACA,iBlCyvGJ,CkCjvGI,sCACE,gBlCmvGN,CkC/uGI,gDACE,YlCivGN,CkCvuGA,gBACE,iBlC0uGF,CkCtuGE,uCACE,aAAA,CACA,SlCwuGJ,CkC1uGE,oCACE,aAAA,CACA,SlCwuGJ,CkC1uGE,8BACE,aAAA,CACA,SlCwuGJ,CkCnuGE,mBACE,YlCquGJ,CkChuGE,oBACE,QlCkuGJ,CkC9tGE,4BACE,WAAA,CACA,SAAA,CACA,elCguGJ,CkC7tGI,0CACE,YlC+tGN,CkCztGE,yBAIE,wCAAA,CAEA,+BAAA,CADA,4BAAA,CAFA,eAAA,CADA,oDAAA,CAKA,wBAAA,CAAA,qBAAA,CAAA,oBAAA,CAAA,gBlC2tGJ,CkCvtGE,2BAEE,+DAAA,CADA,2BlC0tGJ,CkCttGI,+BACE,uCAAA,CACA,gBlCwtGN,CkCntGE,sBACE,MAAA,CACA,WlCqtGJ,CkChtGA,aACE,alCmtGF,CkCzsGE,4BAEE,aAAA,CADA,YlC6sGJ,CkCzsGI,wDAEE,2BAAA,CADA,wBlC4sGN,CkCtsGE,+BAKE,2CAAA,CAEA,+BAAA,CADA,gCAAA,CADA,sBAAA,CAJA,mBAAA,CAEA,gBAAA,CADA,alC6sGJ,CkCrsGI,qCAEE,UAAA,CACA,UAAA,CAFA,alCysGN,CK10GI,wC6BgJF,8BACE,iBlC8rGF,CkCprGE,wSAGE,elC0rGJ,CkCtrGE,sCAEE,mBAAA,CACA,eAAA,CADA,oBAAA,CADA,kBAAA,CAAA,mBlC0rGJ,CACF,CDjhHI,kDAIE,+BAAA,CACA,8BAAA,CAFA,aAAA,CADA,QAAA,CADA,iBCuhHN,CDxhHI,+CAIE,+BAAA,CACA,8BAAA,CAFA,aAAA,CADA,QAAA,CADA,iBCuhHN,CDxhHI,yCAIE,+BAAA,CACA,8BAAA,CAFA,aAAA,CADA,QAAA,CADA,iBCuhHN,CD/gHI,uBAEE,uCAAA,CADA,cCkhHN,CD79GM,iHAEE,WAlDkB,CAiDlB,kBCw+GR,CDz+GM,6HAEE,WAlDkB,CAiDlB,kBCo/GR,CDr/GM,6HAEE,WAlDkB,CAiDlB,kBCggHR,CDjgHM,oHAEE,WAlDkB,CAiDlB,kBC4gHR,CD7gHM,0HAEE,WAlDkB,CAiDlB,kBCwhHR,CDzhHM,uHAEE,WAlDkB,CAiDlB,kBCoiHR,CDriHM,uHAEE,WAlDkB,CAiDlB,kBCgjHR,CDjjHM,6HAEE,WAlDkB,CAiDlB,kBC4jHR,CD7jHM,yCAEE,WAlDkB,CAiDlB,kBCgkHR,CDjkHM,yCAEE,WAlDkB,CAiDlB,kBCokHR,CDrkHM,0CAEE,WAlDkB,CAiDlB,kBCwkHR,CDzkHM,uCAEE,WAlDkB,CAiDlB,kBC4kHR,CD7kHM,wCAEE,WAlDkB,CAiDlB,kBCglHR,CDjlHM,sCAEE,WAlDkB,CAiDlB,kBColHR,CDrlHM,wCAEE,WAlDkB,CAiDlB,kBCwlHR,CDzlHM,oCAEE,WAlDkB,CAiDlB,kBC4lHR,CD7lHM,2CAEE,WAlDkB,CAiDlB,kBCgmHR,CDjmHM,qCAEE,WAlDkB,CAiDlB,kBComHR,CDrmHM,oCAEE,WAlDkB,CAiDlB,kBCwmHR,CDzmHM,kCAEE,WAlDkB,CAiDlB,kBC4mHR,CD7mHM,qCAEE,WAlDkB,CAiDlB,kBCgnHR,CDjnHM,mCAEE,WAlDkB,CAiDlB,kBConHR,CDrnHM,qCAEE,WAlDkB,CAiDlB,kBCwnHR,CDznHM,wCAEE,WAlDkB,CAiDlB,kBC4nHR,CD7nHM,sCAEE,WAlDkB,CAiDlB,kBCgoHR,CDjoHM,2CAEE,WAlDkB,CAiDlB,kBCooHR,CDznHM,iCAEE,WAPkB,CAMlB,iBC4nHR,CD7nHM,uCAEE,WAPkB,CAMlB,iBCgoHR,CDjoHM,mCAEE,WAPkB,CAMlB,iBCooHR,CmCttHA,MACE,qMAAA,CACA,mMnCytHF,CmChtHE,wBAKE,mBAAA,CAHA,YAAA,CACA,qBAAA,CACA,YAAA,CAHA,iBnCutHJ,CmC7sHI,8BAGE,QAAA,CACA,SAAA,CAHA,iBAAA,CACA,OnCitHN,CmC5sHM,qCACE,0BnC8sHR,CmC/qHE,2BAKE,uBAAA,CADA,+DAAA,CAHA,YAAA,CACA,cAAA,CACA,aAAA,CAGA,oBnCirHJ,CmC9qHI,aATF,2BAUI,gBnCirHJ,CACF,CmC9qHI,cAGE,+BACE,iBnC8qHN,CmC3qHM,sCAOE,oCAAA,CALA,QAAA,CAWA,UAAA,CATA,aAAA,CAEA,UAAA,CAHA,MAAA,CAFA,iBAAA,CAOA,2CAAA,CACA,qCACE,CAEF,kDAAA,CAPA,+BnCmrHR,CACF,CmCtqHI,8CACE,YnCwqHN,CmCpqHI,iCAQE,qCAAA,CACA,6BAAA,CALA,uCAAA,CAMA,cAAA,CATA,aAAA,CAKA,gBAAA,CADA,eAAA,CAFA,8BAAA,CAWA,+BAAA,CAHA,2CACE,CALF,kBAAA,CALA,UnCgrHN,CmCjqHM,aAII,6CACE,OnCgqHV,CmCjqHQ,8CACE,OnCmqHV,CmCpqHQ,8CACE,OnCsqHV,CmCvqHQ,8CACE,OnCyqHV,CmC1qHQ,8CACE,OnC4qHV,CmC7qHQ,8CACE,OnC+qHV,CmChrHQ,8CACE,OnCkrHV,CmCnrHQ,8CACE,OnCqrHV,CmCtrHQ,8CACE,OnCwrHV,CmCzrHQ,+CACE,QnC2rHV,CmC5rHQ,+CACE,QnC8rHV,CmC/rHQ,+CACE,QnCisHV,CmClsHQ,+CACE,QnCosHV,CmCrsHQ,+CACE,QnCusHV,CmCxsHQ,+CACE,QnC0sHV,CmC3sHQ,+CACE,QnC6sHV,CmC9sHQ,+CACE,QnCgtHV,CmCjtHQ,+CACE,QnCmtHV,CmCptHQ,+CACE,QnCstHV,CmCvtHQ,+CACE,QnCytHV,CACF,CmCptHM,uCACE,+BnCstHR,CmChtHE,4BACE,UnCktHJ,CmC/sHI,aAJF,4BAKI,gBnCktHJ,CACF,CmC9sHE,0BACE,YnCgtHJ,CmC7sHI,aAJF,0BAKI,anCgtHJ,CmC5sHM,sCACE,OnC8sHR,CmC/sHM,uCACE,OnCitHR,CmCltHM,uCACE,OnCotHR,CmCrtHM,uCACE,OnCutHR,CmCxtHM,uCACE,OnC0tHR,CmC3tHM,uCACE,OnC6tHR,CmC9tHM,uCACE,OnCguHR,CmCjuHM,uCACE,OnCmuHR,CmCpuHM,uCACE,OnCsuHR,CmCvuHM,wCACE,QnCyuHR,CmC1uHM,wCACE,QnC4uHR,CmC7uHM,wCACE,QnC+uHR,CmChvHM,wCACE,QnCkvHR,CmCnvHM,wCACE,QnCqvHR,CmCtvHM,wCACE,QnCwvHR,CmCzvHM,wCACE,QnC2vHR,CmC5vHM,wCACE,QnC8vHR,CmC/vHM,wCACE,QnCiwHR,CmClwHM,wCACE,QnCowHR,CmCrwHM,wCACE,QnCuwHR,CACF,CmCjwHI,+FAEE,QnCmwHN,CmChwHM,yGACE,wBAAA,CACA,yBnCmwHR,CmC1vHM,2DAEE,wBAAA,CACA,yBAAA,CAFA,QnC8vHR,CmCvvHM,iEACE,QnCyvHR,CmCtvHQ,qLAGE,wBAAA,CACA,yBAAA,CAFA,QnC0vHV,CmCpvHQ,6FACE,wBAAA,CACA,yBnCsvHV,CmCjvHM,yDACE,kBnCmvHR,CmC9uHI,sCACE,QnCgvHN,CmC3uHE,2BAEE,iBAAA,CAKA,kBAAA,CADA,uCAAA,CAEA,cAAA,CAPA,aAAA,CAGA,YAAA,CACA,gBAAA,CAKA,mBAAA,CADA,gCAAA,CANA,WnCovHJ,CmC1uHI,iCAEE,uDAAA,CADA,+BnC6uHN,CmCxuHI,iCAIE,6BAAA,CAQA,UAAA,CAXA,aAAA,CAEA,WAAA,CAKA,8CAAA,CAAA,sCAAA,CACA,4BAAA,CAAA,oBAAA,CACA,6BAAA,CAAA,qBAAA,CACA,yBAAA,CAAA,iBAAA,CANA,+CACE,CAJF,UnCkvHN,CmCnuHE,4BAME,+EACE,CALF,YAAA,CAGA,aAAA,CAFA,qBAAA,CAUA,mBAAA,CAZA,iBAAA,CAWA,wBAAA,CARA,YnCyuHJ,CmC7tHI,sCACE,wBnC+tHN,CmC3tHI,oCACE,SnC6tHN,CmCztHI,kCAGE,8EACE,CAFF,mBAAA,CADA,OnC6tHN,CmCntHM,uDACE,8CAAA,CAAA,sCnCqtHR,CKr0HI,wC8B8HF,wDAGE,kBnC4sHF,CmC/sHA,wDAGE,mBnC4sHF,CmC/sHA,8CAEE,eAAA,CADA,eAAA,CAGA,iCnC2sHF,CmCvsHE,8DACE,mBnC0sHJ,CmC3sHE,8DACE,kBnC0sHJ,CmC3sHE,oDAEE,UnCysHJ,CmCrsHE,8EAEE,kBnCwsHJ,CmC1sHE,8EAEE,mBnCwsHJ,CmC1sHE,8EAGE,kBnCusHJ,CmC1sHE,8EAGE,mBnCusHJ,CmC1sHE,oEACE,UnCysHJ,CmCnsHE,8EAEE,mBnCssHJ,CmCxsHE,8EAEE,kBnCssHJ,CmCxsHE,8EAGE,mBnCqsHJ,CmCxsHE,8EAGE,kBnCqsHJ,CmCxsHE,oEACE,UnCusHJ,CACF,CmCzrHE,cAHF,olDAII,+BnC4rHF,CmCzrHE,g8GACE,sCnC2rHJ,CACF,CmCtrHA,4sDACE,uDnCyrHF,CmCrrHA,wmDACE,anCwrHF,CoCriIA,MACE,mVAAA,CAEA,4VpCyiIF,CoC/hIE,4BAEE,oBAAA,CADA,iBpCmiIJ,CoC9hII,sDAGE,SpCgiIN,CoCniII,sDAGE,UpCgiIN,CoCniII,4CACE,iBAAA,CACA,SpCiiIN,CoC3hIE,+CAEE,SAAA,CADA,UpC8hIJ,CoCzhIE,kDAGE,WpCmiIJ,CoCtiIE,kDAGE,YpCmiIJ,CoCtiIE,wCAME,qDAAA,CAKA,UAAA,CANA,aAAA,CAEA,0CAAA,CAAA,kCAAA,CACA,4BAAA,CAAA,oBAAA,CACA,6BAAA,CAAA,qBAAA,CACA,yBAAA,CAAA,iBAAA,CATA,iBAAA,CACA,SAAA,CAEA,YpCkiIJ,CoCvhIE,gEACE,wBTyWa,CSxWb,mDAAA,CAAA,2CpCyhIJ,CqC3kIA,QACE,8DAAA,CAGA,+CAAA,CACA,iEAAA,CACA,oDAAA,CACA,sDAAA,CACA,mDrC4kIF,CqCxkIA,SAEE,kBAAA,CADA,YrC4kIF,CKn7HI,mCiChKA,8BACE,UtC2lIJ,CsC5lIE,8BACE,WtC2lIJ,CsC5lIE,8BAIE,kBtCwlIJ,CsC5lIE,8BAIE,iBtCwlIJ,CsC5lIE,oBAKE,mBAAA,CAFA,YAAA,CADA,atC0lIJ,CsCplII,kCACE,WtCulIN,CsCxlII,kCACE,UtCulIN,CsCxlII,kCAEE,iBAAA,CAAA,ctCslIN,CsCxlII,kCAEE,aAAA,CAAA,kBtCslIN,CACF","file":"main.css"} \ No newline at end of file diff --git a/assets/stylesheets/palette.cbb835fc.min.css b/assets/stylesheets/palette.cbb835fc.min.css new file mode 100644 index 00000000..30f9264c --- /dev/null +++ b/assets/stylesheets/palette.cbb835fc.min.css @@ -0,0 +1 @@ +@media screen{[data-md-color-scheme=slate]{--md-hue:232;--md-default-fg-color:hsla(var(--md-hue),75%,95%,1);--md-default-fg-color--light:hsla(var(--md-hue),75%,90%,0.62);--md-default-fg-color--lighter:hsla(var(--md-hue),75%,90%,0.32);--md-default-fg-color--lightest:hsla(var(--md-hue),75%,90%,0.12);--md-default-bg-color:hsla(var(--md-hue),15%,21%,1);--md-default-bg-color--light:hsla(var(--md-hue),15%,21%,0.54);--md-default-bg-color--lighter:hsla(var(--md-hue),15%,21%,0.26);--md-default-bg-color--lightest:hsla(var(--md-hue),15%,21%,0.07);--md-code-fg-color:hsla(var(--md-hue),18%,86%,1);--md-code-bg-color:hsla(var(--md-hue),15%,15%,1);--md-code-hl-color:rgba(66,135,255,.15);--md-code-hl-number-color:#e6695b;--md-code-hl-special-color:#f06090;--md-code-hl-function-color:#c973d9;--md-code-hl-constant-color:#9383e2;--md-code-hl-keyword-color:#6791e0;--md-code-hl-string-color:#2fb170;--md-code-hl-name-color:var(--md-code-fg-color);--md-code-hl-operator-color:var(--md-default-fg-color--light);--md-code-hl-punctuation-color:var(--md-default-fg-color--light);--md-code-hl-comment-color:var(--md-default-fg-color--light);--md-code-hl-generic-color:var(--md-default-fg-color--light);--md-code-hl-variable-color:var(--md-default-fg-color--light);--md-typeset-color:var(--md-default-fg-color);--md-typeset-a-color:var(--md-primary-fg-color);--md-typeset-mark-color:rgba(66,135,255,.3);--md-typeset-kbd-color:hsla(var(--md-hue),15%,94%,0.12);--md-typeset-kbd-accent-color:hsla(var(--md-hue),15%,94%,0.2);--md-typeset-kbd-border-color:hsla(var(--md-hue),15%,14%,1);--md-typeset-table-color:hsla(var(--md-hue),75%,95%,0.12);--md-admonition-fg-color:var(--md-default-fg-color);--md-admonition-bg-color:var(--md-default-bg-color);--md-footer-bg-color:hsla(var(--md-hue),15%,12%,0.87);--md-footer-bg-color--dark:hsla(var(--md-hue),15%,10%,1);--md-shadow-z1:0 0.2rem 0.5rem rgba(0,0,0,.2),0 0 0.05rem rgba(0,0,0,.1);--md-shadow-z2:0 0.2rem 0.5rem rgba(0,0,0,.3),0 0 0.05rem rgba(0,0,0,.25);--md-shadow-z3:0 0.2rem 0.5rem rgba(0,0,0,.4),0 0 0.05rem rgba(0,0,0,.35)}[data-md-color-scheme=slate] img[src$="#gh-light-mode-only"],[data-md-color-scheme=slate] img[src$="#only-light"]{display:none}[data-md-color-scheme=slate] img[src$="#gh-dark-mode-only"],[data-md-color-scheme=slate] img[src$="#only-dark"]{display:initial}[data-md-color-scheme=slate][data-md-color-primary=pink]{--md-typeset-a-color:#ed5487}[data-md-color-scheme=slate][data-md-color-primary=purple]{--md-typeset-a-color:#bd78c9}[data-md-color-scheme=slate][data-md-color-primary=deep-purple]{--md-typeset-a-color:#a682e3}[data-md-color-scheme=slate][data-md-color-primary=indigo]{--md-typeset-a-color:#6c91d5}[data-md-color-scheme=slate][data-md-color-primary=teal]{--md-typeset-a-color:#00ccb8}[data-md-color-scheme=slate][data-md-color-primary=green]{--md-typeset-a-color:#71c174}[data-md-color-scheme=slate][data-md-color-primary=deep-orange]{--md-typeset-a-color:#ff9575}[data-md-color-scheme=slate][data-md-color-primary=brown]{--md-typeset-a-color:#c7846b}[data-md-color-scheme=slate][data-md-color-primary=black],[data-md-color-scheme=slate][data-md-color-primary=blue-grey],[data-md-color-scheme=slate][data-md-color-primary=grey],[data-md-color-scheme=slate][data-md-color-primary=white]{--md-typeset-a-color:#6c91d5}[data-md-color-switching] *,[data-md-color-switching] :after,[data-md-color-switching] :before{transition-duration:0ms!important}}[data-md-color-accent=red]{--md-accent-fg-color:#ff1947;--md-accent-fg-color--transparent:rgba(255,25,71,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=pink]{--md-accent-fg-color:#f50056;--md-accent-fg-color--transparent:rgba(245,0,86,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=purple]{--md-accent-fg-color:#df41fb;--md-accent-fg-color--transparent:rgba(223,65,251,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=deep-purple]{--md-accent-fg-color:#7c4dff;--md-accent-fg-color--transparent:rgba(124,77,255,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=indigo]{--md-accent-fg-color:#526cfe;--md-accent-fg-color--transparent:rgba(82,108,254,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=blue]{--md-accent-fg-color:#4287ff;--md-accent-fg-color--transparent:rgba(66,135,255,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=light-blue]{--md-accent-fg-color:#0091eb;--md-accent-fg-color--transparent:rgba(0,145,235,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=cyan]{--md-accent-fg-color:#00bad6;--md-accent-fg-color--transparent:rgba(0,186,214,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=teal]{--md-accent-fg-color:#00bda4;--md-accent-fg-color--transparent:rgba(0,189,164,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=green]{--md-accent-fg-color:#00c753;--md-accent-fg-color--transparent:rgba(0,199,83,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=light-green]{--md-accent-fg-color:#63de17;--md-accent-fg-color--transparent:rgba(99,222,23,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=lime]{--md-accent-fg-color:#b0eb00;--md-accent-fg-color--transparent:rgba(176,235,0,.1);--md-accent-bg-color:rgba(0,0,0,.87);--md-accent-bg-color--light:rgba(0,0,0,.54)}[data-md-color-accent=yellow]{--md-accent-fg-color:#ffd500;--md-accent-fg-color--transparent:rgba(255,213,0,.1);--md-accent-bg-color:rgba(0,0,0,.87);--md-accent-bg-color--light:rgba(0,0,0,.54)}[data-md-color-accent=amber]{--md-accent-fg-color:#fa0;--md-accent-fg-color--transparent:rgba(255,170,0,.1);--md-accent-bg-color:rgba(0,0,0,.87);--md-accent-bg-color--light:rgba(0,0,0,.54)}[data-md-color-accent=orange]{--md-accent-fg-color:#ff9100;--md-accent-fg-color--transparent:rgba(255,145,0,.1);--md-accent-bg-color:rgba(0,0,0,.87);--md-accent-bg-color--light:rgba(0,0,0,.54)}[data-md-color-accent=deep-orange]{--md-accent-fg-color:#ff6e42;--md-accent-fg-color--transparent:rgba(255,110,66,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=red]{--md-primary-fg-color:#ef5552;--md-primary-fg-color--light:#e57171;--md-primary-fg-color--dark:#e53734;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=pink]{--md-primary-fg-color:#e92063;--md-primary-fg-color--light:#ec417a;--md-primary-fg-color--dark:#c3185d;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=purple]{--md-primary-fg-color:#ab47bd;--md-primary-fg-color--light:#bb69c9;--md-primary-fg-color--dark:#8c24a8;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=deep-purple]{--md-primary-fg-color:#7e56c2;--md-primary-fg-color--light:#9574cd;--md-primary-fg-color--dark:#673ab6;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=indigo]{--md-primary-fg-color:#4051b5;--md-primary-fg-color--light:#5d6cc0;--md-primary-fg-color--dark:#303fa1;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=blue]{--md-primary-fg-color:#2094f3;--md-primary-fg-color--light:#42a5f5;--md-primary-fg-color--dark:#1975d2;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=light-blue]{--md-primary-fg-color:#02a6f2;--md-primary-fg-color--light:#28b5f6;--md-primary-fg-color--dark:#0287cf;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=cyan]{--md-primary-fg-color:#00bdd6;--md-primary-fg-color--light:#25c5da;--md-primary-fg-color--dark:#0097a8;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=teal]{--md-primary-fg-color:#009485;--md-primary-fg-color--light:#26a699;--md-primary-fg-color--dark:#007a6c;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=green]{--md-primary-fg-color:#4cae4f;--md-primary-fg-color--light:#68bb6c;--md-primary-fg-color--dark:#398e3d;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=light-green]{--md-primary-fg-color:#8bc34b;--md-primary-fg-color--light:#9ccc66;--md-primary-fg-color--dark:#689f38;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=lime]{--md-primary-fg-color:#cbdc38;--md-primary-fg-color--light:#d3e156;--md-primary-fg-color--dark:#b0b52c;--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54)}[data-md-color-primary=yellow]{--md-primary-fg-color:#ffec3d;--md-primary-fg-color--light:#ffee57;--md-primary-fg-color--dark:#fbc02d;--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54)}[data-md-color-primary=amber]{--md-primary-fg-color:#ffc105;--md-primary-fg-color--light:#ffc929;--md-primary-fg-color--dark:#ffa200;--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54)}[data-md-color-primary=orange]{--md-primary-fg-color:#ffa724;--md-primary-fg-color--light:#ffa724;--md-primary-fg-color--dark:#fa8900;--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54)}[data-md-color-primary=deep-orange]{--md-primary-fg-color:#ff6e42;--md-primary-fg-color--light:#ff8a66;--md-primary-fg-color--dark:#f4511f;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=brown]{--md-primary-fg-color:#795649;--md-primary-fg-color--light:#8d6e62;--md-primary-fg-color--dark:#5d4037;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=grey]{--md-primary-fg-color:#757575;--md-primary-fg-color--light:#9e9e9e;--md-primary-fg-color--dark:#616161;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7);--md-typeset-a-color:#4051b5}[data-md-color-primary=blue-grey]{--md-primary-fg-color:#546d78;--md-primary-fg-color--light:#607c8a;--md-primary-fg-color--dark:#455a63;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7);--md-typeset-a-color:#4051b5}[data-md-color-primary=light-green]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#72ad2e}[data-md-color-primary=lime]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#8b990a}[data-md-color-primary=yellow]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#b8a500}[data-md-color-primary=amber]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#d19d00}[data-md-color-primary=orange]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#e68a00}[data-md-color-primary=white]{--md-primary-fg-color:#fff;--md-primary-fg-color--light:hsla(0,0%,100%,.7);--md-primary-fg-color--dark:rgba(0,0,0,.07);--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54);--md-typeset-a-color:#4051b5}@media screen and (min-width:60em){[data-md-color-primary=white] .md-search__form{background-color:rgba(0,0,0,.07)}[data-md-color-primary=white] .md-search__form:hover{background-color:rgba(0,0,0,.32)}[data-md-color-primary=white] .md-search__input+.md-search__icon{color:rgba(0,0,0,.87)}}@media screen and (min-width:76.25em){[data-md-color-primary=white] .md-tabs{border-bottom:.05rem solid rgba(0,0,0,.07)}}[data-md-color-primary=black]{--md-primary-fg-color:#000;--md-primary-fg-color--light:rgba(0,0,0,.54);--md-primary-fg-color--dark:#000;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7);--md-typeset-a-color:#4051b5}[data-md-color-primary=black] .md-header{background-color:#000}@media screen and (max-width:59.9375em){[data-md-color-primary=black] .md-nav__source{background-color:rgba(0,0,0,.87)}}@media screen and (min-width:60em){[data-md-color-primary=black] .md-search__form{background-color:hsla(0,0%,100%,.12)}[data-md-color-primary=black] .md-search__form:hover{background-color:hsla(0,0%,100%,.3)}}@media screen and (max-width:76.1875em){html [data-md-color-primary=black] .md-nav--primary .md-nav__title[for=__drawer]{background-color:#000}}@media screen and (min-width:76.25em){[data-md-color-primary=black] .md-tabs{background-color:#000}} \ No newline at end of file diff --git a/assets/stylesheets/palette.cbb835fc.min.css.map b/assets/stylesheets/palette.cbb835fc.min.css.map new file mode 100644 index 00000000..96e380c8 --- /dev/null +++ b/assets/stylesheets/palette.cbb835fc.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["src/assets/stylesheets/palette/_scheme.scss","../../../src/assets/stylesheets/palette.scss","src/assets/stylesheets/palette/_accent.scss","src/assets/stylesheets/palette/_primary.scss","src/assets/stylesheets/utilities/_break.scss"],"names":[],"mappings":"AA2BA,cAGE,6BAKE,YAAA,CAGA,mDAAA,CACA,6DAAA,CACA,+DAAA,CACA,gEAAA,CACA,mDAAA,CACA,6DAAA,CACA,+DAAA,CACA,gEAAA,CAGA,gDAAA,CACA,gDAAA,CAGA,uCAAA,CACA,iCAAA,CACA,kCAAA,CACA,mCAAA,CACA,mCAAA,CACA,kCAAA,CACA,iCAAA,CACA,+CAAA,CACA,6DAAA,CACA,gEAAA,CACA,4DAAA,CACA,4DAAA,CACA,6DAAA,CAGA,6CAAA,CAGA,+CAAA,CAGA,2CAAA,CAGA,uDAAA,CACA,6DAAA,CACA,2DAAA,CAGA,yDAAA,CAGA,mDAAA,CACA,mDAAA,CAGA,qDAAA,CACA,wDAAA,CAGA,wEAAA,CAKA,yEAAA,CAKA,yECxDF,CD6DE,kHAEE,YC3DJ,CD+DE,gHAEE,eC7DJ,CDoFE,yDACE,4BClFJ,CDiFE,2DACE,4BC/EJ,CD8EE,gEACE,4BC5EJ,CD2EE,2DACE,4BCzEJ,CDwEE,yDACE,4BCtEJ,CDqEE,0DACE,4BCnEJ,CDkEE,gEACE,4BChEJ,CD+DE,0DACE,4BC7DJ,CD4DE,2OACE,4BCjDJ,CDwDA,+FAGE,iCCtDF,CACF,CCjDE,2BACE,4BAAA,CACA,oDAAA,CAOE,yBAAA,CACA,8CD6CN,CCvDE,4BACE,4BAAA,CACA,mDAAA,CAOE,yBAAA,CACA,8CDoDN,CC9DE,8BACE,4BAAA,CACA,qDAAA,CAOE,yBAAA,CACA,8CD2DN,CCrEE,mCACE,4BAAA,CACA,qDAAA,CAOE,yBAAA,CACA,8CDkEN,CC5EE,8BACE,4BAAA,CACA,qDAAA,CAOE,yBAAA,CACA,8CDyEN,CCnFE,4BACE,4BAAA,CACA,qDAAA,CAOE,yBAAA,CACA,8CDgFN,CC1FE,kCACE,4BAAA,CACA,oDAAA,CAOE,yBAAA,CACA,8CDuFN,CCjGE,4BACE,4BAAA,CACA,oDAAA,CAOE,yBAAA,CACA,8CD8FN,CCxGE,4BACE,4BAAA,CACA,oDAAA,CAOE,yBAAA,CACA,8CDqGN,CC/GE,6BACE,4BAAA,CACA,mDAAA,CAOE,yBAAA,CACA,8CD4GN,CCtHE,mCACE,4BAAA,CACA,oDAAA,CAOE,yBAAA,CACA,8CDmHN,CC7HE,4BACE,4BAAA,CACA,oDAAA,CAIE,oCAAA,CACA,2CD6HN,CCpIE,8BACE,4BAAA,CACA,oDAAA,CAIE,oCAAA,CACA,2CDoIN,CC3IE,6BACE,yBAAA,CACA,oDAAA,CAIE,oCAAA,CACA,2CD2IN,CClJE,8BACE,4BAAA,CACA,oDAAA,CAIE,oCAAA,CACA,2CDkJN,CCzJE,mCACE,4BAAA,CACA,qDAAA,CAOE,yBAAA,CACA,8CDsJN,CE3JE,4BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CFwJN,CEnKE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CFgKN,CE3KE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CFwKN,CEnLE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CFgLN,CE3LE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CFwLN,CEnME,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CFgMN,CE3ME,mCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CFwMN,CEnNE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CFgNN,CE3NE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CFwNN,CEnOE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CFgON,CE3OE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CFwON,CEnPE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,qCAAA,CACA,4CFmPN,CE3PE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,qCAAA,CACA,4CF2PN,CEnQE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,qCAAA,CACA,4CFmQN,CE3QE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,qCAAA,CACA,4CF2QN,CEnRE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CFgRN,CE3RE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CFwRN,CEnSE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CAAA,CAKA,4BF4RN,CE5SE,kCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CAAA,CAKA,4BFqSN,CEtRE,sEACE,4BFyRJ,CE1RE,+DACE,4BF6RJ,CE9RE,iEACE,4BFiSJ,CElSE,gEACE,4BFqSJ,CEtSE,iEACE,4BFySJ,CEhSA,8BACE,0BAAA,CACA,+CAAA,CACA,2CAAA,CACA,qCAAA,CACA,4CAAA,CAGA,4BFiSF,CGrMI,mCDtFA,+CACE,gCF8RJ,CE3RI,qDACE,gCF6RN,CExRE,iEACE,qBF0RJ,CACF,CGhNI,sCDnEA,uCACE,0CFsRJ,CACF,CE7QA,8BACE,0BAAA,CACA,4CAAA,CACA,gCAAA,CACA,0BAAA,CACA,+CAAA,CAGA,4BF8QF,CE3QE,yCACE,qBF6QJ,CG9MI,wCDxDA,8CACE,gCFyQJ,CACF,CGtOI,mCD5BA,+CACE,oCFqQJ,CElQI,qDACE,mCFoQN,CACF,CG3NI,wCDjCA,iFACE,qBF+PJ,CACF,CGnPI,sCDLA,uCACE,qBF2PJ,CACF","file":"palette.css"} \ No newline at end of file diff --git a/css/all.css b/css/all.css new file mode 100644 index 00000000..c2141401 --- /dev/null +++ b/css/all.css @@ -0,0 +1,13 @@ +code { + font-weight: 600; +} + +@media screen and (min-width: 76.1875em) { + .md-nav--primary .md-nav__title { + display: none; + } +} + +.md-nav__link--active { + font-weight: bold; +} diff --git a/examples/MULTI_PROJECT/index.html b/examples/MULTI_PROJECT/index.html new file mode 100644 index 00000000..265cf952 --- /dev/null +++ b/examples/MULTI_PROJECT/index.html @@ -0,0 +1,1035 @@ + + + + + + + + + + + + + + + + + + + + Multi project - Semver Gradle Plugin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + + +
    + +
    + + + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + + + +

    Multi project

    +

    0. Initial repo state

    +

    Modules:

    +
      +
    • library-one-a uses prefix: a
    • +
    • library-two-b uses prefix: b
    • +
    • library-three-b uses prefix: b
    • +
    • library-four-b uses prefix: b
    • +
    • library-five-b uses prefix: b
    • +
    • library-six-c uses prefix: c
    • +
    • library-seven-c uses prefix: c
    • +
    • library-eight-c uses prefix: c
    • +
    • library-nine uses no prefix
    • +
    • library-ten uses no prefix
    • +
    +

    Commits

    +
      +
    • Initial commit: (hash: 14d9406b)
    • +
    • Add semver plugin to all projects (hash: 7f68e730)
    • +
    +

    Last tags for all projects

    +

    All projects have the same version 1.0.0 so there is four tags with that

    +
      +
    • a1.0.0
    • +
    • b1.0.0
    • +
    • c1.0.0
    • +
    • 1.0.0
    • +
    +

    Repo state

    +
      +
    • Repo is not clean
    • +
    +

    1. Run ./gradlew assemble

    +
    semver for library-one-a: a1.0.0.0+7f68e730-DIRTY
    +                          -> tag prefix (a)
    +                          -----> base version (1.0.0)
    +                          -------> numbers of commits (0)
    +                          -----------------> DIRTY
    +
    +semver for library-two-b: b1.0.0.0+7f68e730-DIRTY
    +semver for library-three-b: b1.0.0.0+7f68e730-DIRTY
    +semver for library-four-b: b1.0.0.0+7f68e730-DIRTY
    +semver for library-five-b: b1.0.0.0+7f68e730-DIRTY
    +semver for library-six-c: c1.0.0.0+7f68e730-DIRTY
    +semver for library-seven-c: c1.0.0.0+7f68e730-DIRTY
    +semver for library-eight-c: c1.0.0.0+7f68e730-DIRTY
    +semver for library-nine: 1.0.0.0+7f68e730-DIRTY
    +semver for library-ten: 1.0.0.0+7f68e730-DIRTY
    +
    +

    2. Create a new file in library-one-a, then run ./gradlew assemble

    +

    Version should be the same to the previous one

    +

    3. Add the new file to git and commit it, then run ./gradlew createSemverTag "-Psemver.tagPrefix=a

    +
      +
    • Promotes the current state to be a new version for the projects which are using as tag prefix the + value a.
    • +
    • As we haven’t passed as argument the property semver.scope with any valor, we are indeed + doing -Psemver.scope=auto, which in this case will increase the patch.
    • +
    • Since there is a previous tag (a1.0.0), semver.scope=auto resolves automatically the next + version. The algorithm is simple:
        +
      • If previous tag is final, the new tag increases the patch.
      • +
      • If previous tag is non-final, the new tag increases the num and it keeps the previous stage.
      • +
      +
    • +
    +
    Created new semver tag: a1.0.1
    +
    +

    4. Run ./gradlew assemble

    +
      +
    • Because the latest commit in the branch has the tag a1.0.1, and the repo is clean, the project + version for projects which uses the tag prefix a is 1.0.1
    • +
    +
    semver for library-one-a: a1.0.1
    +                          -> tag prefix (a)
    +                          -----> version (1.0.1)
    +
    +semver for library-two-b: b1.0.0.1+26f0484
    +                          -> tag prefix (b)
    +                          -----> version (1.0.0)
    +                          ------> numbers of commits (1)
    +                          --------> hash (26f0484)
    +
    +semver for library-three-b: b1.0.0.1+26f0484
    +semver for library-four-b: b1.0.0.1+26f0484
    +semver for library-five-b: b1.0.0.1+26f0484
    +semver for library-six-c: c1.0.0.1+26f0484
    +semver for library-seven-c: c1.0.0.1+26f0484
    +semver for library-eight-c: c1.0.0.1+26f0484
    +semver for library-nine: 1.0.0.1+26f0484
    +semver for library-ten: 1.0.0.1+26f0484
    +
    +

    5. Create, add and commit a new file in library-one-a, then run ./gradlew assemble

    +
      +
    • Because the git status is clean, instead of using a -DIRTY suffix, it uses the latest commit + hash.
    • +
    +
    semver for library-one-a: a1.0.1+76f0424
    +semver for library-two-b: b1.0.0.2+76f0424
    +semver for library-three-b: b1.0.0.2+76f0424
    +semver for library-four-b: b1.0.0.2+76f0424
    +semver for library-five-b: b1.0.0.2+76f0424
    +semver for library-six-c: c1.0.0.2+76f0424
    +semver for library-seven-c: c1.0.0.2+76f0424
    +semver for library-eight-c: c1.0.0.2+76f0424
    +semver for library-nine: 1.0.0.2+76f0424
    +semver for library-ten: 1.0.0.2+76f0424
    +
    +

    6. Run ./gradlew createSemverTag "-Psemver.tagPrefix=a"

    +
      +
    • Promote the current state to a new version.
    • +
    • Since there is a previous tag (v1.0.2), createSemverTag resolves automatically the next + version. The algorithm is simple:
        +
      • If previous tag is final, the new tag increases the patch.
      • +
      • If previous tag is non-final, the new tag increases the num and it keeps the previous stage.
      • +
      +
    • +
    +
    semver for library-one-a: a1.0.2
    +semver for library-two-b: b1.0.0.2+76f0424
    +semver for library-three-b: b1.0.0.2+76f0424
    +semver for library-four-b: b1.0.0.2+76f0424
    +semver for library-five-b: b1.0.0.2+76f0424
    +semver for library-six-c: c1.0.0.2+76f0424
    +semver for library-seven-c: c1.0.0.2+76f0424
    +semver for library-eight-c: c1.0.0.2+76f0424
    +semver for library-nine: 1.0.0.2+76f0424
    +semver for library-ten: 1.0.0.2+76f0424
    +
    +

    7. Create, add to git and commit a new file in library-one-a, then run ./gradlew createSemverTag "-Psemver.stage=alpha" "-Psemver.tagPrefix=a"

    +
      +
    • Promote the current state to be a new alpha version for the projects with tag prefix a.
    • +
    +
    semver for library-one-a: a1.0.3-alpha.1
    +semver for library-two-b: b1.0.0.3+58u03s9
    +semver for library-three-b: b1.0.0.3+58u03s9
    +semver for library-four-b: b1.0.0.3+58u03s9
    +semver for library-five-b: b1.0.0.3+58u03s9
    +semver for library-six-c: c1.0.0.3+58u03s9
    +semver for library-seven-c: c1.0.0.3+58u03s9
    +semver for library-eight-c: c1.0.0.3+58u03s9
    +semver for library-nine: 1.0.0.3+58u03s9
    +semver for library-ten: 1.0.0.3+58u03s9
    +
    +

    8. Run ./gradlew createSemverTag "-Psemver.stage=beta" "-Psemver.tagPrefix=a"

    +
      +
    • Without changing the state, promote the current state to be a new beta version for the projects + with tag prefix a.
    • +
    +
    semver for library-one-a: a1.0.3-beta.1
    +semver for library-two-b: b1.0.0.3+58u03s9
    +semver for library-three-b: b1.0.0.3+58u03s9
    +semver for library-four-b: b1.0.0.3+58u03s9
    +semver for library-five-b: b1.0.0.3+58u03s9
    +semver for library-six-c: c1.0.0.3+58u03s9
    +semver for library-seven-c: c1.0.0.3+58u03s9
    +semver for library-eight-c: c1.0.0.3+58u03s9
    +semver for library-nine: 1.0.0.3+58u03s9
    +semver for library-ten: 1.0.0.3+58u03s9
    +
    +

    9. Create, add to git and commit a new file in library-one-a, then run ./gradlew createSemverTag "-Psemver.stage=final" "-Psemver.tagPrefix=a"

    +
      +
    • Without changing the state, promote the current state to be a final version for the projects with + tag prefix a.
    • +
    +
    semver for library-one-a: a1.0.3
    +semver for library-two-b: b1.0.0.4+1as03k5
    +semver for library-three-b: b1.0.0.4+1as03k5
    +semver for library-four-b: b1.0.0.4+1as03k5
    +semver for library-five-b: b1.0.0.4+1as03k5
    +semver for library-six-c: c1.0.0.4+1as03k5
    +semver for library-seven-c: c1.0.0.4+1as03k5
    +semver for library-eight-c: c1.0.0.4+1as03k5
    +semver for library-nine: 1.0.0.4+1as03k5
    +semver for library-ten: 1.0.0.4+1as03k5
    +
    +

    10. Run ./gradlew createSemverTag "-Psemver.stage=final" "-Psemver.scope=major "-Psemver.tagPrefix=a"

    +
      +
    • Without changing the state, promote the current state to be the 2.0.0 version for the projects + with tag prefix a.
    • +
    +
    semver for library-one-a: a2.0.0
    +semver for library-two-b: b1.0.0.4+1as03k5
    +semver for library-three-b: b1.0.0.4+1as03k5
    +semver for library-four-b: b1.0.0.4+1as03k5
    +semver for library-five-b: b1.0.0.4+1as03k5
    +semver for library-six-c: c1.0.0.4+1as03k5
    +semver for library-seven-c: c1.0.0.4+1as03k5
    +semver for library-eight-c: c1.0.0.4+1as03k5
    +semver for library-nine: 1.0.0.4+1as03k5
    +semver for library-ten: 1.0.0.4+1as03k5
    +
    +

    11. Run ./gradlew publishToMavenLocal "-Psemver.stage=snapshot" "-Psemver.tagPrefix=a"

    +
      +
    • A common approach is publishing the artifacts to the snapshot repository with each commit merged + to some branch.
    • +
    • Without changing the state and without creating a new tag, the project uses the next patched + version by just submitting the snapshot scope.
    • +
    +
    semver for library-one-a: a2.0.1-SNAPSHOT
    +semver for library-two-b: b1.0.0.4+1as03k5
    +semver for library-three-b: b1.0.0.4+1as03k5
    +semver for library-four-b: b1.0.0.4+1as03k5
    +semver for library-five-b: b1.0.0.4+1as03k5
    +semver for library-six-c: c1.0.0.4+1as03k5
    +semver for library-seven-c: c1.0.0.4+1as03k5
    +semver for library-eight-c: c1.0.0.4+1as03k5
    +semver for library-nine: 1.0.0.4+1as03k5
    +semver for library-ten: 1.0.0.4+1as03k5
    +
    +

    12. Run ./gradlew createSemverTag "-Psemver.scope=minor" "-Psemver.tagPrefix=b"

    +
    semver for library-one-a: a2.0.0
    +semver for library-two-b: b1.1.0
    +semver for library-three-b: b1.1.0
    +semver for library-four-b: b1.1.0
    +semver for library-five-b: b1.1.0
    +semver for library-six-c: c1.0.0.4+1as03k5
    +semver for library-seven-c: c1.0.0.4+1as03k5
    +semver for library-eight-c: c1.0.0.4+1as03k5
    +semver for library-nine: 1.0.0.4+1as03k5
    +semver for library-ten: 1.0.0.4+1as03k5
    +
    +

    13. Run ./gradlew createSemverTag "-Psemver.stage=rc" "-Psemver.tagPrefix=c"

    +
    semver for library-one-a: a2.0.0
    +semver for library-two-b: b1.1.0
    +semver for library-three-b: b1.1.0
    +semver for library-four-b: b1.1.0
    +semver for library-five-b: b1.1.0
    +semver for library-six-c: c1.0.1-rc.1
    +semver for library-seven-c: c1.0.1-rc.1
    +semver for library-eight-c: c1.0.1-rc.1
    +semver for library-nine: 1.0.0.4+1as03k5
    +semver for library-ten: 1.0.0.4+1as03k5
    +
    +

    14. Run ./gradlew createSemverTag "-Psemver.stage=dev"

    +
    semver for library-one-a: a2.0.0
    +semver for library-two-b: b1.1.0
    +semver for library-three-b: b1.1.0
    +semver for library-four-b: b1.1.0
    +semver for library-five-b: b1.1.0
    +semver for library-six-c: c1.0.1-rc.1
    +semver for library-seven-c: c1.0.1-rc.1
    +semver for library-eight-c: c1.0.1-rc.1
    +semver for library-nine: 1.0.1-dev.1
    +semver for library-ten: 1.0.1-dev.1
    +
    + + + + + + +
    +
    + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + \ No newline at end of file diff --git a/examples/SINGLE_PROJECT/index.html b/examples/SINGLE_PROJECT/index.html new file mode 100644 index 00000000..0f7b0726 --- /dev/null +++ b/examples/SINGLE_PROJECT/index.html @@ -0,0 +1,855 @@ + + + + + + + + + + + + + + + + + + + + Single project - Semver Gradle Plugin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + + +
    + +
    + + + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + + + + + +
    +
    + + + + + + + + + +

    Single project

    +

    0. Initial repo state

    +

    Modules:

    +
      +
    • Root project
    • +
    +

    Commits

    +
      +
    • Initial commit: (hash: 14d9406b)
    • +
    • Add config (hash: cd48c99a)
    • +
    • Add plugin (hash: 7f68e730)
    • +
    +

    Repo state

    +
      +
    • Repo is not clean
    • +
    +

    1. Run ./gradlew assemble

    +
      +
    • Base version when there is no tag is 0.1.0
    • +
    +
    semver for the root project: 0.1.0.0+7f68e730-DIRTY
    +                             -----> base version (0.1.0)
    +                             ------> numbers of commits (0)
    +                             ----------------> DIRTY
    +
    +

    2. Create a new file and run ./gradlew assemble

    +

    Version should be the same than the previous one

    +

    3. Add the new file to git, commit it, and run ./gradlew createSemverTag

    +
      +
    • Promotes the current state to be a new version. A new tag is created with the value v0.1.0
    • +
    +
    Created new semver tag: v0.1.0
    +
    +

    4. Run ./gradlew assemble

    +
      +
    • Because the latest commit in the branch has the tag v.1.0, the project version is 0.1.0
    • +
    +
    semver: 0.1.0
    +
    +

    5. Create, add, commit a new file and run ./gradlew assemble

    +
      +
    • Because the git status is clean, instead of using a DIRTY suffix, it uses the latest commit + hash.
    • +
    +
    semver: 0.1.0.1+26f0484
    +        -----> base version (0.1.0)
    +        ------> numbers of commits (1)
    +        --------> hash (26f0484)
    +
    +

    6. Run ./gradlew createSemverTag

    +
      +
    • Promote the current state to a new version.
    • +
    • Since there is a previous tag (v0.1.0), createSemverTag resolves automatically the next + version. The algorithm is simple:
        +
      • If previous tag is final, the new tag increases the patch.
      • +
      • If previous tag is non-final, the new tag increases the num and it keeps the previous stage.
      • +
      +
    • +
    +
    Created new semver tag: v0.1.1
    +
    +

    7. Create and add to git a new file, then run ./gradlew createSemverTag "-Psemver.stage=alpha"

    +
      +
    • Promote the current state to be a new alpha version.
    • +
    +
    Created new semver tag: v0.1.2-alpha.1
    +
    +

    8. Run ./gradlew createSemverTag "-Psemver.stage=beta"

    +
      +
    • Without changing the state, promote the current state to be a new beta version.
    • +
    +
    Created new semver tag: v0.1.2-beta.1
    +
    +

    9. Create and add to git a new file, then run ./gradlew createSemverTag "-Psemver.stage=final"

    +
      +
    • Without changing the state, promote the current state to be a final version.
    • +
    +
    Created new semver tag: v0.1.2
    +
    +

    10. Run ./gradlew createSemverTag "-Psemver.stage=final" "-Psemver.scope=major

    +
      +
    • Without changing the state, promote the current state to be the 1.0.0 version.
    • +
    +

    11. Run ./gradlew publishToMavenLocal "-Psemver.stage=snapshot"

    +
      +
    • A common approach is publishing the artifacts to the snapshot repository with each commit merged + to some branch.
    • +
    • Without changing the state and without creating a new tag, the project uses the next patched + version by just submitting the snapshot scope.
    • +
    +
    semver: 1.0.1-SNAPSHOT
    +
    + + + + + + +
    +
    + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 00000000..a8edd16b --- /dev/null +++ b/index.html @@ -0,0 +1,1444 @@ + + + + + + + + + + + + + + + + + + + + Semver Gradle Plugin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + + +
    + +
    + + + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + + + + + +
    +
    + + + + + + + + + +

    Kotlin version +MavenCentral +Snapshot

    +

    Build +Coverage +Quality +Tech debt

    +

    Semver Gradle Plugin

    +

    Set projects versions based on git tags and following semantic versioning.

    +

    Inspired on Reckon but centered on supporting multi-project +versions and combine normal stages with snapshot stage.

    +

    Apply the plugin

    +

    In order to support configuration cache or project isolation the plugin must be applied to each +project or using the settings plugin. Avoid using allprojects or subprojects.

    +
    // build.gradle.kts
    +plugins {
    +    id("com.javiersc.semver") version "$version"
    +}
    +
    +

    It is possible to apply the plugin to all projects if the plugin is applied in the settings.gradle +or settings.gradle.kts file:

    +
    // settings.gradle.kts
    +plugins {
    +    id("com.javiersc.semver") version "$version"
    +}
    +
    +

    Examples

    +

    Check documented examples +or test examples to understand +easily how it works.

    +

    Usage

    +

    There are three project properties which the plugin uses to detect automatically the current version +based on the last tag in the current branch: semver.stage, semver.scope and semver.tagPrefix.

    +

    They can be set via CLI, for example:

    +
    ./gradlew "-Psemver.stage=final" "-Psemver.scope=major" "-Psemver.tagPrefix=v"
    +
    +
      +
    • semver.stage indicates the stage to be changed, for example, alpha
    • +
    • semver.scope indicates the scope to be changed, for example, patch
    • +
    • semver.tagPrefix is used to know which version is going to be changed based on the tag prefix, + for example v. If the projects have different tag prefix, it is necessary to disambiguate which + version is going to be bumped.
    • +
    +

    Default values:

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    default valueOptional
    stageautoYes*
    scopeautoYes*
    tagPrefixautoYes*
    +
    +

    Depends on the use case*

    +
    +

    Plugin extension

    +
    semver {
    +    isEnabled.set(true)
    +    tagPrefix.set("")
    +    commitsMaxCount.set(-1)
    +    gitDir.set(rootDir.resolve(".git"))
    +}
    +
    +tasks.register("printLastCommitHash") {
    +    doLast {
    +        println(semver.commits.get().last().hash)
    +    }
    +}
    +
    +
      +
    • Default values:
    • +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    default value
    isEnabledtrue
    tagPrefix, empty string
    commitsMaxCount-1
    gitDirrootDir.resolve(".git")
    versioncalculated version based on the last git tag and other inputs
    +

    tagPrefix is used to asociate a project version with a tag prefix, and it allows having different +versions in multi-project builds.

    +

    An example can be setting the extension prefix to v in a specific project A and the last tags in +the last commit are: v1.0.0 and w3.0.1. The project A version is v1.0.0. If a project B sets +the prefix to w, the project B version is w3.0.1.

    +

    In order to improve the performance on large repositories with a lot of commits, it is possible to +limit the number of commits to be checked via commitsMaxCount. By default, it is -1 which means +that all commits are checked.

    +

    semver contains commits: Provider<List<Commit>> to get the commits in the current branch and the +associated tags to each one which can be useful in some use cases.

    +

    semver.tagPrefix project property via CLI or gradle.properties file

    +
    "-Psemver.tagPrefix=v"
    +
    +
    semver.tagPrefix=v
    +
    +

    If it is necessary to bump the project version, for example to v3.0.2 from v3.0.1, but at same +time there are more project with different prefixes, the plugin needs to know which tag prefix is +going to be bumped, so semver.tagPrefix property is the solution to that problem.

    +

    To get it working:

    +
    ./gradlew "-Psemver.scope=patch" "-Psemver.tagPrefix=v"
    +
    +

    It is possible to set the project tag prefix via Gradle property if some third-party plugin requires +the version in configuration phase. This property is:

    +
    semver.project.tagPrefix=v
    +
    +

    As it can be useful to change the number of commits to be checked, it is possible to set it via +properties too:

    +
    semver.commitsMaxCount=100
    +
    +

    Or in the CLI:

    +
    ./gradlew "-Psemver.commitsMaxCount=100"
    +
    +
    Map the version
    +

    The semver extension has a mapVersion function which allows to map the version easily:

    +
    // if last tag is v3.0.1, and the Kotlin version is 1.9.0,
    +// the version will be `v3.0.1+1.9.0`
    +semver {
    +    tagPrefix.set("v")
    +    mapVersion { gradleVersion: GradleVersion ->
    +        val kotlinVersion: String = getKotlinPluginVersion()
    +        "${gradleVersion.copy(metadata = kotlinVersion)}"
    +    }
    +}
    +
    +
    Override the version
    +

    If it possible to force an override of the version:

    +
    semver {
    +    version.set("1.0.0")
    +}
    +
    +
    Additional notes
    +
    Empty tag prefix for all projects
    +
    +

    If all projects are not using a tag prefix, or in other words, the tag prefix is empty, both the +property in the extension and the project property via CLI or gradle.properties file are +irrelevant.

    +
    +
    Same tag prefix for all projects
    +
    +

    If all projects share a tag prefix, it is easier to set it in the root project gradle.properties +file instead of passing it constantly via CLI.

    +
    +

    Version types

    +

    The whole format can be:

    +
    <major>.<minor>.<patch>[-<stage>.<num>][.<commits number>+<hash>][+<metadata>]
    +
    +

    Final

    +
      +
    • Format: <major>.<minor>.<patch>
    • +
    • Example: 1.0.0
    • +
    +

    Significant

    +
      +
    • Format: <major>.<minor>.<patch>[-<stage>.<num>]
    • +
    • Example: 1.0.0-alpha.1
    • +
    +

    Insignificant

    +
      +
    • +

      Format:

      +
        +
      • Clean repository: <major>.<minor>.<patch>[-<stage>.<num>][.<commits number>+<hash>]
      • +
      • Dirty repository: <major>.<minor>.<patch>[-<stage>.<num>][.<commits number>+<DIRTY>]
      • +
      +
    • +
    • +

      Examples:

      +
        +
      • 1.0.0.4+26f0484
      • +
      • 1.0.0.4+DIRTY
      • +
      +
    • +
    +
    +

    It is used the DIRTY suffix instead of a timestamp in order to avoid issues with any Gradle +cache.

    +
    +

    Snapshot

    +
      +
    • Format: <major>.<minor>.<patch>-SNAPSHOT
    • +
    • Example: 1.0.0-SNAPSHOT
    • +
    +

    Stages

    +

    To change between stages, use the Gradle project property -Psemver.stage=<stage>

    +

    There are reserved stages that can be used to create certain versions:

    +
      +
    • final: It creates a version without a suffix stage, for example, 1.0.1.
    • +
    • auto: It calculates automatically the next stage based on the previous stage.
    • +
    • snapshot: It generate the next snapshot version, for example, 1.0.1-SNAPSHOT.
    • +
    +
    # gradle.properties
    +semver.tagPrefix=v
    +
    +
    # Last tag = v1.0.0-alpha.1
    +./gradlew "-Psemver.stage=alpha" # v1.0.0-alpha.2
    +./gradlew "-Psemver.stage=beta" # v1.0.0-beta.1
    +./gradlew "-Psemver.stage=rc" # v1.0.0-rc.1
    +./gradlew "-Psemver.stage=snapshot" # v1.0.1-SNAPSHOT (uses the next patch version)
    +./gradlew "-Psemver.stage=final" # v1.0.0
    +./gradlew "-Psemver.stage=auto" # v1.0.0-alpha.2
    +
    +# Last tag = v1.0.0
    +./gradlew "-Psemver.stage=alpha" # v1.0.1-alpha.1
    +./gradlew "-Psemver.stage=beta" # v1.0.1-beta.1
    +./gradlew "-Psemver.stage=rc" # v1.0.1-rc.1
    +./gradlew "-Psemver.stage=snapshot" # v1.0.1-SNAPSHOT (still uses the same patch version)
    +./gradlew "-Psemver.stage=final" # v1.0.1
    +./gradlew "-Psemver.stage=auto" # v1.0.1
    +
    +

    The stage order is based on the Gradle official rules, some samples are:

    +
      +
    • If both are non-numeric, the parts are compared alphabetically, in a case-sensitive manner: + 1.0.0-ALPHA.1 < 1.0.0-BETA.1 < 1.0.0-alpha.1 < 1.0.0-beta.1.
    • +
    • dev is considered lower than any non-numeric + part: 1.0.0-dev.1 < 1.0.0-ALPHA.1 < 1.0.0-alpha.1 < 1.0.0-rc.1.
    • +
    • The strings rc, snapshot, final, ga, release and sp are considered higher than any + other string part (sorted in this order): 1.0.0-zeta.1 < 1.0.0-rc.1 < 1.0.0-snapshot < + 1.0.0-ga.1 < 1.0.0-release.1 < 1.0.0-sp.1 < 1.0.0.
    • +
    • These particular values are NOT case-sensitive, as opposed to regular string parts and do not + depend on the separator used around them: 1.0.0-RC.1 == 1.0.0-rc.1.
    • +
    +

    Gradle’s docs can be +found here

    +

    Scopes

    +

    To change between scopes, use the Gradle property -Psemver.scope=<scope>

    +

    The scope has to be one of major, minor, patch or auto.

    +
    # gradle.properties
    +semver.tagPrefix=v
    +
    +
    # Last tag = v1.0.0-alpha.1
    +./gradlew "-Psemver.scope=major" # v2.0.0
    +./gradlew "-Psemver.scope=minor" # v1.1.0
    +./gradlew "-Psemver.scope=patch" # v1.0.1
    +./gradlew "-Psemver.scope=auto" # v1.0.0-alpha.2 (uses the next num version)
    +
    +# Last tag = v1.0.0
    +./gradlew "-Psemver.scope=major" # v2.0.0
    +./gradlew "-Psemver.scope=minor" # v1.1.0
    +./gradlew "-Psemver.scope=patch" # v1.0.1
    +./gradlew "-Psemver.scope=auto" # v1.0.1 (uses the next patch version)
    +
    +

    Combine stages and scopes

    +
    # gradle.properties
    +semver.tagPrefix=v
    +
    +
    # Last tag = v1.0.0-alpha.1
    +./gradlew "-Psemver.stage=alpha" "-Psemver.scope=major" # v2.0.0-alpha.1
    +./gradlew "-Psemver.stage=beta" "-Psemver.scope=major" # v2.0.0-beta.1
    +./gradlew "-Psemver.stage=rc" "-Psemver.scope=major" # v2.0.0-rc.1
    +./gradlew "-Psemver.stage=final" "-Psemver.scope=major" # v2.0.0
    +./gradlew "-Psemver.stage=snapshot" "-Psemver.scope=major" # v2.0.0-SNAPSHOT
    +./gradlew "-Psemver.stage=auto" "-Psemver.scope=auto" # v1.0.0-alpha.2
    +
    +# Last tag = v1.0.0-alpha.1
    +./gradlew "-Psemver.stage=alpha" "-Psemver.scope=minor" # v1.1.0-alpha.1
    +./gradlew "-Psemver.stage=beta" "-Psemver.scope=minor" # v1.1.0-beta.1
    +./gradlew "-Psemver.stage=rc" "-Psemver.scope=minor" # v1.1.0-rc.1
    +./gradlew "-Psemver.stage=final" "-Psemver.scope=minor" # v1.1.0
    +./gradlew "-Psemver.stage=snapshot" "-Psemver.scope=minor" # v1.1.0-SNAPSHOT
    +
    +# Last tag = v1.0.0-alpha.1
    +./gradlew "-Psemver.stage=alpha" "-Psemver.scope=patch" # v1.0.1-alpha.1
    +./gradlew "-Psemver.stage=beta" "-Psemver.scope=patch" # v1.0.1-beta.1
    +./gradlew "-Psemver.stage=rc" "-Psemver.scope=patch" # v1.0.1-rc.1
    +./gradlew "-Psemver.stage=final" "-Psemver.scope=patch" # v1.0.1
    +./gradlew "-Psemver.stage=snapshot" "-Psemver.scope=patch" # v1.0.1-SNAPSHOT
    +
    +# Last tag = v1.0.0-alpha.1
    +./gradlew "-Psemver.stage=alpha" "-Psemver.scope=auto" # v1.0.0-alpha.2
    +./gradlew "-Psemver.stage=beta" "-Psemver.scope=auto" # v1.0.1-beta.1
    +./gradlew "-Psemver.stage=rc" "-Psemver.scope=auto" # v1.0.1-rc.1
    +./gradlew "-Psemver.stage=final" "-Psemver.scope=auto" # v1.0.1
    +./gradlew "-Psemver.stage=snapshot" "-Psemver.scope=auto" # v1.0.1-SNAPSHOT
    +
    +# Last tag = v1.0.0
    +./gradlew "-Psemver.stage=alpha" "-Psemver.scope=major" # v2.0.0-alpha.1
    +./gradlew "-Psemver.stage=beta" "-Psemver.scope=major" # v2.0.0-beta.1
    +./gradlew "-Psemver.stage=rc" "-Psemver.scope=major" # v2.0.0-rc.1
    +./gradlew "-Psemver.stage=final" "-Psemver.scope=major" # v2.0.0
    +./gradlew "-Psemver.stage=snapshot" "-Psemver.scope=major" # v2.0.0-SNAPSHOT
    +./gradlew "-Psemver.stage=auto" "-Psemver.scope=auto" # v1.0.1
    +
    +# Last tag = v1.0.0
    +./gradlew "-Psemver.stage=alpha" "-Psemver.scope=minor" # v1.1.0-alpha.1
    +./gradlew "-Psemver.stage=beta" "-Psemver.scope=minor" # v1.1.0-beta.1
    +./gradlew "-Psemver.stage=rc" "-Psemver.scope=minor" # v1.1.0-rc.1
    +./gradlew "-Psemver.stage=final" "-Psemver.scope=minor" # v1.1.0
    +./gradlew "-Psemver.stage=snapshot" "-Psemver.scope=minor" # v1.1.0-SNAPSHOT
    +
    +# Last tag = v1.0.0
    +./gradlew "-Psemver.stage=alpha" "-Psemver.scope=patch" # v1.0.1-alpha.1
    +./gradlew "-Psemver.stage=beta" "-Psemver.scope=patch" # v1.0.1-beta.1
    +./gradlew "-Psemver.stage=rc" "-Psemver.scope=patch" # v1.0.1-rc.1
    +./gradlew "-Psemver.stage=final" "-Psemver.scope=patch" # v1.0.1
    +./gradlew "-Psemver.stage=snapshot" "-Psemver.scope=patch" # v1.0.1-SNAPSHOT
    +
    +# Last tag = v1.0.0
    +./gradlew "-Psemver.stage=alpha" "-Psemver.scope=auto" # v1.0.1-alpha.1
    +./gradlew "-Psemver.stage=beta" "-Psemver.scope=auto" # v1.0.1-beta.1
    +./gradlew "-Psemver.stage=rc" "-Psemver.scope=auto" # v1.0.1-rc.1
    +./gradlew "-Psemver.stage=final" "-Psemver.scope=auto" # v1.0.1
    +./gradlew "-Psemver.stage=snapshot" "-Psemver.scope=auto" # v1.0.1-SNAPSHOT
    +
    +

    Tasks

    +

    There are three tasks:

    +
      +
    • printSemver: Prints the tag in CLI and create a file in build/semver/version.txt which has two + lines; the version without the tag and the version including the tag.
    • +
    • createSemverTag. Creates a git tag.
    • +
    • pushSemverTag. Creates and pushes a git tag to the remote.
    • +
    +

    You can combine them with any semver project properties to ensure the correct tag version is +printed, created or pushed.

    +

    pushSemverTag can use a specific remote if the Gradle property semver.remote is set. If it is +not set, origin is used if it exists, if not, the first remote by name is used. If there is no +remote, the task fails.

    +

    Samples:

    +
    ./gradlew createSemverTag
    +
    +./gradlew createSemverTag "-Psemver.stage=alpha"
    +
    +./gradlew pushSemverTag
    +
    +./gradlew pushSemverTag "-Psemver.stage=alpha"
    +
    +

    Set versions without DIRTY suffix on dirty repositories

    +

    By default, if the repository status is not clean, the version shows the suffix DIRTY but that can +be avoided by setting the Gradle property semver.checkClean.

    +

    For example, if the last tag is 1.0.0, there are 23 commits between that tag and the last commit +and the repo is not clean:

    +
    ./gradlew "-Psemver.stage=final" "-Psemver.scope=patch"
    +
    +semver: 1.0.0.23+DIRTY
    +
    +
    ./gradlew "-Psemver.stage=final" "-Psemver.scope=patch" "-Psemver.checkClean=false"
    +semver: 1.0.1
    +
    +
    ./gradlew "-Psemver.checkClean=false"
    +semver: 1.0.0.23+1a2cd5b2 # 1a2cd5b2 is the last commit hash
    +
    +

    License

    +
    Copyright 2022 Javier Segovia Córdoba
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +   https://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +
    + + + + + + +
    +
    + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + \ No newline at end of file diff --git a/projects/gradle-version/gradle-version/index.html b/projects/gradle-version/gradle-version/index.html new file mode 100644 index 00000000..acff00e2 --- /dev/null +++ b/projects/gradle-version/gradle-version/index.html @@ -0,0 +1,694 @@ + + + + + + + + + + + + + + + + + + + + gradle-version - Semver Gradle Plugin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + + +
    + +
    + + + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + + + +

    Module gradle-version

    +

    Semantic versioning implementation with Gradle version ordering rules

    + + + + + + +
    +
    + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + \ No newline at end of file diff --git a/projects/semver-gradle-plugin/semver-gradle-plugin/index.html b/projects/semver-gradle-plugin/semver-gradle-plugin/index.html new file mode 100644 index 00000000..5a189736 --- /dev/null +++ b/projects/semver-gradle-plugin/semver-gradle-plugin/index.html @@ -0,0 +1,753 @@ + + + + + + + + + + + + + + + + + + + + semver-gradle-plugin - Semver Gradle Plugin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + + +
    + +
    + + + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + + + +

    Module semver-gradle-plugin

    +

    Apply the plugin

    +

    On projects:

    +
    // build.gradle.kts
    +plugins {
    +    id("com.javiersc.semver") version "$version"
    +}
    +
    +

    On settings:

    +
    // settings.gradle.kts
    +plugins {
    +    id("com.javiersc.semver") version "$version"
    +}
    +
    +

    Check the README.md for more info

    + + + + + + +
    +
    + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + \ No newline at end of file diff --git a/projects/semver-project-gradle-plugin/semver-project-gradle-plugin/index.html b/projects/semver-project-gradle-plugin/semver-project-gradle-plugin/index.html new file mode 100644 index 00000000..2da48be7 --- /dev/null +++ b/projects/semver-project-gradle-plugin/semver-project-gradle-plugin/index.html @@ -0,0 +1,746 @@ + + + + + + + + + + + + + + + + + + + + semver-project-gradle-plugin - Semver Gradle Plugin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + + +
    + +
    + + + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + + + +

    Module semver-project-gradle-plugin

    +

    Apply the plugin

    +
    // build.gradle.kts
    +plugins {
    +    id("com.javiersc.semver") version "$version"
    +}
    +
    +

    Check the README.md for more info

    + + + + + + +
    +
    + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + \ No newline at end of file diff --git a/projects/semver-settings-gradle-plugin/semver-settings-gradle-plugin/index.html b/projects/semver-settings-gradle-plugin/semver-settings-gradle-plugin/index.html new file mode 100644 index 00000000..f4a8bac0 --- /dev/null +++ b/projects/semver-settings-gradle-plugin/semver-settings-gradle-plugin/index.html @@ -0,0 +1,731 @@ + + + + + + + + + + + + + + + + + + + + semver-settings-gradle-plugin - Semver Gradle Plugin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + + +
    + +
    + + + + + + +
    +
    + + + +
    +
    +
    + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + + + +

    Module semver-settings-gradle-plugin

    +

    Apply the plugin

    +
    // settings.gradle.kts
    +plugins {
    +    id("com.javiersc.semver") version "$version"
    +}
    +
    +

    Check the README.md for more info

    + + + + + + +
    +
    + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + \ No newline at end of file diff --git a/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.CalculatedVersionTest.html b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.CalculatedVersionTest.html new file mode 100644 index 00000000..c85f88b4 --- /dev/null +++ b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.CalculatedVersionTest.html @@ -0,0 +1,101 @@ + + + + + +Test results - Class com.javiersc.semver.project.gradle.plugin.CalculatedVersionTest + + + + + +
    +

    Class com.javiersc.semver.project.gradle.plugin.CalculatedVersionTest

    + +
    + + + + + +
    +
    + + + + + + + +
    +
    +
    2
    +

    tests

    +
    +
    +
    +
    0
    +

    failures

    +
    +
    +
    +
    0
    +

    ignored

    +
    +
    +
    +
    3.275s
    +

    duration

    +
    +
    +
    +
    +
    +
    100%
    +

    successful

    +
    +
    +
    +
    + +
    +

    Tests

    + + + + + + + + + + + + + + + + + + +
    TestDurationResult
    calculate additional version data()0.301spassed
    calculated version()2.974spassed
    +
    +
    + +
    + + diff --git a/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.GitBranchTest.html b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.GitBranchTest.html new file mode 100644 index 00000000..5b79b106 --- /dev/null +++ b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.GitBranchTest.html @@ -0,0 +1,96 @@ + + + + + +Test results - Class com.javiersc.semver.project.gradle.plugin.GitBranchTest + + + + + +
    +

    Class com.javiersc.semver.project.gradle.plugin.GitBranchTest

    + +
    + + + + + +
    +
    + + + + + + + +
    +
    +
    1
    +

    tests

    +
    +
    +
    +
    0
    +

    failures

    +
    +
    +
    +
    0
    +

    ignored

    +
    +
    +
    +
    0.611s
    +

    duration

    +
    +
    +
    +
    +
    +
    100%
    +

    successful

    +
    +
    +
    +
    + +
    +

    Tests

    + + + + + + + + + + + + + +
    TestDurationResult
    current branch$semver_project_gradle_plugin()0.611spassed
    +
    +
    + +
    + + diff --git a/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.GitCommitTest.html b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.GitCommitTest.html new file mode 100644 index 00000000..ad72faa0 --- /dev/null +++ b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.GitCommitTest.html @@ -0,0 +1,126 @@ + + + + + +Test results - Class com.javiersc.semver.project.gradle.plugin.GitCommitTest + + + + + +
    +

    Class com.javiersc.semver.project.gradle.plugin.GitCommitTest

    + +
    + + + + + +
    +
    + + + + + + + +
    +
    +
    7
    +

    tests

    +
    +
    +
    +
    0
    +

    failures

    +
    +
    +
    +
    0
    +

    ignored

    +
    +
    +
    +
    0.575s
    +

    duration

    +
    +
    +
    +
    +
    +
    100%
    +

    successful

    +
    +
    +
    +
    + +
    +

    Tests

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TestDurationResult
    commit hash()0.036spassed
    commits between two commits()0.155spassed
    commits in current branch full message()0.049spassed
    commits in current branch()0.066spassed
    head commit()0.121spassed
    last commit in current branch()0.051spassed
    last version commit in current branch()0.097spassed
    +
    +
    + +
    + + diff --git a/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.GitHubVariablesTest.html b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.GitHubVariablesTest.html new file mode 100644 index 00000000..d165da60 --- /dev/null +++ b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.GitHubVariablesTest.html @@ -0,0 +1,101 @@ + + + + + +Test results - Class com.javiersc.semver.project.gradle.plugin.GitHubVariablesTest + + + + + +
    +

    Class com.javiersc.semver.project.gradle.plugin.GitHubVariablesTest

    + +
    + + + + + +
    +
    + + + + + + + +
    +
    +
    2
    +

    tests

    +
    +
    +
    +
    0
    +

    failures

    +
    +
    +
    +
    0
    +

    ignored

    +
    +
    +
    +
    2m32.94s
    +

    duration

    +
    +
    +
    +
    +
    +
    100%
    +

    successful

    +
    +
    +
    +
    + +
    +

    Tests

    + + + + + + + + + + + + + + + + + + +
    TestDurationResult
    setting GITHUB_ENV()1.685spassed
    setting GITHUB_OUTPUT()2m31.25spassed
    +
    +
    + +
    + + diff --git a/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.GitTagTest.html b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.GitTagTest.html new file mode 100644 index 00000000..1462487f --- /dev/null +++ b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.GitTagTest.html @@ -0,0 +1,171 @@ + + + + + +Test results - Class com.javiersc.semver.project.gradle.plugin.GitTagTest + + + + + +
    +

    Class com.javiersc.semver.project.gradle.plugin.GitTagTest

    + +
    + + + + + +
    +
    + + + + + + + +
    +
    +
    16
    +

    tests

    +
    +
    +
    +
    0
    +

    failures

    +
    +
    +
    +
    0
    +

    ignored

    +
    +
    +
    +
    5.034s
    +

    duration

    +
    +
    +
    +
    +
    +
    100%
    +

    successful

    +
    +
    +
    +
    + +
    +

    Tests

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TestDurationResult
    is there version tag()0.122spassed
    last version tag in current branch()0.721spassed
    tags in current branch hash()0.253spassed
    tags in current branch name()0.186spassed
    tags in current branch ref()0.179spassed
    tags in current branch()0.234spassed
    tags in current commit()0.216spassed
    tags in repo hash()0.184spassed
    tags in repo name()0.183spassed
    tags in repo ref()0.157spassed
    tags in repo()0.139spassed
    version tags in current branch()0.452spassed
    version tags in current commit()0.227spassed
    version tags sorted by semver()0.405spassed
    version tags sorted by timeline or semver 1()0.404spassed
    version tags sorted by timeline or semver 2()0.972spassed
    +
    +
    + +
    + + diff --git a/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.GradleFeaturesTest.html b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.GradleFeaturesTest.html new file mode 100644 index 00000000..f21c2974 --- /dev/null +++ b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.GradleFeaturesTest.html @@ -0,0 +1,230 @@ + + + + + +Test results - Class com.javiersc.semver.project.gradle.plugin.GradleFeaturesTest + + + + + +
    +

    Class com.javiersc.semver.project.gradle.plugin.GradleFeaturesTest

    + +
    + + + + + +
    +
    + + + + + + + +
    +
    +
    5
    +

    tests

    +
    +
    +
    +
    0
    +

    failures

    +
    +
    +
    +
    0
    +

    ignored

    +
    +
    +
    +
    26.832s
    +

    duration

    +
    +
    +
    +
    +
    +
    100%
    +

    successful

    +
    +
    +
    +
    + +
    +

    Tests

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TestDurationResult
    android build cache clean v1_0_0()2.821spassed
    android configuration cache clean v1_0_0()8.080spassed
    build cache clean v1_0_0()2.847spassed
    configuration cache clean v1_0_0()6.000spassed
    project isolation clean v1_0_0()7.084spassed
    +
    +
    +

    Standard output

    + +
    VERSION -> ?[33mACTUAL: 0.9.0.2+55658a0?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.0.2+55658a0?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.0.3+904661b?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.0.3+904661b?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.0.2+31d5874?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.0.2+31d5874?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.0.3+ff4ae01?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.0.3+ff4ae01?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.0.2+af9918c?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.0.2+af9918c?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.0.3+b7ad46d?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.0.3+b7ad46d?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.0.2+ffe8bcd?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.0.2+ffe8bcd?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.0.3+0b7ff0e?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.0.3+0b7ff0e?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.0.2+924344d?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.0.2+924344d?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.0.3+3e0ebeb?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.0.3+3e0ebeb?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: 0.9.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.9.1?[0m ?[0m-?[0m ?[93mEXPECTED: v0.9.1?[0m
    +?[35m----------------------------------------?[0m
    +
    +
    +
    +
    + +
    + + diff --git a/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.MassiveTagsInSameCommitTest.html b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.MassiveTagsInSameCommitTest.html new file mode 100644 index 00000000..54b01a6a --- /dev/null +++ b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.MassiveTagsInSameCommitTest.html @@ -0,0 +1,177 @@ + + + + + +Test results - Class com.javiersc.semver.project.gradle.plugin.MassiveTagsInSameCommitTest + + + + + +
    +

    Class com.javiersc.semver.project.gradle.plugin.MassiveTagsInSameCommitTest

    + +
    + + + + + +
    +
    + + + + + + + +
    +
    +
    1
    +

    tests

    +
    +
    +
    +
    0
    +

    failures

    +
    +
    +
    +
    0
    +

    ignored

    +
    +
    +
    +
    5.875s
    +

    duration

    +
    +
    +
    +
    +
    +
    100%
    +

    successful

    +
    +
    +
    +
    + +
    +

    Tests

    + + + + + + + + + + + + + +
    TestDurationResult
    massive tags in same commit()5.875spassed
    +
    +
    +

    Standard output

    + +
    VERSION -> ?[33mACTUAL: 0.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: 0.1.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: v0.1.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.1.1?[0m ?[0m-?[0m ?[93mEXPECTED: 0.1.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.1.1?[0m ?[0m-?[0m ?[93mEXPECTED: v0.1.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.1.2?[0m ?[0m-?[0m ?[93mEXPECTED: 0.1.2?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.1.2?[0m ?[0m-?[0m ?[93mEXPECTED: v0.1.2?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.2.0?[0m ?[0m-?[0m ?[93mEXPECTED: 0.2.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.2.0?[0m ?[0m-?[0m ?[93mEXPECTED: v0.2.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.3.0?[0m ?[0m-?[0m ?[93mEXPECTED: 0.3.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.3.0?[0m ?[0m-?[0m ?[93mEXPECTED: v0.3.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.4.0?[0m ?[0m-?[0m ?[93mEXPECTED: 0.4.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.4.0?[0m ?[0m-?[0m ?[93mEXPECTED: v0.4.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 2.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: 2.0.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v2.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: v2.0.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 3.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: 3.0.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v3.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: v3.0.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 3.0.1-alpha.1?[0m ?[0m-?[0m ?[93mEXPECTED: 3.0.1-alpha.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v3.0.1-alpha.1?[0m ?[0m-?[0m ?[93mEXPECTED: v3.0.1-alpha.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 3.0.1-alpha.2?[0m ?[0m-?[0m ?[93mEXPECTED: 3.0.1-alpha.2?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v3.0.1-alpha.2?[0m ?[0m-?[0m ?[93mEXPECTED: v3.0.1-alpha.2?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 3.0.1-alpha.3?[0m ?[0m-?[0m ?[93mEXPECTED: 3.0.1-alpha.3?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v3.0.1-alpha.3?[0m ?[0m-?[0m ?[93mEXPECTED: v3.0.1-alpha.3?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 3.0.1-beta.1?[0m ?[0m-?[0m ?[93mEXPECTED: 3.0.1-beta.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v3.0.1-beta.1?[0m ?[0m-?[0m ?[93mEXPECTED: v3.0.1-beta.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 3.0.1-beta.2?[0m ?[0m-?[0m ?[93mEXPECTED: 3.0.1-beta.2?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v3.0.1-beta.2?[0m ?[0m-?[0m ?[93mEXPECTED: v3.0.1-beta.2?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 3.0.1-beta.3?[0m ?[0m-?[0m ?[93mEXPECTED: 3.0.1-beta.3?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v3.0.1-beta.3?[0m ?[0m-?[0m ?[93mEXPECTED: v3.0.1-beta.3?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 3.0.1?[0m ?[0m-?[0m ?[93mEXPECTED: 3.0.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v3.0.1?[0m ?[0m-?[0m ?[93mEXPECTED: v3.0.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 3.0.2?[0m ?[0m-?[0m ?[93mEXPECTED: 3.0.2?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v3.0.2?[0m ?[0m-?[0m ?[93mEXPECTED: v3.0.2?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 3.0.3?[0m ?[0m-?[0m ?[93mEXPECTED: 3.0.3?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v3.0.3?[0m ?[0m-?[0m ?[93mEXPECTED: v3.0.3?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 3.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: 3.1.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v3.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: v3.1.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 3.2.0?[0m ?[0m-?[0m ?[93mEXPECTED: 3.2.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v3.2.0?[0m ?[0m-?[0m ?[93mEXPECTED: v3.2.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 3.3.0?[0m ?[0m-?[0m ?[93mEXPECTED: 3.3.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v3.3.0?[0m ?[0m-?[0m ?[93mEXPECTED: v3.3.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 4.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: 4.0.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v4.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: v4.0.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 5.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: 5.0.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v5.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: v5.0.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 6.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: 6.0.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v6.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: v6.0.0?[0m
    +?[35m----------------------------------------?[0m
    +
    +
    +
    +
    + +
    + + diff --git a/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.PropertiesTest.html b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.PropertiesTest.html new file mode 100644 index 00000000..5b32d1b8 --- /dev/null +++ b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.PropertiesTest.html @@ -0,0 +1,405 @@ + + + + + +Test results - Class com.javiersc.semver.project.gradle.plugin.PropertiesTest + + + + + +
    +

    Class com.javiersc.semver.project.gradle.plugin.PropertiesTest

    + +
    + + + + + +
    +
    + + + + + + + +
    +
    +
    4
    +

    tests

    +
    +
    +
    +
    0
    +

    failures

    +
    +
    +
    +
    0
    +

    ignored

    +
    +
    +
    +
    16.666s
    +

    duration

    +
    +
    +
    +
    +
    +
    100%
    +

    successful

    +
    +
    +
    +
    + +
    +

    Tests

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TestDurationResult
    empty()2.224spassed
    scope()6.650spassed
    stage and scope()6.433spassed
    stage()1.359spassed
    +
    +
    +

    Standard output

    + +
    ?[35m?[0m
    +?[35mTesting: properties/empty/auto v1_0_0+hash?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.3+5c85f3c?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0.3+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0.3+5c85f3c?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0.3+HASH?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/empty/auto 1_0_0+hash?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.3+c141e38?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0.3+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.3+c141e38?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0.3+HASH?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/empty/auto 1_0_0+timestamp?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0.2+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0.2+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/empty/auto v1_0_0+timestamp?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0.2+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0.2+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/scope/auto v1_0_0 to v1_0_1?[0m
    +VERSION -> ?[33mACTUAL: 1.0.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.1?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.1?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/scope/patch v1_0_0 to v1_0_1?[0m
    +VERSION -> ?[33mACTUAL: 1.0.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.1?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.1?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/scope/major v1_0_0 to v1_0_0 - library w3_0_0 to w4_0_0?[0m
    +VERSION -> ?[33mACTUAL: 4.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: 4.0.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: w4.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: w4.0.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.2+0b170e7?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0.2+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0.2+0b170e7?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0.2+HASH?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/scope/auto v1_0_0-beta.5 to v1_0_0-beta.6?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0-beta.6?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0-beta.6?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0-beta.6?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0-beta.6?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/scope/major v1_0_0 to v2_0_0?[0m
    +VERSION -> ?[33mACTUAL: 2.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: 2.0.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v2.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: v2.0.0?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/scope/minor v1_0_0 to v1_0_0 - library w3_0_0 to w3_1_0?[0m
    +VERSION -> ?[33mACTUAL: 3.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: 3.1.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: w3.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: w3.1.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.2+36c4e57?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0.2+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0.2+36c4e57?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0.2+HASH?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/scope/patch v1_0_0 to v1_0_1- library w3_0_0 to w3_0_0?[0m
    +VERSION -> ?[33mACTUAL: 3.0.0.2+338d466?[0m ?[0m-?[0m ?[93mEXPECTED: 3.0.0.2+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: w3.0.0.2+338d466?[0m ?[0m-?[0m ?[93mEXPECTED: w3.0.0.2+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.1?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.1?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/scope/malformed buildAndFail (1)?[0m
    +?[35m?[0m
    +?[35mTesting: properties/scope/patch v1_0_0 to v1_0_0- library w3_0_0 to w3_0_1?[0m
    +VERSION -> ?[33mACTUAL: 3.0.1?[0m ?[0m-?[0m ?[93mEXPECTED: 3.0.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: w3.0.1?[0m ?[0m-?[0m ?[93mEXPECTED: w3.0.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.2+e749483?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0.2+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0.2+e749483?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0.2+HASH?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/scope/auto v1_0_0-alpha.1 to v1_0_0-alpha.2?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0-alpha.2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0-alpha.2?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0-alpha.2?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0-alpha.2?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/scope/minor v1_0_0 to v1_1_0?[0m
    +VERSION -> ?[33mACTUAL: 1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: 1.1.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: v1.1.0?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/scope/auto 1_0_0 to 1_0_1?[0m
    +VERSION -> ?[33mACTUAL: 1.0.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/scope/minor v1_0_0 to v1_1_0 - library w3_0_0 to w3_0_0?[0m
    +VERSION -> ?[33mACTUAL: 3.0.0.2+23ea577?[0m ?[0m-?[0m ?[93mEXPECTED: 3.0.0.2+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: w3.0.0.2+23ea577?[0m ?[0m-?[0m ?[93mEXPECTED: w3.0.0.2+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: 1.1.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: v1.1.0?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/scope/major v1_0_0 to v2_0_0 - library w3_0_0 to w3_0_0?[0m
    +VERSION -> ?[33mACTUAL: 3.0.0.2+bef2a5c?[0m ?[0m-?[0m ?[93mEXPECTED: 3.0.0.2+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: w3.0.0.2+bef2a5c?[0m ?[0m-?[0m ?[93mEXPECTED: w3.0.0.2+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 2.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: 2.0.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v2.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: v2.0.0?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage/beta v1_0_0 to v1_0_1-beta_1?[0m
    +VERSION -> ?[33mACTUAL: 1.0.1-beta.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1-beta.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.1-beta.1?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.1-beta.1?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage/final v1_0_0-alpha_1 to v1_0_0?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage/snapshot v1_0_0-rc_3 to v1_0_0-SNAPSHOT?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0-SNAPSHOT?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0-SNAPSHOT?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0-SNAPSHOT?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0-SNAPSHOT?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage/alpha v1_0_0 to v1_0_1-alpha_1?[0m
    +VERSION -> ?[33mACTUAL: 1.0.1-alpha.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1-alpha.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.1-alpha.1?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.1-alpha.1?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage/alpha v1_0_0-alpha-1 to v1_0_1-alpha_2?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0-alpha.2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0-alpha.2?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0-alpha.2?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0-alpha.2?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage/snapshot v1_0_0-alpha_1 to v1_0_0-SNAPSHOT?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0-SNAPSHOT?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0-SNAPSHOT?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0-SNAPSHOT?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0-SNAPSHOT?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/alpha+minor/alpha+minor v1_0_0 to v1_1_0-alpha_1?[0m
    +VERSION -> ?[33mACTUAL: 1.1.0-alpha.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.1.0-alpha.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.1.0-alpha.1?[0m ?[0m-?[0m ?[93mEXPECTED: v1.1.0-alpha.1?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/alpha+major/alpha+major v1_0_0 to v2_0_0-alpha_1?[0m
    +VERSION -> ?[33mACTUAL: 2.0.0-alpha.1?[0m ?[0m-?[0m ?[93mEXPECTED: 2.0.0-alpha.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v2.0.0-alpha.1?[0m ?[0m-?[0m ?[93mEXPECTED: v2.0.0-alpha.1?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/alpha+major/alpha+major v1_0_0 to v2_0_0-alpha_1 - library w3_0_0 to w3_0_0?[0m
    +VERSION -> ?[33mACTUAL: 3.0.0.2+82ca44a?[0m ?[0m-?[0m ?[93mEXPECTED: 3.0.0.2+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: w3.0.0.2+82ca44a?[0m ?[0m-?[0m ?[93mEXPECTED: w3.0.0.2+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 2.0.0-alpha.1?[0m ?[0m-?[0m ?[93mEXPECTED: 2.0.0-alpha.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v2.0.0-alpha.1?[0m ?[0m-?[0m ?[93mEXPECTED: v2.0.0-alpha.1?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/alpha+major/v1_0_0 to v1_0_0 - library beta+minor w3_0_0 to w3_1_0-beta_1?[0m
    +VERSION -> ?[33mACTUAL: 3.1.0-beta.1?[0m ?[0m-?[0m ?[93mEXPECTED: 3.1.0-beta.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: w3.1.0-beta.1?[0m ?[0m-?[0m ?[93mEXPECTED: w3.1.0-beta.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.2+3063495?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0.2+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0.2+3063495?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0.2+HASH?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/auto+minor/auto+minor v1_0_0 to v1_0_1?[0m
    +VERSION -> ?[33mACTUAL: 1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: 1.1.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: v1.1.0?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/auto+minor/auto+minor v1_0_0-alpha.1 to v1_1_0-alpha.1?[0m
    +VERSION -> ?[33mACTUAL: 1.1.0-alpha.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.1.0-alpha.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.1.0-alpha.1?[0m ?[0m-?[0m ?[93mEXPECTED: v1.1.0-alpha.1?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/auto+minor/auto+minor v1_0_0-rc.11 to v1_1_0-rc.1?[0m
    +VERSION -> ?[33mACTUAL: 1.1.0-rc.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.1.0-rc.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.1.0-rc.1?[0m ?[0m-?[0m ?[93mEXPECTED: v1.1.0-rc.1?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/beta+auto/beta+auto v1_0_0-rc.11 buildAndFail?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/beta+auto/beta+auto v1_0_0 to v1_0_1-beta.1?[0m
    +VERSION -> ?[33mACTUAL: 1.0.1-beta.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1-beta.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.1-beta.1?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.1-beta.1?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/beta+auto/beta+auto v1_0_0-alpha.1 to v1_0_0-beta.1?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0-beta.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0-beta.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0-beta.1?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0-beta.1?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/final+auto/final+auto v1_0_0-rc.11 to v1_0_0?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/final+auto/final+auto v1_2_0 to v1_2_1?[0m
    +VERSION -> ?[33mACTUAL: 1.2.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.2.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.2.1?[0m ?[0m-?[0m ?[93mEXPECTED: v1.2.1?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/final+auto/final+auto v1_0_0 to v1_0_1?[0m
    +VERSION -> ?[33mACTUAL: 1.0.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.1?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.1?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/final+auto/final+auto v1_0_0-alpha.1 to v1_0_0?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/auto+major/auto+major v1_0_0-rc.11 to v2_0_0-rc.1?[0m
    +VERSION -> ?[33mACTUAL: 2.0.0-rc.1?[0m ?[0m-?[0m ?[93mEXPECTED: 2.0.0-rc.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v2.0.0-rc.1?[0m ?[0m-?[0m ?[93mEXPECTED: v2.0.0-rc.1?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/auto+major/auto+major v1_0_0 to v2_0_0?[0m
    +VERSION -> ?[33mACTUAL: 2.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: 2.0.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v2.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: v2.0.0?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/auto+major/auto+major v1_0_0-alpha.1 to v2_0_0-alpha.1?[0m
    +VERSION -> ?[33mACTUAL: 2.0.0-alpha.1?[0m ?[0m-?[0m ?[93mEXPECTED: 2.0.0-alpha.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v2.0.0-alpha.1?[0m ?[0m-?[0m ?[93mEXPECTED: v2.0.0-alpha.1?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/auto+auto/auto+auto v1_0_0 to v1_0_1?[0m
    +VERSION -> ?[33mACTUAL: 1.0.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.1?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.1?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/auto+auto/auto+auto v1_0_0-rc.11 to v1_0_0-rc.12?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0-rc.12?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0-rc.12?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0-rc.12?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0-rc.12?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/auto+auto/auto+auto v1_0_0-alpha.1 to v1_0_0-alpha.2?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0-alpha.2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0-alpha.2?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0-alpha.2?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0-alpha.2?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/alpha+auto/alpha+auto v1_0_0 to v1_0_1-alpha.1?[0m
    +VERSION -> ?[33mACTUAL: 1.0.1-beta.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1-beta.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.1-beta.1?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.1-beta.1?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/alpha+auto/alpha+auto v1_0_0-rc.11 buildAndFail?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/alpha+auto/alpha+auto v1_0_0-alpha.1 to v1_0_0-alpha.2?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0-alpha.2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0-alpha.2?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0-alpha.2?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0-alpha.2?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/rc+auto/rc+auto v1_0_0 to v1_0_1-rc.1?[0m
    +VERSION -> ?[33mACTUAL: 1.0.1-rc.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1-rc.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.1-rc.1?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.1-rc.1?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/rc+auto/rc+auto v1_0_0-alpha.1 to v1_0_0-rc.1?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0-rc.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0-rc.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0-rc.1?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0-rc.1?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/rc+auto/rc+auto v1_0_0-rc.11 to v1_0_0-rc.12?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0-rc.12?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0-rc.12?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0-rc.12?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0-rc.12?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/auto+patch/auto+patch v1_0_0 to v1_0_1?[0m
    +VERSION -> ?[33mACTUAL: 1.0.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.1?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.1?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/auto+patch/auto+patch v1_0_0-alpha.1 to v1_0_1-alpha.1?[0m
    +VERSION -> ?[33mACTUAL: 1.0.1-alpha.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1-alpha.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.1-alpha.1?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.1-alpha.1?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/auto+patch/auto+patch v1_0_0-rc.11 to v1_0_1-rc.1?[0m
    +VERSION -> ?[33mACTUAL: 1.0.1-rc.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1-rc.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.1-rc.1?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.1-rc.1?[0m
    +?[35m----------------------------------------?[0m
    +?[35m?[0m
    +?[35mTesting: properties/stage+scope/alpha+patch/alpha+patch v1_0_0 to v1_0_1-alpha_1?[0m
    +VERSION -> ?[33mACTUAL: 1.0.1-alpha.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1-alpha.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.1-alpha.1?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.1-alpha.1?[0m
    +?[35m----------------------------------------?[0m
    +
    +
    +
    +
    + +
    + + diff --git a/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.PushSemverTagTaskTest.html b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.PushSemverTagTaskTest.html new file mode 100644 index 00000000..b0ba1bba --- /dev/null +++ b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.PushSemverTagTaskTest.html @@ -0,0 +1,96 @@ + + + + + +Test results - Class com.javiersc.semver.project.gradle.plugin.PushSemverTagTaskTest + + + + + +
    +

    Class com.javiersc.semver.project.gradle.plugin.PushSemverTagTaskTest

    + +
    + + + + + +
    +
    + + + + + + + +
    +
    +
    1
    +

    tests

    +
    +
    +
    +
    0
    +

    failures

    +
    +
    +
    +
    0
    +

    ignored

    +
    +
    +
    +
    0.335s
    +

    duration

    +
    +
    +
    +
    +
    +
    100%
    +

    successful

    +
    +
    +
    +
    + +
    +

    Tests

    + + + + + + + + + + + + + +
    TestDurationResult
    push tag()0.335spassed
    +
    +
    + +
    + + diff --git a/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.SemverIntegrationTest.html b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.SemverIntegrationTest.html new file mode 100644 index 00000000..c6b25264 --- /dev/null +++ b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.SemverIntegrationTest.html @@ -0,0 +1,101 @@ + + + + + +Test results - Class com.javiersc.semver.project.gradle.plugin.SemverIntegrationTest + + + + + +
    +

    Class com.javiersc.semver.project.gradle.plugin.SemverIntegrationTest

    + +
    + + + + + +
    +
    + + + + + + + +
    +
    +
    2
    +

    tests

    +
    +
    +
    +
    0
    +

    failures

    +
    +
    +
    +
    0
    +

    ignored

    +
    +
    +
    +
    8.716s
    +

    duration

    +
    +
    +
    +
    +
    +
    100%
    +

    successful

    +
    +
    +
    +
    + +
    +

    Tests

    + + + + + + + + + + + + + + + + + + +
    TestDurationResult
    given a project which has commits when it builds then it register semver extension()1.156spassed
    given a project which has no git when it builds then it only register semver extension()7.560spassed
    +
    +
    + +
    + + diff --git a/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.TagsOrderTest.html b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.TagsOrderTest.html new file mode 100644 index 00000000..24c53258 --- /dev/null +++ b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.TagsOrderTest.html @@ -0,0 +1,108 @@ + + + + + +Test results - Class com.javiersc.semver.project.gradle.plugin.TagsOrderTest + + + + + +
    +

    Class com.javiersc.semver.project.gradle.plugin.TagsOrderTest

    + +
    + + + + + +
    +
    + + + + + + + +
    +
    +
    1
    +

    tests

    +
    +
    +
    +
    0
    +

    failures

    +
    +
    +
    +
    0
    +

    ignored

    +
    +
    +
    +
    0.998s
    +

    duration

    +
    +
    +
    +
    +
    +
    100%
    +

    successful

    +
    +
    +
    +
    + +
    +

    Tests

    + + + + + + + + + + + + + +
    TestDurationResult
    random()0.998spassed
    +
    +
    +

    Standard output

    + +
    VERSION -> ?[33mACTUAL: 0.1.0-rc.13?[0m ?[0m-?[0m ?[93mEXPECTED: 0.1.0-rc.13?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.1.0-rc.13?[0m ?[0m-?[0m ?[93mEXPECTED: v0.1.0-rc.13?[0m
    +?[35m----------------------------------------?[0m
    +
    +
    +
    +
    + +
    + + diff --git a/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.VersionBuildDirTest.html b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.VersionBuildDirTest.html new file mode 100644 index 00000000..adad6be0 --- /dev/null +++ b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.VersionBuildDirTest.html @@ -0,0 +1,143 @@ + + + + + +Test results - Class com.javiersc.semver.project.gradle.plugin.VersionBuildDirTest + + + + + +
    +

    Class com.javiersc.semver.project.gradle.plugin.VersionBuildDirTest

    + +
    + + + + + +
    +
    + + + + + + + +
    +
    +
    5
    +

    tests

    +
    +
    +
    +
    0
    +

    failures

    +
    +
    +
    +
    0
    +

    ignored

    +
    +
    +
    +
    2.456s
    +

    duration

    +
    +
    +
    +
    +
    +
    100%
    +

    successful

    +
    +
    +
    +
    + +
    +

    Tests

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TestDurationResult
    clean v1_0_0 configuration phase()1.230spassed
    clean v1_0_0()0.321spassed
    clean without tag in current commit - hash()0.171spassed
    no clean createSemverTag should fail()0.338spassed
    no clean without tag in current commit - dirty()0.396spassed
    +
    +
    +

    Standard output

    + +
    VERSION -> ?[33mACTUAL: 1.0.0.2+7245c06?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0.2+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0.2+7245c06?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0.2+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0.2+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0.2+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0.2+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0.2+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0.2+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0?[0m
    +?[35m----------------------------------------?[0m
    +
    +
    +
    +
    + +
    + + diff --git a/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.VersionTest.html b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.VersionTest.html new file mode 100644 index 00000000..baa96f66 --- /dev/null +++ b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.VersionTest.html @@ -0,0 +1,108 @@ + + + + + +Test results - Class com.javiersc.semver.project.gradle.plugin.VersionTest + + + + + +
    +

    Class com.javiersc.semver.project.gradle.plugin.VersionTest

    + +
    + + + + + +
    +
    + + + + + + + +
    +
    +
    1
    +

    tests

    +
    +
    +
    +
    0
    +

    failures

    +
    +
    +
    +
    0
    +

    ignored

    +
    +
    +
    +
    2.561s
    +

    duration

    +
    +
    +
    +
    +
    +
    100%
    +

    successful

    +
    +
    +
    +
    + +
    +

    Tests

    + + + + + + + + + + + + + +
    TestDurationResult
    last version in current branch()2.561spassed
    +
    +
    +

    Standard output

    + +
    ?[33mThere is an old tag with a higher version than the last tag version:?[0m
    +?[33m  - Old tag version -> 1.0.0-alpha.2?[0m
    +?[33m  - Last tag version -> 1.0.0?[0m
    +
    +
    +
    +
    + +
    + + diff --git a/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.examples.MultiProjectExampleTest.html b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.examples.MultiProjectExampleTest.html new file mode 100644 index 00000000..e1b521b2 --- /dev/null +++ b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.examples.MultiProjectExampleTest.html @@ -0,0 +1,525 @@ + + + + + +Test results - Class com.javiersc.semver.project.gradle.plugin.examples.MultiProjectExampleTest + + + + + +
    +

    Class com.javiersc.semver.project.gradle.plugin.examples.MultiProjectExampleTest

    + +
    + + + + + +
    +
    + + + + + + + +
    +
    +
    1
    +

    tests

    +
    +
    +
    +
    0
    +

    failures

    +
    +
    +
    +
    0
    +

    ignored

    +
    +
    +
    +
    10.734s
    +

    duration

    +
    +
    +
    +
    +
    +
    100%
    +

    successful

    +
    +
    +
    +
    + +
    +

    Tests

    + + + + + + + + + + + + + +
    TestDurationResult
    multi project()10.734spassed
    +
    +
    +

    Standard output

    + +
    VERSION -> ?[33mACTUAL: 1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: a1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: a1.0.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: a1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: a1.0.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.0+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: a1.0.1?[0m ?[0m-?[0m ?[93mEXPECTED: a1.0.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: a1.0.1?[0m ?[0m-?[0m ?[93mEXPECTED: a1.0.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.1+e6251f8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.1.1+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: a1.0.1.1+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: a1.0.1+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.2?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: a1.0.2?[0m ?[0m-?[0m ?[93mEXPECTED: a1.0.2?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.2+4f979f2?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.3-alpha.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.3-alpha.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: a1.0.3-alpha.1?[0m ?[0m-?[0m ?[93mEXPECTED: a1.0.3-alpha.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.3-beta.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.3-beta.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: a1.0.3-beta.1?[0m ?[0m-?[0m ?[93mEXPECTED: a1.0.3-beta.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.3+f1305e8?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.3?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.3?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: a1.0.3?[0m ?[0m-?[0m ?[93mEXPECTED: a1.0.3?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 2.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: 2.0.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: a2.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: a2.0.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 2.0.1-SNAPSHOT?[0m ?[0m-?[0m ?[93mEXPECTED: 2.0.1-SNAPSHOT?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: a2.0.1-SNAPSHOT?[0m ?[0m-?[0m ?[93mEXPECTED: a2.0.1-SNAPSHOT?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: b1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 2.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: 2.0.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: a2.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: a2.0.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: 1.1.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: b1.1.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: 1.1.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: b1.1.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: 1.1.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: b1.1.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: 1.1.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: b1.1.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 2.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: 2.0.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: a2.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: a2.0.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: 1.1.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: b1.1.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: 1.1.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: b1.1.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: 1.1.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: b1.1.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: 1.1.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: b1.1.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.1-rc.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1-rc.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.1-rc.1?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.1-rc.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.1-rc.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1-rc.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.1-rc.1?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.1-rc.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.1-rc.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1-rc.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.1-rc.1?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.1-rc.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.0.4+f830e97?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 2.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: 2.0.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: a2.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: a2.0.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: 1.1.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: b1.1.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: 1.1.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: b1.1.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: 1.1.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: b1.1.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: 1.1.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: b1.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: b1.1.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.1-rc.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1-rc.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.1-rc.1?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.1-rc.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.1-rc.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1-rc.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.1-rc.1?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.1-rc.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.1-rc.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1-rc.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: c1.0.1-rc.1?[0m ?[0m-?[0m ?[93mEXPECTED: c1.0.1-rc.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.1-dev.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1-dev.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.1-dev.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1-dev.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.1-dev.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1-dev.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: 1.0.1-dev.1?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1-dev.1?[0m
    +?[35m----------------------------------------?[0m
    +
    +
    +
    +
    + +
    + + diff --git a/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.examples.OneProjectExampleTest.html b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.examples.OneProjectExampleTest.html new file mode 100644 index 00000000..e33b7451 --- /dev/null +++ b/reports-generated/all-tests/classes/com.javiersc.semver.project.gradle.plugin.examples.OneProjectExampleTest.html @@ -0,0 +1,138 @@ + + + + + +Test results - Class com.javiersc.semver.project.gradle.plugin.examples.OneProjectExampleTest + + + + + +
    +

    Class com.javiersc.semver.project.gradle.plugin.examples.OneProjectExampleTest

    + +
    + + + + + +
    +
    + + + + + + + +
    +
    +
    1
    +

    tests

    +
    +
    +
    +
    0
    +

    failures

    +
    +
    +
    +
    0
    +

    ignored

    +
    +
    +
    +
    1.306s
    +

    duration

    +
    +
    +
    +
    +
    +
    100%
    +

    successful

    +
    +
    +
    +
    + +
    +

    Tests

    + + + + + + + + + + + + + +
    TestDurationResult
    one project()1.306spassed
    +
    +
    +

    Standard output

    + +
    VERSION -> ?[33mACTUAL: 0.1.0.0+5027b62?[0m ?[0m-?[0m ?[93mEXPECTED: 0.1.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.1.0.0+5027b62?[0m ?[0m-?[0m ?[93mEXPECTED: v0.1.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.1.0.0+5027b62+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: 0.1.0+DIRTY?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.1.0.0+5027b62+DIRTY?[0m ?[0m-?[0m ?[93mEXPECTED: v0.1.0+DIRTY?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: 0.1.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: v0.1.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: 0.1.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.1.0?[0m ?[0m-?[0m ?[93mEXPECTED: v0.1.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.1.0.1+7c3c09e?[0m ?[0m-?[0m ?[93mEXPECTED: 0.1.0+HASH?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.1.0.1+7c3c09e?[0m ?[0m-?[0m ?[93mEXPECTED: v0.1.0+HASH?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.1.1?[0m ?[0m-?[0m ?[93mEXPECTED: 0.1.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.1.1?[0m ?[0m-?[0m ?[93mEXPECTED: v0.1.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.1.2-alpha.1?[0m ?[0m-?[0m ?[93mEXPECTED: 0.1.2-alpha.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.1.2-alpha.1?[0m ?[0m-?[0m ?[93mEXPECTED: v0.1.2-alpha.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.1.2-beta.1?[0m ?[0m-?[0m ?[93mEXPECTED: 0.1.2-beta.1?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.1.2-beta.1?[0m ?[0m-?[0m ?[93mEXPECTED: v0.1.2-beta.1?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 0.1.2?[0m ?[0m-?[0m ?[93mEXPECTED: 0.1.2?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v0.1.2?[0m ?[0m-?[0m ?[93mEXPECTED: v0.1.2?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.0?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.0?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.0?[0m
    +?[35m----------------------------------------?[0m
    +VERSION -> ?[33mACTUAL: 1.0.1-SNAPSHOT?[0m ?[0m-?[0m ?[93mEXPECTED: 1.0.1-SNAPSHOT?[0m
    +VERSION WITH TAG -> ?[33mACTUAL: v1.0.1-SNAPSHOT?[0m ?[0m-?[0m ?[93mEXPECTED: v1.0.1-SNAPSHOT?[0m
    +?[35m----------------------------------------?[0m
    +
    +
    +
    +
    + +
    + + diff --git a/reports-generated/all-tests/classes/com.javiersc.semver.settings.gradle.plugin.MultiProjectTest.html b/reports-generated/all-tests/classes/com.javiersc.semver.settings.gradle.plugin.MultiProjectTest.html new file mode 100644 index 00000000..097d961b --- /dev/null +++ b/reports-generated/all-tests/classes/com.javiersc.semver.settings.gradle.plugin.MultiProjectTest.html @@ -0,0 +1,96 @@ + + + + + +Test results - Class com.javiersc.semver.settings.gradle.plugin.MultiProjectTest + + + + + +
    +

    Class com.javiersc.semver.settings.gradle.plugin.MultiProjectTest

    + +
    + + + + + +
    +
    + + + + + + + +
    +
    +
    1
    +

    tests

    +
    +
    +
    +
    0
    +

    failures

    +
    +
    +
    +
    0
    +

    ignored

    +
    +
    +
    +
    2m35.17s
    +

    duration

    +
    +
    +
    +
    +
    +
    100%
    +

    successful

    +
    +
    +
    +
    + +
    +

    Tests

    + + + + + + + + + + + + + +
    TestDurationResult
    multi project test()2m35.17spassed
    +
    +
    + +
    + + diff --git a/reports-generated/all-tests/css/base-style.css b/reports-generated/all-tests/css/base-style.css new file mode 100644 index 00000000..4afa73e3 --- /dev/null +++ b/reports-generated/all-tests/css/base-style.css @@ -0,0 +1,179 @@ + +body { + margin: 0; + padding: 0; + font-family: sans-serif; + font-size: 12pt; +} + +body, a, a:visited { + color: #303030; +} + +#content { + padding-left: 50px; + padding-right: 50px; + padding-top: 30px; + padding-bottom: 30px; +} + +#content h1 { + font-size: 160%; + margin-bottom: 10px; +} + +#footer { + margin-top: 100px; + font-size: 80%; + white-space: nowrap; +} + +#footer, #footer a { + color: #a0a0a0; +} + +#line-wrapping-toggle { + vertical-align: middle; +} + +#label-for-line-wrapping-toggle { + vertical-align: middle; +} + +ul { + margin-left: 0; +} + +h1, h2, h3 { + white-space: nowrap; +} + +h2 { + font-size: 120%; +} + +ul.tabLinks { + padding-left: 0; + padding-top: 10px; + padding-bottom: 10px; + overflow: auto; + min-width: 800px; + width: auto !important; + width: 800px; +} + +ul.tabLinks li { + float: left; + height: 100%; + list-style: none; + padding-left: 10px; + padding-right: 10px; + padding-top: 5px; + padding-bottom: 5px; + margin-bottom: 0; + -moz-border-radius: 7px; + border-radius: 7px; + margin-right: 25px; + border: solid 1px #d4d4d4; + background-color: #f0f0f0; +} + +ul.tabLinks li:hover { + background-color: #fafafa; +} + +ul.tabLinks li.selected { + background-color: #c5f0f5; + border-color: #c5f0f5; +} + +ul.tabLinks a { + font-size: 120%; + display: block; + outline: none; + text-decoration: none; + margin: 0; + padding: 0; +} + +ul.tabLinks li h2 { + margin: 0; + padding: 0; +} + +div.tab { +} + +div.selected { + display: block; +} + +div.deselected { + display: none; +} + +div.tab table { + min-width: 350px; + width: auto !important; + width: 350px; + border-collapse: collapse; +} + +div.tab th, div.tab table { + border-bottom: solid #d0d0d0 1px; +} + +div.tab th { + text-align: left; + white-space: nowrap; + padding-left: 6em; +} + +div.tab th:first-child { + padding-left: 0; +} + +div.tab td { + white-space: nowrap; + padding-left: 6em; + padding-top: 5px; + padding-bottom: 5px; +} + +div.tab td:first-child { + padding-left: 0; +} + +div.tab td.numeric, div.tab th.numeric { + text-align: right; +} + +span.code { + display: inline-block; + margin-top: 0em; + margin-bottom: 1em; +} + +span.code pre { + font-size: 11pt; + padding-top: 10px; + padding-bottom: 10px; + padding-left: 10px; + padding-right: 10px; + margin: 0; + background-color: #f7f7f7; + border: solid 1px #d0d0d0; + min-width: 700px; + width: auto !important; + width: 700px; +} + +span.wrapped pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: break-all; +} + +label.hidden { + display: none; +} \ No newline at end of file diff --git a/reports-generated/all-tests/css/style.css b/reports-generated/all-tests/css/style.css new file mode 100644 index 00000000..3dc4913e --- /dev/null +++ b/reports-generated/all-tests/css/style.css @@ -0,0 +1,84 @@ + +#summary { + margin-top: 30px; + margin-bottom: 40px; +} + +#summary table { + border-collapse: collapse; +} + +#summary td { + vertical-align: top; +} + +.breadcrumbs, .breadcrumbs a { + color: #606060; +} + +.infoBox { + width: 110px; + padding-top: 15px; + padding-bottom: 15px; + text-align: center; +} + +.infoBox p { + margin: 0; +} + +.counter, .percent { + font-size: 120%; + font-weight: bold; + margin-bottom: 8px; +} + +#duration { + width: 125px; +} + +#successRate, .summaryGroup { + border: solid 2px #d0d0d0; + -moz-border-radius: 10px; + border-radius: 10px; +} + +#successRate { + width: 140px; + margin-left: 35px; +} + +#successRate .percent { + font-size: 180%; +} + +.success, .success a { + color: #008000; +} + +div.success, #successRate.success { + background-color: #bbd9bb; + border-color: #008000; +} + +.failures, .failures a { + color: #b60808; +} + +.skipped, .skipped a { + color: #c09853; +} + +div.failures, #successRate.failures { + background-color: #ecdada; + border-color: #b60808; +} + +ul.linkList { + padding-left: 0; +} + +ul.linkList li { + list-style: none; + margin-bottom: 5px; +} diff --git a/reports-generated/all-tests/index.html b/reports-generated/all-tests/index.html new file mode 100644 index 00000000..7497b147 --- /dev/null +++ b/reports-generated/all-tests/index.html @@ -0,0 +1,303 @@ + + + + + +Test results - Test Summary + + + + + +
    +

    Test Summary

    +
    + + + + + +
    +
    + + + + + + + +
    +
    +
    51
    +

    tests

    +
    +
    +
    +
    0
    +

    failures

    +
    +
    +
    +
    0
    +

    ignored

    +
    +
    +
    +
    6m34.08s
    +

    duration

    +
    +
    +
    +
    +
    +
    100%
    +

    successful

    +
    +
    +
    +
    + +
    +

    Packages

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PackageTestsFailuresIgnoredDurationSuccess rate
    +com.javiersc.semver.project.gradle.plugin +48003m46.87s100%
    +com.javiersc.semver.project.gradle.plugin.examples +20012.040s100%
    +com.javiersc.semver.settings.gradle.plugin +1002m35.17s100%
    +
    +
    +

    Classes

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ClassTestsFailuresIgnoredDurationSuccess rate
    +com.javiersc.semver.project.gradle.plugin.CalculatedVersionTest +2003.275s100%
    +com.javiersc.semver.project.gradle.plugin.GitBranchTest +1000.611s100%
    +com.javiersc.semver.project.gradle.plugin.GitCommitTest +7000.575s100%
    +com.javiersc.semver.project.gradle.plugin.GitHubVariablesTest +2002m32.94s100%
    +com.javiersc.semver.project.gradle.plugin.GitTagTest +16005.034s100%
    +com.javiersc.semver.project.gradle.plugin.GradleFeaturesTest +50026.832s100%
    +com.javiersc.semver.project.gradle.plugin.MassiveTagsInSameCommitTest +1005.875s100%
    +com.javiersc.semver.project.gradle.plugin.PropertiesTest +40016.666s100%
    +com.javiersc.semver.project.gradle.plugin.PushSemverTagTaskTest +1000.335s100%
    +com.javiersc.semver.project.gradle.plugin.SemverIntegrationTest +2008.716s100%
    +com.javiersc.semver.project.gradle.plugin.TagsOrderTest +1000.998s100%
    +com.javiersc.semver.project.gradle.plugin.VersionBuildDirTest +5002.456s100%
    +com.javiersc.semver.project.gradle.plugin.VersionTest +1002.561s100%
    +com.javiersc.semver.project.gradle.plugin.examples.MultiProjectExampleTest +10010.734s100%
    +com.javiersc.semver.project.gradle.plugin.examples.OneProjectExampleTest +1001.306s100%
    +com.javiersc.semver.settings.gradle.plugin.MultiProjectTest +1002m35.17s100%
    +
    +
    + +
    + + diff --git a/reports-generated/all-tests/js/report.js b/reports-generated/all-tests/js/report.js new file mode 100644 index 00000000..83bab4a1 --- /dev/null +++ b/reports-generated/all-tests/js/report.js @@ -0,0 +1,194 @@ +(function (window, document) { + "use strict"; + + var tabs = {}; + + function changeElementClass(element, classValue) { + if (element.getAttribute("className")) { + element.setAttribute("className", classValue); + } else { + element.setAttribute("class", classValue); + } + } + + function getClassAttribute(element) { + if (element.getAttribute("className")) { + return element.getAttribute("className"); + } else { + return element.getAttribute("class"); + } + } + + function addClass(element, classValue) { + changeElementClass(element, getClassAttribute(element) + " " + classValue); + } + + function removeClass(element, classValue) { + changeElementClass(element, getClassAttribute(element).replace(classValue, "")); + } + + function initTabs() { + var container = document.getElementById("tabs"); + + tabs.tabs = findTabs(container); + tabs.titles = findTitles(tabs.tabs); + tabs.headers = findHeaders(container); + tabs.select = select; + tabs.deselectAll = deselectAll; + tabs.select(0); + + return true; + } + + function getCheckBox() { + return document.getElementById("line-wrapping-toggle"); + } + + function getLabelForCheckBox() { + return document.getElementById("label-for-line-wrapping-toggle"); + } + + function findCodeBlocks() { + var spans = document.getElementById("tabs").getElementsByTagName("span"); + var codeBlocks = []; + for (var i = 0; i < spans.length; ++i) { + if (spans[i].className.indexOf("code") >= 0) { + codeBlocks.push(spans[i]); + } + } + return codeBlocks; + } + + function forAllCodeBlocks(operation) { + var codeBlocks = findCodeBlocks(); + + for (var i = 0; i < codeBlocks.length; ++i) { + operation(codeBlocks[i], "wrapped"); + } + } + + function toggleLineWrapping() { + var checkBox = getCheckBox(); + + if (checkBox.checked) { + forAllCodeBlocks(addClass); + } else { + forAllCodeBlocks(removeClass); + } + } + + function initControls() { + if (findCodeBlocks().length > 0) { + var checkBox = getCheckBox(); + var label = getLabelForCheckBox(); + + checkBox.onclick = toggleLineWrapping; + checkBox.checked = false; + + removeClass(label, "hidden"); + } + } + + function switchTab() { + var id = this.id.substr(1); + + for (var i = 0; i < tabs.tabs.length; i++) { + if (tabs.tabs[i].id === id) { + tabs.select(i); + break; + } + } + + return false; + } + + function select(i) { + this.deselectAll(); + + changeElementClass(this.tabs[i], "tab selected"); + changeElementClass(this.headers[i], "selected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var h2 = document.createElement("H2"); + + h2.appendChild(document.createTextNode(this.titles[i])); + this.headers[i].appendChild(h2); + } + + function deselectAll() { + for (var i = 0; i < this.tabs.length; i++) { + changeElementClass(this.tabs[i], "tab deselected"); + changeElementClass(this.headers[i], "deselected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var a = document.createElement("A"); + + a.setAttribute("id", "ltab" + i); + a.setAttribute("href", "#tab" + i); + a.onclick = switchTab; + a.appendChild(document.createTextNode(this.titles[i])); + + this.headers[i].appendChild(a); + } + } + + function findTabs(container) { + return findChildElements(container, "DIV", "tab"); + } + + function findHeaders(container) { + var owner = findChildElements(container, "UL", "tabLinks"); + return findChildElements(owner[0], "LI", null); + } + + function findTitles(tabs) { + var titles = []; + + for (var i = 0; i < tabs.length; i++) { + var tab = tabs[i]; + var header = findChildElements(tab, "H2", null)[0]; + + header.parentNode.removeChild(header); + + if (header.innerText) { + titles.push(header.innerText); + } else { + titles.push(header.textContent); + } + } + + return titles; + } + + function findChildElements(container, name, targetClass) { + var elements = []; + var children = container.childNodes; + + for (var i = 0; i < children.length; i++) { + var child = children.item(i); + + if (child.nodeType === 1 && child.nodeName === name) { + if (targetClass && child.className.indexOf(targetClass) < 0) { + continue; + } + + elements.push(child); + } + } + + return elements; + } + + // Entry point. + + window.onload = function() { + initTabs(); + initControls(); + }; +} (window, window.document)); \ No newline at end of file diff --git a/reports-generated/all-tests/packages/com.javiersc.semver.project.gradle.plugin.examples.html b/reports-generated/all-tests/packages/com.javiersc.semver.project.gradle.plugin.examples.html new file mode 100644 index 00000000..a793857e --- /dev/null +++ b/reports-generated/all-tests/packages/com.javiersc.semver.project.gradle.plugin.examples.html @@ -0,0 +1,113 @@ + + + + + +Test results - Package com.javiersc.semver.project.gradle.plugin.examples + + + + + +
    +

    Package com.javiersc.semver.project.gradle.plugin.examples

    + +
    + + + + + +
    +
    + + + + + + + +
    +
    +
    2
    +

    tests

    +
    +
    +
    +
    0
    +

    failures

    +
    +
    +
    +
    0
    +

    ignored

    +
    +
    +
    +
    12.040s
    +

    duration

    +
    +
    +
    +
    +
    +
    100%
    +

    successful

    +
    +
    +
    +
    + +
    +

    Classes

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ClassTestsFailuresIgnoredDurationSuccess rate
    +MultiProjectExampleTest +10010.734s100%
    +OneProjectExampleTest +1001.306s100%
    +
    +
    + +
    + + diff --git a/reports-generated/all-tests/packages/com.javiersc.semver.project.gradle.plugin.html b/reports-generated/all-tests/packages/com.javiersc.semver.project.gradle.plugin.html new file mode 100644 index 00000000..a2d3e4c0 --- /dev/null +++ b/reports-generated/all-tests/packages/com.javiersc.semver.project.gradle.plugin.html @@ -0,0 +1,223 @@ + + + + + +Test results - Package com.javiersc.semver.project.gradle.plugin + + + + + +
    +

    Package com.javiersc.semver.project.gradle.plugin

    + +
    + + + + + +
    +
    + + + + + + + +
    +
    +
    48
    +

    tests

    +
    +
    +
    +
    0
    +

    failures

    +
    +
    +
    +
    0
    +

    ignored

    +
    +
    +
    +
    3m46.87s
    +

    duration

    +
    +
    +
    +
    +
    +
    100%
    +

    successful

    +
    +
    +
    +
    + +
    +

    Classes

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ClassTestsFailuresIgnoredDurationSuccess rate
    +CalculatedVersionTest +2003.275s100%
    +GitBranchTest +1000.611s100%
    +GitCommitTest +7000.575s100%
    +GitHubVariablesTest +2002m32.94s100%
    +GitTagTest +16005.034s100%
    +GradleFeaturesTest +50026.832s100%
    +MassiveTagsInSameCommitTest +1005.875s100%
    +PropertiesTest +40016.666s100%
    +PushSemverTagTaskTest +1000.335s100%
    +SemverIntegrationTest +2008.716s100%
    +TagsOrderTest +1000.998s100%
    +VersionBuildDirTest +5002.456s100%
    +VersionTest +1002.561s100%
    +
    +
    + +
    + + diff --git a/reports-generated/all-tests/packages/com.javiersc.semver.settings.gradle.plugin.html b/reports-generated/all-tests/packages/com.javiersc.semver.settings.gradle.plugin.html new file mode 100644 index 00000000..368fa31f --- /dev/null +++ b/reports-generated/all-tests/packages/com.javiersc.semver.settings.gradle.plugin.html @@ -0,0 +1,103 @@ + + + + + +Test results - Package com.javiersc.semver.settings.gradle.plugin + + + + + +
    +

    Package com.javiersc.semver.settings.gradle.plugin

    + +
    + + + + + +
    +
    + + + + + + + +
    +
    +
    1
    +

    tests

    +
    +
    +
    +
    0
    +

    failures

    +
    +
    +
    +
    0
    +

    ignored

    +
    +
    +
    +
    2m35.17s
    +

    duration

    +
    +
    +
    +
    +
    +
    100%
    +

    successful

    +
    +
    +
    +
    + +
    +

    Classes

    + + + + + + + + + + + + + + + + + + + +
    ClassTestsFailuresIgnoredDurationSuccess rate
    +MultiProjectTest +1002m35.17s100%
    +
    +
    + +
    + + diff --git a/reports-generated/code-analysis/detekt.md b/reports-generated/code-analysis/detekt.md new file mode 100644 index 00000000..a0da1bcc --- /dev/null +++ b/reports-generated/code-analysis/detekt.md @@ -0,0 +1,1232 @@ +# detekt + +## Metrics + +* 221 number of properties + +* 170 number of functions + +* 56 number of classes + +* 11 number of packages + +* 47 number of kt files + +## Complexity Report + +* 4,755 lines of code (loc) + +* 3,967 source lines of code (sloc) + +* 3,043 logical lines of code (lloc) + +* 37 comment lines of code (cloc) + +* 315 cyclomatic complexity (mcc) + +* 100 cognitive complexity + +* 71 number of total code smells + +* 0% comment source ratio + +* 103 mcc per 1,000 lloc + +* 23 code smells per 1,000 lloc + +## Findings (71) + +### complexity, LargeClass (1) + +One class should have one responsibility. Large classes tend to handle many things at once. Split up large classes into smaller classes that are easier to understand. + +[Documentation](https://detekt.dev/docs/rules/complexity#largeclass) + +* semver-project-gradle-plugin/test/kotlin/com/javiersc/semver/project/gradle/plugin/GitTagTest.kt:27:16 +``` +Class GitTagTest is too large. Consider splitting it into smaller pieces. +``` +```kotlin +24 import kotlin.test.Test +25 import org.eclipse.jgit.lib.Ref +26 +27 internal class GitTagTest { +!! ^ error +28 +29 @Test +30 fun `tags in repo`() { + +``` + +### complexity, LongMethod (8) + +One method should have one responsibility. Long methods tend to handle many things at once. Prefer smaller methods to make them easier to understand. + +[Documentation](https://detekt.dev/docs/rules/complexity#longmethod) + +* semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/CalculatedVersion.kt:8:14 +``` +The function calculatedVersion is too long (85). The maximum length is 60. +``` +```kotlin +5 import com.javiersc.semver.project.gradle.plugin.internal.git.commitsBetweenTwoCommitsIncludingLastExcludingFirst +6 +7 @Suppress("ComplexMethod") +8 internal fun calculatedVersion( +! ^ error +9 stageProperty: String?, +10 scopeProperty: String?, +11 isCreatingSemverTag: Boolean, + +``` + +* semver-project-gradle-plugin/test/kotlin/com/javiersc/semver/project/gradle/plugin/GitTagTest.kt:492:9 +``` +The function version tags in current branch is too long (85). The maximum length is 60. +``` +```kotlin +489 } +490 +491 @Test +492 fun `version tags in current branch`() { +!!! ^ error +493 initialCommitAnd { +494 git.tag().setName("hello").call() +495 git.tag().setName("vhello").call() + +``` + +* semver-project-gradle-plugin/test/kotlin/com/javiersc/semver/project/gradle/plugin/GitTagTest.kt:587:9 +``` +The function version tags sorted by semver is too long (85). The maximum length is 60. +``` +```kotlin +584 } +585 +586 @Test +587 fun `version tags sorted by semver`() { +!!! ^ error +588 initialCommitAnd { +589 git.tag().setName("hello").call() +590 git.tag().setName("vhello").call() + +``` + +* semver-project-gradle-plugin/test/kotlin/com/javiersc/semver/project/gradle/plugin/GitTagTest.kt:685:9 +``` +The function version tags sorted by timeline or semver 1 is too long (89). The maximum length is 60. +``` +```kotlin +682 } +683 +684 @Test +685 fun `version tags sorted by timeline or semver 1`() { +!!! ^ error +686 initialCommitAnd { +687 git.tag().setName("hello").call() +688 git.tag().setName("vhello").call() + +``` + +* semver-project-gradle-plugin/test/kotlin/com/javiersc/semver/project/gradle/plugin/GitTagTest.kt:787:9 +``` +The function version tags sorted by timeline or semver 2 is too long (169). The maximum length is 60. +``` +```kotlin +784 } +785 +786 @Test +787 fun `version tags sorted by timeline or semver 2`() { +!!! ^ error +788 initialCommitAnd { +789 git.tag().setName("hello").call() +790 git.tag().setName("vhello").call() + +``` + +* semver-project-gradle-plugin/test/kotlin/com/javiersc/semver/project/gradle/plugin/GitTagTest.kt:976:9 +``` +The function last version tag in current branch is too long (71). The maximum length is 60. +``` +```kotlin +973 } +974 +975 @Test +976 fun `last version tag in current branch`() { +!!! ^ error +977 initialCommitAnd { +978 git.tag().setName("hello").call() +979 git.tag().setName("vhello").call() + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/MassiveTagsInSameCommitTest.kt:11:9 +``` +The function massive tags in same commit is too long (67). The maximum length is 60. +``` +```kotlin +8 +9 @Test +10 @Suppress("ComplexMethod") +11 fun `massive tags in same commit`() { +!! ^ error +12 gradleTestKitTest("examples/one-project") { +13 Git.init().setDirectory(projectDir).call() +14 + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/TagsOrderTest.kt:11:9 +``` +The function random is too long (63). The maximum length is 60. +``` +```kotlin +8 internal class TagsOrderTest : GradleTestKitTest() { +9 +10 @Test +11 fun random() { +!! ^ error +12 gradleTestKitTest("tags-order/random") { +13 projectDir.generateInitialCommitAddVersionTagAndAddNewCommit() +14 + +``` + +### complexity, LongParameterList (2) + +The more parameters a function has the more complex it is. Long parameter lists are often used to control complex algorithms and violate the Single Responsibility Principle. Prefer functions with short parameter lists. + +[Documentation](https://detekt.dev/docs/rules/complexity#longparameterlist) + +* semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/CalculatedVersion.kt:8:31 +``` +The function calculatedVersion(stageProperty: String?, scopeProperty: String?, isCreatingSemverTag: Boolean, lastSemverMajorInCurrentBranch: Int, lastSemverMinorInCurrentBranch: Int, lastSemverPatchInCurrentBranch: Int, lastSemverStageInCurrentBranch: String?, lastSemverNumInCurrentBranch: Int?, versionTagsInCurrentBranch: List, clean: Boolean, checkClean: Boolean, lastCommitInCurrentBranch: String?, commitsInCurrentBranch: List, headCommit: String, lastVersionCommitInCurrentBranch: String?) has too many parameters. The current threshold is set to 6. +``` +```kotlin +5 import com.javiersc.semver.project.gradle.plugin.internal.git.commitsBetweenTwoCommitsIncludingLastExcludingFirst +6 +7 @Suppress("ComplexMethod") +8 internal fun calculatedVersion( +! ^ error +9 stageProperty: String?, +10 scopeProperty: String?, +11 isCreatingSemverTag: Boolean, + +``` + +* semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/CalculatedVersion.kt:118:44 +``` +The function calculateAdditionalVersionData(clean: Boolean, checkClean: Boolean, lastCommitInCurrentBranch: String?, commitsInCurrentBranch: List, isThereVersionTags: Boolean, headCommit: String, lastVersionCommitInCurrentBranch: String?) has too many parameters. The current threshold is set to 6. +``` +```kotlin +115 return calculatedVersion +116 } +117 +118 internal fun calculateAdditionalVersionData( +!!! ^ error +119 clean: Boolean = true, +120 checkClean: Boolean = true, +121 lastCommitInCurrentBranch: String?, + +``` + +### complexity, TooManyFunctions (4) + +Too many functions inside a/an file/class/object/interface always indicate a violation of the single responsibility principle. Maybe the file/class/object/interface wants to manage too many things at once. Extract functionality which clearly belongs together. + +[Documentation](https://detekt.dev/docs/rules/complexity#toomanyfunctions) + +* semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt:26:16 +``` +Class 'GitCache' with '13' functions detected. Defined threshold inside classes is set to '11' +``` +```kotlin +23 +24 private var gitCache: GitCache? = null +25 +26 internal class GitCache +!! ^ error +27 private constructor( +28 private val gitDir: File, +29 maxCount: Provider? = null, + +``` + +* semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitRefGitExtensions.kt:1:1 +``` +File '/home/runner/work/semver-gradle-plugin/semver-gradle-plugin/semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitRefGitExtensions.kt' with '11' functions detected. Defined threshold inside files is set to '11' +``` +```kotlin +1 package com.javiersc.semver.project.gradle.plugin.internal.git +! ^ error +2 +3 import com.javiersc.semver.Version +4 import org.eclipse.jgit.api.Git + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:26:16 +``` +Class 'MultiProjectExampleTest' with '16' functions detected. Defined threshold inside classes is set to '11' +``` +```kotlin +23 * - `library-nine` uses no prefix +24 * - `library-ten` uses no prefix +25 */ +26 internal class MultiProjectExampleTest : GradleTestKitTest() { +!! ^ error +27 +28 @Test +29 fun `multi project`() { + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:12:16 +``` +Class 'OneProjectExampleTest' with '13' functions detected. Defined threshold inside classes is set to '11' +``` +```kotlin +9 import org.eclipse.jgit.api.Git +10 import org.gradle.testkit.runner.GradleRunner +11 +12 internal class OneProjectExampleTest : GradleTestKitTest() { +!! ^ error +13 +14 @Test +15 fun `one project`() { + +``` + +### exceptions, SwallowedException (1) + +The caught exception is swallowed. The original exception could be lost. + +[Documentation](https://detekt.dev/docs/rules/exceptions#swallowedexception) + +* semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/services/GitBuildService.kt:111:14 +``` +The caught exception is swallowed. The original exception could be lost. +``` +```kotlin +108 internal fun Git.hasCommits(): Boolean = +109 try { +110 commitsInCurrentBranchRevCommit.isNotEmpty() +111 } catch (exception: NoHeadException) { +!!! ^ error +112 false +113 } +114 + +``` + +### naming, FunctionNaming (47) + +Function names should follow the naming convention set in the configuration. + +[Documentation](https://detekt.dev/docs/rules/naming#functionnaming) + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GitHubVariablesTest.kt:41:9 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +38 } +39 +40 @Test +41 fun `setting GITHUB_ENV`() { +!! ^ error +42 gradleTestKitTest("github-variables") { +43 setEnvironmentVariables() +44 + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GitHubVariablesTest.kt:106:9 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +103 } +104 +105 @Test +106 fun `setting GITHUB_OUTPUT`() { +!!! ^ error +107 gradleTestKitTest("github-variables") { +108 setEnvironmentVariables() +109 + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt:14:9 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +11 class GradleFeaturesTest : GradleTestKitTest() { +12 +13 @Test +14 fun `android configuration cache clean v1_0_0`() { +!! ^ error +15 gradleTestKitTest("gradle-features/android configuration cache clean v1_0_0") { +16 beforeTest() +17 testConfigurationCache(expectTaskOutcome = TaskOutcome.SUCCESS) + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt:22:9 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +19 } +20 +21 @Test +22 fun `android build cache clean v1_0_0`() { +!! ^ error +23 gradleTestKitTest("gradle-features/android build cache clean v1_0_0") { +24 beforeTest() +25 testBuildCache() + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt:30:9 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +27 } +28 +29 @Test +30 fun `build cache clean v1_0_0`() { +!! ^ error +31 gradleTestKitTest("gradle-features/build cache clean v1_0_0") { +32 beforeTest() +33 testBuildCache() + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt:38:9 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +35 } +36 +37 @Test +38 fun `configuration cache clean v1_0_0`() { +!! ^ error +39 gradleTestKitTest("gradle-features/configuration cache clean v1_0_0") { +40 beforeTest() +41 testConfigurationCache(expectTaskOutcome = TaskOutcome.SUCCESS) + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt:46:9 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +43 } +44 +45 @Test +46 fun `project isolation clean v1_0_0`() { +!! ^ error +47 gradleTestKitTest("gradle-features/project isolation clean v1_0_0") { beforeTest() } +48 } +49 + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/MassiveTagsInSameCommitTest.kt:11:9 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +8 +9 @Test +10 @Suppress("ComplexMethod") +11 fun `massive tags in same commit`() { +!! ^ error +12 gradleTestKitTest("examples/one-project") { +13 Git.init().setDirectory(projectDir).call() +14 + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/PropertiesTest.kt:31:9 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +28 } +29 +30 @Test +31 fun `stage and scope`() { +!! ^ error +32 runPropertyTestsBasedOnResourceDirectory("stage+scope") +33 } +34 + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/PushSemverTagTaskTest.kt:18:9 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +15 class PushSemverTagTaskTest : GradleTestKitTest() { +16 +17 @Test +18 fun `push tag`() { +!! ^ error +19 gradleTestKitTest("push-tag") { +20 projectDir.generateInitialCommitAddVersionTagAndAddNewCommit() +21 + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/VersionBuildDirTest.kt:12:9 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +9 internal class VersionBuildDirTest : GradleTestKitTest() { +10 +11 @Test +12 fun `clean v1_0_0`() { +!! ^ error +13 gradleTestKitTest("version-build-dir/clean v1_0_0") { +14 projectDir.generateInitialCommitAddVersionTagAndAddNewCommit() +15 git.tag().setObjectId(git.headRevCommitInBranch).setName("v1.0.0").call() + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/VersionBuildDirTest.kt:24:9 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +21 } +22 +23 @Test +24 fun `clean v1_0_0 configuration phase`() { +!! ^ error +25 gradleTestKitTest("version-build-dir/clean v1_0_0 configuration phase") { +26 projectDir.generateInitialCommitAddVersionTagAndAddNewCommit() +27 git.tag().setObjectId(git.headRevCommitInBranch).setName("v1.0.0").call() + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/VersionBuildDirTest.kt:38:9 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +35 } +36 +37 @Test +38 fun `clean without tag in current commit - hash`() { +!! ^ error +39 gradleTestKitTest("version-build-dir/clean-with-no-tag-current-commit (hash)") { +40 projectDir.generateInitialCommitAddVersionTagAndAddNewCommit() +41 + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/VersionBuildDirTest.kt:49:9 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +46 } +47 +48 @Test +49 fun `no clean without tag in current commit - dirty`() { +!! ^ error +50 gradleTestKitTest("version-build-dir/no-clean-with-no-tag-current-commit (dirty)") { +51 projectDir.generateInitialCommitAddVersionTagAndAddNewCommit() +52 projectDir.resolve("new-2.txt").createNewFile() + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/VersionBuildDirTest.kt:73:9 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +70 } +71 +72 @Test +73 fun `no clean createSemverTag should fail`() { +!! ^ error +74 gradleTestKitTest("version-build-dir/no-clean-with-no-tag-current-commit (dirty)") { +75 projectDir.generateInitialCommitAddVersionTagAndAddNewCommit() +76 projectDir.resolve("new-2.txt").createNewFile() + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:29:9 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +26 internal class MultiProjectExampleTest : GradleTestKitTest() { +27 +28 @Test +29 fun `multi project`() { +!! ^ error +30 gradleTestKitTest("examples/multi-project") { +31 `0_ Initial repo state`() +32 `1_ Run gradlew assemble`() + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:49:30 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +46 } +47 } +48 +49 private fun GradleRunner.`0_ Initial repo state`() { +!! ^ error +50 Git.init().setDirectory(projectDir).call() +51 projectDir.createGitIgnore() +52 git.add().addFilepattern(".").call() + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:68:30 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +65 git.add().addFilepattern(".").call() +66 } +67 +68 private fun GradleRunner.`1_ Run gradlew assemble`() { +!! ^ error +69 gradlew("assemble") +70 +71 projectDirByName("library-one-a").assertVersion("a", "1.0.0", Insignificant.Dirty) + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:83:30 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +80 projectDirByName("library-ten").assertVersion("", "1.0.0", Insignificant.Dirty) +81 } +82 +83 private fun GradleRunner.`2_ Create a new file in library-one-a and run gradlew assemble`() { +!! ^ error +84 projectDirByName("library-one-a").resolve("new2.txt").createNewFile() +85 +86 gradlew("assemble") + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:101:10 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +98 } +99 +100 private fun GradleRunner +101 .`3_ Add the new file to git and commit it, then run gradlew createSemverTag with tagPrefix=a`() { +!!! ^ error +102 git.add().addFilepattern(".").call() +103 git.commit().setMessage("Add new2 to library-one-a").call() +104 + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:119:30 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +116 projectDirByName("library-ten").assertVersion("", "1.0.0", Insignificant.Hash) +117 } +118 +119 private fun GradleRunner.`4_ Run gradlew assemble`() { +!!! ^ error +120 gradlew("assemble") +121 +122 projectDirByName("library-one-a").assertVersion("a", "1.0.1") + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:135:10 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +132 } +133 +134 private fun GradleRunner +135 .`5_ Create, add and commit a new file in library-one-a, then run gradlew assemble`() { +!!! ^ error +136 projectDirByName("library-one-a").resolve("new5.txt").createNewFile() +137 git.add().addFilepattern(".").call() +138 git.commit().setMessage("Add new5 to library-one-a").call() + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:154:30 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +151 projectDirByName("library-ten").assertVersion("", "1.0.0", Insignificant.Hash) +152 } +153 +154 private fun GradleRunner.`6_ Run gradlew createSemverTag tagPrefix=a`() { +!!! ^ error +155 gradlew("createSemverTag", "-Psemver.tagPrefix=a") +156 +157 projectDirByName("library-one-a").assertVersion("a", "1.0.2") + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:170:10 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +167 } +168 +169 private fun GradleRunner +170 .`7_ Create, add to git and commit a new file in library-one-a, then run gradlew createSemverTag stage=alpha tagPrefix=a`() { +!!! ^ error +171 projectDirByName("library-one-a").resolve("new7.txt").createNewFile() +172 git.add().addFilepattern(".").call() +173 git.commit().setMessage("Add new7 to library-one-a").call() + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:189:30 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +186 projectDirByName("library-ten").assertVersion("", "1.0.0", Insignificant.Hash) +187 } +188 +189 private fun GradleRunner.`8_ Run gradlew createSemverTag stage=beta tagPrefix=a`() { +!!! ^ error +190 gradlew("createSemverTag", "-Psemver.stage=beta", "-Psemver.tagPrefix=a") +191 +192 projectDirByName("library-one-a").assertVersion("a", "1.0.3-beta.1") + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:205:10 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +202 } +203 +204 private fun GradleRunner +205 .`9_ Create, add to git and commit a new file in library-one-a, then run gradlew createSemverTag stage=final tagPrefix=a`() { +!!! ^ error +206 projectDirByName("library-one-a").resolve("new9.txt").createNewFile() +207 git.add().addFilepattern(".").call() +208 git.commit().setMessage("Add new9 to library-one-a").call() + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:225:10 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +222 } +223 +224 private fun GradleRunner +225 .`10_ Run gradlew createSemverTag stage=final scope=major tagPrefix=a`() { +!!! ^ error +226 gradlew( +227 "createSemverTag", +228 "-Psemver.stage=final", + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:245:30 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +242 projectDirByName("library-ten").assertVersion("", "1.0.0", Insignificant.Hash) +243 } +244 +245 private fun GradleRunner.`11_ Run gradlew printSemver stage=snapshot tagPrefix=a`() { +!!! ^ error +246 gradlew("printSemver", "-Psemver.stage=snapshot", "-Psemver.tagPrefix=a") +247 +248 projectDirByName("library-one-a").assertVersion("a", "2.0.1-SNAPSHOT") + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:260:30 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +257 projectDirByName("library-ten").assertVersion("", "1.0.0", Insignificant.Hash) +258 } +259 +260 private fun GradleRunner.`12_ Run gradlew createSemverTag scope=minor tagPrefix=b`() { +!!! ^ error +261 gradlew("createSemverTag", "-Psemver.scope=minor", "-Psemver.tagPrefix=b") +262 +263 projectDirByName("library-one-a").assertVersion("a", "2.0.0") + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:275:30 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +272 projectDirByName("library-ten").assertVersion("", "1.0.0", Insignificant.Hash) +273 } +274 +275 private fun GradleRunner.`13_ Run gradlew createSemverTag stage=rc tagPrefix=c`() { +!!! ^ error +276 gradlew("createSemverTag", "-Psemver.stage=rc", "-Psemver.tagPrefix=c") +277 +278 projectDirByName("library-one-a").assertVersion("a", "2.0.0") + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:290:30 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +287 projectDirByName("library-ten").assertVersion("", "1.0.0", Insignificant.Hash) +288 } +289 +290 private fun GradleRunner.`14_ Run gradlew createSemverTag stage=dev`() { +!!! ^ error +291 gradlew("createSemverTag", "-Psemver.stage=dev") +292 +293 projectDirByName("library-one-a").assertVersion("a", "2.0.0") + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:15:9 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +12 internal class OneProjectExampleTest : GradleTestKitTest() { +13 +14 @Test +15 fun `one project`() { +!! ^ error +16 gradleTestKitTest("examples/one-project") { +17 `0_ Initial repo state`() +18 `1_ Run gradlew assemble`() + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:32:30 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +29 } +30 } +31 +32 private fun GradleRunner.`0_ Initial repo state`() { +!! ^ error +33 Git.init().setDirectory(projectDir).call() +34 projectDir.createGitIgnore() +35 git.add().addFilepattern(".").call() + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:48:30 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +45 git.commit().setMessage("Add plugin").call() +46 } +47 +48 private fun GradleRunner.`1_ Run gradlew assemble`() { +!! ^ error +49 gradlew("assemble", "-Psemver.tagPrefix=v") +50 +51 projectDir.assertVersion("v", "0.1.0", Insignificant.Hash) + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:54:30 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +51 projectDir.assertVersion("v", "0.1.0", Insignificant.Hash) +52 } +53 +54 private fun GradleRunner.`2_ Create a new file and run gradlew assemble`() { +!! ^ error +55 projectDir.resolve("new2.txt").createNewFile() +56 +57 gradlew("assemble", "-Psemver.tagPrefix=v") + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:63:10 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +60 } +61 +62 private fun GradleRunner +63 .`3_ Add the new file to git, commit it, and run gradlew createSemverTag`() { +!! ^ error +64 git.add().addFilepattern(".").call() +65 git.commit().setMessage("Add new2").call() +66 + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:72:30 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +69 projectDir.assertVersion("v", "0.1.0") +70 } +71 +72 private fun GradleRunner.`4_ Run gradlew assemble`() { +!! ^ error +73 gradlew("assemble", "-Psemver.tagPrefix=v") +74 +75 projectDir.assertVersion("v", "0.1.0") + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:78:30 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +75 projectDir.assertVersion("v", "0.1.0") +76 } +77 +78 private fun GradleRunner.`5_ Create and add new file and run`() { +!! ^ error +79 projectDir.resolve("new5.txt").createNewFile() +80 git.add().addFilepattern(".").call() +81 git.commit().setMessage("Add new5").call() + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:87:30 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +84 projectDir.assertVersion("v", "0.1.0", Insignificant.Hash) +85 } +86 +87 private fun GradleRunner.`6_ Run gradlew createSemverTag`() { +!! ^ error +88 gradlew("createSemverTag", "-Psemver.tagPrefix=v") +89 +90 projectDir.assertVersion("v", "0.1.1") + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:94:10 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +91 } +92 +93 private fun GradleRunner +94 .`7_ Create and add to git a new file, then run gradlew createSemverTag stage=alpha`() { +!! ^ error +95 projectDir.resolve("new7.txt").createNewFile() +96 git.add().addFilepattern(".").call() +97 git.commit().setMessage("Add new7").call() + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:103:30 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +100 projectDir.assertVersion("v", "0.1.2-alpha.1") +101 } +102 +103 private fun GradleRunner.`8_ Run gradlew createSemverTag stage=beta`() { +!!! ^ error +104 gradlew("createSemverTag", "-Psemver.stage=beta", "-Psemver.tagPrefix=v") +105 +106 projectDir.assertVersion("v", "0.1.2-beta.1") + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:109:30 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +106 projectDir.assertVersion("v", "0.1.2-beta.1") +107 } +108 +109 private fun GradleRunner.`9_ Run gradlew createSemverTag stage=final`() { +!!! ^ error +110 gradlew("createSemverTag", "-Psemver.stage=final", "-Psemver.tagPrefix=v") +111 +112 projectDir.assertVersion("v", "0.1.2") + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:115:30 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +112 projectDir.assertVersion("v", "0.1.2") +113 } +114 +115 private fun GradleRunner.`10_ Run gradlew createSemverTag stage=final scope=major`() { +!!! ^ error +116 gradlew( +117 "createSemverTag", +118 "-Psemver.stage=final", + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:126:30 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +123 projectDir.assertVersion("v", "1.0.0") +124 } +125 +126 private fun GradleRunner.`11_ Run gradlew createSemverTag stage=snapshot`() { +!!! ^ error +127 gradlew("createSemverTag", "-Psemver.stage=snapshot", "-Psemver.tagPrefix=v") +128 +129 projectDir.assertVersion("v", "1.0.1-SNAPSHOT") + +``` + +* semver-project-gradle-plugin/testIntegration/kotlin/com/javiersc/semver/project/gradle/plugin/SemverIntegrationTest.kt:20:9 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +17 class SemverIntegrationTest : GradleProjectTest() { +18 +19 @Test +20 fun `given a project which has no git when it builds then it only register semver extension`() { +!! ^ error +21 gradleProjectTest { +22 pluginManager.apply(SemverProjectPlugin::class) +23 extensions.findByName("semver").shouldNotBeNull() + +``` + +* semver-project-gradle-plugin/testIntegration/kotlin/com/javiersc/semver/project/gradle/plugin/SemverIntegrationTest.kt:30:9 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +27 } +28 +29 @Test +30 fun `given a project which has commits when it builds then it register semver extension`() { +!! ^ error +31 val beforeCommitTimestamp: Instant = Instant.now() +32 gradleProjectTest { +33 projectDir.resolve("last-tag.txt").apply { + +``` + +* semver-settings-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/settings/gradle/plugin/MultiProjectTest.kt:11:9 +``` +Function names should match the pattern: [a-z][a-zA-Z0-9]* +``` +```kotlin +8 internal class MultiProjectTest : GradleTestKitTest() { +9 +10 @Test +11 fun `multi project test`() { +!! ^ error +12 gradleTestKitTest("multi-project") { +13 val git = Git.init().setDirectory(projectDir).call() +14 git.add().addFilepattern(".").call() + +``` + +### naming, TopLevelPropertyNaming (1) + +Top level property names should follow the naming convention set in the projects configuration. + +[Documentation](https://detekt.dev/docs/rules/naming#toplevelpropertynaming) + +* semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/SemverProperty.kt:7:20 +``` +Top level constant names should match the pattern: [A-Z][_A-Z0-9]* +``` +```kotlin +4 import org.gradle.api.Project +5 import org.gradle.api.provider.Provider +6 +7 internal const val DefaultTagPrefix = "" +! ^ error +8 +9 internal val Project.projectTagPrefixProperty: Provider +10 get() = getSemverProperty(SemverProperty.ProjectTagPrefix) + +``` + +### naming, VariableNaming (2) + +Variable names should follow the naming convention set in the projects configuration. + +[Documentation](https://detekt.dev/docs/rules/naming#variablenaming) + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt:84:13 +``` +Variable names should match the pattern: [a-z][A-Za-z0-9]* +``` +```kotlin +81 build() +82 projectDir.assertVersion("v", "0.9.0", Hash) +83 +84 val LAST_0_9_0_HASH_1 = projectDir.resolve("build/semver/version.txt").readLines()[1] +!! ^ error +85 projectDir +86 .resolve("expect-version.txt") +87 .writeText( + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt:100:13 +``` +Variable names should match the pattern: [a-z][A-Za-z0-9]* +``` +```kotlin +97 git.commit().setMessage("Change expect-version again").call() +98 +99 build() +100 val LAST_0_9_0_HASH_2 = projectDir.resolve("build/semver/version.txt").readLines()[1] +!!! ^ error +101 +102 LAST_0_9_0_HASH_1.shouldNotBe(LAST_0_9_0_HASH_2) +103 + +``` + +### style, ForbiddenComment (1) + +Flags a forbidden comment. + +[Documentation](https://detekt.dev/docs/rules/style#forbiddencomment) + +* semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt:215:13 +``` +This comment contains 'TODO:' that has been defined as forbidden in detekt. +``` +```kotlin +212 +213 internal operator fun invoke(gitDir: File, maxCount: Provider? = null): GitCache { +214 // val cache: GitCache? = gitCache +215 // TODO: improve in-memory cache as `cache.shouldRefresh()` is flaky +!!! ^ error +216 // if (cache == null || cache.shouldRefresh() || true) { +217 gitCache = GitCache(gitDir, maxCount) +218 // } + +``` + +### style, MaxLineLength (4) + +Line detected, which is longer than the defined maximum line length in the code style. + +[Documentation](https://detekt.dev/docs/rules/style#maxlinelength) + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:38:13 +``` +Line detected, which is longer than the defined maximum line length in the code style. +``` +```kotlin +35 `4_ Run gradlew assemble`() +36 `5_ Create, add and commit a new file in library-one-a, then run gradlew assemble`() +37 `6_ Run gradlew createSemverTag tagPrefix=a`() +38 `7_ Create, add to git and commit a new file in library-one-a, then run gradlew createSemverTag stage=alpha tagPrefix=a`() +!! ^ error +39 `8_ Run gradlew createSemverTag stage=beta tagPrefix=a`() +40 `9_ Create, add to git and commit a new file in library-one-a, then run gradlew createSemverTag stage=final tagPrefix=a`() +41 `10_ Run gradlew createSemverTag stage=final scope=major tagPrefix=a`() + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:40:13 +``` +Line detected, which is longer than the defined maximum line length in the code style. +``` +```kotlin +37 `6_ Run gradlew createSemverTag tagPrefix=a`() +38 `7_ Create, add to git and commit a new file in library-one-a, then run gradlew createSemverTag stage=alpha tagPrefix=a`() +39 `8_ Run gradlew createSemverTag stage=beta tagPrefix=a`() +40 `9_ Create, add to git and commit a new file in library-one-a, then run gradlew createSemverTag stage=final tagPrefix=a`() +!! ^ error +41 `10_ Run gradlew createSemverTag stage=final scope=major tagPrefix=a`() +42 `11_ Run gradlew printSemver stage=snapshot tagPrefix=a`() +43 `12_ Run gradlew createSemverTag scope=minor tagPrefix=b`() + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:170:9 +``` +Line detected, which is longer than the defined maximum line length in the code style. +``` +```kotlin +167 } +168 +169 private fun GradleRunner +170 .`7_ Create, add to git and commit a new file in library-one-a, then run gradlew createSemverTag stage=alpha tagPrefix=a`() { +!!! ^ error +171 projectDirByName("library-one-a").resolve("new7.txt").createNewFile() +172 git.add().addFilepattern(".").call() +173 git.commit().setMessage("Add new7 to library-one-a").call() + +``` + +* semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:205:9 +``` +Line detected, which is longer than the defined maximum line length in the code style. +``` +```kotlin +202 } +203 +204 private fun GradleRunner +205 .`9_ Create, add to git and commit a new file in library-one-a, then run gradlew createSemverTag stage=final tagPrefix=a`() { +!!! ^ error +206 projectDirByName("library-one-a").resolve("new9.txt").createNewFile() +207 git.add().addFilepattern(".").call() +208 git.commit().setMessage("Add new9 to library-one-a").call() + +``` + +generated with [detekt version 1.22.0](https://detekt.dev/) on 2023-03-11 14:03:51 UTC diff --git a/reports-generated/code-analysis/detekt.sarif b/reports-generated/code-analysis/detekt.sarif new file mode 100644 index 00000000..de5ae5d8 --- /dev/null +++ b/reports-generated/code-analysis/detekt.sarif @@ -0,0 +1,3287 @@ +{ + "$schema": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json", + "version": "2.1.0", + "runs": [ + { + "originalUriBaseIds": { + "%SRCROOT%": { + "uri": "file:///home/runner/work/semver-gradle-plugin/semver-gradle-plugin/" + } + }, + "results": [ + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/test/kotlin/com/javiersc/semver/project/gradle/plugin/GitTagTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 41, + "endLine": 492, + "startColumn": 9, + "startLine": 492 + } + } + } + ], + "message": { + "text": "The function version tags in current branch is too long (85). The maximum length is 60." + }, + "ruleId": "detekt.complexity.LongMethod" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/test/kotlin/com/javiersc/semver/project/gradle/plugin/GitTagTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 45, + "endLine": 976, + "startColumn": 9, + "startLine": 976 + } + } + } + ], + "message": { + "text": "The function last version tag in current branch is too long (71). The maximum length is 60." + }, + "ruleId": "detekt.complexity.LongMethod" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/test/kotlin/com/javiersc/semver/project/gradle/plugin/GitTagTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 40, + "endLine": 587, + "startColumn": 9, + "startLine": 587 + } + } + } + ], + "message": { + "text": "The function version tags sorted by semver is too long (85). The maximum length is 60." + }, + "ruleId": "detekt.complexity.LongMethod" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/test/kotlin/com/javiersc/semver/project/gradle/plugin/GitTagTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 54, + "endLine": 685, + "startColumn": 9, + "startLine": 685 + } + } + } + ], + "message": { + "text": "The function version tags sorted by timeline or semver 1 is too long (89). The maximum length is 60." + }, + "ruleId": "detekt.complexity.LongMethod" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/test/kotlin/com/javiersc/semver/project/gradle/plugin/GitTagTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 54, + "endLine": 787, + "startColumn": 9, + "startLine": 787 + } + } + } + ], + "message": { + "text": "The function version tags sorted by timeline or semver 2 is too long (169). The maximum length is 60." + }, + "ruleId": "detekt.complexity.LongMethod" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/test/kotlin/com/javiersc/semver/project/gradle/plugin/GitTagTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 26, + "endLine": 27, + "startColumn": 16, + "startLine": 27 + } + } + } + ], + "message": { + "text": "Class GitTagTest is too large. Consider splitting it into smaller pieces." + }, + "ruleId": "detekt.complexity.LargeClass" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 24, + "endLine": 26, + "startColumn": 16, + "startLine": 26 + } + } + } + ], + "message": { + "text": "Class 'GitCache' with '13' functions detected. Defined threshold inside classes is set to '11'" + }, + "ruleId": "detekt.complexity.TooManyFunctions" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitRefGitExtensions.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 63, + "endLine": 1, + "startColumn": 1, + "startLine": 1 + } + } + } + ], + "message": { + "text": "File '/home/runner/work/semver-gradle-plugin/semver-gradle-plugin/semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitRefGitExtensions.kt' with '11' functions detected. Defined threshold inside files is set to '11'" + }, + "ruleId": "detekt.complexity.TooManyFunctions" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/CalculatedVersion.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 2, + "endLine": 24, + "startColumn": 31, + "startLine": 8 + } + } + } + ], + "message": { + "text": "The function calculatedVersion(stageProperty: String?, scopeProperty: String?, isCreatingSemverTag: Boolean, lastSemverMajorInCurrentBranch: Int, lastSemverMinorInCurrentBranch: Int, lastSemverPatchInCurrentBranch: Int, lastSemverStageInCurrentBranch: String?, lastSemverNumInCurrentBranch: Int?, versionTagsInCurrentBranch: List, clean: Boolean, checkClean: Boolean, lastCommitInCurrentBranch: String?, commitsInCurrentBranch: List, headCommit: String, lastVersionCommitInCurrentBranch: String?) has too many parameters. The current threshold is set to 6." + }, + "ruleId": "detekt.complexity.LongParameterList" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/CalculatedVersion.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 2, + "endLine": 126, + "startColumn": 44, + "startLine": 118 + } + } + } + ], + "message": { + "text": "The function calculateAdditionalVersionData(clean: Boolean, checkClean: Boolean, lastCommitInCurrentBranch: String?, commitsInCurrentBranch: List, isThereVersionTags: Boolean, headCommit: String, lastVersionCommitInCurrentBranch: String?) has too many parameters. The current threshold is set to 6." + }, + "ruleId": "detekt.complexity.LongParameterList" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/CalculatedVersion.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 31, + "endLine": 8, + "startColumn": 14, + "startLine": 8 + } + } + } + ], + "message": { + "text": "The function calculatedVersion is too long (85). The maximum length is 60." + }, + "ruleId": "detekt.complexity.LongMethod" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/MassiveTagsInSameCommitTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 38, + "endLine": 11, + "startColumn": 9, + "startLine": 11 + } + } + } + ], + "message": { + "text": "The function massive tags in same commit is too long (67). The maximum length is 60." + }, + "ruleId": "detekt.complexity.LongMethod" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 37, + "endLine": 12, + "startColumn": 16, + "startLine": 12 + } + } + } + ], + "message": { + "text": "Class 'OneProjectExampleTest' with '13' functions detected. Defined threshold inside classes is set to '11'" + }, + "ruleId": "detekt.complexity.TooManyFunctions" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 39, + "endLine": 26, + "startColumn": 16, + "startLine": 26 + } + } + } + ], + "message": { + "text": "Class 'MultiProjectExampleTest' with '16' functions detected. Defined threshold inside classes is set to '11'" + }, + "ruleId": "detekt.complexity.TooManyFunctions" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/TagsOrderTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 15, + "endLine": 11, + "startColumn": 9, + "startLine": 11 + } + } + } + ], + "message": { + "text": "The function random is too long (63). The maximum length is 60." + }, + "ruleId": "detekt.complexity.LongMethod" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/services/GitBuildService.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 40, + "endLine": 111, + "startColumn": 14, + "startLine": 111 + } + } + } + ], + "message": { + "text": "The caught exception is swallowed. The original exception could be lost." + }, + "ruleId": "detekt.exceptions.SwallowedException" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/SemverProperty.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 36, + "endLine": 7, + "startColumn": 20, + "startLine": 7 + } + } + } + ], + "message": { + "text": "Top level constant names should match the pattern: [A-Z][_A-Z0-9]*" + }, + "ruleId": "detekt.naming.TopLevelPropertyNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/MassiveTagsInSameCommitTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 38, + "endLine": 11, + "startColumn": 9, + "startLine": 11 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GitHubVariablesTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 29, + "endLine": 41, + "startColumn": 9, + "startLine": 41 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GitHubVariablesTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 32, + "endLine": 106, + "startColumn": 9, + "startLine": 106 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/VersionBuildDirTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 23, + "endLine": 12, + "startColumn": 9, + "startLine": 12 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/VersionBuildDirTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 43, + "endLine": 24, + "startColumn": 9, + "startLine": 24 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/VersionBuildDirTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 53, + "endLine": 38, + "startColumn": 9, + "startLine": 38 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/VersionBuildDirTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 57, + "endLine": 49, + "startColumn": 9, + "startLine": 49 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/VersionBuildDirTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 47, + "endLine": 73, + "startColumn": 9, + "startLine": 73 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/PushSemverTagTaskTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 19, + "endLine": 18, + "startColumn": 9, + "startLine": 18 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/PropertiesTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 26, + "endLine": 31, + "startColumn": 9, + "startLine": 31 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 51, + "endLine": 14, + "startColumn": 9, + "startLine": 14 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 43, + "endLine": 22, + "startColumn": 9, + "startLine": 22 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 35, + "endLine": 30, + "startColumn": 9, + "startLine": 30 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 43, + "endLine": 38, + "startColumn": 9, + "startLine": 38 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 41, + "endLine": 46, + "startColumn": 9, + "startLine": 46 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 30, + "endLine": 84, + "startColumn": 13, + "startLine": 84 + } + } + } + ], + "message": { + "text": "Variable names should match the pattern: [a-z][A-Za-z0-9]*" + }, + "ruleId": "detekt.naming.VariableNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 30, + "endLine": 100, + "startColumn": 13, + "startLine": 100 + } + } + } + ], + "message": { + "text": "Variable names should match the pattern: [a-z][A-Za-z0-9]*" + }, + "ruleId": "detekt.naming.VariableNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 22, + "endLine": 15, + "startColumn": 9, + "startLine": 15 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 53, + "endLine": 32, + "startColumn": 30, + "startLine": 32 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 55, + "endLine": 48, + "startColumn": 30, + "startLine": 48 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 77, + "endLine": 54, + "startColumn": 30, + "startLine": 54 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 82, + "endLine": 63, + "startColumn": 10, + "startLine": 63 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 55, + "endLine": 72, + "startColumn": 30, + "startLine": 72 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 66, + "endLine": 78, + "startColumn": 30, + "startLine": 78 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 62, + "endLine": 87, + "startColumn": 30, + "startLine": 87 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 93, + "endLine": 94, + "startColumn": 10, + "startLine": 94 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 73, + "endLine": 103, + "startColumn": 30, + "startLine": 103 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 74, + "endLine": 109, + "startColumn": 30, + "startLine": 109 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 87, + "endLine": 115, + "startColumn": 30, + "startLine": 115 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 78, + "endLine": 126, + "startColumn": 30, + "startLine": 126 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 24, + "endLine": 29, + "startColumn": 9, + "startLine": 29 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 53, + "endLine": 49, + "startColumn": 30, + "startLine": 49 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 55, + "endLine": 68, + "startColumn": 30, + "startLine": 68 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 94, + "endLine": 83, + "startColumn": 30, + "startLine": 83 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 103, + "endLine": 101, + "startColumn": 10, + "startLine": 101 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 55, + "endLine": 119, + "startColumn": 30, + "startLine": 119 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 92, + "endLine": 135, + "startColumn": 10, + "startLine": 135 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 74, + "endLine": 154, + "startColumn": 30, + "startLine": 154 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 130, + "endLine": 170, + "startColumn": 10, + "startLine": 170 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 85, + "endLine": 189, + "startColumn": 30, + "startLine": 189 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 130, + "endLine": 205, + "startColumn": 10, + "startLine": 205 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 79, + "endLine": 225, + "startColumn": 10, + "startLine": 225 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 86, + "endLine": 245, + "startColumn": 30, + "startLine": 245 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 87, + "endLine": 260, + "startColumn": 30, + "startLine": 260 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 84, + "endLine": 275, + "startColumn": 30, + "startLine": 275 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 73, + "endLine": 290, + "startColumn": 30, + "startLine": 290 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testIntegration/kotlin/com/javiersc/semver/project/gradle/plugin/SemverIntegrationTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 97, + "endLine": 20, + "startColumn": 9, + "startLine": 20 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testIntegration/kotlin/com/javiersc/semver/project/gradle/plugin/SemverIntegrationTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 93, + "endLine": 30, + "startColumn": 9, + "startLine": 30 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-settings-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/settings/gradle/plugin/MultiProjectTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 29, + "endLine": 11, + "startColumn": 9, + "startLine": 11 + } + } + } + ], + "message": { + "text": "Function names should match the pattern: [a-z][a-zA-Z0-9]*" + }, + "ruleId": "detekt.naming.FunctionNaming" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 81, + "endLine": 215, + "startColumn": 13, + "startLine": 215 + } + } + } + ], + "message": { + "text": "This comment contains 'TODO:' that has been defined as forbidden in detekt." + }, + "ruleId": "detekt.style.ForbiddenComment" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 135, + "endLine": 38, + "startColumn": 13, + "startLine": 38 + } + } + } + ], + "message": { + "text": "Line detected, which is longer than the defined maximum line length in the code style." + }, + "ruleId": "detekt.style.MaxLineLength" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 135, + "endLine": 40, + "startColumn": 13, + "startLine": 40 + } + } + } + ], + "message": { + "text": "Line detected, which is longer than the defined maximum line length in the code style." + }, + "ruleId": "detekt.style.MaxLineLength" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 10, + "endLine": 170, + "startColumn": 9, + "startLine": 170 + } + } + } + ], + "message": { + "text": "Line detected, which is longer than the defined maximum line length in the code style." + }, + "ruleId": "detekt.style.MaxLineLength" + }, + { + "level": "warning", + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt", + "uriBaseId": "%SRCROOT%" + }, + "region": { + "endColumn": 10, + "endLine": 205, + "startColumn": 9, + "startLine": 205 + } + } + } + ], + "message": { + "text": "Line detected, which is longer than the defined maximum line length in the code style." + }, + "ruleId": "detekt.style.MaxLineLength" + } + ], + "tool": { + "driver": { + "downloadUri": "https://github.com/detekt/detekt/releases/download/v1.22.0/detekt", + "fullName": "detekt", + "guid": "022ca8c2-f6a2-4c95-b107-bb72c43263f3", + "informationUri": "https://detekt.dev", + "language": "en", + "name": "detekt", + "organization": "detekt", + "rules": [ + { + "helpUri": "https://detekt.dev/potential-bugs.html#avoidreferentialequality", + "id": "detekt.potential-bugs.AvoidReferentialEquality", + "name": "AvoidReferentialEquality", + "shortDescription": { + "text": "Avoid using referential equality and prefer to use referential equality checks instead." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#deprecation", + "id": "detekt.potential-bugs.Deprecation", + "name": "Deprecation", + "shortDescription": { + "text": "Deprecated elements should not be used." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#dontdowncastcollectiontypes", + "id": "detekt.potential-bugs.DontDowncastCollectionTypes", + "name": "DontDowncastCollectionTypes", + "shortDescription": { + "text": "Down-casting immutable collection types is breaking the collection contract." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#doublemutabilityforcollection", + "id": "detekt.potential-bugs.DoubleMutabilityForCollection", + "name": "DoubleMutabilityForCollection", + "shortDescription": { + "text": "Using var with mutable collections or values leads to double mutability. Consider using val or immutable collection or value types." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#duplicatecaseinwhenexpression", + "id": "detekt.potential-bugs.DuplicateCaseInWhenExpression", + "name": "DuplicateCaseInWhenExpression", + "shortDescription": { + "text": "Duplicated `case` statements in a `when` expression detected. Both cases should be merged." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#elsecaseinsteadofexhaustivewhen", + "id": "detekt.potential-bugs.ElseCaseInsteadOfExhaustiveWhen", + "name": "ElseCaseInsteadOfExhaustiveWhen", + "shortDescription": { + "text": "A `when` expression that has an exhaustive set of cases should not contain an `else` case." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#equalsalwaysreturnstrueorfalse", + "id": "detekt.potential-bugs.EqualsAlwaysReturnsTrueOrFalse", + "name": "EqualsAlwaysReturnsTrueOrFalse", + "shortDescription": { + "text": "Having an `equals()` method that always returns true or false is not a good idea. It does not follow the contract of this method. Consider a good default implementation (e.g. `this == other`)." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#equalswithhashcodeexist", + "id": "detekt.potential-bugs.EqualsWithHashCodeExist", + "name": "EqualsWithHashCodeExist", + "shortDescription": { + "text": "Always override hashCode when you override equals. All hash-based collections depend on objects meeting the equals-contract. Two equal objects must produce the same hashcode. When inheriting equals or hashcode, override the inherited and call the super method for clarification." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#exitoutsidemain", + "id": "detekt.potential-bugs.ExitOutsideMain", + "name": "ExitOutsideMain", + "shortDescription": { + "text": "Do not directly exit the process outside the `main` function. Throw an exception instead." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#explicitgarbagecollectioncall", + "id": "detekt.potential-bugs.ExplicitGarbageCollectionCall", + "name": "ExplicitGarbageCollectionCall", + "shortDescription": { + "text": "Don't try to be smarter than the JVM. Your code should work independently whether the garbage collector is disabled or not. If you face memory issues, try tuning the JVM options instead of relying on code itself." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#hasplatformtype", + "id": "detekt.potential-bugs.HasPlatformType", + "name": "HasPlatformType", + "shortDescription": { + "text": "Platform types must be declared explicitly in public APIs." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#implicitdefaultlocale", + "id": "detekt.potential-bugs.ImplicitDefaultLocale", + "name": "ImplicitDefaultLocale", + "shortDescription": { + "text": "Implicit default locale used for string processing. Consider using explicit locale." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#invalidrange", + "id": "detekt.potential-bugs.InvalidRange", + "name": "InvalidRange", + "shortDescription": { + "text": "If a for loops condition is false before the first iteration, the loop will never get executed." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#iteratorhasnextcallsnextmethod", + "id": "detekt.potential-bugs.IteratorHasNextCallsNextMethod", + "name": "IteratorHasNextCallsNextMethod", + "shortDescription": { + "text": "The `hasNext()` method of an Iterator implementation should not call the `next()` method. The state of the iterator should not be changed inside the `hasNext()` method. The `hasNext()` method is not supposed to have any side effects." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#iteratornotthrowingnosuchelementexception", + "id": "detekt.potential-bugs.IteratorNotThrowingNoSuchElementException", + "name": "IteratorNotThrowingNoSuchElementException", + "shortDescription": { + "text": "The `next()` method of an `Iterator` implementation should throw a `NoSuchElementException` when there are no more elements to return." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#lateinitusage", + "id": "detekt.potential-bugs.LateinitUsage", + "name": "LateinitUsage", + "shortDescription": { + "text": "Usage of `lateinit` detected. Using `lateinit` for property initialization is error prone, try using constructor injection or delegation." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#mapgetwithnotnullassertionoperator", + "id": "detekt.potential-bugs.MapGetWithNotNullAssertionOperator", + "name": "MapGetWithNotNullAssertionOperator", + "shortDescription": { + "text": "map.get() with not-null assertion operator (!!) can result in a NullPointerException. Consider usage of map.getValue(), map.getOrDefault() or map.getOrElse() instead." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#missingpackagedeclaration", + "id": "detekt.potential-bugs.MissingPackageDeclaration", + "name": "MissingPackageDeclaration", + "shortDescription": { + "text": "Kotlin source files should define a package." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#missingwhencase", + "id": "detekt.potential-bugs.MissingWhenCase", + "name": "MissingWhenCase", + "shortDescription": { + "text": "Check usage of `when` used as a statement and don't compare all enum or sealed class cases." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#nullcheckonmutableproperty", + "id": "detekt.potential-bugs.NullCheckOnMutableProperty", + "name": "NullCheckOnMutableProperty", + "shortDescription": { + "text": "Checking nullability on a mutable property is not useful because the property may be set to null afterwards." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#redundantelseinwhen", + "id": "detekt.potential-bugs.RedundantElseInWhen", + "name": "RedundantElseInWhen", + "shortDescription": { + "text": "Check for redundant `else` case in `when` expression when used as statement." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#unconditionaljumpstatementinloop", + "id": "detekt.potential-bugs.UnconditionalJumpStatementInLoop", + "name": "UnconditionalJumpStatementInLoop", + "shortDescription": { + "text": "An unconditional jump statement in a loop is useless. The loop itself is only executed once." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#unnecessarynotnulloperator", + "id": "detekt.potential-bugs.UnnecessaryNotNullOperator", + "name": "UnnecessaryNotNullOperator", + "shortDescription": { + "text": "Unnecessary not-null unary operator (!!) detected." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#unnecessarynotnullcheck", + "id": "detekt.potential-bugs.UnnecessaryNotNullCheck", + "name": "UnnecessaryNotNullCheck", + "shortDescription": { + "text": "Remove unnecessary not-null checks on non-null types." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#unnecessarysafecall", + "id": "detekt.potential-bugs.UnnecessarySafeCall", + "name": "UnnecessarySafeCall", + "shortDescription": { + "text": "Unnecessary safe call operator detected." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#unreachablecode", + "id": "detekt.potential-bugs.UnreachableCode", + "name": "UnreachableCode", + "shortDescription": { + "text": "Unreachable code detected. This code should be removed." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#unsafecallonnullabletype", + "id": "detekt.potential-bugs.UnsafeCallOnNullableType", + "name": "UnsafeCallOnNullableType", + "shortDescription": { + "text": "Unsafe calls on nullable types detected. These calls will throw a NullPointerException in case the nullable value is null." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#unsafecast", + "id": "detekt.potential-bugs.UnsafeCast", + "name": "UnsafeCast", + "shortDescription": { + "text": "Cast operator throws an exception if the cast is not possible." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#uselesspostfixexpression", + "id": "detekt.potential-bugs.UselessPostfixExpression", + "name": "UselessPostfixExpression", + "shortDescription": { + "text": "The incremented or decremented value is unused. This value is replaced with the original value." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#wrongequalstypeparameter", + "id": "detekt.potential-bugs.WrongEqualsTypeParameter", + "name": "WrongEqualsTypeParameter", + "shortDescription": { + "text": "Wrong parameter type for `equals()` method found. To correctly override the `equals()` method use `Any?`." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#ignoredreturnvalue", + "id": "detekt.potential-bugs.IgnoredReturnValue", + "name": "IgnoredReturnValue", + "shortDescription": { + "text": "This call returns a value which is ignored" + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#implicitunitreturntype", + "id": "detekt.potential-bugs.ImplicitUnitReturnType", + "name": "ImplicitUnitReturnType", + "shortDescription": { + "text": "Functions using expression statements have an implicit return type. Changing the type of the expression accidentally, changes the function return type. This may lead to backward incompatibility. Use a block statement to make clear this function will never return a value." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#nullabletostringcall", + "id": "detekt.potential-bugs.NullableToStringCall", + "name": "NullableToStringCall", + "shortDescription": { + "text": "This call may return the string \"null\"" + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#unreachablecatchblock", + "id": "detekt.potential-bugs.UnreachableCatchBlock", + "name": "UnreachableCatchBlock", + "shortDescription": { + "text": "Unreachable catch block detected." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#casttonullabletype", + "id": "detekt.potential-bugs.CastToNullableType", + "name": "CastToNullableType", + "shortDescription": { + "text": "Disallow to cast to nullable types." + } + }, + { + "helpUri": "https://detekt.dev/potential-bugs.html#unusedunaryoperator", + "id": "detekt.potential-bugs.UnusedUnaryOperator", + "name": "UnusedUnaryOperator", + "shortDescription": { + "text": "This unary operator is unused." + } + }, + { + "helpUri": "https://detekt.dev/complexity.html#longparameterlist", + "id": "detekt.complexity.LongParameterList", + "name": "LongParameterList", + "shortDescription": { + "text": "The more parameters a function has the more complex it is. Long parameter lists are often used to control complex algorithms and violate the Single Responsibility Principle. Prefer functions with short parameter lists." + } + }, + { + "helpUri": "https://detekt.dev/complexity.html#longmethod", + "id": "detekt.complexity.LongMethod", + "name": "LongMethod", + "shortDescription": { + "text": "One method should have one responsibility. Long methods tend to handle many things at once. Prefer smaller methods to make them easier to understand." + } + }, + { + "helpUri": "https://detekt.dev/complexity.html#largeclass", + "id": "detekt.complexity.LargeClass", + "name": "LargeClass", + "shortDescription": { + "text": "One class should have one responsibility. Large classes tend to handle many things at once. Split up large classes into smaller classes that are easier to understand." + } + }, + { + "helpUri": "https://detekt.dev/complexity.html#complexinterface", + "id": "detekt.complexity.ComplexInterface", + "name": "ComplexInterface", + "shortDescription": { + "text": "An interface contains too many functions and properties. Large classes tend to handle many things at once. An interface should have one responsibility. Split up large interfaces into smaller ones that are easier to understand." + } + }, + { + "helpUri": "https://detekt.dev/complexity.html#cyclomaticcomplexmethod", + "id": "detekt.complexity.CyclomaticComplexMethod", + "name": "CyclomaticComplexMethod", + "shortDescription": { + "text": "Prefer splitting up complex methods into smaller, easier to test methods." + } + }, + { + "helpUri": "https://detekt.dev/complexity.html#cognitivecomplexmethod", + "id": "detekt.complexity.CognitiveComplexMethod", + "name": "CognitiveComplexMethod", + "shortDescription": { + "text": "Prefer splitting up complex methods into smaller, easier to understand methods." + } + }, + { + "helpUri": "https://detekt.dev/complexity.html#stringliteralduplication", + "id": "detekt.complexity.StringLiteralDuplication", + "name": "StringLiteralDuplication", + "shortDescription": { + "text": "Multiple occurrences of the same string literal within a single file detected. Prefer extracting the string literal into a property or constant." + } + }, + { + "helpUri": "https://detekt.dev/complexity.html#methodoverloading", + "id": "detekt.complexity.MethodOverloading", + "name": "MethodOverloading", + "shortDescription": { + "text": "Methods which are overloaded often might be harder to maintain. Furthermore, these methods are tightly coupled. Refactor these methods and try to use optional parameters." + } + }, + { + "helpUri": "https://detekt.dev/complexity.html#nestedblockdepth", + "id": "detekt.complexity.NestedBlockDepth", + "name": "NestedBlockDepth", + "shortDescription": { + "text": "Excessive nesting leads to hidden complexity. Prefer extracting code to make it easier to understand." + } + }, + { + "helpUri": "https://detekt.dev/complexity.html#nestedscopefunctions", + "id": "detekt.complexity.NestedScopeFunctions", + "name": "NestedScopeFunctions", + "shortDescription": { + "text": "Over-using scope functions makes code confusing, hard to read and bug prone." + } + }, + { + "helpUri": "https://detekt.dev/complexity.html#toomanyfunctions", + "id": "detekt.complexity.TooManyFunctions", + "name": "TooManyFunctions", + "shortDescription": { + "text": "Too many functions inside a/an file/class/object/interface always indicate a violation of the single responsibility principle. Maybe the file/class/object/interface wants to manage too many things at once. Extract functionality which clearly belongs together." + } + }, + { + "helpUri": "https://detekt.dev/complexity.html#complexcondition", + "id": "detekt.complexity.ComplexCondition", + "name": "ComplexCondition", + "shortDescription": { + "text": "Complex conditions should be simplified and extracted into well-named methods if necessary." + } + }, + { + "helpUri": "https://detekt.dev/complexity.html#labeledexpression", + "id": "detekt.complexity.LabeledExpression", + "name": "LabeledExpression", + "shortDescription": { + "text": "Expression with labels increase complexity and affect maintainability." + } + }, + { + "helpUri": "https://detekt.dev/complexity.html#replacesafecallchainwithrun", + "id": "detekt.complexity.ReplaceSafeCallChainWithRun", + "name": "ReplaceSafeCallChainWithRun", + "shortDescription": { + "text": "Chains of safe calls on non-nullable types can be surrounded with `run {}`." + } + }, + { + "helpUri": "https://detekt.dev/complexity.html#namedarguments", + "id": "detekt.complexity.NamedArguments", + "name": "NamedArguments", + "shortDescription": { + "text": "Named arguments are required for function calls with many arguments." + } + }, + { + "helpUri": "https://detekt.dev/coroutines.html#globalcoroutineusage", + "id": "detekt.coroutines.GlobalCoroutineUsage", + "name": "GlobalCoroutineUsage", + "shortDescription": { + "text": "The usage of the `GlobalScope` instance is highly discouraged." + } + }, + { + "helpUri": "https://detekt.dev/coroutines.html#injectdispatcher", + "id": "detekt.coroutines.InjectDispatcher", + "name": "InjectDispatcher", + "shortDescription": { + "text": "Don't hardcode dispatchers when creating new coroutines or calling `withContext`. Use dependency injection for dispatchers to make testing easier." + } + }, + { + "helpUri": "https://detekt.dev/coroutines.html#redundantsuspendmodifier", + "id": "detekt.coroutines.RedundantSuspendModifier", + "name": "RedundantSuspendModifier", + "shortDescription": { + "text": "The `suspend` modifier is only needed for functions that contain suspending calls." + } + }, + { + "helpUri": "https://detekt.dev/coroutines.html#sleepinsteadofdelay", + "id": "detekt.coroutines.SleepInsteadOfDelay", + "name": "SleepInsteadOfDelay", + "shortDescription": { + "text": "Usage of `Thread.sleep()` in coroutines can potentially halt multiple coroutines at once." + } + }, + { + "helpUri": "https://detekt.dev/coroutines.html#suspendfunwithflowreturntype", + "id": "detekt.coroutines.SuspendFunWithFlowReturnType", + "name": "SuspendFunWithFlowReturnType", + "shortDescription": { + "text": "The `suspend` modifier should not be used for functions that return a Coroutines Flow type. Flows are cold streams and invoking a function that returns one should not produce any side effects." + } + }, + { + "helpUri": "https://detekt.dev/coroutines.html#suspendfunwithcoroutinescopereceiver", + "id": "detekt.coroutines.SuspendFunWithCoroutineScopeReceiver", + "name": "SuspendFunWithCoroutineScopeReceiver", + "shortDescription": { + "text": "The `suspend` modifier should not be used for functions that use a CoroutinesScope as receiver. You should use suspend functions without the receiver or use plain functions and use coroutineScope { } instead." + } + }, + { + "helpUri": "https://detekt.dev/comments.html#commentoverprivatefunction", + "id": "detekt.comments.CommentOverPrivateFunction", + "name": "CommentOverPrivateFunction", + "shortDescription": { + "text": "Comments for private functions should be avoided. Prefer giving the function an expressive name. Split it up in smaller, self-explaining functions if necessary." + } + }, + { + "helpUri": "https://detekt.dev/comments.html#commentoverprivateproperty", + "id": "detekt.comments.CommentOverPrivateProperty", + "name": "CommentOverPrivateProperty", + "shortDescription": { + "text": "Private properties should be named in a self-explanatory manner without the need for a comment." + } + }, + { + "helpUri": "https://detekt.dev/comments.html#deprecatedblocktag", + "id": "detekt.comments.DeprecatedBlockTag", + "name": "DeprecatedBlockTag", + "shortDescription": { + "text": "Do not use the `@deprecated` block tag, which is not supported by KDoc. Use the `@Deprecated` annotation instead." + } + }, + { + "helpUri": "https://detekt.dev/comments.html#endofsentenceformat", + "id": "detekt.comments.EndOfSentenceFormat", + "name": "EndOfSentenceFormat", + "shortDescription": { + "text": "The first sentence in a KDoc comment should end with proper punctuation or with a correct URL." + } + }, + { + "helpUri": "https://detekt.dev/comments.html#outdateddocumentation", + "id": "detekt.comments.OutdatedDocumentation", + "name": "OutdatedDocumentation", + "shortDescription": { + "text": "KDoc comments should match the actual function or class signature" + } + }, + { + "helpUri": "https://detekt.dev/comments.html#undocumentedpublicclass", + "id": "detekt.comments.UndocumentedPublicClass", + "name": "UndocumentedPublicClass", + "shortDescription": { + "text": "Public classes, interfaces and objects require documentation." + } + }, + { + "helpUri": "https://detekt.dev/comments.html#undocumentedpublicfunction", + "id": "detekt.comments.UndocumentedPublicFunction", + "name": "UndocumentedPublicFunction", + "shortDescription": { + "text": "Public functions require documentation." + } + }, + { + "helpUri": "https://detekt.dev/comments.html#undocumentedpublicproperty", + "id": "detekt.comments.UndocumentedPublicProperty", + "name": "UndocumentedPublicProperty", + "shortDescription": { + "text": "Public properties require documentation." + } + }, + { + "helpUri": "https://detekt.dev/comments.html#absentorwrongfilelicense", + "id": "detekt.comments.AbsentOrWrongFileLicense", + "name": "AbsentOrWrongFileLicense", + "shortDescription": { + "text": "License text is absent or incorrect." + } + }, + { + "helpUri": "https://detekt.dev/comments.html#kdocreferencesnonpublicproperty", + "id": "detekt.comments.KDocReferencesNonPublicProperty", + "name": "KDocReferencesNonPublicProperty", + "shortDescription": { + "text": "KDoc comments should not refer to non-public properties." + } + }, + { + "helpUri": "https://detekt.dev/empty-blocks.html#emptycatchblock", + "id": "detekt.empty-blocks.EmptyCatchBlock", + "name": "EmptyCatchBlock", + "shortDescription": { + "text": "Empty catch block detected. Empty catch blocks indicate that an exception is ignored and not handled." + } + }, + { + "helpUri": "https://detekt.dev/empty-blocks.html#emptyclassblock", + "id": "detekt.empty-blocks.EmptyClassBlock", + "name": "EmptyClassBlock", + "shortDescription": { + "text": "Empty block of code detected. As they serve no purpose they should be removed." + } + }, + { + "helpUri": "https://detekt.dev/empty-blocks.html#emptydefaultconstructor", + "id": "detekt.empty-blocks.EmptyDefaultConstructor", + "name": "EmptyDefaultConstructor", + "shortDescription": { + "text": "Empty block of code detected. As they serve no purpose they should be removed." + } + }, + { + "helpUri": "https://detekt.dev/empty-blocks.html#emptydowhileblock", + "id": "detekt.empty-blocks.EmptyDoWhileBlock", + "name": "EmptyDoWhileBlock", + "shortDescription": { + "text": "Empty block of code detected. As they serve no purpose they should be removed." + } + }, + { + "helpUri": "https://detekt.dev/empty-blocks.html#emptyelseblock", + "id": "detekt.empty-blocks.EmptyElseBlock", + "name": "EmptyElseBlock", + "shortDescription": { + "text": "Empty block of code detected. As they serve no purpose they should be removed." + } + }, + { + "helpUri": "https://detekt.dev/empty-blocks.html#emptyfinallyblock", + "id": "detekt.empty-blocks.EmptyFinallyBlock", + "name": "EmptyFinallyBlock", + "shortDescription": { + "text": "Empty block of code detected. As they serve no purpose they should be removed." + } + }, + { + "helpUri": "https://detekt.dev/empty-blocks.html#emptyforblock", + "id": "detekt.empty-blocks.EmptyForBlock", + "name": "EmptyForBlock", + "shortDescription": { + "text": "Empty block of code detected. As they serve no purpose they should be removed." + } + }, + { + "helpUri": "https://detekt.dev/empty-blocks.html#emptyfunctionblock", + "id": "detekt.empty-blocks.EmptyFunctionBlock", + "name": "EmptyFunctionBlock", + "shortDescription": { + "text": "Empty block of code detected. As they serve no purpose they should be removed." + } + }, + { + "helpUri": "https://detekt.dev/empty-blocks.html#emptyifblock", + "id": "detekt.empty-blocks.EmptyIfBlock", + "name": "EmptyIfBlock", + "shortDescription": { + "text": "Empty block of code detected. As they serve no purpose they should be removed." + } + }, + { + "helpUri": "https://detekt.dev/empty-blocks.html#emptyinitblock", + "id": "detekt.empty-blocks.EmptyInitBlock", + "name": "EmptyInitBlock", + "shortDescription": { + "text": "Empty block of code detected. As they serve no purpose they should be removed." + } + }, + { + "helpUri": "https://detekt.dev/empty-blocks.html#emptyktfile", + "id": "detekt.empty-blocks.EmptyKtFile", + "name": "EmptyKtFile", + "shortDescription": { + "text": "Empty block of code detected. As they serve no purpose they should be removed." + } + }, + { + "helpUri": "https://detekt.dev/empty-blocks.html#emptysecondaryconstructor", + "id": "detekt.empty-blocks.EmptySecondaryConstructor", + "name": "EmptySecondaryConstructor", + "shortDescription": { + "text": "Empty block of code detected. As they serve no purpose they should be removed." + } + }, + { + "helpUri": "https://detekt.dev/empty-blocks.html#emptytryblock", + "id": "detekt.empty-blocks.EmptyTryBlock", + "name": "EmptyTryBlock", + "shortDescription": { + "text": "Empty block of code detected. As they serve no purpose they should be removed." + } + }, + { + "helpUri": "https://detekt.dev/empty-blocks.html#emptywhenblock", + "id": "detekt.empty-blocks.EmptyWhenBlock", + "name": "EmptyWhenBlock", + "shortDescription": { + "text": "Empty block of code detected. As they serve no purpose they should be removed." + } + }, + { + "helpUri": "https://detekt.dev/empty-blocks.html#emptywhileblock", + "id": "detekt.empty-blocks.EmptyWhileBlock", + "name": "EmptyWhileBlock", + "shortDescription": { + "text": "Empty block of code detected. As they serve no purpose they should be removed." + } + }, + { + "helpUri": "https://detekt.dev/exceptions.html#toogenericexceptioncaught", + "id": "detekt.exceptions.TooGenericExceptionCaught", + "name": "TooGenericExceptionCaught", + "shortDescription": { + "text": "The caught exception is too generic. Prefer catching specific exceptions to the case that is currently handled." + } + }, + { + "helpUri": "https://detekt.dev/exceptions.html#exceptionraisedinunexpectedlocation", + "id": "detekt.exceptions.ExceptionRaisedInUnexpectedLocation", + "name": "ExceptionRaisedInUnexpectedLocation", + "shortDescription": { + "text": "This method is not expected to throw exceptions. This can cause weird behavior." + } + }, + { + "helpUri": "https://detekt.dev/exceptions.html#toogenericexceptionthrown", + "id": "detekt.exceptions.TooGenericExceptionThrown", + "name": "TooGenericExceptionThrown", + "shortDescription": { + "text": "The thrown exception is too generic. Prefer throwing project specific exceptions to handle error cases." + } + }, + { + "helpUri": "https://detekt.dev/exceptions.html#notimplementeddeclaration", + "id": "detekt.exceptions.NotImplementedDeclaration", + "name": "NotImplementedDeclaration", + "shortDescription": { + "text": "The NotImplementedDeclaration should only be used when a method stub is necessary. This defers the development of the functionality of this function. Hence, the `NotImplementedDeclaration` should only serve as a temporary declaration. Before releasing, this type of declaration should be removed." + } + }, + { + "helpUri": "https://detekt.dev/exceptions.html#printstacktrace", + "id": "detekt.exceptions.PrintStackTrace", + "name": "PrintStackTrace", + "shortDescription": { + "text": "Do not print a stack trace. These debug statements should be removed or replaced with a logger." + } + }, + { + "helpUri": "https://detekt.dev/exceptions.html#instanceofcheckforexception", + "id": "detekt.exceptions.InstanceOfCheckForException", + "name": "InstanceOfCheckForException", + "shortDescription": { + "text": "Instead of catching for a general exception type and checking for a specific exception type, use multiple catch blocks." + } + }, + { + "helpUri": "https://detekt.dev/exceptions.html#throwingexceptionswithoutmessageorcause", + "id": "detekt.exceptions.ThrowingExceptionsWithoutMessageOrCause", + "name": "ThrowingExceptionsWithoutMessageOrCause", + "shortDescription": { + "text": "A call to the default constructor of an exception was detected. Instead one of the constructor overloads should be called. This allows to provide more meaningful exceptions." + } + }, + { + "helpUri": "https://detekt.dev/exceptions.html#returnfromfinally", + "id": "detekt.exceptions.ReturnFromFinally", + "name": "ReturnFromFinally", + "shortDescription": { + "text": "Do not return within a finally statement. This can discard exceptions." + } + }, + { + "helpUri": "https://detekt.dev/exceptions.html#throwingexceptionfromfinally", + "id": "detekt.exceptions.ThrowingExceptionFromFinally", + "name": "ThrowingExceptionFromFinally", + "shortDescription": { + "text": "Do not throw an exception within a finally statement. This can discard exceptions and is confusing." + } + }, + { + "helpUri": "https://detekt.dev/exceptions.html#throwingexceptioninmain", + "id": "detekt.exceptions.ThrowingExceptionInMain", + "name": "ThrowingExceptionInMain", + "shortDescription": { + "text": "The main method should not throw an exception." + } + }, + { + "helpUri": "https://detekt.dev/exceptions.html#rethrowcaughtexception", + "id": "detekt.exceptions.RethrowCaughtException", + "name": "RethrowCaughtException", + "shortDescription": { + "text": "Do not rethrow a caught exception of the same type." + } + }, + { + "helpUri": "https://detekt.dev/exceptions.html#throwingnewinstanceofsameexception", + "id": "detekt.exceptions.ThrowingNewInstanceOfSameException", + "name": "ThrowingNewInstanceOfSameException", + "shortDescription": { + "text": "Avoid catch blocks that rethrow a caught exception wrapped inside a new instance of the same exception." + } + }, + { + "helpUri": "https://detekt.dev/exceptions.html#swallowedexception", + "id": "detekt.exceptions.SwallowedException", + "name": "SwallowedException", + "shortDescription": { + "text": "The caught exception is swallowed. The original exception could be lost." + } + }, + { + "helpUri": "https://detekt.dev/exceptions.html#objectextendsthrowable", + "id": "detekt.exceptions.ObjectExtendsThrowable", + "name": "ObjectExtendsThrowable", + "shortDescription": { + "text": "An `object` should not extend and type of Throwable. Throwables are stateful and should be instantiated only when needed for when a specific error occurs. An `object`, being a singleton, that extends any type of Throwable consequently introduces a global singleton exception whose instance may be inadvertently reused from multiple places, thus introducing shared mutable state." + } + }, + { + "helpUri": "https://detekt.dev/naming.html#matchingdeclarationname", + "id": "detekt.naming.MatchingDeclarationName", + "name": "MatchingDeclarationName", + "shortDescription": { + "text": "If a source file contains only a single non-private top-level class or object, the file name should reflect the case-sensitive name plus the .kt extension." + } + }, + { + "helpUri": "https://detekt.dev/naming.html#membernameequalsclassname", + "id": "detekt.naming.MemberNameEqualsClassName", + "name": "MemberNameEqualsClassName", + "shortDescription": { + "text": "A member should not be given the same name as its parent class or object." + } + }, + { + "helpUri": "https://detekt.dev/naming.html#invalidpackagedeclaration", + "id": "detekt.naming.InvalidPackageDeclaration", + "name": "InvalidPackageDeclaration", + "shortDescription": { + "text": "Kotlin source files should be stored in the directory corresponding to its package statement." + } + }, + { + "helpUri": "https://detekt.dev/naming.html#nonameshadowing", + "id": "detekt.naming.NoNameShadowing", + "name": "NoNameShadowing", + "shortDescription": { + "text": "Disallow shadowing variable declarations." + } + }, + { + "helpUri": "https://detekt.dev/naming.html#toplevelpropertynaming", + "id": "detekt.naming.TopLevelPropertyNaming", + "name": "TopLevelPropertyNaming", + "shortDescription": { + "text": "Top level property names should follow the naming convention set in the projects configuration." + } + }, + { + "helpUri": "https://detekt.dev/naming.html#booleanpropertynaming", + "id": "detekt.naming.BooleanPropertyNaming", + "name": "BooleanPropertyNaming", + "shortDescription": { + "text": "Boolean property name should follow the naming convention set in the projects configuration." + } + }, + { + "helpUri": "https://detekt.dev/naming.html#lambdaparameternaming", + "id": "detekt.naming.LambdaParameterNaming", + "name": "LambdaParameterNaming", + "shortDescription": { + "text": "Lambda parameter names should follow the naming convention set in the projects configuration." + } + }, + { + "helpUri": "https://detekt.dev/naming.html#constructorparameternaming", + "id": "detekt.naming.ConstructorParameterNaming", + "name": "ConstructorParameterNaming", + "shortDescription": { + "text": "Constructor parameter names should follow the naming convention set in the projects configuration." + } + }, + { + "helpUri": "https://detekt.dev/naming.html#forbiddenclassname", + "id": "detekt.naming.ForbiddenClassName", + "name": "ForbiddenClassName", + "shortDescription": { + "text": "Forbidden class name as per configuration detected." + } + }, + { + "helpUri": "https://detekt.dev/naming.html#classnaming", + "id": "detekt.naming.ClassNaming", + "name": "ClassNaming", + "shortDescription": { + "text": "A class or object name should fit the naming pattern defined in the projects configuration." + } + }, + { + "helpUri": "https://detekt.dev/naming.html#packagenaming", + "id": "detekt.naming.PackageNaming", + "name": "PackageNaming", + "shortDescription": { + "text": "Package names should match the naming convention set in the configuration." + } + }, + { + "helpUri": "https://detekt.dev/naming.html#enumnaming", + "id": "detekt.naming.EnumNaming", + "name": "EnumNaming", + "shortDescription": { + "text": "Enum names should follow the naming convention set in the projects configuration." + } + }, + { + "helpUri": "https://detekt.dev/naming.html#objectpropertynaming", + "id": "detekt.naming.ObjectPropertyNaming", + "name": "ObjectPropertyNaming", + "shortDescription": { + "text": "Property names inside objects should follow the naming convention set in the projects configuration." + } + }, + { + "helpUri": "https://detekt.dev/naming.html#functionparameternaming", + "id": "detekt.naming.FunctionParameterNaming", + "name": "FunctionParameterNaming", + "shortDescription": { + "text": "Function parameter names should follow the naming convention set in the projects configuration." + } + }, + { + "helpUri": "https://detekt.dev/naming.html#functionnaming", + "id": "detekt.naming.FunctionNaming", + "name": "FunctionNaming", + "shortDescription": { + "text": "Function names should follow the naming convention set in the configuration." + } + }, + { + "helpUri": "https://detekt.dev/naming.html#functionminlength", + "id": "detekt.naming.FunctionMinLength", + "name": "FunctionMinLength", + "shortDescription": { + "text": "Function names should not be shorter than the minimum defined in the configuration." + } + }, + { + "helpUri": "https://detekt.dev/naming.html#functionmaxlength", + "id": "detekt.naming.FunctionMaxLength", + "name": "FunctionMaxLength", + "shortDescription": { + "text": "Function names should not be longer than the maximum set in the project configuration." + } + }, + { + "helpUri": "https://detekt.dev/naming.html#variablemaxlength", + "id": "detekt.naming.VariableMaxLength", + "name": "VariableMaxLength", + "shortDescription": { + "text": "Variable names should not be longer than the maximum set in the configuration." + } + }, + { + "helpUri": "https://detekt.dev/naming.html#variableminlength", + "id": "detekt.naming.VariableMinLength", + "name": "VariableMinLength", + "shortDescription": { + "text": "Variable names should not be shorter than the minimum defined in the configuration." + } + }, + { + "helpUri": "https://detekt.dev/naming.html#variablenaming", + "id": "detekt.naming.VariableNaming", + "name": "VariableNaming", + "shortDescription": { + "text": "Variable names should follow the naming convention set in the projects configuration." + } + }, + { + "helpUri": "https://detekt.dev/naming.html#nonbooleanpropertyprefixedwithis", + "id": "detekt.naming.NonBooleanPropertyPrefixedWithIs", + "name": "NonBooleanPropertyPrefixedWithIs", + "shortDescription": { + "text": "Only boolean property names can start with `is` prefix." + } + }, + { + "helpUri": "https://detekt.dev/performance.html#foreachonrange", + "id": "detekt.performance.ForEachOnRange", + "name": "ForEachOnRange", + "shortDescription": { + "text": "Using the forEach method on ranges has a heavy performance cost. Prefer using simple for loops." + } + }, + { + "helpUri": "https://detekt.dev/performance.html#spreadoperator", + "id": "detekt.performance.SpreadOperator", + "name": "SpreadOperator", + "shortDescription": { + "text": "In most cases using a spread operator causes a full copy of the array to be created before calling a method. This may result in a performance penalty." + } + }, + { + "helpUri": "https://detekt.dev/performance.html#unnecessarytemporaryinstantiation", + "id": "detekt.performance.UnnecessaryTemporaryInstantiation", + "name": "UnnecessaryTemporaryInstantiation", + "shortDescription": { + "text": "Avoid temporary objects when converting primitive types to `String`." + } + }, + { + "helpUri": "https://detekt.dev/performance.html#arrayprimitive", + "id": "detekt.performance.ArrayPrimitive", + "name": "ArrayPrimitive", + "shortDescription": { + "text": "Using `Array` leads to implicit boxing and a performance hit." + } + }, + { + "helpUri": "https://detekt.dev/performance.html#couldbesequence", + "id": "detekt.performance.CouldBeSequence", + "name": "CouldBeSequence", + "shortDescription": { + "text": "Several chained collection operations that should be a sequence." + } + }, + { + "helpUri": "https://detekt.dev/performance.html#unnecessarypartofbinaryexpression", + "id": "detekt.performance.UnnecessaryPartOfBinaryExpression", + "name": "UnnecessaryPartOfBinaryExpression", + "shortDescription": { + "text": "Detects duplicate condition into binary expression and recommends to remove unnecessary checks" + } + }, + { + "helpUri": "https://detekt.dev/style.html#canbenonnullable", + "id": "detekt.style.CanBeNonNullable", + "name": "CanBeNonNullable", + "shortDescription": { + "text": "Variable can be changed to non-nullable, as it is never set to null." + } + }, + { + "helpUri": "https://detekt.dev/style.html#cascadingcallwrapping", + "id": "detekt.style.CascadingCallWrapping", + "name": "CascadingCallWrapping", + "shortDescription": { + "text": "If a chained call is wrapped to a new line, subsequent chained calls should be as well." + } + }, + { + "helpUri": "https://detekt.dev/style.html#classordering", + "id": "detekt.style.ClassOrdering", + "name": "ClassOrdering", + "shortDescription": { + "text": "Class contents should be in this order: Property declarations/initializer blocks; secondary constructors; method declarations then companion objects." + } + }, + { + "helpUri": "https://detekt.dev/style.html#collapsibleifstatements", + "id": "detekt.style.CollapsibleIfStatements", + "name": "CollapsibleIfStatements", + "shortDescription": { + "text": "Two if statements which could be collapsed were detected. These statements can be merged to improve readability." + } + }, + { + "helpUri": "https://detekt.dev/style.html#destructuringdeclarationwithtoomanyentries", + "id": "detekt.style.DestructuringDeclarationWithTooManyEntries", + "name": "DestructuringDeclarationWithTooManyEntries", + "shortDescription": { + "text": "Too many entries in a destructuring declaration make the code hard to understand." + } + }, + { + "helpUri": "https://detekt.dev/style.html#returncount", + "id": "detekt.style.ReturnCount", + "name": "ReturnCount", + "shortDescription": { + "text": "Restrict the number of return statements in methods." + } + }, + { + "helpUri": "https://detekt.dev/style.html#throwscount", + "id": "detekt.style.ThrowsCount", + "name": "ThrowsCount", + "shortDescription": { + "text": "Restrict the number of throw statements in methods." + } + }, + { + "helpUri": "https://detekt.dev/style.html#trimmultilinerawstring", + "id": "detekt.style.TrimMultilineRawString", + "name": "TrimMultilineRawString", + "shortDescription": { + "text": "Multiline raw strings should be followed by `trimMargin()` or `trimIndent()`." + } + }, + { + "helpUri": "https://detekt.dev/style.html#newlineatendoffile", + "id": "detekt.style.NewLineAtEndOfFile", + "name": "NewLineAtEndOfFile", + "shortDescription": { + "text": "Checks whether files end with a line separator." + } + }, + { + "helpUri": "https://detekt.dev/style.html#wildcardimport", + "id": "detekt.style.WildcardImport", + "name": "WildcardImport", + "shortDescription": { + "text": "Wildcard imports should be replaced with imports using fully qualified class names. Wildcard imports can lead to naming conflicts. A library update can introduce naming clashes with your classes which results in compilation errors." + } + }, + { + "helpUri": "https://detekt.dev/style.html#maxlinelength", + "id": "detekt.style.MaxLineLength", + "name": "MaxLineLength", + "shortDescription": { + "text": "Line detected, which is longer than the defined maximum line length in the code style." + } + }, + { + "helpUri": "https://detekt.dev/style.html#trailingwhitespace", + "id": "detekt.style.TrailingWhitespace", + "name": "TrailingWhitespace", + "shortDescription": { + "text": "Whitespaces at the end of a line are unnecessary and can be removed." + } + }, + { + "helpUri": "https://detekt.dev/style.html#notabs", + "id": "detekt.style.NoTabs", + "name": "NoTabs", + "shortDescription": { + "text": "Checks if tabs are used in Kotlin files." + } + }, + { + "helpUri": "https://detekt.dev/style.html#equalsonsignatureline", + "id": "detekt.style.EqualsOnSignatureLine", + "name": "EqualsOnSignatureLine", + "shortDescription": { + "text": "Equals signs for expression style functions should be on the same line as the signature." + } + }, + { + "helpUri": "https://detekt.dev/style.html#equalsnullcall", + "id": "detekt.style.EqualsNullCall", + "name": "EqualsNullCall", + "shortDescription": { + "text": "Equals() method is called with null as parameter. Consider using == to compare to null." + } + }, + { + "helpUri": "https://detekt.dev/style.html#forbiddencomment", + "id": "detekt.style.ForbiddenComment", + "name": "ForbiddenComment", + "shortDescription": { + "text": "Flags a forbidden comment." + } + }, + { + "helpUri": "https://detekt.dev/style.html#forbiddenimport", + "id": "detekt.style.ForbiddenImport", + "name": "ForbiddenImport", + "shortDescription": { + "text": "Mark forbidden imports. A forbidden import could be an import for an unstable / experimental api and hence you might want to mark it as forbidden in order to get warned about the usage." + } + }, + { + "helpUri": "https://detekt.dev/style.html#forbiddenmethodcall", + "id": "detekt.style.ForbiddenMethodCall", + "name": "ForbiddenMethodCall", + "shortDescription": { + "text": "Mark forbidden methods. A forbidden method could be an invocation of an unstable / experimental method and hence you might want to mark it as forbidden in order to get warned about the usage." + } + }, + { + "helpUri": "https://detekt.dev/style.html#forbiddensuppress", + "id": "detekt.style.ForbiddenSuppress", + "name": "ForbiddenSuppress", + "shortDescription": { + "text": "Suppressing a rule which is forbidden in current configuration." + } + }, + { + "helpUri": "https://detekt.dev/style.html#functiononlyreturningconstant", + "id": "detekt.style.FunctionOnlyReturningConstant", + "name": "FunctionOnlyReturningConstant", + "shortDescription": { + "text": "A function that only returns a constant is misleading. Consider declaring a constant instead." + } + }, + { + "helpUri": "https://detekt.dev/style.html#spacingbetweenpackageandimports", + "id": "detekt.style.SpacingBetweenPackageAndImports", + "name": "SpacingBetweenPackageAndImports", + "shortDescription": { + "text": "Violation of the package declaration style detected." + } + }, + { + "helpUri": "https://detekt.dev/style.html#loopwithtoomanyjumpstatements", + "id": "detekt.style.LoopWithTooManyJumpStatements", + "name": "LoopWithTooManyJumpStatements", + "shortDescription": { + "text": "The loop contains more than one break or continue statement. The code should be refactored to increase readability." + } + }, + { + "helpUri": "https://detekt.dev/style.html#safecast", + "id": "detekt.style.SafeCast", + "name": "SafeCast", + "shortDescription": { + "text": "Prefer to use a safe cast instead of if-else-null." + } + }, + { + "helpUri": "https://detekt.dev/style.html#unnecessaryabstractclass", + "id": "detekt.style.UnnecessaryAbstractClass", + "name": "UnnecessaryAbstractClass", + "shortDescription": { + "text": "An abstract class is unnecessary. May be refactored to an interface or to a concrete class." + } + }, + { + "helpUri": "https://detekt.dev/style.html#unnecessaryannotationusesitetarget", + "id": "detekt.style.UnnecessaryAnnotationUseSiteTarget", + "name": "UnnecessaryAnnotationUseSiteTarget", + "shortDescription": { + "text": "Unnecessary Annotation use-site Target. It can be removed." + } + }, + { + "helpUri": "https://detekt.dev/style.html#unnecessaryparentheses", + "id": "detekt.style.UnnecessaryParentheses", + "name": "UnnecessaryParentheses", + "shortDescription": { + "text": "Unnecessary parentheses don't add any value to the code and should be removed." + } + }, + { + "helpUri": "https://detekt.dev/style.html#unnecessaryinheritance", + "id": "detekt.style.UnnecessaryInheritance", + "name": "UnnecessaryInheritance", + "shortDescription": { + "text": "The extended super type is unnecessary." + } + }, + { + "helpUri": "https://detekt.dev/style.html#unnecessaryinnerclass", + "id": "detekt.style.UnnecessaryInnerClass", + "name": "UnnecessaryInnerClass", + "shortDescription": { + "text": "The 'inner' qualifier is unnecessary." + } + }, + { + "helpUri": "https://detekt.dev/style.html#utilityclasswithpublicconstructor", + "id": "detekt.style.UtilityClassWithPublicConstructor", + "name": "UtilityClassWithPublicConstructor", + "shortDescription": { + "text": "The class declaration is unnecessary because it only contains utility functions. An object declaration should be used instead." + } + }, + { + "helpUri": "https://detekt.dev/style.html#objectliteraltolambda", + "id": "detekt.style.ObjectLiteralToLambda", + "name": "ObjectLiteralToLambda", + "shortDescription": { + "text": "Report object literals that can be changed to lambdas." + } + }, + { + "helpUri": "https://detekt.dev/style.html#optionalabstractkeyword", + "id": "detekt.style.OptionalAbstractKeyword", + "name": "OptionalAbstractKeyword", + "shortDescription": { + "text": "Unnecessary abstract modifier in interface detected. This abstract modifier is unnecessary and thus can be removed." + } + }, + { + "helpUri": "https://detekt.dev/style.html#optionalwhenbraces", + "id": "detekt.style.OptionalWhenBraces", + "name": "OptionalWhenBraces", + "shortDescription": { + "text": "Optional braces in when expression detected." + } + }, + { + "helpUri": "https://detekt.dev/style.html#optionalunit", + "id": "detekt.style.OptionalUnit", + "name": "OptionalUnit", + "shortDescription": { + "text": "Return type of `Unit` is unnecessary and can be safely removed." + } + }, + { + "helpUri": "https://detekt.dev/style.html#protectedmemberinfinalclass", + "id": "detekt.style.ProtectedMemberInFinalClass", + "name": "ProtectedMemberInFinalClass", + "shortDescription": { + "text": "Member with protected visibility in final class is private. Consider using private or internal as modifier." + } + }, + { + "helpUri": "https://detekt.dev/style.html#serialversionuidinserializableclass", + "id": "detekt.style.SerialVersionUIDInSerializableClass", + "name": "SerialVersionUIDInSerializableClass", + "shortDescription": { + "text": "A class which implements the Serializable interface does not define a correct serialVersionUID field. The serialVersionUID field should be a constant long value inside a companion object." + } + }, + { + "helpUri": "https://detekt.dev/style.html#magicnumber", + "id": "detekt.style.MagicNumber", + "name": "MagicNumber", + "shortDescription": { + "text": "Report magic numbers. Magic number is a numeric literal that is not defined as a constant and hence it's unclear what the purpose of this number is. It's better to declare such numbers as constants and give them a proper name. By default, -1, 0, 1, and 2 are not considered to be magic numbers." + } + }, + { + "helpUri": "https://detekt.dev/style.html#modifierorder", + "id": "detekt.style.ModifierOrder", + "name": "ModifierOrder", + "shortDescription": { + "text": "Modifiers are not in the correct order. Consider to reorder these modifiers." + } + }, + { + "helpUri": "https://detekt.dev/style.html#dataclasscontainsfunctions", + "id": "detekt.style.DataClassContainsFunctions", + "name": "DataClassContainsFunctions", + "shortDescription": { + "text": "Data classes should mainly be used to store data and should not have any extra functions (Compiler will automatically generate equals, toString and hashCode functions)." + } + }, + { + "helpUri": "https://detekt.dev/style.html#dataclassshouldbeimmutable", + "id": "detekt.style.DataClassShouldBeImmutable", + "name": "DataClassShouldBeImmutable", + "shortDescription": { + "text": "Data classes should mainly be immutable and should not have any side effects (To copy an object altering some of its properties use the copy function)." + } + }, + { + "helpUri": "https://detekt.dev/style.html#usedataclass", + "id": "detekt.style.UseDataClass", + "name": "UseDataClass", + "shortDescription": { + "text": "Classes that do nothing but hold data should be replaced with a data class." + } + }, + { + "helpUri": "https://detekt.dev/style.html#unusedimports", + "id": "detekt.style.UnusedImports", + "name": "UnusedImports", + "shortDescription": { + "text": "Unused Imports are dead code and should be removed." + } + }, + { + "helpUri": "https://detekt.dev/style.html#unusedprivateclass", + "id": "detekt.style.UnusedPrivateClass", + "name": "UnusedPrivateClass", + "shortDescription": { + "text": "Private class is unused and should be removed." + } + }, + { + "helpUri": "https://detekt.dev/style.html#unusedprivatemember", + "id": "detekt.style.UnusedPrivateMember", + "name": "UnusedPrivateMember", + "shortDescription": { + "text": "Private member is unused and should be removed." + } + }, + { + "helpUri": "https://detekt.dev/style.html#expressionbodysyntax", + "id": "detekt.style.ExpressionBodySyntax", + "name": "ExpressionBodySyntax", + "shortDescription": { + "text": "Functions with exact one statement, the return statement, can be rewritten with ExpressionBodySyntax." + } + }, + { + "helpUri": "https://detekt.dev/style.html#nestedclassesvisibility", + "id": "detekt.style.NestedClassesVisibility", + "name": "NestedClassesVisibility", + "shortDescription": { + "text": "The explicit public modifier still results in an internal nested class." + } + }, + { + "helpUri": "https://detekt.dev/style.html#redundantvisibilitymodifierrule", + "id": "detekt.style.RedundantVisibilityModifierRule", + "name": "RedundantVisibilityModifierRule", + "shortDescription": { + "text": "Redundant visibility modifiers detected, which can be safely removed." + } + }, + { + "helpUri": "https://detekt.dev/style.html#untilinsteadofrangeto", + "id": "detekt.style.UntilInsteadOfRangeTo", + "name": "UntilInsteadOfRangeTo", + "shortDescription": { + "text": "A `..` call can be replaced with `until`." + } + }, + { + "helpUri": "https://detekt.dev/style.html#unnecessaryapply", + "id": "detekt.style.UnnecessaryApply", + "name": "UnnecessaryApply", + "shortDescription": { + "text": "The `apply` usage is unnecessary and can be removed." + } + }, + { + "helpUri": "https://detekt.dev/style.html#unnecessaryfilter", + "id": "detekt.style.UnnecessaryFilter", + "name": "UnnecessaryFilter", + "shortDescription": { + "text": "`filter()` with other collection operations may be simplified." + } + }, + { + "helpUri": "https://detekt.dev/style.html#unnecessarylet", + "id": "detekt.style.UnnecessaryLet", + "name": "UnnecessaryLet", + "shortDescription": { + "text": "The `let` usage is unnecessary." + } + }, + { + "helpUri": "https://detekt.dev/style.html#maybeconst", + "id": "detekt.style.MayBeConst", + "name": "MayBeConst", + "shortDescription": { + "text": "Usage of `vals` that can be `const val` detected." + } + }, + { + "helpUri": "https://detekt.dev/style.html#prefertooverpairsyntax", + "id": "detekt.style.PreferToOverPairSyntax", + "name": "PreferToOverPairSyntax", + "shortDescription": { + "text": "Pair was created using the Pair constructor, using the to syntax is preferred." + } + }, + { + "helpUri": "https://detekt.dev/style.html#mandatorybracesifstatements", + "id": "detekt.style.MandatoryBracesIfStatements", + "name": "MandatoryBracesIfStatements", + "shortDescription": { + "text": "Multi-line if statement was found that does not have braces. These braces should be added to improve readability." + } + }, + { + "helpUri": "https://detekt.dev/style.html#mandatorybracesloops", + "id": "detekt.style.MandatoryBracesLoops", + "name": "MandatoryBracesLoops", + "shortDescription": { + "text": "A multi-line loop was found that does not have braces. These should be added to improve readability." + } + }, + { + "helpUri": "https://detekt.dev/style.html#nullablebooleancheck", + "id": "detekt.style.NullableBooleanCheck", + "name": "NullableBooleanCheck", + "shortDescription": { + "text": "Nullable boolean check should use `==` rather than `?:`" + } + }, + { + "helpUri": "https://detekt.dev/style.html#varcouldbeval", + "id": "detekt.style.VarCouldBeVal", + "name": "VarCouldBeVal", + "shortDescription": { + "text": "Var declaration could be val." + } + }, + { + "helpUri": "https://detekt.dev/style.html#forbiddenvoid", + "id": "detekt.style.ForbiddenVoid", + "name": "ForbiddenVoid", + "shortDescription": { + "text": "`Unit` should be used instead of `Void`." + } + }, + { + "helpUri": "https://detekt.dev/style.html#explicititlambdaparameter", + "id": "detekt.style.ExplicitItLambdaParameter", + "name": "ExplicitItLambdaParameter", + "shortDescription": { + "text": "Declaring lambda parameters as `it` is redundant." + } + }, + { + "helpUri": "https://detekt.dev/style.html#explicitcollectionelementaccessmethod", + "id": "detekt.style.ExplicitCollectionElementAccessMethod", + "name": "ExplicitCollectionElementAccessMethod", + "shortDescription": { + "text": "Prefer usage of the indexed access operator [] for map element access or insert methods." + } + }, + { + "helpUri": "https://detekt.dev/style.html#uselesscallonnotnull", + "id": "detekt.style.UselessCallOnNotNull", + "name": "UselessCallOnNotNull", + "shortDescription": { + "text": "This call on a non-null reference may be reduced or removed. Some calls are intended to be called on nullable collection or text types (e.g. `String?`).When this call is used on a reference to a non-null type (e.g. `String`) it is redundant and will have no effect, so it can be removed." + } + }, + { + "helpUri": "https://detekt.dev/style.html#underscoresinnumericliterals", + "id": "detekt.style.UnderscoresInNumericLiterals", + "name": "UnderscoresInNumericLiterals", + "shortDescription": { + "text": "Report missing or invalid underscores in base 10 numbers. Numeric literals should be underscore separated to increase readability." + } + }, + { + "helpUri": "https://detekt.dev/style.html#userequire", + "id": "detekt.style.UseRequire", + "name": "UseRequire", + "shortDescription": { + "text": "Use require() instead of throwing an IllegalArgumentException." + } + }, + { + "helpUri": "https://detekt.dev/style.html#usecheckorerror", + "id": "detekt.style.UseCheckOrError", + "name": "UseCheckOrError", + "shortDescription": { + "text": "Use check() or error() instead of throwing an IllegalStateException." + } + }, + { + "helpUri": "https://detekt.dev/style.html#useifinsteadofwhen", + "id": "detekt.style.UseIfInsteadOfWhen", + "name": "UseIfInsteadOfWhen", + "shortDescription": { + "text": "Binary expressions are better expressed using an `if` expression than a `when` expression." + } + }, + { + "helpUri": "https://detekt.dev/style.html#redundantexplicittype", + "id": "detekt.style.RedundantExplicitType", + "name": "RedundantExplicitType", + "shortDescription": { + "text": "Type does not need to be stated explicitly and can be removed." + } + }, + { + "helpUri": "https://detekt.dev/style.html#usearrayliteralsinannotations", + "id": "detekt.style.UseArrayLiteralsInAnnotations", + "name": "UseArrayLiteralsInAnnotations", + "shortDescription": { + "text": "Array literals [...] should be preferred as they are more readable than `arrayOf(...)` expressions." + } + }, + { + "helpUri": "https://detekt.dev/style.html#useemptycounterpart", + "id": "detekt.style.UseEmptyCounterpart", + "name": "UseEmptyCounterpart", + "shortDescription": { + "text": "Instantiation of an object's \"empty\" state should use the object's \"empty\" initializer." + } + }, + { + "helpUri": "https://detekt.dev/style.html#usechecknotnull", + "id": "detekt.style.UseCheckNotNull", + "name": "UseCheckNotNull", + "shortDescription": { + "text": "Use checkNotNull() instead of check() for checking not-null." + } + }, + { + "helpUri": "https://detekt.dev/style.html#userequirenotnull", + "id": "detekt.style.UseRequireNotNull", + "name": "UseRequireNotNull", + "shortDescription": { + "text": "Use requireNotNull() instead of require() for checking not-null." + } + }, + { + "helpUri": "https://detekt.dev/style.html#redundanthigherordermapusage", + "id": "detekt.style.RedundantHigherOrderMapUsage", + "name": "RedundantHigherOrderMapUsage", + "shortDescription": { + "text": "Checks for redundant 'map' calls, which can be removed." + } + }, + { + "helpUri": "https://detekt.dev/style.html#useifemptyorifblank", + "id": "detekt.style.UseIfEmptyOrIfBlank", + "name": "UseIfEmptyOrIfBlank", + "shortDescription": { + "text": "Use `ifEmpty` or `ifBlank` instead of `isEmpty` or `isBlank` to assign a default value." + } + }, + { + "helpUri": "https://detekt.dev/style.html#multilinelambdaitparameter", + "id": "detekt.style.MultilineLambdaItParameter", + "name": "MultilineLambdaItParameter", + "shortDescription": { + "text": "Multiline lambdas should not use `it` as a parameter name." + } + }, + { + "helpUri": "https://detekt.dev/style.html#multilinerawstringindentation", + "id": "detekt.style.MultilineRawStringIndentation", + "name": "MultilineRawStringIndentation", + "shortDescription": { + "text": "The indentation of the raw String should be consistent" + } + }, + { + "helpUri": "https://detekt.dev/style.html#useisnullorempty", + "id": "detekt.style.UseIsNullOrEmpty", + "name": "UseIsNullOrEmpty", + "shortDescription": { + "text": "Use `isNullOrEmpty()` call instead of `x == null || x.isEmpty()`." + } + }, + { + "helpUri": "https://detekt.dev/style.html#useorempty", + "id": "detekt.style.UseOrEmpty", + "name": "UseOrEmpty", + "shortDescription": { + "text": "Use `orEmpty()` call instead of `?: emptyList()`" + } + }, + { + "helpUri": "https://detekt.dev/style.html#useanyornoneinsteadoffind", + "id": "detekt.style.UseAnyOrNoneInsteadOfFind", + "name": "UseAnyOrNoneInsteadOfFind", + "shortDescription": { + "text": "Use `any` or `none` instead of `find` and `null` checks." + } + }, + { + "helpUri": "https://detekt.dev/style.html#unnecessarybackticks", + "id": "detekt.style.UnnecessaryBackticks", + "name": "UnnecessaryBackticks", + "shortDescription": { + "text": "Backticks are unnecessary." + } + }, + { + "helpUri": "https://detekt.dev/style.html#maxchainedcallsonsameline", + "id": "detekt.style.MaxChainedCallsOnSameLine", + "name": "MaxChainedCallsOnSameLine", + "shortDescription": { + "text": "Chained calls beyond the maximum should be wrapped to a new line." + } + }, + { + "helpUri": "https://detekt.dev/style.html#alsocouldbeapply", + "id": "detekt.style.AlsoCouldBeApply", + "name": "AlsoCouldBeApply", + "shortDescription": { + "text": "When an `also` block contains only `it`-started expressions, simplify it to the `apply` block." + } + }, + { + "helpUri": "https://detekt.dev/style.html#usesumofinsteadofflatmapsize", + "id": "detekt.style.UseSumOfInsteadOfFlatMapSize", + "name": "UseSumOfInsteadOfFlatMapSize", + "shortDescription": { + "text": "Use `sumOf` instead of `flatMap` and `size/count` calls" + } + } + ], + "semanticVersion": "1.22.0", + "version": "1.22.0" + } + } + } + ] +} \ No newline at end of file diff --git a/reports-generated/code-analysis/detekt.xml b/reports-generated/code-analysis/detekt.xml new file mode 100644 index 00000000..b81d32ce --- /dev/null +++ b/reports-generated/code-analysis/detekt.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/reports-generated/code-analysis/index.html b/reports-generated/code-analysis/index.html new file mode 100644 index 00000000..626e34d1 --- /dev/null +++ b/reports-generated/code-analysis/index.html @@ -0,0 +1,966 @@ + + + + + + detekt report + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Metrics

    + +
    +
      +
    • 221 number of properties
    • +
    • 170 number of functions
    • +
    • 56 number of classes
    • +
    • 11 number of packages
    • +
    • 47 number of kt files
    • +
    +
    + + +

    Complexity Report

    + +
    +
      +
    • 4,755 lines of code (loc)
    • +
    • 3,967 source lines of code (sloc)
    • +
    • 3,043 logical lines of code (lloc)
    • +
    • 37 comment lines of code (cloc)
    • +
    • 315 cyclomatic complexity (mcc)
    • +
    • 100 cognitive complexity
    • +
    • 71 number of total code smells
    • +
    • 0% comment source ratio
    • +
    • 103 mcc per 1,000 lloc
    • +
    • 23 code smells per 1,000 lloc
    • +
    +
    + + +

    Findings

    +
    Total: 71 +

    complexity: 15

    +
    + LargeClass: 1 One class should have one responsibility. Large classes tend to handle many things at once. Split up large classes into smaller classes that are easier to understand. +Documentation +
      +
    • semver-project-gradle-plugin/test/kotlin/com/javiersc/semver/project/gradle/plugin/GitTagTest.kt:27:16Class GitTagTest is too large. Consider splitting it into smaller pieces. +
        24 import kotlin.test.Test
      +  25 import org.eclipse.jgit.lib.Ref
      +  26 
      +  27 internal class GitTagTest {
      +  28 
      +  29     @Test
      +  30     fun `tags in repo`() {
      +
      +
    • +
    +
    +
    + LongMethod: 8 One method should have one responsibility. Long methods tend to handle many things at once. Prefer smaller methods to make them easier to understand. +Documentation +
      +
    • semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/CalculatedVersion.kt:8:14The function calculatedVersion is too long (85). The maximum length is 60. +
         5 import com.javiersc.semver.project.gradle.plugin.internal.git.commitsBetweenTwoCommitsIncludingLastExcludingFirst
      +   6 
      +   7 @Suppress("ComplexMethod")
      +   8 internal fun calculatedVersion(
      +   9     stageProperty: String?,
      +  10     scopeProperty: String?,
      +  11     isCreatingSemverTag: Boolean,
      +
      +
    • +
    • semver-project-gradle-plugin/test/kotlin/com/javiersc/semver/project/gradle/plugin/GitTagTest.kt:492:9The function version tags in current branch is too long (85). The maximum length is 60. +
       489     }
      + 490 
      + 491     @Test
      + 492     fun `version tags in current branch`() {
      + 493         initialCommitAnd {
      + 494             git.tag().setName("hello").call()
      + 495             git.tag().setName("vhello").call()
      +
      +
    • +
    • semver-project-gradle-plugin/test/kotlin/com/javiersc/semver/project/gradle/plugin/GitTagTest.kt:587:9The function version tags sorted by semver is too long (85). The maximum length is 60. +
       584     }
      + 585 
      + 586     @Test
      + 587     fun `version tags sorted by semver`() {
      + 588         initialCommitAnd {
      + 589             git.tag().setName("hello").call()
      + 590             git.tag().setName("vhello").call()
      +
      +
    • +
    • semver-project-gradle-plugin/test/kotlin/com/javiersc/semver/project/gradle/plugin/GitTagTest.kt:685:9The function version tags sorted by timeline or semver 1 is too long (89). The maximum length is 60. +
       682     }
      + 683 
      + 684     @Test
      + 685     fun `version tags sorted by timeline or semver 1`() {
      + 686         initialCommitAnd {
      + 687             git.tag().setName("hello").call()
      + 688             git.tag().setName("vhello").call()
      +
      +
    • +
    • semver-project-gradle-plugin/test/kotlin/com/javiersc/semver/project/gradle/plugin/GitTagTest.kt:787:9The function version tags sorted by timeline or semver 2 is too long (169). The maximum length is 60. +
       784     }
      + 785 
      + 786     @Test
      + 787     fun `version tags sorted by timeline or semver 2`() {
      + 788         initialCommitAnd {
      + 789             git.tag().setName("hello").call()
      + 790             git.tag().setName("vhello").call()
      +
      +
    • +
    • semver-project-gradle-plugin/test/kotlin/com/javiersc/semver/project/gradle/plugin/GitTagTest.kt:976:9The function last version tag in current branch is too long (71). The maximum length is 60. +
       973     }
      + 974 
      + 975     @Test
      + 976     fun `last version tag in current branch`() {
      + 977         initialCommitAnd {
      + 978             git.tag().setName("hello").call()
      + 979             git.tag().setName("vhello").call()
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/MassiveTagsInSameCommitTest.kt:11:9The function massive tags in same commit is too long (67). The maximum length is 60. +
         8 
      +   9     @Test
      +  10     @Suppress("ComplexMethod")
      +  11     fun `massive tags in same commit`() {
      +  12         gradleTestKitTest("examples/one-project") {
      +  13             Git.init().setDirectory(projectDir).call()
      +  14 
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/TagsOrderTest.kt:11:9The function random is too long (63). The maximum length is 60. +
         8 internal class TagsOrderTest : GradleTestKitTest() {
      +   9 
      +  10     @Test
      +  11     fun random() {
      +  12         gradleTestKitTest("tags-order/random") {
      +  13             projectDir.generateInitialCommitAddVersionTagAndAddNewCommit()
      +  14 
      +
      +
    • +
    +
    +
    + LongParameterList: 2 The more parameters a function has the more complex it is. Long parameter lists are often used to control complex algorithms and violate the Single Responsibility Principle. Prefer functions with short parameter lists. +Documentation +
      +
    • semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/CalculatedVersion.kt:8:31The function calculatedVersion(stageProperty: String?, scopeProperty: String?, isCreatingSemverTag: Boolean, lastSemverMajorInCurrentBranch: Int, lastSemverMinorInCurrentBranch: Int, lastSemverPatchInCurrentBranch: Int, lastSemverStageInCurrentBranch: String?, lastSemverNumInCurrentBranch: Int?, versionTagsInCurrentBranch: List<String>, clean: Boolean, checkClean: Boolean, lastCommitInCurrentBranch: String?, commitsInCurrentBranch: List<String>, headCommit: String, lastVersionCommitInCurrentBranch: String?) has too many parameters. The current threshold is set to 6. +
         5 import com.javiersc.semver.project.gradle.plugin.internal.git.commitsBetweenTwoCommitsIncludingLastExcludingFirst
      +   6 
      +   7 @Suppress("ComplexMethod")
      +   8 internal fun calculatedVersion(
      +   9     stageProperty: String?,
      +  10     scopeProperty: String?,
      +  11     isCreatingSemverTag: Boolean,
      +
      +
    • +
    • semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/CalculatedVersion.kt:118:44The function calculateAdditionalVersionData(clean: Boolean, checkClean: Boolean, lastCommitInCurrentBranch: String?, commitsInCurrentBranch: List<String>, isThereVersionTags: Boolean, headCommit: String, lastVersionCommitInCurrentBranch: String?) has too many parameters. The current threshold is set to 6. +
       115     return calculatedVersion
      + 116 }
      + 117 
      + 118 internal fun calculateAdditionalVersionData(
      + 119     clean: Boolean = true,
      + 120     checkClean: Boolean = true,
      + 121     lastCommitInCurrentBranch: String?,
      +
      +
    • +
    +
    +
    + TooManyFunctions: 4 Too many functions inside a/an file/class/object/interface always indicate a violation of the single responsibility principle. Maybe the file/class/object/interface wants to manage too many things at once. Extract functionality which clearly belongs together. +Documentation +
      +
    • semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt:26:16Class 'GitCache' with '13' functions detected. Defined threshold inside classes is set to '11' +
        23 
      +  24 private var gitCache: GitCache? = null
      +  25 
      +  26 internal class GitCache
      +  27 private constructor(
      +  28     private val gitDir: File,
      +  29     maxCount: Provider<Int>? = null,
      +
      +
    • +
    • semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitRefGitExtensions.kt:1:1File '/home/runner/work/semver-gradle-plugin/semver-gradle-plugin/semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitRefGitExtensions.kt' with '11' functions detected. Defined threshold inside files is set to '11' +
         1 package com.javiersc.semver.project.gradle.plugin.internal.git
      +   2 
      +   3 import com.javiersc.semver.Version
      +   4 import org.eclipse.jgit.api.Git
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:26:16Class 'MultiProjectExampleTest' with '16' functions detected. Defined threshold inside classes is set to '11' +
        23  * - `library-nine` uses no prefix
      +  24  * - `library-ten` uses no prefix
      +  25  */
      +  26 internal class MultiProjectExampleTest : GradleTestKitTest() {
      +  27 
      +  28     @Test
      +  29     fun `multi project`() {
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:12:16Class 'OneProjectExampleTest' with '13' functions detected. Defined threshold inside classes is set to '11' +
         9 import org.eclipse.jgit.api.Git
      +  10 import org.gradle.testkit.runner.GradleRunner
      +  11 
      +  12 internal class OneProjectExampleTest : GradleTestKitTest() {
      +  13 
      +  14     @Test
      +  15     fun `one project`() {
      +
      +
    • +
    +
    +

    exceptions: 1

    +
    + SwallowedException: 1 The caught exception is swallowed. The original exception could be lost. +Documentation +
      +
    • semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/services/GitBuildService.kt:111:14The caught exception is swallowed. The original exception could be lost. +
       108 internal fun Git.hasCommits(): Boolean =
      + 109     try {
      + 110         commitsInCurrentBranchRevCommit.isNotEmpty()
      + 111     } catch (exception: NoHeadException) {
      + 112         false
      + 113     }
      + 114 
      +
      +
    • +
    +
    +

    naming: 50

    +
    + FunctionNaming: 47 Function names should follow the naming convention set in the configuration. +Documentation +
      +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GitHubVariablesTest.kt:41:9Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        38     }
      +  39 
      +  40     @Test
      +  41     fun `setting GITHUB_ENV`() {
      +  42         gradleTestKitTest("github-variables") {
      +  43             setEnvironmentVariables()
      +  44 
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GitHubVariablesTest.kt:106:9Function names should match the pattern: [a-z][a-zA-Z0-9]* +
       103     }
      + 104 
      + 105     @Test
      + 106     fun `setting GITHUB_OUTPUT`() {
      + 107         gradleTestKitTest("github-variables") {
      + 108             setEnvironmentVariables()
      + 109 
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt:14:9Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        11 class GradleFeaturesTest : GradleTestKitTest() {
      +  12 
      +  13     @Test
      +  14     fun `android configuration cache clean v1_0_0`() {
      +  15         gradleTestKitTest("gradle-features/android configuration cache clean v1_0_0") {
      +  16             beforeTest()
      +  17             testConfigurationCache(expectTaskOutcome = TaskOutcome.SUCCESS)
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt:22:9Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        19     }
      +  20 
      +  21     @Test
      +  22     fun `android build cache clean v1_0_0`() {
      +  23         gradleTestKitTest("gradle-features/android build cache clean v1_0_0") {
      +  24             beforeTest()
      +  25             testBuildCache()
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt:30:9Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        27     }
      +  28 
      +  29     @Test
      +  30     fun `build cache clean v1_0_0`() {
      +  31         gradleTestKitTest("gradle-features/build cache clean v1_0_0") {
      +  32             beforeTest()
      +  33             testBuildCache()
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt:38:9Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        35     }
      +  36 
      +  37     @Test
      +  38     fun `configuration cache clean v1_0_0`() {
      +  39         gradleTestKitTest("gradle-features/configuration cache clean v1_0_0") {
      +  40             beforeTest()
      +  41             testConfigurationCache(expectTaskOutcome = TaskOutcome.SUCCESS)
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt:46:9Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        43     }
      +  44 
      +  45     @Test
      +  46     fun `project isolation clean v1_0_0`() {
      +  47         gradleTestKitTest("gradle-features/project isolation clean v1_0_0") { beforeTest() }
      +  48     }
      +  49 
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/MassiveTagsInSameCommitTest.kt:11:9Function names should match the pattern: [a-z][a-zA-Z0-9]* +
         8 
      +   9     @Test
      +  10     @Suppress("ComplexMethod")
      +  11     fun `massive tags in same commit`() {
      +  12         gradleTestKitTest("examples/one-project") {
      +  13             Git.init().setDirectory(projectDir).call()
      +  14 
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/PropertiesTest.kt:31:9Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        28     }
      +  29 
      +  30     @Test
      +  31     fun `stage and scope`() {
      +  32         runPropertyTestsBasedOnResourceDirectory("stage+scope")
      +  33     }
      +  34 
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/PushSemverTagTaskTest.kt:18:9Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        15 class PushSemverTagTaskTest : GradleTestKitTest() {
      +  16 
      +  17     @Test
      +  18     fun `push tag`() {
      +  19         gradleTestKitTest("push-tag") {
      +  20             projectDir.generateInitialCommitAddVersionTagAndAddNewCommit()
      +  21 
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/VersionBuildDirTest.kt:12:9Function names should match the pattern: [a-z][a-zA-Z0-9]* +
         9 internal class VersionBuildDirTest : GradleTestKitTest() {
      +  10 
      +  11     @Test
      +  12     fun `clean v1_0_0`() {
      +  13         gradleTestKitTest("version-build-dir/clean v1_0_0") {
      +  14             projectDir.generateInitialCommitAddVersionTagAndAddNewCommit()
      +  15             git.tag().setObjectId(git.headRevCommitInBranch).setName("v1.0.0").call()
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/VersionBuildDirTest.kt:24:9Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        21     }
      +  22 
      +  23     @Test
      +  24     fun `clean v1_0_0 configuration phase`() {
      +  25         gradleTestKitTest("version-build-dir/clean v1_0_0 configuration phase") {
      +  26             projectDir.generateInitialCommitAddVersionTagAndAddNewCommit()
      +  27             git.tag().setObjectId(git.headRevCommitInBranch).setName("v1.0.0").call()
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/VersionBuildDirTest.kt:38:9Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        35     }
      +  36 
      +  37     @Test
      +  38     fun `clean without tag in current commit - hash`() {
      +  39         gradleTestKitTest("version-build-dir/clean-with-no-tag-current-commit (hash)") {
      +  40             projectDir.generateInitialCommitAddVersionTagAndAddNewCommit()
      +  41 
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/VersionBuildDirTest.kt:49:9Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        46     }
      +  47 
      +  48     @Test
      +  49     fun `no clean without tag in current commit - dirty`() {
      +  50         gradleTestKitTest("version-build-dir/no-clean-with-no-tag-current-commit (dirty)") {
      +  51             projectDir.generateInitialCommitAddVersionTagAndAddNewCommit()
      +  52             projectDir.resolve("new-2.txt").createNewFile()
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/VersionBuildDirTest.kt:73:9Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        70     }
      +  71 
      +  72     @Test
      +  73     fun `no clean createSemverTag should fail`() {
      +  74         gradleTestKitTest("version-build-dir/no-clean-with-no-tag-current-commit (dirty)") {
      +  75             projectDir.generateInitialCommitAddVersionTagAndAddNewCommit()
      +  76             projectDir.resolve("new-2.txt").createNewFile()
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:29:9Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        26 internal class MultiProjectExampleTest : GradleTestKitTest() {
      +  27 
      +  28     @Test
      +  29     fun `multi project`() {
      +  30         gradleTestKitTest("examples/multi-project") {
      +  31             `0_ Initial repo state`()
      +  32             `1_ Run gradlew assemble`()
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:49:30Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        46         }
      +  47     }
      +  48 
      +  49     private fun GradleRunner.`0_ Initial repo state`() {
      +  50         Git.init().setDirectory(projectDir).call()
      +  51         projectDir.createGitIgnore()
      +  52         git.add().addFilepattern(".").call()
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:68:30Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        65         git.add().addFilepattern(".").call()
      +  66     }
      +  67 
      +  68     private fun GradleRunner.`1_ Run gradlew assemble`() {
      +  69         gradlew("assemble")
      +  70 
      +  71         projectDirByName("library-one-a").assertVersion("a", "1.0.0", Insignificant.Dirty)
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:83:30Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        80         projectDirByName("library-ten").assertVersion("", "1.0.0", Insignificant.Dirty)
      +  81     }
      +  82 
      +  83     private fun GradleRunner.`2_ Create a new file in library-one-a and run gradlew assemble`() {
      +  84         projectDirByName("library-one-a").resolve("new2.txt").createNewFile()
      +  85 
      +  86         gradlew("assemble")
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:101:10Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        98     }
      +  99 
      + 100     private fun GradleRunner
      + 101         .`3_ Add the new file to git and commit it, then run gradlew createSemverTag with tagPrefix=a`() {
      + 102         git.add().addFilepattern(".").call()
      + 103         git.commit().setMessage("Add new2 to library-one-a").call()
      + 104 
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:119:30Function names should match the pattern: [a-z][a-zA-Z0-9]* +
       116         projectDirByName("library-ten").assertVersion("", "1.0.0", Insignificant.Hash)
      + 117     }
      + 118 
      + 119     private fun GradleRunner.`4_ Run gradlew assemble`() {
      + 120         gradlew("assemble")
      + 121 
      + 122         projectDirByName("library-one-a").assertVersion("a", "1.0.1")
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:135:10Function names should match the pattern: [a-z][a-zA-Z0-9]* +
       132     }
      + 133 
      + 134     private fun GradleRunner
      + 135         .`5_ Create, add and commit a new file in library-one-a, then run gradlew assemble`() {
      + 136         projectDirByName("library-one-a").resolve("new5.txt").createNewFile()
      + 137         git.add().addFilepattern(".").call()
      + 138         git.commit().setMessage("Add new5 to library-one-a").call()
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:154:30Function names should match the pattern: [a-z][a-zA-Z0-9]* +
       151         projectDirByName("library-ten").assertVersion("", "1.0.0", Insignificant.Hash)
      + 152     }
      + 153 
      + 154     private fun GradleRunner.`6_ Run gradlew createSemverTag tagPrefix=a`() {
      + 155         gradlew("createSemverTag", "-Psemver.tagPrefix=a")
      + 156 
      + 157         projectDirByName("library-one-a").assertVersion("a", "1.0.2")
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:170:10Function names should match the pattern: [a-z][a-zA-Z0-9]* +
       167     }
      + 168 
      + 169     private fun GradleRunner
      + 170         .`7_ Create, add to git and commit a new file in library-one-a, then run gradlew createSemverTag stage=alpha tagPrefix=a`() {
      + 171         projectDirByName("library-one-a").resolve("new7.txt").createNewFile()
      + 172         git.add().addFilepattern(".").call()
      + 173         git.commit().setMessage("Add new7 to library-one-a").call()
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:189:30Function names should match the pattern: [a-z][a-zA-Z0-9]* +
       186         projectDirByName("library-ten").assertVersion("", "1.0.0", Insignificant.Hash)
      + 187     }
      + 188 
      + 189     private fun GradleRunner.`8_ Run gradlew createSemverTag stage=beta tagPrefix=a`() {
      + 190         gradlew("createSemverTag", "-Psemver.stage=beta", "-Psemver.tagPrefix=a")
      + 191 
      + 192         projectDirByName("library-one-a").assertVersion("a", "1.0.3-beta.1")
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:205:10Function names should match the pattern: [a-z][a-zA-Z0-9]* +
       202     }
      + 203 
      + 204     private fun GradleRunner
      + 205         .`9_ Create, add to git and commit a new file in library-one-a, then run gradlew createSemverTag stage=final tagPrefix=a`() {
      + 206         projectDirByName("library-one-a").resolve("new9.txt").createNewFile()
      + 207         git.add().addFilepattern(".").call()
      + 208         git.commit().setMessage("Add new9 to library-one-a").call()
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:225:10Function names should match the pattern: [a-z][a-zA-Z0-9]* +
       222     }
      + 223 
      + 224     private fun GradleRunner
      + 225         .`10_ Run gradlew createSemverTag stage=final scope=major tagPrefix=a`() {
      + 226         gradlew(
      + 227             "createSemverTag",
      + 228             "-Psemver.stage=final",
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:245:30Function names should match the pattern: [a-z][a-zA-Z0-9]* +
       242         projectDirByName("library-ten").assertVersion("", "1.0.0", Insignificant.Hash)
      + 243     }
      + 244 
      + 245     private fun GradleRunner.`11_ Run gradlew printSemver stage=snapshot tagPrefix=a`() {
      + 246         gradlew("printSemver", "-Psemver.stage=snapshot", "-Psemver.tagPrefix=a")
      + 247 
      + 248         projectDirByName("library-one-a").assertVersion("a", "2.0.1-SNAPSHOT")
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:260:30Function names should match the pattern: [a-z][a-zA-Z0-9]* +
       257         projectDirByName("library-ten").assertVersion("", "1.0.0", Insignificant.Hash)
      + 258     }
      + 259 
      + 260     private fun GradleRunner.`12_ Run gradlew createSemverTag scope=minor tagPrefix=b`() {
      + 261         gradlew("createSemverTag", "-Psemver.scope=minor", "-Psemver.tagPrefix=b")
      + 262 
      + 263         projectDirByName("library-one-a").assertVersion("a", "2.0.0")
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:275:30Function names should match the pattern: [a-z][a-zA-Z0-9]* +
       272         projectDirByName("library-ten").assertVersion("", "1.0.0", Insignificant.Hash)
      + 273     }
      + 274 
      + 275     private fun GradleRunner.`13_ Run gradlew createSemverTag stage=rc tagPrefix=c`() {
      + 276         gradlew("createSemverTag", "-Psemver.stage=rc", "-Psemver.tagPrefix=c")
      + 277 
      + 278         projectDirByName("library-one-a").assertVersion("a", "2.0.0")
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:290:30Function names should match the pattern: [a-z][a-zA-Z0-9]* +
       287         projectDirByName("library-ten").assertVersion("", "1.0.0", Insignificant.Hash)
      + 288     }
      + 289 
      + 290     private fun GradleRunner.`14_ Run gradlew createSemverTag stage=dev`() {
      + 291         gradlew("createSemverTag", "-Psemver.stage=dev")
      + 292 
      + 293         projectDirByName("library-one-a").assertVersion("a", "2.0.0")
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:15:9Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        12 internal class OneProjectExampleTest : GradleTestKitTest() {
      +  13 
      +  14     @Test
      +  15     fun `one project`() {
      +  16         gradleTestKitTest("examples/one-project") {
      +  17             `0_ Initial repo state`()
      +  18             `1_ Run gradlew assemble`()
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:32:30Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        29         }
      +  30     }
      +  31 
      +  32     private fun GradleRunner.`0_ Initial repo state`() {
      +  33         Git.init().setDirectory(projectDir).call()
      +  34         projectDir.createGitIgnore()
      +  35         git.add().addFilepattern(".").call()
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:48:30Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        45         git.commit().setMessage("Add plugin").call()
      +  46     }
      +  47 
      +  48     private fun GradleRunner.`1_ Run gradlew assemble`() {
      +  49         gradlew("assemble", "-Psemver.tagPrefix=v")
      +  50 
      +  51         projectDir.assertVersion("v", "0.1.0", Insignificant.Hash)
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:54:30Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        51         projectDir.assertVersion("v", "0.1.0", Insignificant.Hash)
      +  52     }
      +  53 
      +  54     private fun GradleRunner.`2_ Create a new file and run gradlew assemble`() {
      +  55         projectDir.resolve("new2.txt").createNewFile()
      +  56 
      +  57         gradlew("assemble", "-Psemver.tagPrefix=v")
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:63:10Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        60     }
      +  61 
      +  62     private fun GradleRunner
      +  63         .`3_ Add the new file to git, commit it, and run gradlew createSemverTag`() {
      +  64         git.add().addFilepattern(".").call()
      +  65         git.commit().setMessage("Add new2").call()
      +  66 
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:72:30Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        69         projectDir.assertVersion("v", "0.1.0")
      +  70     }
      +  71 
      +  72     private fun GradleRunner.`4_ Run gradlew assemble`() {
      +  73         gradlew("assemble", "-Psemver.tagPrefix=v")
      +  74 
      +  75         projectDir.assertVersion("v", "0.1.0")
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:78:30Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        75         projectDir.assertVersion("v", "0.1.0")
      +  76     }
      +  77 
      +  78     private fun GradleRunner.`5_ Create and add new file and run`() {
      +  79         projectDir.resolve("new5.txt").createNewFile()
      +  80         git.add().addFilepattern(".").call()
      +  81         git.commit().setMessage("Add new5").call()
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:87:30Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        84         projectDir.assertVersion("v", "0.1.0", Insignificant.Hash)
      +  85     }
      +  86 
      +  87     private fun GradleRunner.`6_ Run gradlew createSemverTag`() {
      +  88         gradlew("createSemverTag", "-Psemver.tagPrefix=v")
      +  89 
      +  90         projectDir.assertVersion("v", "0.1.1")
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:94:10Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        91     }
      +  92 
      +  93     private fun GradleRunner
      +  94         .`7_ Create and add to git a new file, then run gradlew createSemverTag stage=alpha`() {
      +  95         projectDir.resolve("new7.txt").createNewFile()
      +  96         git.add().addFilepattern(".").call()
      +  97         git.commit().setMessage("Add new7").call()
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:103:30Function names should match the pattern: [a-z][a-zA-Z0-9]* +
       100         projectDir.assertVersion("v", "0.1.2-alpha.1")
      + 101     }
      + 102 
      + 103     private fun GradleRunner.`8_ Run gradlew createSemverTag stage=beta`() {
      + 104         gradlew("createSemverTag", "-Psemver.stage=beta", "-Psemver.tagPrefix=v")
      + 105 
      + 106         projectDir.assertVersion("v", "0.1.2-beta.1")
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:109:30Function names should match the pattern: [a-z][a-zA-Z0-9]* +
       106         projectDir.assertVersion("v", "0.1.2-beta.1")
      + 107     }
      + 108 
      + 109     private fun GradleRunner.`9_ Run gradlew createSemverTag stage=final`() {
      + 110         gradlew("createSemverTag", "-Psemver.stage=final", "-Psemver.tagPrefix=v")
      + 111 
      + 112         projectDir.assertVersion("v", "0.1.2")
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:115:30Function names should match the pattern: [a-z][a-zA-Z0-9]* +
       112         projectDir.assertVersion("v", "0.1.2")
      + 113     }
      + 114 
      + 115     private fun GradleRunner.`10_ Run gradlew createSemverTag stage=final scope=major`() {
      + 116         gradlew(
      + 117             "createSemverTag",
      + 118             "-Psemver.stage=final",
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/OneProjectExampleTest.kt:126:30Function names should match the pattern: [a-z][a-zA-Z0-9]* +
       123         projectDir.assertVersion("v", "1.0.0")
      + 124     }
      + 125 
      + 126     private fun GradleRunner.`11_ Run gradlew createSemverTag stage=snapshot`() {
      + 127         gradlew("createSemverTag", "-Psemver.stage=snapshot", "-Psemver.tagPrefix=v")
      + 128 
      + 129         projectDir.assertVersion("v", "1.0.1-SNAPSHOT")
      +
      +
    • +
    • semver-project-gradle-plugin/testIntegration/kotlin/com/javiersc/semver/project/gradle/plugin/SemverIntegrationTest.kt:20:9Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        17 class SemverIntegrationTest : GradleProjectTest() {
      +  18 
      +  19     @Test
      +  20     fun `given a project which has no git when it builds then it only register semver extension`() {
      +  21         gradleProjectTest {
      +  22             pluginManager.apply(SemverProjectPlugin::class)
      +  23             extensions.findByName("semver").shouldNotBeNull()
      +
      +
    • +
    • semver-project-gradle-plugin/testIntegration/kotlin/com/javiersc/semver/project/gradle/plugin/SemverIntegrationTest.kt:30:9Function names should match the pattern: [a-z][a-zA-Z0-9]* +
        27     }
      +  28 
      +  29     @Test
      +  30     fun `given a project which has commits when it builds then it register semver extension`() {
      +  31         val beforeCommitTimestamp: Instant = Instant.now()
      +  32         gradleProjectTest {
      +  33             projectDir.resolve("last-tag.txt").apply {
      +
      +
    • +
    • semver-settings-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/settings/gradle/plugin/MultiProjectTest.kt:11:9Function names should match the pattern: [a-z][a-zA-Z0-9]* +
         8 internal class MultiProjectTest : GradleTestKitTest() {
      +   9 
      +  10     @Test
      +  11     fun `multi project test`() {
      +  12         gradleTestKitTest("multi-project") {
      +  13             val git = Git.init().setDirectory(projectDir).call()
      +  14             git.add().addFilepattern(".").call()
      +
      +
    • +
    +
    +
    + TopLevelPropertyNaming: 1 Top level property names should follow the naming convention set in the projects configuration. +Documentation +
      +
    • semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/SemverProperty.kt:7:20Top level constant names should match the pattern: [A-Z][_A-Z0-9]* +
         4 import org.gradle.api.Project
      +   5 import org.gradle.api.provider.Provider
      +   6 
      +   7 internal const val DefaultTagPrefix = ""
      +   8 
      +   9 internal val Project.projectTagPrefixProperty: Provider<String>
      +  10     get() = getSemverProperty(SemverProperty.ProjectTagPrefix)
      +
      +
    • +
    +
    +
    + VariableNaming: 2 Variable names should follow the naming convention set in the projects configuration. +Documentation +
      +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt:84:13Variable names should match the pattern: [a-z][A-Za-z0-9]* +
        81         build()
      +  82         projectDir.assertVersion("v", "0.9.0", Hash)
      +  83 
      +  84         val LAST_0_9_0_HASH_1 = projectDir.resolve("build/semver/version.txt").readLines()[1]
      +  85         projectDir
      +  86             .resolve("expect-version.txt")
      +  87             .writeText(
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt:100:13Variable names should match the pattern: [a-z][A-Za-z0-9]* +
        97         git.commit().setMessage("Change expect-version again").call()
      +  98 
      +  99         build()
      + 100         val LAST_0_9_0_HASH_2 = projectDir.resolve("build/semver/version.txt").readLines()[1]
      + 101 
      + 102         LAST_0_9_0_HASH_1.shouldNotBe(LAST_0_9_0_HASH_2)
      + 103 
      +
      +
    • +
    +
    +

    style: 5

    +
    + ForbiddenComment: 1 Flags a forbidden comment. +Documentation +
      +
    • semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt:215:13This comment contains 'TODO:' that has been defined as forbidden in detekt. +
       212 
      + 213         internal operator fun invoke(gitDir: File, maxCount: Provider<Int>? = null): GitCache {
      + 214             // val cache: GitCache? = gitCache
      + 215             // TODO: improve in-memory cache as `cache.shouldRefresh()` is flaky
      + 216             // if (cache == null || cache.shouldRefresh() || true) {
      + 217             gitCache = GitCache(gitDir, maxCount)
      + 218             // }
      +
      +
    • +
    +
    +
    + MaxLineLength: 4 Line detected, which is longer than the defined maximum line length in the code style. +Documentation +
      +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:38:13Line detected, which is longer than the defined maximum line length in the code style. +
        35             `4_ Run gradlew assemble`()
      +  36             `5_ Create, add and commit a new file in library-one-a, then run gradlew assemble`()
      +  37             `6_ Run gradlew createSemverTag tagPrefix=a`()
      +  38             `7_ Create, add to git and commit a new file in library-one-a, then run gradlew createSemverTag stage=alpha tagPrefix=a`()
      +  39             `8_ Run gradlew createSemverTag stage=beta tagPrefix=a`()
      +  40             `9_ Create, add to git and commit a new file in library-one-a, then run gradlew createSemverTag stage=final tagPrefix=a`()
      +  41             `10_ Run gradlew createSemverTag stage=final scope=major tagPrefix=a`()
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:40:13Line detected, which is longer than the defined maximum line length in the code style. +
        37             `6_ Run gradlew createSemverTag tagPrefix=a`()
      +  38             `7_ Create, add to git and commit a new file in library-one-a, then run gradlew createSemverTag stage=alpha tagPrefix=a`()
      +  39             `8_ Run gradlew createSemverTag stage=beta tagPrefix=a`()
      +  40             `9_ Create, add to git and commit a new file in library-one-a, then run gradlew createSemverTag stage=final tagPrefix=a`()
      +  41             `10_ Run gradlew createSemverTag stage=final scope=major tagPrefix=a`()
      +  42             `11_ Run gradlew printSemver stage=snapshot tagPrefix=a`()
      +  43             `12_ Run gradlew createSemverTag scope=minor tagPrefix=b`()
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:170:9Line detected, which is longer than the defined maximum line length in the code style. +
       167     }
      + 168 
      + 169     private fun GradleRunner
      + 170         .`7_ Create, add to git and commit a new file in library-one-a, then run gradlew createSemverTag stage=alpha tagPrefix=a`() {
      + 171         projectDirByName("library-one-a").resolve("new7.txt").createNewFile()
      + 172         git.add().addFilepattern(".").call()
      + 173         git.commit().setMessage("Add new7 to library-one-a").call()
      +
      +
    • +
    • semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/examples/MultiProjectExampleTest.kt:205:9Line detected, which is longer than the defined maximum line length in the code style. +
       202     }
      + 203 
      + 204     private fun GradleRunner
      + 205         .`9_ Create, add to git and commit a new file in library-one-a, then run gradlew createSemverTag stage=final tagPrefix=a`() {
      + 206         projectDirByName("library-one-a").resolve("new9.txt").createNewFile()
      + 207         git.add().addFilepattern(".").call()
      + 208         git.commit().setMessage("Add new9 to library-one-a").call()
      +
      +
    • +
    +
    +
    + + +generated with detekt version 1.22.0 on 2023-03-11 14:03:51 UTC. + + + diff --git a/reports-generated/code-coverage/css/coverage.css b/reports-generated/code-coverage/css/coverage.css new file mode 100644 index 00000000..cef77651 --- /dev/null +++ b/reports-generated/code-coverage/css/coverage.css @@ -0,0 +1,154 @@ +/* + * Copyright 2000-2021 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +* { + margin: 0; + padding: 0; +} + +body { + background-color: #fff; + font-family: helvetica neue, tahoma, arial, sans-serif; + font-size: 82%; + color: #151515; +} + +h1 { + margin: 0.5em 0; + color: #010101; + font-weight: normal; + font-size: 18px; +} + +h2 { + margin: 0.5em 0; + color: #010101; + font-weight: normal; + font-size: 16px; +} + +a { + color: #1564C2; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +span.separator { + color: #9BA9BA; + padding-left: 5px; + padding-right: 5px; +} + +div.content { + width: 99%; +} + +table.coverageStats { + width: 100%; + border-collapse: collapse; +} + +table.overallStats { + width: 20%; +} + +table.coverageStats td, table.coverageStats th { + padding: 4px 2px; + border-bottom: 1px solid #ccc; +} + +table.coverageStats th { + background-color: #959BA4; + border: none; + font-weight: bold; + text-align: left; + color: #FFF; +} + +table.coverageStats th.coverageStat { + width: 15%; +} + +table.coverageStats th a { + color: #FFF; +} + +table.coverageStats th a:hover { + text-decoration: none; +} + +table.coverageStats th.sortedDesc a { + background: url(../img/arrowDown.gif) no-repeat 100% 2px; + padding-right: 20px; +} + +table.coverageStats th.sortedAsc a { + background: url(../img/arrowUp.gif) no-repeat 100% 2px; + padding-right: 20px; +} + +div.footer { + margin: 2em .5em; + font-size: 85%; + text-align: left; + line-height: 140%; +} + +code.sourceCode { + width: 100%; + border: 1px solid #ccc; + font: normal 12px 'Menlo', 'Bitstream Vera Sans Mono', 'Courier New', 'Courier', monospace; + white-space: pre; +} + +code.sourceCode b { + font-weight: normal; +} + +code.sourceCode span.number { + color: #151515; +} + +code.sourceCode .fc { + background-color: #cfc; +} + +code.sourceCode .pc { + background-color: #ffc; +} + +code.sourceCode .nc { + background-color: #fcc; +} + +.percent, .absValue { + font-size: 90%; +} + +.percent .green, .absValue .green { + color: #32cc32; +} + +.percent .red, .absValue .red { + color: #f00; +} + +.percent .totalDiff { + color: #3f3f3f; +} diff --git a/reports-generated/code-coverage/css/idea.min.css b/reports-generated/code-coverage/css/idea.min.css new file mode 100644 index 00000000..a8d5292b --- /dev/null +++ b/reports-generated/code-coverage/css/idea.min.css @@ -0,0 +1,118 @@ +/* + * Copyright 2000-2021 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* +Intellij Idea-like styling (c) Vasily Polovnyov +*/ + +.hljs { + color: #000; + background: #fff; +} + +.hljs-subst, +.hljs-title { + font-weight: normal; + color: #000; +} + +.hljs-comment, +.hljs-quote { + color: #808080; + font-style: italic; +} + +.hljs-meta { + color: #808000; +} + +.hljs-tag { + background: #efefef; +} + +.hljs-section, +.hljs-name, +.hljs-literal, +.hljs-keyword, +.hljs-selector-tag, +.hljs-type, +.hljs-selector-id, +.hljs-selector-class { + font-weight: bold; + color: #000080; +} + +.hljs-attribute, +.hljs-number, +.hljs-regexp, +.hljs-link { + font-weight: bold; + color: #0000ff; +} + +.hljs-number, +.hljs-regexp, +.hljs-link { + font-weight: normal; +} + +.hljs-string { + color: #008000; + font-weight: bold; +} + +.hljs-symbol, +.hljs-bullet, +.hljs-formula { + color: #000; + background: #d0eded; + font-style: italic; +} + +.hljs-doctag { + text-decoration: underline; +} + +.hljs-variable, +.hljs-template-variable { + color: #660e7a; +} + +.hljs-addition { + background: #baeeba; +} + +.hljs-deletion { + background: #ffc8bd; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-ln-numbers { + display: block; + float: left; + width: 3em; + border-right: 1px solid #ccc; + font-style: normal; + text-align: right; + background-color: #eee; +} diff --git a/reports-generated/code-coverage/img/arrowDown.gif b/reports-generated/code-coverage/img/arrowDown.gif new file mode 100644 index 00000000..a4ac9b4b Binary files /dev/null and b/reports-generated/code-coverage/img/arrowDown.gif differ diff --git a/reports-generated/code-coverage/img/arrowUp.gif b/reports-generated/code-coverage/img/arrowUp.gif new file mode 100644 index 00000000..d488db00 Binary files /dev/null and b/reports-generated/code-coverage/img/arrowUp.gif differ diff --git a/reports-generated/code-coverage/index.html b/reports-generated/code-coverage/index.html new file mode 100644 index 00000000..df1e7330 --- /dev/null +++ b/reports-generated/code-coverage/index.html @@ -0,0 +1,554 @@ + + + + + + Coverage Report > Summary + + + + + + +
    + + +

    Overall Coverage Summary

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    all classes + + 62% + + + (49/79) + + + + 65.1% + + + (123/189) + + + + 47.1% + + + (131/278) + + + + 62.9% + + + (394/626) + + + + 59.6% + + + (2788/4677) + +
    + +
    +

    Coverage Breakdown

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.gradle.tasks.extensions + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    com.javiersc.semver.gradle.plugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    com.javiersc.semver.project.gradle.plugin + + 87.5% + + + (7/8) + + + + 76.5% + + + (13/17) + + + + 37.5% + + + (3/8) + + + + 81.2% + + + (39/48) + + + + 77.7% + + + (233/300) + +
    com.javiersc.semver.project.gradle.plugin.extensions + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    com.javiersc.semver.project.gradle.plugin.internal + + 90.9% + + + (10/11) + + + + 87.1% + + + (27/31) + + + + 62.9% + + + (78/124) + + + + 81.4% + + + (118/145) + + + + 72.2% + + + (668/925) + +
    com.javiersc.semver.project.gradle.plugin.internal.git + + 95.5% + + + (21/22) + + + + 97.3% + + + (71/73) + + + + 74.2% + + + (46/62) + + + + 97.3% + + + (181/186) + + + + 97.7% + + + (1290/1321) + +
    com.javiersc.semver.project.gradle.plugin.services + + 60% + + + (3/5) + + + + 36.4% + + + (4/11) + + + + 5% + + + (1/20) + + + + 26.7% + + + (12/45) + + + + 25.7% + + + (86/335) + +
    com.javiersc.semver.project.gradle.plugin.tasks + + 16.7% + + + (4/24) + + + + 11.4% + + + (4/35) + + + + 0% + + + (0/34) + + + + 18.9% + + + (25/132) + + + + 30.3% + + + (379/1251) + +
    com.javiersc.semver.project.gradle.plugin.valuesources + + 75% + + + (3/4) + + + + 50% + + + (3/6) + + + + 4.5% + + + (1/22) + + + + 29.5% + + + (13/44) + + + + 36.9% + + + (132/358) + +
    com.javiersc.semver.settings.gradle.plugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    +
    + + + + + + + diff --git a/reports-generated/code-coverage/index_SORT_BY_BLOCK.html b/reports-generated/code-coverage/index_SORT_BY_BLOCK.html new file mode 100644 index 00000000..f32eec32 --- /dev/null +++ b/reports-generated/code-coverage/index_SORT_BY_BLOCK.html @@ -0,0 +1,554 @@ + + + + + + Coverage Report > Summary + + + + + + +
    + + +

    Overall Coverage Summary

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    all classes + + 62% + + + (49/79) + + + + 65.1% + + + (123/189) + + + + 47.1% + + + (131/278) + + + + 62.9% + + + (394/626) + + + + 59.6% + + + (2788/4677) + +
    + +
    +

    Coverage Breakdown

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.extensions + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    com.javiersc.semver.settings.gradle.plugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    com.javiersc.semver.gradle.plugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    com.javiersc.semver.project.gradle.plugin.tasks + + 16.7% + + + (4/24) + + + + 11.4% + + + (4/35) + + + + 0% + + + (0/34) + + + + 18.9% + + + (25/132) + + + + 30.3% + + + (379/1251) + +
    com.javiersc.semver.project.gradle.plugin.valuesources + + 75% + + + (3/4) + + + + 50% + + + (3/6) + + + + 4.5% + + + (1/22) + + + + 29.5% + + + (13/44) + + + + 36.9% + + + (132/358) + +
    com.javiersc.semver.project.gradle.plugin.services + + 60% + + + (3/5) + + + + 36.4% + + + (4/11) + + + + 5% + + + (1/20) + + + + 26.7% + + + (12/45) + + + + 25.7% + + + (86/335) + +
    com.javiersc.semver.project.gradle.plugin + + 87.5% + + + (7/8) + + + + 76.5% + + + (13/17) + + + + 37.5% + + + (3/8) + + + + 81.2% + + + (39/48) + + + + 77.7% + + + (233/300) + +
    com.javiersc.gradle.tasks.extensions + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    com.javiersc.semver.project.gradle.plugin.internal + + 90.9% + + + (10/11) + + + + 87.1% + + + (27/31) + + + + 62.9% + + + (78/124) + + + + 81.4% + + + (118/145) + + + + 72.2% + + + (668/925) + +
    com.javiersc.semver.project.gradle.plugin.internal.git + + 95.5% + + + (21/22) + + + + 97.3% + + + (71/73) + + + + 74.2% + + + (46/62) + + + + 97.3% + + + (181/186) + + + + 97.7% + + + (1290/1321) + +
    +
    + + + + + + + diff --git a/reports-generated/code-coverage/index_SORT_BY_BLOCK_DESC.html b/reports-generated/code-coverage/index_SORT_BY_BLOCK_DESC.html new file mode 100644 index 00000000..22afac09 --- /dev/null +++ b/reports-generated/code-coverage/index_SORT_BY_BLOCK_DESC.html @@ -0,0 +1,554 @@ + + + + + + Coverage Report > Summary + + + + + + +
    + + +

    Overall Coverage Summary

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    all classes + + 62% + + + (49/79) + + + + 65.1% + + + (123/189) + + + + 47.1% + + + (131/278) + + + + 62.9% + + + (394/626) + + + + 59.6% + + + (2788/4677) + +
    + +
    +

    Coverage Breakdown

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.internal.git + + 95.5% + + + (21/22) + + + + 97.3% + + + (71/73) + + + + 74.2% + + + (46/62) + + + + 97.3% + + + (181/186) + + + + 97.7% + + + (1290/1321) + +
    com.javiersc.semver.project.gradle.plugin.internal + + 90.9% + + + (10/11) + + + + 87.1% + + + (27/31) + + + + 62.9% + + + (78/124) + + + + 81.4% + + + (118/145) + + + + 72.2% + + + (668/925) + +
    com.javiersc.gradle.tasks.extensions + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    com.javiersc.semver.project.gradle.plugin + + 87.5% + + + (7/8) + + + + 76.5% + + + (13/17) + + + + 37.5% + + + (3/8) + + + + 81.2% + + + (39/48) + + + + 77.7% + + + (233/300) + +
    com.javiersc.semver.project.gradle.plugin.services + + 60% + + + (3/5) + + + + 36.4% + + + (4/11) + + + + 5% + + + (1/20) + + + + 26.7% + + + (12/45) + + + + 25.7% + + + (86/335) + +
    com.javiersc.semver.project.gradle.plugin.valuesources + + 75% + + + (3/4) + + + + 50% + + + (3/6) + + + + 4.5% + + + (1/22) + + + + 29.5% + + + (13/44) + + + + 36.9% + + + (132/358) + +
    com.javiersc.semver.project.gradle.plugin.tasks + + 16.7% + + + (4/24) + + + + 11.4% + + + (4/35) + + + + 0% + + + (0/34) + + + + 18.9% + + + (25/132) + + + + 30.3% + + + (379/1251) + +
    com.javiersc.semver.gradle.plugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    com.javiersc.semver.settings.gradle.plugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    com.javiersc.semver.project.gradle.plugin.extensions + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    +
    + + + + + + + diff --git a/reports-generated/code-coverage/index_SORT_BY_CLASS.html b/reports-generated/code-coverage/index_SORT_BY_CLASS.html new file mode 100644 index 00000000..68bfff0f --- /dev/null +++ b/reports-generated/code-coverage/index_SORT_BY_CLASS.html @@ -0,0 +1,554 @@ + + + + + + Coverage Report > Summary + + + + + + +
    + + +

    Overall Coverage Summary

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    all classes + + 62% + + + (49/79) + + + + 65.1% + + + (123/189) + + + + 47.1% + + + (131/278) + + + + 62.9% + + + (394/626) + + + + 59.6% + + + (2788/4677) + +
    + +
    +

    Coverage Breakdown

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.gradle.plugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    com.javiersc.semver.project.gradle.plugin.extensions + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    com.javiersc.semver.settings.gradle.plugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    com.javiersc.semver.project.gradle.plugin.tasks + + 16.7% + + + (4/24) + + + + 11.4% + + + (4/35) + + + + 0% + + + (0/34) + + + + 18.9% + + + (25/132) + + + + 30.3% + + + (379/1251) + +
    com.javiersc.semver.project.gradle.plugin.services + + 60% + + + (3/5) + + + + 36.4% + + + (4/11) + + + + 5% + + + (1/20) + + + + 26.7% + + + (12/45) + + + + 25.7% + + + (86/335) + +
    com.javiersc.semver.project.gradle.plugin.valuesources + + 75% + + + (3/4) + + + + 50% + + + (3/6) + + + + 4.5% + + + (1/22) + + + + 29.5% + + + (13/44) + + + + 36.9% + + + (132/358) + +
    com.javiersc.semver.project.gradle.plugin + + 87.5% + + + (7/8) + + + + 76.5% + + + (13/17) + + + + 37.5% + + + (3/8) + + + + 81.2% + + + (39/48) + + + + 77.7% + + + (233/300) + +
    com.javiersc.semver.project.gradle.plugin.internal + + 90.9% + + + (10/11) + + + + 87.1% + + + (27/31) + + + + 62.9% + + + (78/124) + + + + 81.4% + + + (118/145) + + + + 72.2% + + + (668/925) + +
    com.javiersc.semver.project.gradle.plugin.internal.git + + 95.5% + + + (21/22) + + + + 97.3% + + + (71/73) + + + + 74.2% + + + (46/62) + + + + 97.3% + + + (181/186) + + + + 97.7% + + + (1290/1321) + +
    com.javiersc.gradle.tasks.extensions + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    +
    + + + + + + + diff --git a/reports-generated/code-coverage/index_SORT_BY_CLASS_DESC.html b/reports-generated/code-coverage/index_SORT_BY_CLASS_DESC.html new file mode 100644 index 00000000..a5612356 --- /dev/null +++ b/reports-generated/code-coverage/index_SORT_BY_CLASS_DESC.html @@ -0,0 +1,554 @@ + + + + + + Coverage Report > Summary + + + + + + +
    + + +

    Overall Coverage Summary

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    all classes + + 62% + + + (49/79) + + + + 65.1% + + + (123/189) + + + + 47.1% + + + (131/278) + + + + 62.9% + + + (394/626) + + + + 59.6% + + + (2788/4677) + +
    + +
    +

    Coverage Breakdown

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.gradle.tasks.extensions + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    com.javiersc.semver.project.gradle.plugin.internal.git + + 95.5% + + + (21/22) + + + + 97.3% + + + (71/73) + + + + 74.2% + + + (46/62) + + + + 97.3% + + + (181/186) + + + + 97.7% + + + (1290/1321) + +
    com.javiersc.semver.project.gradle.plugin.internal + + 90.9% + + + (10/11) + + + + 87.1% + + + (27/31) + + + + 62.9% + + + (78/124) + + + + 81.4% + + + (118/145) + + + + 72.2% + + + (668/925) + +
    com.javiersc.semver.project.gradle.plugin + + 87.5% + + + (7/8) + + + + 76.5% + + + (13/17) + + + + 37.5% + + + (3/8) + + + + 81.2% + + + (39/48) + + + + 77.7% + + + (233/300) + +
    com.javiersc.semver.project.gradle.plugin.valuesources + + 75% + + + (3/4) + + + + 50% + + + (3/6) + + + + 4.5% + + + (1/22) + + + + 29.5% + + + (13/44) + + + + 36.9% + + + (132/358) + +
    com.javiersc.semver.project.gradle.plugin.services + + 60% + + + (3/5) + + + + 36.4% + + + (4/11) + + + + 5% + + + (1/20) + + + + 26.7% + + + (12/45) + + + + 25.7% + + + (86/335) + +
    com.javiersc.semver.project.gradle.plugin.tasks + + 16.7% + + + (4/24) + + + + 11.4% + + + (4/35) + + + + 0% + + + (0/34) + + + + 18.9% + + + (25/132) + + + + 30.3% + + + (379/1251) + +
    com.javiersc.semver.settings.gradle.plugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    com.javiersc.semver.project.gradle.plugin.extensions + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    com.javiersc.semver.gradle.plugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    +
    + + + + + + + diff --git a/reports-generated/code-coverage/index_SORT_BY_LINE.html b/reports-generated/code-coverage/index_SORT_BY_LINE.html new file mode 100644 index 00000000..8c4c638e --- /dev/null +++ b/reports-generated/code-coverage/index_SORT_BY_LINE.html @@ -0,0 +1,554 @@ + + + + + + Coverage Report > Summary + + + + + + +
    + + +

    Overall Coverage Summary

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    all classes + + 62% + + + (49/79) + + + + 65.1% + + + (123/189) + + + + 47.1% + + + (131/278) + + + + 62.9% + + + (394/626) + + + + 59.6% + + + (2788/4677) + +
    + +
    +

    Coverage Breakdown

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.gradle.plugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    com.javiersc.semver.project.gradle.plugin.extensions + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    com.javiersc.semver.settings.gradle.plugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    com.javiersc.semver.project.gradle.plugin.tasks + + 16.7% + + + (4/24) + + + + 11.4% + + + (4/35) + + + + 0% + + + (0/34) + + + + 18.9% + + + (25/132) + + + + 30.3% + + + (379/1251) + +
    com.javiersc.semver.project.gradle.plugin.services + + 60% + + + (3/5) + + + + 36.4% + + + (4/11) + + + + 5% + + + (1/20) + + + + 26.7% + + + (12/45) + + + + 25.7% + + + (86/335) + +
    com.javiersc.semver.project.gradle.plugin.valuesources + + 75% + + + (3/4) + + + + 50% + + + (3/6) + + + + 4.5% + + + (1/22) + + + + 29.5% + + + (13/44) + + + + 36.9% + + + (132/358) + +
    com.javiersc.gradle.tasks.extensions + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    com.javiersc.semver.project.gradle.plugin + + 87.5% + + + (7/8) + + + + 76.5% + + + (13/17) + + + + 37.5% + + + (3/8) + + + + 81.2% + + + (39/48) + + + + 77.7% + + + (233/300) + +
    com.javiersc.semver.project.gradle.plugin.internal + + 90.9% + + + (10/11) + + + + 87.1% + + + (27/31) + + + + 62.9% + + + (78/124) + + + + 81.4% + + + (118/145) + + + + 72.2% + + + (668/925) + +
    com.javiersc.semver.project.gradle.plugin.internal.git + + 95.5% + + + (21/22) + + + + 97.3% + + + (71/73) + + + + 74.2% + + + (46/62) + + + + 97.3% + + + (181/186) + + + + 97.7% + + + (1290/1321) + +
    +
    + + + + + + + diff --git a/reports-generated/code-coverage/index_SORT_BY_LINE_DESC.html b/reports-generated/code-coverage/index_SORT_BY_LINE_DESC.html new file mode 100644 index 00000000..7ba816fc --- /dev/null +++ b/reports-generated/code-coverage/index_SORT_BY_LINE_DESC.html @@ -0,0 +1,554 @@ + + + + + + Coverage Report > Summary + + + + + + +
    + + +

    Overall Coverage Summary

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    all classes + + 62% + + + (49/79) + + + + 65.1% + + + (123/189) + + + + 47.1% + + + (131/278) + + + + 62.9% + + + (394/626) + + + + 59.6% + + + (2788/4677) + +
    + +
    +

    Coverage Breakdown

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.internal.git + + 95.5% + + + (21/22) + + + + 97.3% + + + (71/73) + + + + 74.2% + + + (46/62) + + + + 97.3% + + + (181/186) + + + + 97.7% + + + (1290/1321) + +
    com.javiersc.semver.project.gradle.plugin.internal + + 90.9% + + + (10/11) + + + + 87.1% + + + (27/31) + + + + 62.9% + + + (78/124) + + + + 81.4% + + + (118/145) + + + + 72.2% + + + (668/925) + +
    com.javiersc.semver.project.gradle.plugin + + 87.5% + + + (7/8) + + + + 76.5% + + + (13/17) + + + + 37.5% + + + (3/8) + + + + 81.2% + + + (39/48) + + + + 77.7% + + + (233/300) + +
    com.javiersc.gradle.tasks.extensions + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    com.javiersc.semver.project.gradle.plugin.valuesources + + 75% + + + (3/4) + + + + 50% + + + (3/6) + + + + 4.5% + + + (1/22) + + + + 29.5% + + + (13/44) + + + + 36.9% + + + (132/358) + +
    com.javiersc.semver.project.gradle.plugin.services + + 60% + + + (3/5) + + + + 36.4% + + + (4/11) + + + + 5% + + + (1/20) + + + + 26.7% + + + (12/45) + + + + 25.7% + + + (86/335) + +
    com.javiersc.semver.project.gradle.plugin.tasks + + 16.7% + + + (4/24) + + + + 11.4% + + + (4/35) + + + + 0% + + + (0/34) + + + + 18.9% + + + (25/132) + + + + 30.3% + + + (379/1251) + +
    com.javiersc.semver.settings.gradle.plugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    com.javiersc.semver.project.gradle.plugin.extensions + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    com.javiersc.semver.gradle.plugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    +
    + + + + + + + diff --git a/reports-generated/code-coverage/index_SORT_BY_METHOD.html b/reports-generated/code-coverage/index_SORT_BY_METHOD.html new file mode 100644 index 00000000..4ac2e0ff --- /dev/null +++ b/reports-generated/code-coverage/index_SORT_BY_METHOD.html @@ -0,0 +1,554 @@ + + + + + + Coverage Report > Summary + + + + + + +
    + + +

    Overall Coverage Summary

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    all classes + + 62% + + + (49/79) + + + + 65.1% + + + (123/189) + + + + 47.1% + + + (131/278) + + + + 62.9% + + + (394/626) + + + + 59.6% + + + (2788/4677) + +
    + +
    +

    Coverage Breakdown

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.gradle.plugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    com.javiersc.semver.project.gradle.plugin.extensions + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    com.javiersc.semver.settings.gradle.plugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    com.javiersc.semver.project.gradle.plugin.tasks + + 16.7% + + + (4/24) + + + + 11.4% + + + (4/35) + + + + 0% + + + (0/34) + + + + 18.9% + + + (25/132) + + + + 30.3% + + + (379/1251) + +
    com.javiersc.semver.project.gradle.plugin.services + + 60% + + + (3/5) + + + + 36.4% + + + (4/11) + + + + 5% + + + (1/20) + + + + 26.7% + + + (12/45) + + + + 25.7% + + + (86/335) + +
    com.javiersc.semver.project.gradle.plugin.valuesources + + 75% + + + (3/4) + + + + 50% + + + (3/6) + + + + 4.5% + + + (1/22) + + + + 29.5% + + + (13/44) + + + + 36.9% + + + (132/358) + +
    com.javiersc.semver.project.gradle.plugin + + 87.5% + + + (7/8) + + + + 76.5% + + + (13/17) + + + + 37.5% + + + (3/8) + + + + 81.2% + + + (39/48) + + + + 77.7% + + + (233/300) + +
    com.javiersc.semver.project.gradle.plugin.internal + + 90.9% + + + (10/11) + + + + 87.1% + + + (27/31) + + + + 62.9% + + + (78/124) + + + + 81.4% + + + (118/145) + + + + 72.2% + + + (668/925) + +
    com.javiersc.semver.project.gradle.plugin.internal.git + + 95.5% + + + (21/22) + + + + 97.3% + + + (71/73) + + + + 74.2% + + + (46/62) + + + + 97.3% + + + (181/186) + + + + 97.7% + + + (1290/1321) + +
    com.javiersc.gradle.tasks.extensions + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    +
    + + + + + + + diff --git a/reports-generated/code-coverage/index_SORT_BY_METHOD_DESC.html b/reports-generated/code-coverage/index_SORT_BY_METHOD_DESC.html new file mode 100644 index 00000000..0c76214d --- /dev/null +++ b/reports-generated/code-coverage/index_SORT_BY_METHOD_DESC.html @@ -0,0 +1,554 @@ + + + + + + Coverage Report > Summary + + + + + + +
    + + +

    Overall Coverage Summary

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    all classes + + 62% + + + (49/79) + + + + 65.1% + + + (123/189) + + + + 47.1% + + + (131/278) + + + + 62.9% + + + (394/626) + + + + 59.6% + + + (2788/4677) + +
    + +
    +

    Coverage Breakdown

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.gradle.tasks.extensions + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    com.javiersc.semver.project.gradle.plugin.internal.git + + 95.5% + + + (21/22) + + + + 97.3% + + + (71/73) + + + + 74.2% + + + (46/62) + + + + 97.3% + + + (181/186) + + + + 97.7% + + + (1290/1321) + +
    com.javiersc.semver.project.gradle.plugin.internal + + 90.9% + + + (10/11) + + + + 87.1% + + + (27/31) + + + + 62.9% + + + (78/124) + + + + 81.4% + + + (118/145) + + + + 72.2% + + + (668/925) + +
    com.javiersc.semver.project.gradle.plugin + + 87.5% + + + (7/8) + + + + 76.5% + + + (13/17) + + + + 37.5% + + + (3/8) + + + + 81.2% + + + (39/48) + + + + 77.7% + + + (233/300) + +
    com.javiersc.semver.project.gradle.plugin.valuesources + + 75% + + + (3/4) + + + + 50% + + + (3/6) + + + + 4.5% + + + (1/22) + + + + 29.5% + + + (13/44) + + + + 36.9% + + + (132/358) + +
    com.javiersc.semver.project.gradle.plugin.services + + 60% + + + (3/5) + + + + 36.4% + + + (4/11) + + + + 5% + + + (1/20) + + + + 26.7% + + + (12/45) + + + + 25.7% + + + (86/335) + +
    com.javiersc.semver.project.gradle.plugin.tasks + + 16.7% + + + (4/24) + + + + 11.4% + + + (4/35) + + + + 0% + + + (0/34) + + + + 18.9% + + + (25/132) + + + + 30.3% + + + (379/1251) + +
    com.javiersc.semver.settings.gradle.plugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    com.javiersc.semver.project.gradle.plugin.extensions + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    com.javiersc.semver.gradle.plugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    +
    + + + + + + + diff --git a/reports-generated/code-coverage/index_SORT_BY_NAME_DESC.html b/reports-generated/code-coverage/index_SORT_BY_NAME_DESC.html new file mode 100644 index 00000000..96f89831 --- /dev/null +++ b/reports-generated/code-coverage/index_SORT_BY_NAME_DESC.html @@ -0,0 +1,554 @@ + + + + + + Coverage Report > Summary + + + + + + +
    + + +

    Overall Coverage Summary

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    all classes + + 62% + + + (49/79) + + + + 65.1% + + + (123/189) + + + + 47.1% + + + (131/278) + + + + 62.9% + + + (394/626) + + + + 59.6% + + + (2788/4677) + +
    + +
    +

    Coverage Breakdown

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.settings.gradle.plugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    com.javiersc.semver.project.gradle.plugin.valuesources + + 75% + + + (3/4) + + + + 50% + + + (3/6) + + + + 4.5% + + + (1/22) + + + + 29.5% + + + (13/44) + + + + 36.9% + + + (132/358) + +
    com.javiersc.semver.project.gradle.plugin.tasks + + 16.7% + + + (4/24) + + + + 11.4% + + + (4/35) + + + + 0% + + + (0/34) + + + + 18.9% + + + (25/132) + + + + 30.3% + + + (379/1251) + +
    com.javiersc.semver.project.gradle.plugin.services + + 60% + + + (3/5) + + + + 36.4% + + + (4/11) + + + + 5% + + + (1/20) + + + + 26.7% + + + (12/45) + + + + 25.7% + + + (86/335) + +
    com.javiersc.semver.project.gradle.plugin.internal.git + + 95.5% + + + (21/22) + + + + 97.3% + + + (71/73) + + + + 74.2% + + + (46/62) + + + + 97.3% + + + (181/186) + + + + 97.7% + + + (1290/1321) + +
    com.javiersc.semver.project.gradle.plugin.internal + + 90.9% + + + (10/11) + + + + 87.1% + + + (27/31) + + + + 62.9% + + + (78/124) + + + + 81.4% + + + (118/145) + + + + 72.2% + + + (668/925) + +
    com.javiersc.semver.project.gradle.plugin.extensions + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    com.javiersc.semver.project.gradle.plugin + + 87.5% + + + (7/8) + + + + 76.5% + + + (13/17) + + + + 37.5% + + + (3/8) + + + + 81.2% + + + (39/48) + + + + 77.7% + + + (233/300) + +
    com.javiersc.semver.gradle.plugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    com.javiersc.gradle.tasks.extensions + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    +
    + + + + + + + diff --git a/reports-generated/code-coverage/index_SORT_BY_STATEMENT.html b/reports-generated/code-coverage/index_SORT_BY_STATEMENT.html new file mode 100644 index 00000000..04bd6431 --- /dev/null +++ b/reports-generated/code-coverage/index_SORT_BY_STATEMENT.html @@ -0,0 +1,554 @@ + + + + + + Coverage Report > Summary + + + + + + +
    + + +

    Overall Coverage Summary

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    all classes + + 62% + + + (49/79) + + + + 65.1% + + + (123/189) + + + + 47.1% + + + (131/278) + + + + 62.9% + + + (394/626) + + + + 59.6% + + + (2788/4677) + +
    + +
    +

    Coverage Breakdown

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.gradle.tasks.extensions + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    com.javiersc.semver.gradle.plugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    com.javiersc.semver.project.gradle.plugin.extensions + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    com.javiersc.semver.settings.gradle.plugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    com.javiersc.semver.project.gradle.plugin.services + + 60% + + + (3/5) + + + + 36.4% + + + (4/11) + + + + 5% + + + (1/20) + + + + 26.7% + + + (12/45) + + + + 25.7% + + + (86/335) + +
    com.javiersc.semver.project.gradle.plugin.tasks + + 16.7% + + + (4/24) + + + + 11.4% + + + (4/35) + + + + 0% + + + (0/34) + + + + 18.9% + + + (25/132) + + + + 30.3% + + + (379/1251) + +
    com.javiersc.semver.project.gradle.plugin.valuesources + + 75% + + + (3/4) + + + + 50% + + + (3/6) + + + + 4.5% + + + (1/22) + + + + 29.5% + + + (13/44) + + + + 36.9% + + + (132/358) + +
    com.javiersc.semver.project.gradle.plugin.internal + + 90.9% + + + (10/11) + + + + 87.1% + + + (27/31) + + + + 62.9% + + + (78/124) + + + + 81.4% + + + (118/145) + + + + 72.2% + + + (668/925) + +
    com.javiersc.semver.project.gradle.plugin + + 87.5% + + + (7/8) + + + + 76.5% + + + (13/17) + + + + 37.5% + + + (3/8) + + + + 81.2% + + + (39/48) + + + + 77.7% + + + (233/300) + +
    com.javiersc.semver.project.gradle.plugin.internal.git + + 95.5% + + + (21/22) + + + + 97.3% + + + (71/73) + + + + 74.2% + + + (46/62) + + + + 97.3% + + + (181/186) + + + + 97.7% + + + (1290/1321) + +
    +
    + + + + + + + diff --git a/reports-generated/code-coverage/index_SORT_BY_STATEMENT_DESC.html b/reports-generated/code-coverage/index_SORT_BY_STATEMENT_DESC.html new file mode 100644 index 00000000..1d35e812 --- /dev/null +++ b/reports-generated/code-coverage/index_SORT_BY_STATEMENT_DESC.html @@ -0,0 +1,554 @@ + + + + + + Coverage Report > Summary + + + + + + +
    + + +

    Overall Coverage Summary

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    all classes + + 62% + + + (49/79) + + + + 65.1% + + + (123/189) + + + + 47.1% + + + (131/278) + + + + 62.9% + + + (394/626) + + + + 59.6% + + + (2788/4677) + +
    + +
    +

    Coverage Breakdown

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.internal.git + + 95.5% + + + (21/22) + + + + 97.3% + + + (71/73) + + + + 74.2% + + + (46/62) + + + + 97.3% + + + (181/186) + + + + 97.7% + + + (1290/1321) + +
    com.javiersc.semver.project.gradle.plugin + + 87.5% + + + (7/8) + + + + 76.5% + + + (13/17) + + + + 37.5% + + + (3/8) + + + + 81.2% + + + (39/48) + + + + 77.7% + + + (233/300) + +
    com.javiersc.semver.project.gradle.plugin.internal + + 90.9% + + + (10/11) + + + + 87.1% + + + (27/31) + + + + 62.9% + + + (78/124) + + + + 81.4% + + + (118/145) + + + + 72.2% + + + (668/925) + +
    com.javiersc.semver.project.gradle.plugin.valuesources + + 75% + + + (3/4) + + + + 50% + + + (3/6) + + + + 4.5% + + + (1/22) + + + + 29.5% + + + (13/44) + + + + 36.9% + + + (132/358) + +
    com.javiersc.semver.project.gradle.plugin.tasks + + 16.7% + + + (4/24) + + + + 11.4% + + + (4/35) + + + + 0% + + + (0/34) + + + + 18.9% + + + (25/132) + + + + 30.3% + + + (379/1251) + +
    com.javiersc.semver.project.gradle.plugin.services + + 60% + + + (3/5) + + + + 36.4% + + + (4/11) + + + + 5% + + + (1/20) + + + + 26.7% + + + (12/45) + + + + 25.7% + + + (86/335) + +
    com.javiersc.semver.settings.gradle.plugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    com.javiersc.semver.project.gradle.plugin.extensions + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    com.javiersc.semver.gradle.plugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    com.javiersc.gradle.tasks.extensions + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    +
    + + + + + + + diff --git a/reports-generated/code-coverage/js/highlight.min.js b/reports-generated/code-coverage/js/highlight.min.js new file mode 100644 index 00000000..e8873152 --- /dev/null +++ b/reports-generated/code-coverage/js/highlight.min.js @@ -0,0 +1,1388 @@ +/* + Highlight.js 10.7.2 (00233d63) + License: BSD-3-Clause + Copyright (c) 2006-2021, Ivan Sagalaev + + BSD 3-Clause License + + Copyright (c) 2006-2021, Ivan Sagalaev. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +var hljs=function(){"use strict";function e(t){ +return t instanceof Map?t.clear=t.delete=t.set=()=>{ +throw Error("map is read-only")}:t instanceof Set&&(t.add=t.clear=t.delete=()=>{ +throw Error("set is read-only") +}),Object.freeze(t),Object.getOwnPropertyNames(t).forEach((n=>{var i=t[n] +;"object"!=typeof i||Object.isFrozen(i)||e(i)})),t}var t=e,n=e;t.default=n +;class i{constructor(e){ +void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1} +ignoreMatch(){this.isMatchIgnored=!0}}function s(e){ +return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'") +}function a(e,...t){const n=Object.create(null);for(const t in e)n[t]=e[t] +;return t.forEach((e=>{for(const t in e)n[t]=e[t]})),n}const r=e=>!!e.kind +;class l{constructor(e,t){ +this.buffer="",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){ +this.buffer+=s(e)}openNode(e){if(!r(e))return;let t=e.kind +;e.sublanguage||(t=`${this.classPrefix}${t}`),this.span(t)}closeNode(e){ +r(e)&&(this.buffer+="")}value(){return this.buffer}span(e){ +this.buffer+=``}}class o{constructor(){this.rootNode={ +children:[]},this.stack=[this.rootNode]}get top(){ +return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){ +this.top.children.push(e)}openNode(e){const t={kind:e,children:[]} +;this.add(t),this.stack.push(t)}closeNode(){ +if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){ +for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)} +walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){ +return"string"==typeof t?e.addText(t):t.children&&(e.openNode(t), +t.children.forEach((t=>this._walk(e,t))),e.closeNode(t)),e}static _collapse(e){ +"string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{ +o._collapse(e)})))}}class c extends o{constructor(e){super(),this.options=e} +addKeyword(e,t){""!==e&&(this.openNode(t),this.addText(e),this.closeNode())} +addText(e){""!==e&&this.add(e)}addSublanguage(e,t){const n=e.root +;n.kind=t,n.sublanguage=!0,this.add(n)}toHTML(){ +return new l(this,this.options).value()}finalize(){return!0}}function g(e){ +return e?"string"==typeof e?e:e.source:null} +const u=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./,h="[a-zA-Z]\\w*",d="[a-zA-Z_]\\w*",f="\\b\\d+(\\.\\d+)?",p="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",m="\\b(0b[01]+)",b={ +begin:"\\\\[\\s\\S]",relevance:0},E={className:"string",begin:"'",end:"'", +illegal:"\\n",contains:[b]},x={className:"string",begin:'"',end:'"', +illegal:"\\n",contains:[b]},v={ +begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/ +},w=(e,t,n={})=>{const i=a({className:"comment",begin:e,end:t,contains:[]},n) +;return i.contains.push(v),i.contains.push({className:"doctag", +begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),i +},y=w("//","$"),N=w("/\\*","\\*/"),R=w("#","$");var _=Object.freeze({ +__proto__:null,MATCH_NOTHING_RE:/\b\B/,IDENT_RE:h,UNDERSCORE_IDENT_RE:d, +NUMBER_RE:f,C_NUMBER_RE:p,BINARY_NUMBER_RE:m, +RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~", +SHEBANG:(e={})=>{const t=/^#![ ]*\// +;return e.binary&&(e.begin=((...e)=>e.map((e=>g(e))).join(""))(t,/.*\b/,e.binary,/\b.*/)), +a({className:"meta",begin:t,end:/$/,relevance:0,"on:begin":(e,t)=>{ +0!==e.index&&t.ignoreMatch()}},e)},BACKSLASH_ESCAPE:b,APOS_STRING_MODE:E, +QUOTE_STRING_MODE:x,PHRASAL_WORDS_MODE:v,COMMENT:w,C_LINE_COMMENT_MODE:y, +C_BLOCK_COMMENT_MODE:N,HASH_COMMENT_MODE:R,NUMBER_MODE:{className:"number", +begin:f,relevance:0},C_NUMBER_MODE:{className:"number",begin:p,relevance:0}, +BINARY_NUMBER_MODE:{className:"number",begin:m,relevance:0},CSS_NUMBER_MODE:{ +className:"number", +begin:f+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?", +relevance:0},REGEXP_MODE:{begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp", +begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[b,{begin:/\[/,end:/\]/, +relevance:0,contains:[b]}]}]},TITLE_MODE:{className:"title",begin:h,relevance:0 +},UNDERSCORE_TITLE_MODE:{className:"title",begin:d,relevance:0},METHOD_GUARD:{ +begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0},END_SAME_AS_BEGIN:e=>Object.assign(e,{ +"on:begin":(e,t)=>{t.data._beginMatch=e[1]},"on:end":(e,t)=>{ +t.data._beginMatch!==e[1]&&t.ignoreMatch()}})});function k(e,t){ +"."===e.input[e.index-1]&&t.ignoreMatch()}function M(e,t){ +t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)", +e.__beforeBegin=k,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords, +void 0===e.relevance&&(e.relevance=0))}function O(e,t){ +Array.isArray(e.illegal)&&(e.illegal=((...e)=>"("+e.map((e=>g(e))).join("|")+")")(...e.illegal)) +}function A(e,t){if(e.match){ +if(e.begin||e.end)throw Error("begin & end are not supported with match") +;e.begin=e.match,delete e.match}}function L(e,t){ +void 0===e.relevance&&(e.relevance=1)} +const I=["of","and","for","in","not","or","if","then","parent","list","value"] +;function j(e,t,n="keyword"){const i={} +;return"string"==typeof e?s(n,e.split(" ")):Array.isArray(e)?s(n,e):Object.keys(e).forEach((n=>{ +Object.assign(i,j(e[n],t,n))})),i;function s(e,n){ +t&&(n=n.map((e=>e.toLowerCase()))),n.forEach((t=>{const n=t.split("|") +;i[n[0]]=[e,B(n[0],n[1])]}))}}function B(e,t){ +return t?Number(t):(e=>I.includes(e.toLowerCase()))(e)?0:1} +function T(e,{plugins:t}){function n(t,n){ +return RegExp(g(t),"m"+(e.case_insensitive?"i":"")+(n?"g":""))}class i{ +constructor(){ +this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0} +addRule(e,t){ +t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]), +this.matchAt+=(e=>RegExp(e.toString()+"|").exec("").length-1)(e)+1}compile(){ +0===this.regexes.length&&(this.exec=()=>null) +;const e=this.regexes.map((e=>e[1]));this.matcherRe=n(((e,t="|")=>{let n=0 +;return e.map((e=>{n+=1;const t=n;let i=g(e),s="";for(;i.length>0;){ +const e=u.exec(i);if(!e){s+=i;break} +s+=i.substring(0,e.index),i=i.substring(e.index+e[0].length), +"\\"===e[0][0]&&e[1]?s+="\\"+(Number(e[1])+t):(s+=e[0],"("===e[0]&&n++)}return s +})).map((e=>`(${e})`)).join(t)})(e),!0),this.lastIndex=0}exec(e){ +this.matcherRe.lastIndex=this.lastIndex;const t=this.matcherRe.exec(e) +;if(!t)return null +;const n=t.findIndex(((e,t)=>t>0&&void 0!==e)),i=this.matchIndexes[n] +;return t.splice(0,n),Object.assign(t,i)}}class s{constructor(){ +this.rules=[],this.multiRegexes=[], +this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){ +if(this.multiRegexes[e])return this.multiRegexes[e];const t=new i +;return this.rules.slice(e).forEach((([e,n])=>t.addRule(e,n))), +t.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){ +return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,t){ +this.rules.push([e,t]),"begin"===t.type&&this.count++}exec(e){ +const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex +;let n=t.exec(e) +;if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{ +const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)} +return n&&(this.regexIndex+=n.position+1, +this.regexIndex===this.count&&this.considerAll()),n}} +if(e.compilerExtensions||(e.compilerExtensions=[]), +e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.") +;return e.classNameAliases=a(e.classNameAliases||{}),function t(i,r){const l=i +;if(i.isCompiled)return l +;[A].forEach((e=>e(i,r))),e.compilerExtensions.forEach((e=>e(i,r))), +i.__beforeBegin=null,[M,O,L].forEach((e=>e(i,r))),i.isCompiled=!0;let o=null +;if("object"==typeof i.keywords&&(o=i.keywords.$pattern, +delete i.keywords.$pattern), +i.keywords&&(i.keywords=j(i.keywords,e.case_insensitive)), +i.lexemes&&o)throw Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ") +;return o=o||i.lexemes||/\w+/, +l.keywordPatternRe=n(o,!0),r&&(i.begin||(i.begin=/\B|\b/), +l.beginRe=n(i.begin),i.endSameAsBegin&&(i.end=i.begin), +i.end||i.endsWithParent||(i.end=/\B|\b/), +i.end&&(l.endRe=n(i.end)),l.terminatorEnd=g(i.end)||"", +i.endsWithParent&&r.terminatorEnd&&(l.terminatorEnd+=(i.end?"|":"")+r.terminatorEnd)), +i.illegal&&(l.illegalRe=n(i.illegal)), +i.contains||(i.contains=[]),i.contains=[].concat(...i.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((t=>a(e,{ +variants:null},t)))),e.cachedVariants?e.cachedVariants:S(e)?a(e,{ +starts:e.starts?a(e.starts):null +}):Object.isFrozen(e)?a(e):e))("self"===e?i:e)))),i.contains.forEach((e=>{t(e,l) +})),i.starts&&t(i.starts,r),l.matcher=(e=>{const t=new s +;return e.contains.forEach((e=>t.addRule(e.begin,{rule:e,type:"begin" +}))),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:"end" +}),e.illegal&&t.addRule(e.illegal,{type:"illegal"}),t})(l),l}(e)}function S(e){ +return!!e&&(e.endsWithParent||S(e.starts))}function P(e){const t={ +props:["language","code","autodetect"],data:()=>({detectedLanguage:"", +unknownLanguage:!1}),computed:{className(){ +return this.unknownLanguage?"":"hljs "+this.detectedLanguage},highlighted(){ +if(!this.autoDetect&&!e.getLanguage(this.language))return console.warn(`The language "${this.language}" you specified could not be found.`), +this.unknownLanguage=!0,s(this.code);let t={} +;return this.autoDetect?(t=e.highlightAuto(this.code), +this.detectedLanguage=t.language):(t=e.highlight(this.language,this.code,this.ignoreIllegals), +this.detectedLanguage=this.language),t.value},autoDetect(){ +return!(this.language&&(e=this.autodetect,!e&&""!==e));var e}, +ignoreIllegals:()=>!0},render(e){return e("pre",{},[e("code",{ +class:this.className,domProps:{innerHTML:this.highlighted}})])}};return{ +Component:t,VuePlugin:{install(e){e.component("highlightjs",t)}}}}const D={ +"after:highlightElement":({el:e,result:t,text:n})=>{const i=H(e) +;if(!i.length)return;const a=document.createElement("div") +;a.innerHTML=t.value,t.value=((e,t,n)=>{let i=0,a="";const r=[];function l(){ +return e.length&&t.length?e[0].offset!==t[0].offset?e[0].offset"}function c(e){ +a+=""}function g(e){("start"===e.event?o:c)(e.node)} +for(;e.length||t.length;){let t=l() +;if(a+=s(n.substring(i,t[0].offset)),i=t[0].offset,t===e){r.reverse().forEach(c) +;do{g(t.splice(0,1)[0]),t=l()}while(t===e&&t.length&&t[0].offset===i) +;r.reverse().forEach(o) +}else"start"===t[0].event?r.push(t[0].node):r.pop(),g(t.splice(0,1)[0])} +return a+s(n.substr(i))})(i,H(a),n)}};function C(e){ +return e.nodeName.toLowerCase()}function H(e){const t=[];return function e(n,i){ +for(let s=n.firstChild;s;s=s.nextSibling)3===s.nodeType?i+=s.nodeValue.length:1===s.nodeType&&(t.push({ +event:"start",offset:i,node:s}),i=e(s,i),C(s).match(/br|hr|img|input/)||t.push({ +event:"stop",offset:i,node:s}));return i}(e,0),t}const $={},U=e=>{ +console.error(e)},z=(e,...t)=>{console.log("WARN: "+e,...t)},K=(e,t)=>{ +$[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),$[`${e}/${t}`]=!0) +},G=s,V=a,W=Symbol("nomatch");return(e=>{ +const n=Object.create(null),s=Object.create(null),a=[];let r=!0 +;const l=/(^(<[^>]+>|\t|)+|\n)/gm,o="Could not find the language '{}', did you forget to load/include a language module?",g={ +disableAutodetect:!0,name:"Plain text",contains:[]};let u={ +noHighlightRe:/^(no-?highlight)$/i, +languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-", +tabReplace:null,useBR:!1,languages:null,__emitter:c};function h(e){ +return u.noHighlightRe.test(e)}function d(e,t,n,i){let s="",a="" +;"object"==typeof t?(s=e, +n=t.ignoreIllegals,a=t.language,i=void 0):(K("10.7.0","highlight(lang, code, ...args) has been deprecated."), +K("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"), +a=e,s=t);const r={code:s,language:a};M("before:highlight",r) +;const l=r.result?r.result:f(r.language,r.code,n,i) +;return l.code=r.code,M("after:highlight",l),l}function f(e,t,s,l){ +function c(e,t){const n=v.case_insensitive?t[0].toLowerCase():t[0] +;return Object.prototype.hasOwnProperty.call(e.keywords,n)&&e.keywords[n]} +function g(){null!=R.subLanguage?(()=>{if(""===M)return;let e=null +;if("string"==typeof R.subLanguage){ +if(!n[R.subLanguage])return void k.addText(M) +;e=f(R.subLanguage,M,!0,_[R.subLanguage]),_[R.subLanguage]=e.top +}else e=p(M,R.subLanguage.length?R.subLanguage:null) +;R.relevance>0&&(O+=e.relevance),k.addSublanguage(e.emitter,e.language) +})():(()=>{if(!R.keywords)return void k.addText(M);let e=0 +;R.keywordPatternRe.lastIndex=0;let t=R.keywordPatternRe.exec(M),n="";for(;t;){ +n+=M.substring(e,t.index);const i=c(R,t);if(i){const[e,s]=i +;if(k.addText(n),n="",O+=s,e.startsWith("_"))n+=t[0];else{ +const n=v.classNameAliases[e]||e;k.addKeyword(t[0],n)}}else n+=t[0] +;e=R.keywordPatternRe.lastIndex,t=R.keywordPatternRe.exec(M)} +n+=M.substr(e),k.addText(n)})(),M=""}function h(e){ +return e.className&&k.openNode(v.classNameAliases[e.className]||e.className), +R=Object.create(e,{parent:{value:R}}),R}function d(e,t,n){let s=((e,t)=>{ +const n=e&&e.exec(t);return n&&0===n.index})(e.endRe,n);if(s){if(e["on:end"]){ +const n=new i(e);e["on:end"](t,n),n.isMatchIgnored&&(s=!1)}if(s){ +for(;e.endsParent&&e.parent;)e=e.parent;return e}} +if(e.endsWithParent)return d(e.parent,t,n)}function m(e){ +return 0===R.matcher.regexIndex?(M+=e[0],1):(I=!0,0)}function b(e){ +const n=e[0],i=t.substr(e.index),s=d(R,e,i);if(!s)return W;const a=R +;a.skip?M+=n:(a.returnEnd||a.excludeEnd||(M+=n),g(),a.excludeEnd&&(M=n));do{ +R.className&&k.closeNode(),R.skip||R.subLanguage||(O+=R.relevance),R=R.parent +}while(R!==s.parent) +;return s.starts&&(s.endSameAsBegin&&(s.starts.endRe=s.endRe), +h(s.starts)),a.returnEnd?0:n.length}let E={};function x(n,a){const l=a&&a[0] +;if(M+=n,null==l)return g(),0 +;if("begin"===E.type&&"end"===a.type&&E.index===a.index&&""===l){ +if(M+=t.slice(a.index,a.index+1),!r){const t=Error("0 width match regex") +;throw t.languageName=e,t.badRule=E.rule,t}return 1} +if(E=a,"begin"===a.type)return function(e){ +const t=e[0],n=e.rule,s=new i(n),a=[n.__beforeBegin,n["on:begin"]] +;for(const n of a)if(n&&(n(e,s),s.isMatchIgnored))return m(t) +;return n&&n.endSameAsBegin&&(n.endRe=RegExp(t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")), +n.skip?M+=t:(n.excludeBegin&&(M+=t), +g(),n.returnBegin||n.excludeBegin||(M=t)),h(n),n.returnBegin?0:t.length}(a) +;if("illegal"===a.type&&!s){ +const e=Error('Illegal lexeme "'+l+'" for mode "'+(R.className||"")+'"') +;throw e.mode=R,e}if("end"===a.type){const e=b(a);if(e!==W)return e} +if("illegal"===a.type&&""===l)return 1 +;if(L>1e5&&L>3*a.index)throw Error("potential infinite loop, way more iterations than matches") +;return M+=l,l.length}const v=N(e) +;if(!v)throw U(o.replace("{}",e)),Error('Unknown language: "'+e+'"') +;const w=T(v,{plugins:a});let y="",R=l||w;const _={},k=new u.__emitter(u);(()=>{ +const e=[];for(let t=R;t!==v;t=t.parent)t.className&&e.unshift(t.className) +;e.forEach((e=>k.openNode(e)))})();let M="",O=0,A=0,L=0,I=!1;try{ +for(R.matcher.considerAll();;){ +L++,I?I=!1:R.matcher.considerAll(),R.matcher.lastIndex=A +;const e=R.matcher.exec(t);if(!e)break;const n=x(t.substring(A,e.index),e) +;A=e.index+n}return x(t.substr(A)),k.closeAllNodes(),k.finalize(),y=k.toHTML(),{ +relevance:Math.floor(O),value:y,language:e,illegal:!1,emitter:k,top:R}}catch(n){ +if(n.message&&n.message.includes("Illegal"))return{illegal:!0,illegalBy:{ +msg:n.message,context:t.slice(A-100,A+100),mode:n.mode},sofar:y,relevance:0, +value:G(t),emitter:k};if(r)return{illegal:!1,relevance:0,value:G(t),emitter:k, +language:e,top:R,errorRaised:n};throw n}}function p(e,t){ +t=t||u.languages||Object.keys(n);const i=(e=>{const t={relevance:0, +emitter:new u.__emitter(u),value:G(e),illegal:!1,top:g} +;return t.emitter.addText(e),t})(e),s=t.filter(N).filter(k).map((t=>f(t,e,!1))) +;s.unshift(i);const a=s.sort(((e,t)=>{ +if(e.relevance!==t.relevance)return t.relevance-e.relevance +;if(e.language&&t.language){if(N(e.language).supersetOf===t.language)return 1 +;if(N(t.language).supersetOf===e.language)return-1}return 0})),[r,l]=a,o=r +;return o.second_best=l,o}const m={"before:highlightElement":({el:e})=>{ +u.useBR&&(e.innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n")) +},"after:highlightElement":({result:e})=>{ +u.useBR&&(e.value=e.value.replace(/\n/g,"
    "))}},b=/^(<[^>]+>|\t)+/gm,E={ +"after:highlightElement":({result:e})=>{ +u.tabReplace&&(e.value=e.value.replace(b,(e=>e.replace(/\t/g,u.tabReplace))))}} +;function x(e){let t=null;const n=(e=>{let t=e.className+" " +;t+=e.parentNode?e.parentNode.className:"";const n=u.languageDetectRe.exec(t) +;if(n){const t=N(n[1]) +;return t||(z(o.replace("{}",n[1])),z("Falling back to no-highlight mode for this block.",e)), +t?n[1]:"no-highlight"}return t.split(/\s+/).find((e=>h(e)||N(e)))})(e) +;if(h(n))return;M("before:highlightElement",{el:e,language:n}),t=e +;const i=t.textContent,a=n?d(i,{language:n,ignoreIllegals:!0}):p(i) +;M("after:highlightElement",{el:e,result:a,text:i +}),e.innerHTML=a.value,((e,t,n)=>{const i=t?s[t]:n +;e.classList.add("hljs"),i&&e.classList.add(i)})(e,n,a.language),e.result={ +language:a.language,re:a.relevance,relavance:a.relevance +},a.second_best&&(e.second_best={language:a.second_best.language, +re:a.second_best.relevance,relavance:a.second_best.relevance})}const v=()=>{ +v.called||(v.called=!0, +K("10.6.0","initHighlighting() is deprecated. Use highlightAll() instead."), +document.querySelectorAll("pre code").forEach(x))};let w=!1;function y(){ +"loading"!==document.readyState?document.querySelectorAll("pre code").forEach(x):w=!0 +}function N(e){return e=(e||"").toLowerCase(),n[e]||n[s[e]]} +function R(e,{languageName:t}){"string"==typeof e&&(e=[e]),e.forEach((e=>{ +s[e.toLowerCase()]=t}))}function k(e){const t=N(e) +;return t&&!t.disableAutodetect}function M(e,t){const n=e;a.forEach((e=>{ +e[n]&&e[n](t)}))} +"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(()=>{ +w&&y()}),!1),Object.assign(e,{highlight:d,highlightAuto:p,highlightAll:y, +fixMarkup:e=>{ +return K("10.2.0","fixMarkup will be removed entirely in v11.0"),K("10.2.0","Please see https://github.com/highlightjs/highlight.js/issues/2534"), +t=e, +u.tabReplace||u.useBR?t.replace(l,(e=>"\n"===e?u.useBR?"
    ":e:u.tabReplace?e.replace(/\t/g,u.tabReplace):e)):t +;var t},highlightElement:x, +highlightBlock:e=>(K("10.7.0","highlightBlock will be removed entirely in v12.0"), +K("10.7.0","Please use highlightElement now."),x(e)),configure:e=>{ +e.useBR&&(K("10.3.0","'useBR' will be removed entirely in v11.0"), +K("10.3.0","Please see https://github.com/highlightjs/highlight.js/issues/2559")), +u=V(u,e)},initHighlighting:v,initHighlightingOnLoad:()=>{ +K("10.6.0","initHighlightingOnLoad() is deprecated. Use highlightAll() instead."), +w=!0},registerLanguage:(t,i)=>{let s=null;try{s=i(e)}catch(e){ +if(U("Language definition for '{}' could not be registered.".replace("{}",t)), +!r)throw e;U(e),s=g} +s.name||(s.name=t),n[t]=s,s.rawDefinition=i.bind(null,e),s.aliases&&R(s.aliases,{ +languageName:t})},unregisterLanguage:e=>{delete n[e] +;for(const t of Object.keys(s))s[t]===e&&delete s[t]}, +listLanguages:()=>Object.keys(n),getLanguage:N,registerAliases:R, +requireLanguage:e=>{ +K("10.4.0","requireLanguage will be removed entirely in v11."), +K("10.4.0","Please see https://github.com/highlightjs/highlight.js/pull/2844") +;const t=N(e);if(t)return t +;throw Error("The '{}' language is required, but not loaded.".replace("{}",e))}, +autoDetection:k,inherit:V,addPlugin:e=>{(e=>{ +e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=t=>{ +e["before:highlightBlock"](Object.assign({block:t.el},t)) +}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=t=>{ +e["after:highlightBlock"](Object.assign({block:t.el},t))})})(e),a.push(e)}, +vuePlugin:P(e).VuePlugin}),e.debugMode=()=>{r=!1},e.safeMode=()=>{r=!0 +},e.versionString="10.7.2";for(const e in _)"object"==typeof _[e]&&t(_[e]) +;return Object.assign(e,_),e.addPlugin(m),e.addPlugin(D),e.addPlugin(E),e})({}) +}();"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs); +hljs.registerLanguage("apache",(()=>{"use strict";return e=>{const n={ +className:"number",begin:/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d{1,5})?/} +;return{name:"Apache config",aliases:["apacheconf"],case_insensitive:!0, +contains:[e.HASH_COMMENT_MODE,{className:"section",begin:/<\/?/,end:/>/, +contains:[n,{className:"number",begin:/:\d{1,5}/ +},e.inherit(e.QUOTE_STRING_MODE,{relevance:0})]},{className:"attribute", +begin:/\w+/,relevance:0,keywords:{ +nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername" +},starts:{end:/$/,relevance:0,keywords:{literal:"on off all deny allow"}, +contains:[{className:"meta",begin:/\s\[/,end:/\]$/},{className:"variable", +begin:/[\$%]\{/,end:/\}/,contains:["self",{className:"number",begin:/[$%]\d+/}] +},n,{className:"number",begin:/\d+/},e.QUOTE_STRING_MODE]}}],illegal:/\S/}} +})()); +hljs.registerLanguage("bash",(()=>{"use strict";function e(...e){ +return e.map((e=>{return(s=e)?"string"==typeof s?s:s.source:null;var s +})).join("")}return s=>{const n={},t={begin:/\$\{/,end:/\}/,contains:["self",{ +begin:/:-/,contains:[n]}]};Object.assign(n,{className:"variable",variants:[{ +begin:e(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},t]});const a={ +className:"subst",begin:/\$\(/,end:/\)/,contains:[s.BACKSLASH_ESCAPE]},i={ +begin:/<<-?\s*(?=\w+)/,starts:{contains:[s.END_SAME_AS_BEGIN({begin:/(\w+)/, +end:/(\w+)/,className:"string"})]}},c={className:"string",begin:/"/,end:/"/, +contains:[s.BACKSLASH_ESCAPE,n,a]};a.contains.push(c);const o={begin:/\$\(\(/, +end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},s.NUMBER_MODE,n] +},r=s.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10 +}),l={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0, +contains:[s.inherit(s.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{ +name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z._-]+\b/, +keyword:"if then else elif fi for while in do done case esac function", +literal:"true false", +built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp" +},contains:[r,s.SHEBANG(),l,o,s.HASH_COMMENT_MODE,i,c,{className:"",begin:/\\"/ +},{className:"string",begin:/'/,end:/'/},n]}}})()); +hljs.registerLanguage("c",(()=>{"use strict";function e(e){ +return((...e)=>e.map((e=>(e=>e?"string"==typeof e?e:e.source:null)(e))).join(""))("(",e,")?") +}return t=>{const n=t.COMMENT("//","$",{contains:[{begin:/\\\n/}] +}),r="[a-zA-Z_]\\w*::",a="(decltype\\(auto\\)|"+e(r)+"[a-zA-Z_]\\w*"+e("<[^<>]+>")+")",i={ +className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},s={className:"string", +variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n", +contains:[t.BACKSLASH_ESCAPE]},{ +begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)", +end:"'",illegal:"."},t.END_SAME_AS_BEGIN({ +begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},o={ +className:"number",variants:[{begin:"\\b(0b[01']+)"},{ +begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)" +},{ +begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" +}],relevance:0},c={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{ +"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include" +},contains:[{begin:/\\\n/,relevance:0},t.inherit(s,{className:"meta-string"}),{ +className:"meta-string",begin:/<.*?>/},n,t.C_BLOCK_COMMENT_MODE]},l={ +className:"title",begin:e(r)+t.IDENT_RE,relevance:0 +},d=e(r)+t.IDENT_RE+"\\s*\\(",u={ +keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_t short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq", +built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary", +literal:"true false nullptr NULL"},m=[c,i,n,t.C_BLOCK_COMMENT_MODE,o,s],p={ +variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{ +beginKeywords:"new throw return else",end:/;/}],keywords:u,contains:m.concat([{ +begin:/\(/,end:/\)/,keywords:u,contains:m.concat(["self"]),relevance:0}]), +relevance:0},_={className:"function",begin:"("+a+"[\\*&\\s]+)+"+d, +returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:u,illegal:/[^\w\s\*&:<>.]/, +contains:[{begin:"decltype\\(auto\\)",keywords:u,relevance:0},{begin:d, +returnBegin:!0,contains:[l],relevance:0},{className:"params",begin:/\(/, +end:/\)/,keywords:u,relevance:0,contains:[n,t.C_BLOCK_COMMENT_MODE,s,o,i,{ +begin:/\(/,end:/\)/,keywords:u,relevance:0, +contains:["self",n,t.C_BLOCK_COMMENT_MODE,s,o,i]}] +},i,n,t.C_BLOCK_COMMENT_MODE,c]};return{name:"C",aliases:["h"],keywords:u, +disableAutodetect:!0,illegal:"",keywords:u,contains:["self",i]},{begin:t.IDENT_RE+"::",keywords:u},{ +className:"class",beginKeywords:"enum class struct union",end:/[{;:<>=]/, +contains:[{beginKeywords:"final class struct"},t.TITLE_MODE]}]),exports:{ +preprocessor:c,strings:s,keywords:u}}}})()); +hljs.registerLanguage("coffeescript",(()=>{"use strict" +;const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer","BigInt64Array","BigUint64Array","BigInt"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]) +;return r=>{const t={ +keyword:e.concat(["then","unless","until","loop","by","when","and","or","is","isnt","not"]).filter((i=["var","const","let","function","static"], +e=>!i.includes(e))),literal:n.concat(["yes","no","on","off"]), +built_in:a.concat(["npm","print"])};var i;const s="[A-Za-z$_][0-9A-Za-z$_]*",o={ +className:"subst",begin:/#\{/,end:/\}/,keywords:t +},c=[r.BINARY_NUMBER_MODE,r.inherit(r.C_NUMBER_MODE,{starts:{end:"(\\s*/)?", +relevance:0}}),{className:"string",variants:[{begin:/'''/,end:/'''/, +contains:[r.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[r.BACKSLASH_ESCAPE] +},{begin:/"""/,end:/"""/,contains:[r.BACKSLASH_ESCAPE,o]},{begin:/"/,end:/"/, +contains:[r.BACKSLASH_ESCAPE,o]}]},{className:"regexp",variants:[{begin:"///", +end:"///",contains:[o,r.HASH_COMMENT_MODE]},{begin:"//[gim]{0,3}(?=\\W)", +relevance:0},{begin:/\/(?![ *]).*?(?![\\]).\/[gim]{0,3}(?=\W)/}]},{begin:"@"+s +},{subLanguage:"javascript",excludeBegin:!0,excludeEnd:!0,variants:[{ +begin:"```",end:"```"},{begin:"`",end:"`"}]}];o.contains=c +;const l=r.inherit(r.TITLE_MODE,{begin:s}),d="(\\(.*\\)\\s*)?\\B[-=]>",g={ +className:"params",begin:"\\([^\\(]",returnBegin:!0,contains:[{begin:/\(/, +end:/\)/,keywords:t,contains:["self"].concat(c)}]};return{name:"CoffeeScript", +aliases:["coffee","cson","iced"],keywords:t,illegal:/\/\*/, +contains:c.concat([r.COMMENT("###","###"),r.HASH_COMMENT_MODE,{ +className:"function",begin:"^\\s*"+s+"\\s*=\\s*"+d,end:"[-=]>",returnBegin:!0, +contains:[l,g]},{begin:/[:\(,=]\s*/,relevance:0,contains:[{className:"function", +begin:d,end:"[-=]>",returnBegin:!0,contains:[g]}]},{className:"class", +beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{ +beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[l]},l] +},{begin:s+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}})()); +hljs.registerLanguage("cpp",(()=>{"use strict";function e(e){ +return t("(",e,")?")}function t(...e){return e.map((e=>{ +return(t=e)?"string"==typeof t?t:t.source:null;var t})).join("")}return n=>{ +const r=n.COMMENT("//","$",{contains:[{begin:/\\\n/}] +}),a="[a-zA-Z_]\\w*::",i="(decltype\\(auto\\)|"+e(a)+"[a-zA-Z_]\\w*"+e("<[^<>]+>")+")",s={ +className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},c={className:"string", +variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n", +contains:[n.BACKSLASH_ESCAPE]},{ +begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)", +end:"'",illegal:"."},n.END_SAME_AS_BEGIN({ +begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},o={ +className:"number",variants:[{begin:"\\b(0b[01']+)"},{ +begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)" +},{ +begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" +}],relevance:0},l={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{ +"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include" +},contains:[{begin:/\\\n/,relevance:0},n.inherit(c,{className:"meta-string"}),{ +className:"meta-string",begin:/<.*?>/},r,n.C_BLOCK_COMMENT_MODE]},d={ +className:"title",begin:e(a)+n.IDENT_RE,relevance:0 +},u=e(a)+n.IDENT_RE+"\\s*\\(",m={ +keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_t short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq", +built_in:"_Bool _Complex _Imaginary", +_relevance_hints:["asin","atan2","atan","calloc","ceil","cosh","cos","exit","exp","fabs","floor","fmod","fprintf","fputs","free","frexp","auto_ptr","deque","list","queue","stack","vector","map","set","pair","bitset","multiset","multimap","unordered_set","fscanf","future","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","tolower","toupper","labs","ldexp","log10","log","malloc","realloc","memchr","memcmp","memcpy","memset","modf","pow","printf","putchar","puts","scanf","sinh","sin","snprintf","sprintf","sqrt","sscanf","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","tanh","tan","unordered_map","unordered_multiset","unordered_multimap","priority_queue","make_pair","array","shared_ptr","abort","terminate","abs","acos","vfprintf","vprintf","vsprintf","endl","initializer_list","unique_ptr","complex","imaginary","std","string","wstring","cin","cout","cerr","clog","stdin","stdout","stderr","stringstream","istringstream","ostringstream"], +literal:"true false nullptr NULL"},p={className:"function.dispatch",relevance:0, +keywords:m, +begin:t(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!while)/,n.IDENT_RE,(_=/\s*\(/, +t("(?=",_,")")))};var _;const g=[p,l,s,r,n.C_BLOCK_COMMENT_MODE,o,c],b={ +variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{ +beginKeywords:"new throw return else",end:/;/}],keywords:m,contains:g.concat([{ +begin:/\(/,end:/\)/,keywords:m,contains:g.concat(["self"]),relevance:0}]), +relevance:0},f={className:"function",begin:"("+i+"[\\*&\\s]+)+"+u, +returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:m,illegal:/[^\w\s\*&:<>.]/, +contains:[{begin:"decltype\\(auto\\)",keywords:m,relevance:0},{begin:u, +returnBegin:!0,contains:[d],relevance:0},{begin:/::/,relevance:0},{begin:/:/, +endsWithParent:!0,contains:[c,o]},{className:"params",begin:/\(/,end:/\)/, +keywords:m,relevance:0,contains:[r,n.C_BLOCK_COMMENT_MODE,c,o,s,{begin:/\(/, +end:/\)/,keywords:m,relevance:0,contains:["self",r,n.C_BLOCK_COMMENT_MODE,c,o,s] +}]},s,r,n.C_BLOCK_COMMENT_MODE,l]};return{name:"C++", +aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:m,illegal:"",keywords:m,contains:["self",s]},{begin:n.IDENT_RE+"::",keywords:m},{ +className:"class",beginKeywords:"enum class struct union",end:/[{;:<>=]/, +contains:[{beginKeywords:"final class struct"},n.TITLE_MODE]}]),exports:{ +preprocessor:l,strings:c,keywords:m}}}})()); +hljs.registerLanguage("csharp",(()=>{"use strict";return e=>{const n={ +keyword:["abstract","as","base","break","case","class","const","continue","do","else","event","explicit","extern","finally","fixed","for","foreach","goto","if","implicit","in","interface","internal","is","lock","namespace","new","operator","out","override","params","private","protected","public","readonly","record","ref","return","sealed","sizeof","stackalloc","static","struct","switch","this","throw","try","typeof","unchecked","unsafe","using","virtual","void","volatile","while"].concat(["add","alias","and","ascending","async","await","by","descending","equals","from","get","global","group","init","into","join","let","nameof","not","notnull","on","or","orderby","partial","remove","select","set","unmanaged","value|0","var","when","where","with","yield"]), +built_in:["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"], +literal:["default","false","null","true"]},a=e.inherit(e.TITLE_MODE,{ +begin:"[a-zA-Z](\\.?\\w)*"}),i={className:"number",variants:[{ +begin:"\\b(0b[01']+)"},{ +begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{ +begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" +}],relevance:0},s={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}] +},t=e.inherit(s,{illegal:/\n/}),r={className:"subst",begin:/\{/,end:/\}/, +keywords:n},l=e.inherit(r,{illegal:/\n/}),c={className:"string",begin:/\$"/, +end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/ +},e.BACKSLASH_ESCAPE,l]},o={className:"string",begin:/\$@"/,end:'"',contains:[{ +begin:/\{\{/},{begin:/\}\}/},{begin:'""'},r]},d=e.inherit(o,{illegal:/\n/, +contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},l]}) +;r.contains=[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,i,e.C_BLOCK_COMMENT_MODE], +l.contains=[d,c,t,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,i,e.inherit(e.C_BLOCK_COMMENT_MODE,{ +illegal:/\n/})];const g={variants:[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE] +},E={begin:"<",end:">",contains:[{beginKeywords:"in out"},a] +},_=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",b={ +begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"], +keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0, +contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{ +begin:"\x3c!--|--\x3e"},{begin:""}]}] +}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#", +end:"$",keywords:{ +"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum" +}},g,i,{beginKeywords:"class interface",relevance:0,end:/[{;=]/, +illegal:/[^\s:,]/,contains:[{beginKeywords:"where class" +},a,E,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace", +relevance:0,end:/[{;=]/,illegal:/[^\s:]/, +contains:[a,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{ +beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/, +contains:[a,E,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta", +begin:"^\\s*\\[",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{ +className:"meta-string",begin:/"/,end:/"/}]},{ +beginKeywords:"new return throw await else",relevance:0},{className:"function", +begin:"("+_+"\\s+)+"+e.IDENT_RE+"\\s*(<.+>\\s*)?\\(",returnBegin:!0, +end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{ +beginKeywords:"public private protected static internal protected abstract async extern override unsafe virtual new sealed partial", +relevance:0},{begin:e.IDENT_RE+"\\s*(<.+>\\s*)?\\(",returnBegin:!0, +contains:[e.TITLE_MODE,E],relevance:0},{className:"params",begin:/\(/,end:/\)/, +excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0, +contains:[g,i,e.C_BLOCK_COMMENT_MODE] +},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},b]}}})()); +hljs.registerLanguage("css",(()=>{"use strict" +;const e=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],t=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],i=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],o=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],r=["align-content","align-items","align-self","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","auto","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","clip-path","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-variant","font-variant-ligatures","font-variation-settings","font-weight","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inherit","initial","justify-content","left","letter-spacing","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","mask","max-height","max-width","min-height","min-width","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","perspective","perspective-origin","pointer-events","position","quotes","resize","right","src","tab-size","table-layout","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-indent","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","white-space","widows","width","word-break","word-spacing","word-wrap","z-index"].reverse() +;return n=>{const a=(e=>({IMPORTANT:{className:"meta",begin:"!important"}, +HEXCOLOR:{className:"number",begin:"#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})"}, +ATTRIBUTE_SELECTOR_MODE:{className:"selector-attr",begin:/\[/,end:/\]/, +illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]} +}))(n),l=[n.APOS_STRING_MODE,n.QUOTE_STRING_MODE];return{name:"CSS", +case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"}, +classNameAliases:{keyframePosition:"selector-tag"}, +contains:[n.C_BLOCK_COMMENT_MODE,{begin:/-(webkit|moz|ms|o)-(?=[a-z])/ +},n.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0 +},{className:"selector-class",begin:"\\.[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0 +},a.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{ +begin:":("+i.join("|")+")"},{begin:"::("+o.join("|")+")"}]},{ +className:"attribute",begin:"\\b("+r.join("|")+")\\b"},{begin:":",end:"[;}]", +contains:[a.HEXCOLOR,a.IMPORTANT,n.CSS_NUMBER_MODE,...l,{ +begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri" +},contains:[{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}] +},{className:"built_in",begin:/[\w-]+(?=\()/}]},{ +begin:(s=/@/,((...e)=>e.map((e=>(e=>e?"string"==typeof e?e:e.source:null)(e))).join(""))("(?=",s,")")), +end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword", +begin:/@-?\w[\w]*(-\w+)*/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0, +relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:"and or not only", +attribute:t.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute" +},...l,n.CSS_NUMBER_MODE]}]},{className:"selector-tag", +begin:"\\b("+e.join("|")+")\\b"}]};var s}})()); +hljs.registerLanguage("diff",(()=>{"use strict";return e=>({name:"Diff", +aliases:["patch"],contains:[{className:"meta",relevance:10,variants:[{ +begin:/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/},{begin:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{ +begin:/^--- +\d+,\d+ +----$/}]},{className:"comment",variants:[{begin:/Index: /, +end:/$/},{begin:/^index/,end:/$/},{begin:/={3,}/,end:/$/},{begin:/^-{3}/,end:/$/ +},{begin:/^\*{3} /,end:/$/},{begin:/^\+{3}/,end:/$/},{begin:/^\*{15}$/},{ +begin:/^diff --git/,end:/$/}]},{className:"addition",begin:/^\+/,end:/$/},{ +className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/, +end:/$/}]})})()); +hljs.registerLanguage("go",(()=>{"use strict";return e=>{const n={ +keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune", +literal:"true false iota nil", +built_in:"append cap close complex copy imag len make new panic print println real recover delete" +};return{name:"Go",aliases:["golang"],keywords:n,illegal:"{"use strict";function e(...e){ +return e.map((e=>{return(n=e)?"string"==typeof n?n:n.source:null;var n +})).join("")}return n=>{const a="HTTP/(2|1\\.[01])",s={className:"attribute", +begin:e("^",/[A-Za-z][A-Za-z0-9-]*/,"(?=\\:\\s)"),starts:{contains:[{ +className:"punctuation",begin:/: /,relevance:0,starts:{end:"$",relevance:0}}]} +},t=[s,{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}];return{ +name:"HTTP",aliases:["https"],illegal:/\S/,contains:[{begin:"^(?="+a+" \\d{3})", +end:/$/,contains:[{className:"meta",begin:a},{className:"number", +begin:"\\b\\d{3}\\b"}],starts:{end:/\b\B/,illegal:/\S/,contains:t}},{ +begin:"(?=^[A-Z]+ (.*?) "+a+"$)",end:/$/,contains:[{className:"string", +begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{className:"meta",begin:a},{ +className:"keyword",begin:"[A-Z]+"}],starts:{end:/\b\B/,illegal:/\S/,contains:t} +},n.inherit(s,{relevance:0})]}}})()); +hljs.registerLanguage("ini",(()=>{"use strict";function e(e){ +return e?"string"==typeof e?e:e.source:null}function n(...n){ +return n.map((n=>e(n))).join("")}return s=>{const a={className:"number", +relevance:0,variants:[{begin:/([+-]+)?[\d]+_[\d_]+/},{begin:s.NUMBER_RE}] +},i=s.COMMENT();i.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];const t={ +className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)\}/ +}]},r={className:"literal",begin:/\bon|off|true|false|yes|no\b/},l={ +className:"string",contains:[s.BACKSLASH_ESCAPE],variants:[{begin:"'''", +end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"' +},{begin:"'",end:"'"}]},c={begin:/\[/,end:/\]/,contains:[i,r,t,l,a,"self"], +relevance:0 +},g="("+[/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/].map((n=>e(n))).join("|")+")" +;return{name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/, +contains:[i,{className:"section",begin:/\[+/,end:/\]+/},{ +begin:n(g,"(\\s*\\.\\s*",g,")*",n("(?=",/\s*=\s*[^#\s]/,")")),className:"attr", +starts:{end:/$/,contains:[i,c,r,t,l,a]}}]}}})()); +hljs.registerLanguage("java",(()=>{"use strict" +;var e="\\.([0-9](_*[0-9])*)",n="[0-9a-fA-F](_*[0-9a-fA-F])*",a={ +className:"number",variants:[{ +begin:`(\\b([0-9](_*[0-9])*)((${e})|\\.)?|(${e}))[eE][+-]?([0-9](_*[0-9])*)[fFdD]?\\b` +},{begin:`\\b([0-9](_*[0-9])*)((${e})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{ +begin:`(${e})[fFdD]?\\b`},{begin:"\\b([0-9](_*[0-9])*)[fFdD]\\b"},{ +begin:`\\b0[xX]((${n})\\.?|(${n})?\\.(${n}))[pP][+-]?([0-9](_*[0-9])*)[fFdD]?\\b` +},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${n})[lL]?\\b`},{ +begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}], +relevance:0};return e=>{ +var n="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",s={ +className:"meta",begin:"@[\xc0-\u02b8a-zA-Z_$][\xc0-\u02b8a-zA-Z_$0-9]*", +contains:[{begin:/\(/,end:/\)/,contains:["self"]}]};const r=a;return{ +name:"Java",aliases:["jsp"],keywords:n,illegal:/<\/|#/, +contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/, +relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{ +begin:/import java\.[a-z]+\./,keywords:"import",relevance:2 +},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{ +className:"class",beginKeywords:"class interface enum",end:/[{;=]/, +excludeEnd:!0,relevance:1,keywords:"class interface enum",illegal:/[:"\[\]]/, +contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{ +beginKeywords:"new throw return else",relevance:0},{className:"class", +begin:"record\\s+"+e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,excludeEnd:!0, +end:/[{;=]/,keywords:n,contains:[{beginKeywords:"record"},{ +begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0, +contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/, +keywords:n,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE] +},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"function", +begin:"([\xc0-\u02b8a-zA-Z_$][\xc0-\u02b8a-zA-Z_$0-9]*(<[\xc0-\u02b8a-zA-Z_$][\xc0-\u02b8a-zA-Z_$0-9]*(\\s*,\\s*[\xc0-\u02b8a-zA-Z_$][\xc0-\u02b8a-zA-Z_$0-9]*)*>)?\\s+)+"+e.UNDERSCORE_IDENT_RE+"\\s*\\(", +returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:n,contains:[{ +begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0, +contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/, +keywords:n,relevance:0, +contains:[s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,r,e.C_BLOCK_COMMENT_MODE] +},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},r,s]}}})()); +hljs.registerLanguage("javascript",(()=>{"use strict" +;const e="[A-Za-z$_][0-9A-Za-z$_]*",n=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],a=["true","false","null","undefined","NaN","Infinity"],s=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer","BigInt64Array","BigUint64Array","BigInt"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]) +;function r(e){return t("(?=",e,")")}function t(...e){return e.map((e=>{ +return(n=e)?"string"==typeof n?n:n.source:null;var n})).join("")}return i=>{ +const c=e,o={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/, +isTrulyOpeningTag:(e,n)=>{const a=e[0].length+e.index,s=e.input[a] +;"<"!==s?">"===s&&(((e,{after:n})=>{const a="", +returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{ +begin:i.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0 +},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:l,contains:f}]}] +},{begin:/,/,relevance:0},{className:"",begin:/\s/,end:/\s*/,skip:!0},{ +variants:[{begin:"<>",end:""},{begin:o.begin,"on:begin":o.isTrulyOpeningTag, +end:o.end}],subLanguage:"xml",contains:[{begin:o.begin,end:o.end,skip:!0, +contains:["self"]}]}],relevance:0},{className:"function", +beginKeywords:"function",end:/[{;]/,excludeEnd:!0,keywords:l, +contains:["self",i.inherit(i.TITLE_MODE,{begin:c}),p],illegal:/%/},{ +beginKeywords:"while if switch catch for"},{className:"function", +begin:i.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{", +returnBegin:!0,contains:[p,i.inherit(i.TITLE_MODE,{begin:c})]},{variants:[{ +begin:"\\."+c},{begin:"\\$"+c}],relevance:0},{className:"class", +beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"[\]]/,contains:[{ +beginKeywords:"extends"},i.UNDERSCORE_TITLE_MODE]},{begin:/\b(?=constructor)/, +end:/[{;]/,excludeEnd:!0,contains:[i.inherit(i.TITLE_MODE,{begin:c}),"self",p] +},{begin:"(get|set)\\s+(?="+c+"\\()",end:/\{/,keywords:"get set", +contains:[i.inherit(i.TITLE_MODE,{begin:c}),{begin:/\(\)/},p]},{begin:/\$[(.]/}] +}}})()); +hljs.registerLanguage("json",(()=>{"use strict";return n=>{const e={ +literal:"true false null" +},i=[n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE],a=[n.QUOTE_STRING_MODE,n.C_NUMBER_MODE],l={ +end:",",endsWithParent:!0,excludeEnd:!0,contains:a,keywords:e},t={begin:/\{/, +end:/\}/,contains:[{className:"attr",begin:/"/,end:/"/, +contains:[n.BACKSLASH_ESCAPE],illegal:"\\n"},n.inherit(l,{begin:/:/ +})].concat(i),illegal:"\\S"},s={begin:"\\[",end:"\\]",contains:[n.inherit(l)], +illegal:"\\S"};return a.push(t,s),i.forEach((n=>{a.push(n)})),{name:"JSON", +contains:a,keywords:e,illegal:"\\S"}}})()); +hljs.registerLanguage("kotlin",(()=>{"use strict" +;var e="\\.([0-9](_*[0-9])*)",n="[0-9a-fA-F](_*[0-9a-fA-F])*",a={ +className:"number",variants:[{ +begin:`(\\b([0-9](_*[0-9])*)((${e})|\\.)?|(${e}))[eE][+-]?([0-9](_*[0-9])*)[fFdD]?\\b` +},{begin:`\\b([0-9](_*[0-9])*)((${e})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{ +begin:`(${e})[fFdD]?\\b`},{begin:"\\b([0-9](_*[0-9])*)[fFdD]\\b"},{ +begin:`\\b0[xX]((${n})\\.?|(${n})?\\.(${n}))[pP][+-]?([0-9](_*[0-9])*)[fFdD]?\\b` +},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${n})[lL]?\\b`},{ +begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}], +relevance:0};return e=>{const n={ +keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual", +built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing", +literal:"true false null"},i={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@" +},s={className:"subst",begin:/\$\{/,end:/\}/,contains:[e.C_NUMBER_MODE]},t={ +className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},r={className:"string", +variants:[{begin:'"""',end:'"""(?=[^"])',contains:[t,s]},{begin:"'",end:"'", +illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/, +contains:[e.BACKSLASH_ESCAPE,t,s]}]};s.contains.push(r);const l={ +className:"meta", +begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?" +},c={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/, +end:/\)/,contains:[e.inherit(r,{className:"meta-string"})]}] +},o=a,b=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),E={ +variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/, +contains:[]}]},d=E;return d.variants[1].contains=[E],E.variants[1].contains=[d], +{name:"Kotlin",aliases:["kt","kts"],keywords:n, +contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag", +begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,b,{className:"keyword", +begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol", +begin:/@\w+/}]}},i,l,c,{className:"function",beginKeywords:"fun",end:"[(]|$", +returnBegin:!0,excludeEnd:!0,keywords:n,relevance:5,contains:[{ +begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0, +contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://, +keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/, +endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/, +endsWithParent:!0,contains:[E,e.C_LINE_COMMENT_MODE,b],relevance:0 +},e.C_LINE_COMMENT_MODE,b,l,c,r,e.C_NUMBER_MODE]},b]},{className:"class", +beginKeywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0, +illegal:"extends implements",contains:[{ +beginKeywords:"public protected internal private constructor" +},e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0, +excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,]|$/, +excludeBegin:!0,returnEnd:!0},l,c]},r,{className:"meta",begin:"^#!/usr/bin/env", +end:"$",illegal:"\n"},o]}}})()); +hljs.registerLanguage("less",(()=>{"use strict" +;const e=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],t=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],i=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],o=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],n=["align-content","align-items","align-self","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","auto","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","clip-path","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-variant","font-variant-ligatures","font-variation-settings","font-weight","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inherit","initial","justify-content","left","letter-spacing","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","mask","max-height","max-width","min-height","min-width","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","perspective","perspective-origin","pointer-events","position","quotes","resize","right","src","tab-size","table-layout","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-indent","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","white-space","widows","width","word-break","word-spacing","word-wrap","z-index"].reverse(),r=i.concat(o) +;return a=>{const s=(e=>({IMPORTANT:{className:"meta",begin:"!important"}, +HEXCOLOR:{className:"number",begin:"#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})"}, +ATTRIBUTE_SELECTOR_MODE:{className:"selector-attr",begin:/\[/,end:/\]/, +illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]} +}))(a),l=r,d="([\\w-]+|@\\{[\\w-]+\\})",c=[],g=[],b=e=>({className:"string", +begin:"~?"+e+".*?"+e}),m=(e,t,i)=>({className:e,begin:t,relevance:i}),u={ +$pattern:/[a-z-]+/,keyword:"and or not only",attribute:t.join(" ")},p={ +begin:"\\(",end:"\\)",contains:g,keywords:u,relevance:0} +;g.push(a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,b("'"),b('"'),a.CSS_NUMBER_MODE,{ +begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]", +excludeEnd:!0} +},s.HEXCOLOR,p,m("variable","@@?[\\w-]+",10),m("variable","@\\{[\\w-]+\\}"),m("built_in","~?`[^`]*?`"),{ +className:"attribute",begin:"[\\w-]+\\s*:",end:":",returnBegin:!0,excludeEnd:!0 +},s.IMPORTANT);const f=g.concat({begin:/\{/,end:/\}/,contains:c}),h={ +beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not" +}].concat(g)},w={begin:d+"\\s*:",returnBegin:!0,end:/[;}]/,relevance:0, +contains:[{begin:/-(webkit|moz|ms|o)-/},{className:"attribute", +begin:"\\b("+n.join("|")+")\\b",end:/(?=:)/,starts:{endsWithParent:!0, +illegal:"[<=$]",relevance:0,contains:g}}]},v={className:"keyword", +begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b", +starts:{end:"[;{}]",keywords:u,returnEnd:!0,contains:g,relevance:0}},y={ +className:"variable",variants:[{begin:"@[\\w-]+\\s*:",relevance:15},{ +begin:"@[\\w-]+"}],starts:{end:"[;}]",returnEnd:!0,contains:f}},k={variants:[{ +begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:d,end:/\{/}],returnBegin:!0, +returnEnd:!0,illegal:"[<='$\"]",relevance:0, +contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,h,m("keyword","all\\b"),m("variable","@\\{[\\w-]+\\}"),{ +begin:"\\b("+e.join("|")+")\\b",className:"selector-tag" +},m("selector-tag",d+"%?",0),m("selector-id","#"+d),m("selector-class","\\."+d,0),m("selector-tag","&",0),s.ATTRIBUTE_SELECTOR_MODE,{ +className:"selector-pseudo",begin:":("+i.join("|")+")"},{ +className:"selector-pseudo",begin:"::("+o.join("|")+")"},{begin:"\\(",end:"\\)", +contains:f},{begin:"!important"}]},E={begin:`[\\w-]+:(:)?(${l.join("|")})`, +returnBegin:!0,contains:[k]} +;return c.push(a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,v,y,E,w,k),{ +name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:c}}})()); +hljs.registerLanguage("lua",(()=>{"use strict";return e=>{ +const t="\\[=*\\[",a="\\]=*\\]",n={begin:t,end:a,contains:["self"] +},o=[e.COMMENT("--(?!\\[=*\\[)","$"),e.COMMENT("--\\[=*\\[",a,{contains:[n], +relevance:10})];return{name:"Lua",keywords:{$pattern:e.UNDERSCORE_IDENT_RE, +literal:"true false nil", +keyword:"and break do else elseif end for goto if in local not or repeat return then until while", +built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove" +},contains:o.concat([{className:"function",beginKeywords:"function",end:"\\)", +contains:[e.inherit(e.TITLE_MODE,{ +begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params", +begin:"\\(",endsWithParent:!0,contains:o}].concat(o) +},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string", +begin:t,end:a,contains:[n],relevance:5}])}}})()); +hljs.registerLanguage("makefile",(()=>{"use strict";return e=>{const i={ +className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)", +contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%{"use strict";function e(e){ +return e?"string"==typeof e?e:e.source:null}function n(e){return a("(?=",e,")")} +function a(...n){return n.map((n=>e(n))).join("")}function s(...n){ +return"("+n.map((n=>e(n))).join("|")+")"}return e=>{ +const t=a(/[A-Z_]/,a("(",/[A-Z0-9_.-]*:/,")?"),/[A-Z0-9_.-]*/),i={ +className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},r={begin:/\s/, +contains:[{className:"meta-keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}] +},c=e.inherit(r,{begin:/\(/,end:/\)/}),l=e.inherit(e.APOS_STRING_MODE,{ +className:"meta-string"}),g=e.inherit(e.QUOTE_STRING_MODE,{ +className:"meta-string"}),m={endsWithParent:!0,illegal:/`]+/}]}] +}]};return{name:"HTML, XML", +aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"], +case_insensitive:!0,contains:[{className:"meta",begin://, +relevance:10,contains:[r,g,l,c,{begin:/\[/,end:/\]/,contains:[{className:"meta", +begin://,contains:[r,c,g,l]}]}]},e.COMMENT(//,{ +relevance:10}),{begin://,relevance:10},i,{ +className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag", +begin:/)/,end:/>/,keywords:{name:"style"},contains:[m],starts:{ +end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag", +begin:/)/,end:/>/,keywords:{name:"script"},contains:[m],starts:{ +end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{ +className:"tag",begin:/<>|<\/>/},{className:"tag", +begin:a(//,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name", +begin:t,relevance:0,starts:m}]},{className:"tag",begin:a(/<\//,n(a(t,/>/))), +contains:[{className:"name",begin:t,relevance:0},{begin:/>/,relevance:0, +endsParent:!0}]}]}}})()); +hljs.registerLanguage("markdown",(()=>{"use strict";function n(...n){ +return n.map((n=>{return(e=n)?"string"==typeof e?e:e.source:null;var e +})).join("")}return e=>{const a={begin:/<\/?[A-Za-z_]/,end:">", +subLanguage:"xml",relevance:0},i={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0 +},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/, +relevance:2},{begin:n(/\[.+?\]\(/,/[A-Za-z][A-Za-z0-9+.-]*/,/:\/\/.*?\)/), +relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{ +begin:/\[.+?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{ +className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0, +returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)", +excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[", +end:"\\]",excludeBegin:!0,excludeEnd:!0}]},s={className:"strong",contains:[], +variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},c={ +className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{ +begin:/_(?!_)/,end:/_/,relevance:0}]};s.contains.push(c),c.contains.push(s) +;let t=[a,i] +;return s.contains=s.contains.concat(t),c.contains=c.contains.concat(t), +t=t.concat(s,c),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{ +className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:t},{ +begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n", +contains:t}]}]},a,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)", +end:"\\s+",excludeEnd:!0},s,c,{className:"quote",begin:"^>\\s+",contains:t, +end:"$"},{className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{ +begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{ +begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))", +contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{ +begin:"^[-\\*]{3,}",end:"$"},i,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{ +className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{ +className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}})()); +hljs.registerLanguage("nginx",(()=>{"use strict";return e=>{const n={ +className:"variable",variants:[{begin:/\$\d+/},{begin:/\$\{/,end:/\}/},{ +begin:/[$@]/+e.UNDERSCORE_IDENT_RE}]},a={endsWithParent:!0,keywords:{ +$pattern:"[a-z/_]+", +literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll" +},relevance:0,illegal:"=>",contains:[e.HASH_COMMENT_MODE,{className:"string", +contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/ +}]},{begin:"([a-z]+):/",end:"\\s",endsWithParent:!0,excludeEnd:!0,contains:[n] +},{className:"regexp",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:"\\s\\^", +end:"\\s|\\{|;",returnEnd:!0},{begin:"~\\*?\\s+",end:"\\s|\\{|;",returnEnd:!0},{ +begin:"\\*(\\.[a-z\\-]+)+"},{begin:"([a-z\\-]+\\.)+\\*"}]},{className:"number", +begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{ +className:"number",begin:"\\b\\d+[kKmMgGdshdwy]*\\b",relevance:0},n]};return{ +name:"Nginx config",aliases:["nginxconf"],contains:[e.HASH_COMMENT_MODE,{ +begin:e.UNDERSCORE_IDENT_RE+"\\s+\\{",returnBegin:!0,end:/\{/,contains:[{ +className:"section",begin:e.UNDERSCORE_IDENT_RE}],relevance:0},{ +begin:e.UNDERSCORE_IDENT_RE+"\\s",end:";|\\{",returnBegin:!0,contains:[{ +className:"attribute",begin:e.UNDERSCORE_IDENT_RE,starts:a}],relevance:0}], +illegal:"[^\\s\\}]"}}})()); +hljs.registerLanguage("objectivec",(()=>{"use strict";return e=>{ +const n=/[a-zA-Z@][a-zA-Z0-9_]*/,_={$pattern:n, +keyword:"@interface @class @protocol @implementation"};return{ +name:"Objective-C",aliases:["mm","objc","obj-c","obj-c++","objective-c++"], +keywords:{$pattern:n, +keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN", +literal:"false true FALSE TRUE nil YES NO NULL", +built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once" +},illegal:"/,end:/$/, +illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{ +className:"class",begin:"("+_.keyword.split(" ").join("|")+")\\b",end:/(\{|$)/, +excludeEnd:!0,keywords:_,contains:[e.UNDERSCORE_TITLE_MODE]},{ +begin:"\\."+e.UNDERSCORE_IDENT_RE,relevance:0}]}}})()); +hljs.registerLanguage("perl",(()=>{"use strict";function e(e){ +return e?"string"==typeof e?e:e.source:null}function n(...n){ +return n.map((n=>e(n))).join("")}function t(...n){ +return"("+n.map((n=>e(n))).join("|")+")"}return e=>{ +const r=/[dualxmsipngr]{0,12}/,s={$pattern:/[\w.]+/, +keyword:"abs accept alarm and atan2 bind binmode bless break caller chdir chmod chomp chop chown chr chroot close closedir connect continue cos crypt dbmclose dbmopen defined delete die do dump each else elsif endgrent endhostent endnetent endprotoent endpwent endservent eof eval exec exists exit exp fcntl fileno flock for foreach fork format formline getc getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getpeername getpgrp getpriority getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport getservent getsockname getsockopt given glob gmtime goto grep gt hex if index int ioctl join keys kill last lc lcfirst length link listen local localtime log lstat lt ma map mkdir msgctl msgget msgrcv msgsnd my ne next no not oct open opendir or ord our pack package pipe pop pos print printf prototype push q|0 qq quotemeta qw qx rand read readdir readline readlink readpipe recv redo ref rename require reset return reverse rewinddir rindex rmdir say scalar seek seekdir select semctl semget semop send setgrent sethostent setnetent setpgrp setpriority setprotoent setpwent setservent setsockopt shift shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split sprintf sqrt srand stat state study sub substr symlink syscall sysopen sysread sysseek system syswrite tell telldir tie tied time times tr truncate uc ucfirst umask undef unless unlink unpack unshift untie until use utime values vec wait waitpid wantarray warn when while write x|0 xor y|0" +},i={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:s},a={begin:/->\{/, +end:/\}/},o={variants:[{begin:/\$\d/},{ +begin:n(/[$%@](\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,"(?![A-Za-z])(?![@$%])") +},{begin:/[$%@][^\s\w{]/,relevance:0}] +},c=[e.BACKSLASH_ESCAPE,i,o],g=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],l=(e,t,s="\\1")=>{ +const i="\\1"===s?s:n(s,t) +;return n(n("(?:",e,")"),t,/(?:\\.|[^\\\/])*?/,i,/(?:\\.|[^\\\/])*?/,s,r) +},d=(e,t,s)=>n(n("(?:",e,")"),t,/(?:\\.|[^\\\/])*?/,s,r),p=[o,e.HASH_COMMENT_MODE,e.COMMENT(/^=\w/,/=cut/,{ +endsWithParent:!0}),a,{className:"string",contains:c,variants:[{ +begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[", +end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{ +begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*<",end:">", +relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'", +contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`", +contains:[e.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{ +begin:"-?\\w+\\s*=>",relevance:0}]},{className:"number", +begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b", +relevance:0},{ +begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*", +keywords:"split return print reverse grep",relevance:0, +contains:[e.HASH_COMMENT_MODE,{className:"regexp",variants:[{ +begin:l("s|tr|y",t(...g))},{begin:l("s|tr|y","\\(","\\)")},{ +begin:l("s|tr|y","\\[","\\]")},{begin:l("s|tr|y","\\{","\\}")}],relevance:2},{ +className:"regexp",variants:[{begin:/(m|qr)\/\//,relevance:0},{ +begin:d("(?:m|qr)?",/\//,/\//)},{begin:d("m|qr",t(...g),/\1/)},{ +begin:d("m|qr",/\(/,/\)/)},{begin:d("m|qr",/\[/,/\]/)},{ +begin:d("m|qr",/\{/,/\}/)}]}]},{className:"function",beginKeywords:"sub", +end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{ +begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$", +subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}] +}];return i.contains=p,a.contains=p,{name:"Perl",aliases:["pl","pm"],keywords:s, +contains:p}}})()); +hljs.registerLanguage("php",(()=>{"use strict";return e=>{const r={ +className:"variable", +begin:"\\$+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*(?![A-Za-z0-9])(?![$])"},t={ +className:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?[=]?/},{ +begin:/\?>/}]},a={className:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/, +end:/\}/}]},n=e.inherit(e.APOS_STRING_MODE,{illegal:null +}),i=e.inherit(e.QUOTE_STRING_MODE,{illegal:null, +contains:e.QUOTE_STRING_MODE.contains.concat(a)}),o=e.END_SAME_AS_BEGIN({ +begin:/<<<[ \t]*(\w+)\n/,end:/[ \t]*(\w+)\b/, +contains:e.QUOTE_STRING_MODE.contains.concat(a)}),l={className:"string", +contains:[e.BACKSLASH_ESCAPE,t],variants:[e.inherit(n,{begin:"b'",end:"'" +}),e.inherit(i,{begin:'b"',end:'"'}),i,n,o]},s={className:"number",variants:[{ +begin:"\\b0b[01]+(?:_[01]+)*\\b"},{begin:"\\b0o[0-7]+(?:_[0-7]+)*\\b"},{ +begin:"\\b0x[\\da-f]+(?:_[\\da-f]+)*\\b"},{ +begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:e[+-]?\\d+)?" +}],relevance:0},c={ +keyword:"__CLASS__ __DIR__ __FILE__ __FUNCTION__ __LINE__ __METHOD__ __NAMESPACE__ __TRAIT__ die echo exit include include_once print require require_once array abstract and as binary bool boolean break callable case catch class clone const continue declare default do double else elseif empty enddeclare endfor endforeach endif endswitch endwhile enum eval extends final finally float for foreach from global goto if implements instanceof insteadof int integer interface isset iterable list match|0 mixed new object or private protected public real return string switch throw trait try unset use var void while xor yield", +literal:"false null true", +built_in:"Error|0 AppendIterator ArgumentCountError ArithmeticError ArrayIterator ArrayObject AssertionError BadFunctionCallException BadMethodCallException CachingIterator CallbackFilterIterator CompileError Countable DirectoryIterator DivisionByZeroError DomainException EmptyIterator ErrorException Exception FilesystemIterator FilterIterator GlobIterator InfiniteIterator InvalidArgumentException IteratorIterator LengthException LimitIterator LogicException MultipleIterator NoRewindIterator OutOfBoundsException OutOfRangeException OuterIterator OverflowException ParentIterator ParseError RangeException RecursiveArrayIterator RecursiveCachingIterator RecursiveCallbackFilterIterator RecursiveDirectoryIterator RecursiveFilterIterator RecursiveIterator RecursiveIteratorIterator RecursiveRegexIterator RecursiveTreeIterator RegexIterator RuntimeException SeekableIterator SplDoublyLinkedList SplFileInfo SplFileObject SplFixedArray SplHeap SplMaxHeap SplMinHeap SplObjectStorage SplObserver SplObserver SplPriorityQueue SplQueue SplStack SplSubject SplSubject SplTempFileObject TypeError UnderflowException UnexpectedValueException UnhandledMatchError ArrayAccess Closure Generator Iterator IteratorAggregate Serializable Stringable Throwable Traversable WeakReference WeakMap Directory __PHP_Incomplete_Class parent php_user_filter self static stdClass" +};return{aliases:["php3","php4","php5","php6","php7","php8"], +case_insensitive:!0,keywords:c, +contains:[e.HASH_COMMENT_MODE,e.COMMENT("//","$",{contains:[t] +}),e.COMMENT("/\\*","\\*/",{contains:[{className:"doctag",begin:"@[A-Za-z]+"}] +}),e.COMMENT("__halt_compiler.+?;",!1,{endsWithParent:!0, +keywords:"__halt_compiler"}),t,{className:"keyword",begin:/\$this\b/},r,{ +begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function", +relevance:0,beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0, +illegal:"[$%\\[]",contains:[{beginKeywords:"use"},e.UNDERSCORE_TITLE_MODE,{ +begin:"=>",endsParent:!0},{className:"params",begin:"\\(",end:"\\)", +excludeBegin:!0,excludeEnd:!0,keywords:c, +contains:["self",r,e.C_BLOCK_COMMENT_MODE,l,s]}]},{className:"class",variants:[{ +beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait", +illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{ +beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{ +beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/, +contains:[e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"use",relevance:0,end:";", +contains:[e.UNDERSCORE_TITLE_MODE]},l,s]}}})()); +hljs.registerLanguage("php-template",(()=>{"use strict";return n=>({ +name:"PHP template",subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/, +subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"', +end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},n.inherit(n.APOS_STRING_MODE,{ +illegal:null,className:null,contains:null,skip:!0 +}),n.inherit(n.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null, +skip:!0})]}]})})()); +hljs.registerLanguage("plaintext",(()=>{"use strict";return t=>({ +name:"Plain text",aliases:["text","txt"],disableAutodetect:!0})})()); +hljs.registerLanguage("properties",(()=>{"use strict";return e=>{ +var n="[ \\t\\f]*",a=n+"[:=]"+n,t="("+a+"|[ \\t\\f]+)",r="([^\\\\\\W:= \\t\\f\\n]|\\\\.)+",s="([^\\\\:= \\t\\f\\n]|\\\\.)+",i={ +end:t,relevance:0,starts:{className:"string",end:/$/,relevance:0,contains:[{ +begin:"\\\\\\\\"},{begin:"\\\\\\n"}]}};return{name:".properties", +case_insensitive:!0,illegal:/\S/,contains:[e.COMMENT("^\\s*[!#]","$"),{ +returnBegin:!0,variants:[{begin:r+a,relevance:1},{begin:r+"[ \\t\\f]+", +relevance:0}],contains:[{className:"attr",begin:r,endsParent:!0,relevance:0}], +starts:i},{begin:s+t,returnBegin:!0,relevance:0,contains:[{className:"meta", +begin:s,endsParent:!0,relevance:0}],starts:i},{className:"attr",relevance:0, +begin:s+n+"$"}]}}})()); +hljs.registerLanguage("python",(()=>{"use strict";return e=>{const n={ +$pattern:/[A-Za-z]\w+|__\w+__/, +keyword:["and","as","assert","async","await","break","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"], +built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"], +literal:["__debug__","Ellipsis","False","None","NotImplemented","True"], +type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"] +},a={className:"meta",begin:/^(>>>|\.\.\.) /},i={className:"subst",begin:/\{/, +end:/\}/,keywords:n,illegal:/#/},s={begin:/\{\{/,relevance:0},t={ +className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{ +begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/, +contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{ +begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/, +contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{ +begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/, +contains:[e.BACKSLASH_ESCAPE,a,s,i]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/, +end:/"""/,contains:[e.BACKSLASH_ESCAPE,a,s,i]},{begin:/([uU]|[rR])'/,end:/'/, +relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{ +begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/, +end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/, +contains:[e.BACKSLASH_ESCAPE,s,i]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/, +contains:[e.BACKSLASH_ESCAPE,s,i]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE] +},r="[0-9](_?[0-9])*",l=`(\\b(${r}))?\\.(${r})|\\b(${r})\\.`,b={ +className:"number",relevance:0,variants:[{ +begin:`(\\b(${r})|(${l}))[eE][+-]?(${r})[jJ]?\\b`},{begin:`(${l})[jJ]?`},{ +begin:"\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?\\b"},{ +begin:"\\b0[bB](_?[01])+[lL]?\\b"},{begin:"\\b0[oO](_?[0-7])+[lL]?\\b"},{ +begin:"\\b0[xX](_?[0-9a-fA-F])+[lL]?\\b"},{begin:`\\b(${r})[jJ]\\b`}]},o={ +className:"comment", +begin:(d=/# type:/,((...e)=>e.map((e=>(e=>e?"string"==typeof e?e:e.source:null)(e))).join(""))("(?=",d,")")), +end:/$/,keywords:n,contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/, +endsWithParent:!0}]},c={className:"params",variants:[{className:"", +begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0, +keywords:n,contains:["self",a,b,t,e.HASH_COMMENT_MODE]}]};var d +;return i.contains=[t,b,a],{name:"Python",aliases:["py","gyp","ipython"], +keywords:n,illegal:/(<\/|->|\?)|=>/,contains:[a,b,{begin:/\bself\b/},{ +beginKeywords:"if",relevance:0},t,o,e.HASH_COMMENT_MODE,{variants:[{ +className:"function",beginKeywords:"def"},{className:"class", +beginKeywords:"class"}],end:/:/,illegal:/[${=;\n,]/, +contains:[e.UNDERSCORE_TITLE_MODE,c,{begin:/->/,endsWithParent:!0,keywords:n}] +},{className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[b,c,t]}]}}})()); +hljs.registerLanguage("python-repl",(()=>{"use strict";return s=>({ +aliases:["pycon"],contains:[{className:"meta",starts:{end:/ |$/,starts:{end:"$", +subLanguage:"python"}},variants:[{begin:/^>>>(?=[ ]|$)/},{ +begin:/^\.\.\.(?=[ ]|$)/}]}]})})()); +hljs.registerLanguage("r",(()=>{"use strict";function e(...e){return e.map((e=>{ +return(a=e)?"string"==typeof a?a:a.source:null;var a})).join("")}return a=>{ +const n=/(?:(?:[a-zA-Z]|\.[._a-zA-Z])[._a-zA-Z0-9]*)|\.(?!\d)/;return{name:"R", +illegal:/->/,keywords:{$pattern:n, +keyword:"function if in break next repeat else for while", +literal:"NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10", +built_in:"LETTERS letters month.abb month.name pi T F abs acos acosh all any anyNA Arg as.call as.character as.complex as.double as.environment as.integer as.logical as.null.default as.numeric as.raw asin asinh atan atanh attr attributes baseenv browser c call ceiling class Conj cos cosh cospi cummax cummin cumprod cumsum digamma dim dimnames emptyenv exp expression floor forceAndCall gamma gc.time globalenv Im interactive invisible is.array is.atomic is.call is.character is.complex is.double is.environment is.expression is.finite is.function is.infinite is.integer is.language is.list is.logical is.matrix is.na is.name is.nan is.null is.numeric is.object is.pairlist is.raw is.recursive is.single is.symbol lazyLoadDBfetch length lgamma list log max min missing Mod names nargs nzchar oldClass on.exit pos.to.env proc.time prod quote range Re rep retracemem return round seq_along seq_len seq.int sign signif sin sinh sinpi sqrt standardGeneric substitute sum switch tan tanh tanpi tracemem trigamma trunc unclass untracemem UseMethod xtfrm" +},compilerExtensions:[(a,n)=>{if(!a.beforeMatch)return +;if(a.starts)throw Error("beforeMatch cannot be used with starts") +;const i=Object.assign({},a);Object.keys(a).forEach((e=>{delete a[e] +})),a.begin=e(i.beforeMatch,e("(?=",i.begin,")")),a.starts={relevance:0, +contains:[Object.assign(i,{endsParent:!0})]},a.relevance=0,delete i.beforeMatch +}],contains:[a.COMMENT(/#'/,/$/,{contains:[{className:"doctag", +begin:"@examples",starts:{contains:[{begin:/\n/},{begin:/#'\s*(?=@[a-zA-Z]+)/, +endsParent:!0},{begin:/#'/,end:/$/,excludeBegin:!0}]}},{className:"doctag", +begin:"@param",end:/$/,contains:[{className:"variable",variants:[{begin:n},{ +begin:/`(?:\\.|[^`\\])+`/}],endsParent:!0}]},{className:"doctag", +begin:/@[a-zA-Z]+/},{className:"meta-keyword",begin:/\\[a-zA-Z]+/}] +}),a.HASH_COMMENT_MODE,{className:"string",contains:[a.BACKSLASH_ESCAPE], +variants:[a.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\(/,end:/\)(-*)"/ +}),a.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\{/,end:/\}(-*)"/ +}),a.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\[/,end:/\](-*)"/ +}),a.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\(/,end:/\)(-*)'/ +}),a.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\{/,end:/\}(-*)'/ +}),a.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\[/,end:/\](-*)'/}),{begin:'"',end:'"', +relevance:0},{begin:"'",end:"'",relevance:0}]},{className:"number",relevance:0, +beforeMatch:/([^a-zA-Z0-9._])/,variants:[{ +match:/0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*[pP][+-]?\d+i?/},{ +match:/0[xX][0-9a-fA-F]+([pP][+-]?\d+)?[Li]?/},{ +match:/(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?[Li]?/}]},{begin:"%",end:"%"},{ +begin:e(/[a-zA-Z][a-zA-Z_0-9]*/,"\\s+<-\\s+")},{begin:"`",end:"`",contains:[{ +begin:/\\./}]}]}}})()); +hljs.registerLanguage("ruby",(()=>{"use strict";function e(...e){ +return e.map((e=>{return(n=e)?"string"==typeof n?n:n.source:null;var n +})).join("")}return n=>{ +const a="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",i={ +keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor __FILE__", +built_in:"proc lambda",literal:"true false nil"},s={className:"doctag", +begin:"@[A-Za-z]+"},r={begin:"#<",end:">"},b=[n.COMMENT("#","$",{contains:[s] +}),n.COMMENT("^=begin","^=end",{contains:[s],relevance:10 +}),n.COMMENT("^__END__","\\n$")],c={className:"subst",begin:/#\{/,end:/\}/, +keywords:i},t={className:"string",contains:[n.BACKSLASH_ESCAPE,c],variants:[{ +begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:/%[qQwWx]?\(/, +end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{begin:/%[qQwWx]?\{/,end:/\}/},{ +begin:/%[qQwWx]?/},{begin:/%[qQwWx]?\//,end:/\//},{begin:/%[qQwWx]?%/, +end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{begin:/%[qQwWx]?\|/,end:/\|/},{ +begin:/\B\?(\\\d{1,3})/},{begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{ +begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{ +begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{ +begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{ +begin:/<<[-~]?'?(\w+)\n(?:[^\n]*\n)*?\s*\1\b/,returnBegin:!0,contains:[{ +begin:/<<[-~]?'?/},n.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/, +contains:[n.BACKSLASH_ESCAPE,c]})]}]},g="[0-9](_?[0-9])*",d={className:"number", +relevance:0,variants:[{ +begin:`\\b([1-9](_?[0-9])*|0)(\\.(${g}))?([eE][+-]?(${g})|r)?i?\\b`},{ +begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b" +},{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{ +begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{ +begin:"\\b0(_?[0-7])+r?i?\\b"}]},l={className:"params",begin:"\\(",end:"\\)", +endsParent:!0,keywords:i},o=[t,{className:"class",beginKeywords:"class module", +end:"$|;",illegal:/=/,contains:[n.inherit(n.TITLE_MODE,{ +begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|!)?"}),{begin:"<\\s*",contains:[{ +begin:"("+n.IDENT_RE+"::)?"+n.IDENT_RE,relevance:0}]}].concat(b)},{ +className:"function",begin:e(/def\s+/,(_=a+"\\s*(\\(|;|$)",e("(?=",_,")"))), +relevance:0,keywords:"def",end:"$|;",contains:[n.inherit(n.TITLE_MODE,{begin:a +}),l].concat(b)},{begin:n.IDENT_RE+"::"},{className:"symbol", +begin:n.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol", +begin:":(?!\\s)",contains:[t,{begin:a}],relevance:0},d,{className:"variable", +begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{ +className:"params",begin:/\|/,end:/\|/,relevance:0,keywords:i},{ +begin:"("+n.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[{ +className:"regexp",contains:[n.BACKSLASH_ESCAPE,c],illegal:/\n/,variants:[{ +begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{begin:"%r\\(", +end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}] +}].concat(r,b),relevance:0}].concat(r,b);var _;c.contains=o,l.contains=o +;const E=[{begin:/^\s*=>/,starts:{end:"$",contains:o}},{className:"meta", +begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>)(?=[ ])", +starts:{end:"$",contains:o}}];return b.unshift(r),{name:"Ruby", +aliases:["rb","gemspec","podspec","thor","irb"],keywords:i,illegal:/\/\*/, +contains:[n.SHEBANG({binary:"ruby"})].concat(E).concat(b).concat(o)}}})()); +hljs.registerLanguage("rust",(()=>{"use strict";return e=>{ +const n="([ui](8|16|32|64|128|size)|f(32|64))?",t="drop i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize f32 f64 str char bool Box Option Result String Vec Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator SliceConcatExt ToString assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!" +;return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?", +keyword:"abstract as async await become box break const continue crate do dyn else enum extern false final fn for if impl in let loop macro match mod move mut override priv pub ref return self Self static struct super trait true try type typeof unsafe unsized use virtual where while yield", +literal:"true false Some None Ok Err",built_in:t},illegal:""}]}}})()); +hljs.registerLanguage("scss",(()=>{"use strict" +;const e=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],t=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],i=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],o=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],r=["align-content","align-items","align-self","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","auto","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","clip-path","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-variant","font-variant-ligatures","font-variation-settings","font-weight","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inherit","initial","justify-content","left","letter-spacing","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","mask","max-height","max-width","min-height","min-width","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","perspective","perspective-origin","pointer-events","position","quotes","resize","right","src","tab-size","table-layout","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-indent","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","white-space","widows","width","word-break","word-spacing","word-wrap","z-index"].reverse() +;return a=>{const n=(e=>({IMPORTANT:{className:"meta",begin:"!important"}, +HEXCOLOR:{className:"number",begin:"#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})"}, +ATTRIBUTE_SELECTOR_MODE:{className:"selector-attr",begin:/\[/,end:/\]/, +illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]} +}))(a),l=o,s=i,d="@[a-z-]+",c={className:"variable", +begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b"};return{name:"SCSS",case_insensitive:!0, +illegal:"[=/|']",contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,{ +className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{ +className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0 +},n.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag", +begin:"\\b("+e.join("|")+")\\b",relevance:0},{className:"selector-pseudo", +begin:":("+s.join("|")+")"},{className:"selector-pseudo", +begin:"::("+l.join("|")+")"},c,{begin:/\(/,end:/\)/,contains:[a.CSS_NUMBER_MODE] +},{className:"attribute",begin:"\\b("+r.join("|")+")\\b"},{ +begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b" +},{begin:":",end:";", +contains:[c,n.HEXCOLOR,a.CSS_NUMBER_MODE,a.QUOTE_STRING_MODE,a.APOS_STRING_MODE,n.IMPORTANT] +},{begin:"@(page|font-face)",lexemes:d,keywords:"@page @font-face"},{begin:"@", +end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/, +keyword:"and or not only",attribute:t.join(" ")},contains:[{begin:d, +className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute" +},c,a.QUOTE_STRING_MODE,a.APOS_STRING_MODE,n.HEXCOLOR,a.CSS_NUMBER_MODE]}]}} +})()); +hljs.registerLanguage("shell",(()=>{"use strict";return s=>({ +name:"Shell Session",aliases:["console"],contains:[{className:"meta", +begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#]/,starts:{end:/[^\\](?=\s*$)/, +subLanguage:"bash"}}]})})()); +hljs.registerLanguage("sql",(()=>{"use strict";function e(e){ +return e?"string"==typeof e?e:e.source:null}function r(...r){ +return r.map((r=>e(r))).join("")}function t(...r){ +return"("+r.map((r=>e(r))).join("|")+")"}return e=>{ +const n=e.COMMENT("--","$"),a=["true","false","unknown"],i=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],s=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],o=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],c=s,l=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update ","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year","add","asc","collation","desc","final","first","last","view"].filter((e=>!s.includes(e))),u={ +begin:r(/\b/,t(...c),/\s*\(/),keywords:{built_in:c}};return{name:"SQL", +case_insensitive:!0,illegal:/[{}]|<\//,keywords:{$pattern:/\b[\w\.]+/, +keyword:((e,{exceptions:r,when:t}={})=>{const n=t +;return r=r||[],e.map((e=>e.match(/\|\d+$/)||r.includes(e)?e:n(e)?e+"|0":e)) +})(l,{when:e=>e.length<3}),literal:a,type:i, +built_in:["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"] +},contains:[{begin:t(...o),keywords:{$pattern:/[\w\.]+/,keyword:l.concat(o), +literal:a,type:i}},{className:"type", +begin:t("double precision","large object","with timezone","without timezone") +},u,{className:"variable",begin:/@[a-z0-9]+/},{className:"string",variants:[{ +begin:/'/,end:/'/,contains:[{begin:/''/}]}]},{begin:/"/,end:/"/,contains:[{ +begin:/""/}]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,n,{className:"operator", +begin:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0}]}}})()); +hljs.registerLanguage("swift",(()=>{"use strict";function e(e){ +return e?"string"==typeof e?e:e.source:null}function n(e){return a("(?=",e,")")} +function a(...n){return n.map((n=>e(n))).join("")}function t(...n){ +return"("+n.map((n=>e(n))).join("|")+")"} +const i=e=>a(/\b/,e,/\w$/.test(e)?/\b/:/\B/),s=["Protocol","Type"].map(i),u=["init","self"].map(i),c=["Any","Self"],r=["associatedtype","async","await",/as\?/,/as!/,"as","break","case","catch","class","continue","convenience","default","defer","deinit","didSet","do","dynamic","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","lazy","let","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],o=["false","nil","true"],l=["assignment","associativity","higherThan","left","lowerThan","none","right"],m=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warn_unqualified_access","#warning"],d=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],p=t(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),F=t(p,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),b=a(p,F,"*"),h=t(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),f=t(h,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),w=a(h,f,"*"),y=a(/[A-Z]/,f,"*"),g=["autoclosure",a(/convention\(/,t("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",a(/objc\(/,w,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","testable","UIApplicationMain","unknown","usableFromInline"],E=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"] +;return e=>{const p={match:/\s+/,relevance:0},h=e.COMMENT("/\\*","\\*/",{ +contains:["self"]}),v=[e.C_LINE_COMMENT_MODE,h],N={className:"keyword", +begin:a(/\./,n(t(...s,...u))),end:t(...s,...u),excludeBegin:!0},A={ +match:a(/\./,t(...r)),relevance:0 +},C=r.filter((e=>"string"==typeof e)).concat(["_|0"]),_={variants:[{ +className:"keyword", +match:t(...r.filter((e=>"string"!=typeof e)).concat(c).map(i),...u)}]},D={ +$pattern:t(/\b\w+/,/#\w+/),keyword:C.concat(m),literal:o},B=[N,A,_],k=[{ +match:a(/\./,t(...d)),relevance:0},{className:"built_in", +match:a(/\b/,t(...d),/(?=\()/)}],M={match:/->/,relevance:0},S=[M,{ +className:"operator",relevance:0,variants:[{match:b},{match:`\\.(\\.|${F})+`}] +}],x="([0-9a-fA-F]_*)+",I={className:"number",relevance:0,variants:[{ +match:"\\b(([0-9]_*)+)(\\.(([0-9]_*)+))?([eE][+-]?(([0-9]_*)+))?\\b"},{ +match:`\\b0x(${x})(\\.(${x}))?([pP][+-]?(([0-9]_*)+))?\\b`},{ +match:/\b0o([0-7]_*)+\b/},{match:/\b0b([01]_*)+\b/}]},O=(e="")=>({ +className:"subst",variants:[{match:a(/\\/,e,/[0\\tnr"']/)},{ +match:a(/\\/,e,/u\{[0-9a-fA-F]{1,8}\}/)}]}),T=(e="")=>({className:"subst", +match:a(/\\/,e,/[\t ]*(?:[\r\n]|\r\n)/)}),L=(e="")=>({className:"subst", +label:"interpol",begin:a(/\\/,e,/\(/),end:/\)/}),P=(e="")=>({begin:a(e,/"""/), +end:a(/"""/,e),contains:[O(e),T(e),L(e)]}),$=(e="")=>({begin:a(e,/"/), +end:a(/"/,e),contains:[O(e),L(e)]}),K={className:"string", +variants:[P(),P("#"),P("##"),P("###"),$(),$("#"),$("##"),$("###")]},j={ +match:a(/`/,w,/`/)},z=[j,{className:"variable",match:/\$\d+/},{ +className:"variable",match:`\\$${f}+`}],q=[{match:/(@|#)available/, +className:"keyword",starts:{contains:[{begin:/\(/,end:/\)/,keywords:E, +contains:[...S,I,K]}]}},{className:"keyword",match:a(/@/,t(...g))},{ +className:"meta",match:a(/@/,w)}],U={match:n(/\b[A-Z]/),relevance:0,contains:[{ +className:"type", +match:a(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,f,"+") +},{className:"type",match:y,relevance:0},{match:/[?!]+/,relevance:0},{ +match:/\.\.\./,relevance:0},{match:a(/\s+&\s+/,n(y)),relevance:0}]},Z={ +begin://,keywords:D,contains:[...v,...B,...q,M,U]};U.contains.push(Z) +;const G={begin:/\(/,end:/\)/,relevance:0,keywords:D,contains:["self",{ +match:a(w,/\s*:/),keywords:"_|0",relevance:0 +},...v,...B,...k,...S,I,K,...z,...q,U]},H={beginKeywords:"func",contains:[{ +className:"title",match:t(j.match,w,b),endsParent:!0,relevance:0},p]},R={ +begin://,contains:[...v,U]},V={begin:/\(/,end:/\)/,keywords:D, +contains:[{begin:t(n(a(w,/\s*:/)),n(a(w,/\s+/,w,/\s*:/))),end:/:/,relevance:0, +contains:[{className:"keyword",match:/\b_\b/},{className:"params",match:w}] +},...v,...B,...S,I,K,...q,U,G],endsParent:!0,illegal:/["']/},W={ +className:"function",match:n(/\bfunc\b/),contains:[H,R,V,p],illegal:[/\[/,/%/] +},X={className:"function",match:/\b(subscript|init[?!]?)\s*(?=[<(])/,keywords:{ +keyword:"subscript init init? init!",$pattern:/\w+[?!]?/},contains:[R,V,p], +illegal:/\[|%/},J={beginKeywords:"operator",end:e.MATCH_NOTHING_RE,contains:[{ +className:"title",match:b,endsParent:!0,relevance:0}]},Q={ +beginKeywords:"precedencegroup",end:e.MATCH_NOTHING_RE,contains:[{ +className:"title",match:y,relevance:0},{begin:/{/,end:/}/,relevance:0, +endsParent:!0,keywords:[...l,...o],contains:[U]}]};for(const e of K.variants){ +const n=e.contains.find((e=>"interpol"===e.label));n.keywords=D +;const a=[...B,...k,...S,I,K,...z];n.contains=[...a,{begin:/\(/,end:/\)/, +contains:["self",...a]}]}return{name:"Swift",keywords:D,contains:[...v,W,X,{ +className:"class",beginKeywords:"struct protocol class extension enum", +end:"\\{",excludeEnd:!0,keywords:D,contains:[e.inherit(e.TITLE_MODE,{ +begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/}),...B]},J,Q,{ +beginKeywords:"import",end:/$/,contains:[...v],relevance:0 +},...B,...k,...S,I,K,...z,...q,U,G]}}})()); +hljs.registerLanguage("typescript",(()=>{"use strict" +;const e="[A-Za-z$_][0-9A-Za-z$_]*",n=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],a=["true","false","null","undefined","NaN","Infinity"],s=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer","BigInt64Array","BigUint64Array","BigInt"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]) +;function t(e){return r("(?=",e,")")}function r(...e){return e.map((e=>{ +return(n=e)?"string"==typeof n?n:n.source:null;var n})).join("")}return i=>{ +const c={$pattern:e, +keyword:n.concat(["type","namespace","typedef","interface","public","private","protected","implements","declare","abstract","readonly"]), +literal:a, +built_in:s.concat(["any","void","number","boolean","string","object","never","enum"]) +},o={className:"meta",begin:"@[A-Za-z$_][0-9A-Za-z$_]*"},l=(e,n,a)=>{ +const s=e.contains.findIndex((e=>e.label===n)) +;if(-1===s)throw Error("can not find mode to replace");e.contains.splice(s,1,a) +},b=(i=>{const c=e,o={begin:/<[A-Za-z0-9\\._:-]+/, +end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{ +const a=e[0].length+e.index,s=e.input[a];"<"!==s?">"===s&&(((e,{after:n})=>{ +const a="", +returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{ +begin:i.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0 +},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:l,contains:f}]}] +},{begin:/,/,relevance:0},{className:"",begin:/\s/,end:/\s*/,skip:!0},{ +variants:[{begin:"<>",end:""},{begin:o.begin,"on:begin":o.isTrulyOpeningTag, +end:o.end}],subLanguage:"xml",contains:[{begin:o.begin,end:o.end,skip:!0, +contains:["self"]}]}],relevance:0},{className:"function", +beginKeywords:"function",end:/[{;]/,excludeEnd:!0,keywords:l, +contains:["self",i.inherit(i.TITLE_MODE,{begin:c}),A],illegal:/%/},{ +beginKeywords:"while if switch catch for"},{className:"function", +begin:i.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{", +returnBegin:!0,contains:[A,i.inherit(i.TITLE_MODE,{begin:c})]},{variants:[{ +begin:"\\."+c},{begin:"\\$"+c}],relevance:0},{className:"class", +beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"[\]]/,contains:[{ +beginKeywords:"extends"},i.UNDERSCORE_TITLE_MODE]},{begin:/\b(?=constructor)/, +end:/[{;]/,excludeEnd:!0,contains:[i.inherit(i.TITLE_MODE,{begin:c}),"self",A] +},{begin:"(get|set)\\s+(?="+c+"\\()",end:/\{/,keywords:"get set", +contains:[i.inherit(i.TITLE_MODE,{begin:c}),{begin:/\(\)/},A]},{begin:/\$[(.]/}] +}})(i) +;return Object.assign(b.keywords,c),b.exports.PARAMS_CONTAINS.push(o),b.contains=b.contains.concat([o,{ +beginKeywords:"namespace",end:/\{/,excludeEnd:!0},{beginKeywords:"interface", +end:/\{/,excludeEnd:!0,keywords:"interface extends" +}]),l(b,"shebang",i.SHEBANG()),l(b,"use_strict",{className:"meta",relevance:10, +begin:/^\s*['"]use strict['"]/ +}),b.contains.find((e=>"function"===e.className)).relevance=0,Object.assign(b,{ +name:"TypeScript",aliases:["ts","tsx"]}),b}})()); +hljs.registerLanguage("vbnet",(()=>{"use strict";function e(e){ +return e?"string"==typeof e?e:e.source:null}function n(...n){ +return n.map((n=>e(n))).join("")}function t(...n){ +return"("+n.map((n=>e(n))).join("|")+")"}return e=>{ +const a=/\d{1,2}\/\d{1,2}\/\d{4}/,i=/\d{4}-\d{1,2}-\d{1,2}/,s=/(\d|1[012])(:\d+){0,2} *(AM|PM)/,r=/\d{1,2}(:\d{1,2}){1,2}/,o={ +className:"literal",variants:[{begin:n(/# */,t(i,a),/ *#/)},{ +begin:n(/# */,r,/ *#/)},{begin:n(/# */,s,/ *#/)},{ +begin:n(/# */,t(i,a),/ +/,t(s,r),/ *#/)}]},l=e.COMMENT(/'''/,/$/,{contains:[{ +className:"doctag",begin:/<\/?/,end:/>/}]}),c=e.COMMENT(null,/$/,{variants:[{ +begin:/'/},{begin:/([\t ]|^)REM(?=\s)/}]});return{name:"Visual Basic .NET", +aliases:["vb"],case_insensitive:!0,classNameAliases:{label:"symbol"},keywords:{ +keyword:"addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield", +built_in:"addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort", +type:"boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort", +literal:"true false nothing"}, +illegal:"//|\\{|\\}|endif|gosub|variant|wend|^\\$ ",contains:[{ +className:"string",begin:/"(""|[^/n])"C\b/},{className:"string",begin:/"/, +end:/"/,illegal:/\n/,contains:[{begin:/""/}]},o,{className:"number",relevance:0, +variants:[{begin:/\b\d[\d_]*((\.[\d_]+(E[+-]?[\d_]+)?)|(E[+-]?[\d_]+))[RFD@!#]?/ +},{begin:/\b\d[\d_]*((U?[SIL])|[%&])?/},{begin:/&H[\dA-F_]+((U?[SIL])|[%&])?/},{ +begin:/&O[0-7_]+((U?[SIL])|[%&])?/},{begin:/&B[01_]+((U?[SIL])|[%&])?/}]},{ +className:"label",begin:/^\w+:/},l,c,{className:"meta", +begin:/[\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\b/, +end:/$/,keywords:{ +"meta-keyword":"const disable else elseif enable end externalsource if region then" +},contains:[c]}]}}})()); +hljs.registerLanguage("yaml",(()=>{"use strict";return e=>{ +var n="true false yes no null",a="[\\w#;/?:@&=+$,.~*'()[\\]]+",s={ +className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/ +},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable", +variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},i=e.inherit(s,{ +variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),l={ +end:",",endsWithParent:!0,excludeEnd:!0,keywords:n,relevance:0},t={begin:/\{/, +end:/\}/,contains:[l],illegal:"\\n",relevance:0},g={begin:"\\[",end:"\\]", +contains:[l],illegal:"\\n",relevance:0},b=[{className:"attr",variants:[{ +begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{ +begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---\\s*$", +relevance:10},{className:"string", +begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{ +begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0, +relevance:0},{className:"type",begin:"!\\w+!"+a},{className:"type", +begin:"!<"+a+">"},{className:"type",begin:"!"+a},{className:"type",begin:"!!"+a +},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta", +begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)", +relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{ +className:"number", +begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b" +},{className:"number",begin:e.C_NUMBER_RE+"\\b",relevance:0},t,g,s],r=[...b] +;return r.pop(),r.push(i),l.contains=r,{name:"YAML",case_insensitive:!0, +aliases:["yml"],contains:b}}})()); \ No newline at end of file diff --git a/reports-generated/code-coverage/js/highlightjs-line-numbers.min.js b/reports-generated/code-coverage/js/highlightjs-line-numbers.min.js new file mode 100644 index 00000000..85485767 --- /dev/null +++ b/reports-generated/code-coverage/js/highlightjs-line-numbers.min.js @@ -0,0 +1,24 @@ +/* +The MIT License (MIT) + +Copyright (c) 2017 Yauheni Pakala + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + */ +!function(r,o){"use strict";var e,i="hljs-ln",l="hljs-ln-line",h="hljs-ln-code",s="hljs-ln-numbers",c="hljs-ln-n",m="data-line-number",a=/\r\n|\r|\n/g;function u(e){for(var n=e.toString(),t=e.anchorNode;"TD"!==t.nodeName;)t=t.parentNode;for(var r=e.focusNode;"TD"!==r.nodeName;)r=r.parentNode;var o=parseInt(t.dataset.lineNumber),a=parseInt(r.dataset.lineNumber);if(o==a)return n;var i,l=t.textContent,s=r.textContent;for(a
    {6}',[l,s,c,m,h,o+n.startFrom,0{1}',[i,r])}return e}(e.innerHTML,o)}function v(e){var n=e.className;if(/hljs-/.test(n)){for(var t=g(e.innerHTML),r=0,o="";r{1}
    \n',[n,0 + + + Coverage Report > com.javiersc.gradle.tasks.extensions + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.gradle.tasks.extensions

    + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % +
    com.javiersc.gradle.tasks.extensions + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    + +
    +
    + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % +
    TasksKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-1/index_SORT_BY_BLOCK.html b/reports-generated/code-coverage/ns-1/index_SORT_BY_BLOCK.html new file mode 100644 index 00000000..a324a4fa --- /dev/null +++ b/reports-generated/code-coverage/ns-1/index_SORT_BY_BLOCK.html @@ -0,0 +1,166 @@ + + + + + Coverage Report > com.javiersc.gradle.tasks.extensions + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.gradle.tasks.extensions

    + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % +
    com.javiersc.gradle.tasks.extensions + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    + +
    +
    + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % +
    TasksKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-1/index_SORT_BY_BLOCK_DESC.html b/reports-generated/code-coverage/ns-1/index_SORT_BY_BLOCK_DESC.html new file mode 100644 index 00000000..8ae831f1 --- /dev/null +++ b/reports-generated/code-coverage/ns-1/index_SORT_BY_BLOCK_DESC.html @@ -0,0 +1,166 @@ + + + + + Coverage Report > com.javiersc.gradle.tasks.extensions + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.gradle.tasks.extensions

    + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % +
    com.javiersc.gradle.tasks.extensions + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    + +
    +
    + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % +
    TasksKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-1/index_SORT_BY_CLASS.html b/reports-generated/code-coverage/ns-1/index_SORT_BY_CLASS.html new file mode 100644 index 00000000..90485dc4 --- /dev/null +++ b/reports-generated/code-coverage/ns-1/index_SORT_BY_CLASS.html @@ -0,0 +1,166 @@ + + + + + Coverage Report > com.javiersc.gradle.tasks.extensions + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.gradle.tasks.extensions

    + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % +
    com.javiersc.gradle.tasks.extensions + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    + +
    +
    + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % +
    TasksKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-1/index_SORT_BY_CLASS_DESC.html b/reports-generated/code-coverage/ns-1/index_SORT_BY_CLASS_DESC.html new file mode 100644 index 00000000..14d52a4d --- /dev/null +++ b/reports-generated/code-coverage/ns-1/index_SORT_BY_CLASS_DESC.html @@ -0,0 +1,166 @@ + + + + + Coverage Report > com.javiersc.gradle.tasks.extensions + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.gradle.tasks.extensions

    + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % +
    com.javiersc.gradle.tasks.extensions + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    + +
    +
    + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % +
    TasksKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-1/index_SORT_BY_LINE.html b/reports-generated/code-coverage/ns-1/index_SORT_BY_LINE.html new file mode 100644 index 00000000..d6253ede --- /dev/null +++ b/reports-generated/code-coverage/ns-1/index_SORT_BY_LINE.html @@ -0,0 +1,166 @@ + + + + + Coverage Report > com.javiersc.gradle.tasks.extensions + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.gradle.tasks.extensions

    + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % +
    com.javiersc.gradle.tasks.extensions + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    + +
    +
    + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % +
    TasksKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-1/index_SORT_BY_LINE_DESC.html b/reports-generated/code-coverage/ns-1/index_SORT_BY_LINE_DESC.html new file mode 100644 index 00000000..4869847f --- /dev/null +++ b/reports-generated/code-coverage/ns-1/index_SORT_BY_LINE_DESC.html @@ -0,0 +1,166 @@ + + + + + Coverage Report > com.javiersc.gradle.tasks.extensions + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.gradle.tasks.extensions

    + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % +
    com.javiersc.gradle.tasks.extensions + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    + +
    +
    + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % +
    TasksKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-1/index_SORT_BY_METHOD.html b/reports-generated/code-coverage/ns-1/index_SORT_BY_METHOD.html new file mode 100644 index 00000000..94a30130 --- /dev/null +++ b/reports-generated/code-coverage/ns-1/index_SORT_BY_METHOD.html @@ -0,0 +1,166 @@ + + + + + Coverage Report > com.javiersc.gradle.tasks.extensions + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.gradle.tasks.extensions

    + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % +
    com.javiersc.gradle.tasks.extensions + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    + +
    +
    + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % +
    TasksKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-1/index_SORT_BY_METHOD_DESC.html b/reports-generated/code-coverage/ns-1/index_SORT_BY_METHOD_DESC.html new file mode 100644 index 00000000..54a6c38d --- /dev/null +++ b/reports-generated/code-coverage/ns-1/index_SORT_BY_METHOD_DESC.html @@ -0,0 +1,166 @@ + + + + + Coverage Report > com.javiersc.gradle.tasks.extensions + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.gradle.tasks.extensions

    + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % +
    com.javiersc.gradle.tasks.extensions + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    + +
    +
    + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % +
    TasksKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-1/index_SORT_BY_NAME_DESC.html b/reports-generated/code-coverage/ns-1/index_SORT_BY_NAME_DESC.html new file mode 100644 index 00000000..81632ca7 --- /dev/null +++ b/reports-generated/code-coverage/ns-1/index_SORT_BY_NAME_DESC.html @@ -0,0 +1,166 @@ + + + + + Coverage Report > com.javiersc.gradle.tasks.extensions + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.gradle.tasks.extensions

    + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % +
    com.javiersc.gradle.tasks.extensions + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    + +
    +
    + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % +
    TasksKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-1/index_SORT_BY_STATEMENT.html b/reports-generated/code-coverage/ns-1/index_SORT_BY_STATEMENT.html new file mode 100644 index 00000000..c8b8069a --- /dev/null +++ b/reports-generated/code-coverage/ns-1/index_SORT_BY_STATEMENT.html @@ -0,0 +1,166 @@ + + + + + Coverage Report > com.javiersc.gradle.tasks.extensions + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.gradle.tasks.extensions

    + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % +
    com.javiersc.gradle.tasks.extensions + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    + +
    +
    + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % +
    TasksKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-1/index_SORT_BY_STATEMENT_DESC.html b/reports-generated/code-coverage/ns-1/index_SORT_BY_STATEMENT_DESC.html new file mode 100644 index 00000000..7dea4bd8 --- /dev/null +++ b/reports-generated/code-coverage/ns-1/index_SORT_BY_STATEMENT_DESC.html @@ -0,0 +1,166 @@ + + + + + Coverage Report > com.javiersc.gradle.tasks.extensions + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.gradle.tasks.extensions

    + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % +
    com.javiersc.gradle.tasks.extensions + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    + +
    +
    + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % +
    TasksKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-1/sources/source-1.html b/reports-generated/code-coverage/ns-1/sources/source-1.html new file mode 100644 index 00000000..913de704 --- /dev/null +++ b/reports-generated/code-coverage/ns-1/sources/source-1.html @@ -0,0 +1,112 @@ + + + + + + + Coverage Report > TasksKt + + + + + + +
    + + +

    Coverage Summary for Class: TasksKt (com.javiersc.gradle.tasks.extensions)

    + + + + + + + + + + + + + + + + + +
    Class + Class, % + + Method, % + + Branch, % + + Line, % +
    TasksKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (2/4) + + + + 75% + + + (6/8) + +
    + +
    +
    + + Source code is not available
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-2/index.html b/reports-generated/code-coverage/ns-2/index.html new file mode 100644 index 00000000..e808d50e --- /dev/null +++ b/reports-generated/code-coverage/ns-2/index.html @@ -0,0 +1,190 @@ + + + + + Coverage Report > com.javiersc.semver.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.gradle.plugin

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.gradle.plugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverPlugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-2/index_SORT_BY_BLOCK.html b/reports-generated/code-coverage/ns-2/index_SORT_BY_BLOCK.html new file mode 100644 index 00000000..3e0d69e7 --- /dev/null +++ b/reports-generated/code-coverage/ns-2/index_SORT_BY_BLOCK.html @@ -0,0 +1,190 @@ + + + + + Coverage Report > com.javiersc.semver.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.gradle.plugin

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.gradle.plugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverPlugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-2/index_SORT_BY_BLOCK_DESC.html b/reports-generated/code-coverage/ns-2/index_SORT_BY_BLOCK_DESC.html new file mode 100644 index 00000000..f4b7beb7 --- /dev/null +++ b/reports-generated/code-coverage/ns-2/index_SORT_BY_BLOCK_DESC.html @@ -0,0 +1,190 @@ + + + + + Coverage Report > com.javiersc.semver.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.gradle.plugin

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.gradle.plugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverPlugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-2/index_SORT_BY_CLASS.html b/reports-generated/code-coverage/ns-2/index_SORT_BY_CLASS.html new file mode 100644 index 00000000..f12bca14 --- /dev/null +++ b/reports-generated/code-coverage/ns-2/index_SORT_BY_CLASS.html @@ -0,0 +1,190 @@ + + + + + Coverage Report > com.javiersc.semver.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.gradle.plugin

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.gradle.plugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverPlugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-2/index_SORT_BY_CLASS_DESC.html b/reports-generated/code-coverage/ns-2/index_SORT_BY_CLASS_DESC.html new file mode 100644 index 00000000..64f23fca --- /dev/null +++ b/reports-generated/code-coverage/ns-2/index_SORT_BY_CLASS_DESC.html @@ -0,0 +1,190 @@ + + + + + Coverage Report > com.javiersc.semver.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.gradle.plugin

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.gradle.plugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverPlugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-2/index_SORT_BY_LINE.html b/reports-generated/code-coverage/ns-2/index_SORT_BY_LINE.html new file mode 100644 index 00000000..a6693b48 --- /dev/null +++ b/reports-generated/code-coverage/ns-2/index_SORT_BY_LINE.html @@ -0,0 +1,190 @@ + + + + + Coverage Report > com.javiersc.semver.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.gradle.plugin

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.gradle.plugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverPlugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-2/index_SORT_BY_LINE_DESC.html b/reports-generated/code-coverage/ns-2/index_SORT_BY_LINE_DESC.html new file mode 100644 index 00000000..378690c4 --- /dev/null +++ b/reports-generated/code-coverage/ns-2/index_SORT_BY_LINE_DESC.html @@ -0,0 +1,190 @@ + + + + + Coverage Report > com.javiersc.semver.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.gradle.plugin

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.gradle.plugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverPlugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-2/index_SORT_BY_METHOD.html b/reports-generated/code-coverage/ns-2/index_SORT_BY_METHOD.html new file mode 100644 index 00000000..ae1b9ff2 --- /dev/null +++ b/reports-generated/code-coverage/ns-2/index_SORT_BY_METHOD.html @@ -0,0 +1,190 @@ + + + + + Coverage Report > com.javiersc.semver.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.gradle.plugin

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.gradle.plugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverPlugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-2/index_SORT_BY_METHOD_DESC.html b/reports-generated/code-coverage/ns-2/index_SORT_BY_METHOD_DESC.html new file mode 100644 index 00000000..8149e1f6 --- /dev/null +++ b/reports-generated/code-coverage/ns-2/index_SORT_BY_METHOD_DESC.html @@ -0,0 +1,190 @@ + + + + + Coverage Report > com.javiersc.semver.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.gradle.plugin

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.gradle.plugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverPlugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-2/index_SORT_BY_NAME_DESC.html b/reports-generated/code-coverage/ns-2/index_SORT_BY_NAME_DESC.html new file mode 100644 index 00000000..c80cd99a --- /dev/null +++ b/reports-generated/code-coverage/ns-2/index_SORT_BY_NAME_DESC.html @@ -0,0 +1,190 @@ + + + + + Coverage Report > com.javiersc.semver.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.gradle.plugin

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.gradle.plugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverPlugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-2/index_SORT_BY_STATEMENT.html b/reports-generated/code-coverage/ns-2/index_SORT_BY_STATEMENT.html new file mode 100644 index 00000000..70eef840 --- /dev/null +++ b/reports-generated/code-coverage/ns-2/index_SORT_BY_STATEMENT.html @@ -0,0 +1,190 @@ + + + + + Coverage Report > com.javiersc.semver.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.gradle.plugin

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.gradle.plugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverPlugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-2/index_SORT_BY_STATEMENT_DESC.html b/reports-generated/code-coverage/ns-2/index_SORT_BY_STATEMENT_DESC.html new file mode 100644 index 00000000..557c3614 --- /dev/null +++ b/reports-generated/code-coverage/ns-2/index_SORT_BY_STATEMENT_DESC.html @@ -0,0 +1,190 @@ + + + + + Coverage Report > com.javiersc.semver.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.gradle.plugin

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.gradle.plugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverPlugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-2/sources/source-1.html b/reports-generated/code-coverage/ns-2/sources/source-1.html new file mode 100644 index 00000000..966cc5d7 --- /dev/null +++ b/reports-generated/code-coverage/ns-2/sources/source-1.html @@ -0,0 +1,146 @@ + + + + + + + Coverage Report > SemverPlugin + + + + + + +
    + + +

    Coverage Summary for Class: SemverPlugin (com.javiersc.semver.gradle.plugin)

    + + + + + + + + + + + + + + + + + + + +
    Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverPlugin + + 0% + + + (0/1) + + + + 0% + + + (0/2) + + + + 0% + + + (0/4) + + + + 0% + + + (0/5) + + + + 0% + + + (0/45) + +
    + +
    +
    + + +
    + package com.javiersc.semver.gradle.plugin
    + 
    + import com.javiersc.semver.project.gradle.plugin.SemverProjectPlugin
    + import com.javiersc.semver.settings.gradle.plugin.SemverSettingsPlugin
    + import org.gradle.api.Plugin
    + import org.gradle.api.Project
    + import org.gradle.api.initialization.Settings
    + import org.gradle.api.plugins.PluginAware
    + import org.gradle.kotlin.dsl.apply
    + 
    + public class SemverPlugin : Plugin<PluginAware> {
    +     override fun apply(target: PluginAware) {
    +         when (target) {
    +             is Project -> target.pluginManager.apply(SemverProjectPlugin::class)
    +             is Settings -> target.pluginManager.apply(SemverSettingsPlugin::class)
    +             else -> error("Semver cannot be applied to ${target::class}")
    +         }
    +     }
    + }
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-3/index.html b/reports-generated/code-coverage/ns-3/index.html new file mode 100644 index 00000000..82cac6e3 --- /dev/null +++ b/reports-generated/code-coverage/ns-3/index.html @@ -0,0 +1,377 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin + + 87.5% + + + (7/8) + + + + 76.5% + + + (13/17) + + + + 37.5% + + + (3/8) + + + + 81.2% + + + (39/48) + + + + 77.7% + + + (233/300) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    Commit + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + + 60% + + + (6/10) + + + + 45.8% + + + (27/59) + +
    LazyVersion + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 0% + + + (0/4) + + + + 25% + + + (1/4) + + + + 23.3% + + + (7/30) + +
    SemverExtension + + 100% + + + (2/2) + + + + 100% + + + (4/4) + + + + + 100% + + + (13/13) + + + + 100% + + + (99/99) + +
    SemverExtensionKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (8/8) + +
    SemverProjectPlugin + + 50% + + + (1/2) + + + + 83.3% + + + (5/6) + + + + 75% + + + (3/4) + + + + 93.8% + + + (15/16) + + + + 88.9% + + + (80/90) + +
    Tag + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + + 75% + + + (3/4) + + + + 85.7% + + + (12/14) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-3/index_SORT_BY_BLOCK.html b/reports-generated/code-coverage/ns-3/index_SORT_BY_BLOCK.html new file mode 100644 index 00000000..41fb4e3f --- /dev/null +++ b/reports-generated/code-coverage/ns-3/index_SORT_BY_BLOCK.html @@ -0,0 +1,377 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin + + 87.5% + + + (7/8) + + + + 76.5% + + + (13/17) + + + + 37.5% + + + (3/8) + + + + 81.2% + + + (39/48) + + + + 77.7% + + + (233/300) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    Commit + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + + 60% + + + (6/10) + + + + 45.8% + + + (27/59) + +
    SemverExtension + + 100% + + + (2/2) + + + + 100% + + + (4/4) + + + + + 100% + + + (13/13) + + + + 100% + + + (99/99) + +
    SemverExtensionKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (8/8) + +
    Tag + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + + 75% + + + (3/4) + + + + 85.7% + + + (12/14) + +
    LazyVersion + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 0% + + + (0/4) + + + + 25% + + + (1/4) + + + + 23.3% + + + (7/30) + +
    SemverProjectPlugin + + 50% + + + (1/2) + + + + 83.3% + + + (5/6) + + + + 75% + + + (3/4) + + + + 93.8% + + + (15/16) + + + + 88.9% + + + (80/90) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-3/index_SORT_BY_BLOCK_DESC.html b/reports-generated/code-coverage/ns-3/index_SORT_BY_BLOCK_DESC.html new file mode 100644 index 00000000..a88178c3 --- /dev/null +++ b/reports-generated/code-coverage/ns-3/index_SORT_BY_BLOCK_DESC.html @@ -0,0 +1,377 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin + + 87.5% + + + (7/8) + + + + 76.5% + + + (13/17) + + + + 37.5% + + + (3/8) + + + + 81.2% + + + (39/48) + + + + 77.7% + + + (233/300) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverProjectPlugin + + 50% + + + (1/2) + + + + 83.3% + + + (5/6) + + + + 75% + + + (3/4) + + + + 93.8% + + + (15/16) + + + + 88.9% + + + (80/90) + +
    LazyVersion + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 0% + + + (0/4) + + + + 25% + + + (1/4) + + + + 23.3% + + + (7/30) + +
    Tag + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + + 75% + + + (3/4) + + + + 85.7% + + + (12/14) + +
    SemverExtensionKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (8/8) + +
    SemverExtension + + 100% + + + (2/2) + + + + 100% + + + (4/4) + + + + + 100% + + + (13/13) + + + + 100% + + + (99/99) + +
    Commit + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + + 60% + + + (6/10) + + + + 45.8% + + + (27/59) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-3/index_SORT_BY_CLASS.html b/reports-generated/code-coverage/ns-3/index_SORT_BY_CLASS.html new file mode 100644 index 00000000..48873d3a --- /dev/null +++ b/reports-generated/code-coverage/ns-3/index_SORT_BY_CLASS.html @@ -0,0 +1,377 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin + + 87.5% + + + (7/8) + + + + 76.5% + + + (13/17) + + + + 37.5% + + + (3/8) + + + + 81.2% + + + (39/48) + + + + 77.7% + + + (233/300) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverProjectPlugin + + 50% + + + (1/2) + + + + 83.3% + + + (5/6) + + + + 75% + + + (3/4) + + + + 93.8% + + + (15/16) + + + + 88.9% + + + (80/90) + +
    Commit + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + + 60% + + + (6/10) + + + + 45.8% + + + (27/59) + +
    LazyVersion + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 0% + + + (0/4) + + + + 25% + + + (1/4) + + + + 23.3% + + + (7/30) + +
    SemverExtension + + 100% + + + (2/2) + + + + 100% + + + (4/4) + + + + + 100% + + + (13/13) + + + + 100% + + + (99/99) + +
    SemverExtensionKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (8/8) + +
    Tag + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + + 75% + + + (3/4) + + + + 85.7% + + + (12/14) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-3/index_SORT_BY_CLASS_DESC.html b/reports-generated/code-coverage/ns-3/index_SORT_BY_CLASS_DESC.html new file mode 100644 index 00000000..381ac90e --- /dev/null +++ b/reports-generated/code-coverage/ns-3/index_SORT_BY_CLASS_DESC.html @@ -0,0 +1,377 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin + + 87.5% + + + (7/8) + + + + 76.5% + + + (13/17) + + + + 37.5% + + + (3/8) + + + + 81.2% + + + (39/48) + + + + 77.7% + + + (233/300) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    Tag + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + + 75% + + + (3/4) + + + + 85.7% + + + (12/14) + +
    SemverExtensionKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (8/8) + +
    SemverExtension + + 100% + + + (2/2) + + + + 100% + + + (4/4) + + + + + 100% + + + (13/13) + + + + 100% + + + (99/99) + +
    LazyVersion + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 0% + + + (0/4) + + + + 25% + + + (1/4) + + + + 23.3% + + + (7/30) + +
    Commit + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + + 60% + + + (6/10) + + + + 45.8% + + + (27/59) + +
    SemverProjectPlugin + + 50% + + + (1/2) + + + + 83.3% + + + (5/6) + + + + 75% + + + (3/4) + + + + 93.8% + + + (15/16) + + + + 88.9% + + + (80/90) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-3/index_SORT_BY_LINE.html b/reports-generated/code-coverage/ns-3/index_SORT_BY_LINE.html new file mode 100644 index 00000000..1bf443bb --- /dev/null +++ b/reports-generated/code-coverage/ns-3/index_SORT_BY_LINE.html @@ -0,0 +1,377 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin + + 87.5% + + + (7/8) + + + + 76.5% + + + (13/17) + + + + 37.5% + + + (3/8) + + + + 81.2% + + + (39/48) + + + + 77.7% + + + (233/300) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    LazyVersion + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 0% + + + (0/4) + + + + 25% + + + (1/4) + + + + 23.3% + + + (7/30) + +
    Commit + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + + 60% + + + (6/10) + + + + 45.8% + + + (27/59) + +
    Tag + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + + 75% + + + (3/4) + + + + 85.7% + + + (12/14) + +
    SemverProjectPlugin + + 50% + + + (1/2) + + + + 83.3% + + + (5/6) + + + + 75% + + + (3/4) + + + + 93.8% + + + (15/16) + + + + 88.9% + + + (80/90) + +
    SemverExtension + + 100% + + + (2/2) + + + + 100% + + + (4/4) + + + + + 100% + + + (13/13) + + + + 100% + + + (99/99) + +
    SemverExtensionKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (8/8) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-3/index_SORT_BY_LINE_DESC.html b/reports-generated/code-coverage/ns-3/index_SORT_BY_LINE_DESC.html new file mode 100644 index 00000000..319a7442 --- /dev/null +++ b/reports-generated/code-coverage/ns-3/index_SORT_BY_LINE_DESC.html @@ -0,0 +1,377 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin + + 87.5% + + + (7/8) + + + + 76.5% + + + (13/17) + + + + 37.5% + + + (3/8) + + + + 81.2% + + + (39/48) + + + + 77.7% + + + (233/300) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverExtensionKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (8/8) + +
    SemverExtension + + 100% + + + (2/2) + + + + 100% + + + (4/4) + + + + + 100% + + + (13/13) + + + + 100% + + + (99/99) + +
    SemverProjectPlugin + + 50% + + + (1/2) + + + + 83.3% + + + (5/6) + + + + 75% + + + (3/4) + + + + 93.8% + + + (15/16) + + + + 88.9% + + + (80/90) + +
    Tag + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + + 75% + + + (3/4) + + + + 85.7% + + + (12/14) + +
    Commit + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + + 60% + + + (6/10) + + + + 45.8% + + + (27/59) + +
    LazyVersion + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 0% + + + (0/4) + + + + 25% + + + (1/4) + + + + 23.3% + + + (7/30) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-3/index_SORT_BY_METHOD.html b/reports-generated/code-coverage/ns-3/index_SORT_BY_METHOD.html new file mode 100644 index 00000000..526225d9 --- /dev/null +++ b/reports-generated/code-coverage/ns-3/index_SORT_BY_METHOD.html @@ -0,0 +1,377 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin + + 87.5% + + + (7/8) + + + + 76.5% + + + (13/17) + + + + 37.5% + + + (3/8) + + + + 81.2% + + + (39/48) + + + + 77.7% + + + (233/300) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    Commit + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + + 60% + + + (6/10) + + + + 45.8% + + + (27/59) + +
    LazyVersion + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 0% + + + (0/4) + + + + 25% + + + (1/4) + + + + 23.3% + + + (7/30) + +
    Tag + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + + 75% + + + (3/4) + + + + 85.7% + + + (12/14) + +
    SemverProjectPlugin + + 50% + + + (1/2) + + + + 83.3% + + + (5/6) + + + + 75% + + + (3/4) + + + + 93.8% + + + (15/16) + + + + 88.9% + + + (80/90) + +
    SemverExtension + + 100% + + + (2/2) + + + + 100% + + + (4/4) + + + + + 100% + + + (13/13) + + + + 100% + + + (99/99) + +
    SemverExtensionKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (8/8) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-3/index_SORT_BY_METHOD_DESC.html b/reports-generated/code-coverage/ns-3/index_SORT_BY_METHOD_DESC.html new file mode 100644 index 00000000..c202472a --- /dev/null +++ b/reports-generated/code-coverage/ns-3/index_SORT_BY_METHOD_DESC.html @@ -0,0 +1,377 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin + + 87.5% + + + (7/8) + + + + 76.5% + + + (13/17) + + + + 37.5% + + + (3/8) + + + + 81.2% + + + (39/48) + + + + 77.7% + + + (233/300) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverExtensionKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (8/8) + +
    SemverExtension + + 100% + + + (2/2) + + + + 100% + + + (4/4) + + + + + 100% + + + (13/13) + + + + 100% + + + (99/99) + +
    SemverProjectPlugin + + 50% + + + (1/2) + + + + 83.3% + + + (5/6) + + + + 75% + + + (3/4) + + + + 93.8% + + + (15/16) + + + + 88.9% + + + (80/90) + +
    Tag + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + + 75% + + + (3/4) + + + + 85.7% + + + (12/14) + +
    LazyVersion + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 0% + + + (0/4) + + + + 25% + + + (1/4) + + + + 23.3% + + + (7/30) + +
    Commit + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + + 60% + + + (6/10) + + + + 45.8% + + + (27/59) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-3/index_SORT_BY_NAME_DESC.html b/reports-generated/code-coverage/ns-3/index_SORT_BY_NAME_DESC.html new file mode 100644 index 00000000..e303ccb9 --- /dev/null +++ b/reports-generated/code-coverage/ns-3/index_SORT_BY_NAME_DESC.html @@ -0,0 +1,377 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin + + 87.5% + + + (7/8) + + + + 76.5% + + + (13/17) + + + + 37.5% + + + (3/8) + + + + 81.2% + + + (39/48) + + + + 77.7% + + + (233/300) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    Tag + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + + 75% + + + (3/4) + + + + 85.7% + + + (12/14) + +
    SemverProjectPlugin + + 50% + + + (1/2) + + + + 83.3% + + + (5/6) + + + + 75% + + + (3/4) + + + + 93.8% + + + (15/16) + + + + 88.9% + + + (80/90) + +
    SemverExtensionKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (8/8) + +
    SemverExtension + + 100% + + + (2/2) + + + + 100% + + + (4/4) + + + + + 100% + + + (13/13) + + + + 100% + + + (99/99) + +
    LazyVersion + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 0% + + + (0/4) + + + + 25% + + + (1/4) + + + + 23.3% + + + (7/30) + +
    Commit + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + + 60% + + + (6/10) + + + + 45.8% + + + (27/59) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-3/index_SORT_BY_STATEMENT.html b/reports-generated/code-coverage/ns-3/index_SORT_BY_STATEMENT.html new file mode 100644 index 00000000..a740966c --- /dev/null +++ b/reports-generated/code-coverage/ns-3/index_SORT_BY_STATEMENT.html @@ -0,0 +1,377 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin + + 87.5% + + + (7/8) + + + + 76.5% + + + (13/17) + + + + 37.5% + + + (3/8) + + + + 81.2% + + + (39/48) + + + + 77.7% + + + (233/300) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    LazyVersion + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 0% + + + (0/4) + + + + 25% + + + (1/4) + + + + 23.3% + + + (7/30) + +
    Commit + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + + 60% + + + (6/10) + + + + 45.8% + + + (27/59) + +
    Tag + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + + 75% + + + (3/4) + + + + 85.7% + + + (12/14) + +
    SemverProjectPlugin + + 50% + + + (1/2) + + + + 83.3% + + + (5/6) + + + + 75% + + + (3/4) + + + + 93.8% + + + (15/16) + + + + 88.9% + + + (80/90) + +
    SemverExtension + + 100% + + + (2/2) + + + + 100% + + + (4/4) + + + + + 100% + + + (13/13) + + + + 100% + + + (99/99) + +
    SemverExtensionKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (8/8) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-3/index_SORT_BY_STATEMENT_DESC.html b/reports-generated/code-coverage/ns-3/index_SORT_BY_STATEMENT_DESC.html new file mode 100644 index 00000000..f4906428 --- /dev/null +++ b/reports-generated/code-coverage/ns-3/index_SORT_BY_STATEMENT_DESC.html @@ -0,0 +1,377 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin + + 87.5% + + + (7/8) + + + + 76.5% + + + (13/17) + + + + 37.5% + + + (3/8) + + + + 81.2% + + + (39/48) + + + + 77.7% + + + (233/300) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverExtensionKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (8/8) + +
    SemverExtension + + 100% + + + (2/2) + + + + 100% + + + (4/4) + + + + + 100% + + + (13/13) + + + + 100% + + + (99/99) + +
    SemverProjectPlugin + + 50% + + + (1/2) + + + + 83.3% + + + (5/6) + + + + 75% + + + (3/4) + + + + 93.8% + + + (15/16) + + + + 88.9% + + + (80/90) + +
    Tag + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + + 75% + + + (3/4) + + + + 85.7% + + + (12/14) + +
    Commit + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + + 60% + + + (6/10) + + + + 45.8% + + + (27/59) + +
    LazyVersion + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 0% + + + (0/4) + + + + 25% + + + (1/4) + + + + 23.3% + + + (7/30) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-3/sources/source-1.html b/reports-generated/code-coverage/ns-3/sources/source-1.html new file mode 100644 index 00000000..e14f4946 --- /dev/null +++ b/reports-generated/code-coverage/ns-3/sources/source-1.html @@ -0,0 +1,155 @@ + + + + + + + Coverage Report > Commit + + + + + + +
    + + +

    Coverage Summary for Class: Commit (com.javiersc.semver.project.gradle.plugin)

    + + + + + + + + + + + + + + + + + + +
    Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    Commit + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + + 60% + + + (6/10) + + + + 45.8% + + + (27/59) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin
    + 
    + /**
    +  * @param message The short message of the commit
    +  * @param fullMessage The full message of the commit including the body
    +  * @param hash The hash of the commit
    +  * @param timestampEpochSecond The timestamp of the commit in epoch seconds
    +  * @param tags The tags associated with the commit
    +  */
    + public data class Commit(
    +     val message: String,
    +     val fullMessage: String,
    +     val hash: String,
    +     val timestampEpochSecond: Long,
    +     val tags: List<Tag>,
    + ) {
    +     override fun toString(): String =
    +         """
    +             $fullMessage
    +             
    +             hash: $hash, tags: ${tags.joinToString()}
    +         """
    +             .trimIndent()
    + }
    + 
    + /**
    +  * @param name The name of the tag, example: `v1.0.0`
    +  * @param refName The name of the ref, example: `refs/tags/v1.0.0`
    +  */
    + public data class Tag(
    +     val name: String,
    +     val refName: String,
    + ) {
    +     override fun toString(): String = name
    + }
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-3/sources/source-2.html b/reports-generated/code-coverage/ns-3/sources/source-2.html new file mode 100644 index 00000000..c65a03ec --- /dev/null +++ b/reports-generated/code-coverage/ns-3/sources/source-2.html @@ -0,0 +1,141 @@ + + + + + + + Coverage Report > LazyVersion + + + + + + +
    + + +

    Coverage Summary for Class: LazyVersion (com.javiersc.semver.project.gradle.plugin)

    + + + + + + + + + + + + + + + + + + + +
    Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    LazyVersion + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 0% + + + (0/4) + + + + 25% + + + (1/4) + + + + 23.3% + + + (7/30) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin
    + 
    + import org.gradle.api.provider.Provider
    + 
    + public class LazyVersion(internal val version: Provider<String>) {
    + 
    +     private var cachedVersion: String? = null
    + 
    +     override fun toString(): String {
    +         if (cachedVersion == null) cachedVersion = version.get()
    +         cachedVersion ?: version.get()
    +         return cachedVersion!!
    +     }
    + }
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-3/sources/source-3.html b/reports-generated/code-coverage/ns-3/sources/source-3.html new file mode 100644 index 00000000..a4db1321 --- /dev/null +++ b/reports-generated/code-coverage/ns-3/sources/source-3.html @@ -0,0 +1,217 @@ + + + + + + + Coverage Report > SemverExtension + + + + + + +
    + + +

    Coverage Summary for Class: SemverExtension (com.javiersc.semver.project.gradle.plugin)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverExtension + + 100% + + + (3/3) + + + + + 100% + + + (10/10) + + + + 100% + + + (68/68) + +
    SemverExtension$Companion + + 100% + + + (1/1) + + + + + 100% + + + (3/3) + + + + 100% + + + (31/31) + +
    Total + + 100% + + + (4/4) + + + + + 100% + + + (13/13) + + + + 100% + + + (99/99) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin
    + 
    + import com.javiersc.semver.project.gradle.plugin.internal.DefaultTagPrefix
    + import com.javiersc.semver.project.gradle.plugin.internal.git.GitCache
    + import javax.inject.Inject
    + import org.gradle.api.Project
    + import org.gradle.api.file.RegularFileProperty
    + import org.gradle.api.model.ObjectFactory
    + import org.gradle.api.provider.Property
    + import org.gradle.api.provider.Provider
    + import org.gradle.api.provider.ProviderFactory
    + import org.gradle.kotlin.dsl.create
    + import org.gradle.kotlin.dsl.getByType
    + import org.gradle.kotlin.dsl.property
    + 
    + public abstract class SemverExtension
    + @Inject
    + constructor(
    +     objects: ObjectFactory,
    +     providers: ProviderFactory,
    + ) {
    + 
    +     public val isEnabled: Property<Boolean> = objects.property<Boolean>().convention(true)
    + 
    +     public abstract val gitDir: RegularFileProperty
    + 
    +     public val commits: Provider<List<Commit>> =
    +         providers.provider {
    +             GitCache(
    +                     gitDir = gitDir.get().asFile,
    +                     maxCount = commitsMaxCount,
    +                 )
    +                 .commitsInTheCurrentBranchPublicApi
    +         }
    + 
    +     public val commitsMaxCount: Property<Int> = objects.property<Int>().convention(-1)
    + 
    +     public val tagPrefix: Property<String> = objects.property<String>().convention(DefaultTagPrefix)
    + 
    +     public companion object {
    + 
    +         public const val ExtensionName: String = "semver"
    + 
    +         internal fun register(project: Project) {
    +             project.extensions.create<SemverExtension>(ExtensionName)
    +             val gitDir = project.provider { project.rootDir.resolve(".git") }
    +             project.semverExtension.gitDir.fileProvider(gitDir)
    +         }
    +     }
    + }
    + 
    + internal val Project.semverExtension: SemverExtension
    +     get() = extensions.getByType()
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-3/sources/source-4.html b/reports-generated/code-coverage/ns-3/sources/source-4.html new file mode 100644 index 00000000..667dbb5f --- /dev/null +++ b/reports-generated/code-coverage/ns-3/sources/source-4.html @@ -0,0 +1,193 @@ + + + + + + + Coverage Report > SemverExtensionKt + + + + + + +
    + + +

    Coverage Summary for Class: SemverExtensionKt (com.javiersc.semver.project.gradle.plugin)

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverExtensionKt + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (8/8) + +
    SemverExtensionKt$special$$inlined$getByType$1 +
    Total + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (8/8) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin
    + 
    + import com.javiersc.semver.project.gradle.plugin.internal.DefaultTagPrefix
    + import com.javiersc.semver.project.gradle.plugin.internal.git.GitCache
    + import javax.inject.Inject
    + import org.gradle.api.Project
    + import org.gradle.api.file.RegularFileProperty
    + import org.gradle.api.model.ObjectFactory
    + import org.gradle.api.provider.Property
    + import org.gradle.api.provider.Provider
    + import org.gradle.api.provider.ProviderFactory
    + import org.gradle.kotlin.dsl.create
    + import org.gradle.kotlin.dsl.getByType
    + import org.gradle.kotlin.dsl.property
    + 
    + public abstract class SemverExtension
    + @Inject
    + constructor(
    +     objects: ObjectFactory,
    +     providers: ProviderFactory,
    + ) {
    + 
    +     public val isEnabled: Property<Boolean> = objects.property<Boolean>().convention(true)
    + 
    +     public abstract val gitDir: RegularFileProperty
    + 
    +     public val commits: Provider<List<Commit>> =
    +         providers.provider {
    +             GitCache(
    +                     gitDir = gitDir.get().asFile,
    +                     maxCount = commitsMaxCount,
    +                 )
    +                 .commitsInTheCurrentBranchPublicApi
    +         }
    + 
    +     public val commitsMaxCount: Property<Int> = objects.property<Int>().convention(-1)
    + 
    +     public val tagPrefix: Property<String> = objects.property<String>().convention(DefaultTagPrefix)
    + 
    +     public companion object {
    + 
    +         public const val ExtensionName: String = "semver"
    + 
    +         internal fun register(project: Project) {
    +             project.extensions.create<SemverExtension>(ExtensionName)
    +             val gitDir = project.provider { project.rootDir.resolve(".git") }
    +             project.semverExtension.gitDir.fileProvider(gitDir)
    +         }
    +     }
    + }
    + 
    + internal val Project.semverExtension: SemverExtension
    +     get() = extensions.getByType()
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-3/sources/source-5.html b/reports-generated/code-coverage/ns-3/sources/source-5.html new file mode 100644 index 00000000..962a8463 --- /dev/null +++ b/reports-generated/code-coverage/ns-3/sources/source-5.html @@ -0,0 +1,230 @@ + + + + + + + Coverage Report > SemverProjectPlugin + + + + + + +
    + + +

    Coverage Summary for Class: SemverProjectPlugin (com.javiersc.semver.project.gradle.plugin)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverProjectPlugin + + 100% + + + (5/5) + + + + 75% + + + (3/4) + + + + 100% + + + (15/15) + + + + 100% + + + (80/80) + +
    SemverProjectPlugin$configureLazyVersion$1 + + 0% + + + (0/1) + + + + + 0% + + + (0/1) + + + + 0% + + + (0/10) + +
    Total + + 83.3% + + + (5/6) + + + + 75% + + + (3/4) + + + + 93.8% + + + (15/16) + + + + 88.9% + + + (80/90) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin
    + 
    + import com.javiersc.semver.project.gradle.plugin.internal.checkScopeCorrectness
    + import com.javiersc.semver.project.gradle.plugin.internal.git.hasGit
    + import com.javiersc.semver.project.gradle.plugin.services.GitBuildService
    + import com.javiersc.semver.project.gradle.plugin.tasks.CreateSemverTagTask
    + import com.javiersc.semver.project.gradle.plugin.tasks.PrintSemverTask
    + import com.javiersc.semver.project.gradle.plugin.tasks.PushSemverTagTask
    + import com.javiersc.semver.project.gradle.plugin.tasks.WriteSemverTask
    + import com.javiersc.semver.project.gradle.plugin.valuesources.VersionValueSource
    + import org.gradle.api.Plugin
    + import org.gradle.api.Project
    + import org.gradle.api.plugins.BasePlugin
    + import org.gradle.api.provider.Provider
    + import org.gradle.kotlin.dsl.apply
    + 
    + public class SemverProjectPlugin : Plugin<Project> {
    + 
    +     override fun apply(target: Project) {
    +         target.config()
    +     }
    + 
    +     private fun Project.config() {
    +         pluginManager.apply(BasePlugin::class)
    + 
    +         SemverExtension.register(this)
    + 
    +         if (semverExtension.isEnabled.get() && hasGit) {
    +             val gitTagBuildService = GitBuildService.register(this)
    +             checkScopeCorrectness()
    +             configureLazyVersion()
    +             configureBuildServicesAndTasks(gitTagBuildService)
    +         }
    +     }
    + 
    +     private fun Project.configureBuildServicesAndTasks(
    +         gitTagBuildService: Provider<GitBuildService>
    +     ) {
    +         CreateSemverTagTask.register(this, gitTagBuildService)
    +         PushSemverTagTask.register(this, gitTagBuildService)
    +         PrintSemverTask.register(this)
    +         WriteSemverTask.register(this)
    +     }
    + 
    +     private fun Project.configureLazyVersion() {
    +         version = LazyVersion(VersionValueSource.register(this))
    + 
    +         // It is possible third party plugin breaks lazy configuration by calling `project.version`
    +         // too early, applying the calculated version in `afterEvaluate` fix it sometimes.
    +         afterEvaluate { version = LazyVersion(VersionValueSource.register(this)) }
    +     }
    + }
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-3/sources/source-6.html b/reports-generated/code-coverage/ns-3/sources/source-6.html new file mode 100644 index 00000000..e347ea75 --- /dev/null +++ b/reports-generated/code-coverage/ns-3/sources/source-6.html @@ -0,0 +1,155 @@ + + + + + + + Coverage Report > Tag + + + + + + +
    + + +

    Coverage Summary for Class: Tag (com.javiersc.semver.project.gradle.plugin)

    + + + + + + + + + + + + + + + + + + +
    Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    Tag + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + + 75% + + + (3/4) + + + + 85.7% + + + (12/14) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin
    + 
    + /**
    +  * @param message The short message of the commit
    +  * @param fullMessage The full message of the commit including the body
    +  * @param hash The hash of the commit
    +  * @param timestampEpochSecond The timestamp of the commit in epoch seconds
    +  * @param tags The tags associated with the commit
    +  */
    + public data class Commit(
    +     val message: String,
    +     val fullMessage: String,
    +     val hash: String,
    +     val timestampEpochSecond: Long,
    +     val tags: List<Tag>,
    + ) {
    +     override fun toString(): String =
    +         """
    +             $fullMessage
    +             
    +             hash: $hash, tags: ${tags.joinToString()}
    +         """
    +             .trimIndent()
    + }
    + 
    + /**
    +  * @param name The name of the tag, example: `v1.0.0`
    +  * @param refName The name of the ref, example: `refs/tags/v1.0.0`
    +  */
    + public data class Tag(
    +     val name: String,
    +     val refName: String,
    + ) {
    +     override fun toString(): String = name
    + }
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-4/index.html b/reports-generated/code-coverage/ns-4/index.html new file mode 100644 index 00000000..da0436da --- /dev/null +++ b/reports-generated/code-coverage/ns-4/index.html @@ -0,0 +1,176 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.extensions + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.extensions

    + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.extensions + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    IsVersionExtensionsKt + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-4/index_SORT_BY_BLOCK.html b/reports-generated/code-coverage/ns-4/index_SORT_BY_BLOCK.html new file mode 100644 index 00000000..1d790530 --- /dev/null +++ b/reports-generated/code-coverage/ns-4/index_SORT_BY_BLOCK.html @@ -0,0 +1,176 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.extensions + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.extensions

    + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.extensions + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    IsVersionExtensionsKt + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-4/index_SORT_BY_BLOCK_DESC.html b/reports-generated/code-coverage/ns-4/index_SORT_BY_BLOCK_DESC.html new file mode 100644 index 00000000..4b69957c --- /dev/null +++ b/reports-generated/code-coverage/ns-4/index_SORT_BY_BLOCK_DESC.html @@ -0,0 +1,176 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.extensions + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.extensions

    + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.extensions + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    IsVersionExtensionsKt + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-4/index_SORT_BY_CLASS.html b/reports-generated/code-coverage/ns-4/index_SORT_BY_CLASS.html new file mode 100644 index 00000000..bc6a6d4b --- /dev/null +++ b/reports-generated/code-coverage/ns-4/index_SORT_BY_CLASS.html @@ -0,0 +1,176 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.extensions + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.extensions

    + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.extensions + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    IsVersionExtensionsKt + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-4/index_SORT_BY_CLASS_DESC.html b/reports-generated/code-coverage/ns-4/index_SORT_BY_CLASS_DESC.html new file mode 100644 index 00000000..6b1ffb6f --- /dev/null +++ b/reports-generated/code-coverage/ns-4/index_SORT_BY_CLASS_DESC.html @@ -0,0 +1,176 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.extensions + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.extensions

    + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.extensions + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    IsVersionExtensionsKt + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-4/index_SORT_BY_LINE.html b/reports-generated/code-coverage/ns-4/index_SORT_BY_LINE.html new file mode 100644 index 00000000..5a458aa9 --- /dev/null +++ b/reports-generated/code-coverage/ns-4/index_SORT_BY_LINE.html @@ -0,0 +1,176 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.extensions + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.extensions

    + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.extensions + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    IsVersionExtensionsKt + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-4/index_SORT_BY_LINE_DESC.html b/reports-generated/code-coverage/ns-4/index_SORT_BY_LINE_DESC.html new file mode 100644 index 00000000..9f58cfcb --- /dev/null +++ b/reports-generated/code-coverage/ns-4/index_SORT_BY_LINE_DESC.html @@ -0,0 +1,176 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.extensions + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.extensions

    + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.extensions + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    IsVersionExtensionsKt + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-4/index_SORT_BY_METHOD.html b/reports-generated/code-coverage/ns-4/index_SORT_BY_METHOD.html new file mode 100644 index 00000000..6ee23902 --- /dev/null +++ b/reports-generated/code-coverage/ns-4/index_SORT_BY_METHOD.html @@ -0,0 +1,176 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.extensions + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.extensions

    + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.extensions + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    IsVersionExtensionsKt + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-4/index_SORT_BY_METHOD_DESC.html b/reports-generated/code-coverage/ns-4/index_SORT_BY_METHOD_DESC.html new file mode 100644 index 00000000..97ab7ebf --- /dev/null +++ b/reports-generated/code-coverage/ns-4/index_SORT_BY_METHOD_DESC.html @@ -0,0 +1,176 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.extensions + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.extensions

    + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.extensions + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    IsVersionExtensionsKt + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-4/index_SORT_BY_NAME_DESC.html b/reports-generated/code-coverage/ns-4/index_SORT_BY_NAME_DESC.html new file mode 100644 index 00000000..a744406a --- /dev/null +++ b/reports-generated/code-coverage/ns-4/index_SORT_BY_NAME_DESC.html @@ -0,0 +1,176 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.extensions + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.extensions

    + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.extensions + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    IsVersionExtensionsKt + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-4/index_SORT_BY_STATEMENT.html b/reports-generated/code-coverage/ns-4/index_SORT_BY_STATEMENT.html new file mode 100644 index 00000000..b09e7e24 --- /dev/null +++ b/reports-generated/code-coverage/ns-4/index_SORT_BY_STATEMENT.html @@ -0,0 +1,176 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.extensions + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.extensions

    + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.extensions + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    IsVersionExtensionsKt + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-4/index_SORT_BY_STATEMENT_DESC.html b/reports-generated/code-coverage/ns-4/index_SORT_BY_STATEMENT_DESC.html new file mode 100644 index 00000000..33007318 --- /dev/null +++ b/reports-generated/code-coverage/ns-4/index_SORT_BY_STATEMENT_DESC.html @@ -0,0 +1,176 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.extensions + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.extensions

    + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.extensions + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    IsVersionExtensionsKt + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-4/sources/source-1.html b/reports-generated/code-coverage/ns-4/sources/source-1.html new file mode 100644 index 00000000..ea9c3edd --- /dev/null +++ b/reports-generated/code-coverage/ns-4/sources/source-1.html @@ -0,0 +1,164 @@ + + + + + + + Coverage Report > IsVersionExtensionsKt + + + + + + +
    + + +

    Coverage Summary for Class: IsVersionExtensionsKt (com.javiersc.semver.project.gradle.plugin.extensions)

    + + + + + + + + + + + + + + + + + + +
    Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    IsVersionExtensionsKt + + 0% + + + (0/1) + + + + 0% + + + (0/10) + + + + + 0% + + + (0/10) + + + + 0% + + + (0/120) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin.extensions
    + 
    + import com.javiersc.semver.isAlpha
    + import com.javiersc.semver.isBeta
    + import com.javiersc.semver.isDev
    + import com.javiersc.semver.isNotAlpha
    + import com.javiersc.semver.isNotBeta
    + import com.javiersc.semver.isNotDev
    + import com.javiersc.semver.isNotRC
    + import com.javiersc.semver.isNotSnapshot
    + import com.javiersc.semver.isRC
    + import com.javiersc.semver.isSnapshot
    + import org.gradle.api.Project
    + import org.gradle.api.provider.Provider
    + 
    + public val Project.isAlpha: Provider<Boolean>
    +     get() = provider { version.toString().isAlpha }
    + 
    + public val Project.isNotAlpha: Provider<Boolean>
    +     get() = provider { version.toString().isNotAlpha }
    + 
    + public val Project.isBeta: Provider<Boolean>
    +     get() = provider { version.toString().isBeta }
    + 
    + public val Project.isNotBeta: Provider<Boolean>
    +     get() = provider { version.toString().isNotBeta }
    + 
    + public val Project.isDev: Provider<Boolean>
    +     get() = provider { version.toString().isDev }
    + 
    + public val Project.isNotDev: Provider<Boolean>
    +     get() = provider { version.toString().isNotDev }
    + 
    + public val Project.isRC: Provider<Boolean>
    +     get() = provider { version.toString().isRC }
    + 
    + public val Project.isNotRC: Provider<Boolean>
    +     get() = provider { version.toString().isNotRC }
    + 
    + public val Project.isSnapshot: Provider<Boolean>
    +     get() = provider { version.toString().isSnapshot }
    + 
    + public val Project.isNotSnapshot: Provider<Boolean>
    +     get() = provider { version.toString().isNotSnapshot }
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-5/index.html b/reports-generated/code-coverage/ns-5/index.html new file mode 100644 index 00000000..78536a01 --- /dev/null +++ b/reports-generated/code-coverage/ns-5/index.html @@ -0,0 +1,506 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.internal + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.internal

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.internal + + 90.9% + + + (10/11) + + + + 87.1% + + + (27/31) + + + + 62.9% + + + (78/124) + + + + 81.4% + + + (118/145) + + + + 72.2% + + + (668/925) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    CalculatedVersionKt + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + 73.3% + + + (66/90) + + + + 85.7% + + + (72/84) + + + + 78.2% + + + (344/440) + +
    CheckersKt + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 22.2% + + + (4/18) + + + + 28.6% + + + (2/7) + + + + 33% + + + (32/97) + +
    GetProjectTagPrefixKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 100% + + + (1/1) + + + + 100% + + + (19/19) + +
    InitialVersionKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (5/5) + +
    Scope + + 100% + + + (1/1) + + + + 100% + + + (3/3) + + + + + 100% + + + (6/6) + + + + 100% + + + (39/39) + +
    SemVerMessagesKt + + 66.7% + + + (2/3) + + + + 66.7% + + + (4/6) + + + + 50% + + + (3/6) + + + + 76.9% + + + (10/13) + + + + 67.6% + + + (48/71) + +
    SemverProperty + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + + 100% + + + (8/8) + + + + 100% + + + (60/60) + +
    SemverPropertyKt + + 100% + + + (1/1) + + + + 90.9% + + + (10/11) + + + + 50% + + + (4/8) + + + + 66.7% + + + (14/21) + + + + 56.8% + + + (96/169) + +
    Stage + + 100% + + + (1/1) + + + + 100% + + + (3/3) + + + + + 100% + + + (4/4) + + + + 100% + + + (25/25) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-5/index_SORT_BY_BLOCK.html b/reports-generated/code-coverage/ns-5/index_SORT_BY_BLOCK.html new file mode 100644 index 00000000..3d6e732f --- /dev/null +++ b/reports-generated/code-coverage/ns-5/index_SORT_BY_BLOCK.html @@ -0,0 +1,506 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.internal + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.internal

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.internal + + 90.9% + + + (10/11) + + + + 87.1% + + + (27/31) + + + + 62.9% + + + (78/124) + + + + 81.4% + + + (118/145) + + + + 72.2% + + + (668/925) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    InitialVersionKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (5/5) + +
    Scope + + 100% + + + (1/1) + + + + 100% + + + (3/3) + + + + + 100% + + + (6/6) + + + + 100% + + + (39/39) + +
    SemverProperty + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + + 100% + + + (8/8) + + + + 100% + + + (60/60) + +
    Stage + + 100% + + + (1/1) + + + + 100% + + + (3/3) + + + + + 100% + + + (4/4) + + + + 100% + + + (25/25) + +
    CheckersKt + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 22.2% + + + (4/18) + + + + 28.6% + + + (2/7) + + + + 33% + + + (32/97) + +
    GetProjectTagPrefixKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 100% + + + (1/1) + + + + 100% + + + (19/19) + +
    SemVerMessagesKt + + 66.7% + + + (2/3) + + + + 66.7% + + + (4/6) + + + + 50% + + + (3/6) + + + + 76.9% + + + (10/13) + + + + 67.6% + + + (48/71) + +
    SemverPropertyKt + + 100% + + + (1/1) + + + + 90.9% + + + (10/11) + + + + 50% + + + (4/8) + + + + 66.7% + + + (14/21) + + + + 56.8% + + + (96/169) + +
    CalculatedVersionKt + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + 73.3% + + + (66/90) + + + + 85.7% + + + (72/84) + + + + 78.2% + + + (344/440) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-5/index_SORT_BY_BLOCK_DESC.html b/reports-generated/code-coverage/ns-5/index_SORT_BY_BLOCK_DESC.html new file mode 100644 index 00000000..367a76d3 --- /dev/null +++ b/reports-generated/code-coverage/ns-5/index_SORT_BY_BLOCK_DESC.html @@ -0,0 +1,506 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.internal + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.internal

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.internal + + 90.9% + + + (10/11) + + + + 87.1% + + + (27/31) + + + + 62.9% + + + (78/124) + + + + 81.4% + + + (118/145) + + + + 72.2% + + + (668/925) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    CalculatedVersionKt + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + 73.3% + + + (66/90) + + + + 85.7% + + + (72/84) + + + + 78.2% + + + (344/440) + +
    SemverPropertyKt + + 100% + + + (1/1) + + + + 90.9% + + + (10/11) + + + + 50% + + + (4/8) + + + + 66.7% + + + (14/21) + + + + 56.8% + + + (96/169) + +
    SemVerMessagesKt + + 66.7% + + + (2/3) + + + + 66.7% + + + (4/6) + + + + 50% + + + (3/6) + + + + 76.9% + + + (10/13) + + + + 67.6% + + + (48/71) + +
    GetProjectTagPrefixKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 100% + + + (1/1) + + + + 100% + + + (19/19) + +
    CheckersKt + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 22.2% + + + (4/18) + + + + 28.6% + + + (2/7) + + + + 33% + + + (32/97) + +
    Stage + + 100% + + + (1/1) + + + + 100% + + + (3/3) + + + + + 100% + + + (4/4) + + + + 100% + + + (25/25) + +
    SemverProperty + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + + 100% + + + (8/8) + + + + 100% + + + (60/60) + +
    Scope + + 100% + + + (1/1) + + + + 100% + + + (3/3) + + + + + 100% + + + (6/6) + + + + 100% + + + (39/39) + +
    InitialVersionKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (5/5) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-5/index_SORT_BY_CLASS.html b/reports-generated/code-coverage/ns-5/index_SORT_BY_CLASS.html new file mode 100644 index 00000000..7899fd9d --- /dev/null +++ b/reports-generated/code-coverage/ns-5/index_SORT_BY_CLASS.html @@ -0,0 +1,506 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.internal + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.internal

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.internal + + 90.9% + + + (10/11) + + + + 87.1% + + + (27/31) + + + + 62.9% + + + (78/124) + + + + 81.4% + + + (118/145) + + + + 72.2% + + + (668/925) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemVerMessagesKt + + 66.7% + + + (2/3) + + + + 66.7% + + + (4/6) + + + + 50% + + + (3/6) + + + + 76.9% + + + (10/13) + + + + 67.6% + + + (48/71) + +
    CalculatedVersionKt + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + 73.3% + + + (66/90) + + + + 85.7% + + + (72/84) + + + + 78.2% + + + (344/440) + +
    CheckersKt + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 22.2% + + + (4/18) + + + + 28.6% + + + (2/7) + + + + 33% + + + (32/97) + +
    GetProjectTagPrefixKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 100% + + + (1/1) + + + + 100% + + + (19/19) + +
    InitialVersionKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (5/5) + +
    Scope + + 100% + + + (1/1) + + + + 100% + + + (3/3) + + + + + 100% + + + (6/6) + + + + 100% + + + (39/39) + +
    SemverProperty + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + + 100% + + + (8/8) + + + + 100% + + + (60/60) + +
    SemverPropertyKt + + 100% + + + (1/1) + + + + 90.9% + + + (10/11) + + + + 50% + + + (4/8) + + + + 66.7% + + + (14/21) + + + + 56.8% + + + (96/169) + +
    Stage + + 100% + + + (1/1) + + + + 100% + + + (3/3) + + + + + 100% + + + (4/4) + + + + 100% + + + (25/25) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-5/index_SORT_BY_CLASS_DESC.html b/reports-generated/code-coverage/ns-5/index_SORT_BY_CLASS_DESC.html new file mode 100644 index 00000000..972706ab --- /dev/null +++ b/reports-generated/code-coverage/ns-5/index_SORT_BY_CLASS_DESC.html @@ -0,0 +1,506 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.internal + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.internal

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.internal + + 90.9% + + + (10/11) + + + + 87.1% + + + (27/31) + + + + 62.9% + + + (78/124) + + + + 81.4% + + + (118/145) + + + + 72.2% + + + (668/925) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    Stage + + 100% + + + (1/1) + + + + 100% + + + (3/3) + + + + + 100% + + + (4/4) + + + + 100% + + + (25/25) + +
    SemverPropertyKt + + 100% + + + (1/1) + + + + 90.9% + + + (10/11) + + + + 50% + + + (4/8) + + + + 66.7% + + + (14/21) + + + + 56.8% + + + (96/169) + +
    SemverProperty + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + + 100% + + + (8/8) + + + + 100% + + + (60/60) + +
    Scope + + 100% + + + (1/1) + + + + 100% + + + (3/3) + + + + + 100% + + + (6/6) + + + + 100% + + + (39/39) + +
    InitialVersionKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (5/5) + +
    GetProjectTagPrefixKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 100% + + + (1/1) + + + + 100% + + + (19/19) + +
    CheckersKt + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 22.2% + + + (4/18) + + + + 28.6% + + + (2/7) + + + + 33% + + + (32/97) + +
    CalculatedVersionKt + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + 73.3% + + + (66/90) + + + + 85.7% + + + (72/84) + + + + 78.2% + + + (344/440) + +
    SemVerMessagesKt + + 66.7% + + + (2/3) + + + + 66.7% + + + (4/6) + + + + 50% + + + (3/6) + + + + 76.9% + + + (10/13) + + + + 67.6% + + + (48/71) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-5/index_SORT_BY_LINE.html b/reports-generated/code-coverage/ns-5/index_SORT_BY_LINE.html new file mode 100644 index 00000000..c30f3b70 --- /dev/null +++ b/reports-generated/code-coverage/ns-5/index_SORT_BY_LINE.html @@ -0,0 +1,506 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.internal + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.internal

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.internal + + 90.9% + + + (10/11) + + + + 87.1% + + + (27/31) + + + + 62.9% + + + (78/124) + + + + 81.4% + + + (118/145) + + + + 72.2% + + + (668/925) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    CheckersKt + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 22.2% + + + (4/18) + + + + 28.6% + + + (2/7) + + + + 33% + + + (32/97) + +
    SemverPropertyKt + + 100% + + + (1/1) + + + + 90.9% + + + (10/11) + + + + 50% + + + (4/8) + + + + 66.7% + + + (14/21) + + + + 56.8% + + + (96/169) + +
    SemVerMessagesKt + + 66.7% + + + (2/3) + + + + 66.7% + + + (4/6) + + + + 50% + + + (3/6) + + + + 76.9% + + + (10/13) + + + + 67.6% + + + (48/71) + +
    CalculatedVersionKt + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + 73.3% + + + (66/90) + + + + 85.7% + + + (72/84) + + + + 78.2% + + + (344/440) + +
    GetProjectTagPrefixKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 100% + + + (1/1) + + + + 100% + + + (19/19) + +
    InitialVersionKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (5/5) + +
    Scope + + 100% + + + (1/1) + + + + 100% + + + (3/3) + + + + + 100% + + + (6/6) + + + + 100% + + + (39/39) + +
    SemverProperty + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + + 100% + + + (8/8) + + + + 100% + + + (60/60) + +
    Stage + + 100% + + + (1/1) + + + + 100% + + + (3/3) + + + + + 100% + + + (4/4) + + + + 100% + + + (25/25) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-5/index_SORT_BY_LINE_DESC.html b/reports-generated/code-coverage/ns-5/index_SORT_BY_LINE_DESC.html new file mode 100644 index 00000000..b25ec534 --- /dev/null +++ b/reports-generated/code-coverage/ns-5/index_SORT_BY_LINE_DESC.html @@ -0,0 +1,506 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.internal + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.internal

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.internal + + 90.9% + + + (10/11) + + + + 87.1% + + + (27/31) + + + + 62.9% + + + (78/124) + + + + 81.4% + + + (118/145) + + + + 72.2% + + + (668/925) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    Stage + + 100% + + + (1/1) + + + + 100% + + + (3/3) + + + + + 100% + + + (4/4) + + + + 100% + + + (25/25) + +
    SemverProperty + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + + 100% + + + (8/8) + + + + 100% + + + (60/60) + +
    Scope + + 100% + + + (1/1) + + + + 100% + + + (3/3) + + + + + 100% + + + (6/6) + + + + 100% + + + (39/39) + +
    InitialVersionKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (5/5) + +
    GetProjectTagPrefixKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 100% + + + (1/1) + + + + 100% + + + (19/19) + +
    CalculatedVersionKt + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + 73.3% + + + (66/90) + + + + 85.7% + + + (72/84) + + + + 78.2% + + + (344/440) + +
    SemVerMessagesKt + + 66.7% + + + (2/3) + + + + 66.7% + + + (4/6) + + + + 50% + + + (3/6) + + + + 76.9% + + + (10/13) + + + + 67.6% + + + (48/71) + +
    SemverPropertyKt + + 100% + + + (1/1) + + + + 90.9% + + + (10/11) + + + + 50% + + + (4/8) + + + + 66.7% + + + (14/21) + + + + 56.8% + + + (96/169) + +
    CheckersKt + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 22.2% + + + (4/18) + + + + 28.6% + + + (2/7) + + + + 33% + + + (32/97) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-5/index_SORT_BY_METHOD.html b/reports-generated/code-coverage/ns-5/index_SORT_BY_METHOD.html new file mode 100644 index 00000000..aee3558c --- /dev/null +++ b/reports-generated/code-coverage/ns-5/index_SORT_BY_METHOD.html @@ -0,0 +1,506 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.internal + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.internal

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.internal + + 90.9% + + + (10/11) + + + + 87.1% + + + (27/31) + + + + 62.9% + + + (78/124) + + + + 81.4% + + + (118/145) + + + + 72.2% + + + (668/925) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    CheckersKt + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 22.2% + + + (4/18) + + + + 28.6% + + + (2/7) + + + + 33% + + + (32/97) + +
    SemVerMessagesKt + + 66.7% + + + (2/3) + + + + 66.7% + + + (4/6) + + + + 50% + + + (3/6) + + + + 76.9% + + + (10/13) + + + + 67.6% + + + (48/71) + +
    SemverPropertyKt + + 100% + + + (1/1) + + + + 90.9% + + + (10/11) + + + + 50% + + + (4/8) + + + + 66.7% + + + (14/21) + + + + 56.8% + + + (96/169) + +
    CalculatedVersionKt + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + 73.3% + + + (66/90) + + + + 85.7% + + + (72/84) + + + + 78.2% + + + (344/440) + +
    GetProjectTagPrefixKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 100% + + + (1/1) + + + + 100% + + + (19/19) + +
    InitialVersionKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (5/5) + +
    Scope + + 100% + + + (1/1) + + + + 100% + + + (3/3) + + + + + 100% + + + (6/6) + + + + 100% + + + (39/39) + +
    SemverProperty + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + + 100% + + + (8/8) + + + + 100% + + + (60/60) + +
    Stage + + 100% + + + (1/1) + + + + 100% + + + (3/3) + + + + + 100% + + + (4/4) + + + + 100% + + + (25/25) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-5/index_SORT_BY_METHOD_DESC.html b/reports-generated/code-coverage/ns-5/index_SORT_BY_METHOD_DESC.html new file mode 100644 index 00000000..2ae4db65 --- /dev/null +++ b/reports-generated/code-coverage/ns-5/index_SORT_BY_METHOD_DESC.html @@ -0,0 +1,506 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.internal + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.internal

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.internal + + 90.9% + + + (10/11) + + + + 87.1% + + + (27/31) + + + + 62.9% + + + (78/124) + + + + 81.4% + + + (118/145) + + + + 72.2% + + + (668/925) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    Stage + + 100% + + + (1/1) + + + + 100% + + + (3/3) + + + + + 100% + + + (4/4) + + + + 100% + + + (25/25) + +
    SemverProperty + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + + 100% + + + (8/8) + + + + 100% + + + (60/60) + +
    Scope + + 100% + + + (1/1) + + + + 100% + + + (3/3) + + + + + 100% + + + (6/6) + + + + 100% + + + (39/39) + +
    InitialVersionKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (5/5) + +
    GetProjectTagPrefixKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 100% + + + (1/1) + + + + 100% + + + (19/19) + +
    CalculatedVersionKt + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + 73.3% + + + (66/90) + + + + 85.7% + + + (72/84) + + + + 78.2% + + + (344/440) + +
    SemverPropertyKt + + 100% + + + (1/1) + + + + 90.9% + + + (10/11) + + + + 50% + + + (4/8) + + + + 66.7% + + + (14/21) + + + + 56.8% + + + (96/169) + +
    SemVerMessagesKt + + 66.7% + + + (2/3) + + + + 66.7% + + + (4/6) + + + + 50% + + + (3/6) + + + + 76.9% + + + (10/13) + + + + 67.6% + + + (48/71) + +
    CheckersKt + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 22.2% + + + (4/18) + + + + 28.6% + + + (2/7) + + + + 33% + + + (32/97) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-5/index_SORT_BY_NAME_DESC.html b/reports-generated/code-coverage/ns-5/index_SORT_BY_NAME_DESC.html new file mode 100644 index 00000000..e5e2a6fd --- /dev/null +++ b/reports-generated/code-coverage/ns-5/index_SORT_BY_NAME_DESC.html @@ -0,0 +1,506 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.internal + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.internal

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.internal + + 90.9% + + + (10/11) + + + + 87.1% + + + (27/31) + + + + 62.9% + + + (78/124) + + + + 81.4% + + + (118/145) + + + + 72.2% + + + (668/925) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    Stage + + 100% + + + (1/1) + + + + 100% + + + (3/3) + + + + + 100% + + + (4/4) + + + + 100% + + + (25/25) + +
    SemverPropertyKt + + 100% + + + (1/1) + + + + 90.9% + + + (10/11) + + + + 50% + + + (4/8) + + + + 66.7% + + + (14/21) + + + + 56.8% + + + (96/169) + +
    SemverProperty + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + + 100% + + + (8/8) + + + + 100% + + + (60/60) + +
    SemVerMessagesKt + + 66.7% + + + (2/3) + + + + 66.7% + + + (4/6) + + + + 50% + + + (3/6) + + + + 76.9% + + + (10/13) + + + + 67.6% + + + (48/71) + +
    Scope + + 100% + + + (1/1) + + + + 100% + + + (3/3) + + + + + 100% + + + (6/6) + + + + 100% + + + (39/39) + +
    InitialVersionKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (5/5) + +
    GetProjectTagPrefixKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 100% + + + (1/1) + + + + 100% + + + (19/19) + +
    CheckersKt + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 22.2% + + + (4/18) + + + + 28.6% + + + (2/7) + + + + 33% + + + (32/97) + +
    CalculatedVersionKt + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + 73.3% + + + (66/90) + + + + 85.7% + + + (72/84) + + + + 78.2% + + + (344/440) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-5/index_SORT_BY_STATEMENT.html b/reports-generated/code-coverage/ns-5/index_SORT_BY_STATEMENT.html new file mode 100644 index 00000000..fc3a57d8 --- /dev/null +++ b/reports-generated/code-coverage/ns-5/index_SORT_BY_STATEMENT.html @@ -0,0 +1,506 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.internal + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.internal

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.internal + + 90.9% + + + (10/11) + + + + 87.1% + + + (27/31) + + + + 62.9% + + + (78/124) + + + + 81.4% + + + (118/145) + + + + 72.2% + + + (668/925) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    CheckersKt + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 22.2% + + + (4/18) + + + + 28.6% + + + (2/7) + + + + 33% + + + (32/97) + +
    SemverPropertyKt + + 100% + + + (1/1) + + + + 90.9% + + + (10/11) + + + + 50% + + + (4/8) + + + + 66.7% + + + (14/21) + + + + 56.8% + + + (96/169) + +
    SemVerMessagesKt + + 66.7% + + + (2/3) + + + + 66.7% + + + (4/6) + + + + 50% + + + (3/6) + + + + 76.9% + + + (10/13) + + + + 67.6% + + + (48/71) + +
    CalculatedVersionKt + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + 73.3% + + + (66/90) + + + + 85.7% + + + (72/84) + + + + 78.2% + + + (344/440) + +
    GetProjectTagPrefixKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 100% + + + (1/1) + + + + 100% + + + (19/19) + +
    InitialVersionKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (5/5) + +
    Scope + + 100% + + + (1/1) + + + + 100% + + + (3/3) + + + + + 100% + + + (6/6) + + + + 100% + + + (39/39) + +
    SemverProperty + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + + 100% + + + (8/8) + + + + 100% + + + (60/60) + +
    Stage + + 100% + + + (1/1) + + + + 100% + + + (3/3) + + + + + 100% + + + (4/4) + + + + 100% + + + (25/25) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-5/index_SORT_BY_STATEMENT_DESC.html b/reports-generated/code-coverage/ns-5/index_SORT_BY_STATEMENT_DESC.html new file mode 100644 index 00000000..6c9685de --- /dev/null +++ b/reports-generated/code-coverage/ns-5/index_SORT_BY_STATEMENT_DESC.html @@ -0,0 +1,506 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.internal + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.internal

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.internal + + 90.9% + + + (10/11) + + + + 87.1% + + + (27/31) + + + + 62.9% + + + (78/124) + + + + 81.4% + + + (118/145) + + + + 72.2% + + + (668/925) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    Stage + + 100% + + + (1/1) + + + + 100% + + + (3/3) + + + + + 100% + + + (4/4) + + + + 100% + + + (25/25) + +
    SemverProperty + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + + 100% + + + (8/8) + + + + 100% + + + (60/60) + +
    Scope + + 100% + + + (1/1) + + + + 100% + + + (3/3) + + + + + 100% + + + (6/6) + + + + 100% + + + (39/39) + +
    InitialVersionKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (5/5) + +
    GetProjectTagPrefixKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 100% + + + (1/1) + + + + 100% + + + (19/19) + +
    CalculatedVersionKt + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + 73.3% + + + (66/90) + + + + 85.7% + + + (72/84) + + + + 78.2% + + + (344/440) + +
    SemVerMessagesKt + + 66.7% + + + (2/3) + + + + 66.7% + + + (4/6) + + + + 50% + + + (3/6) + + + + 76.9% + + + (10/13) + + + + 67.6% + + + (48/71) + +
    SemverPropertyKt + + 100% + + + (1/1) + + + + 90.9% + + + (10/11) + + + + 50% + + + (4/8) + + + + 66.7% + + + (14/21) + + + + 56.8% + + + (96/169) + +
    CheckersKt + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 22.2% + + + (4/18) + + + + 28.6% + + + (2/7) + + + + 33% + + + (32/97) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-5/sources/source-1.html b/reports-generated/code-coverage/ns-5/sources/source-1.html new file mode 100644 index 00000000..ba617f37 --- /dev/null +++ b/reports-generated/code-coverage/ns-5/sources/source-1.html @@ -0,0 +1,279 @@ + + + + + + + Coverage Report > CalculatedVersionKt + + + + + + +
    + + +

    Coverage Summary for Class: CalculatedVersionKt (com.javiersc.semver.project.gradle.plugin.internal)

    + + + + + + + + + + + + + + + + + + + +
    Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    CalculatedVersionKt + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + 73.3% + + + (66/90) + + + + 85.7% + + + (72/84) + + + + 78.2% + + + (344/440) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin.internal
    + 
    + import com.javiersc.semver.Version
    + import com.javiersc.semver.Version.Increase
    + import com.javiersc.semver.project.gradle.plugin.internal.git.commitsBetweenTwoCommitsIncludingLastExcludingFirst
    + 
    + @Suppress("ComplexMethod")
    + internal fun calculatedVersion(
    +     stageProperty: String?,
    +     scopeProperty: String?,
    +     isCreatingSemverTag: Boolean,
    +     lastSemverMajorInCurrentBranch: Int,
    +     lastSemverMinorInCurrentBranch: Int,
    +     lastSemverPatchInCurrentBranch: Int,
    +     lastSemverStageInCurrentBranch: String?,
    +     lastSemverNumInCurrentBranch: Int?,
    +     versionTagsInCurrentBranch: List<String>,
    +     clean: Boolean,
    +     checkClean: Boolean,
    +     lastCommitInCurrentBranch: String?,
    +     commitsInCurrentBranch: List<String>,
    +     headCommit: String,
    +     lastVersionCommitInCurrentBranch: String?,
    + ): String {
    +     val isClean: Boolean = clean || !checkClean
    +     val isDirty: Boolean = !isClean
    + 
    +     val stagePropertySanitized =
    +         stageProperty?.let { name ->
    +             if (name.equals("SNAPSHOT", ignoreCase = true)) "SNAPSHOT" else name
    +         }
    + 
    +     val lastSemverStageInCurrentBranchSanitized =
    +         lastSemverStageInCurrentBranch?.let { name ->
    +             if (name.equals("SNAPSHOT", ignoreCase = true)) "SNAPSHOT" else name
    +         }
    + 
    +     val lastSemverInCurrentBranch =
    +         Version(
    +             major = lastSemverMajorInCurrentBranch,
    +             minor = lastSemverMinorInCurrentBranch,
    +             patch = lastSemverPatchInCurrentBranch,
    +             stageName = lastSemverStageInCurrentBranchSanitized,
    +             stageNum = lastSemverNumInCurrentBranch,
    +         )
    + 
    +     val previousStage: String? = lastSemverInCurrentBranch.stage?.name
    + 
    +     val incStage: String =
    +         (stagePropertySanitized ?: previousStage ?: "").run {
    +             when {
    +                 equals(Stage.Auto(), true) && !previousStage.isNullOrBlank() -> previousStage
    +                 equals(Stage.Auto(), true) -> ""
    +                 else -> this
    +             }
    +         }
    + 
    +     val isNoStagedNoScopedNoCreatingSemverTag: Boolean =
    +         stagePropertySanitized.isNullOrBlank() &&
    +             scopeProperty.isNullOrBlank() &&
    +             !isCreatingSemverTag
    + 
    +     val calculatedVersion: String =
    +         when {
    +             isNoStagedNoScopedNoCreatingSemverTag || isDirty -> {
    +                 val additionalVersionData: String =
    +                     calculateAdditionalVersionData(
    +                         clean = clean,
    +                         checkClean = checkClean,
    +                         lastCommitInCurrentBranch = lastCommitInCurrentBranch,
    +                         commitsInCurrentBranch = commitsInCurrentBranch,
    +                         isThereVersionTags = versionTagsInCurrentBranch.isNotEmpty(),
    +                         headCommit = headCommit,
    +                         lastVersionCommitInCurrentBranch = lastVersionCommitInCurrentBranch,
    +                     )
    +                 "$lastSemverInCurrentBranch$additionalVersionData"
    +             }
    +             stagePropertySanitized.equals(Stage.Final(), ignoreCase = true) -> {
    +                 when (scopeProperty) {
    +                     Scope.Major() -> "${lastSemverInCurrentBranch.inc(Increase.Major, "")}"
    +                     Scope.Minor() -> "${lastSemverInCurrentBranch.inc(Increase.Minor, "")}"
    +                     Scope.Patch() -> "${lastSemverInCurrentBranch.inc(Increase.Patch, "")}"
    +                     else -> "${lastSemverInCurrentBranch.inc(stageName = "")}"
    +                 }
    +             }
    +             scopeProperty == Scope.Major() -> {
    +                 "${lastSemverInCurrentBranch.inc(Increase.Major, incStage)}"
    +             }
    +             scopeProperty == Scope.Minor() -> {
    +                 "${lastSemverInCurrentBranch.inc(Increase.Minor, incStage)}"
    +             }
    +             scopeProperty == Scope.Patch() -> {
    +                 "${lastSemverInCurrentBranch.inc(Increase.Patch, incStage)}"
    +             }
    +             scopeProperty == Scope.Auto() -> {
    +                 when {
    +                     versionTagsInCurrentBranch.isEmpty() -> "$lastSemverInCurrentBranch"
    +                     incStage.isEmpty() ->
    +                         "${lastSemverInCurrentBranch.inc(Increase.Patch, incStage)}"
    +                     else -> "${lastSemverInCurrentBranch.inc(stageName = incStage)}"
    +                 }
    +             }
    +             isCreatingSemverTag && versionTagsInCurrentBranch.isEmpty() -> {
    +                 "$lastSemverInCurrentBranch"
    +             }
    +             else -> {
    +                 "${lastSemverInCurrentBranch.inc(stageName = incStage)}"
    +             }
    +         }.also {
    +             if (it.contains("final", true) || it.contains("auto", true)) {
    +                 error("`stage` plus `scope` combination is broken, please report it")
    +             }
    +         }
    + 
    +     return calculatedVersion
    + }
    + 
    + internal fun calculateAdditionalVersionData(
    +     clean: Boolean = true,
    +     checkClean: Boolean = true,
    +     lastCommitInCurrentBranch: String?,
    +     commitsInCurrentBranch: List<String>,
    +     isThereVersionTags: Boolean,
    +     headCommit: String,
    +     lastVersionCommitInCurrentBranch: String?,
    + ): String {
    +     val isClean: Boolean = clean || !checkClean
    +     val isDirty: Boolean = !isClean
    + 
    +     val commitsBetweenCurrentAndLastTagCommit: List<String> =
    +         commitsBetweenTwoCommitsIncludingLastExcludingFirst(
    +             lastCommitInCurrentBranch,
    +             lastVersionCommitInCurrentBranch,
    +             commitsInCurrentBranch,
    +         )
    + 
    +     val additionalData: String =
    +         commitsBetweenCurrentAndLastTagCommit.run {
    +             val hashLength = DEFAULT_SHORT_HASH_LENGTH
    +             when {
    +                 !isThereVersionTags && isDirty -> ".$size+${headCommit.take(hashLength)}+DIRTY"
    +                 !isThereVersionTags -> ".$size+${headCommit.take(hashLength)}"
    +                 isNotEmpty() && isClean -> ".$size+${first().take(hashLength)}"
    +                 isEmpty() && isClean -> ""
    +                 else -> ".$size+DIRTY"
    +             }
    +         }
    + 
    +     return additionalData
    + }
    + 
    + internal const val DEFAULT_SHORT_HASH_LENGTH = 7
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-5/sources/source-2.html b/reports-generated/code-coverage/ns-5/sources/source-2.html new file mode 100644 index 00000000..6e7b8dcc --- /dev/null +++ b/reports-generated/code-coverage/ns-5/sources/source-2.html @@ -0,0 +1,149 @@ + + + + + + + Coverage Report > CheckersKt + + + + + + +
    + + +

    Coverage Summary for Class: CheckersKt (com.javiersc.semver.project.gradle.plugin.internal)

    + + + + + + + + + + + + + + + + + + + +
    Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    CheckersKt + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 22.2% + + + (4/18) + + + + 28.6% + + + (2/7) + + + + 33% + + + (32/97) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin.internal
    + 
    + import com.javiersc.semver.Version
    + import org.gradle.api.Project
    + 
    + internal fun Project.checkScopeCorrectness() {
    +     val scope = scopeProperty.orNull
    +     check(scope in Scope.values().map(Scope::invoke) || scope.isNullOrBlank()) {
    +         "`scope` value must be one of ${Scope.values().map(Scope::invoke)} or empty"
    +     }
    + }
    + 
    + internal fun checkVersionIsHigherOrSame(
    +     version: String,
    +     lastVersionInCurrentBranch: Version,
    + ) {
    +     Version.safe(version).getOrNull()?.let { calculatedVersion ->
    +         check(calculatedVersion >= lastVersionInCurrentBranch) {
    +             "Next version should be higher or the same as the current one"
    +         }
    +     }
    + }
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-5/sources/source-3.html b/reports-generated/code-coverage/ns-5/sources/source-3.html new file mode 100644 index 00000000..ea1bec06 --- /dev/null +++ b/reports-generated/code-coverage/ns-5/sources/source-3.html @@ -0,0 +1,135 @@ + + + + + + + Coverage Report > GetProjectTagPrefixKt + + + + + + +
    + + +

    Coverage Summary for Class: GetProjectTagPrefixKt (com.javiersc.semver.project.gradle.plugin.internal)

    + + + + + + + + + + + + + + + + + + + +
    Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    GetProjectTagPrefixKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 100% + + + (1/1) + + + + 100% + + + (19/19) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin.internal
    + 
    + import com.javiersc.semver.project.gradle.plugin.semverExtension
    + import org.gradle.api.Project
    + import org.gradle.api.provider.Provider
    + 
    + internal val Project.projectTagPrefix: Provider<String>
    +     get() = provider { projectTagPrefixProperty.orNull ?: semverExtension.tagPrefix.get() }
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-5/sources/source-4.html b/reports-generated/code-coverage/ns-5/sources/source-4.html new file mode 100644 index 00000000..dfcf355e --- /dev/null +++ b/reports-generated/code-coverage/ns-5/sources/source-4.html @@ -0,0 +1,125 @@ + + + + + + + Coverage Report > InitialVersionKt + + + + + + +
    + + +

    Coverage Summary for Class: InitialVersionKt (com.javiersc.semver.project.gradle.plugin.internal)

    + + + + + + + + + + + + + + + + + + +
    Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    InitialVersionKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (5/5) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin.internal
    + 
    + import com.javiersc.semver.Version
    + 
    + internal val InitialVersion: Version = Version("0.1.0")
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-5/sources/source-5.html b/reports-generated/code-coverage/ns-5/sources/source-5.html new file mode 100644 index 00000000..66844113 --- /dev/null +++ b/reports-generated/code-coverage/ns-5/sources/source-5.html @@ -0,0 +1,200 @@ + + + + + + + Coverage Report > Scope + + + + + + +
    + + +

    Coverage Summary for Class: Scope (com.javiersc.semver.project.gradle.plugin.internal)

    + + + + + + + + + + + + + + + + + + +
    Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    Scope + + 100% + + + (1/1) + + + + 100% + + + (3/3) + + + + + 100% + + + (6/6) + + + + 100% + + + (39/39) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin.internal
    + 
    + import java.util.Properties
    + import org.gradle.api.Project
    + import org.gradle.api.provider.Provider
    + 
    + internal const val DefaultTagPrefix = ""
    + 
    + internal val Project.projectTagPrefixProperty: Provider<String>
    +     get() = getSemverProperty(SemverProperty.ProjectTagPrefix)
    + 
    + internal val Project.tagPrefixProperty: Provider<String>
    +     get() =
    +         providers.provider {
    +             getSemverProperty(SemverProperty.TagPrefix).orNull ?: DefaultTagPrefix
    +         }
    + 
    + internal val Project.stageProperty: Provider<String>
    +     get() = getSemverProperty(SemverProperty.Stage)
    + 
    + internal val Project.scopeProperty: Provider<String>
    +     get() = getSemverProperty(SemverProperty.Scope)
    + 
    + internal val Project.remoteProperty: Provider<String>
    +     get() = getSemverProperty(SemverProperty.Remote)
    + 
    + internal val Project.checkCleanProperty: Provider<Boolean>
    +     get() =
    +         providers.provider {
    +             getSemverProperty(SemverProperty.CheckClean).orNull?.toBoolean() ?: true
    +         }
    + 
    + internal val Project.commitsMaxCount: Provider<Int>
    +     get() = getSemverProperty(SemverProperty.CommitsMaxCount).map(String::toInt)
    + 
    + internal enum class SemverProperty(val key: String) {
    +     ProjectTagPrefix("semver.project.tagPrefix"),
    +     TagPrefix("semver.tagPrefix"),
    +     Stage("semver.stage"),
    +     Scope("semver.scope"),
    +     Remote("semver.remote"),
    +     CheckClean("semver.checkClean"),
    +     CommitsMaxCount("semver.commitsMaxCount"),
    + }
    + 
    + internal enum class Stage(private val value: String) {
    +     Auto("auto"),
    +     Final("final"),
    +     ;
    + 
    +     operator fun invoke(): String = value
    + }
    + 
    + internal enum class Scope(private val value: String) {
    +     Auto("auto"),
    +     Major("major"),
    +     Minor("minor"),
    +     Patch("patch");
    + 
    +     operator fun invoke(): String = value
    + }
    + 
    + private fun Project.getSemverProperty(semverProperty: SemverProperty): Provider<String> =
    +     when {
    +         gradle.startParameter.projectProperties[semverProperty.key] != null -> {
    +             provider { gradle.startParameter.projectProperties[semverProperty.key] }
    +         }
    +         projectDir.resolve("gradle.properties").exists() -> {
    +             provider {
    +                 Properties()
    +                     .apply {
    +                         projectDir.resolve("gradle.properties").inputStream().use { load(it) }
    +                     }
    +                     .getProperty(semverProperty.key)
    +             }
    +         }
    +         else -> {
    +             providers.gradleProperty(semverProperty.key)
    +         }
    +     }
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-5/sources/source-6.html b/reports-generated/code-coverage/ns-5/sources/source-6.html new file mode 100644 index 00000000..dbdbe9b2 --- /dev/null +++ b/reports-generated/code-coverage/ns-5/sources/source-6.html @@ -0,0 +1,235 @@ + + + + + + + Coverage Report > SemVerMessagesKt + + + + + + +
    + + +

    Coverage Summary for Class: SemVerMessagesKt (com.javiersc.semver.project.gradle.plugin.internal)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemVerMessagesKt + + 75% + + + (3/4) + + + + 50% + + + (3/6) + + + + 81.8% + + + (9/11) + + + + 69.2% + + + (45/65) + +
    SemVerMessagesKt$semverMessage$1 + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (3/3) + +
    SemVerMessagesKt$semverWarningMessage$1 + + 0% + + + (0/1) + + + + + 0% + + + (0/1) + + + + 0% + + + (0/3) + +
    Total + + 66.7% + + + (4/6) + + + + 50% + + + (3/6) + + + + 76.9% + + + (10/13) + + + + 67.6% + + + (48/71) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin.internal
    + 
    + import com.javiersc.gradle.logging.extensions.quietColored
    + import com.javiersc.gradle.logging.extensions.warnColored
    + import com.javiersc.kotlin.stdlib.AnsiColor
    + import com.javiersc.semver.Version
    + import com.javiersc.semver.project.gradle.plugin.SemverProjectPlugin
    + import org.gradle.api.logging.Logger
    + import org.gradle.api.logging.Logging
    + 
    + internal fun semverWarningMessage(message: Any) = defaultLogger.warnColored { "$message" }
    + 
    + internal fun semverMessage(message: Any, color: AnsiColor = AnsiColor.Foreground.Purple) =
    +     defaultLogger.quietColored(color) { "$message" }
    + 
    + internal fun warningLastVersionIsNotHigherVersion(last: Version?, higher: Version?) {
    +     val message =
    +         """|There is an old tag with a higher version than the last tag version:
    +            |  - Old tag version -> $last
    +            |  - Last tag version -> $higher
    +         """
    +             .trimMargin()
    + 
    +     if (last != null && higher != null && last < higher) {
    +         semverMessage(message = message, color = AnsiColor.Foreground.Yellow)
    +     }
    + }
    + 
    + private val defaultLogger: Logger = Logging.getLogger(SemverProjectPlugin::class.java)
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-5/sources/source-7.html b/reports-generated/code-coverage/ns-5/sources/source-7.html new file mode 100644 index 00000000..892572bc --- /dev/null +++ b/reports-generated/code-coverage/ns-5/sources/source-7.html @@ -0,0 +1,200 @@ + + + + + + + Coverage Report > SemverProperty + + + + + + +
    + + +

    Coverage Summary for Class: SemverProperty (com.javiersc.semver.project.gradle.plugin.internal)

    + + + + + + + + + + + + + + + + + + +
    Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverProperty + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + + 100% + + + (8/8) + + + + 100% + + + (60/60) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin.internal
    + 
    + import java.util.Properties
    + import org.gradle.api.Project
    + import org.gradle.api.provider.Provider
    + 
    + internal const val DefaultTagPrefix = ""
    + 
    + internal val Project.projectTagPrefixProperty: Provider<String>
    +     get() = getSemverProperty(SemverProperty.ProjectTagPrefix)
    + 
    + internal val Project.tagPrefixProperty: Provider<String>
    +     get() =
    +         providers.provider {
    +             getSemverProperty(SemverProperty.TagPrefix).orNull ?: DefaultTagPrefix
    +         }
    + 
    + internal val Project.stageProperty: Provider<String>
    +     get() = getSemverProperty(SemverProperty.Stage)
    + 
    + internal val Project.scopeProperty: Provider<String>
    +     get() = getSemverProperty(SemverProperty.Scope)
    + 
    + internal val Project.remoteProperty: Provider<String>
    +     get() = getSemverProperty(SemverProperty.Remote)
    + 
    + internal val Project.checkCleanProperty: Provider<Boolean>
    +     get() =
    +         providers.provider {
    +             getSemverProperty(SemverProperty.CheckClean).orNull?.toBoolean() ?: true
    +         }
    + 
    + internal val Project.commitsMaxCount: Provider<Int>
    +     get() = getSemverProperty(SemverProperty.CommitsMaxCount).map(String::toInt)
    + 
    + internal enum class SemverProperty(val key: String) {
    +     ProjectTagPrefix("semver.project.tagPrefix"),
    +     TagPrefix("semver.tagPrefix"),
    +     Stage("semver.stage"),
    +     Scope("semver.scope"),
    +     Remote("semver.remote"),
    +     CheckClean("semver.checkClean"),
    +     CommitsMaxCount("semver.commitsMaxCount"),
    + }
    + 
    + internal enum class Stage(private val value: String) {
    +     Auto("auto"),
    +     Final("final"),
    +     ;
    + 
    +     operator fun invoke(): String = value
    + }
    + 
    + internal enum class Scope(private val value: String) {
    +     Auto("auto"),
    +     Major("major"),
    +     Minor("minor"),
    +     Patch("patch");
    + 
    +     operator fun invoke(): String = value
    + }
    + 
    + private fun Project.getSemverProperty(semverProperty: SemverProperty): Provider<String> =
    +     when {
    +         gradle.startParameter.projectProperties[semverProperty.key] != null -> {
    +             provider { gradle.startParameter.projectProperties[semverProperty.key] }
    +         }
    +         projectDir.resolve("gradle.properties").exists() -> {
    +             provider {
    +                 Properties()
    +                     .apply {
    +                         projectDir.resolve("gradle.properties").inputStream().use { load(it) }
    +                     }
    +                     .getProperty(semverProperty.key)
    +             }
    +         }
    +         else -> {
    +             providers.gradleProperty(semverProperty.key)
    +         }
    +     }
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-5/sources/source-8.html b/reports-generated/code-coverage/ns-5/sources/source-8.html new file mode 100644 index 00000000..d4e767a8 --- /dev/null +++ b/reports-generated/code-coverage/ns-5/sources/source-8.html @@ -0,0 +1,207 @@ + + + + + + + Coverage Report > SemverPropertyKt + + + + + + +
    + + +

    Coverage Summary for Class: SemverPropertyKt (com.javiersc.semver.project.gradle.plugin.internal)

    + + + + + + + + + + + + + + + + + + + +
    Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverPropertyKt + + 100% + + + (1/1) + + + + 90.9% + + + (10/11) + + + + 50% + + + (4/8) + + + + 66.7% + + + (14/21) + + + + 56.8% + + + (96/169) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin.internal
    + 
    + import java.util.Properties
    + import org.gradle.api.Project
    + import org.gradle.api.provider.Provider
    + 
    + internal const val DefaultTagPrefix = ""
    + 
    + internal val Project.projectTagPrefixProperty: Provider<String>
    +     get() = getSemverProperty(SemverProperty.ProjectTagPrefix)
    + 
    + internal val Project.tagPrefixProperty: Provider<String>
    +     get() =
    +         providers.provider {
    +             getSemverProperty(SemverProperty.TagPrefix).orNull ?: DefaultTagPrefix
    +         }
    + 
    + internal val Project.stageProperty: Provider<String>
    +     get() = getSemverProperty(SemverProperty.Stage)
    + 
    + internal val Project.scopeProperty: Provider<String>
    +     get() = getSemverProperty(SemverProperty.Scope)
    + 
    + internal val Project.remoteProperty: Provider<String>
    +     get() = getSemverProperty(SemverProperty.Remote)
    + 
    + internal val Project.checkCleanProperty: Provider<Boolean>
    +     get() =
    +         providers.provider {
    +             getSemverProperty(SemverProperty.CheckClean).orNull?.toBoolean() ?: true
    +         }
    + 
    + internal val Project.commitsMaxCount: Provider<Int>
    +     get() = getSemverProperty(SemverProperty.CommitsMaxCount).map(String::toInt)
    + 
    + internal enum class SemverProperty(val key: String) {
    +     ProjectTagPrefix("semver.project.tagPrefix"),
    +     TagPrefix("semver.tagPrefix"),
    +     Stage("semver.stage"),
    +     Scope("semver.scope"),
    +     Remote("semver.remote"),
    +     CheckClean("semver.checkClean"),
    +     CommitsMaxCount("semver.commitsMaxCount"),
    + }
    + 
    + internal enum class Stage(private val value: String) {
    +     Auto("auto"),
    +     Final("final"),
    +     ;
    + 
    +     operator fun invoke(): String = value
    + }
    + 
    + internal enum class Scope(private val value: String) {
    +     Auto("auto"),
    +     Major("major"),
    +     Minor("minor"),
    +     Patch("patch");
    + 
    +     operator fun invoke(): String = value
    + }
    + 
    + private fun Project.getSemverProperty(semverProperty: SemverProperty): Provider<String> =
    +     when {
    +         gradle.startParameter.projectProperties[semverProperty.key] != null -> {
    +             provider { gradle.startParameter.projectProperties[semverProperty.key] }
    +         }
    +         projectDir.resolve("gradle.properties").exists() -> {
    +             provider {
    +                 Properties()
    +                     .apply {
    +                         projectDir.resolve("gradle.properties").inputStream().use { load(it) }
    +                     }
    +                     .getProperty(semverProperty.key)
    +             }
    +         }
    +         else -> {
    +             providers.gradleProperty(semverProperty.key)
    +         }
    +     }
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-5/sources/source-9.html b/reports-generated/code-coverage/ns-5/sources/source-9.html new file mode 100644 index 00000000..1fe6d0ce --- /dev/null +++ b/reports-generated/code-coverage/ns-5/sources/source-9.html @@ -0,0 +1,200 @@ + + + + + + + Coverage Report > Stage + + + + + + +
    + + +

    Coverage Summary for Class: Stage (com.javiersc.semver.project.gradle.plugin.internal)

    + + + + + + + + + + + + + + + + + + +
    Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    Stage + + 100% + + + (1/1) + + + + 100% + + + (3/3) + + + + + 100% + + + (4/4) + + + + 100% + + + (25/25) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin.internal
    + 
    + import java.util.Properties
    + import org.gradle.api.Project
    + import org.gradle.api.provider.Provider
    + 
    + internal const val DefaultTagPrefix = ""
    + 
    + internal val Project.projectTagPrefixProperty: Provider<String>
    +     get() = getSemverProperty(SemverProperty.ProjectTagPrefix)
    + 
    + internal val Project.tagPrefixProperty: Provider<String>
    +     get() =
    +         providers.provider {
    +             getSemverProperty(SemverProperty.TagPrefix).orNull ?: DefaultTagPrefix
    +         }
    + 
    + internal val Project.stageProperty: Provider<String>
    +     get() = getSemverProperty(SemverProperty.Stage)
    + 
    + internal val Project.scopeProperty: Provider<String>
    +     get() = getSemverProperty(SemverProperty.Scope)
    + 
    + internal val Project.remoteProperty: Provider<String>
    +     get() = getSemverProperty(SemverProperty.Remote)
    + 
    + internal val Project.checkCleanProperty: Provider<Boolean>
    +     get() =
    +         providers.provider {
    +             getSemverProperty(SemverProperty.CheckClean).orNull?.toBoolean() ?: true
    +         }
    + 
    + internal val Project.commitsMaxCount: Provider<Int>
    +     get() = getSemverProperty(SemverProperty.CommitsMaxCount).map(String::toInt)
    + 
    + internal enum class SemverProperty(val key: String) {
    +     ProjectTagPrefix("semver.project.tagPrefix"),
    +     TagPrefix("semver.tagPrefix"),
    +     Stage("semver.stage"),
    +     Scope("semver.scope"),
    +     Remote("semver.remote"),
    +     CheckClean("semver.checkClean"),
    +     CommitsMaxCount("semver.commitsMaxCount"),
    + }
    + 
    + internal enum class Stage(private val value: String) {
    +     Auto("auto"),
    +     Final("final"),
    +     ;
    + 
    +     operator fun invoke(): String = value
    + }
    + 
    + internal enum class Scope(private val value: String) {
    +     Auto("auto"),
    +     Major("major"),
    +     Minor("minor"),
    +     Patch("patch");
    + 
    +     operator fun invoke(): String = value
    + }
    + 
    + private fun Project.getSemverProperty(semverProperty: SemverProperty): Provider<String> =
    +     when {
    +         gradle.startParameter.projectProperties[semverProperty.key] != null -> {
    +             provider { gradle.startParameter.projectProperties[semverProperty.key] }
    +         }
    +         projectDir.resolve("gradle.properties").exists() -> {
    +             provider {
    +                 Properties()
    +                     .apply {
    +                         projectDir.resolve("gradle.properties").inputStream().use { load(it) }
    +                     }
    +                     .getProperty(semverProperty.key)
    +             }
    +         }
    +         else -> {
    +             providers.gradleProperty(semverProperty.key)
    +         }
    +     }
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-6/index.html b/reports-generated/code-coverage/ns-6/index.html new file mode 100644 index 00000000..7a5b2f5b --- /dev/null +++ b/reports-generated/code-coverage/ns-6/index.html @@ -0,0 +1,348 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.internal.git + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.internal.git

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.internal.git + + 95.5% + + + (21/22) + + + + 97.3% + + + (71/73) + + + + 74.2% + + + (46/62) + + + + 97.3% + + + (181/186) + + + + 97.7% + + + (1290/1321) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    GitCache + + 92.9% + + + (13/14) + + + + 94.1% + + + (32/34) + + + + 70% + + + (28/40) + + + + 96.2% + + + (102/106) + + + + 96.4% + + + (726/753) + +
    GitCacheKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 50% + + + (1/2) + + + + 71.4% + + + (10/14) + +
    GitRef + + 100% + + + (5/5) + + + + 100% + + + (5/5) + + + + + 100% + + + (9/9) + + + + 100% + + + (69/69) + +
    GitRefGitExtensionsKt + + 100% + + + (1/1) + + + + 100% + + + (31/31) + + + + 85% + + + (17/20) + + + + 100% + + + (67/67) + + + + 100% + + + (468/468) + +
    HasGitKt + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + + 100% + + + (2/2) + + + + 100% + + + (17/17) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-6/index_SORT_BY_BLOCK.html b/reports-generated/code-coverage/ns-6/index_SORT_BY_BLOCK.html new file mode 100644 index 00000000..4e362f24 --- /dev/null +++ b/reports-generated/code-coverage/ns-6/index_SORT_BY_BLOCK.html @@ -0,0 +1,348 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.internal.git + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.internal.git

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.internal.git + + 95.5% + + + (21/22) + + + + 97.3% + + + (71/73) + + + + 74.2% + + + (46/62) + + + + 97.3% + + + (181/186) + + + + 97.7% + + + (1290/1321) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    GitRef + + 100% + + + (5/5) + + + + 100% + + + (5/5) + + + + + 100% + + + (9/9) + + + + 100% + + + (69/69) + +
    HasGitKt + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + + 100% + + + (2/2) + + + + 100% + + + (17/17) + +
    GitCacheKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 50% + + + (1/2) + + + + 71.4% + + + (10/14) + +
    GitCache + + 92.9% + + + (13/14) + + + + 94.1% + + + (32/34) + + + + 70% + + + (28/40) + + + + 96.2% + + + (102/106) + + + + 96.4% + + + (726/753) + +
    GitRefGitExtensionsKt + + 100% + + + (1/1) + + + + 100% + + + (31/31) + + + + 85% + + + (17/20) + + + + 100% + + + (67/67) + + + + 100% + + + (468/468) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-6/index_SORT_BY_BLOCK_DESC.html b/reports-generated/code-coverage/ns-6/index_SORT_BY_BLOCK_DESC.html new file mode 100644 index 00000000..2cdf2480 --- /dev/null +++ b/reports-generated/code-coverage/ns-6/index_SORT_BY_BLOCK_DESC.html @@ -0,0 +1,348 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.internal.git + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.internal.git

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.internal.git + + 95.5% + + + (21/22) + + + + 97.3% + + + (71/73) + + + + 74.2% + + + (46/62) + + + + 97.3% + + + (181/186) + + + + 97.7% + + + (1290/1321) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    GitRefGitExtensionsKt + + 100% + + + (1/1) + + + + 100% + + + (31/31) + + + + 85% + + + (17/20) + + + + 100% + + + (67/67) + + + + 100% + + + (468/468) + +
    GitCache + + 92.9% + + + (13/14) + + + + 94.1% + + + (32/34) + + + + 70% + + + (28/40) + + + + 96.2% + + + (102/106) + + + + 96.4% + + + (726/753) + +
    GitCacheKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 50% + + + (1/2) + + + + 71.4% + + + (10/14) + +
    HasGitKt + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + + 100% + + + (2/2) + + + + 100% + + + (17/17) + +
    GitRef + + 100% + + + (5/5) + + + + 100% + + + (5/5) + + + + + 100% + + + (9/9) + + + + 100% + + + (69/69) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-6/index_SORT_BY_CLASS.html b/reports-generated/code-coverage/ns-6/index_SORT_BY_CLASS.html new file mode 100644 index 00000000..db779806 --- /dev/null +++ b/reports-generated/code-coverage/ns-6/index_SORT_BY_CLASS.html @@ -0,0 +1,348 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.internal.git + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.internal.git

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.internal.git + + 95.5% + + + (21/22) + + + + 97.3% + + + (71/73) + + + + 74.2% + + + (46/62) + + + + 97.3% + + + (181/186) + + + + 97.7% + + + (1290/1321) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    GitCache + + 92.9% + + + (13/14) + + + + 94.1% + + + (32/34) + + + + 70% + + + (28/40) + + + + 96.2% + + + (102/106) + + + + 96.4% + + + (726/753) + +
    GitCacheKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 50% + + + (1/2) + + + + 71.4% + + + (10/14) + +
    GitRef + + 100% + + + (5/5) + + + + 100% + + + (5/5) + + + + + 100% + + + (9/9) + + + + 100% + + + (69/69) + +
    GitRefGitExtensionsKt + + 100% + + + (1/1) + + + + 100% + + + (31/31) + + + + 85% + + + (17/20) + + + + 100% + + + (67/67) + + + + 100% + + + (468/468) + +
    HasGitKt + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + + 100% + + + (2/2) + + + + 100% + + + (17/17) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-6/index_SORT_BY_CLASS_DESC.html b/reports-generated/code-coverage/ns-6/index_SORT_BY_CLASS_DESC.html new file mode 100644 index 00000000..8334fb4e --- /dev/null +++ b/reports-generated/code-coverage/ns-6/index_SORT_BY_CLASS_DESC.html @@ -0,0 +1,348 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.internal.git + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.internal.git

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.internal.git + + 95.5% + + + (21/22) + + + + 97.3% + + + (71/73) + + + + 74.2% + + + (46/62) + + + + 97.3% + + + (181/186) + + + + 97.7% + + + (1290/1321) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    HasGitKt + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + + 100% + + + (2/2) + + + + 100% + + + (17/17) + +
    GitRefGitExtensionsKt + + 100% + + + (1/1) + + + + 100% + + + (31/31) + + + + 85% + + + (17/20) + + + + 100% + + + (67/67) + + + + 100% + + + (468/468) + +
    GitRef + + 100% + + + (5/5) + + + + 100% + + + (5/5) + + + + + 100% + + + (9/9) + + + + 100% + + + (69/69) + +
    GitCacheKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 50% + + + (1/2) + + + + 71.4% + + + (10/14) + +
    GitCache + + 92.9% + + + (13/14) + + + + 94.1% + + + (32/34) + + + + 70% + + + (28/40) + + + + 96.2% + + + (102/106) + + + + 96.4% + + + (726/753) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-6/index_SORT_BY_LINE.html b/reports-generated/code-coverage/ns-6/index_SORT_BY_LINE.html new file mode 100644 index 00000000..54934503 --- /dev/null +++ b/reports-generated/code-coverage/ns-6/index_SORT_BY_LINE.html @@ -0,0 +1,348 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.internal.git + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.internal.git

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.internal.git + + 95.5% + + + (21/22) + + + + 97.3% + + + (71/73) + + + + 74.2% + + + (46/62) + + + + 97.3% + + + (181/186) + + + + 97.7% + + + (1290/1321) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    GitCacheKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 50% + + + (1/2) + + + + 71.4% + + + (10/14) + +
    GitCache + + 92.9% + + + (13/14) + + + + 94.1% + + + (32/34) + + + + 70% + + + (28/40) + + + + 96.2% + + + (102/106) + + + + 96.4% + + + (726/753) + +
    GitRef + + 100% + + + (5/5) + + + + 100% + + + (5/5) + + + + + 100% + + + (9/9) + + + + 100% + + + (69/69) + +
    GitRefGitExtensionsKt + + 100% + + + (1/1) + + + + 100% + + + (31/31) + + + + 85% + + + (17/20) + + + + 100% + + + (67/67) + + + + 100% + + + (468/468) + +
    HasGitKt + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + + 100% + + + (2/2) + + + + 100% + + + (17/17) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-6/index_SORT_BY_LINE_DESC.html b/reports-generated/code-coverage/ns-6/index_SORT_BY_LINE_DESC.html new file mode 100644 index 00000000..311f55ba --- /dev/null +++ b/reports-generated/code-coverage/ns-6/index_SORT_BY_LINE_DESC.html @@ -0,0 +1,348 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.internal.git + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.internal.git

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.internal.git + + 95.5% + + + (21/22) + + + + 97.3% + + + (71/73) + + + + 74.2% + + + (46/62) + + + + 97.3% + + + (181/186) + + + + 97.7% + + + (1290/1321) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    HasGitKt + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + + 100% + + + (2/2) + + + + 100% + + + (17/17) + +
    GitRefGitExtensionsKt + + 100% + + + (1/1) + + + + 100% + + + (31/31) + + + + 85% + + + (17/20) + + + + 100% + + + (67/67) + + + + 100% + + + (468/468) + +
    GitRef + + 100% + + + (5/5) + + + + 100% + + + (5/5) + + + + + 100% + + + (9/9) + + + + 100% + + + (69/69) + +
    GitCache + + 92.9% + + + (13/14) + + + + 94.1% + + + (32/34) + + + + 70% + + + (28/40) + + + + 96.2% + + + (102/106) + + + + 96.4% + + + (726/753) + +
    GitCacheKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 50% + + + (1/2) + + + + 71.4% + + + (10/14) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-6/index_SORT_BY_METHOD.html b/reports-generated/code-coverage/ns-6/index_SORT_BY_METHOD.html new file mode 100644 index 00000000..e7219ce3 --- /dev/null +++ b/reports-generated/code-coverage/ns-6/index_SORT_BY_METHOD.html @@ -0,0 +1,348 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.internal.git + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.internal.git

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.internal.git + + 95.5% + + + (21/22) + + + + 97.3% + + + (71/73) + + + + 74.2% + + + (46/62) + + + + 97.3% + + + (181/186) + + + + 97.7% + + + (1290/1321) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    GitCache + + 92.9% + + + (13/14) + + + + 94.1% + + + (32/34) + + + + 70% + + + (28/40) + + + + 96.2% + + + (102/106) + + + + 96.4% + + + (726/753) + +
    GitCacheKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 50% + + + (1/2) + + + + 71.4% + + + (10/14) + +
    GitRef + + 100% + + + (5/5) + + + + 100% + + + (5/5) + + + + + 100% + + + (9/9) + + + + 100% + + + (69/69) + +
    GitRefGitExtensionsKt + + 100% + + + (1/1) + + + + 100% + + + (31/31) + + + + 85% + + + (17/20) + + + + 100% + + + (67/67) + + + + 100% + + + (468/468) + +
    HasGitKt + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + + 100% + + + (2/2) + + + + 100% + + + (17/17) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-6/index_SORT_BY_METHOD_DESC.html b/reports-generated/code-coverage/ns-6/index_SORT_BY_METHOD_DESC.html new file mode 100644 index 00000000..d9564180 --- /dev/null +++ b/reports-generated/code-coverage/ns-6/index_SORT_BY_METHOD_DESC.html @@ -0,0 +1,348 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.internal.git + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.internal.git

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.internal.git + + 95.5% + + + (21/22) + + + + 97.3% + + + (71/73) + + + + 74.2% + + + (46/62) + + + + 97.3% + + + (181/186) + + + + 97.7% + + + (1290/1321) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    HasGitKt + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + + 100% + + + (2/2) + + + + 100% + + + (17/17) + +
    GitRefGitExtensionsKt + + 100% + + + (1/1) + + + + 100% + + + (31/31) + + + + 85% + + + (17/20) + + + + 100% + + + (67/67) + + + + 100% + + + (468/468) + +
    GitRef + + 100% + + + (5/5) + + + + 100% + + + (5/5) + + + + + 100% + + + (9/9) + + + + 100% + + + (69/69) + +
    GitCacheKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 50% + + + (1/2) + + + + 71.4% + + + (10/14) + +
    GitCache + + 92.9% + + + (13/14) + + + + 94.1% + + + (32/34) + + + + 70% + + + (28/40) + + + + 96.2% + + + (102/106) + + + + 96.4% + + + (726/753) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-6/index_SORT_BY_NAME_DESC.html b/reports-generated/code-coverage/ns-6/index_SORT_BY_NAME_DESC.html new file mode 100644 index 00000000..ee5d6c0b --- /dev/null +++ b/reports-generated/code-coverage/ns-6/index_SORT_BY_NAME_DESC.html @@ -0,0 +1,348 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.internal.git + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.internal.git

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.internal.git + + 95.5% + + + (21/22) + + + + 97.3% + + + (71/73) + + + + 74.2% + + + (46/62) + + + + 97.3% + + + (181/186) + + + + 97.7% + + + (1290/1321) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    HasGitKt + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + + 100% + + + (2/2) + + + + 100% + + + (17/17) + +
    GitRefGitExtensionsKt + + 100% + + + (1/1) + + + + 100% + + + (31/31) + + + + 85% + + + (17/20) + + + + 100% + + + (67/67) + + + + 100% + + + (468/468) + +
    GitRef + + 100% + + + (5/5) + + + + 100% + + + (5/5) + + + + + 100% + + + (9/9) + + + + 100% + + + (69/69) + +
    GitCacheKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 50% + + + (1/2) + + + + 71.4% + + + (10/14) + +
    GitCache + + 92.9% + + + (13/14) + + + + 94.1% + + + (32/34) + + + + 70% + + + (28/40) + + + + 96.2% + + + (102/106) + + + + 96.4% + + + (726/753) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-6/index_SORT_BY_STATEMENT.html b/reports-generated/code-coverage/ns-6/index_SORT_BY_STATEMENT.html new file mode 100644 index 00000000..5d567837 --- /dev/null +++ b/reports-generated/code-coverage/ns-6/index_SORT_BY_STATEMENT.html @@ -0,0 +1,348 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.internal.git + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.internal.git

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.internal.git + + 95.5% + + + (21/22) + + + + 97.3% + + + (71/73) + + + + 74.2% + + + (46/62) + + + + 97.3% + + + (181/186) + + + + 97.7% + + + (1290/1321) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    GitCacheKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 50% + + + (1/2) + + + + 71.4% + + + (10/14) + +
    GitCache + + 92.9% + + + (13/14) + + + + 94.1% + + + (32/34) + + + + 70% + + + (28/40) + + + + 96.2% + + + (102/106) + + + + 96.4% + + + (726/753) + +
    GitRef + + 100% + + + (5/5) + + + + 100% + + + (5/5) + + + + + 100% + + + (9/9) + + + + 100% + + + (69/69) + +
    GitRefGitExtensionsKt + + 100% + + + (1/1) + + + + 100% + + + (31/31) + + + + 85% + + + (17/20) + + + + 100% + + + (67/67) + + + + 100% + + + (468/468) + +
    HasGitKt + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + + 100% + + + (2/2) + + + + 100% + + + (17/17) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-6/index_SORT_BY_STATEMENT_DESC.html b/reports-generated/code-coverage/ns-6/index_SORT_BY_STATEMENT_DESC.html new file mode 100644 index 00000000..ca1f5492 --- /dev/null +++ b/reports-generated/code-coverage/ns-6/index_SORT_BY_STATEMENT_DESC.html @@ -0,0 +1,348 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.internal.git + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.internal.git

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.internal.git + + 95.5% + + + (21/22) + + + + 97.3% + + + (71/73) + + + + 74.2% + + + (46/62) + + + + 97.3% + + + (181/186) + + + + 97.7% + + + (1290/1321) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    HasGitKt + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + + 100% + + + (2/2) + + + + 100% + + + (17/17) + +
    GitRefGitExtensionsKt + + 100% + + + (1/1) + + + + 100% + + + (31/31) + + + + 85% + + + (17/20) + + + + 100% + + + (67/67) + + + + 100% + + + (468/468) + +
    GitRef + + 100% + + + (5/5) + + + + 100% + + + (5/5) + + + + + 100% + + + (9/9) + + + + 100% + + + (69/69) + +
    GitCache + + 92.9% + + + (13/14) + + + + 94.1% + + + (32/34) + + + + 70% + + + (28/40) + + + + 96.2% + + + (102/106) + + + + 96.4% + + + (726/753) + +
    GitCacheKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 50% + + + (1/2) + + + + 71.4% + + + (10/14) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-6/sources/source-1.html b/reports-generated/code-coverage/ns-6/sources/source-1.html new file mode 100644 index 00000000..7a1a5ad9 --- /dev/null +++ b/reports-generated/code-coverage/ns-6/sources/source-1.html @@ -0,0 +1,758 @@ + + + + + + + Coverage Report > GitCache + + + + + + +
    + + +

    Coverage Summary for Class: GitCache (com.javiersc.semver.project.gradle.plugin.internal.git)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class + Method, % + + Branch, % + + Line, % + + Instruction, % +
    GitCache + + 95% + + + (19/20) + + + + 67.6% + + + (23/34) + + + + 96.9% + + + (63/65) + + + + 95.2% + + + (475/499) + +
    GitCache$commitsInCurrentBranch$2 + + 100% + + + (1/1) + + + + + 100% + + + (6/6) + + + + 100% + + + (34/34) + +
    GitCache$commitsInCurrentBranchHash$2 + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (11/11) + +
    GitCache$commitsInCurrentBranchRevCommit$2 + + 100% + + + (1/1) + + + + 100% + + + (4/4) + + + + 100% + + + (1/1) + + + + 100% + + + (25/25) + +
    GitCache$commitsInTheCurrentBranchPublicApi$2 + + 100% + + + (1/1) + + + + + 100% + + + (15/15) + + + + 100% + + + (67/67) + +
    GitCache$Companion + + 100% + + + (2/2) + + + + + 100% + + + (3/3) + + + + 100% + + + (18/18) + +
    GitCache$git$2 + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 75% + + + (3/4) + + + + 92.9% + + + (26/28) + +
    GitCache$headCommit$2 + + 100% + + + (1/1) + + + + + 100% + + + (5/5) + + + + 100% + + + (28/28) + +
    GitCache$headRevCommit$2 + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (15/15) + +
    GitCache$lastCommitInCurrentBranch$2 + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (5/5) + +
    GitCache$lastResultVersion$1 + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (9/9) + +
    GitCache$lastResultVersion$2 + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (8/8) + +
    GitCache$lastVersionInCurrentBranch$1 + + 0% + + + (0/1) + + + + + 0% + + + (0/1) + + + + 0% + + + (0/1) + +
    GitCache$tagsInRepoRef$2 + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (5/5) + +
    GitCache$versionTagsInCurrentBranchSortedByTimelineOrSemverOrder$$inlined$sortedByDescending$1 +
    GitCache$versionTagsSortedBySemver$$inlined$sortedBy$1 +
    Total + + 94.1% + + + (32/34) + + + + 70% + + + (28/40) + + + + 96.2% + + + (102/106) + + + + 96.4% + + + (726/753) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin.internal.git
    + 
    + import com.javiersc.semver.Version
    + import com.javiersc.semver.project.gradle.plugin.internal.InitialVersion
    + import com.javiersc.semver.project.gradle.plugin.internal.semverWarningMessage
    + import com.javiersc.semver.project.gradle.plugin.internal.warningLastVersionIsNotHigherVersion
    + import com.javiersc.semver.project.gradle.plugin.services.hasNotCommits
    + import java.io.File
    + import org.eclipse.jgit.api.Git
    + import org.eclipse.jgit.lib.Constants
    + import org.eclipse.jgit.lib.ObjectId
    + import org.eclipse.jgit.lib.Ref
    + import org.eclipse.jgit.revwalk.RevCommit
    + import org.eclipse.jgit.revwalk.RevWalk
    + import org.eclipse.jgit.storage.file.FileRepositoryBuilder
    + import org.gradle.api.provider.Provider
    + 
    + private val checkedNotNullCache: GitCache
    +     get() =
    +         checkNotNull(gitCache) {
    +             "`GitCache` must not be null at this point, report this as a bug, please"
    +         }
    + 
    + private var gitCache: GitCache? = null
    + 
    + internal class GitCache
    + private constructor(
    +     private val gitDir: File,
    +     maxCount: Provider<Int>? = null,
    + ) {
    + 
    +     internal val git: Git by lazy {
    +         Git(FileRepositoryBuilder().setGitDir(gitDir).readEnvironment().findGitDir().build()).also {
    +             if (it.hasNotCommits()) {
    +                 semverWarningMessage("semver plugin can't work if there are no commits")
    +             }
    +         }
    +     }
    + 
    +     internal val gitFiles: List<File> = git.repository.directory.walkTopDown().toList()
    + 
    +     internal val isClean: Boolean
    +         get() = git.status().call().isClean
    + 
    +     internal val headRevCommit: RevCommit by lazy {
    +         RevWalk(git.repository).parseCommit(git.repository.resolve(Constants.HEAD))
    +     }
    + 
    +     internal val headCommit: GitRef.Head by lazy {
    +         GitRef.Head(
    +             GitRef.Commit(
    +                 message = headRevCommit.shortMessage,
    +                 fullMessage = headRevCommit.fullMessage,
    +                 hash = headRevCommit.toObjectId().name,
    +             )
    +         )
    +     }
    + 
    +     internal val commitsInCurrentBranchRevCommit: List<RevCommit> by lazy {
    +         git.log().setMaxCount(maxCount?.get() ?: -1).call().toList()
    +     }
    +     internal val tagsInRepoRef: List<Ref> by lazy { git.tagList().call() }
    + 
    +     internal val commitsInCurrentBranchHash: List<String> by lazy {
    +         commitsInCurrentBranchRevCommit.map(RevCommit::getName)
    +     }
    + 
    +     internal val commitsInTheCurrentBranchPublicApi:
    +         List<com.javiersc.semver.project.gradle.plugin.Commit> by lazy {
    +         commitsInCurrentBranchRevCommit.map { revCommit ->
    +             val hash: String = revCommit.toObjectId().name
    +             val tags: List<com.javiersc.semver.project.gradle.plugin.Tag> =
    +                 tagsInCurrentBranchRef
    +                     .filter { ref -> commitHash(ref) == hash }
    +                     .map { ref ->
    +                         com.javiersc.semver.project.gradle.plugin.Tag(
    +                             name = ref.tagName,
    +                             refName = ref.name,
    +                         )
    +                     }
    +             com.javiersc.semver.project.gradle.plugin.Commit(
    +                 message = revCommit.shortMessage,
    +                 fullMessage = revCommit.fullMessage,
    +                 hash = hash,
    +                 timestampEpochSecond = revCommit.authorIdent.whenAsInstant.epochSecond,
    +                 tags = tags,
    +             )
    +         }
    +     }
    + 
    +     internal val commitsInCurrentBranch: List<GitRef.Commit> by lazy {
    +         commitsInCurrentBranchRevCommit.map { revCommit ->
    +             revCommit.run {
    +                 GitRef.Commit(
    +                     message = shortMessage,
    +                     fullMessage = fullMessage,
    +                     hash = toObjectId().name,
    +                 )
    +             }
    +         }
    +     }
    + 
    +     internal val lastCommitInCurrentBranch: GitRef.Commit? by lazy {
    +         commitsInCurrentBranch.firstOrNull()
    +     }
    + 
    +     internal fun commitHash(ref: Ref): String = commitHash(ref.objectId)
    + 
    +     internal fun commitHash(objectId: ObjectId): String =
    +         git.repository.parseCommit(objectId).toObjectId().name
    + 
    +     internal fun lastVersionCommitInCurrentBranch(tagPrefix: String): GitRef.Commit? =
    +         lastVersionTagInCurrentBranch(tagPrefix)?.commit
    + 
    +     internal val Ref.tagName: String
    +         get() = name.substringAfter("refs/tags/")
    + 
    +     internal val tagsInCurrentBranchRef: List<Ref>
    +         get() = tagsInRepoRef.filter { ref -> commitHash(ref) in commitsInCurrentBranchHash }
    + 
    +     internal val tagsInCurrentBranch: List<GitRef.Tag>
    +         get() =
    +             tagsInCurrentBranchRef.map { ref ->
    +                 val commit = git.repository.parseCommit(ref.objectId)
    +                 GitRef.Tag(
    +                     name = ref.tagName,
    +                     refName = ref.name,
    +                     commit =
    +                         GitRef.Commit(
    +                             message = commit.shortMessage,
    +                             fullMessage = commit.fullMessage,
    +                             hash = commit.toObjectId().name,
    +                         )
    +                 )
    +             }
    + 
    +     internal fun tagsInCurrentCommit(hash: String): List<GitRef.Tag> =
    +         tagsInCurrentBranch.filter { it.commit.hash == hash }
    + 
    +     internal fun versionTagsInCurrentCommit(hash: String, tagPrefix: String): List<GitRef.Tag> =
    +         tagsInCurrentCommit(hash).filter { tag ->
    +             tag.name.startsWith(tagPrefix) &&
    +                 Version.safe(tag.name.removePrefix(tagPrefix)).isSuccess
    +         }
    + 
    +     internal fun versionTagsInCurrentBranch(tagPrefix: String): List<GitRef.Tag> =
    +         tagsInCurrentBranch.filter { tag ->
    +             tag.name.startsWith(tagPrefix) &&
    +                 Version.safe(tag.name.removePrefix(tagPrefix)).isSuccess
    +         }
    + 
    +     internal fun versionsInCurrentBranch(tagPrefix: String): List<Version> =
    +         versionTagsInCurrentBranch(tagPrefix).mapNotNull { tag ->
    +             Version.safe(tag.name.removePrefix(tagPrefix)).getOrNull()
    +         }
    + 
    +     internal fun versionTagsSortedBySemver(tagPrefix: String): List<GitRef.Tag> =
    +         versionTagsInCurrentBranch(tagPrefix).sortedBy { tag ->
    +             Version.safe(tag.name.removePrefix(tagPrefix)).getOrNull()
    +         }
    + 
    +     internal fun versionTagsInCurrentBranchSortedByTimelineOrSemverOrder(
    +         tagPrefix: String
    +     ): List<GitRef.Tag> {
    +         val commitsByHash: Map<String, Int> =
    +             commitsInCurrentBranchHash.withIndex().associate { it.value to it.index }
    + 
    +         return versionTagsSortedBySemver(tagPrefix).sortedByDescending { tag ->
    +             commitsByHash[tag.commit.hash]
    +         }
    +     }
    + 
    +     internal fun lastVersionTagInCurrentBranch(tagPrefix: String): GitRef.Tag? =
    +         versionTagsInCurrentBranchSortedByTimelineOrSemverOrder(tagPrefix).lastOrNull()
    + 
    +     // versions
    +     internal fun lastVersionInCurrentBranch(
    +         tagPrefix: String,
    +         isWarningLastVersionIsNotHigherVersion: (Boolean) -> Unit = {},
    +     ): Version =
    +         versionTagsInCurrentCommit(headCommit.commit.hash, tagPrefix).lastResultVersion(tagPrefix)
    +             ?: lastVersionTagInCurrentBranch(tagPrefix)?.name?.removePrefix(tagPrefix).run {
    +                 if (this != null) {
    +                     val lastVersion: Version? = Version.safe(this).getOrNull()
    +                     val higherVersion: Version? = versionsInCurrentBranch(tagPrefix).firstOrNull()
    + 
    +                     if (
    +                         lastVersion != null && higherVersion != null && higherVersion > lastVersion
    +                     ) {
    +                         isWarningLastVersionIsNotHigherVersion(true)
    +                         warningLastVersionIsNotHigherVersion(lastVersion, higherVersion)
    +                     }
    + 
    +                     lastVersion
    +                 } else null
    +             }
    +                 ?: InitialVersion
    + 
    +     internal fun shouldRefresh(): Boolean =
    +         git.repository.directory.walkTopDown().toList() != gitFiles
    + 
    +     private fun List<GitRef.Tag>.lastResultVersion(tagPrefix: String): Version? =
    +         asSequence()
    +             .filter { tag -> tag.name.startsWith(tagPrefix) }
    +             .map { tag -> tag.name.substringAfter(tagPrefix) }
    +             .map(Version.Companion::safe)
    +             .mapNotNull(Result<Version>::getOrNull)
    +             .toList()
    +             .run { maxOrNull() }
    + 
    +     companion object {
    + 
    +         internal operator fun invoke(gitDir: File, maxCount: Provider<Int>? = null): GitCache {
    +             // val cache: GitCache? = gitCache
    +             // TODO: improve in-memory cache as `cache.shouldRefresh()` is flaky
    +             // if (cache == null || cache.shouldRefresh() || true) {
    +             gitCache = GitCache(gitDir, maxCount)
    +             // }
    +             return checkedNotNullCache
    +         }
    +     }
    + }
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-6/sources/source-2.html b/reports-generated/code-coverage/ns-6/sources/source-2.html new file mode 100644 index 00000000..3fde2b2e --- /dev/null +++ b/reports-generated/code-coverage/ns-6/sources/source-2.html @@ -0,0 +1,349 @@ + + + + + + + Coverage Report > GitCacheKt + + + + + + +
    + + +

    Coverage Summary for Class: GitCacheKt (com.javiersc.semver.project.gradle.plugin.internal.git)

    + + + + + + + + + + + + + + + + + + + +
    Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    GitCacheKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 50% + + + (1/2) + + + + 71.4% + + + (10/14) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin.internal.git
    + 
    + import com.javiersc.semver.Version
    + import com.javiersc.semver.project.gradle.plugin.internal.InitialVersion
    + import com.javiersc.semver.project.gradle.plugin.internal.semverWarningMessage
    + import com.javiersc.semver.project.gradle.plugin.internal.warningLastVersionIsNotHigherVersion
    + import com.javiersc.semver.project.gradle.plugin.services.hasNotCommits
    + import java.io.File
    + import org.eclipse.jgit.api.Git
    + import org.eclipse.jgit.lib.Constants
    + import org.eclipse.jgit.lib.ObjectId
    + import org.eclipse.jgit.lib.Ref
    + import org.eclipse.jgit.revwalk.RevCommit
    + import org.eclipse.jgit.revwalk.RevWalk
    + import org.eclipse.jgit.storage.file.FileRepositoryBuilder
    + import org.gradle.api.provider.Provider
    + 
    + private val checkedNotNullCache: GitCache
    +     get() =
    +         checkNotNull(gitCache) {
    +             "`GitCache` must not be null at this point, report this as a bug, please"
    +         }
    + 
    + private var gitCache: GitCache? = null
    + 
    + internal class GitCache
    + private constructor(
    +     private val gitDir: File,
    +     maxCount: Provider<Int>? = null,
    + ) {
    + 
    +     internal val git: Git by lazy {
    +         Git(FileRepositoryBuilder().setGitDir(gitDir).readEnvironment().findGitDir().build()).also {
    +             if (it.hasNotCommits()) {
    +                 semverWarningMessage("semver plugin can't work if there are no commits")
    +             }
    +         }
    +     }
    + 
    +     internal val gitFiles: List<File> = git.repository.directory.walkTopDown().toList()
    + 
    +     internal val isClean: Boolean
    +         get() = git.status().call().isClean
    + 
    +     internal val headRevCommit: RevCommit by lazy {
    +         RevWalk(git.repository).parseCommit(git.repository.resolve(Constants.HEAD))
    +     }
    + 
    +     internal val headCommit: GitRef.Head by lazy {
    +         GitRef.Head(
    +             GitRef.Commit(
    +                 message = headRevCommit.shortMessage,
    +                 fullMessage = headRevCommit.fullMessage,
    +                 hash = headRevCommit.toObjectId().name,
    +             )
    +         )
    +     }
    + 
    +     internal val commitsInCurrentBranchRevCommit: List<RevCommit> by lazy {
    +         git.log().setMaxCount(maxCount?.get() ?: -1).call().toList()
    +     }
    +     internal val tagsInRepoRef: List<Ref> by lazy { git.tagList().call() }
    + 
    +     internal val commitsInCurrentBranchHash: List<String> by lazy {
    +         commitsInCurrentBranchRevCommit.map(RevCommit::getName)
    +     }
    + 
    +     internal val commitsInTheCurrentBranchPublicApi:
    +         List<com.javiersc.semver.project.gradle.plugin.Commit> by lazy {
    +         commitsInCurrentBranchRevCommit.map { revCommit ->
    +             val hash: String = revCommit.toObjectId().name
    +             val tags: List<com.javiersc.semver.project.gradle.plugin.Tag> =
    +                 tagsInCurrentBranchRef
    +                     .filter { ref -> commitHash(ref) == hash }
    +                     .map { ref ->
    +                         com.javiersc.semver.project.gradle.plugin.Tag(
    +                             name = ref.tagName,
    +                             refName = ref.name,
    +                         )
    +                     }
    +             com.javiersc.semver.project.gradle.plugin.Commit(
    +                 message = revCommit.shortMessage,
    +                 fullMessage = revCommit.fullMessage,
    +                 hash = hash,
    +                 timestampEpochSecond = revCommit.authorIdent.whenAsInstant.epochSecond,
    +                 tags = tags,
    +             )
    +         }
    +     }
    + 
    +     internal val commitsInCurrentBranch: List<GitRef.Commit> by lazy {
    +         commitsInCurrentBranchRevCommit.map { revCommit ->
    +             revCommit.run {
    +                 GitRef.Commit(
    +                     message = shortMessage,
    +                     fullMessage = fullMessage,
    +                     hash = toObjectId().name,
    +                 )
    +             }
    +         }
    +     }
    + 
    +     internal val lastCommitInCurrentBranch: GitRef.Commit? by lazy {
    +         commitsInCurrentBranch.firstOrNull()
    +     }
    + 
    +     internal fun commitHash(ref: Ref): String = commitHash(ref.objectId)
    + 
    +     internal fun commitHash(objectId: ObjectId): String =
    +         git.repository.parseCommit(objectId).toObjectId().name
    + 
    +     internal fun lastVersionCommitInCurrentBranch(tagPrefix: String): GitRef.Commit? =
    +         lastVersionTagInCurrentBranch(tagPrefix)?.commit
    + 
    +     internal val Ref.tagName: String
    +         get() = name.substringAfter("refs/tags/")
    + 
    +     internal val tagsInCurrentBranchRef: List<Ref>
    +         get() = tagsInRepoRef.filter { ref -> commitHash(ref) in commitsInCurrentBranchHash }
    + 
    +     internal val tagsInCurrentBranch: List<GitRef.Tag>
    +         get() =
    +             tagsInCurrentBranchRef.map { ref ->
    +                 val commit = git.repository.parseCommit(ref.objectId)
    +                 GitRef.Tag(
    +                     name = ref.tagName,
    +                     refName = ref.name,
    +                     commit =
    +                         GitRef.Commit(
    +                             message = commit.shortMessage,
    +                             fullMessage = commit.fullMessage,
    +                             hash = commit.toObjectId().name,
    +                         )
    +                 )
    +             }
    + 
    +     internal fun tagsInCurrentCommit(hash: String): List<GitRef.Tag> =
    +         tagsInCurrentBranch.filter { it.commit.hash == hash }
    + 
    +     internal fun versionTagsInCurrentCommit(hash: String, tagPrefix: String): List<GitRef.Tag> =
    +         tagsInCurrentCommit(hash).filter { tag ->
    +             tag.name.startsWith(tagPrefix) &&
    +                 Version.safe(tag.name.removePrefix(tagPrefix)).isSuccess
    +         }
    + 
    +     internal fun versionTagsInCurrentBranch(tagPrefix: String): List<GitRef.Tag> =
    +         tagsInCurrentBranch.filter { tag ->
    +             tag.name.startsWith(tagPrefix) &&
    +                 Version.safe(tag.name.removePrefix(tagPrefix)).isSuccess
    +         }
    + 
    +     internal fun versionsInCurrentBranch(tagPrefix: String): List<Version> =
    +         versionTagsInCurrentBranch(tagPrefix).mapNotNull { tag ->
    +             Version.safe(tag.name.removePrefix(tagPrefix)).getOrNull()
    +         }
    + 
    +     internal fun versionTagsSortedBySemver(tagPrefix: String): List<GitRef.Tag> =
    +         versionTagsInCurrentBranch(tagPrefix).sortedBy { tag ->
    +             Version.safe(tag.name.removePrefix(tagPrefix)).getOrNull()
    +         }
    + 
    +     internal fun versionTagsInCurrentBranchSortedByTimelineOrSemverOrder(
    +         tagPrefix: String
    +     ): List<GitRef.Tag> {
    +         val commitsByHash: Map<String, Int> =
    +             commitsInCurrentBranchHash.withIndex().associate { it.value to it.index }
    + 
    +         return versionTagsSortedBySemver(tagPrefix).sortedByDescending { tag ->
    +             commitsByHash[tag.commit.hash]
    +         }
    +     }
    + 
    +     internal fun lastVersionTagInCurrentBranch(tagPrefix: String): GitRef.Tag? =
    +         versionTagsInCurrentBranchSortedByTimelineOrSemverOrder(tagPrefix).lastOrNull()
    + 
    +     // versions
    +     internal fun lastVersionInCurrentBranch(
    +         tagPrefix: String,
    +         isWarningLastVersionIsNotHigherVersion: (Boolean) -> Unit = {},
    +     ): Version =
    +         versionTagsInCurrentCommit(headCommit.commit.hash, tagPrefix).lastResultVersion(tagPrefix)
    +             ?: lastVersionTagInCurrentBranch(tagPrefix)?.name?.removePrefix(tagPrefix).run {
    +                 if (this != null) {
    +                     val lastVersion: Version? = Version.safe(this).getOrNull()
    +                     val higherVersion: Version? = versionsInCurrentBranch(tagPrefix).firstOrNull()
    + 
    +                     if (
    +                         lastVersion != null && higherVersion != null && higherVersion > lastVersion
    +                     ) {
    +                         isWarningLastVersionIsNotHigherVersion(true)
    +                         warningLastVersionIsNotHigherVersion(lastVersion, higherVersion)
    +                     }
    + 
    +                     lastVersion
    +                 } else null
    +             }
    +                 ?: InitialVersion
    + 
    +     internal fun shouldRefresh(): Boolean =
    +         git.repository.directory.walkTopDown().toList() != gitFiles
    + 
    +     private fun List<GitRef.Tag>.lastResultVersion(tagPrefix: String): Version? =
    +         asSequence()
    +             .filter { tag -> tag.name.startsWith(tagPrefix) }
    +             .map { tag -> tag.name.substringAfter(tagPrefix) }
    +             .map(Version.Companion::safe)
    +             .mapNotNull(Result<Version>::getOrNull)
    +             .toList()
    +             .run { maxOrNull() }
    + 
    +     companion object {
    + 
    +         internal operator fun invoke(gitDir: File, maxCount: Provider<Int>? = null): GitCache {
    +             // val cache: GitCache? = gitCache
    +             // TODO: improve in-memory cache as `cache.shouldRefresh()` is flaky
    +             // if (cache == null || cache.shouldRefresh() || true) {
    +             gitCache = GitCache(gitDir, maxCount)
    +             // }
    +             return checkedNotNullCache
    +         }
    +     }
    + }
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-6/sources/source-3.html b/reports-generated/code-coverage/ns-6/sources/source-3.html new file mode 100644 index 00000000..177354e1 --- /dev/null +++ b/reports-generated/code-coverage/ns-6/sources/source-3.html @@ -0,0 +1,265 @@ + + + + + + + Coverage Report > GitRef + + + + + + +
    + + +

    Coverage Summary for Class: GitRef (com.javiersc.semver.project.gradle.plugin.internal.git)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class + Method, % + + Branch, % + + Line, % + + Instruction, % +
    GitRef + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (2/2) + +
    GitRef$Branch + + 100% + + + (1/1) + + + + + 100% + + + (5/5) + + + + 100% + + + (23/23) + +
    GitRef$Commit + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (18/18) + +
    GitRef$Head + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (8/8) + +
    GitRef$Tag + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (18/18) + +
    Total + + 100% + + + (5/5) + + + + + 100% + + + (9/9) + + + + 100% + + + (69/69) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin.internal.git
    + 
    + internal sealed class GitRef {
    + 
    +     data class Head(val commit: Commit) : GitRef()
    + 
    +     data class Commit(val message: String, val fullMessage: String, val hash: String) : GitRef()
    + 
    +     data class Tag(val name: String, val refName: String, val commit: Commit) : GitRef()
    + 
    +     data class Branch(
    +         val name: String, // example: `main`
    +         val refName: String, // example: `refs/heads/main`
    +         val commits: List<Commit>,
    +         val tags: List<Tag>,
    +     ) : GitRef()
    + }
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-6/sources/source-4.html b/reports-generated/code-coverage/ns-6/sources/source-4.html new file mode 100644 index 00000000..45c8dc1c --- /dev/null +++ b/reports-generated/code-coverage/ns-6/sources/source-4.html @@ -0,0 +1,330 @@ + + + + + + + Coverage Report > GitRefGitExtensionsKt + + + + + + +
    + + +

    Coverage Summary for Class: GitRefGitExtensionsKt (com.javiersc.semver.project.gradle.plugin.internal.git)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class + Method, % + + Branch, % + + Line, % + + Instruction, % +
    GitRefGitExtensionsKt + + 100% + + + (31/31) + + + + 85% + + + (17/20) + + + + 100% + + + (67/67) + + + + 100% + + + (468/468) + +
    GitRefGitExtensionsKt$versionTagsInCurrentBranchSortedByTimelineOrSemverOrder$$inlined$sortedByDescending$1 +
    GitRefGitExtensionsKt$versionTagsSortedBySemver$$inlined$sortedBy$1 +
    Total + + 100% + + + (31/31) + + + + 85% + + + (17/20) + + + + 100% + + + (67/67) + + + + 100% + + + (468/468) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin.internal.git
    + 
    + import com.javiersc.semver.Version
    + import org.eclipse.jgit.api.Git
    + import org.eclipse.jgit.lib.Constants
    + import org.eclipse.jgit.lib.ObjectId
    + import org.eclipse.jgit.lib.Ref
    + import org.eclipse.jgit.revwalk.RevCommit
    + import org.eclipse.jgit.revwalk.RevWalk
    + 
    + internal val Git.headRef: Ref
    +     get() = repository.findRef(repository.fullBranch)
    + 
    + // branches
    + internal val Git.currentBranch: GitRef.Branch
    +     get() =
    +         repository.run {
    +             GitRef.Branch(branch, fullBranch, commitsInCurrentBranch, tagsInCurrentBranch)
    +         }
    + 
    + // commits
    + internal val Git.headCommit: GitRef.Head
    +     get() =
    +         GitRef.Head(
    +             GitRef.Commit(
    +                 message = headRevCommit.shortMessage,
    +                 fullMessage = headRevCommit.fullMessage,
    +                 hash = headRevCommit.toObjectId().name,
    +             )
    +         )
    + 
    + internal val Git.headRevCommit: RevCommit
    +     get() = RevWalk(repository).parseCommit(repository.resolve(Constants.HEAD))
    + 
    + internal val Git.headRevCommitInBranch: RevCommit
    +     get() = RevWalk(repository).parseCommit(headRef.objectId)
    + 
    + internal val Git.lastCommitInCurrentBranch: GitRef.Commit?
    +     get() = commitsInCurrentBranch.firstOrNull()
    + 
    + internal val Git.commitsInCurrentBranchRevCommit: List<RevCommit>
    +     get() = log().call().toList()
    + 
    + internal val Git.commitsInCurrentBranch: List<GitRef.Commit>
    +     get() =
    +         commitsInCurrentBranchRevCommit.map { revCommit ->
    +             revCommit.run {
    +                 GitRef.Commit(
    +                     message = shortMessage,
    +                     fullMessage = fullMessage,
    +                     hash = toObjectId().name,
    +                 )
    +             }
    +         }
    + 
    + internal val Git.commitsInCurrentBranchHash: List<String>
    +     get() = commitsInCurrentBranchRevCommit.map(RevCommit::getName)
    + 
    + internal fun Git.commitHash(ref: Ref): String = commitHash(ref.objectId)
    + 
    + internal fun Git.commitHash(objectId: ObjectId): String =
    +     repository.parseCommit(objectId).toObjectId().name
    + 
    + internal fun commitsBetweenTwoCommitsIncludingLastExcludingFirst(
    +     fromCommit: String?,
    +     toCommit: String?,
    +     commitsInCurrentBranch: List<String>,
    + ): List<String> {
    +     val to: Int = commitsInCurrentBranch.indexOf(toCommit)
    +     val from: Int = commitsInCurrentBranch.indexOf(fromCommit)
    + 
    +     return when {
    +         (to == -1 || from == -1) -> emptyList()
    +         to > from -> commitsInCurrentBranch.subList(from, to)
    +         else -> commitsInCurrentBranch.subList(to, from)
    +     }
    + }
    + 
    + internal val Git.commitsInCurrentBranchFullMessage: List<String>
    +     get() = commitsInCurrentBranchRevCommit.map(RevCommit::getFullMessage)
    + 
    + internal fun Git.lastVersionCommitInCurrentBranch(tagPrefix: String): GitRef.Commit? =
    +     lastVersionTagInCurrentBranch(tagPrefix)?.commit
    + 
    + // tags
    + internal val Ref.tagName: String
    +     get() = name.substringAfter("refs/tags/")
    + 
    + internal val Git.tagsInRepo: List<GitRef.Tag>
    +     get() =
    +         tagsInRepoRef.map { ref ->
    +             val commit = repository.parseCommit(ref.objectId)
    +             GitRef.Tag(
    +                 name = ref.tagName,
    +                 refName = ref.name,
    +                 commit =
    +                     GitRef.Commit(
    +                         message = commit.shortMessage,
    +                         fullMessage = commit.fullMessage,
    +                         hash = commit.toObjectId().name,
    +                     )
    +             )
    +         }
    + 
    + internal val Git.tagsInRepoRef: List<Ref>
    +     get() = Git(repository).tagList().call()
    + 
    + internal val Git.tagsInRepoHash: List<String>
    +     get() = tagsInRepoRef.map(::commitHash)
    + 
    + internal val Git.tagsInRepoName: List<String>
    +     get() = tagsInRepoRef.map(Ref::getName)
    + 
    + internal val Git.tagsInCurrentBranch: List<GitRef.Tag>
    +     get() =
    +         tagsInCurrentBranchRef.map { ref ->
    +             val commit = repository.parseCommit(ref.objectId)
    +             GitRef.Tag(
    +                 name = ref.tagName,
    +                 refName = ref.name,
    +                 commit =
    +                     GitRef.Commit(
    +                         message = commit.shortMessage,
    +                         fullMessage = commit.fullMessage,
    +                         hash = commit.toObjectId().name,
    +                     )
    +             )
    +         }
    + 
    + internal val Git.tagsInCurrentBranchRef: List<Ref>
    +     get() = tagsInRepoRef.filter { ref -> commitHash(ref) in commitsInCurrentBranchHash }
    + 
    + internal val Git.tagsInCurrentBranchHash: List<String>
    +     get() = tagsInCurrentBranchRef.map(::commitHash)
    + 
    + internal val Git.tagsInCurrentBranchName: List<String>
    +     get() = tagsInCurrentBranchRef.map(Ref::getName)
    + 
    + internal fun Git.tagsInCurrentCommit(hash: String): List<GitRef.Tag> =
    +     tagsInCurrentBranch.filter { it.commit.hash == hash }
    + 
    + internal fun Git.isThereVersionTag(tagPrefix: String): Boolean =
    +     versionTagsInCurrentBranch(tagPrefix).isNotEmpty()
    + 
    + internal fun Git.versionTagsInCurrentCommit(hash: String, tagPrefix: String): List<GitRef.Tag> =
    +     tagsInCurrentCommit(hash).filter { tag ->
    +         tag.name.startsWith(tagPrefix) && Version.safe(tag.name.removePrefix(tagPrefix)).isSuccess
    +     }
    + 
    + internal fun Git.versionTagsInCurrentBranch(tagPrefix: String): List<GitRef.Tag> =
    +     tagsInCurrentBranch.filter { tag ->
    +         tag.name.startsWith(tagPrefix) && Version.safe(tag.name.removePrefix(tagPrefix)).isSuccess
    +     }
    + 
    + internal fun Git.versionTagsSortedBySemver(tagPrefix: String): List<GitRef.Tag> =
    +     versionTagsInCurrentBranch(tagPrefix).sortedBy { tag ->
    +         Version.safe(tag.name.removePrefix(tagPrefix)).getOrNull()
    +     }
    + 
    + internal fun Git.versionTagsInCurrentBranchSortedByTimelineOrSemverOrder(
    +     tagPrefix: String
    + ): List<GitRef.Tag> {
    +     val commitsByHash: Map<String, Int> =
    +         commitsInCurrentBranchHash.withIndex().associate { it.value to it.index }
    + 
    +     return versionTagsSortedBySemver(tagPrefix).sortedByDescending { tag ->
    +         commitsByHash[tag.commit.hash]
    +     }
    + }
    + 
    + internal fun Git.lastVersionTagInCurrentBranch(tagPrefix: String): GitRef.Tag? =
    +     versionTagsInCurrentBranchSortedByTimelineOrSemverOrder(tagPrefix).lastOrNull()
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-6/sources/source-5.html b/reports-generated/code-coverage/ns-6/sources/source-5.html new file mode 100644 index 00000000..7a4044ad --- /dev/null +++ b/reports-generated/code-coverage/ns-6/sources/source-5.html @@ -0,0 +1,130 @@ + + + + + + + Coverage Report > HasGitKt + + + + + + +
    + + +

    Coverage Summary for Class: HasGitKt (com.javiersc.semver.project.gradle.plugin.internal.git)

    + + + + + + + + + + + + + + + + + + +
    Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    HasGitKt + + 100% + + + (1/1) + + + + 100% + + + (2/2) + + + + + 100% + + + (2/2) + + + + 100% + + + (17/17) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin.internal.git
    + 
    + import java.io.File
    + import org.gradle.api.Project
    + 
    + internal val Project.hasGit: Boolean
    +     get() = gitDir.exists()
    + 
    + internal val Project.gitDir: File
    +     get() = file("$rootDir/.git")
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-7/index.html b/reports-generated/code-coverage/ns-7/index.html new file mode 100644 index 00000000..61cea6c5 --- /dev/null +++ b/reports-generated/code-coverage/ns-7/index.html @@ -0,0 +1,226 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.services + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.services

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.services + + 60% + + + (3/5) + + + + 36.4% + + + (4/11) + + + + 5% + + + (1/20) + + + + 26.7% + + + (12/45) + + + + 25.7% + + + (86/335) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    GitBuildService + + 50% + + + (2/4) + + + + 25% + + + (2/8) + + + + 5% + + + (1/20) + + + + 23.1% + + + (9/39) + + + + 24.5% + + + (75/306) + +
    GitBuildServiceKt + + 100% + + + (1/1) + + + + 66.7% + + + (2/3) + + + + + 50% + + + (3/6) + + + + 37.9% + + + (11/29) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-7/index_SORT_BY_BLOCK.html b/reports-generated/code-coverage/ns-7/index_SORT_BY_BLOCK.html new file mode 100644 index 00000000..6b7c4ad9 --- /dev/null +++ b/reports-generated/code-coverage/ns-7/index_SORT_BY_BLOCK.html @@ -0,0 +1,226 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.services + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.services

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.services + + 60% + + + (3/5) + + + + 36.4% + + + (4/11) + + + + 5% + + + (1/20) + + + + 26.7% + + + (12/45) + + + + 25.7% + + + (86/335) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    GitBuildServiceKt + + 100% + + + (1/1) + + + + 66.7% + + + (2/3) + + + + + 50% + + + (3/6) + + + + 37.9% + + + (11/29) + +
    GitBuildService + + 50% + + + (2/4) + + + + 25% + + + (2/8) + + + + 5% + + + (1/20) + + + + 23.1% + + + (9/39) + + + + 24.5% + + + (75/306) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-7/index_SORT_BY_BLOCK_DESC.html b/reports-generated/code-coverage/ns-7/index_SORT_BY_BLOCK_DESC.html new file mode 100644 index 00000000..b205509d --- /dev/null +++ b/reports-generated/code-coverage/ns-7/index_SORT_BY_BLOCK_DESC.html @@ -0,0 +1,226 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.services + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.services

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.services + + 60% + + + (3/5) + + + + 36.4% + + + (4/11) + + + + 5% + + + (1/20) + + + + 26.7% + + + (12/45) + + + + 25.7% + + + (86/335) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    GitBuildService + + 50% + + + (2/4) + + + + 25% + + + (2/8) + + + + 5% + + + (1/20) + + + + 23.1% + + + (9/39) + + + + 24.5% + + + (75/306) + +
    GitBuildServiceKt + + 100% + + + (1/1) + + + + 66.7% + + + (2/3) + + + + + 50% + + + (3/6) + + + + 37.9% + + + (11/29) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-7/index_SORT_BY_CLASS.html b/reports-generated/code-coverage/ns-7/index_SORT_BY_CLASS.html new file mode 100644 index 00000000..4d918ade --- /dev/null +++ b/reports-generated/code-coverage/ns-7/index_SORT_BY_CLASS.html @@ -0,0 +1,226 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.services + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.services

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.services + + 60% + + + (3/5) + + + + 36.4% + + + (4/11) + + + + 5% + + + (1/20) + + + + 26.7% + + + (12/45) + + + + 25.7% + + + (86/335) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    GitBuildService + + 50% + + + (2/4) + + + + 25% + + + (2/8) + + + + 5% + + + (1/20) + + + + 23.1% + + + (9/39) + + + + 24.5% + + + (75/306) + +
    GitBuildServiceKt + + 100% + + + (1/1) + + + + 66.7% + + + (2/3) + + + + + 50% + + + (3/6) + + + + 37.9% + + + (11/29) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-7/index_SORT_BY_CLASS_DESC.html b/reports-generated/code-coverage/ns-7/index_SORT_BY_CLASS_DESC.html new file mode 100644 index 00000000..95ccb60c --- /dev/null +++ b/reports-generated/code-coverage/ns-7/index_SORT_BY_CLASS_DESC.html @@ -0,0 +1,226 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.services + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.services

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.services + + 60% + + + (3/5) + + + + 36.4% + + + (4/11) + + + + 5% + + + (1/20) + + + + 26.7% + + + (12/45) + + + + 25.7% + + + (86/335) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    GitBuildServiceKt + + 100% + + + (1/1) + + + + 66.7% + + + (2/3) + + + + + 50% + + + (3/6) + + + + 37.9% + + + (11/29) + +
    GitBuildService + + 50% + + + (2/4) + + + + 25% + + + (2/8) + + + + 5% + + + (1/20) + + + + 23.1% + + + (9/39) + + + + 24.5% + + + (75/306) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-7/index_SORT_BY_LINE.html b/reports-generated/code-coverage/ns-7/index_SORT_BY_LINE.html new file mode 100644 index 00000000..49939bfa --- /dev/null +++ b/reports-generated/code-coverage/ns-7/index_SORT_BY_LINE.html @@ -0,0 +1,226 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.services + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.services

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.services + + 60% + + + (3/5) + + + + 36.4% + + + (4/11) + + + + 5% + + + (1/20) + + + + 26.7% + + + (12/45) + + + + 25.7% + + + (86/335) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    GitBuildService + + 50% + + + (2/4) + + + + 25% + + + (2/8) + + + + 5% + + + (1/20) + + + + 23.1% + + + (9/39) + + + + 24.5% + + + (75/306) + +
    GitBuildServiceKt + + 100% + + + (1/1) + + + + 66.7% + + + (2/3) + + + + + 50% + + + (3/6) + + + + 37.9% + + + (11/29) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-7/index_SORT_BY_LINE_DESC.html b/reports-generated/code-coverage/ns-7/index_SORT_BY_LINE_DESC.html new file mode 100644 index 00000000..7ca22694 --- /dev/null +++ b/reports-generated/code-coverage/ns-7/index_SORT_BY_LINE_DESC.html @@ -0,0 +1,226 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.services + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.services

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.services + + 60% + + + (3/5) + + + + 36.4% + + + (4/11) + + + + 5% + + + (1/20) + + + + 26.7% + + + (12/45) + + + + 25.7% + + + (86/335) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    GitBuildServiceKt + + 100% + + + (1/1) + + + + 66.7% + + + (2/3) + + + + + 50% + + + (3/6) + + + + 37.9% + + + (11/29) + +
    GitBuildService + + 50% + + + (2/4) + + + + 25% + + + (2/8) + + + + 5% + + + (1/20) + + + + 23.1% + + + (9/39) + + + + 24.5% + + + (75/306) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-7/index_SORT_BY_METHOD.html b/reports-generated/code-coverage/ns-7/index_SORT_BY_METHOD.html new file mode 100644 index 00000000..67fe13ab --- /dev/null +++ b/reports-generated/code-coverage/ns-7/index_SORT_BY_METHOD.html @@ -0,0 +1,226 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.services + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.services

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.services + + 60% + + + (3/5) + + + + 36.4% + + + (4/11) + + + + 5% + + + (1/20) + + + + 26.7% + + + (12/45) + + + + 25.7% + + + (86/335) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    GitBuildService + + 50% + + + (2/4) + + + + 25% + + + (2/8) + + + + 5% + + + (1/20) + + + + 23.1% + + + (9/39) + + + + 24.5% + + + (75/306) + +
    GitBuildServiceKt + + 100% + + + (1/1) + + + + 66.7% + + + (2/3) + + + + + 50% + + + (3/6) + + + + 37.9% + + + (11/29) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-7/index_SORT_BY_METHOD_DESC.html b/reports-generated/code-coverage/ns-7/index_SORT_BY_METHOD_DESC.html new file mode 100644 index 00000000..8535a1a1 --- /dev/null +++ b/reports-generated/code-coverage/ns-7/index_SORT_BY_METHOD_DESC.html @@ -0,0 +1,226 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.services + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.services

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.services + + 60% + + + (3/5) + + + + 36.4% + + + (4/11) + + + + 5% + + + (1/20) + + + + 26.7% + + + (12/45) + + + + 25.7% + + + (86/335) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    GitBuildServiceKt + + 100% + + + (1/1) + + + + 66.7% + + + (2/3) + + + + + 50% + + + (3/6) + + + + 37.9% + + + (11/29) + +
    GitBuildService + + 50% + + + (2/4) + + + + 25% + + + (2/8) + + + + 5% + + + (1/20) + + + + 23.1% + + + (9/39) + + + + 24.5% + + + (75/306) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-7/index_SORT_BY_NAME_DESC.html b/reports-generated/code-coverage/ns-7/index_SORT_BY_NAME_DESC.html new file mode 100644 index 00000000..cf2fec74 --- /dev/null +++ b/reports-generated/code-coverage/ns-7/index_SORT_BY_NAME_DESC.html @@ -0,0 +1,226 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.services + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.services

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.services + + 60% + + + (3/5) + + + + 36.4% + + + (4/11) + + + + 5% + + + (1/20) + + + + 26.7% + + + (12/45) + + + + 25.7% + + + (86/335) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    GitBuildServiceKt + + 100% + + + (1/1) + + + + 66.7% + + + (2/3) + + + + + 50% + + + (3/6) + + + + 37.9% + + + (11/29) + +
    GitBuildService + + 50% + + + (2/4) + + + + 25% + + + (2/8) + + + + 5% + + + (1/20) + + + + 23.1% + + + (9/39) + + + + 24.5% + + + (75/306) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-7/index_SORT_BY_STATEMENT.html b/reports-generated/code-coverage/ns-7/index_SORT_BY_STATEMENT.html new file mode 100644 index 00000000..960570e1 --- /dev/null +++ b/reports-generated/code-coverage/ns-7/index_SORT_BY_STATEMENT.html @@ -0,0 +1,226 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.services + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.services

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.services + + 60% + + + (3/5) + + + + 36.4% + + + (4/11) + + + + 5% + + + (1/20) + + + + 26.7% + + + (12/45) + + + + 25.7% + + + (86/335) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    GitBuildService + + 50% + + + (2/4) + + + + 25% + + + (2/8) + + + + 5% + + + (1/20) + + + + 23.1% + + + (9/39) + + + + 24.5% + + + (75/306) + +
    GitBuildServiceKt + + 100% + + + (1/1) + + + + 66.7% + + + (2/3) + + + + + 50% + + + (3/6) + + + + 37.9% + + + (11/29) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-7/index_SORT_BY_STATEMENT_DESC.html b/reports-generated/code-coverage/ns-7/index_SORT_BY_STATEMENT_DESC.html new file mode 100644 index 00000000..1504b85a --- /dev/null +++ b/reports-generated/code-coverage/ns-7/index_SORT_BY_STATEMENT_DESC.html @@ -0,0 +1,226 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.services + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.services

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.services + + 60% + + + (3/5) + + + + 36.4% + + + (4/11) + + + + 5% + + + (1/20) + + + + 26.7% + + + (12/45) + + + + 25.7% + + + (86/335) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    GitBuildServiceKt + + 100% + + + (1/1) + + + + 66.7% + + + (2/3) + + + + + 50% + + + (3/6) + + + + 37.9% + + + (11/29) + +
    GitBuildService + + 50% + + + (2/4) + + + + 25% + + + (2/8) + + + + 5% + + + (1/20) + + + + 23.1% + + + (9/39) + + + + 24.5% + + + (75/306) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-7/sources/source-1.html b/reports-generated/code-coverage/ns-7/sources/source-1.html new file mode 100644 index 00000000..4857f5a8 --- /dev/null +++ b/reports-generated/code-coverage/ns-7/sources/source-1.html @@ -0,0 +1,370 @@ + + + + + + + Coverage Report > GitBuildService + + + + + + +
    + + +

    Coverage Summary for Class: GitBuildService (com.javiersc.semver.project.gradle.plugin.services)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class + Method, % + + Branch, % + + Line, % + + Instruction, % +
    GitBuildService + + 0% + + + (0/5) + + + + 0% + + + (0/10) + + + + 0% + + + (0/19) + + + + 0% + + + (0/123) + +
    GitBuildService$Companion + + 100% + + + (1/1) + + + + + 100% + + + (3/3) + + + + 100% + + + (25/25) + +
    GitBuildService$Companion$register$1 + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 100% + + + (6/6) + + + + 98% + + + (50/51) + +
    GitBuildService$Params +
    GitBuildService$pushTag$1 + + 0% + + + (0/1) + + + + 0% + + + (0/8) + + + + 0% + + + (0/11) + + + + 0% + + + (0/107) + +
    Total + + 25% + + + (2/8) + + + + 5% + + + (1/20) + + + + 23.1% + + + (9/39) + + + + 24.5% + + + (75/306) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin.services
    + 
    + import com.javiersc.semver.project.gradle.plugin.internal.commitsMaxCount
    + import com.javiersc.semver.project.gradle.plugin.internal.git.GitCache
    + import com.javiersc.semver.project.gradle.plugin.internal.git.commitsInCurrentBranchRevCommit
    + import com.javiersc.semver.project.gradle.plugin.internal.remoteProperty
    + import com.javiersc.semver.project.gradle.plugin.internal.semverMessage
    + import com.javiersc.semver.project.gradle.plugin.semverExtension
    + import javax.inject.Inject
    + import org.eclipse.jgit.api.Git
    + import org.eclipse.jgit.api.errors.NoHeadException
    + import org.eclipse.jgit.transport.RemoteConfig
    + import org.gradle.api.Project
    + import org.gradle.api.file.RegularFileProperty
    + import org.gradle.api.provider.Property
    + import org.gradle.api.provider.Provider
    + import org.gradle.api.services.BuildService
    + import org.gradle.api.services.BuildServiceParameters
    + import org.gradle.kotlin.dsl.registerIfAbsent
    + import org.gradle.process.ExecOperations
    + 
    + public abstract class GitBuildService
    + @Inject
    + constructor(
    +     private val execOperations: ExecOperations,
    + ) : BuildService<GitBuildService.Params>, AutoCloseable {
    + 
    +     private val createdTagPrefixes: MutableSet<String> = mutableSetOf()
    + 
    +     private val git: Git
    +         get() =
    +             parameters.run {
    +                 GitCache(
    +                         gitDir = gitDir.get().asFile,
    +                         maxCount = commitsMaxCount,
    +                     )
    +                     .git
    +             }
    + 
    +     internal fun createTag(tagPrefixProperty: String, projectTagPrefix: String, version: String) {
    +         if (tagPrefixProperty !in createdTagPrefixes && projectTagPrefix == tagPrefixProperty) {
    +             createdTagPrefixes.add(tagPrefixProperty)
    + 
    +             check(git.status().call().isClean) {
    +                 "A semver tag can't be created if the repo is not clean"
    +             }
    + 
    +             val semverWithTagPrefix = "$projectTagPrefix$version"
    +             git.tag().setName(semverWithTagPrefix).call()
    +             semverMessage("Created new semver tag: $semverWithTagPrefix")
    +         }
    +     }
    + 
    +     internal fun pushTag(tagPrefixProperty: String, projectTagPrefix: String, version: String) {
    +         if (tagPrefixProperty !in createdTagPrefixes && projectTagPrefix == tagPrefixProperty) {
    +             createTag(tagPrefixProperty, projectTagPrefix, version)
    + 
    +             execOperations.exec { exec ->
    +                 val remoteProp: String? = parameters.remoteProperty.orNull
    + 
    +                 val remote: String? =
    +                     when {
    +                         remoteProp != null -> {
    +                             checkNotNull(git.remotes.firstOrNull { it == remoteProp }) {
    +                                 "There is no remote with the name $remoteProp"
    +                             }
    +                         }
    +                         git.remotes.contains("origin") -> "origin"
    +                         else -> git.remotes.firstOrNull()
    +                     }
    + 
    +                 checkNotNull(remote) { "There is no remote repositories" }
    + 
    +                 val semverWithTagPrefix = "$projectTagPrefix$version"
    +                 exec.commandLine("git", "push", remote, semverWithTagPrefix)
    +             }
    +         }
    +     }
    + 
    +     internal interface Params : BuildServiceParameters {
    +         val gitDir: RegularFileProperty
    +         val commitsMaxCount: Property<Int>
    +         val remoteProperty: Property<String>
    +     }
    + 
    +     override fun close() {
    +         createdTagPrefixes.clear()
    +     }
    + 
    +     internal companion object {
    + 
    +         internal fun register(project: Project): Provider<GitBuildService> =
    +             project.gradle.sharedServices.registerIfAbsent(
    +                 "gitTagBuildService",
    +                 GitBuildService::class
    +             ) { buildService ->
    +                 val commitsMaxCount: Int =
    +                     project.commitsMaxCount.orNull ?: project.semverExtension.commitsMaxCount.get()
    +                 buildService.parameters.gitDir.set(project.semverExtension.gitDir)
    +                 buildService.parameters.commitsMaxCount.set(commitsMaxCount)
    +                 buildService.parameters.remoteProperty.set(project.remoteProperty)
    + 
    +                 buildService.maxParallelUsages.set(1)
    +             }
    +     }
    + }
    + 
    + internal fun Git.hasCommits(): Boolean =
    +     try {
    +         commitsInCurrentBranchRevCommit.isNotEmpty()
    +     } catch (exception: NoHeadException) {
    +         false
    +     }
    + 
    + internal fun Git.hasNotCommits(): Boolean = !hasCommits()
    + 
    + private val Git.remotes: List<String>
    +     get() = remoteList().call().map(RemoteConfig::getName)
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-7/sources/source-2.html b/reports-generated/code-coverage/ns-7/sources/source-2.html new file mode 100644 index 00000000..4c7d542b --- /dev/null +++ b/reports-generated/code-coverage/ns-7/sources/source-2.html @@ -0,0 +1,238 @@ + + + + + + + Coverage Report > GitBuildServiceKt + + + + + + +
    + + +

    Coverage Summary for Class: GitBuildServiceKt (com.javiersc.semver.project.gradle.plugin.services)

    + + + + + + + + + + + + + + + + + + +
    Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    GitBuildServiceKt + + 100% + + + (1/1) + + + + 66.7% + + + (2/3) + + + + + 50% + + + (3/6) + + + + 37.9% + + + (11/29) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin.services
    + 
    + import com.javiersc.semver.project.gradle.plugin.internal.commitsMaxCount
    + import com.javiersc.semver.project.gradle.plugin.internal.git.GitCache
    + import com.javiersc.semver.project.gradle.plugin.internal.git.commitsInCurrentBranchRevCommit
    + import com.javiersc.semver.project.gradle.plugin.internal.remoteProperty
    + import com.javiersc.semver.project.gradle.plugin.internal.semverMessage
    + import com.javiersc.semver.project.gradle.plugin.semverExtension
    + import javax.inject.Inject
    + import org.eclipse.jgit.api.Git
    + import org.eclipse.jgit.api.errors.NoHeadException
    + import org.eclipse.jgit.transport.RemoteConfig
    + import org.gradle.api.Project
    + import org.gradle.api.file.RegularFileProperty
    + import org.gradle.api.provider.Property
    + import org.gradle.api.provider.Provider
    + import org.gradle.api.services.BuildService
    + import org.gradle.api.services.BuildServiceParameters
    + import org.gradle.kotlin.dsl.registerIfAbsent
    + import org.gradle.process.ExecOperations
    + 
    + public abstract class GitBuildService
    + @Inject
    + constructor(
    +     private val execOperations: ExecOperations,
    + ) : BuildService<GitBuildService.Params>, AutoCloseable {
    + 
    +     private val createdTagPrefixes: MutableSet<String> = mutableSetOf()
    + 
    +     private val git: Git
    +         get() =
    +             parameters.run {
    +                 GitCache(
    +                         gitDir = gitDir.get().asFile,
    +                         maxCount = commitsMaxCount,
    +                     )
    +                     .git
    +             }
    + 
    +     internal fun createTag(tagPrefixProperty: String, projectTagPrefix: String, version: String) {
    +         if (tagPrefixProperty !in createdTagPrefixes && projectTagPrefix == tagPrefixProperty) {
    +             createdTagPrefixes.add(tagPrefixProperty)
    + 
    +             check(git.status().call().isClean) {
    +                 "A semver tag can't be created if the repo is not clean"
    +             }
    + 
    +             val semverWithTagPrefix = "$projectTagPrefix$version"
    +             git.tag().setName(semverWithTagPrefix).call()
    +             semverMessage("Created new semver tag: $semverWithTagPrefix")
    +         }
    +     }
    + 
    +     internal fun pushTag(tagPrefixProperty: String, projectTagPrefix: String, version: String) {
    +         if (tagPrefixProperty !in createdTagPrefixes && projectTagPrefix == tagPrefixProperty) {
    +             createTag(tagPrefixProperty, projectTagPrefix, version)
    + 
    +             execOperations.exec { exec ->
    +                 val remoteProp: String? = parameters.remoteProperty.orNull
    + 
    +                 val remote: String? =
    +                     when {
    +                         remoteProp != null -> {
    +                             checkNotNull(git.remotes.firstOrNull { it == remoteProp }) {
    +                                 "There is no remote with the name $remoteProp"
    +                             }
    +                         }
    +                         git.remotes.contains("origin") -> "origin"
    +                         else -> git.remotes.firstOrNull()
    +                     }
    + 
    +                 checkNotNull(remote) { "There is no remote repositories" }
    + 
    +                 val semverWithTagPrefix = "$projectTagPrefix$version"
    +                 exec.commandLine("git", "push", remote, semverWithTagPrefix)
    +             }
    +         }
    +     }
    + 
    +     internal interface Params : BuildServiceParameters {
    +         val gitDir: RegularFileProperty
    +         val commitsMaxCount: Property<Int>
    +         val remoteProperty: Property<String>
    +     }
    + 
    +     override fun close() {
    +         createdTagPrefixes.clear()
    +     }
    + 
    +     internal companion object {
    + 
    +         internal fun register(project: Project): Provider<GitBuildService> =
    +             project.gradle.sharedServices.registerIfAbsent(
    +                 "gitTagBuildService",
    +                 GitBuildService::class
    +             ) { buildService ->
    +                 val commitsMaxCount: Int =
    +                     project.commitsMaxCount.orNull ?: project.semverExtension.commitsMaxCount.get()
    +                 buildService.parameters.gitDir.set(project.semverExtension.gitDir)
    +                 buildService.parameters.commitsMaxCount.set(commitsMaxCount)
    +                 buildService.parameters.remoteProperty.set(project.remoteProperty)
    + 
    +                 buildService.maxParallelUsages.set(1)
    +             }
    +     }
    + }
    + 
    + internal fun Git.hasCommits(): Boolean =
    +     try {
    +         commitsInCurrentBranchRevCommit.isNotEmpty()
    +     } catch (exception: NoHeadException) {
    +         false
    +     }
    + 
    + internal fun Git.hasNotCommits(): Boolean = !hasCommits()
    + 
    + private val Git.remotes: List<String>
    +     get() = remoteList().call().map(RemoteConfig::getName)
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-8/index.html b/reports-generated/code-coverage/ns-8/index.html new file mode 100644 index 00000000..1595372e --- /dev/null +++ b/reports-generated/code-coverage/ns-8/index.html @@ -0,0 +1,298 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.tasks + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.tasks

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.tasks + + 16.7% + + + (4/24) + + + + 11.4% + + + (4/35) + + + + 0% + + + (0/34) + + + + 18.9% + + + (25/132) + + + + 30.3% + + + (379/1251) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    CreateSemverTagTask + + 33.3% + + + (1/3) + + + + 25% + + + (1/4) + + + + + 7.7% + + + (1/13) + + + + 26.5% + + + (22/83) + +
    PrintSemverTask + + 11.1% + + + (1/9) + + + + 6.2% + + + (1/16) + + + + 0% + + + (0/34) + + + + 18.6% + + + (13/70) + + + + 24.6% + + + (187/761) + +
    PushSemverTagTask + + 33.3% + + + (1/3) + + + + 25% + + + (1/4) + + + + + 7.7% + + + (1/13) + + + + 26.5% + + + (22/83) + +
    WriteSemverTask + + 11.1% + + + (1/9) + + + + 9.1% + + + (1/11) + + + + + 27.8% + + + (10/36) + + + + 45.7% + + + (148/324) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-8/index_SORT_BY_BLOCK.html b/reports-generated/code-coverage/ns-8/index_SORT_BY_BLOCK.html new file mode 100644 index 00000000..ab3ced5d --- /dev/null +++ b/reports-generated/code-coverage/ns-8/index_SORT_BY_BLOCK.html @@ -0,0 +1,298 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.tasks + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.tasks

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.tasks + + 16.7% + + + (4/24) + + + + 11.4% + + + (4/35) + + + + 0% + + + (0/34) + + + + 18.9% + + + (25/132) + + + + 30.3% + + + (379/1251) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    CreateSemverTagTask + + 33.3% + + + (1/3) + + + + 25% + + + (1/4) + + + + + 7.7% + + + (1/13) + + + + 26.5% + + + (22/83) + +
    PushSemverTagTask + + 33.3% + + + (1/3) + + + + 25% + + + (1/4) + + + + + 7.7% + + + (1/13) + + + + 26.5% + + + (22/83) + +
    WriteSemverTask + + 11.1% + + + (1/9) + + + + 9.1% + + + (1/11) + + + + + 27.8% + + + (10/36) + + + + 45.7% + + + (148/324) + +
    PrintSemverTask + + 11.1% + + + (1/9) + + + + 6.2% + + + (1/16) + + + + 0% + + + (0/34) + + + + 18.6% + + + (13/70) + + + + 24.6% + + + (187/761) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-8/index_SORT_BY_BLOCK_DESC.html b/reports-generated/code-coverage/ns-8/index_SORT_BY_BLOCK_DESC.html new file mode 100644 index 00000000..4c5a5d36 --- /dev/null +++ b/reports-generated/code-coverage/ns-8/index_SORT_BY_BLOCK_DESC.html @@ -0,0 +1,298 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.tasks + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.tasks

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.tasks + + 16.7% + + + (4/24) + + + + 11.4% + + + (4/35) + + + + 0% + + + (0/34) + + + + 18.9% + + + (25/132) + + + + 30.3% + + + (379/1251) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    PrintSemverTask + + 11.1% + + + (1/9) + + + + 6.2% + + + (1/16) + + + + 0% + + + (0/34) + + + + 18.6% + + + (13/70) + + + + 24.6% + + + (187/761) + +
    WriteSemverTask + + 11.1% + + + (1/9) + + + + 9.1% + + + (1/11) + + + + + 27.8% + + + (10/36) + + + + 45.7% + + + (148/324) + +
    PushSemverTagTask + + 33.3% + + + (1/3) + + + + 25% + + + (1/4) + + + + + 7.7% + + + (1/13) + + + + 26.5% + + + (22/83) + +
    CreateSemverTagTask + + 33.3% + + + (1/3) + + + + 25% + + + (1/4) + + + + + 7.7% + + + (1/13) + + + + 26.5% + + + (22/83) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-8/index_SORT_BY_CLASS.html b/reports-generated/code-coverage/ns-8/index_SORT_BY_CLASS.html new file mode 100644 index 00000000..05170f58 --- /dev/null +++ b/reports-generated/code-coverage/ns-8/index_SORT_BY_CLASS.html @@ -0,0 +1,298 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.tasks + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.tasks

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.tasks + + 16.7% + + + (4/24) + + + + 11.4% + + + (4/35) + + + + 0% + + + (0/34) + + + + 18.9% + + + (25/132) + + + + 30.3% + + + (379/1251) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    PrintSemverTask + + 11.1% + + + (1/9) + + + + 6.2% + + + (1/16) + + + + 0% + + + (0/34) + + + + 18.6% + + + (13/70) + + + + 24.6% + + + (187/761) + +
    WriteSemverTask + + 11.1% + + + (1/9) + + + + 9.1% + + + (1/11) + + + + + 27.8% + + + (10/36) + + + + 45.7% + + + (148/324) + +
    CreateSemverTagTask + + 33.3% + + + (1/3) + + + + 25% + + + (1/4) + + + + + 7.7% + + + (1/13) + + + + 26.5% + + + (22/83) + +
    PushSemverTagTask + + 33.3% + + + (1/3) + + + + 25% + + + (1/4) + + + + + 7.7% + + + (1/13) + + + + 26.5% + + + (22/83) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-8/index_SORT_BY_CLASS_DESC.html b/reports-generated/code-coverage/ns-8/index_SORT_BY_CLASS_DESC.html new file mode 100644 index 00000000..34491390 --- /dev/null +++ b/reports-generated/code-coverage/ns-8/index_SORT_BY_CLASS_DESC.html @@ -0,0 +1,298 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.tasks + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.tasks

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.tasks + + 16.7% + + + (4/24) + + + + 11.4% + + + (4/35) + + + + 0% + + + (0/34) + + + + 18.9% + + + (25/132) + + + + 30.3% + + + (379/1251) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    PushSemverTagTask + + 33.3% + + + (1/3) + + + + 25% + + + (1/4) + + + + + 7.7% + + + (1/13) + + + + 26.5% + + + (22/83) + +
    CreateSemverTagTask + + 33.3% + + + (1/3) + + + + 25% + + + (1/4) + + + + + 7.7% + + + (1/13) + + + + 26.5% + + + (22/83) + +
    WriteSemverTask + + 11.1% + + + (1/9) + + + + 9.1% + + + (1/11) + + + + + 27.8% + + + (10/36) + + + + 45.7% + + + (148/324) + +
    PrintSemverTask + + 11.1% + + + (1/9) + + + + 6.2% + + + (1/16) + + + + 0% + + + (0/34) + + + + 18.6% + + + (13/70) + + + + 24.6% + + + (187/761) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-8/index_SORT_BY_LINE.html b/reports-generated/code-coverage/ns-8/index_SORT_BY_LINE.html new file mode 100644 index 00000000..eea93c1e --- /dev/null +++ b/reports-generated/code-coverage/ns-8/index_SORT_BY_LINE.html @@ -0,0 +1,298 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.tasks + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.tasks

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.tasks + + 16.7% + + + (4/24) + + + + 11.4% + + + (4/35) + + + + 0% + + + (0/34) + + + + 18.9% + + + (25/132) + + + + 30.3% + + + (379/1251) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    CreateSemverTagTask + + 33.3% + + + (1/3) + + + + 25% + + + (1/4) + + + + + 7.7% + + + (1/13) + + + + 26.5% + + + (22/83) + +
    PushSemverTagTask + + 33.3% + + + (1/3) + + + + 25% + + + (1/4) + + + + + 7.7% + + + (1/13) + + + + 26.5% + + + (22/83) + +
    PrintSemverTask + + 11.1% + + + (1/9) + + + + 6.2% + + + (1/16) + + + + 0% + + + (0/34) + + + + 18.6% + + + (13/70) + + + + 24.6% + + + (187/761) + +
    WriteSemverTask + + 11.1% + + + (1/9) + + + + 9.1% + + + (1/11) + + + + + 27.8% + + + (10/36) + + + + 45.7% + + + (148/324) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-8/index_SORT_BY_LINE_DESC.html b/reports-generated/code-coverage/ns-8/index_SORT_BY_LINE_DESC.html new file mode 100644 index 00000000..1ffd8d5f --- /dev/null +++ b/reports-generated/code-coverage/ns-8/index_SORT_BY_LINE_DESC.html @@ -0,0 +1,298 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.tasks + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.tasks

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.tasks + + 16.7% + + + (4/24) + + + + 11.4% + + + (4/35) + + + + 0% + + + (0/34) + + + + 18.9% + + + (25/132) + + + + 30.3% + + + (379/1251) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    WriteSemverTask + + 11.1% + + + (1/9) + + + + 9.1% + + + (1/11) + + + + + 27.8% + + + (10/36) + + + + 45.7% + + + (148/324) + +
    PrintSemverTask + + 11.1% + + + (1/9) + + + + 6.2% + + + (1/16) + + + + 0% + + + (0/34) + + + + 18.6% + + + (13/70) + + + + 24.6% + + + (187/761) + +
    PushSemverTagTask + + 33.3% + + + (1/3) + + + + 25% + + + (1/4) + + + + + 7.7% + + + (1/13) + + + + 26.5% + + + (22/83) + +
    CreateSemverTagTask + + 33.3% + + + (1/3) + + + + 25% + + + (1/4) + + + + + 7.7% + + + (1/13) + + + + 26.5% + + + (22/83) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-8/index_SORT_BY_METHOD.html b/reports-generated/code-coverage/ns-8/index_SORT_BY_METHOD.html new file mode 100644 index 00000000..92a7e721 --- /dev/null +++ b/reports-generated/code-coverage/ns-8/index_SORT_BY_METHOD.html @@ -0,0 +1,298 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.tasks + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.tasks

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.tasks + + 16.7% + + + (4/24) + + + + 11.4% + + + (4/35) + + + + 0% + + + (0/34) + + + + 18.9% + + + (25/132) + + + + 30.3% + + + (379/1251) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    PrintSemverTask + + 11.1% + + + (1/9) + + + + 6.2% + + + (1/16) + + + + 0% + + + (0/34) + + + + 18.6% + + + (13/70) + + + + 24.6% + + + (187/761) + +
    WriteSemverTask + + 11.1% + + + (1/9) + + + + 9.1% + + + (1/11) + + + + + 27.8% + + + (10/36) + + + + 45.7% + + + (148/324) + +
    CreateSemverTagTask + + 33.3% + + + (1/3) + + + + 25% + + + (1/4) + + + + + 7.7% + + + (1/13) + + + + 26.5% + + + (22/83) + +
    PushSemverTagTask + + 33.3% + + + (1/3) + + + + 25% + + + (1/4) + + + + + 7.7% + + + (1/13) + + + + 26.5% + + + (22/83) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-8/index_SORT_BY_METHOD_DESC.html b/reports-generated/code-coverage/ns-8/index_SORT_BY_METHOD_DESC.html new file mode 100644 index 00000000..0794cb4a --- /dev/null +++ b/reports-generated/code-coverage/ns-8/index_SORT_BY_METHOD_DESC.html @@ -0,0 +1,298 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.tasks + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.tasks

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.tasks + + 16.7% + + + (4/24) + + + + 11.4% + + + (4/35) + + + + 0% + + + (0/34) + + + + 18.9% + + + (25/132) + + + + 30.3% + + + (379/1251) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    PushSemverTagTask + + 33.3% + + + (1/3) + + + + 25% + + + (1/4) + + + + + 7.7% + + + (1/13) + + + + 26.5% + + + (22/83) + +
    CreateSemverTagTask + + 33.3% + + + (1/3) + + + + 25% + + + (1/4) + + + + + 7.7% + + + (1/13) + + + + 26.5% + + + (22/83) + +
    WriteSemverTask + + 11.1% + + + (1/9) + + + + 9.1% + + + (1/11) + + + + + 27.8% + + + (10/36) + + + + 45.7% + + + (148/324) + +
    PrintSemverTask + + 11.1% + + + (1/9) + + + + 6.2% + + + (1/16) + + + + 0% + + + (0/34) + + + + 18.6% + + + (13/70) + + + + 24.6% + + + (187/761) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-8/index_SORT_BY_NAME_DESC.html b/reports-generated/code-coverage/ns-8/index_SORT_BY_NAME_DESC.html new file mode 100644 index 00000000..85cccaab --- /dev/null +++ b/reports-generated/code-coverage/ns-8/index_SORT_BY_NAME_DESC.html @@ -0,0 +1,298 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.tasks + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.tasks

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.tasks + + 16.7% + + + (4/24) + + + + 11.4% + + + (4/35) + + + + 0% + + + (0/34) + + + + 18.9% + + + (25/132) + + + + 30.3% + + + (379/1251) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    WriteSemverTask + + 11.1% + + + (1/9) + + + + 9.1% + + + (1/11) + + + + + 27.8% + + + (10/36) + + + + 45.7% + + + (148/324) + +
    PushSemverTagTask + + 33.3% + + + (1/3) + + + + 25% + + + (1/4) + + + + + 7.7% + + + (1/13) + + + + 26.5% + + + (22/83) + +
    PrintSemverTask + + 11.1% + + + (1/9) + + + + 6.2% + + + (1/16) + + + + 0% + + + (0/34) + + + + 18.6% + + + (13/70) + + + + 24.6% + + + (187/761) + +
    CreateSemverTagTask + + 33.3% + + + (1/3) + + + + 25% + + + (1/4) + + + + + 7.7% + + + (1/13) + + + + 26.5% + + + (22/83) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-8/index_SORT_BY_STATEMENT.html b/reports-generated/code-coverage/ns-8/index_SORT_BY_STATEMENT.html new file mode 100644 index 00000000..ed888314 --- /dev/null +++ b/reports-generated/code-coverage/ns-8/index_SORT_BY_STATEMENT.html @@ -0,0 +1,298 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.tasks + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.tasks

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.tasks + + 16.7% + + + (4/24) + + + + 11.4% + + + (4/35) + + + + 0% + + + (0/34) + + + + 18.9% + + + (25/132) + + + + 30.3% + + + (379/1251) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    PrintSemverTask + + 11.1% + + + (1/9) + + + + 6.2% + + + (1/16) + + + + 0% + + + (0/34) + + + + 18.6% + + + (13/70) + + + + 24.6% + + + (187/761) + +
    CreateSemverTagTask + + 33.3% + + + (1/3) + + + + 25% + + + (1/4) + + + + + 7.7% + + + (1/13) + + + + 26.5% + + + (22/83) + +
    PushSemverTagTask + + 33.3% + + + (1/3) + + + + 25% + + + (1/4) + + + + + 7.7% + + + (1/13) + + + + 26.5% + + + (22/83) + +
    WriteSemverTask + + 11.1% + + + (1/9) + + + + 9.1% + + + (1/11) + + + + + 27.8% + + + (10/36) + + + + 45.7% + + + (148/324) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-8/index_SORT_BY_STATEMENT_DESC.html b/reports-generated/code-coverage/ns-8/index_SORT_BY_STATEMENT_DESC.html new file mode 100644 index 00000000..a0f4ab83 --- /dev/null +++ b/reports-generated/code-coverage/ns-8/index_SORT_BY_STATEMENT_DESC.html @@ -0,0 +1,298 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.tasks + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.tasks

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.tasks + + 16.7% + + + (4/24) + + + + 11.4% + + + (4/35) + + + + 0% + + + (0/34) + + + + 18.9% + + + (25/132) + + + + 30.3% + + + (379/1251) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    WriteSemverTask + + 11.1% + + + (1/9) + + + + 9.1% + + + (1/11) + + + + + 27.8% + + + (10/36) + + + + 45.7% + + + (148/324) + +
    PushSemverTagTask + + 33.3% + + + (1/3) + + + + 25% + + + (1/4) + + + + + 7.7% + + + (1/13) + + + + 26.5% + + + (22/83) + +
    CreateSemverTagTask + + 33.3% + + + (1/3) + + + + 25% + + + (1/4) + + + + + 7.7% + + + (1/13) + + + + 26.5% + + + (22/83) + +
    PrintSemverTask + + 11.1% + + + (1/9) + + + + 6.2% + + + (1/16) + + + + 0% + + + (0/34) + + + + 18.6% + + + (13/70) + + + + 24.6% + + + (187/761) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-8/sources/source-1.html b/reports-generated/code-coverage/ns-8/sources/source-1.html new file mode 100644 index 00000000..a52eb707 --- /dev/null +++ b/reports-generated/code-coverage/ns-8/sources/source-1.html @@ -0,0 +1,240 @@ + + + + + + + Coverage Report > CreateSemverTagTask + + + + + + +
    + + +

    Coverage Summary for Class: CreateSemverTagTask (com.javiersc.semver.project.gradle.plugin.tasks)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class + Method, % + + Branch, % + + Line, % + + Instruction, % +
    CreateSemverTagTask + + 0% + + + (0/2) + + + + + 0% + + + (0/7) + + + + 0% + + + (0/33) + +
    CreateSemverTagTask$Companion + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (22/22) + +
    CreateSemverTagTask$Companion$register$1 + + 0% + + + (0/1) + + + + + 0% + + + (0/5) + + + + 0% + + + (0/28) + +
    Total + + 25% + + + (1/4) + + + + + 7.7% + + + (1/13) + + + + 26.5% + + + (22/83) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin.tasks
    + 
    + import com.javiersc.semver.project.gradle.plugin.internal.projectTagPrefix
    + import com.javiersc.semver.project.gradle.plugin.internal.tagPrefixProperty
    + import com.javiersc.semver.project.gradle.plugin.services.GitBuildService
    + import org.gradle.api.DefaultTask
    + import org.gradle.api.Project
    + import org.gradle.api.provider.Property
    + import org.gradle.api.provider.Provider
    + import org.gradle.api.tasks.Internal
    + import org.gradle.api.tasks.TaskAction
    + import org.gradle.kotlin.dsl.register
    + 
    + public abstract class CreateSemverTagTask : DefaultTask() {
    + 
    +     @get:Internal internal abstract val tagPrefixProperty: Property<String>
    + 
    +     @get:Internal internal abstract val projectTagPrefix: Property<String>
    + 
    +     @get:Internal internal abstract val version: Property<String>
    + 
    +     @get:Internal internal abstract val gitTagBuildService: Property<GitBuildService>
    + 
    +     init {
    +         group = "semver"
    +     }
    + 
    +     @TaskAction
    +     public fun run() {
    +         gitTagBuildService
    +             .get()
    +             .createTag(tagPrefixProperty.get(), projectTagPrefix.get(), version.get())
    +     }
    + 
    +     public companion object {
    +         public const val TaskName: String = "createSemverTag"
    + 
    +         internal fun register(project: Project, gitTagBuildService: Provider<GitBuildService>) {
    +             project.tasks.register<CreateSemverTagTask>(TaskName).configure { task ->
    +                 task.tagPrefixProperty.set(project.tagPrefixProperty)
    +                 task.projectTagPrefix.set(project.projectTagPrefix)
    +                 task.version.set(project.version.toString())
    +                 task.gitTagBuildService.set(gitTagBuildService)
    +                 task.usesService(gitTagBuildService)
    +             }
    +         }
    +     }
    + }
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-8/sources/source-2.html b/reports-generated/code-coverage/ns-8/sources/source-2.html new file mode 100644 index 00000000..5e8c6bea --- /dev/null +++ b/reports-generated/code-coverage/ns-8/sources/source-2.html @@ -0,0 +1,601 @@ + + + + + + + Coverage Report > PrintSemverTask + + + + + + +
    + + +

    Coverage Summary for Class: PrintSemverTask (com.javiersc.semver.project.gradle.plugin.tasks)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class + Method, % + + Branch, % + + Line, % + + Instruction, % +
    PrintSemverTask + + 0% + + + (0/8) + + + + 0% + + + (0/34) + + + + 0% + + + (0/48) + + + + 0% + + + (0/478) + +
    PrintSemverTask$Companion + + 100% + + + (1/1) + + + + + 100% + + + (13/13) + + + + 100% + + + (187/187) + +
    PrintSemverTask$Companion$inlined$sam$i$org_gradle_api_specs_Spec$0 +
    PrintSemverTask$Companion$register$$inlined$maybeRegisterLazily$1 +
    PrintSemverTask$Companion$register$$inlined$maybeRegisterLazily$2 +
    PrintSemverTask$Companion$register$$inlined$maybeRegisterLazily$3 +
    PrintSemverTask$Companion$register$$inlined$maybeRegisterLazily$4 +
    PrintSemverTask$Companion$register$$inlined$maybeRegisterLazily$5 +
    PrintSemverTask$Companion$register$$inlined$maybeRegisterLazily$6 +
    PrintSemverTask$Companion$register$$inlined$namedLazily$1 +
    PrintSemverTask$Companion$register$1 + + 0% + + + (0/1) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/24) + +
    PrintSemverTask$Companion$register$2 + + 0% + + + (0/1) + + + + + 0% + + + (0/1) + + + + 0% + + + (0/12) + +
    PrintSemverTask$Companion$register$3 + + 0% + + + (0/1) + + + + + 0% + + + (0/1) + + + + 0% + + + (0/12) + +
    PrintSemverTask$Companion$register$4 + + 0% + + + (0/1) + + + + + 0% + + + (0/1) + + + + 0% + + + (0/12) + +
    PrintSemverTask$Companion$register$5 + + 0% + + + (0/1) + + + + + 0% + + + (0/1) + + + + 0% + + + (0/12) + +
    PrintSemverTask$Companion$register$6 + + 0% + + + (0/1) + + + + + 0% + + + (0/1) + + + + 0% + + + (0/12) + +
    PrintSemverTask$Companion$register$7 + + 0% + + + (0/1) + + + + + 0% + + + (0/1) + + + + 0% + + + (0/12) + +
    Total + + 6.2% + + + (1/16) + + + + 0% + + + (0/34) + + + + 18.6% + + + (13/70) + + + + 24.6% + + + (187/761) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin.tasks
    + 
    + import com.javiersc.gradle.project.extensions.isRootProject
    + import com.javiersc.gradle.tasks.extensions.maybeRegisterLazily
    + import com.javiersc.gradle.tasks.extensions.namedLazily
    + import com.javiersc.semver.project.gradle.plugin.internal.projectTagPrefix
    + import com.javiersc.semver.project.gradle.plugin.internal.semverMessage
    + import java.io.File
    + import javax.inject.Inject
    + import org.gradle.api.DefaultTask
    + import org.gradle.api.Project
    + import org.gradle.api.Task
    + import org.gradle.api.model.ObjectFactory
    + import org.gradle.api.provider.Property
    + import org.gradle.api.tasks.Input
    + import org.gradle.api.tasks.TaskAction
    + import org.gradle.api.tasks.TaskProvider
    + import org.gradle.api.tasks.UntrackedTask
    + import org.gradle.api.tasks.options.Option
    + import org.gradle.api.tasks.testing.Test
    + import org.gradle.jvm.tasks.Jar
    + import org.gradle.kotlin.dsl.property
    + import org.gradle.kotlin.dsl.register
    + import org.gradle.kotlin.dsl.withType
    + import org.gradle.language.base.plugins.LifecycleBasePlugin.ASSEMBLE_TASK_NAME
    + import org.gradle.language.base.plugins.LifecycleBasePlugin.BUILD_TASK_NAME
    + import org.gradle.language.base.plugins.LifecycleBasePlugin.CHECK_TASK_NAME
    + 
    + @UntrackedTask(because = "It must always print the version")
    + public abstract class PrintSemverTask
    + @Inject
    + constructor(
    +     private val isRootProject: Boolean,
    +     private val projectName: String,
    +     objects: ObjectFactory,
    + ) : DefaultTask() {
    + 
    +     init {
    +         group = "semver"
    +     }
    + 
    +     @Input
    +     @Option(
    +         option = "githubOnlyRoot",
    +         description = "Set any GitHub option to work only on the root project `printSemver` task"
    +     )
    +     public val githubOnlyRoot: Property<Boolean> = objects.property<Boolean>().convention(false)
    + 
    +     @Input
    +     @Option(
    +         option = "githubEnvTag",
    +         description =
    +             "Set the version as `semver-tag-subproject-name` environment variable of the GitHub Actions"
    +     )
    +     public val githubEnvTag: Property<Boolean> = objects.property<Boolean>().convention(false)
    + 
    +     @Input
    +     @Option(
    +         option = "githubEnvVersion",
    +         description =
    +             "Set the version as `semver-version-subproject-name` environment variable of the GitHub Actions"
    +     )
    +     public val githubEnvVersion: Property<Boolean> = objects.property<Boolean>().convention(false)
    + 
    +     @Input
    +     @Option(
    +         option = "githubEnv",
    +         description =
    +             "Set the version as `semver-subproject-name` environment variable of the GitHub Actions"
    +     )
    +     public val githubEnv: Property<Boolean> = objects.property<Boolean>().convention(false)
    + 
    +     @Input
    +     @Option(
    +         option = "githubOutputTag",
    +         description = "Set the version as `semver-tag-subproject-name` output of the GitHub Actions"
    +     )
    +     public val githubOutputTag: Property<Boolean> = objects.property<Boolean>().convention(false)
    + 
    +     @Input
    +     @Option(
    +         option = "githubOutputVersion",
    +         description =
    +             "Set the version as `semver-version-subproject-name` output of the GitHub Actions"
    +     )
    +     public val githubOutputVersion: Property<Boolean> =
    +         objects.property<Boolean>().convention(false)
    + 
    +     @Input
    +     @Option(
    +         option = "githubOutput",
    +         description =
    +             "Set the version as `semver-subproject-name` output of the GitHub Actions `semver` step ID"
    +     )
    +     public val githubOutput: Property<Boolean> = objects.property<Boolean>().convention(false)
    + 
    +     @get:Input public abstract val tagPrefix: Property<String>
    + 
    +     @get:Input public abstract val version: Property<String>
    + 
    +     @TaskAction
    +     public fun run() {
    +         val semver: String = version.get()
    +         val prefix: String = tagPrefix.get()
    +         val semverWithPrefix = "$prefix$semver"
    + 
    +         val name: String =
    +             if (projectName.isBlank() || projectName == ":") "the root project" else projectName
    + 
    +         semverMessage("semver for $name: $semverWithPrefix")
    + 
    +         val onlyRoot: Boolean = githubOnlyRoot.orNull ?: false
    +         val allProjects: Boolean = !onlyRoot
    +         when {
    +             onlyRoot && isRootProject -> configureGitHub(prefix, semver, semverWithPrefix)
    +             allProjects -> configureGitHub(prefix, semver, semverWithPrefix)
    +         }
    +     }
    + 
    +     private fun configureGitHub(tagPrefix: String, semver: String, semverWithPrefix: String) {
    +         val tagName = if (isRootProject) "semver-tag" else "semver-tag-$projectName"
    +         if (githubOutputTag.orNull == true) executeGitHubOutput(tagName, tagPrefix)
    +         if (githubEnvTag.orNull == true) executeGitHubEnvironmentVariable(tagName, tagPrefix)
    + 
    +         val versionName = if (isRootProject) "semver-version" else "semver-version-$projectName"
    +         if (githubOutputVersion.orNull == true) executeGitHubOutput(versionName, semver)
    +         if (githubEnvVersion.orNull == true) executeGitHubEnvironmentVariable(versionName, semver)
    + 
    +         val name = if (isRootProject) "semver" else "semver-$projectName"
    +         if (githubOutput.orNull == true) executeGitHubOutput(name, semverWithPrefix)
    +         if (githubEnv.orNull == true) executeGitHubEnvironmentVariable(name, semverWithPrefix)
    +     }
    + 
    +     private fun executeGitHubOutput(key: String, value: String) {
    +         val snakeCaseKey = key.toSnakeCase()
    +         semverMessage("\nSetting $value with the `$snakeCaseKey` as step output...")
    +         File(System.getenv("GITHUB_OUTPUT")).putEnvironmentVariable(snakeCaseKey, value)
    +     }
    + 
    +     private fun executeGitHubEnvironmentVariable(key: String, value: String) {
    +         val snakeCaseKey = key.toSnakeCase()
    +         semverMessage("\nSetting $value with the key `$snakeCaseKey` as environment variable...")
    +         File(System.getenv("GITHUB_ENV")).putEnvironmentVariable(snakeCaseKey, value)
    +     }
    + 
    +     private fun File.putEnvironmentVariable(key: String, value: String) {
    +         val lines = readLines().toMutableList()
    +         val keyIndex = lines.indexOfFirst { line -> line.substringBefore('=') == key }
    +         if (keyIndex != -1) lines[keyIndex] = value else lines.add("$key=$value")
    +         writeText(lines.joinToString("\n"))
    +     }
    + 
    +     private fun String.toSnakeCase(): String =
    +         map { char -> if (char.isUpperCase()) "_$char" else char.uppercaseChar() }
    +             .joinToString("")
    +             .replace(".", "_")
    +             .replace("-", "_")
    + 
    +     public companion object {
    +         public const val TaskName: String = "printSemver"
    + 
    +         internal fun register(project: Project): TaskProvider<PrintSemverTask> {
    +             val prepareKotlinIdeaImportTask: Task =
    +                 project.tasks.maybeCreate("prepareKotlinIdeaImport")
    + 
    +             val printSemverTask: TaskProvider<PrintSemverTask> =
    +                 project.tasks.register(TaskName, project.isRootProject, project.name)
    + 
    +             prepareKotlinIdeaImportTask.dependsOn(printSemverTask)
    + 
    +             printSemverTask.configure { task ->
    +                 task.dependsOn(WriteSemverTask.TaskName)
    +                 task.tagPrefix.set(project.projectTagPrefix)
    +                 task.version.set(project.version.toString())
    +             }
    + 
    +             project.tasks.namedLazily<CreateSemverTagTask>(CreateSemverTagTask.TaskName) { task ->
    +                 task.finalizedBy(printSemverTask)
    +             }
    +             project.tasks.maybeRegisterLazily<Task>(ASSEMBLE_TASK_NAME) { task ->
    +                 task.dependsOn(printSemverTask)
    +             }
    +             project.tasks.maybeRegisterLazily<Task>(BUILD_TASK_NAME) { task ->
    +                 task.dependsOn(printSemverTask)
    +             }
    +             project.tasks.maybeRegisterLazily<Task>(CHECK_TASK_NAME) { task ->
    +                 task.dependsOn(printSemverTask)
    +             }
    +             project.tasks.withType<Jar>().configureEach { task -> task.dependsOn(printSemverTask) }
    +             project.tasks.withType<Test>().configureEach { task -> task.dependsOn(printSemverTask) }
    + 
    +             return printSemverTask
    +         }
    +     }
    + }
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-8/sources/source-3.html b/reports-generated/code-coverage/ns-8/sources/source-3.html new file mode 100644 index 00000000..85cc6112 --- /dev/null +++ b/reports-generated/code-coverage/ns-8/sources/source-3.html @@ -0,0 +1,240 @@ + + + + + + + Coverage Report > PushSemverTagTask + + + + + + +
    + + +

    Coverage Summary for Class: PushSemverTagTask (com.javiersc.semver.project.gradle.plugin.tasks)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class + Method, % + + Branch, % + + Line, % + + Instruction, % +
    PushSemverTagTask + + 0% + + + (0/2) + + + + + 0% + + + (0/7) + + + + 0% + + + (0/33) + +
    PushSemverTagTask$Companion + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (22/22) + +
    PushSemverTagTask$Companion$register$1 + + 0% + + + (0/1) + + + + + 0% + + + (0/5) + + + + 0% + + + (0/28) + +
    Total + + 25% + + + (1/4) + + + + + 7.7% + + + (1/13) + + + + 26.5% + + + (22/83) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin.tasks
    + 
    + import com.javiersc.semver.project.gradle.plugin.internal.projectTagPrefix
    + import com.javiersc.semver.project.gradle.plugin.internal.tagPrefixProperty
    + import com.javiersc.semver.project.gradle.plugin.services.GitBuildService
    + import org.gradle.api.DefaultTask
    + import org.gradle.api.Project
    + import org.gradle.api.provider.Property
    + import org.gradle.api.provider.Provider
    + import org.gradle.api.tasks.Internal
    + import org.gradle.api.tasks.TaskAction
    + import org.gradle.kotlin.dsl.register
    + 
    + public abstract class PushSemverTagTask : DefaultTask() {
    + 
    +     init {
    +         group = "semver"
    +     }
    + 
    +     @get:Internal internal abstract val tagPrefixProperty: Property<String>
    + 
    +     @get:Internal internal abstract val projectTagPrefix: Property<String>
    + 
    +     @get:Internal internal abstract val version: Property<String>
    + 
    +     @get:Internal internal abstract val gitTagBuildService: Property<GitBuildService>
    + 
    +     @TaskAction
    +     public fun run() {
    +         gitTagBuildService
    +             .get()
    +             .pushTag(tagPrefixProperty.get(), projectTagPrefix.get(), version.get())
    +     }
    + 
    +     public companion object {
    +         public const val TaskName: String = "pushSemverTag"
    + 
    +         internal fun register(project: Project, gitTagBuildService: Provider<GitBuildService>) {
    +             project.tasks.register<PushSemverTagTask>(TaskName).configure { task ->
    +                 task.tagPrefixProperty.set(project.tagPrefixProperty)
    +                 task.projectTagPrefix.set(project.projectTagPrefix)
    +                 task.version.set(project.version.toString())
    +                 task.gitTagBuildService.set(gitTagBuildService)
    +                 task.usesService(gitTagBuildService)
    +             }
    +         }
    +     }
    + }
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-8/sources/source-4.html b/reports-generated/code-coverage/ns-8/sources/source-4.html new file mode 100644 index 00000000..0035aaeb --- /dev/null +++ b/reports-generated/code-coverage/ns-8/sources/source-4.html @@ -0,0 +1,489 @@ + + + + + + + Coverage Report > WriteSemverTask + + + + + + +
    + + +

    Coverage Summary for Class: WriteSemverTask (com.javiersc.semver.project.gradle.plugin.tasks)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class + Method, % + + Branch, % + + Line, % + + Instruction, % +
    WriteSemverTask + + 0% + + + (0/3) + + + + + 0% + + + (0/18) + + + + 0% + + + (0/91) + +
    WriteSemverTask$Companion + + 100% + + + (1/1) + + + + + 100% + + + (10/10) + + + + 100% + + + (148/148) + +
    WriteSemverTask$Companion$inlined$sam$i$org_gradle_api_specs_Spec$0 +
    WriteSemverTask$Companion$register$$inlined$maybeRegisterLazily$1 +
    WriteSemverTask$Companion$register$$inlined$maybeRegisterLazily$2 +
    WriteSemverTask$Companion$register$$inlined$maybeRegisterLazily$3 +
    WriteSemverTask$Companion$register$$inlined$maybeRegisterLazily$4 +
    WriteSemverTask$Companion$register$$inlined$maybeRegisterLazily$5 +
    WriteSemverTask$Companion$register$$inlined$maybeRegisterLazily$6 +
    WriteSemverTask$Companion$register$$inlined$namedLazily$1 +
    WriteSemverTask$Companion$register$1 + + 0% + + + (0/1) + + + + + 0% + + + (0/2) + + + + 0% + + + (0/13) + +
    WriteSemverTask$Companion$register$2 + + 0% + + + (0/1) + + + + + 0% + + + (0/1) + + + + 0% + + + (0/12) + +
    WriteSemverTask$Companion$register$3 + + 0% + + + (0/1) + + + + + 0% + + + (0/1) + + + + 0% + + + (0/12) + +
    WriteSemverTask$Companion$register$4 + + 0% + + + (0/1) + + + + + 0% + + + (0/1) + + + + 0% + + + (0/12) + +
    WriteSemverTask$Companion$register$5 + + 0% + + + (0/1) + + + + + 0% + + + (0/1) + + + + 0% + + + (0/12) + +
    WriteSemverTask$Companion$register$6 + + 0% + + + (0/1) + + + + + 0% + + + (0/1) + + + + 0% + + + (0/12) + +
    WriteSemverTask$Companion$register$7 + + 0% + + + (0/1) + + + + + 0% + + + (0/1) + + + + 0% + + + (0/12) + +
    Total + + 9.1% + + + (1/11) + + + + + 27.8% + + + (10/36) + + + + 45.7% + + + (148/324) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin.tasks
    + 
    + import com.javiersc.gradle.tasks.extensions.maybeRegisterLazily
    + import com.javiersc.gradle.tasks.extensions.namedLazily
    + import com.javiersc.semver.project.gradle.plugin.internal.projectTagPrefix
    + import javax.inject.Inject
    + import org.gradle.api.DefaultTask
    + import org.gradle.api.Project
    + import org.gradle.api.Task
    + import org.gradle.api.file.ProjectLayout
    + import org.gradle.api.file.RegularFileProperty
    + import org.gradle.api.model.ObjectFactory
    + import org.gradle.api.provider.Property
    + import org.gradle.api.tasks.CacheableTask
    + import org.gradle.api.tasks.Input
    + import org.gradle.api.tasks.OutputFile
    + import org.gradle.api.tasks.TaskAction
    + import org.gradle.api.tasks.TaskProvider
    + import org.gradle.api.tasks.testing.Test
    + import org.gradle.jvm.tasks.Jar
    + import org.gradle.kotlin.dsl.register
    + import org.gradle.kotlin.dsl.withType
    + import org.gradle.language.base.plugins.LifecycleBasePlugin.ASSEMBLE_TASK_NAME
    + import org.gradle.language.base.plugins.LifecycleBasePlugin.BUILD_TASK_NAME
    + import org.gradle.language.base.plugins.LifecycleBasePlugin.CHECK_TASK_NAME
    + 
    + @CacheableTask
    + public abstract class WriteSemverTask
    + @Inject
    + constructor(
    +     objects: ObjectFactory,
    +     layout: ProjectLayout,
    + ) : DefaultTask() {
    + 
    +     init {
    +         group = "semver"
    +     }
    + 
    +     @get:Input public abstract val tagPrefix: Property<String>
    + 
    +     @get:Input public abstract val version: Property<String>
    + 
    +     @OutputFile
    +     public val semverFile: RegularFileProperty =
    +         objects.fileProperty().convention(layout.buildDirectory.file("semver/version.txt"))
    + 
    +     @TaskAction
    +     public fun run() {
    +         val semver: String = version.get()
    +         val prefix: String = tagPrefix.get()
    +         val semverWithPrefix = "$prefix$semver"
    + 
    +         semverFile.get().asFile.apply {
    +             parentFile.mkdirs()
    +             createNewFile()
    +             writeText(
    +                 """
    +                     |$semver
    +                     |$semverWithPrefix
    +                     |
    +                 """
    +                     .trimMargin()
    +             )
    +         }
    +     }
    + 
    +     public companion object {
    +         public const val TaskName: String = "writeSemver"
    + 
    +         internal fun register(project: Project): TaskProvider<WriteSemverTask> {
    +             val writeSemverTask: TaskProvider<WriteSemverTask> =
    +                 project.tasks.register<WriteSemverTask>(TaskName)
    + 
    +             writeSemverTask.configure { task ->
    +                 task.tagPrefix.set(project.projectTagPrefix)
    +                 task.version.set(project.version.toString())
    +             }
    + 
    +             project.tasks.namedLazily<CreateSemverTagTask>(CreateSemverTagTask.TaskName) { task ->
    +                 task.dependsOn(writeSemverTask)
    +             }
    +             project.tasks.maybeRegisterLazily<Task>(ASSEMBLE_TASK_NAME) { task ->
    +                 task.dependsOn(writeSemverTask)
    +             }
    +             project.tasks.maybeRegisterLazily<Task>(BUILD_TASK_NAME) { task ->
    +                 task.dependsOn(writeSemverTask)
    +             }
    +             project.tasks.maybeRegisterLazily<Task>(CHECK_TASK_NAME) { task ->
    +                 task.dependsOn(writeSemverTask)
    +             }
    +             project.tasks.withType<Jar>().configureEach { task -> task.dependsOn(writeSemverTask) }
    +             project.tasks.withType<Test>().configureEach { task -> task.dependsOn(writeSemverTask) }
    + 
    +             return writeSemverTask
    +         }
    +     }
    + }
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-9/index.html b/reports-generated/code-coverage/ns-9/index.html new file mode 100644 index 00000000..41d74f57 --- /dev/null +++ b/reports-generated/code-coverage/ns-9/index.html @@ -0,0 +1,233 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.valuesources + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.valuesources

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.valuesources + + 75% + + + (3/4) + + + + 50% + + + (3/6) + + + + 4.5% + + + (1/22) + + + + 29.5% + + + (13/44) + + + + 36.9% + + + (132/358) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    VersionValueSource + + 66.7% + + + (2/3) + + + + 40% + + + (2/5) + + + + 5.6% + + + (1/18) + + + + 28.6% + + + (12/42) + + + + 36% + + + (121/336) + +
    VersionValueSourceKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 0% + + + (0/4) + + + + 50% + + + (1/2) + + + + 50% + + + (11/22) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-9/index_SORT_BY_BLOCK.html b/reports-generated/code-coverage/ns-9/index_SORT_BY_BLOCK.html new file mode 100644 index 00000000..d8410191 --- /dev/null +++ b/reports-generated/code-coverage/ns-9/index_SORT_BY_BLOCK.html @@ -0,0 +1,233 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.valuesources + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.valuesources

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.valuesources + + 75% + + + (3/4) + + + + 50% + + + (3/6) + + + + 4.5% + + + (1/22) + + + + 29.5% + + + (13/44) + + + + 36.9% + + + (132/358) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    VersionValueSourceKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 0% + + + (0/4) + + + + 50% + + + (1/2) + + + + 50% + + + (11/22) + +
    VersionValueSource + + 66.7% + + + (2/3) + + + + 40% + + + (2/5) + + + + 5.6% + + + (1/18) + + + + 28.6% + + + (12/42) + + + + 36% + + + (121/336) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-9/index_SORT_BY_BLOCK_DESC.html b/reports-generated/code-coverage/ns-9/index_SORT_BY_BLOCK_DESC.html new file mode 100644 index 00000000..bdabd095 --- /dev/null +++ b/reports-generated/code-coverage/ns-9/index_SORT_BY_BLOCK_DESC.html @@ -0,0 +1,233 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.valuesources + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.valuesources

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.valuesources + + 75% + + + (3/4) + + + + 50% + + + (3/6) + + + + 4.5% + + + (1/22) + + + + 29.5% + + + (13/44) + + + + 36.9% + + + (132/358) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    VersionValueSource + + 66.7% + + + (2/3) + + + + 40% + + + (2/5) + + + + 5.6% + + + (1/18) + + + + 28.6% + + + (12/42) + + + + 36% + + + (121/336) + +
    VersionValueSourceKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 0% + + + (0/4) + + + + 50% + + + (1/2) + + + + 50% + + + (11/22) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-9/index_SORT_BY_CLASS.html b/reports-generated/code-coverage/ns-9/index_SORT_BY_CLASS.html new file mode 100644 index 00000000..4f787003 --- /dev/null +++ b/reports-generated/code-coverage/ns-9/index_SORT_BY_CLASS.html @@ -0,0 +1,233 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.valuesources + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.valuesources

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.valuesources + + 75% + + + (3/4) + + + + 50% + + + (3/6) + + + + 4.5% + + + (1/22) + + + + 29.5% + + + (13/44) + + + + 36.9% + + + (132/358) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    VersionValueSource + + 66.7% + + + (2/3) + + + + 40% + + + (2/5) + + + + 5.6% + + + (1/18) + + + + 28.6% + + + (12/42) + + + + 36% + + + (121/336) + +
    VersionValueSourceKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 0% + + + (0/4) + + + + 50% + + + (1/2) + + + + 50% + + + (11/22) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-9/index_SORT_BY_CLASS_DESC.html b/reports-generated/code-coverage/ns-9/index_SORT_BY_CLASS_DESC.html new file mode 100644 index 00000000..8ab57392 --- /dev/null +++ b/reports-generated/code-coverage/ns-9/index_SORT_BY_CLASS_DESC.html @@ -0,0 +1,233 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.valuesources + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.valuesources

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.valuesources + + 75% + + + (3/4) + + + + 50% + + + (3/6) + + + + 4.5% + + + (1/22) + + + + 29.5% + + + (13/44) + + + + 36.9% + + + (132/358) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    VersionValueSourceKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 0% + + + (0/4) + + + + 50% + + + (1/2) + + + + 50% + + + (11/22) + +
    VersionValueSource + + 66.7% + + + (2/3) + + + + 40% + + + (2/5) + + + + 5.6% + + + (1/18) + + + + 28.6% + + + (12/42) + + + + 36% + + + (121/336) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-9/index_SORT_BY_LINE.html b/reports-generated/code-coverage/ns-9/index_SORT_BY_LINE.html new file mode 100644 index 00000000..14803086 --- /dev/null +++ b/reports-generated/code-coverage/ns-9/index_SORT_BY_LINE.html @@ -0,0 +1,233 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.valuesources + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.valuesources

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.valuesources + + 75% + + + (3/4) + + + + 50% + + + (3/6) + + + + 4.5% + + + (1/22) + + + + 29.5% + + + (13/44) + + + + 36.9% + + + (132/358) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    VersionValueSource + + 66.7% + + + (2/3) + + + + 40% + + + (2/5) + + + + 5.6% + + + (1/18) + + + + 28.6% + + + (12/42) + + + + 36% + + + (121/336) + +
    VersionValueSourceKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 0% + + + (0/4) + + + + 50% + + + (1/2) + + + + 50% + + + (11/22) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-9/index_SORT_BY_LINE_DESC.html b/reports-generated/code-coverage/ns-9/index_SORT_BY_LINE_DESC.html new file mode 100644 index 00000000..f8c086cf --- /dev/null +++ b/reports-generated/code-coverage/ns-9/index_SORT_BY_LINE_DESC.html @@ -0,0 +1,233 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.valuesources + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.valuesources

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.valuesources + + 75% + + + (3/4) + + + + 50% + + + (3/6) + + + + 4.5% + + + (1/22) + + + + 29.5% + + + (13/44) + + + + 36.9% + + + (132/358) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    VersionValueSourceKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 0% + + + (0/4) + + + + 50% + + + (1/2) + + + + 50% + + + (11/22) + +
    VersionValueSource + + 66.7% + + + (2/3) + + + + 40% + + + (2/5) + + + + 5.6% + + + (1/18) + + + + 28.6% + + + (12/42) + + + + 36% + + + (121/336) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-9/index_SORT_BY_METHOD.html b/reports-generated/code-coverage/ns-9/index_SORT_BY_METHOD.html new file mode 100644 index 00000000..8287d747 --- /dev/null +++ b/reports-generated/code-coverage/ns-9/index_SORT_BY_METHOD.html @@ -0,0 +1,233 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.valuesources + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.valuesources

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.valuesources + + 75% + + + (3/4) + + + + 50% + + + (3/6) + + + + 4.5% + + + (1/22) + + + + 29.5% + + + (13/44) + + + + 36.9% + + + (132/358) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    VersionValueSource + + 66.7% + + + (2/3) + + + + 40% + + + (2/5) + + + + 5.6% + + + (1/18) + + + + 28.6% + + + (12/42) + + + + 36% + + + (121/336) + +
    VersionValueSourceKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 0% + + + (0/4) + + + + 50% + + + (1/2) + + + + 50% + + + (11/22) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-9/index_SORT_BY_METHOD_DESC.html b/reports-generated/code-coverage/ns-9/index_SORT_BY_METHOD_DESC.html new file mode 100644 index 00000000..e06d8ad3 --- /dev/null +++ b/reports-generated/code-coverage/ns-9/index_SORT_BY_METHOD_DESC.html @@ -0,0 +1,233 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.valuesources + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.valuesources

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.valuesources + + 75% + + + (3/4) + + + + 50% + + + (3/6) + + + + 4.5% + + + (1/22) + + + + 29.5% + + + (13/44) + + + + 36.9% + + + (132/358) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    VersionValueSourceKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 0% + + + (0/4) + + + + 50% + + + (1/2) + + + + 50% + + + (11/22) + +
    VersionValueSource + + 66.7% + + + (2/3) + + + + 40% + + + (2/5) + + + + 5.6% + + + (1/18) + + + + 28.6% + + + (12/42) + + + + 36% + + + (121/336) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-9/index_SORT_BY_NAME_DESC.html b/reports-generated/code-coverage/ns-9/index_SORT_BY_NAME_DESC.html new file mode 100644 index 00000000..32511b60 --- /dev/null +++ b/reports-generated/code-coverage/ns-9/index_SORT_BY_NAME_DESC.html @@ -0,0 +1,233 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.valuesources + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.valuesources

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.valuesources + + 75% + + + (3/4) + + + + 50% + + + (3/6) + + + + 4.5% + + + (1/22) + + + + 29.5% + + + (13/44) + + + + 36.9% + + + (132/358) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    VersionValueSourceKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 0% + + + (0/4) + + + + 50% + + + (1/2) + + + + 50% + + + (11/22) + +
    VersionValueSource + + 66.7% + + + (2/3) + + + + 40% + + + (2/5) + + + + 5.6% + + + (1/18) + + + + 28.6% + + + (12/42) + + + + 36% + + + (121/336) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-9/index_SORT_BY_STATEMENT.html b/reports-generated/code-coverage/ns-9/index_SORT_BY_STATEMENT.html new file mode 100644 index 00000000..d1c1ec3e --- /dev/null +++ b/reports-generated/code-coverage/ns-9/index_SORT_BY_STATEMENT.html @@ -0,0 +1,233 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.valuesources + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.valuesources

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.valuesources + + 75% + + + (3/4) + + + + 50% + + + (3/6) + + + + 4.5% + + + (1/22) + + + + 29.5% + + + (13/44) + + + + 36.9% + + + (132/358) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    VersionValueSource + + 66.7% + + + (2/3) + + + + 40% + + + (2/5) + + + + 5.6% + + + (1/18) + + + + 28.6% + + + (12/42) + + + + 36% + + + (121/336) + +
    VersionValueSourceKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 0% + + + (0/4) + + + + 50% + + + (1/2) + + + + 50% + + + (11/22) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-9/index_SORT_BY_STATEMENT_DESC.html b/reports-generated/code-coverage/ns-9/index_SORT_BY_STATEMENT_DESC.html new file mode 100644 index 00000000..ff8d7a93 --- /dev/null +++ b/reports-generated/code-coverage/ns-9/index_SORT_BY_STATEMENT_DESC.html @@ -0,0 +1,233 @@ + + + + + Coverage Report > com.javiersc.semver.project.gradle.plugin.valuesources + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.project.gradle.plugin.valuesources

    + + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.project.gradle.plugin.valuesources + + 75% + + + (3/4) + + + + 50% + + + (3/6) + + + + 4.5% + + + (1/22) + + + + 29.5% + + + (13/44) + + + + 36.9% + + + (132/358) + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    VersionValueSourceKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 0% + + + (0/4) + + + + 50% + + + (1/2) + + + + 50% + + + (11/22) + +
    VersionValueSource + + 66.7% + + + (2/3) + + + + 40% + + + (2/5) + + + + 5.6% + + + (1/18) + + + + 28.6% + + + (12/42) + + + + 36% + + + (121/336) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-9/sources/source-1.html b/reports-generated/code-coverage/ns-9/sources/source-1.html new file mode 100644 index 00000000..d12353a7 --- /dev/null +++ b/reports-generated/code-coverage/ns-9/sources/source-1.html @@ -0,0 +1,320 @@ + + + + + + + Coverage Report > VersionValueSource + + + + + + +
    + + +

    Coverage Summary for Class: VersionValueSource (com.javiersc.semver.project.gradle.plugin.valuesources)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class + Method, % + + Branch, % + + Line, % + + Instruction, % +
    VersionValueSource + + 0% + + + (0/3) + + + + 0% + + + (0/16) + + + + 0% + + + (0/30) + + + + 0% + + + (0/214) + +
    VersionValueSource$Companion + + 100% + + + (1/1) + + + + + 100% + + + (1/1) + + + + 100% + + + (21/21) + +
    VersionValueSource$Companion$register$1 + + 100% + + + (1/1) + + + + 50% + + + (1/2) + + + + 100% + + + (11/11) + + + + 99% + + + (100/101) + +
    VersionValueSource$Params +
    Total + + 40% + + + (2/5) + + + + 5.6% + + + (1/18) + + + + 28.6% + + + (12/42) + + + + 36% + + + (121/336) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin.valuesources
    + 
    + import com.javiersc.semver.Version
    + import com.javiersc.semver.project.gradle.plugin.internal.calculatedVersion
    + import com.javiersc.semver.project.gradle.plugin.internal.checkCleanProperty
    + import com.javiersc.semver.project.gradle.plugin.internal.checkVersionIsHigherOrSame
    + import com.javiersc.semver.project.gradle.plugin.internal.commitsMaxCount
    + import com.javiersc.semver.project.gradle.plugin.internal.git.GitCache
    + import com.javiersc.semver.project.gradle.plugin.internal.git.GitRef
    + import com.javiersc.semver.project.gradle.plugin.internal.projectTagPrefix
    + import com.javiersc.semver.project.gradle.plugin.internal.scopeProperty
    + import com.javiersc.semver.project.gradle.plugin.internal.stageProperty
    + import com.javiersc.semver.project.gradle.plugin.internal.tagPrefixProperty
    + import com.javiersc.semver.project.gradle.plugin.semverExtension
    + import com.javiersc.semver.project.gradle.plugin.tasks.CreateSemverTagTask
    + import com.javiersc.semver.project.gradle.plugin.tasks.PushSemverTagTask
    + import java.io.File
    + import org.gradle.api.Project
    + import org.gradle.api.provider.Property
    + import org.gradle.api.provider.Provider
    + import org.gradle.api.provider.ValueSource
    + import org.gradle.api.provider.ValueSourceParameters
    + import org.gradle.kotlin.dsl.of
    + 
    + internal abstract class VersionValueSource : ValueSource<String, VersionValueSource.Params> {
    + 
    +     override fun obtain(): String =
    +         with(parameters) {
    +             val isSamePrefix: Boolean = tagPrefixProperty.get() == projectTagPrefix.get()
    + 
    +             fun cache() =
    +                 GitCache(
    +                     gitDir = parameters.gitDir.get(),
    +                     maxCount = parameters.commitsMaxCount,
    +                 )
    + 
    +             val lastSemver: Version = cache().lastVersionInCurrentBranch(projectTagPrefix.get())
    +             val lastVersionInCurrentBranch =
    +                 cache().versionsInCurrentBranch(projectTagPrefix.get()).map(Version::toString)
    + 
    +             val lastVersionCommitInCurrentBranch =
    +                 cache().lastVersionCommitInCurrentBranch(projectTagPrefix.get())?.hash
    + 
    +             val version: String =
    +                 calculatedVersion(
    +                     stageProperty = stageProperty.orNull.takeIf { isSamePrefix },
    +                     scopeProperty = scopeProperty.orNull.takeIf { isSamePrefix },
    +                     isCreatingSemverTag = creatingSemverTag.get().takeIf { isSamePrefix } ?: false,
    +                     lastSemverMajorInCurrentBranch = lastSemver.major,
    +                     lastSemverMinorInCurrentBranch = lastSemver.minor,
    +                     lastSemverPatchInCurrentBranch = lastSemver.patch,
    +                     lastSemverStageInCurrentBranch = lastSemver.stage?.name,
    +                     lastSemverNumInCurrentBranch = lastSemver.stage?.num,
    +                     versionTagsInCurrentBranch = lastVersionInCurrentBranch,
    +                     clean = cache().isClean,
    +                     checkClean = checkClean.get(),
    +                     lastCommitInCurrentBranch = cache().lastCommitInCurrentBranch?.hash,
    +                     commitsInCurrentBranch =
    +                         cache().commitsInCurrentBranch.map(GitRef.Commit::hash),
    +                     headCommit = cache().headCommit.commit.hash,
    +                     lastVersionCommitInCurrentBranch = lastVersionCommitInCurrentBranch,
    +                 )
    + 
    +             checkVersionIsHigherOrSame(version, lastSemver)
    + 
    +             version
    +         }
    + 
    +     internal interface Params : ValueSourceParameters {
    +         val gitDir: Property<File>
    +         val commitsMaxCount: Property<Int>
    +         val tagPrefixProperty: Property<String>
    +         val projectTagPrefix: Property<String>
    +         val stageProperty: Property<String?>
    +         val scopeProperty: Property<String?>
    +         val creatingSemverTag: Property<Boolean>
    +         val checkClean: Property<Boolean>
    +     }
    + 
    +     companion object {
    + 
    +         fun register(project: Project): Provider<String> =
    +             project.providers.of(VersionValueSource::class) { valueSourceSpec ->
    +                 val gitDir = project.provider { project.semverExtension.gitDir.get().asFile }
    +                 valueSourceSpec.parameters.gitDir.set(gitDir)
    +                 val commitsMaxCount: Int =
    +                     project.commitsMaxCount.orNull ?: project.semverExtension.commitsMaxCount.get()
    +                 valueSourceSpec.parameters.commitsMaxCount.set(commitsMaxCount)
    +                 valueSourceSpec.parameters.projectTagPrefix.set(project.projectTagPrefix.get())
    +                 valueSourceSpec.parameters.tagPrefixProperty.set(project.tagPrefixProperty.get())
    +                 valueSourceSpec.parameters.stageProperty.set(project.stageProperty.orNull)
    +                 valueSourceSpec.parameters.scopeProperty.set(project.scopeProperty.orNull)
    +                 valueSourceSpec.parameters.creatingSemverTag.set(project.isCreatingSemverTag)
    +                 valueSourceSpec.parameters.checkClean.set(project.checkCleanProperty.get())
    +             }
    +     }
    + }
    + 
    + private val Project.isCreatingSemverTag: Boolean
    +     get() =
    +         gradle.startParameter.taskNames.any { taskName: String ->
    +             taskName == CreateSemverTagTask.TaskName || taskName == PushSemverTagTask.TaskName
    +         }
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-9/sources/source-2.html b/reports-generated/code-coverage/ns-9/sources/source-2.html new file mode 100644 index 00000000..12acc5d0 --- /dev/null +++ b/reports-generated/code-coverage/ns-9/sources/source-2.html @@ -0,0 +1,230 @@ + + + + + + + Coverage Report > VersionValueSourceKt + + + + + + +
    + + +

    Coverage Summary for Class: VersionValueSourceKt (com.javiersc.semver.project.gradle.plugin.valuesources)

    + + + + + + + + + + + + + + + + + + + +
    Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    VersionValueSourceKt + + 100% + + + (1/1) + + + + 100% + + + (1/1) + + + + 0% + + + (0/4) + + + + 50% + + + (1/2) + + + + 50% + + + (11/22) + +
    + +
    +
    + + +
    + package com.javiersc.semver.project.gradle.plugin.valuesources
    + 
    + import com.javiersc.semver.Version
    + import com.javiersc.semver.project.gradle.plugin.internal.calculatedVersion
    + import com.javiersc.semver.project.gradle.plugin.internal.checkCleanProperty
    + import com.javiersc.semver.project.gradle.plugin.internal.checkVersionIsHigherOrSame
    + import com.javiersc.semver.project.gradle.plugin.internal.commitsMaxCount
    + import com.javiersc.semver.project.gradle.plugin.internal.git.GitCache
    + import com.javiersc.semver.project.gradle.plugin.internal.git.GitRef
    + import com.javiersc.semver.project.gradle.plugin.internal.projectTagPrefix
    + import com.javiersc.semver.project.gradle.plugin.internal.scopeProperty
    + import com.javiersc.semver.project.gradle.plugin.internal.stageProperty
    + import com.javiersc.semver.project.gradle.plugin.internal.tagPrefixProperty
    + import com.javiersc.semver.project.gradle.plugin.semverExtension
    + import com.javiersc.semver.project.gradle.plugin.tasks.CreateSemverTagTask
    + import com.javiersc.semver.project.gradle.plugin.tasks.PushSemverTagTask
    + import java.io.File
    + import org.gradle.api.Project
    + import org.gradle.api.provider.Property
    + import org.gradle.api.provider.Provider
    + import org.gradle.api.provider.ValueSource
    + import org.gradle.api.provider.ValueSourceParameters
    + import org.gradle.kotlin.dsl.of
    + 
    + internal abstract class VersionValueSource : ValueSource<String, VersionValueSource.Params> {
    + 
    +     override fun obtain(): String =
    +         with(parameters) {
    +             val isSamePrefix: Boolean = tagPrefixProperty.get() == projectTagPrefix.get()
    + 
    +             fun cache() =
    +                 GitCache(
    +                     gitDir = parameters.gitDir.get(),
    +                     maxCount = parameters.commitsMaxCount,
    +                 )
    + 
    +             val lastSemver: Version = cache().lastVersionInCurrentBranch(projectTagPrefix.get())
    +             val lastVersionInCurrentBranch =
    +                 cache().versionsInCurrentBranch(projectTagPrefix.get()).map(Version::toString)
    + 
    +             val lastVersionCommitInCurrentBranch =
    +                 cache().lastVersionCommitInCurrentBranch(projectTagPrefix.get())?.hash
    + 
    +             val version: String =
    +                 calculatedVersion(
    +                     stageProperty = stageProperty.orNull.takeIf { isSamePrefix },
    +                     scopeProperty = scopeProperty.orNull.takeIf { isSamePrefix },
    +                     isCreatingSemverTag = creatingSemverTag.get().takeIf { isSamePrefix } ?: false,
    +                     lastSemverMajorInCurrentBranch = lastSemver.major,
    +                     lastSemverMinorInCurrentBranch = lastSemver.minor,
    +                     lastSemverPatchInCurrentBranch = lastSemver.patch,
    +                     lastSemverStageInCurrentBranch = lastSemver.stage?.name,
    +                     lastSemverNumInCurrentBranch = lastSemver.stage?.num,
    +                     versionTagsInCurrentBranch = lastVersionInCurrentBranch,
    +                     clean = cache().isClean,
    +                     checkClean = checkClean.get(),
    +                     lastCommitInCurrentBranch = cache().lastCommitInCurrentBranch?.hash,
    +                     commitsInCurrentBranch =
    +                         cache().commitsInCurrentBranch.map(GitRef.Commit::hash),
    +                     headCommit = cache().headCommit.commit.hash,
    +                     lastVersionCommitInCurrentBranch = lastVersionCommitInCurrentBranch,
    +                 )
    + 
    +             checkVersionIsHigherOrSame(version, lastSemver)
    + 
    +             version
    +         }
    + 
    +     internal interface Params : ValueSourceParameters {
    +         val gitDir: Property<File>
    +         val commitsMaxCount: Property<Int>
    +         val tagPrefixProperty: Property<String>
    +         val projectTagPrefix: Property<String>
    +         val stageProperty: Property<String?>
    +         val scopeProperty: Property<String?>
    +         val creatingSemverTag: Property<Boolean>
    +         val checkClean: Property<Boolean>
    +     }
    + 
    +     companion object {
    + 
    +         fun register(project: Project): Provider<String> =
    +             project.providers.of(VersionValueSource::class) { valueSourceSpec ->
    +                 val gitDir = project.provider { project.semverExtension.gitDir.get().asFile }
    +                 valueSourceSpec.parameters.gitDir.set(gitDir)
    +                 val commitsMaxCount: Int =
    +                     project.commitsMaxCount.orNull ?: project.semverExtension.commitsMaxCount.get()
    +                 valueSourceSpec.parameters.commitsMaxCount.set(commitsMaxCount)
    +                 valueSourceSpec.parameters.projectTagPrefix.set(project.projectTagPrefix.get())
    +                 valueSourceSpec.parameters.tagPrefixProperty.set(project.tagPrefixProperty.get())
    +                 valueSourceSpec.parameters.stageProperty.set(project.stageProperty.orNull)
    +                 valueSourceSpec.parameters.scopeProperty.set(project.scopeProperty.orNull)
    +                 valueSourceSpec.parameters.creatingSemverTag.set(project.isCreatingSemverTag)
    +                 valueSourceSpec.parameters.checkClean.set(project.checkCleanProperty.get())
    +             }
    +     }
    + }
    + 
    + private val Project.isCreatingSemverTag: Boolean
    +     get() =
    +         gradle.startParameter.taskNames.any { taskName: String ->
    +             taskName == CreateSemverTagTask.TaskName || taskName == PushSemverTagTask.TaskName
    +         }
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-a/index.html b/reports-generated/code-coverage/ns-a/index.html new file mode 100644 index 00000000..dd60ceff --- /dev/null +++ b/reports-generated/code-coverage/ns-a/index.html @@ -0,0 +1,176 @@ + + + + + Coverage Report > com.javiersc.semver.settings.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.settings.gradle.plugin

    + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.settings.gradle.plugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverSettingsPlugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-a/index_SORT_BY_BLOCK.html b/reports-generated/code-coverage/ns-a/index_SORT_BY_BLOCK.html new file mode 100644 index 00000000..99164444 --- /dev/null +++ b/reports-generated/code-coverage/ns-a/index_SORT_BY_BLOCK.html @@ -0,0 +1,176 @@ + + + + + Coverage Report > com.javiersc.semver.settings.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.settings.gradle.plugin

    + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.settings.gradle.plugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverSettingsPlugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-a/index_SORT_BY_BLOCK_DESC.html b/reports-generated/code-coverage/ns-a/index_SORT_BY_BLOCK_DESC.html new file mode 100644 index 00000000..09719e70 --- /dev/null +++ b/reports-generated/code-coverage/ns-a/index_SORT_BY_BLOCK_DESC.html @@ -0,0 +1,176 @@ + + + + + Coverage Report > com.javiersc.semver.settings.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.settings.gradle.plugin

    + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.settings.gradle.plugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverSettingsPlugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-a/index_SORT_BY_CLASS.html b/reports-generated/code-coverage/ns-a/index_SORT_BY_CLASS.html new file mode 100644 index 00000000..d3803ee5 --- /dev/null +++ b/reports-generated/code-coverage/ns-a/index_SORT_BY_CLASS.html @@ -0,0 +1,176 @@ + + + + + Coverage Report > com.javiersc.semver.settings.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.settings.gradle.plugin

    + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.settings.gradle.plugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverSettingsPlugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-a/index_SORT_BY_CLASS_DESC.html b/reports-generated/code-coverage/ns-a/index_SORT_BY_CLASS_DESC.html new file mode 100644 index 00000000..d8e6d01a --- /dev/null +++ b/reports-generated/code-coverage/ns-a/index_SORT_BY_CLASS_DESC.html @@ -0,0 +1,176 @@ + + + + + Coverage Report > com.javiersc.semver.settings.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.settings.gradle.plugin

    + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.settings.gradle.plugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverSettingsPlugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-a/index_SORT_BY_LINE.html b/reports-generated/code-coverage/ns-a/index_SORT_BY_LINE.html new file mode 100644 index 00000000..1fc7f897 --- /dev/null +++ b/reports-generated/code-coverage/ns-a/index_SORT_BY_LINE.html @@ -0,0 +1,176 @@ + + + + + Coverage Report > com.javiersc.semver.settings.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.settings.gradle.plugin

    + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.settings.gradle.plugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverSettingsPlugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-a/index_SORT_BY_LINE_DESC.html b/reports-generated/code-coverage/ns-a/index_SORT_BY_LINE_DESC.html new file mode 100644 index 00000000..816aa2d3 --- /dev/null +++ b/reports-generated/code-coverage/ns-a/index_SORT_BY_LINE_DESC.html @@ -0,0 +1,176 @@ + + + + + Coverage Report > com.javiersc.semver.settings.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.settings.gradle.plugin

    + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.settings.gradle.plugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverSettingsPlugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-a/index_SORT_BY_METHOD.html b/reports-generated/code-coverage/ns-a/index_SORT_BY_METHOD.html new file mode 100644 index 00000000..44d3c364 --- /dev/null +++ b/reports-generated/code-coverage/ns-a/index_SORT_BY_METHOD.html @@ -0,0 +1,176 @@ + + + + + Coverage Report > com.javiersc.semver.settings.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.settings.gradle.plugin

    + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.settings.gradle.plugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverSettingsPlugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-a/index_SORT_BY_METHOD_DESC.html b/reports-generated/code-coverage/ns-a/index_SORT_BY_METHOD_DESC.html new file mode 100644 index 00000000..24f8b214 --- /dev/null +++ b/reports-generated/code-coverage/ns-a/index_SORT_BY_METHOD_DESC.html @@ -0,0 +1,176 @@ + + + + + Coverage Report > com.javiersc.semver.settings.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.settings.gradle.plugin

    + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.settings.gradle.plugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverSettingsPlugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-a/index_SORT_BY_NAME_DESC.html b/reports-generated/code-coverage/ns-a/index_SORT_BY_NAME_DESC.html new file mode 100644 index 00000000..d13972fb --- /dev/null +++ b/reports-generated/code-coverage/ns-a/index_SORT_BY_NAME_DESC.html @@ -0,0 +1,176 @@ + + + + + Coverage Report > com.javiersc.semver.settings.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.settings.gradle.plugin

    + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.settings.gradle.plugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverSettingsPlugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-a/index_SORT_BY_STATEMENT.html b/reports-generated/code-coverage/ns-a/index_SORT_BY_STATEMENT.html new file mode 100644 index 00000000..bfccc569 --- /dev/null +++ b/reports-generated/code-coverage/ns-a/index_SORT_BY_STATEMENT.html @@ -0,0 +1,176 @@ + + + + + Coverage Report > com.javiersc.semver.settings.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.settings.gradle.plugin

    + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.settings.gradle.plugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverSettingsPlugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-a/index_SORT_BY_STATEMENT_DESC.html b/reports-generated/code-coverage/ns-a/index_SORT_BY_STATEMENT_DESC.html new file mode 100644 index 00000000..536d711b --- /dev/null +++ b/reports-generated/code-coverage/ns-a/index_SORT_BY_STATEMENT_DESC.html @@ -0,0 +1,176 @@ + + + + + Coverage Report > com.javiersc.semver.settings.gradle.plugin + + + + + + +
    + + + +

    Coverage Summary for Package: com.javiersc.semver.settings.gradle.plugin

    + + + + + + + + + + + + + + + + +
    Package + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    com.javiersc.semver.settings.gradle.plugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    +Class + Class, % + + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverSettingsPlugin + + 0% + + + (0/2) + + + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    + +
    + + + + + + diff --git a/reports-generated/code-coverage/ns-a/sources/source-1.html b/reports-generated/code-coverage/ns-a/sources/source-1.html new file mode 100644 index 00000000..72d256bd --- /dev/null +++ b/reports-generated/code-coverage/ns-a/sources/source-1.html @@ -0,0 +1,179 @@ + + + + + + + Coverage Report > SemverSettingsPlugin + + + + + + +
    + + +

    Coverage Summary for Class: SemverSettingsPlugin (com.javiersc.semver.settings.gradle.plugin)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class + Method, % + + Branch, % + + Line, % + + Instruction, % +
    SemverSettingsPlugin + + 0% + + + (0/2) + + + + + 0% + + + (0/2) + + + + 0% + + + (0/12) + +
    SemverSettingsPlugin$apply$1 + + 0% + + + (0/1) + + + + + 0% + + + (0/1) + + + + 0% + + + (0/10) + +
    Total + + 0% + + + (0/3) + + + + + 0% + + + (0/3) + + + + 0% + + + (0/22) + +
    + +
    +
    + + +
    + package com.javiersc.semver.settings.gradle.plugin
    + 
    + import com.javiersc.semver.project.gradle.plugin.SemverProjectPlugin
    + import org.gradle.api.Plugin
    + import org.gradle.api.initialization.Settings
    + import org.gradle.kotlin.dsl.apply
    + 
    + public class SemverSettingsPlugin : Plugin<Settings> {
    + 
    +     override fun apply(target: Settings) {
    +         target.gradle.beforeProject { project ->
    +             project.pluginManager.apply(SemverProjectPlugin::class)
    +         }
    +     }
    + }
    +
    +
    +
    + + + + + + diff --git a/reports-generated/code-quality/index.html b/reports-generated/code-quality/index.html new file mode 100644 index 00000000..753eb9a6 --- /dev/null +++ b/reports-generated/code-quality/index.html @@ -0,0 +1 @@ +Qodana
    \ No newline at end of file diff --git a/reports-generated/code-quality/results/Code_Inspection/projectStructure/Gradle.json b/reports-generated/code-quality/results/Code_Inspection/projectStructure/Gradle.json new file mode 100644 index 00000000..295b4876 --- /dev/null +++ b/reports-generated/code-quality/results/Code_Inspection/projectStructure/Gradle.json @@ -0,0 +1,365 @@ +{ + "gradleJvm": "#JAVA_HOME", + "libraries": [ + { + "ideaName": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "gradleName": "com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "unresolved": false, + "groupId": "com.javiersc.gradle", + "artifactId": "gradle-extensions", + "version": "1.0.0-alpha.30" + }, + { + "ideaName": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "gradleName": "com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "unresolved": false, + "groupId": "com.javiersc.gradle", + "artifactId": "gradle-test-extensions", + "version": "1.0.0-alpha.30" + }, + { + "ideaName": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "gradleName": "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "unresolved": false, + "groupId": "org.jetbrains.kotlin", + "artifactId": "kotlin-stdlib-jdk8", + "version": "1.8.10" + }, + { + "ideaName": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "gradleName": "org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "unresolved": false, + "groupId": "org.eclipse.jgit", + "artifactId": "org.eclipse.jgit", + "version": "6.5.0.202303070854-r" + }, + { + "ideaName": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.8.10", + "gradleName": "org.jetbrains.kotlin:kotlin-test-junit5:1.8.10", + "unresolved": false, + "groupId": "org.jetbrains.kotlin", + "artifactId": "kotlin-test-junit5", + "version": "1.8.10" + }, + { + "ideaName": "Gradle: org.jetbrains.kotlin:kotlin-test:1.8.10", + "gradleName": "org.jetbrains.kotlin:kotlin-test:1.8.10", + "unresolved": false, + "groupId": "org.jetbrains.kotlin", + "artifactId": "kotlin-test", + "version": "1.8.10" + }, + { + "ideaName": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.8.10", + "gradleName": "org.jetbrains.kotlin:kotlin-test-annotations-common:1.8.10", + "unresolved": false, + "groupId": "org.jetbrains.kotlin", + "artifactId": "kotlin-test-annotations-common", + "version": "1.8.10" + }, + { + "ideaName": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "gradleName": "com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "unresolved": false, + "groupId": "com.javiersc.semver", + "artifactId": "semver-core-jvm", + "version": "0.1.0-beta.13" + }, + { + "ideaName": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "gradleName": "com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "unresolved": false, + "groupId": "com.javiersc.gradle", + "artifactId": "gradle-delegated-properties-extensions", + "version": "1.0.0-alpha.30" + }, + { + "ideaName": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "gradleName": "com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "unresolved": false, + "groupId": "com.javiersc.gradle", + "artifactId": "gradle-logging-extensions", + "version": "1.0.0-alpha.30" + }, + { + "ideaName": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "gradleName": "com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "unresolved": false, + "groupId": "com.javiersc.gradle", + "artifactId": "gradle-miscellanea-extensions", + "version": "1.0.0-alpha.30" + }, + { + "ideaName": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "gradleName": "com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "unresolved": false, + "groupId": "com.javiersc.gradle", + "artifactId": "gradle-plugin-extensions", + "version": "1.0.0-alpha.30" + }, + { + "ideaName": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "gradleName": "com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "unresolved": false, + "groupId": "com.javiersc.gradle", + "artifactId": "gradle-project-extensions", + "version": "1.0.0-alpha.30" + }, + { + "ideaName": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "gradleName": "com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "unresolved": false, + "groupId": "com.javiersc.gradle", + "artifactId": "gradle-properties-extensions", + "version": "1.0.0-alpha.30" + }, + { + "ideaName": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "gradleName": "com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "unresolved": false, + "groupId": "com.javiersc.gradle", + "artifactId": "gradle-tasks-extensions", + "version": "1.0.0-alpha.30" + }, + { + "ideaName": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "gradleName": "com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "unresolved": false, + "groupId": "com.javiersc.gradle", + "artifactId": "gradle-version-catalog-extensions", + "version": "1.0.0-alpha.30" + }, + { + "ideaName": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "gradleName": "com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "unresolved": false, + "groupId": "com.javiersc.gradle", + "artifactId": "gradle-project-test-extensions", + "version": "1.0.0-alpha.30" + }, + { + "ideaName": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "gradleName": "com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "unresolved": false, + "groupId": "com.javiersc.gradle", + "artifactId": "gradle-testkit-test-extensions", + "version": "1.0.0-alpha.30" + }, + { + "ideaName": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "gradleName": "com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "unresolved": false, + "groupId": "com.javiersc.gradle", + "artifactId": "gradle-common-test-extensions", + "version": "1.0.0-alpha.30" + }, + { + "ideaName": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "gradleName": "com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "unresolved": false, + "groupId": "com.javiersc.kotlin", + "artifactId": "kotlin-stdlib-jvm", + "version": "0.1.0-alpha.12" + }, + { + "ideaName": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "gradleName": "com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "unresolved": false, + "groupId": "com.javiersc.kotlin", + "artifactId": "kotlin-test-junit5-jvm", + "version": "0.1.0-alpha.12" + }, + { + "ideaName": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "gradleName": "io.kotest:kotest-assertions-core-jvm:5.5.4", + "unresolved": false, + "groupId": "io.kotest", + "artifactId": "kotest-assertions-core-jvm", + "version": "5.5.4" + }, + { + "ideaName": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "gradleName": "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "unresolved": false, + "groupId": "org.jetbrains.kotlin", + "artifactId": "kotlin-stdlib-jdk7", + "version": "1.8.10" + }, + { + "ideaName": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "gradleName": "org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "unresolved": false, + "groupId": "org.jetbrains.kotlin", + "artifactId": "kotlin-stdlib", + "version": "1.8.10" + }, + { + "ideaName": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "gradleName": "com.googlecode.javaewah:JavaEWAH:1.1.13", + "unresolved": false, + "groupId": "com.googlecode.javaewah", + "artifactId": "JavaEWAH", + "version": "1.1.13" + }, + { + "ideaName": "Gradle: org.slf4j:slf4j-api:1.7.30", + "gradleName": "org.slf4j:slf4j-api:1.7.30", + "unresolved": false, + "groupId": "org.slf4j", + "artifactId": "slf4j-api", + "version": "1.7.30" + }, + { + "ideaName": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "gradleName": "org.junit.jupiter:junit-jupiter-api:5.9.2", + "unresolved": false, + "groupId": "org.junit.jupiter", + "artifactId": "junit-jupiter-api", + "version": "5.9.2" + }, + { + "ideaName": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "gradleName": "org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "unresolved": false, + "groupId": "org.jetbrains.kotlin", + "artifactId": "kotlin-stdlib-common", + "version": "1.8.10" + }, + { + "ideaName": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "gradleName": "org.junit.jupiter:junit-jupiter-params:5.9.2", + "unresolved": false, + "groupId": "org.junit.jupiter", + "artifactId": "junit-jupiter-params", + "version": "5.9.2" + }, + { + "ideaName": "Gradle: org.jetbrains:annotations:13.0", + "gradleName": "org.jetbrains:annotations:13.0", + "unresolved": false, + "groupId": "org.jetbrains", + "artifactId": "annotations", + "version": "13.0" + }, + { + "ideaName": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "gradleName": "org.junit.platform:junit-platform-commons:1.9.2", + "unresolved": false, + "groupId": "org.junit.platform", + "artifactId": "junit-platform-commons", + "version": "1.9.2" + }, + { + "ideaName": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "gradleName": "org.apiguardian:apiguardian-api:1.1.2", + "unresolved": false, + "groupId": "org.apiguardian", + "artifactId": "apiguardian-api", + "version": "1.1.2" + }, + { + "ideaName": "Gradle: org.opentest4j:opentest4j:1.2.0", + "gradleName": "org.opentest4j:opentest4j:1.2.0", + "unresolved": false, + "groupId": "org.opentest4j", + "artifactId": "opentest4j", + "version": "1.2.0" + }, + { + "ideaName": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "gradleName": "io.kotest:kotest-assertions-shared-jvm:5.5.4", + "unresolved": false, + "groupId": "io.kotest", + "artifactId": "kotest-assertions-shared-jvm", + "version": "5.5.4" + }, + { + "ideaName": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "gradleName": "io.kotest:kotest-assertions-api-jvm:5.5.4", + "unresolved": false, + "groupId": "io.kotest", + "artifactId": "kotest-assertions-api-jvm", + "version": "5.5.4" + }, + { + "ideaName": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "gradleName": "org.junit.jupiter:junit-jupiter-engine:5.9.2", + "unresolved": false, + "groupId": "org.junit.jupiter", + "artifactId": "junit-jupiter-engine", + "version": "5.9.2" + }, + { + "ideaName": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "gradleName": "org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "unresolved": false, + "groupId": "org.jetbrains.kotlinx", + "artifactId": "kotlinx-coroutines-jdk8", + "version": "1.6.4" + }, + { + "ideaName": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "gradleName": "org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "unresolved": false, + "groupId": "org.jetbrains.kotlin", + "artifactId": "kotlin-reflect", + "version": "1.6.21" + }, + { + "ideaName": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "gradleName": "org.junit.platform:junit-platform-engine:1.9.2", + "unresolved": false, + "groupId": "org.junit.platform", + "artifactId": "junit-platform-engine", + "version": "1.9.2" + }, + { + "ideaName": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "gradleName": "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "unresolved": false, + "groupId": "org.jetbrains.kotlinx", + "artifactId": "kotlinx-coroutines-core-jvm", + "version": "1.6.4" + }, + { + "ideaName": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "gradleName": "io.kotest:kotest-common-jvm:5.5.4", + "unresolved": false, + "groupId": "io.kotest", + "artifactId": "kotest-common-jvm", + "version": "5.5.4" + }, + { + "ideaName": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "gradleName": "io.github.java-diff-utils:java-diff-utils:4.12", + "unresolved": false, + "groupId": "io.github.java-diff-utils", + "artifactId": "java-diff-utils", + "version": "4.12" + }, + { + "ideaName": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.7.20", + "gradleName": "org.jetbrains.kotlin:kotlin-test-junit5:1.7.20", + "unresolved": false, + "groupId": "org.jetbrains.kotlin", + "artifactId": "kotlin-test-junit5", + "version": "1.7.20" + }, + { + "ideaName": "Gradle: org.jetbrains.kotlin:kotlin-test:1.7.20", + "gradleName": "org.jetbrains.kotlin:kotlin-test:1.7.20", + "unresolved": false, + "groupId": "org.jetbrains.kotlin", + "artifactId": "kotlin-test", + "version": "1.7.20" + }, + { + "ideaName": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.7.20", + "gradleName": "org.jetbrains.kotlin:kotlin-test-annotations-common:1.7.20", + "unresolved": false, + "groupId": "org.jetbrains.kotlin", + "artifactId": "kotlin-test-annotations-common", + "version": "1.7.20" + } + ] +} \ No newline at end of file diff --git a/reports-generated/code-quality/results/Code_Inspection/projectStructure/Java.json b/reports-generated/code-quality/results/Code_Inspection/projectStructure/Java.json new file mode 100644 index 00000000..9ee83480 --- /dev/null +++ b/reports-generated/code-quality/results/Code_Inspection/projectStructure/Java.json @@ -0,0 +1,68 @@ +{ + "modules": [ + { + "name": "semver-gradle-plugin-project", + "languageLevel": 17 + }, + { + "name": "semver-gradle-plugin-project.semver-gradle-plugin", + "languageLevel": 17 + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin", + "languageLevel": 17 + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin", + "languageLevel": 17 + }, + { + "name": "semver-gradle-plugin-project.semver-gradle-plugin.test", + "languageLevel": 8 + }, + { + "name": "semver-gradle-plugin-project.semver-gradle-plugin.main", + "languageLevel": 8 + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.test", + "languageLevel": 8 + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFixtures", + "languageLevel": 8 + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "languageLevel": 8 + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "languageLevel": 8 + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testIntegration", + "languageLevel": 8 + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.test", + "languageLevel": 8 + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testFixtures", + "languageLevel": 8 + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testFunctional", + "languageLevel": 8 + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "languageLevel": 8 + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testIntegration", + "languageLevel": 8 + } + ] +} \ No newline at end of file diff --git a/reports-generated/code-quality/results/Code_Inspection/projectStructure/Libraries.json b/reports-generated/code-quality/results/Code_Inspection/projectStructure/Libraries.json new file mode 100644 index 00000000..0a65dee6 --- /dev/null +++ b/reports-generated/code-quality/results/Code_Inspection/projectStructure/Libraries.json @@ -0,0 +1,282 @@ +{ + "libraries": [ + { + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.gradle/gradle-extensions/1.0.0-alpha.30/bd787b61a21a01fc7388c157c998f313d1aec902/gradle-extensions-1.0.0-alpha.30.jar!/" + ] + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk8/1.8.10/7c002ac41f547a82e81dfebd2a20577a738dbf3f/kotlin-stdlib-jdk8-1.8.10.jar!/" + ] + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.eclipse.jgit/org.eclipse.jgit/6.5.0.202303070854-r/a846f632cf00da830745b721807d05ddf3e0790f/org.eclipse.jgit-6.5.0.202303070854-r.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.semver/semver-core-jvm/0.1.0-beta.13/bdf2990069aed3ae53c9427407828185d1b370aa/semver-core-jvm-0.1.0-beta.13.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.gradle/gradle-delegated-properties-extensions/1.0.0-alpha.30/d53f3904047c3d078ec00b88d2d455573f954358/gradle-delegated-properties-extensions-1.0.0-alpha.30.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.gradle/gradle-logging-extensions/1.0.0-alpha.30/5913ec11c149bf8a4977cfdb4b82258fea3c333b/gradle-logging-extensions-1.0.0-alpha.30.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.gradle/gradle-miscellanea-extensions/1.0.0-alpha.30/2a8ff43ec6d131665af8cea2be412ab5f4192e26/gradle-miscellanea-extensions-1.0.0-alpha.30.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.gradle/gradle-plugin-extensions/1.0.0-alpha.30/ce91f9a4f00b327bb7bc4ea4c46d1f9b7d519ec8/gradle-plugin-extensions-1.0.0-alpha.30.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.gradle/gradle-project-extensions/1.0.0-alpha.30/50afef26ad6e5ddcad92fcdaae72312fc3d5a5fd/gradle-project-extensions-1.0.0-alpha.30.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.gradle/gradle-properties-extensions/1.0.0-alpha.30/211ebbb6d90145fa6278d472d0f82b40e100893f/gradle-properties-extensions-1.0.0-alpha.30.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.gradle/gradle-tasks-extensions/1.0.0-alpha.30/446b15b3b5fbefb5288a48f1f3238e17be80b872/gradle-tasks-extensions-1.0.0-alpha.30.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.gradle/gradle-version-catalog-extensions/1.0.0-alpha.30/2a371939b6041c2f0268c972ea3a362a56a4677e/gradle-version-catalog-extensions-1.0.0-alpha.30.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.kotlin/kotlin-stdlib-jvm/0.1.0-alpha.12/f93a78fce811a650444ae373d760afeccee997c1/kotlin-stdlib-jvm-0.1.0-alpha.12.jar!/" + ] + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.8.10/cb726a23c808a850a43e7d6b9d1ba91b02fe9f05/kotlin-stdlib-jdk7-1.8.10.jar!/" + ] + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.8.10/6d5560a229477df9406943d5feda5618e98eb64c/kotlin-stdlib-1.8.10.jar!/" + ] + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.googlecode.javaewah/JavaEWAH/1.1.13/32cd724a42dc73f99ca08453d11a4bb83e0034c7/JavaEWAH-1.1.13.jar!/" + ] + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-api/1.7.30/b5a4b6d16ab13e34a88fae84c35cd5d68cac922c/slf4j-api-1.7.30.jar!/" + ] + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.8.10/a61b182458550492c12aee66157d7b524a63a5ec/kotlin-stdlib-common-1.8.10.jar!/" + ], + "properties": {} + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar!/" + ] + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-coroutines-core-jvm/1.6.4/2c997cd1c0ef33f3e751d3831929aeff1390cb30/kotlinx-coroutines-core-jvm-1.6.4.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.gradle/gradle-test-extensions/1.0.0-alpha.30/dfa2f41310a452861f870a080b3d468b3188096b/gradle-test-extensions-1.0.0-alpha.30.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.gradle/gradle-project-test-extensions/1.0.0-alpha.30/da8a056fd896762d98936034a02df0e58db96bc2/gradle-project-test-extensions-1.0.0-alpha.30.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.gradle/gradle-testkit-test-extensions/1.0.0-alpha.30/ffa8f200cb5863eb585f6e9cb687e0b8a734f994/gradle-testkit-test-extensions-1.0.0-alpha.30.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.gradle/gradle-common-test-extensions/1.0.0-alpha.30/be5973b8acaa4e953845ee74a8879e58e20850db/gradle-common-test-extensions-1.0.0-alpha.30.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.kotlin/kotlin-test-junit5-jvm/0.1.0-alpha.12/d01166fcd46dcc4ea1366829613abb60bc0ff0ce/kotlin-test-junit5-jvm-0.1.0-alpha.12.jar!/" + ] + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/io.kotest/kotest-assertions-core-jvm/5.5.4/ab40f3267df9c8c6ce68b3ab7f708bcd4a8748a4/kotest-assertions-core-jvm-5.5.4.jar!/" + ] + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.junit.jupiter/junit-jupiter-params/5.9.2/bc2765afb7b85b583c710dd259a11c6b8c39e912/junit-jupiter-params-5.9.2.jar!/" + ] + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.junit.jupiter/junit-jupiter-api/5.9.2/fed843581520eac594bc36bb4b0f55e7b947dda9/junit-jupiter-api-5.9.2.jar!/" + ] + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.apiguardian/apiguardian-api/1.1.2/a231e0d844d2721b0fa1b238006d15c6ded6842a/apiguardian-api-1.1.2.jar!/" + ] + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.junit.platform/junit-platform-commons/1.9.2/6f9f8621d8230cd38aa42e58ccbc0c00569131ce/junit-platform-commons-1.9.2.jar!/" + ] + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.opentest4j/opentest4j/1.2.0/28c11eb91f9b6d8e200631d46e20a7f407f2a046/opentest4j-1.2.0.jar!/" + ] + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/io.kotest/kotest-assertions-shared-jvm/5.5.4/bb14c2e2e6ec60eb16a3ea33dd6ba4e24bef6986/kotest-assertions-shared-jvm-5.5.4.jar!/" + ] + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/io.kotest/kotest-assertions-api-jvm/5.5.4/119bff97e591506fbe708ca75f6ef2cf500e0abb/kotest-assertions-api-jvm-5.5.4.jar!/" + ] + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.7.20", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-test-junit5/1.7.20/262797b12ea731ca9a58a5a992d5deb8a55e0834/kotlin-test-junit5-1.7.20.jar!/" + ] + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.7.20", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-test/1.7.20/1cfae9a58285c1bafb4ad0bd1b27406d97a2623c/kotlin-test-1.7.20.jar!/" + ] + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.7.20", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-test-annotations-common/1.7.20/cc5fb934384fc3eaf58fbd24c3ee5d1b850c481/kotlin-test-annotations-common-1.7.20.jar!/" + ], + "properties": {} + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-coroutines-jdk8/1.6.4/5bc4b0bf6fd90fc190fd2f17e919c74c6274cb71/kotlinx-coroutines-jdk8-1.6.4.jar!/" + ] + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-reflect/1.6.21/5dc3574d9b7bebfcb4ec6b10ada4aaa9e140bd0b/kotlin-reflect-1.6.21.jar!/" + ] + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.junit.jupiter/junit-jupiter-engine/5.9.2/572f7a553b53f83ee59cc045ce1c3772864ab76c/junit-jupiter-engine-5.9.2.jar!/" + ] + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/io.kotest/kotest-common-jvm/5.5.4/4778924a952debb650c4ed34c86c4dc582c63fcc/kotest-common-jvm-5.5.4.jar!/" + ] + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.junit.platform/junit-platform-engine/1.9.2/40aeef2be7b04f96bb91e8b054affc28b7c7c935/junit-platform-engine-1.9.2.jar!/" + ] + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/io.github.java-diff-utils/java-diff-utils/4.12/1a712a91324d566eef39817fc5c9980eb10c21db/java-diff-utils-4.12.jar!/" + ] + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.8.10", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-test-junit5/1.8.10/d4f30f551c4edcc9eb1ce87272b66dd9d0816052/kotlin-test-junit5-1.8.10.jar!/" + ] + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.8.10", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-test/1.8.10/5fd889abbc164b0a080a7a3314627bd796315421/kotlin-test-1.8.10.jar!/" + ] + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.8.10", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-test-annotations-common/1.8.10/b3015327d703b67b7450bf6714e3854d7130efdc/kotlin-test-annotations-common-1.8.10.jar!/" + ], + "properties": {} + } + ] +} \ No newline at end of file diff --git a/reports-generated/code-quality/results/Code_Inspection/projectStructure/Maven.json b/reports-generated/code-quality/results/Code_Inspection/projectStructure/Maven.json new file mode 100644 index 00000000..949933b6 --- /dev/null +++ b/reports-generated/code-quality/results/Code_Inspection/projectStructure/Maven.json @@ -0,0 +1,3 @@ +{ + "libraries": [] +} \ No newline at end of file diff --git a/reports-generated/code-quality/results/Code_Inspection/projectStructure/Modules.json b/reports-generated/code-quality/results/Code_Inspection/projectStructure/Modules.json new file mode 100644 index 00000000..b34c2781 --- /dev/null +++ b/reports-generated/code-quality/results/Code_Inspection/projectStructure/Modules.json @@ -0,0 +1,3478 @@ +{ + "modules": [ + { + "name": "semver-gradle-plugin-project", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$", + "sourceFolders": [] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-gradle-plugin", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-gradle-plugin", + "sourceFolders": [] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin", + "sourceFolders": [] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-settings-gradle-plugin", + "sourceFolders": [] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-gradle-plugin.test", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-gradle-plugin/test", + "sourceFolders": [] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "semver-gradle-plugin-project.semver-gradle-plugin.main", + "type": "Module" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-test-kit-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "type": "Library" + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "type": "Library" + }, + { + "name": "/data/project/semver-gradle-plugin/build/pluginUnderTestMetadata", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-gradle-plugin.main", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-gradle-plugin/main", + "sourceFolders": [ + { + "path": "file://$PROJECT_DIR$/semver-gradle-plugin/main/kotlin", + "type": "Source", + "packagePrefix": "" + } + ] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.test", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/test", + "sourceFolders": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/test/kotlin", + "type": "TestSource", + "packagePrefix": "" + } + ] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-test-kit-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.8.10", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "type": "Library" + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "type": "Library" + }, + { + "name": "/data/project/semver-project-gradle-plugin/build/pluginUnderTestMetadata", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFixtures", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/testFixtures", + "sourceFolders": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/testFixtures/kotlin", + "type": "Source", + "packagePrefix": "" + } + ] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-test-kit-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.7.20", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.7.20", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.7.20", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/testFunctional", + "sourceFolders": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/testFunctional/kotlin", + "type": "Source", + "packagePrefix": "" + }, + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/testFunctional/resources", + "type": "Resource", + "packagePrefix": "" + } + ] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-test-kit-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "type": "Library" + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "type": "Library" + }, + { + "name": "/data/project/semver-project-gradle-plugin/build/pluginUnderTestMetadata", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/main", + "sourceFolders": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/main/kotlin", + "type": "Source", + "packagePrefix": "" + } + ] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testIntegration", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/testIntegration", + "sourceFolders": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/testIntegration/kotlin", + "type": "Source", + "packagePrefix": "" + } + ] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-test-kit-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "type": "Library" + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "type": "Library" + }, + { + "name": "/data/project/semver-project-gradle-plugin/build/pluginUnderTestMetadata", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.test", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-settings-gradle-plugin/test", + "sourceFolders": [] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-test-kit-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.8.10", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "type": "Library" + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "type": "Library" + }, + { + "name": "/data/project/semver-settings-gradle-plugin/build/pluginUnderTestMetadata", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testFixtures", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-settings-gradle-plugin/testFixtures", + "sourceFolders": [] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-test-kit-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.7.20", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.7.20", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.7.20", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testFunctional", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-settings-gradle-plugin/testFunctional", + "sourceFolders": [ + { + "path": "file://$PROJECT_DIR$/semver-settings-gradle-plugin/testFunctional/kotlin", + "type": "Source", + "packagePrefix": "" + }, + { + "path": "file://$PROJECT_DIR$/semver-settings-gradle-plugin/testFunctional/resources", + "type": "Resource", + "packagePrefix": "" + } + ] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-test-kit-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "type": "Library" + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "type": "Library" + }, + { + "name": "/data/project/semver-settings-gradle-plugin/build/pluginUnderTestMetadata", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-settings-gradle-plugin/main", + "sourceFolders": [ + { + "path": "file://$PROJECT_DIR$/semver-settings-gradle-plugin/main/kotlin", + "type": "Source", + "packagePrefix": "" + } + ] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testIntegration", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-settings-gradle-plugin/testIntegration", + "sourceFolders": [] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-test-kit-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "type": "Library" + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "type": "Library" + }, + { + "name": "/data/project/semver-settings-gradle-plugin/build/pluginUnderTestMetadata", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "type": "Library" + } + ] + } + ] +} \ No newline at end of file diff --git a/reports-generated/code-quality/results/Code_Inspection/projectStructure/ProjectFingerprint.json b/reports-generated/code-quality/results/Code_Inspection/projectStructure/ProjectFingerprint.json new file mode 100644 index 00000000..114d4d5f --- /dev/null +++ b/reports-generated/code-quality/results/Code_Inspection/projectStructure/ProjectFingerprint.json @@ -0,0 +1,11 @@ +{ + "languages": [ + "Plain text", + "Properties", + "JSON", + ".gitignore (GitIgnore)", + "EditorConfig", + "Kotlin", + "XML" + ] +} \ No newline at end of file diff --git a/reports-generated/code-quality/results/Code_Inspection/projectStructure/SDKs.json b/reports-generated/code-quality/results/Code_Inspection/projectStructure/SDKs.json new file mode 100644 index 00000000..64cdbda4 --- /dev/null +++ b/reports-generated/code-quality/results/Code_Inspection/projectStructure/SDKs.json @@ -0,0 +1,69 @@ +{ + "sdks": [ + { + "name": "17", + "roots": [ + "jrt:///opt/idea/jbr!/gluegen.rt", + "jrt:///opt/idea/jbr!/java.base", + "jrt:///opt/idea/jbr!/java.compiler", + "jrt:///opt/idea/jbr!/java.datatransfer", + "jrt:///opt/idea/jbr!/java.desktop", + "jrt:///opt/idea/jbr!/java.instrument", + "jrt:///opt/idea/jbr!/java.logging", + "jrt:///opt/idea/jbr!/java.management", + "jrt:///opt/idea/jbr!/java.management.rmi", + "jrt:///opt/idea/jbr!/java.naming", + "jrt:///opt/idea/jbr!/java.net.http", + "jrt:///opt/idea/jbr!/java.prefs", + "jrt:///opt/idea/jbr!/java.rmi", + "jrt:///opt/idea/jbr!/java.scripting", + "jrt:///opt/idea/jbr!/java.se", + "jrt:///opt/idea/jbr!/java.security.jgss", + "jrt:///opt/idea/jbr!/java.security.sasl", + "jrt:///opt/idea/jbr!/java.smartcardio", + "jrt:///opt/idea/jbr!/java.sql", + "jrt:///opt/idea/jbr!/java.sql.rowset", + "jrt:///opt/idea/jbr!/java.transaction.xa", + "jrt:///opt/idea/jbr!/java.xml", + "jrt:///opt/idea/jbr!/java.xml.crypto", + "jrt:///opt/idea/jbr!/jcef", + "jrt:///opt/idea/jbr!/jdk.accessibility", + "jrt:///opt/idea/jbr!/jdk.attach", + "jrt:///opt/idea/jbr!/jdk.charsets", + "jrt:///opt/idea/jbr!/jdk.compiler", + "jrt:///opt/idea/jbr!/jdk.crypto.cryptoki", + "jrt:///opt/idea/jbr!/jdk.crypto.ec", + "jrt:///opt/idea/jbr!/jdk.dynalink", + "jrt:///opt/idea/jbr!/jdk.hotspot.agent", + "jrt:///opt/idea/jbr!/jdk.httpserver", + "jrt:///opt/idea/jbr!/jdk.internal.ed", + "jrt:///opt/idea/jbr!/jdk.internal.jvmstat", + "jrt:///opt/idea/jbr!/jdk.internal.le", + "jrt:///opt/idea/jbr!/jdk.internal.vm.ci", + "jrt:///opt/idea/jbr!/jdk.javadoc", + "jrt:///opt/idea/jbr!/jdk.jcmd", + "jrt:///opt/idea/jbr!/jdk.jdi", + "jrt:///opt/idea/jbr!/jdk.jdwp.agent", + "jrt:///opt/idea/jbr!/jdk.jfr", + "jrt:///opt/idea/jbr!/jdk.jsobject", + "jrt:///opt/idea/jbr!/jdk.localedata", + "jrt:///opt/idea/jbr!/jdk.management", + "jrt:///opt/idea/jbr!/jdk.management.agent", + "jrt:///opt/idea/jbr!/jdk.management.jfr", + "jrt:///opt/idea/jbr!/jdk.naming.dns", + "jrt:///opt/idea/jbr!/jdk.naming.rmi", + "jrt:///opt/idea/jbr!/jdk.net", + "jrt:///opt/idea/jbr!/jdk.sctp", + "jrt:///opt/idea/jbr!/jdk.security.auth", + "jrt:///opt/idea/jbr!/jdk.security.jgss", + "jrt:///opt/idea/jbr!/jdk.unsupported", + "jrt:///opt/idea/jbr!/jdk.unsupported.desktop", + "jrt:///opt/idea/jbr!/jdk.xml.dom", + "jrt:///opt/idea/jbr!/jdk.zipfs", + "jrt:///opt/idea/jbr!/jogl.all" + ], + "sdkType": "JavaSDK", + "sdkVersion": "java version \"17.0.6\"" + } + ] +} \ No newline at end of file diff --git a/reports-generated/code-quality/results/descriptions/Code_Inspection.json b/reports-generated/code-quality/results/descriptions/Code_Inspection.json new file mode 100644 index 00000000..f0bee864 --- /dev/null +++ b/reports-generated/code-quality/results/descriptions/Code_Inspection.json @@ -0,0 +1,9491 @@ +{ + "profile": "Default", + "groups": [ + { + "name": "Language injection", + "inspections": [ + { + "shortName": "InjectionNotApplicable", + "displayName": "Injection Annotation not applicable", + "enabled": false, + "description": "Reports when a `@Language` annotation is applied to an element with a type other than `String` or `String[]`.\n\n**Example:**\n\n\n @Language(\"HTML\") int i;\n\nAfter the quick-fix is applied:\n\n\n int i;\n" + }, + { + "shortName": "UnknownLanguage", + "displayName": "Unknown Language ID", + "enabled": false, + "description": "Reports when the ID of the language used in a `@Language` annotation is unknown.\n\n**Example:**\n\n\n @Language(\"HMTL\") String html;\n" + }, + { + "shortName": "LanguageMismatch", + "displayName": "Language mismatch", + "enabled": false, + "description": "Reports when the language of a reference does not match the expected language of the usage context.\n\nExample:\n\n\n @Language(\"JavaScript\")\n String JS_CODE = \"var x;\";\n\n @Language(\"XPath\")\n String XPATH_CODE = JS_CODE; // warning here\n" + } + ] + }, + { + "name": "Maven", + "inspections": [ + { + "shortName": "MavenRedundantGroupId", + "displayName": "Redundant groupId", + "enabled": false, + "description": "Reports the unnecessary \\ definition since it is already defined in the parent pom.xml" + }, + { + "shortName": "MavenDuplicatePluginInspection", + "displayName": "Duplicate plugin declaration", + "enabled": false, + "description": "Reports the duplication of the plugin declaration in pom.xml" + }, + { + "shortName": "MavenPropertyInParent", + "displayName": "Usage of properties in parent description", + "enabled": false, + "description": "Reports that the usage of properties in modules parent definition is prohibited" + }, + { + "shortName": "MavenDuplicateDependenciesInspection", + "displayName": "Duplicate Dependencies", + "enabled": false, + "description": "Reports duplicate dependencies" + }, + { + "shortName": "MavenModelInspection", + "displayName": "Maven Model Inspection", + "enabled": false, + "description": "Reports resolution problems in a Maven model" + }, + { + "shortName": "MavenParentMissedVersionInspection", + "displayName": "Parent version missed", + "enabled": false, + "description": "Reports the absence of the parent version element for versions that do not support consumer POM feature" + }, + { + "shortName": "MavenCoroutinesDeprecation", + "displayName": "Incompatible kotlinx.coroutines dependency is used with Kotlin 1.3+ in Maven", + "enabled": true, + "description": "Reports **kotlinx.coroutines** library dependencies in Maven that should be updated in order to be compatible with Kotlin 1.3 and later." + } + ] + }, + { + "name": "Kotlin", + "inspections": [ + { + "shortName": "KotlinMavenPluginPhase", + "displayName": "Kotlin Maven Plugin misconfigured", + "enabled": true, + "description": "Reports kotlin-maven-plugin configuration issues" + }, + { + "shortName": "KotlinInvalidBundleOrProperty", + "displayName": "Invalid property key", + "enabled": true, + "description": "Reports unresolved references to `.properties` file keys and resource bundles in Kotlin files." + }, + { + "shortName": "KotlinTestJUnit", + "displayName": "kotlin-test-junit could be used", + "enabled": true, + "description": "Reports usage of `kotlin-test` and `junit` dependency without `kotlin-test-junit`.\n\nIt is recommended to use `kotlin-test-junit` dependency to work with Kotlin and JUnit." + }, + { + "shortName": "DeprecatedGradleDependency", + "displayName": "Deprecated library is used in Gradle", + "enabled": true, + "description": "Reports deprecated dependencies in Gradle build scripts.\n\n**Example:**\n\n\n dependencies {\n compile \"org.jetbrains.kotlin:kotlin-stdlib-jre7:1.2.0\"\n }\n\nAfter the quick-fix applied:\n\n\n dependencies {\n compile \"org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.0\"\n }\n" + }, + { + "shortName": "DifferentKotlinGradleVersion", + "displayName": "Kotlin Gradle and IDE plugins versions are different", + "enabled": true, + "description": "Reports that Gradle plugin version isn't properly supported in the current IDE plugin.\n\nThis can cause inconsistencies between IDE and Gradle builds in error reporting or code behavior.\n\n**Example:**\n\n\n dependencies {\n classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:0.0.1\"\n }\n\nTo fix the problem change the kotlin gradle plugin version to match the version of kotlin that is bundled into the IDE plugin." + }, + { + "shortName": "DeprecatedMavenDependency", + "displayName": "Deprecated library is used in Maven", + "enabled": true, + "description": "Reports deprecated maven dependency.\n\n**Example:**\n\n\n \n \n org.jetbrains.kotlin\n kotlin-stdlib-jre7\n ${kotlin.version}\n \n \n\nThe quick fix changes the deprecated dependency to a maintained one:\n\n\n \n \n org.jetbrains.kotlin\n kotlin-stdlib-jdk7\n ${kotlin.version}\n \n \n" + }, + { + "shortName": "DifferentStdlibGradleVersion", + "displayName": "Kotlin library and Gradle plugin versions are different", + "enabled": true, + "description": "Reports different Kotlin stdlib and compiler versions.\n\n**Example:**\n\n\n dependencies {\n classpath \"org.jetbrains.kotlin:kotlin-stdlib:0.0.1\"\n }\n\nTo fix the problem change the kotlin stdlib version to match the kotlin compiler version." + }, + { + "shortName": "DifferentMavenStdlibVersion", + "displayName": "Library and maven plugin versions are different", + "enabled": true, + "description": "Reports different Kotlin stdlib and compiler versions.\n\nUsing different versions of the Kotlin compiler and the standard library can lead to unpredictable\nruntime problems and should be avoided." + }, + { + "shortName": "DifferentKotlinMavenVersion", + "displayName": "Maven and IDE plugins versions are different", + "enabled": true, + "description": "Reports that Maven plugin version isn't properly supported in the current IDE plugin.\n\nThis inconsistency may lead to different error reporting behavior in the IDE and the compiler" + } + ] + }, + { + "name": "Style issues", + "inspections": [ + { + "shortName": "RedundantRunCatching", + "displayName": "Redundant 'runCatching' call", + "enabled": false, + "description": "Reports `runCatching` calls that are immediately followed by `getOrThrow`. Such calls can be replaced with just `run`.\n\n**Example:**\n\n\n fun foo() = runCatching { doSomething() }.getOrThrow()\n\nAfter the quick-fix is applied:\n\n\n fun foo() = run { doSomething() }\n" + }, + { + "shortName": "ConvertLambdaToReference", + "displayName": "Can be replaced with function reference", + "enabled": false, + "description": "Reports function literal expressions that can be replaced with function references.\n\nReplacing lambdas with function references often makes code look more concise and understandable.\n\n**Example:**\n\n\n fun Int.isEven() = this % 2 == 0\n\n fun example() {\n val numbers = listOf(1, 2, 4, 7, 9, 10)\n val evenNumbers = numbers.filter { it.isEven() }\n }\n\nAfter the quick-fix is applied:\n\n\n fun Int.isEven() = this % 2 == 0\n\n fun example() {\n val numbers = listOf(1, 2, 4, 7, 9, 10)\n val evenNumbers = numbers.filter(Int::isEven)\n }\n" + }, + { + "shortName": "ScopeFunctionConversion", + "displayName": "Scope function can be converted to another one", + "enabled": false, + "description": "Reports scope functions (`let`, `run`, `apply`, `also`) that can be converted between each other.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces the scope function to another one.\n\n**Example:**\n\n\n val x = \"\".let {\n it.length\n }\n\nAfter the quick-fix is applied:\n\n\n val x = \"\".run {\n length\n }\n" + }, + { + "shortName": "TrailingComma", + "displayName": "Trailing comma recommendations", + "enabled": false, + "description": "Reports trailing commas that do not follow the recommended [style guide](https://kotlinlang.org/docs/coding-conventions.html#trailing-commas)." + }, + { + "shortName": "FoldInitializerAndIfToElvis", + "displayName": "If-Null return/break/... foldable to '?:'", + "enabled": false, + "description": "Reports an `if` expression that checks variable being null or not right after initializing it that can be converted into an elvis operator in the initializer.\n\n**Example:**\n\n\n fun test(foo: Int?, bar: Int): Int {\n var i = foo\n if (i == null) {\n return bar\n }\n return i\n }\n\nThe quick-fix converts the `if` expression with an initializer into an elvis expression:\n\n\n fun test(foo: Int?, bar: Int): Int {\n var i = foo ?: return bar\n return i\n }\n" + }, + { + "shortName": "ConvertToStringTemplate", + "displayName": "String concatenation that can be converted to string template", + "enabled": false, + "description": "Reports string concatenation that can be converted to a string template.\n\nUsing string templates is recommended as it makes code easier to read.\n\n**Example:**\n\n\n fun example() {\n val capitals = mapOf(\"France\" to \"Paris\", \"Spain\" to \"Madrid\")\n for ((country, capital) in capitals) {\n print(capital + \" is a capital of \" + country)\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun example() {\n val capitals = mapOf(\"France\" to \"Paris\", \"Spain\" to \"Madrid\")\n for ((country, capital) in capitals) {\n print(\"$capital is a capital of $country\")\n }\n }\n" + }, + { + "shortName": "SimplifiableCall", + "displayName": "Library function call could be simplified", + "enabled": false, + "description": "Reports library function calls which could be replaced by simplified one.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces the function calls with another one.\n\n**Example:**\n\n\n fun test(list: List) {\n list.filter { it is String }\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(list: List) {\n list.filterIsInstance()\n }\n" + }, + { + "shortName": "ObjectLiteralToLambda", + "displayName": "Object literal can be converted to lambda", + "enabled": false, + "description": "Reports anonymous object literals implementing a Java interface with a single abstract method that can be converted into a call with a lambda expression.\n\n**Example:**\n\n\n class SomeService {\n val threadPool = Executors.newCachedThreadPool()\n \n fun foo() {\n threadPool.submit(object : Runnable {\n override fun run() {\n println(\"hello\")\n }\n })\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo() {\n threadPool.submit { println(\"hello\") }\n }\n" + }, + { + "shortName": "BooleanLiteralArgument", + "displayName": "Boolean literal argument without parameter name", + "enabled": false, + "description": "Reports call arguments with `Boolean` type without explicit parameter names specified.\n\n\nWhen multiple boolean literals are passed sequentially, it's easy to forget parameter ordering that could lead to mistakes.\nExplicit parameter names allow for easier code reading and understanding.\n\n**Example:**\n\n\n fun check(checkName: Boolean, checkAddress: Boolean, checkPhone: Boolean) {}\n\n fun usage() {\n check(true, false, true) // What does this mean?\n }\n\nA quick-fix adds missing parameter names:\n\n\n fun check(checkName: Boolean, checkAddress: Boolean, checkPhone: Boolean) {}\n\n fun usage() {\n check(checkName = true, checkAddress = false, checkPhone = true)\n }\n" + }, + { + "shortName": "ReplaceGuardClauseWithFunctionCall", + "displayName": "Guard clause can be replaced with Kotlin's function call", + "enabled": false, + "description": "Reports guard clauses that can be replaced with a function call.\n\n**Example:**\n\n fun test(foo: Int?) {\n if (foo == null) throw IllegalArgumentException(\"foo\") // replaceable clause\n }\n\nAfter the quick-fix is applied:\n\n fun test(foo: Int?) {\n checkNotNull(foo)\n }\n" + }, + { + "shortName": "ReplaceSizeZeroCheckWithIsEmpty", + "displayName": "Size zero check can be replaced with 'isEmpty()'", + "enabled": false, + "description": "Reports `size == 0` checks on `Collections/Array/String` that should be replaced with `isEmpty()`.\n\nUsing `isEmpty()` makes your code simpler.\n\nThe quick-fix replaces the size check with `isEmpty()`.\n\n**Example:**\n\n\n fun foo() {\n val arrayOf = arrayOf(1, 2, 3)\n arrayOf.size == 0\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo() {\n val arrayOf = arrayOf(1, 2, 3)\n arrayOf.isEmpty()\n }\n" + }, + { + "shortName": "ReplaceToStringWithStringTemplate", + "displayName": "Call of 'toString' could be replaced with string template", + "enabled": false, + "description": "Reports `toString` function calls that can be replaced with a string template.\n\nUsing string templates makes your code simpler.\n\nThe quick-fix replaces `toString` with a string template.\n\n**Example:**\n\n\n fun test(): String {\n val x = 1\n return x.toString()\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(): String {\n val x = 1\n return \"$x\"\n }\n" + }, + { + "shortName": "ProtectedInFinal", + "displayName": "'protected' visibility is effectively 'private' in a final class", + "enabled": false, + "description": "Reports `protected` visibility used inside of a `final` class. In such cases `protected` members are accessible only in the class itself, so they are effectively `private`.\n\n**Example:**\n\n\n class FinalClass {\n protected fun foo() {}\n }\n\nAfter the quick-fix is applied:\n\n\n class FinalClass {\n private fun foo() {}\n }\n" + }, + { + "shortName": "ReplaceRangeStartEndInclusiveWithFirstLast", + "displayName": "Boxed properties should be replaced with unboxed", + "enabled": false, + "description": "Reports **boxed** `Range.start` and `Range.endInclusive` properties.\n\nThese properties can be replaced with **unboxed** `first` and `last` properties to avoid redundant calls.\n\nThe quick-fix replaces `start` and `endInclusive` properties with the corresponding `first` and `last`.\n\n**Example:**\n\n\n fun foo(range: CharRange) {\n val lastElement = range.endInclusive\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(range: CharRange) {\n val lastElement = range.last\n }\n" + }, + { + "shortName": "ReplaceSizeCheckWithIsNotEmpty", + "displayName": "Size check can be replaced with 'isNotEmpty()'", + "enabled": false, + "description": "Reports size checks of `Collections/Array/String` that should be replaced with `isNotEmpty()`.\n\nUsing `isNotEmpty()` makes your code simpler.\n\nThe quick-fix replaces the size check with `isNotEmpty()`.\n\n**Example:**\n\n\n fun foo() {\n val arrayOf = arrayOf(1, 2, 3)\n arrayOf.size > 0\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo() {\n val arrayOf = arrayOf(1, 2, 3)\n arrayOf.isNotEmpty()\n }\n" + }, + { + "shortName": "IntroduceWhenSubject", + "displayName": "'when' that can be simplified by introducing an argument", + "enabled": false, + "description": "Reports a `when` expression that can be simplified by introducing a subject argument.\n\n**Example:**\n\n\n fun test(obj: Any): String {\n return when {\n obj is String -> \"string\"\n obj is Int -> \"int\"\n else -> \"unknown\"\n }\n }\n\nThe quick fix introduces a subject argument:\n\n\n fun test(obj: Any): String {\n return when (obj) {\n is String -> \"string\"\n is Int -> \"int\"\n else -> \"unknown\"\n }\n }\n" + }, + { + "shortName": "SafeCastWithReturn", + "displayName": "Safe cast with 'return' should be replaced with 'if' type check", + "enabled": false, + "description": "Reports safe cast with `return` that can be replaced with `if` type check.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces the safe cast with `if` type check.\n\n**Example:**\n\n\n fun test(x: Any) {\n x as? String ?: return\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(x: Any) {\n if (x !is String) return\n }\n" + }, + { + "shortName": "ReplaceAssertBooleanWithAssertEquality", + "displayName": "Assert boolean could be replaced with assert equality", + "enabled": false, + "description": "Reports calls to `assertTrue()` and `assertFalse()` that can be replaced with assert equality functions.\n\n\n`assertEquals()`, `assertSame()`, and their negating counterparts (-Not-) provide more informative messages on\nfailure.\n\n**Example:**\n\n assertTrue(a == b)\n\nAfter the quick-fix is applied:\n\n assertEquals(a, b)\n" + }, + { + "shortName": "IfThenToElvis", + "displayName": "If-Then foldable to '?:'", + "enabled": false, + "description": "Reports `if-then` expressions that can be folded into elvis (`?:`) expressions.\n\n**Example:**\n\n\n fun maybeFoo(): String? = \"foo\"\n\n var foo = maybeFoo()\n val bar = if (foo == null) \"hello\" else foo\n\nThe quick fix converts the `if-then` expression into an elvis (`?:`) expression:\n\n\n fun maybeFoo(): String? = \"foo\"\n\n var foo = maybeFoo()\n val bar = foo ?: \"hello\"\n" + }, + { + "shortName": "ReplaceNotNullAssertionWithElvisReturn", + "displayName": "Not-null assertion can be replaced with 'return'", + "enabled": false, + "description": "Reports not-null assertion (`!!`) calls that can be replaced with the elvis operator and return (`?: return`).\n\nA not-null assertion can lead to NPE (NullPointerException) that is not expected. Avoiding the use of `!!` is good practice.\n\nThe quick-fix replaces the not-null assertion with `return` or `return null`.\n\n**Example:**\n\n\n fun test(number: Int?) {\n val x = number!!\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(number: Int?) {\n val x = number ?: return\n }\n" + }, + { + "shortName": "ReplaceStringFormatWithLiteral", + "displayName": "'String.format' call can be replaced with string templates", + "enabled": false, + "description": "Reports `String.format` calls that can be replaced with string templates.\n\nUsing string templates makes your code simpler.\n\nThe quick-fix replaces the call with a string template.\n\n**Example:**\n\n\n fun main() {\n val id = \"abc\"\n val date = \"123\"\n val s = String.format(\"%s_%s_%s\", id, date, id)\n }\n\nAfter the quick-fix is applied:\n\n\n fun main() {\n val id = \"abc\"\n val date = \"123\"\n val s = \"${id}_${date}_$id\"\n }\n" + }, + { + "shortName": "ReplaceSubstringWithSubstringBefore", + "displayName": "'substring' call should be replaced with 'substringBefore'", + "enabled": false, + "description": "Reports calls like `s.substring(0, s.indexOf(x))` that can be replaced with `s.substringBefore(x)`.\n\nUsing `substringBefore()` makes your code simpler.\n\nThe quick-fix replaces the `substring` call with `substringBefore`.\n\n**Example:**\n\n\n fun foo(s: String) {\n s.substring(0, s.indexOf('x'))\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(s: String) {\n s.substringBefore('x')\n }\n" + }, + { + "shortName": "ReplaceJavaStaticMethodWithKotlinAnalog", + "displayName": "Java methods should be replaced with Kotlin analog", + "enabled": false, + "description": "Reports a Java method call that can be replaced with a Kotlin function, for example, `System.out.println()`.\n\nReplacing the code gets rid of the dependency to Java and makes the idiomatic Kotlin code.\n\nThe quick-fix replaces the Java method calls on the same Kotlin call.\n\n**Example:**\n\n\n import java.util.Arrays\n\n fun main() {\n val a = Arrays.asList(1, 3, null)\n }\n\nAfter the quick-fix is applied:\n\n\n fun main() {\n val a = listOf(1, 3, null)\n }\n" + }, + { + "shortName": "ReplaceWithOperatorAssignment", + "displayName": "Assignment can be replaced with operator assignment", + "enabled": false, + "description": "Reports modifications of variables with a simple assignment (such as `y = y + x`) that can be replaced with an operator assignment.\n\nThe quick-fix replaces the assignment with an assignment operator.\n\n**Example:**\n\n\n fun foo() {\n val list = mutableListOf(1, 2, 3)\n list = list + 4\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo() {\n val list = mutableListOf(1, 2, 3)\n list += 4\n }\n" + }, + { + "shortName": "ReplaceCollectionCountWithSize", + "displayName": "Collection count can be converted to size", + "enabled": false, + "description": "Reports calls to `Collection.count()`.\n\n\nThis function call can be replaced with `.size`.\n\n\n`.size` form ensures that the operation is O(1) and won't allocate extra objects, whereas\n`count()` could be confused with `Iterable.count()`, which is O(n) and allocating.\n\n\n**Example:**\n\n fun foo() {\n var list = listOf(1,2,3)\n list.count() // replaceable 'count()'\n }\n\nAfter the quick-fix is applied:\n\n fun foo() {\n var list = listOf(1,2,3)\n list.size\n }\n" + }, + { + "shortName": "JavaCollectionsStaticMethod", + "displayName": "Java Collections static method call can be replaced with Kotlin stdlib", + "enabled": false, + "description": "Reports a Java `Collections` static method call that can be replaced with Kotlin stdlib.\n\n**Example:**\n\n\n import java.util.Collections\n\n fun test() {\n val mutableList = mutableListOf(1, 2)\n Collections.fill(mutableList, 3)\n }\n\nThe quick fix replaces Java `Collections` static method call with the corresponding Kotlin stdlib method call:\n\n\n import java.util.Collections\n\n fun test() {\n val mutableList = mutableListOf(1, 2)\n mutableList.fill(3)\n }\n" + }, + { + "shortName": "MoveVariableDeclarationIntoWhen", + "displayName": "Variable declaration could be moved inside 'when'", + "enabled": false, + "description": "Reports variable declarations that can be moved inside a `when` expression.\n\n**Example:**\n\n\n fun someCalc(x: Int) = x * 42\n\n fun foo(x: Int): Int {\n val a = someCalc(x)\n return when (a) {\n 1 -> a\n 2 -> 2 * a\n else -> 24\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(x: Int): Int {\n return when (val a = someCalc(x)) {\n 1 -> a\n 2 -> 2 * a\n else -> 24\n }\n }\n" + }, + { + "shortName": "RemoveEmptyParenthesesFromAnnotationEntry", + "displayName": "Remove unnecessary parentheses", + "enabled": false, + "description": "Reports redundant empty parentheses in annotation entries.\n\nUse the 'Remove unnecessary parentheses' quick-fix to clean up the code.\n\n**Examples:**\n\n\n annotation class MyAnnotationA\n annotation class MyAnnotationB(val x: Int)\n annotation class MyAnnotationC(val x: Int = 10) // default value is present\n\n @MyAnnotationA() // <== parentheses are redundant\n fun testA() {\n }\n\n @MyAnnotationB() // <== missing argument, parentheses are required\n fun testB() {\n }\n\n @MyAnnotationC() // <== parentheses are redundant\n fun testC() {\n }\n" + }, + { + "shortName": "SimplifiableCallChain", + "displayName": "Call chain on collection type can be simplified", + "enabled": false, + "description": "Reports two-call chains replaceable by a single call.\n\nIt can help you to avoid redundant code execution.\n\nThe quick-fix replaces the call chain with a single call.\n\n**Example:**\n\n\n fun main() {\n listOf(1, 2, 3).filter { it > 1 }.count()\n }\n\nAfter the quick-fix is applied:\n\n\n fun main() {\n listOf(1, 2, 3).count { it > 1 }\n }\n" + }, + { + "shortName": "ConvertReferenceToLambda", + "displayName": "Can be replaced with lambda", + "enabled": false, + "description": "Reports a function reference expression that can be replaced with a function literal (lambda).\n\n\nSometimes, passing a lambda looks more straightforward and more consistent with the rest of the code.\nAlso, the fix might be handy if you need to replace a simple call with something more complex.\n\n**Example:**\n\n\n fun Int.isEven() = this % 2 == 0\n\n fun example() {\n val numbers = listOf(1, 2, 4, 7, 9, 10)\n val evenNumbers = numbers.filter(Int::isEven)\n }\n\nAfter the quick-fix is applied:\n\n\n fun Int.isEven() = this % 2 == 0\n\n fun example() {\n val numbers = listOf(1, 2, 4, 7, 9, 10)\n val evenNumbers = numbers.filter { it.isEven() }\n }\n" + }, + { + "shortName": "ReplaceCallWithBinaryOperator", + "displayName": "Can be replaced with binary operator", + "enabled": false, + "description": "Reports function calls that can be replaced with binary operators, in particular comparison-related ones.\n\n**Example:**\n\n fun test(): Boolean {\n return 2.compareTo(1) > 0 // replaceable 'compareTo()'\n }\n\nAfter the quick-fix is applied:\n\n fun test(): Boolean {\n return 2 > 1\n }\n" + }, + { + "shortName": "UnlabeledReturnInsideLambda", + "displayName": "Unlabeled return inside lambda", + "enabled": false, + "description": "Reports unlabeled `return` expressions inside inline lambda.\n\nSuch expressions can be confusing because it might be unclear which scope belongs to `return`.\n\n**Change to return@...** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n fun test(list: List) {\n list.forEach {\n // This return expression returns from the function test\n // One can change it to return@forEach to change the scope\n if (it == 10) return\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(list: List) {\n list.forEach {\n if (it == 10) return@test\n }\n }\n" + }, + { + "shortName": "VerboseNullabilityAndEmptiness", + "displayName": "Verbose nullability and emptiness check", + "enabled": false, + "description": "Reports combination of `null` and emptiness checks that can be simplified into a single check.\n\nThe quick-fix replaces highlighted checks with a combined check call, such as `isNullOrEmpty()`.\n\n**Example:**\n\n\n fun test(list: List?) {\n if (list == null || list.isEmpty()) {\n println(\"List is empty!\")\n } else {\n println(list.joinToString())\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(list: List?) {\n if (list.isNullOrEmpty()) {\n println(\"List is empty!\")\n } else {\n println(list.joinToString())\n }\n }\n" + }, + { + "shortName": "ConvertPairConstructorToToFunction", + "displayName": "Convert Pair constructor to 'to' function", + "enabled": false, + "description": "Reports a `Pair` constructor invocation that can be replaced with a `to()` infix function call.\n\n\nExplicit constructor invocations may add verbosity, especially if they are used multiple times.\nReplacing constructor calls with `to()` makes code easier to read and maintain.\n\n**Example:**\n\n\n val countries = mapOf(\n Pair(\"France\", \"Paris\"),\n Pair(\"Spain\", \"Madrid\"),\n Pair(\"Germany\", \"Berlin\")\n )\n\nAfter the quick-fix is applied:\n\n\n val countries = mapOf(\n \"France\" to \"Paris\",\n \"Spain\" to \"Madrid\",\n \"Germany\" to \"Berlin\"\n )\n" + }, + { + "shortName": "JoinDeclarationAndAssignment", + "displayName": "Join declaration and assignment", + "enabled": false, + "description": "Reports property declarations that can be joined with the following assignment.\n\n**Example:**\n\n\n val x: String\n x = System.getProperty(\"\")\n\nThe quick fix joins the declaration with the assignment:\n\n\n val x = System.getProperty(\"\")\n" + }, + { + "shortName": "UsePropertyAccessSyntax", + "displayName": "Accessor call that can be replaced with property access syntax", + "enabled": false, + "description": "Reports Java `get` and `set` method calls that can be replaced with the Kotlin synthetic properties.\n\n**Use property access syntax** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n // Java:\n public class JavaClassWithGetter {\n private final String expr = \"result\";\n\n // ...\n\n public String getExpr() {\n return expr;\n }\n }\n\n\n // Kotlin:\n fun test(j: JavaClassWithGetter) {\n // ...\n j.getExpr() // <== A quick-fix simplifies the expression to 'j.expr'\n }\n" + }, + { + "shortName": "UseExpressionBody", + "displayName": "Expression body syntax is preferable here", + "enabled": false, + "description": "Reports `return` expressions (one-liners or `when`) that can be replaced with expression body syntax.\n\nExpression body syntax is recommended by the [style guide](https://kotlinlang.org/docs/coding-conventions.html#functions).\n\n**Convert to expression body** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n fun sign(x: Int): Int {\n return when { // <== can be simplified\n x < 0 -> -1\n x > 0 -> 1\n else -> 0\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun sign(x: Int): Int = when {\n x < 0 -> -1\n x > 0 -> 1\n else -> 0\n }\n" + }, + { + "shortName": "MapGetWithNotNullAssertionOperator", + "displayName": "'map.get()' with not-null assertion operator (!!)", + "enabled": false, + "description": "Reports `map.get()!!` that can be replaced with `map.getValue()`, `map.getOrElse()`, and so on.\n\n**Example:**\n\n\n fun test(map: Map): String = map.get(0)!!\n\nAfter the quick-fix is applied:\n\n\n fun test(map: Map): String = map.getValue(0)\n" + }, + { + "shortName": "SortModifiers", + "displayName": "Non-canonical modifier order", + "enabled": false, + "description": "Reports modifiers that do not follow the order recommended by the [style guide](https://kotlinlang.org/docs/coding-conventions.html#modifiers-order).\n\n**Sort modifiers** quick-fix can be used to amend the code automatically.\n\nExamples:\n\n\n private inline fun correctOrder(f: () -> Unit) {} // <== Ok\n\n infix private fun Int.wrongOrder(expr: Int) {} // <== wrong order, quick-fix amends the modifiers to \"private infix\"\n" + }, + { + "shortName": "NullableBooleanElvis", + "displayName": "Equality check can be used instead of elvis for nullable boolean check", + "enabled": false, + "description": "Reports cases when an equality check should be used instead of the elvis operator.\n\n**Example:**\n\n\n fun check(a: Boolean? == null) {\n if (a ?: false) throw IllegalStateException()\n }\n\nAfter the quick-fix is applied:\n\n\n fun check(a: Boolean? == null) {\n if (a == true) throw IllegalStateException()\n }\n" + }, + { + "shortName": "ReplaceSubstringWithDropLast", + "displayName": "'substring' call should be replaced with 'dropLast' call", + "enabled": false, + "description": "Reports calls like `s.substring(0, s.length - x)` that can be replaced with `s.dropLast(x)`.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces the `substring` call with `dropLast`.\n\n**Example:**\n\n\n fun foo(s: String) {\n s.substring(0, s.length - 5)\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(s: String) {\n s.dropLast(5)\n }\n" + }, + { + "shortName": "CopyWithoutNamedArguments", + "displayName": "'copy' method of data class is called without named arguments", + "enabled": false, + "description": "Reports calls to a data class' `copy()` method without named arguments.\n\n\nAs all arguments of the `copy()` function are optional, it might be hard to understand what properties are modified.\nProviding parameter names explicitly makes code easy to understand without navigating to the `data class` declaration.\n\n**Example:**\n\n\n data class User(val name: String, val age: Int)\n\n fun copyUser(user: User): User {\n return user.copy(\"John\")\n }\n\nA quick-fix provides parameter names to all `copy()` arguments:\n\n\n data class User(val name: String, val age: Int)\n\n fun copyUser(user: User): User {\n return user.copy(name = \"John\")\n }\n" + }, + { + "shortName": "ReplaceSubstringWithTake", + "displayName": "'substring' call should be replaced with 'take' call", + "enabled": false, + "description": "Reports calls like `s.substring(0, x)` that can be replaced with `s.take(x)`.\n\nUsing `take()` makes your code simpler.\n\nThe quick-fix replaces the `substring` call with `take()`.\n\n**Example:**\n\n\n fun foo(s: String) {\n s.substring(0, 10)\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(s: String) {\n s.take(10)\n }\n" + }, + { + "shortName": "ReplaceRangeToWithRangeUntil", + "displayName": "'rangeTo' or the '..' call should be replaced with '..<'", + "enabled": false, + "description": "Reports calls to `rangeTo` or the `..` operator instead of calls to `..<`.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces `rangeTo` or the `..` call with `..<`.\n\n**Example:**\n\n\n fun foo(a: Int) {\n for (i in 0..a - 1) {\n\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(a: Int) {\n for (i in 0..) = lines\n .filter { it.isNotEmpty() }\n .map { it.split(',', limit = 2) }\n .filter { it.size == 2 }\n .map { Entity(it[0], it[1]) }\n\nA quick-fix wraps call chain into `asSequence()` and `toList()`:\n\n\n class Entity(val key: String, val value: String)\n\n fun getValues(lines: List) = lines\n .asSequence()\n .filter { it.isNotEmpty() }\n .map { it.split(',', limit = 2) }\n .filter { it.size == 2 }\n .map { Entity(it[0], it[1]) }\n .toList()\n" + }, + { + "shortName": "AddOperatorModifier", + "displayName": "Function should have 'operator' modifier", + "enabled": false, + "description": "Reports a function that matches one of the operator conventions but lacks the `operator` keyword.\n\nBy adding the `operator` modifier, you might allow function consumers to write idiomatic Kotlin code.\n\n**Example:**\n\n\n class Complex(val real: Double, val imaginary: Double) {\n fun plus(other: Complex) =\n Complex(real + other.real, imaginary + other.imaginary)\n }\n\n fun usage(a: Complex, b: Complex) {\n a.plus(b)\n }\n\nA quick-fix adds the `operator` modifier keyword:\n\n\n class Complex(val real: Double, val imaginary: Double) {\n operator fun plus(other: Complex) =\n Complex(real + other.real, imaginary + other.imaginary)\n }\n\n fun usage(a: Complex, b: Complex) {\n a + b\n }\n" + }, + { + "shortName": "MayBeConstant", + "displayName": "Might be 'const'", + "enabled": false, + "description": "Reports top-level `val` properties in objects that might be declared as `const` for better performance and Java interoperability.\n\n**Example:**\n\n\n object A {\n val foo = 1\n }\n\nAfter the quick-fix is applied:\n\n\n object A {\n const val foo = 1\n }\n" + }, + { + "shortName": "ReplaceIsEmptyWithIfEmpty", + "displayName": "'if' condition can be replaced with lambda call", + "enabled": false, + "description": "Reports `isEmpty`, `isBlank`, `isNotEmpty`, or `isNotBlank` calls in an `if` statement to assign a default value.\n\nThe quick-fix replaces the `if` condition with `ifEmpty` or `ifBlank` calls.\n\n**Example:**\n\n\n fun test(list: List): List {\n return if (list.isEmpty()) {\n println()\n foo()\n } else {\n list\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(list: List): List {\n return list.ifEmpty {\n println()\n foo()\n }\n }\n\nThis inspection only reports if the Kotlin language version of the project or module is 1.3 or higher." + }, + { + "shortName": "ReplaceWithImportAlias", + "displayName": "Fully qualified name can be replaced with existing import alias", + "enabled": false, + "description": "Reports fully qualified names that can be replaced with an existing import alias.\n\n**Example:**\n\n\n import foo.Foo as Bar\n fun main() {\n foo.Foo()\n }\n\nAfter the quick-fix is applied:\n\n\n import foo.Foo as Bar\n fun main() {\n Bar()\n }\n" + }, + { + "shortName": "ReplaceNegatedIsEmptyWithIsNotEmpty", + "displayName": "Negated call can be simplified", + "enabled": false, + "description": "Reports negation `isEmpty()` and `isNotEmpty()` for collections and `String`, or `isBlank()` and `isNotBlank()` for `String`.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces the negation call with the corresponding call from the Standard Library.\n\n**Example:**\n\n\n fun main() {\n val list = listOf(1,2,3)\n if (!list.isEmpty()) {\n // do smth\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun main() {\n val list = listOf(1,2,3)\n if (list.isNotEmpty()) {\n // do smth\n }\n }\n" + }, + { + "shortName": "SimplifyBooleanWithConstants", + "displayName": "Boolean expression can be simplified", + "enabled": false, + "description": "Reports boolean expression parts that can be reduced to constants.\n\nThe quick-fix simplifies the condition.\n\n**Example:**\n\n\n fun use(arg: Boolean) {\n if (false == arg) {\n\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun use(arg: Boolean) {\n if (!arg) {\n\n }\n }\n" + }, + { + "shortName": "UseWithIndex", + "displayName": "Manually incremented index variable can be replaced with use of 'withIndex()'", + "enabled": false, + "description": "Reports `for` loops with a manually incremented index variable.\n\n`for` loops with a manually incremented index variable can be simplified with the `withIndex()` function.\n\n**Use withIndex() instead of manual index increment** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n fun foo(list: List): Int? {\n var index = 0\n for (s in list) { <== can be simplified\n val x = s.length * index\n index++\n if (x > 0) return x\n }\n return null\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(list: List): Int? {\n for ((index, s) in list.withIndex()) {\n val x = s.length * index\n if (x > 0) return x\n }\n return null\n }\n" + }, + { + "shortName": "SimplifyAssertNotNull", + "displayName": "'assert' call can be replaced with '!!' or '?:'", + "enabled": false, + "description": "Reports `assert` calls that check a not null value of the declared variable.\n\nUsing `!!` or `?:` makes your code simpler.\n\nThe quick-fix replaces `assert` with `!!` or `?:` operator in the variable initializer.\n\n**Example:**\n\n\n fun foo(p: Array) {\n val v = p[0]\n assert(v != null, { \"Should be not null\" })\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(p: Array) {\n val v = p[0] ?: error(\"Should be not null\")\n }\n" + }, + { + "shortName": "ReplaceManualRangeWithIndicesCalls", + "displayName": "Range can be converted to indices or iteration", + "enabled": false, + "description": "Reports `until` and `rangeTo` operators that can be replaced with `Collection.indices` or iteration over collection inside `for` loop.\n\nUsing syntactic sugar makes your code simpler.\n\nThe quick-fix replaces the manual range with the corresponding construction.\n\n**Example:**\n\n\n fun main(args: Array) {\n for (index in 0..args.size - 1) {\n println(args[index])\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun main(args: Array) {\n for (element in args) {\n println(element)\n }\n }\n" + }, + { + "shortName": "ImplicitThis", + "displayName": "Implicit 'this'", + "enabled": false, + "description": "Reports usages of implicit **this** .\n\n**Example:**\n\n\n class Foo {\n fun s() = \"\"\n\n fun test() {\n s()\n }\n }\n\nThe quick fix specifies **this** explicitly:\n\n\n class Foo {\n fun s() = \"\"\n\n fun test() {\n this.s()\n }\n }\n" + }, + { + "shortName": "RedundantAsSequence", + "displayName": "Redundant 'asSequence' call", + "enabled": false, + "description": "Reports redundant `asSequence()` call that can never have a positive performance effect.\n\n\n`asSequence()` speeds up collection processing that includes multiple operations because it performs operations lazily\nand doesn't create intermediate collections.\n\n\nHowever, if a terminal operation (such as `toList()`) is used right after `asSequence()`, this doesn't give\nyou any positive performance effect.\n\n**Example:**\n\n\n fun test(list: List) {\n list.asSequence().last()\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(list: List) {\n list.last()\n }\n" + }, + { + "shortName": "CanBeVal", + "displayName": "Local 'var' is never modified and can be declared as 'val'", + "enabled": false, + "description": "Reports local variables declared with the `var` keyword that are never modified.\n\nKotlin encourages to declare practically immutable variables using the `val` keyword, ensuring that their value will never change.\n\n**Example:**\n\n\n fun example() {\n var primeNumbers = listOf(1, 2, 3, 5, 7, 11, 13)\n var fibonacciNumbers = listOf(1, 1, 2, 3, 5, 8, 13)\n print(\"Same numbers: \" + primeNumbers.intersect(fibonacciNumbers))\n }\n\nA quick-fix replaces the `var` keyword with `val`:\n\n\n fun example() {\n val primeNumbers = listOf(1, 2, 3, 5, 7, 11, 13)\n val fibonacciNumbers = listOf(1, 1, 2, 3, 5, 8, 13)\n print(\"Same numbers: \" + primeNumbers.intersect(fibonacciNumbers))\n }\n" + }, + { + "shortName": "JavaMapForEach", + "displayName": "Java Map.forEach method call should be replaced with Kotlin's forEach", + "enabled": false, + "description": "Reports a Java Map.`forEach` method call that can be replaced with Kotlin's **forEach** .\n\n**Example:**\n\n\n fun test(map: HashMap) {\n map.forEach { (key, value) ->\n foo(key, value)\n }\n }\n\n fun foo(i: Int, s: String) {}\n\nThe quick fix removes parentheses:\n\n\n fun test(map: HashMap) {\n map.forEach { key, value ->\n foo(key, value)\n }\n }\n\n fun foo(i: Int, s: String) {}\n" + }, + { + "shortName": "RedundantObjectTypeCheck", + "displayName": "Non-idiomatic 'is' type check for an object", + "enabled": false, + "description": "Reports non-idiomatic `is` type checks for an object.\n\nIt's recommended to replace such checks with reference comparison.\n\n**Example:**\n\n\n object Foo\n\n fun foo(arg: Any) = when {\n arg is Foo -> ...\n arg !is Foo -> ...\n }\n\nAfter the quick-fix is applied:\n\n\n object Foo\n\n fun foo(arg: Any) = when {\n arg === Foo -> ...\n arg !== Foo -> ...\n }\n" + }, + { + "shortName": "ReplaceSubstringWithSubstringAfter", + "displayName": "'substring' call should be replaced with 'substringAfter'", + "enabled": false, + "description": "Reports calls like `s.substring(s.indexOf(x))` that can be replaced with `s.substringAfter(x)`.\n\nUsing `s.substringAfter(x)` makes your code simpler.\n\nThe quick-fix replaces the `substring` call with `substringAfter`.\n\n**Example:**\n\n\n fun foo(s: String) {\n s.substring(s.indexOf('x'))\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(s: String) {\n s.substringAfter('x')\n }\n" + }, + { + "shortName": "ReplaceAssociateFunction", + "displayName": "'associate' can be replaced with 'associateBy' or 'associateWith'", + "enabled": false, + "description": "Reports calls to `associate()` and `associateTo()` that can be replaced with `associateBy()` or `associateWith()`.\n\n\nBoth functions accept a transformer function applied to elements of a given sequence or collection (as a receiver).\nThe pairs are then used to build the resulting `Map`.\n\n\nGiven the transformer refers to `it`, the `associate[To]()` call can be replaced with more performant `associateBy()`\nor `associateWith()`.\n\n**Examples:**\n\n fun getKey(i: Int) = 1L\n fun getValue(i: Int) = 1L\n\n fun test() {\n arrayOf(1).associate { getKey(it) to it } // replaceable 'associate()'\n listOf(1).associate { it to getValue(it) } // replaceable 'associate()'\n }\n\nAfter the quick-fix is applied:\n\n fun getKey(i: Int) = 1L\n fun getValue(i: Int) = 1L\n\n fun test() {\n arrayOf(1).associateBy { getKey(it) }\n listOf(1).associateWith { getValue(it) }\n }\n" + }, + { + "shortName": "LiftReturnOrAssignment", + "displayName": "Return or assignment can be lifted out", + "enabled": false, + "description": "Reports `if`, `when`, and `try` statements that can be converted to expressions by lifting the `return` statement or an assignment out.\n\n**Example:**\n\n\n fun foo(arg: Int): String {\n when (arg) {\n 0 -> return \"Zero\"\n 1 -> return \"One\"\n else -> return \"Multiple\"\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(arg: Int): String {\n return when (arg) {\n 0 -> \"Zero\"\n 1 -> \"One\"\n else -> \"Multiple\"\n }\n }\n" + }, + { + "shortName": "NestedLambdaShadowedImplicitParameter", + "displayName": "Nested lambda has shadowed implicit parameter", + "enabled": false, + "description": "Reports nested lambdas with shadowed implicit parameters.\n\n**Example:**\n\n\n fun foo(listOfLists: List>) {\n listOfLists.forEach {\n it.forEach {\n println(it)\n }\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(listOfLists: List>) {\n listOfLists.forEach {\n it.forEach { it1 ->\n println(it1)\n }\n }\n }\n" + }, + { + "shortName": "AddVarianceModifier", + "displayName": "Type parameter can have 'in' or 'out' variance", + "enabled": false, + "description": "Reports type parameters that can have `in` or `out` variance.\n\nUsing `in` and `out` variance provides more precise type inference in Kotlin and clearer code semantics.\n\n**Example:**\n\n\n class Box(val obj: T)\n\n fun consumeString(box: Box) {}\n fun consumeCharSequence(box: Box) {}\n\n fun usage(box: Box) {\n consumeString(box)\n consumeCharSequence(box) // Compilation error\n }\n\nA quick-fix adds the matching variance modifier:\n\n\n class Box(val obj: T)\n\n fun consumeString(box: Box) {}\n fun consumeCharSequence(box: Box) {}\n\n fun usage(box: Box) ++{\n consumeString(box)\n consumeCharSequence(box) // OK\n }\n" + }, + { + "shortName": "SimplifyNegatedBinaryExpression", + "displayName": "Negated boolean expression can be simplified", + "enabled": false, + "description": "Reports negated binary expressions that can be simplified.\n\nThe quick-fix simplifies the binary expression.\n\n**Example:**\n\n\n fun test(n: Int) {\n !(0 == 1)\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(n: Int) {\n 0 != 1\n }\n" + }, + { + "shortName": "MemberVisibilityCanBePrivate", + "displayName": "Class member can have 'private' visibility", + "enabled": false, + "description": "Reports declarations that can be made `private` to follow the encapsulation principle.\n\n**Example:**\n\n\n class Service(val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n\nAfter the quick-fix is applied (considering there are no usages of `url` outside of `Service` class):\n\n\n class Service(private val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n" + }, + { + "shortName": "SuspiciousAsDynamic", + "displayName": "Suspicious 'asDynamic' member invocation", + "enabled": false, + "description": "Reports usages of `asDynamic` function on a receiver of dynamic type.\n\n`asDynamic` function has no effect for expressions of dynamic type.\n\n`asDynamic` function on a receiver of dynamic type can lead to runtime problems because `asDynamic`\nwill be executed in JavaScript environment, and such function may not be present at runtime.\nThe intended way is to use this function on usual Kotlin type.\n\n**Remove \"asDynamic\" invocation** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n fun wrongUsage(d: Dynamic) {\n d.asDynamic().foo() // <== redundant, quick-fix simplifies the call expression to \"d.foo()\"\n }\n" + }, + { + "shortName": "ReplaceReadLineWithReadln", + "displayName": "'readLine' can be replaced with 'readln' or 'readlnOrNull'", + "enabled": false, + "description": "Reports calls to `readLine()` that can be replaced with `readln()` or `readlnOrNull()`.\n\n\nUsing corresponding functions makes your code simpler.\n\n\nThe quick-fix replaces `readLine()!!` with `readln()` and `readLine()` with `readlnOrNull()`.\n\n**Examples:**\n\n\n val x = readLine()!!\n val y = readLine()?.length\n\nAfter the quick-fix is applied:\n\n\n val x = readln()\n val y = readlnOrNull()?.length\n" + }, + { + "shortName": "SimplifyNestedEachInScopeFunction", + "displayName": "Scope function with nested forEach can be simplified", + "enabled": false, + "description": "Reports `forEach` functions in the scope functions such as `also` or `apply` that can be simplified.\n\n**Convert forEach call to onEach** quick-fix can be used to amend the code automatically.\n\nExamples:\n\n\n fun test(list: List) {\n val x = list.also { it.forEach { it + 4 } }.toString()\n val y = list.apply { forEach { println(it) } }\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(list: List) {\n val x = list.onEach { it + 4 }.toString()\n val y = list.onEach { println(it) }\n }\n" + }, + { + "shortName": "ReplaceMapIndexedWithListGenerator", + "displayName": "Replace 'mapIndexed' with List generator", + "enabled": false, + "description": "Reports a `mapIndexed` call that can be replaced by `List` generator.\n\n**Example:**\n\n\n val a = listOf(1, 2, 3).mapIndexed { i, _ ->\n i + 42\n }\n\nAfter the quick-fix is applied:\n\n\n val a = List(listOf(1, 2, 3).size) { i ->\n i + 42\n }\n" + }, + { + "shortName": "LoopToCallChain", + "displayName": "Loop can be replaced with stdlib operations", + "enabled": false, + "description": "Reports `for` loops that can be replaced with a sequence of stdlib operations (like `map`, `filter`, and so on).\n\n**Example:**\n\n\n fun foo(list: List): List {\n val result = ArrayList()\n for (s in list) {\n if (s.length > 0)\n result.add(s.hashCode())\n }\n return result\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(list: List): List {\n val result = list\n .filter { it.length > 0 }\n .map { it.hashCode() }\n return result\n }\n" + }, + { + "shortName": "UnusedMainParameter", + "displayName": "Main parameter is not necessary", + "enabled": false, + "description": "Reports `main` function with an unused single parameter." + }, + { + "shortName": "FunctionWithLambdaExpressionBody", + "displayName": "Function with '= { ... }' and inferred return type", + "enabled": false, + "description": "Reports functions with `= { ... }` and inferred return type.\n\n**Example:**\n\n\n fun sum(a: Int, b: Int) = { a + b } // The return type of this function is '() -> Int'.\n\nThe quick fix removes braces:\n\n\n fun sum(a: Int, b: Int) = a + b\n" + }, + { + "shortName": "ConvertTwoComparisonsToRangeCheck", + "displayName": "Two comparisons should be converted to a range check", + "enabled": false, + "description": "Reports two consecutive comparisons that can be converted to a range check.\n\nChecking against a range makes code simpler by removing test subject duplication.\n\n**Example:**\n\n\n fun checkMonth(month: Int): Boolean {\n return month >= 1 && month <= 12\n }\n\nA quick-fix replaces the comparison-based check with a range one:\n\n\n fun checkMonth(month: Int): Boolean {\n return month in 1..12\n }\n" + }, + { + "shortName": "ReplaceUntilWithRangeUntil", + "displayName": "Replace 'until' with '..<' operator", + "enabled": false, + "description": "Reports `until` that can be replaced with `..<` operator.\n\nEvery `until` to `..<` replacement doesn't change the semantic in any way.\n\nThe UX research shows that developers make \\~20-30% fewer errors when reading code containing `..<` compared to `until`.\n\n**Example:**\n\n\n fun main(args: Array) {\n for (index in 0 until args.size) {\n println(index)\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun main(args: Array) {\n for (index in 0.. Int) {\n b(a * a)\n }\n\n fun foo() {\n square(2, { it })\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo() {\n square(2){ it }\n }\n" + }, + { + "shortName": "CascadeIf", + "displayName": "Cascade if can be replaced with when", + "enabled": false, + "description": "Reports `if` statements with three or more branches that can be replaced with the `when` expression.\n\n**Example:**\n\n\n fun checkIdentifier(id: String) {\n fun Char.isIdentifierStart() = this in 'A'..'z'\n fun Char.isIdentifierPart() = isIdentifierStart() || this in '0'..'9'\n\n if (id.isEmpty()) {\n print(\"Identifier is empty\")\n } else if (!id.first().isIdentifierStart()) {\n print(\"Identifier should start with a letter\")\n } else if (!id.subSequence(1, id.length).all(Char::isIdentifierPart)) {\n print(\"Identifier should contain only letters and numbers\")\n }\n }\n\nA quick-fix converts the `if` expression to `when`:\n\n\n fun checkIdentifier(id: String) {\n fun Char.isIdentifierStart() = this in 'A'..'z'\n fun Char.isIdentifierPart() = isIdentifierStart() || this in '0'..'9'\n\n when {\n id.isEmpty() -> {\n print(\"Identifier is empty\")\n }\n !id.first().isIdentifierStart() -> {\n print(\"Identifier should start with a letter\")\n }\n !id.subSequence(1, id.length).all(Char::isIdentifierPart) -> {\n print(\"Identifier should contain only letters and numbers\")\n }\n }\n }\n" + }, + { + "shortName": "OptionalExpectation", + "displayName": "Optionally expected annotation has no actual annotation", + "enabled": false, + "description": "Reports optionally expected annotations without actual annotation in some platform modules.\n\n**Example:**\n\n // common code\n @OptionalExpectation\n expect annotation class JvmName(val name: String)\n\n @JvmName(name = \"JvmFoo\")\n fun foo() { }\n\n // jvm code\n actual annotation class JvmName(val name: String)\n\nThe inspection also reports cases when `actual annotation class JvmName` is omitted for non-JVM platforms (for example, Native)." + }, + { + "shortName": "IfThenToSafeAccess", + "displayName": "If-Then foldable to '?.'", + "enabled": false, + "description": "Reports `if-then` expressions that can be folded into safe-access (`?.`) expressions.\n\n**Example:**\n\n\n fun bar(x: String) = \"\"\n\n fun foo(a: String?) {\n if (a != null) bar(a) else null\n }\n\nThe quick fix converts the `if-then` expression into a safe-access (`?.`) expression:\n\n\n fun bar(x: String) = \"\"\n\n fun foo(a: String?) {\n a?.let { bar(it) }\n }\n" + }, + { + "shortName": "RedundantElseInIf", + "displayName": "Redundant 'else' in 'if'", + "enabled": false, + "description": "Reports redundant `else` in `if` with `return`\n\n**Example:**\n\n\n fun foo(arg: Boolean): Int {\n if (arg) return 0\n else { // This else is redundant, code in braces could be just shifted left\n someCode()\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(arg: Boolean): Int {\n if (arg) return 0\n someCode()\n }\n" + }, + { + "shortName": "ReplacePutWithAssignment", + "displayName": "'map.put()' can be converted to assignment", + "enabled": false, + "description": "Reports `map.put` function calls that can be replaced with indexing operator (`[]`).\n\nUsing syntactic sugar makes your code simpler.\n\nThe quick-fix replaces `put` call with the assignment.\n\n**Example:**\n\n\n fun foo(map: MutableMap) {\n map.put(42, \"foo\")\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(map: MutableMap) {\n map[42] = \"foo\"\n }\n" + }, + { + "shortName": "ConvertSecondaryConstructorToPrimary", + "displayName": "Convert to primary constructor", + "enabled": false, + "description": "Reports a secondary constructor that can be replaced with a more concise primary constructor.\n\n**Example:**\n\n\n class User {\n val name: String\n\n constructor(name: String) {\n this.name = name\n }\n }\n\nA quick-fix converts code automatically:\n\n\n class User(val name: String) {\n }\n" + }, + { + "shortName": "ReplaceGetOrSet", + "displayName": "Explicit 'get' or 'set' call", + "enabled": false, + "description": "Reports explicit calls to `get` or `set` functions which can be replaced by an indexing operator `[]`.\n\n\nKotlin allows custom implementations for the predefined set of operators on types.\nTo overload an operator, you can mark the corresponding function with the `operator` modifier:\n\n\n operator fun get(index: Int) {}\n operator fun set(index: Int, value: Int) {}\n \nThe functions above correspond to the indexing operator.\n\n**Example:**\n\n class Test {\n operator fun get(i: Int): Int = 0\n }\n\n fun test() {\n Test().get(0) // replaceable 'get()'\n }\n\nAfter the quick-fix is applied:\n\n class Test {\n operator fun get(i: Int): Int = 0\n }\n\n fun test() {\n Test()[0]\n }\n" + }, + { + "shortName": "Destructure", + "displayName": "Use destructuring declaration", + "enabled": false, + "description": "Reports declarations that can be destructured.\n\n**Example:**\n\n\n data class My(val first: String, val second: Int, val third: Boolean)\n\n fun foo(list: List) {\n list.forEach { my ->\n println(my.second)\n println(my.third)\n }\n }\n\nThe quick-fix destructures the declaration and introduces new variables with names from the corresponding class:\n\n\n data class My(val first: String, val second: Int, val third: Boolean)\n\n fun foo(list: List) {\n list.forEach { (_, second, third) ->\n println(second)\n println(third)\n }\n }\n" + }, + { + "shortName": "ConvertTryFinallyToUseCall", + "displayName": "Convert try / finally to use() call", + "enabled": false, + "description": "Reports a `try-finally` block with `resource.close()` in `finally` which can be converted to a `resource.use()` call.\n\n`use()` is easier to read and less error-prone as there is no need in explicit `close()` call.\n\n**Example:**\n\n\n fun example() {\n val reader = File(\"file.txt\").bufferedReader()\n try {\n reader.lineSequence().forEach(::print)\n } finally {\n reader.close()\n }\n }\n\nAfter the quick-fix applied:\n\n\n fun example() {\n File(\"file.txt\").bufferedReader().use { reader ->\n reader.lineSequence().forEach(::print)\n }\n }\n" + }, + { + "shortName": "ReplaceArrayOfWithLiteral", + "displayName": "'arrayOf' call can be replaced with array literal [...]", + "enabled": false, + "description": "Reports `arrayOf` calls that can be replaced with array literals `[...]`.\n\n**Examples:**\n\n annotation class MyAnnotation(val strings: Array)\n\n @MyAnnotation(arrayOf(\"alpha\", \"beta\", \"omega\")) // replaceable 'arrayOf()'\n class MyClass\n\nAfter the quick-fix is applied:\n\n annotation class MyAnnotation(val strings: Array)\n\n @MyAnnotation([\"alpha\", \"beta\", \"omega\"])\n class MyClass\n" + }, + { + "shortName": "ReplaceRangeToWithUntil", + "displayName": "'rangeTo' or the '..' call should be replaced with 'until'", + "enabled": false, + "description": "Reports calls to `rangeTo` or the `..` operator instead of calls to `until`.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces `rangeTo` or the `..` call with `until`.\n\n**Example:**\n\n\n fun foo(a: Int) {\n for (i in 0..a - 1) {\n\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(a: Int) {\n for (i in 0 until a) {\n\n }\n }\n" + }, + { + "shortName": "ReplaceToWithInfixForm", + "displayName": "'to' call should be replaced with infix form", + "enabled": false, + "description": "Reports `to` function calls that can be replaced with the infix form.\n\nUsing the infix form makes your code simpler.\n\nThe quick-fix replaces `to` with the infix form.\n\n**Example:**\n\n\n fun foo(a: Int, b: Int) {\n val pair = a.to(b)\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(a: Int, b: Int) {\n val pair = a to b\n }\n" + }, + { + "shortName": "UnclearPrecedenceOfBinaryExpression", + "displayName": "Multiple operators with different precedence", + "enabled": false, + "description": "Reports binary expressions that consist of different operators without parentheses.\n\nSuch expressions can be less readable due to different [precedence rules](https://kotlinlang.org/docs/reference/grammar.html#expressions) of operators.\n\nExample:\n\n```\n fun foo(b: Boolean?, i: Int?) {\n val x = b ?: i == null // evaluated as `(b ?: i) == null`\n val y = i ?: 0 + 1 // evaluated as `i ?: (0 + 1)`\n }\n```" + } + ] + }, + { + "name": "JVM languages", + "inspections": [ + { + "shortName": "OverrideOnly", + "displayName": "Method can only be overridden", + "enabled": true, + "description": "Reports calls to API methods marked with `@ApiStatus.OverrideOnly`.\n\n\nThe `@ApiStatus.OverrideOnly` annotation indicates that the method is part of SPI (Service Provider Interface).\nClients of the declaring library should implement or override such methods, not call them directly.\nMarking a class or interface with this annotation is the same as marking every method with it." + }, + { + "shortName": "MissingDeprecatedAnnotationOnScheduledForRemovalApi", + "displayName": "Missing '@Deprecated' annotation on scheduled for removal API", + "enabled": true, + "description": "Reports declarations marked with `@ApiStatus.ScheduledForRemoval` without `@Deprecated`.\n\nExample:\n\n```\n @ApiStatus.ScheduledForRemoval(inVersion = \"2017.3\")\n public void myLegacyMethod() { }\n```\n\nAfter the quick-fix is applied the result looks like:\n\n```\n @Deprecated\n @ApiStatus.ScheduledForRemoval(inVersion = \"2017.3\")\n public void myLegacyMethod() { }\n```" + }, + { + "shortName": "SourceToSinkFlow", + "displayName": "Non-safe string is passed to safe method", + "enabled": false, + "description": "Reports cases when non-safe string is passed to a method with parameter marked with annotation `org.checkerframework.checker.tainting.qual.Untainted`.\n\n\nSafe string is:\n\n* call of method that is marked as `@Untainted`\n* local variable or method parameter that does not call non-safe methods\n* field, local variable or parameter that is marked as `@Untainted` and does not have non-safe methods calls assigned\n\n\nExample:\n\n\n void doSmth(boolean b) {\n String s = safe();\n String s1 = \"other\";\n if (b) s1 = s;\n sink(s);\n }\n \n String sink(@Untainted String s) {}\n\n\nHere we do not have non-safe string assignments to `s` so warning is not produced. On the other hand:\n\n\n void doSmth(boolean b) {\n String s = safe();\n String s1 = \"other\";\n s1 = foo();\n if (b) s = s1;\n sink(s); // warning here\n }\n \n String foo();\n\n String sink(@Untainted String s) {}\n\n\nHere we have a warning since `s1` has an unknown state after `foo` call result assignment.\n\nNew in 2021.2" + }, + { + "shortName": "SerializableHasSerialVersionUIDField", + "displayName": "Serializable class without 'serialVersionUID'", + "enabled": false, + "description": "Reports classes that implement `Serializable` and do not declare a `serialVersionUID` field.\n\n\nWithout a `serialVersionUID` field, any change to the class will make previously serialized versions unreadable.\n\n**Example:**\n\n\n class Main implements Serializable {\n }\n\nAfter the quick-fix is applied:\n\n\n class Main implements Serializable {\n private static final long serialVersionUID = -1446398935944895849L;\n }\n\nWhen using a language level of JDK 14 or higher, the quickfix will also add the `java.io.Serial` annotation.\n\nUse the following options to configure the inspection:\n\n* List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit `Serializable` from a superclass but are not intended for serialization.\n* Whether to ignore `Serializable` anonymous classes." + }, + { + "shortName": "Dependency", + "displayName": "Illegal package dependencies", + "enabled": true, + "description": "Reports illegal dependencies between scopes according to the dependency rules given. Dependency rules can be used to prohibit usage from a scope to another scope.\n\nUse the **Configure dependency rules** button below to customize validation rules." + }, + { + "shortName": "ThreadRun", + "displayName": "Call to 'Thread.run()'", + "enabled": true, + "description": "Reports calls to `run()` on `java.lang.Thread` or any of its subclasses.\n\n\nWhile occasionally intended, this is usually a mistake, because `run()` doesn't start a new thread.\nTo execute the code in a separate thread, `start()` should be used." + }, + { + "shortName": "UnstableApiUsage", + "displayName": "Unstable API Usage", + "enabled": true, + "description": "Reports usages of an API marked with one of the annotations as unstable. Such an API may be changed or removed in future versions, breaking the code that uses it.\n\nThe annotations which are used to mark unstable APIs are shown in the list below.\n\nBy default, the inspection ignores usages of unstable APIs\nif their declarations are located in sources of the same project. In such cases it'll be possible to update the usages when you change APIs.\nHowever, it may be inconvenient if the project is big, so one can switch off the **Ignore API declared in this project** option to report\nthe usages of unstable APIs declared in both the project sources and libraries." + }, + { + "shortName": "Since15", + "displayName": "Usages of API which isn't available at the configured language level", + "enabled": false, + "description": "Reports usages of the API that is unavailable at the configured language level. This inspection does 3 things:\n\n* Highlight usage of generified classes when the language level is below Java 7.\n* Highlight when default methods are not overridden and the language level is below Java 8.\n* Highlight usage of API when the language level is lower than marked using the `@since` tag in the documentation.\n\n\nUse the **Forbid API usages** option to forbid usages of the API in respect to the project or custom language level." + }, + { + "shortName": "MustAlreadyBeRemovedApi", + "displayName": "API must already be removed", + "enabled": true, + "description": "Reports declarations marked with `@ApiStatus.ScheduledForRemoval` that should have been removed in the current version of the declaring library.\n\nIt compares the specified scheduled removal version with the version that you can set below.\n\n\nSpecify the version as a string separated with dots and optionally postfixed with\n`alpha`, `beta`, `snapshot`, or `eap`.\n\nExamples of valid versions: `1.0`, `2.3.1`, `2018.1`, `7.5-snapshot`, `3.0-eap`.\n\n\nVersion comparison is intuitive: `1.0 < 2.0`, `1.0-eap < 1.0`, `2.3-snapshot < 2.3` and so on.\nFor detailed comparison logic, refer to the implementation of [VersionComparatorUtil](https://github.com/JetBrains/intellij-community/blob/master/platform/util-rt/src/com/intellij/util/text/VersionComparatorUtil.java)." + }, + { + "shortName": "UnstableTypeUsedInSignature", + "displayName": "Unstable type is used in signature", + "enabled": true, + "description": "Reports declarations of classes, methods, and fields that reference an unstable API type in the signature, but are not marked with the same unstable annotation.\n\n\nThis inspection ensures that the signatures of a public API do not expose any *unstable* (internal, experimental) types.\nFor example, if a method returns an *experimental* class, the method itself is considered *experimental*\nbecause incompatible changes of the type (deletion or move to another package) lead to incompatible method signature changes.\n\nUse the list below to specify which annotations mark an unstable API." + }, + { + "shortName": "BlockingMethodInNonBlockingContext", + "displayName": "Possibly blocking call in non-blocking context", + "enabled": true, + "description": "Reports thread-blocking method calls in code fragments where threads should not be blocked.\n\n**Example (Project Reactor):**\n\n\n Flux.just(\"1\").flatMap(f -> {\n Flux just = loadUsersFromDatabase();\n just.toIterable(); // Error: blocking operator call in non-blocking scope\n return just;\n }\n );\n\nConsider running blocking code [with a proper\nscheduler](https://projectreactor.io/docs/core/release/reference/#faq.wrap-blocking), for example `Schedulers.boundedElastic()`, or try to find an alternative non-blocking API.\n\n**Example (Kotlin Coroutines):**\n\n\n suspend fun exampleFun() {\n Thread.sleep(100); // Error: blocking method call inside suspend function\n }\n\nConsider running blocking code [with a special dispatcher](https://kotlinlang.org/docs/coroutine-context-and-dispatchers.html),\nfor example `Dispatchers.IO`, or try to find an alternative non-blocking API.\n\nConfigure the inspection:\n\n* In the **Blocking Annotations** list, specify annotations that mark thread-blocking methods.\n* In the **Non-Blocking Annotations** list, specify annotations that mark non-blocking methods.\n\nSpecified annotations can be used as [External Annotations](https://www.jetbrains.com/help/idea/external-annotations.html)" + }, + { + "shortName": "NonExtendableApiUsage", + "displayName": "Class, interface, or method should not be extended", + "enabled": true, + "description": "Reports classes, interfaces and methods that extend, implement, or override API elements marked with `@ApiStatus.NonExtendable`.\n\n\nThe `@ApiStatus.NonExtendable` annotation indicates that the class, interface, or method **must not be extended,\nimplemented, or overridden** .\nSince casting such interfaces and classes to the internal library implementation is rather common,\nif a client provides a different implementation, you will get `ClassCastException`.\nAdding new abstract methods to such classes and interfaces will break the compatibility with the client's implementations." + }, + { + "shortName": "IllegalDependencyOnInternalPackage", + "displayName": "Illegal dependency on internal package", + "enabled": false, + "description": "Reports references in modules without `module-info.java` on packages which are not exported from named modules.\n\nSuch configuration may occur when some modules in the project are already migrated to Java modules but others are still non-modular.\nBy analogy to the JDK, such non-modular code should not get access to the code in named modules which is not explicitly exported." + } + ] + }, + { + "name": "Redundant constructs", + "inspections": [ + { + "shortName": "SimpleRedundantLet", + "displayName": "Redundant receiver-based 'let' call", + "enabled": false, + "description": "Reports redundant receiver-based `let` calls.\n\nThe quick-fix removes the redundant `let` call.\n\n**Example:**\n\n\n fun test(s: String?): Int? = s?.let { it.length }\n\nAfter the quick-fix is applied:\n\n\n fun test(s: String?): Int? = s?.length\n" + }, + { + "shortName": "RemoveSingleExpressionStringTemplate", + "displayName": "Redundant string template", + "enabled": false, + "description": "Reports single-expression string templates that can be safely removed.\n\n**Example:**\n\n val x = \"Hello\"\n val y = \"$x\"\n\nAfter the quick-fix is applied:\n\n val x = \"Hello\"\n val y = x // <== Updated\n" + }, + { + "shortName": "RedundantSetter", + "displayName": "Redundant property setter", + "enabled": false, + "description": "Reports redundant property setters.\n\n\nSetter is considered to be redundant in one of the following cases:\n\n1. Setter has no body. Accessor visibility isn't changed, declaration isn't `external` and has no annotations.\n\n\n var myPropWithRedundantSetter: Int = 0\n set // redundant\n\n var myPropA: Int = 0\n private set // OK - property visibility is changed to private\n\n var myPropB: Int = 0\n external set // OK - implemented not in Kotlin (external)\n\n var myPropC: Int = 0\n @Inject set // OK - accessor is annotated\n \n2. Setter body is a block with a single statement assigning the parameter to the backing field.\n\n\n var prop: Int = 0\n set(value) { // redundant\n field = value\n }\n \n" + }, + { + "shortName": "RedundantLambdaOrAnonymousFunction", + "displayName": "Redundant creation of lambda or anonymous function", + "enabled": false, + "description": "Reports lambdas or anonymous functions that are created and used immediately.\n\n\n fun test() {\n ({ println() })() // redundant\n (fun() { println() })() // redundant\n }\n" + }, + { + "shortName": "RedundantRequireNotNullCall", + "displayName": "Redundant 'requireNotNull' or 'checkNotNull' call", + "enabled": false, + "description": "Reports redundant `requireNotNull` or `checkNotNull` call on non-nullable expressions.\n\n**Example:**\n\n\n fun foo(i: Int) {\n requireNotNull(i) // This 'i' is always not null, so this 'requireNotNull' call is redundant.\n ...\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(i: Int) {\n ...\n }\n" + }, + { + "shortName": "RedundantEnumConstructorInvocation", + "displayName": "Redundant enum constructor invocation", + "enabled": false, + "description": "Reports redundant constructor invocation on an enum entry.\n\n**Example:**\n\n\n enum class Baz(i: Int = 0) {\n A(1),\n B(),\n C(),\n }\n\nAfter the quick-fix is applied:\n\n\n enum class Baz(i: Int = 0) {\n A(1),\n B,\n C,\n }\n" + }, + { + "shortName": "WhenWithOnlyElse", + "displayName": "'when' has only 'else' branch and can be simplified", + "enabled": false, + "description": "Reports `when` expressions with only an `else` branch that can be simplified.\n\n**Simplify expression** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n fun redundant() {\n val x = when { // <== redundant, a quick-fix simplifies the when expression to \"val x = 1\"\n else -> 1\n }\n }\n" + }, + { + "shortName": "RedundantSemicolon", + "displayName": "Redundant semicolon", + "enabled": false, + "description": "Reports redundant semicolons (`;`) that can be safely removed.\n\n\nKotlin does not require a semicolon at the end of each statement or expression.\nA quick-fix is suggested to remove redundant semicolons.\n\n**Example:**\n\n\n val myMap = mapOf(\"one\" to 1, \"two\" to 2);\n myMap.forEach { (key, value) -> print(\"$key -> $value\")};\n\nAfter the quick-fix is applied:\n\n\n val myMap = mapOf(\"one\" to 1, \"two\" to 2)\n myMap.forEach { (key, value) -> print(\"$key -> $value\")}\n\nThere are two cases though where a semicolon is required:\n\n1. Several statements placed on a single line need to be separated with semicolons:\n\n\n map.forEach { val (key, value) = it; println(\"$key -> $value\") }\n\n2. `enum` classes that also declare properties or functions, require a semicolon after the list of enum constants:\n\n\n enum class Mode {\n SILENT, VERBOSE;\n\n fun isSilent(): Boolean = this == SILENT\n }\n \n" + }, + { + "shortName": "UnnecessaryOptInAnnotation", + "displayName": "Unnecessary '@OptIn' annotation", + "enabled": false, + "description": "Reports unnecessary opt-in annotations that can be safely removed.\n\n`@OptIn` annotation is required for the code using experimental APIs that can change\nany time in the future. This annotation becomes useless and possibly misleading if no such API is used\n(e.g., when the experimental API becomes stable and does not require opting in its usage anymore).\n\n\n**Remove annotation** quick-fix can be used to remove the unnecessary `@OptIn` annotation.\n\nExample:\n\n\n @OptIn(ExperimentalApi::class)\n fun foo(x: Bar) {\n x.baz()\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(x: Bar) {\n x.baz()\n }\n" + }, + { + "shortName": "ComplexRedundantLet", + "displayName": "Redundant argument-based 'let' call", + "enabled": false, + "description": "Reports a redundant argument-based `let` call.\n\n`let` is redundant when the lambda parameter is only used as a qualifier in a call expression.\n\nIf you need to give a name to the qualifying expression, declare a local variable.\n\n**Example:**\n\n\n fun splitNumbers() {\n \"1,2,3\".let { it.split(',') }\n }\n\nA quick-fix removes the extra `let()` call:\n\n\n fun example() {\n \"1,2,3\".split(',')\n }\n\nAlternative:\n\n\n fun splitNumbers() {\n val numbers = \"1,2,3\"\n numbers.split(',')\n }\n" + }, + { + "shortName": "RemoveRedundantSpreadOperator", + "displayName": "Redundant spread operator", + "enabled": false, + "description": "Reports the use of a redundant spread operator for a family of `arrayOf` function calls.\n\nUse the 'Remove redundant spread operator' quick-fix to clean up the code.\n\n**Examples:**\n\n\n fun foo(vararg s: String) { }\n\n fun bar(ss: Array) {\n foo(*arrayOf(\"abc\")) // for the both calls of 'foo', array creation\n foo(*arrayOf(*ss, \"zzz\")) // and its subsequent \"spreading\" is redundant\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(vararg s: String) { }\n\n fun bar(ss: Array) {\n foo(\"abc\")\n foo(*ss, \"zzz\")\n }\n" + }, + { + "shortName": "RemoveSetterParameterType", + "displayName": "Redundant setter parameter type", + "enabled": false, + "description": "Reports explicitly specified parameter types in property setters.\n\n\nSetter parameter type always matches the property type, so it's not required to be explicit.\nThe 'Remove explicit type specification' quick-fix allows amending the code accordingly.\n\n**Examples:**\n\n\n fun process(x: Int) {}\n\n var x: Int = 0\n set(value: Int) = process(value) // <== 'Int' specification can be safely omitted\n\nAfter the quick-fix is applied:\n\n\n fun process(x: Int) {}\n\n var x: Int = 0\n set(value) = process(value)\n" + }, + { + "shortName": "RemoveEmptyParenthesesFromLambdaCall", + "displayName": "Remove unnecessary parentheses from function call with lambda", + "enabled": false, + "description": "Reports redundant empty parentheses of function calls where the only parameter is a lambda that's outside the parentheses.\n\nUse the 'Remove unnecessary parentheses from function call with lambda' quick-fix to clean up the code.\n\n**Examples:**\n\n\n fun foo() {\n listOf(1).forEach() { }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo() {\n listOf(1).forEach { }\n }\n" + }, + { + "shortName": "RemoveExplicitSuperQualifier", + "displayName": "Unnecessary supertype qualification", + "enabled": false, + "description": "Reports `super` member calls with redundant supertype qualification.\n\n\nCode in a derived class can call its superclass functions and property accessors implementations using the `super` keyword.\nTo specify the supertype from which the inherited implementation is taken, `super` can be qualified by the supertype name in\nangle brackets, e.g. `super`. Sometimes this qualification is redundant and can be omitted.\nUse the 'Remove explicit supertype qualification' quick-fix to clean up the code.\n\n**Examples:**\n\n\n open class B {\n open fun foo(){}\n }\n\n class A : B() {\n override fun foo() {\n super.foo() // <== redundant because 'B' is the only supertype\n }\n }\n\n interface I {\n fun foo() {}\n }\n\n class C : B(), I {\n override fun foo() {\n super.foo() // <== here qualifier is needed to distinguish 'B.foo()' from 'I.foo()'\n }\n }\n\nAfter the quick-fix is applied:\n\n\n open class B {\n open fun foo(){}\n }\n\n class A : B() {\n override fun foo() {\n super.foo() // <== Updated\n }\n }\n\n interface I {\n fun foo() {}\n }\n\n class C : B(), I {\n override fun foo() {\n super.foo()\n }\n }\n" + }, + { + "shortName": "RedundantExplicitType", + "displayName": "Obvious explicit type", + "enabled": false, + "description": "Reports local variables' explicitly given types which are obvious and thus redundant, like `val f: Foo = Foo()`.\n\n**Example:**\n\n\n class Point(val x: Int, val y: Int)\n\n fun foo() {\n val t: Boolean = true\n val p: Point = Point(1, 2)\n val i: Int = 42\n }\n\nAfter the quick-fix is applied:\n\n\n class Point(val x: Int, val y: Int)\n\n fun foo() {\n val t = true\n val p = Point(1, 2)\n val i = 42\n }\n" + }, + { + "shortName": "UnusedSymbol", + "displayName": "Unused symbol", + "enabled": false, + "description": "Reports symbols that are not used or not reachable from entry points." + }, + { + "shortName": "RemoveEmptyPrimaryConstructor", + "displayName": "Redundant empty primary constructor", + "enabled": false, + "description": "Reports empty primary constructors when they are implicitly available anyway.\n\n\nA primary constructor is redundant and can be safely omitted when it does not have any annotations or visibility modifiers.\nUse the 'Remove empty primary constructor' quick-fix to clean up the code.\n\n**Examples:**\n\n\n class MyClassA constructor() // redundant, can be replaced with 'class MyClassA'\n\n annotation class MyAnnotation\n class MyClassB @MyAnnotation constructor() // required because of annotation\n\n class MyClassC private constructor() // required because of visibility modifier\n" + }, + { + "shortName": "RemoveEmptySecondaryConstructorBody", + "displayName": "Redundant constructor body", + "enabled": false, + "description": "Reports empty bodies of secondary constructors." + }, + { + "shortName": "RedundantGetter", + "displayName": "Redundant property getter", + "enabled": false, + "description": "Reports redundant property getters.\n\n**Example:**\n\n\n class Test {\n val a = 1\n get\n val b = 1\n get() = field\n }\n\nAfter the quick-fix is applied:\n\n\n class Test {\n val a = 1\n val b = 1\n }\n" + }, + { + "shortName": "RedundantIf", + "displayName": "Redundant 'if' statement", + "enabled": false, + "description": "Reports `if` statements which can be simplified to a single statement.\n\n**Example:**\n\n\n fun test() {\n if (foo()) {\n return true\n } else {\n return false\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun test() {\n return foo()\n }\n" + }, + { + "shortName": "RemoveExplicitTypeArguments", + "displayName": "Unnecessary type argument", + "enabled": false, + "description": "Reports function calls with type arguments that can be automatically inferred. Such type arguments are redundant and can be safely omitted.\n\nUse the 'Remove explicit type arguments' quick-fix to clean up the code.\n\n**Examples:**\n\n\n // 'String' type can be inferred here\n fun foo(): MutableList = mutableListOf()\n\n // Here 'String' cannot be inferred, type argument is required.\n fun bar() = mutableListOf()\n\nAfter the quick-fix is applied:\n\n\n fun foo(): MutableList = mutableListOf() <== Updated\n\n fun bar() = mutableListOf()\n" + }, + { + "shortName": "RedundantVisibilityModifier", + "displayName": "Redundant visibility modifier", + "enabled": false, + "description": "Reports visibility modifiers that match the default visibility of an element (`public` for most elements, `protected` for members that override a protected member)." + }, + { + "shortName": "RedundantInnerClassModifier", + "displayName": "Redundant 'inner' modifier", + "enabled": false, + "description": "Reports the `inner` modifier on a class as redundant if it doesn't reference members of its outer class.\n\n**Example:**\n\n\n class Foo {\n inner class InnerClass { // redundant `inner` modifier\n fun hello() {\n println(\"Hi!\")\n }\n }\n }\n\n class List {\n val objects = Array(42) { Any() }\n\n inner class Iterator { // Not redundant `inner` modifier\n fun next(): Any {\n return objects[0]\n }\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n class InnerClass { // redundant `inner` modifier\n fun hello() {\n println(\"Hi!\")\n }\n }\n }\n\n class List {\n val objects = Array(42) { Any() }\n\n inner class Iterator { // Not redundant `inner` modifier\n fun next(): Any {\n return objects[0]\n }\n }\n }\n" + }, + { + "shortName": "UnnecessaryVariable", + "displayName": "Unnecessary local variable", + "enabled": false, + "description": "Reports local variables that used only in the very next `return` statement or exact copies of other variables.\n\nSuch variables can be safely inlined to make the code more clear." + }, + { + "shortName": "RedundantWith", + "displayName": "Redundant 'with' call", + "enabled": false, + "description": "Reports redundant `with` function calls that don't access anything from the receiver.\n\n**Examples:**\n\n\n class MyClass {\n fun f(): String = \"\"\n }\n\n fun testRedundant() {\n with(c) { // <== 'with' is redundant since 'c' isn't used\n println(\"1\")\n }\n }\n\n fun testOk() {\n val c = MyClass()\n with(c) { // <== OK because 'f()' is effectively 'c.f()'\n println(f())\n }\n }\n" + }, + { + "shortName": "KotlinRedundantDiagnosticSuppress", + "displayName": "Redundant diagnostic suppression", + "enabled": false, + "description": "Reports usages of `@Suppress` annotations that can be safely removed because the compiler diagnostic they affect is no longer applicable in this context.\n\n**Example:**\n\n\n fun doSmth(@Suppress(\"UNUSED_PARAMETER\") used: Int) {\n println(used)\n }\n\nAfter the quick-fix is applied:\n\n\n fun doSmth(used: Int) {\n println(used)\n }\n" + }, + { + "shortName": "ConstantConditionIf", + "displayName": "Condition of 'if' expression is constant", + "enabled": false, + "description": "Reports `if` expressions that have `true` or `false` constant literal condition and can be simplified.\n\nWhile occasionally intended, this construction is confusing and often the result of a typo\nor previous refactoring.\n\n**Example:**\n\n\n fun example() {\n if (true) {\n throw IllegalStateException(\"Unexpected state\")\n }\n }\n\nA quick-fix removes the `if` condition:\n\n\n fun example() {\n throw IllegalStateException(\"Unexpected state\")\n }\n" + }, + { + "shortName": "RedundantLambdaArrow", + "displayName": "Redundant lambda arrow", + "enabled": false, + "description": "Reports redundant lambda arrows in lambdas without parameters.\n\n**Example:**\n\n\n fun foo(f: () -> Unit) = f()\n\n fun bar() {\n foo { -\\> println(\"Hi!\") }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(f: () -> Unit) = f()\n\n fun bar() {\n foo { println(\"Hi!\") }\n }\n" + }, + { + "shortName": "RedundantModalityModifier", + "displayName": "Redundant modality modifier", + "enabled": false, + "description": "Reports the modality modifiers that match the default modality of an element (`final` for most elements, `open` for members with an `override`).\n\n**Example:**\n\n\n final class Foo\n\n open class Bar : Comparable {\n open override fun compareTo(other: Bar): Int = 0\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo\n\n open class Bar : Comparable {\n override fun compareTo(other: Bar): Int = 0\n }\n" + }, + { + "shortName": "RemoveToStringInStringTemplate", + "displayName": "Redundant call to 'toString()' in string template", + "enabled": false, + "description": "Reports calls to `toString()` in string templates that can be safely removed.\n\n**Example:**\n\n fun foo(a: Int, b: Int) = a + b\n\n fun test(): String {\n return \"Foo: ${foo(0, 4).toString()}\" // 'toString()' is redundant\n }\n\nAfter the quick-fix is applied:\n\n fun foo(a: Int, b: Int) = a + b\n\n fun test(): String {\n return \"Foo: ${foo(0, 4)}\"\n }\n" + }, + { + "shortName": "KotlinUnusedImport", + "displayName": "Unused import directive", + "enabled": false, + "description": "Reports redundant `import` statements.\n\nDefault and unused imports can be safely removed.\n\n**Example:**\n\n\n import kotlin.*\n import kotlin.collections.*\n import kotlin.comparisons.*\n import kotlin.io.*\n import kotlin.ranges.*\n import kotlin.sequences.*\n import kotlin.text.*\n\n // jvm specific\n import java.lang.*\n import kotlin.jvm.*\n\n // js specific\n import kotlin.js.*\n\n import java.io.* // this import is unused and could be removed\n import java.util.*\n\n fun foo(list: ArrayList) {\n list.add(\"\")\n }\n" + }, + { + "shortName": "CanBePrimaryConstructorProperty", + "displayName": "Property is explicitly assigned to constructor parameter", + "enabled": false, + "description": "Reports properties that are explicitly assigned to primary constructor parameters.\n\nProperties can be declared directly in the primary constructor, reducing the amount of code and increasing code readability.\n\n**Example:**\n\n\n class User(name: String) {\n val name = name\n }\n\nA quick-fix joins the parameter and property declaration into a primary constructor parameter:\n\n\n class User(val name: String) {\n }\n" + }, + { + "shortName": "ReplaceWithIgnoreCaseEquals", + "displayName": "Should be replaced with 'equals(..., ignoreCase = true)'", + "enabled": false, + "description": "Reports case-insensitive comparisons that can be replaced with `equals(..., ignoreCase = true)`.\n\nBy using `equals()` you don't have to allocate extra strings with `toLowerCase()` or `toUpperCase()` to compare strings.\n\nThe quick-fix replaces the case-insensitive comparison that uses `toLowerCase()` or `toUpperCase()` with `equals(..., ignoreCase = true)`.\n\n**Note:** May change semantics for some locales.\n\n**Example:**\n\n\n fun main() {\n val a = \"KoTliN\"\n val b = \"KOTLIN\"\n println(a.toLowerCase() == b.toLowerCase())\n }\n\nAfter the quick-fix is applied:\n\n\n fun main() {\n val a = \"KoTliN\"\n val b = \"KOTLIN\"\n println(a.equals(b, ignoreCase = true))\n }\n" + }, + { + "shortName": "RedundantCompanionReference", + "displayName": "Redundant 'Companion' reference", + "enabled": false, + "description": "Reports redundant `Companion` reference.\n\n**Example:**\n\n\n class A {\n companion object {\n fun create() = A()\n }\n }\n fun test() {\n val s = A.Companion.create()\n }\n\nAfter the quick-fix is applied:\n\n\n class A {\n companion object {\n fun create() = A()\n }\n }\n fun test() {\n val s = A.create()\n }\n" + }, + { + "shortName": "SimplifyWhenWithBooleanConstantCondition", + "displayName": "Simplifiable 'when'", + "enabled": false, + "description": "Reports `when` expressions with the constant `true` or `false` branches.\n\n**Simplify \"when\"** quick-fix can be used to amend the code automatically.\n\nExamples:\n\n\n fun redundant() {\n when { // <== redundant, quick-fix simplifies the when expression to \"println(\"true\")\"\n true -> println(\"true\")\n else -> println(\"false\")\n }\n }\n" + }, + { + "shortName": "RedundantSamConstructor", + "displayName": "Redundant SAM constructor", + "enabled": false, + "description": "Reports SAM (Single Abstract Method) constructor usages which can be replaced with lambdas.\n\n**Example:**\n\n\n fun main() {\n foo(Runnable { println(\"Hi!\") })\n }\n\n fun foo(other: Runnable) {}\n\nAfter the quick-fix is applied:\n\n\n fun main() {\n foo( { println(\"Hi!\") })\n }\n\n fun foo(other: Runnable) {}\n" + }, + { + "shortName": "RemoveRedundantCallsOfConversionMethods", + "displayName": "Redundant call of conversion method", + "enabled": false, + "description": "Reports redundant calls to conversion methods (for example, `toString()` on a `String` or `toDouble()` on a `Double`).\n\nUse the 'Remove redundant calls of the conversion method' quick-fix to clean up the code." + }, + { + "shortName": "RemoveForLoopIndices", + "displayName": "Unused loop index", + "enabled": false, + "description": "Reports `for` loops iterating over a collection using the `withIndex()` function and not using the index variable.\n\nUse the \"Remove indices in 'for' loop\" quick-fix to clean up the code.\n\n**Examples:**\n\n\n fun foo(bar: List) {\n for ((index : Int, value: String) in bar.withIndex()) { // <== 'index' is unused\n println(value)\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(bar: List) {\n for (value: String in bar) { // <== '.withIndex()' and 'index' are removed\n println(value)\n }\n }\n" + }, + { + "shortName": "RedundantSuspendModifier", + "displayName": "Redundant 'suspend' modifier", + "enabled": false, + "description": "Reports `suspend` modifier as redundant if no other suspending functions are called inside." + }, + { + "shortName": "RemoveRedundantBackticks", + "displayName": "Redundant backticks", + "enabled": false, + "description": "Reports redundant backticks in references.\n\n\nSome of the Kotlin keywords are valid identifiers in Java, for example: `in`, `object`, `is`.\nIf a Java library uses a Kotlin keyword for a method, you can still call the method escaping it\nwith the backtick character (`````), for example, ``foo.`is`(bar)``.\nSometimes this escaping is redundant and can be safely omitted. The inspection discovers and reports such cases and is\npaired with the 'Remove redundant backticks' quick-fix, which allows you to amend the highlighted code.\n\n**Examples:**\n\n\n fun `is`(x: String) {}\n fun foo() {\n `is`(\"bar\") // 'is' is a keyword, backticks are required\n }\n\n fun `test that smth works as designed`() {} // OK, complex identifier for readability improvement\n\n val `a` = 1 // no need for backticks\n" + }, + { + "shortName": "ExplicitThis", + "displayName": "Redundant explicit 'this'", + "enabled": false, + "description": "Reports an explicit `this` when it can be omitted.\n\n**Example:**\n\n\n class C {\n private val i = 1\n fun f() = this.i\n }\n\nThe quick-fix removes the redundant `this`:\n\n\n class C {\n private val i = 1\n fun f() = i\n }\n" + }, + { + "shortName": "NullChecksToSafeCall", + "displayName": "Null-checks can be replaced with safe-calls", + "enabled": false, + "description": "Reports chained null-checks that can be replaced with safe-calls.\n\n**Example:**\n\n\n fun test(my: My?) {\n if (my != null && my.foo() != null) {}\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(my: My?) {\n if (my?.foo() != null) {}\n }\n" + }, + { + "shortName": "RemoveEmptyClassBody", + "displayName": "Replace empty class body", + "enabled": false, + "description": "Reports declarations of classes and objects with an empty body.\n\nUse the 'Remove redundant empty class body' quick-fix to clean up the code.\n\n**Examples:**\n\n\n class EmptyA() {} // <== empty body\n\n class EmptyB {\n companion object {} // <== empty body\n }\n\n fun emptyC() {\n object {} // <== anonymous object, it's ok (not reported)\n }\n\nAfter the quick fix is applied:\n\n\n class EmptyA()\n\n class EmptyB {\n companion object\n }\n\n fun emptyC() {\n object {}\n }\n" + }, + { + "shortName": "CanBeParameter", + "displayName": "Constructor parameter is never used as a property", + "enabled": false, + "description": "Reports primary constructor parameters that can have `val` or `var` removed.\n\n\nClass properties declared in the constructor increase memory consumption.\nIf the parameter value is only used in the constructor, you can omit them.\n\nNote that the referenced object might be garbage-collected earlier.\n\n**Example:**\n\n\n class Task(val name: String) {\n init {\n print(\"Task created: $name\")\n }\n }\n\nA quick-fix removes the extra `val` or `var` keyword:\n\n\n class Task(name: String) {\n init {\n print(\"Task created: $name\")\n }\n }\n" + }, + { + "shortName": "RedundantReturnLabel", + "displayName": "Redundant 'return' label", + "enabled": false, + "description": "Reports redundant return labels outside of lambda expressions.\n\n**Example:**\n\n\n fun test() {\n return@test\n }\n\nAfter the quick-fix is applied:\n\n\n fun test() {\n return\n }\n" + }, + { + "shortName": "RemoveRedundantQualifierName", + "displayName": "Redundant qualifier name", + "enabled": false, + "description": "Reports redundant qualifiers (or their parts) on class names, functions, and properties.\n\n\nA fully qualified name is an unambiguous identifier that specifies which object, function, or property a call refers to.\nIn the contexts where the name can be shortened, the inspection informs on the opportunity and the associated\n'Remove redundant qualifier name' quick-fix allows amending the code.\n\n**Examples:**\n\n\n package my.simple.name\n import kotlin.Int.Companion.MAX_VALUE\n\n class Foo\n\n fun main() {\n val a = my.simple.name.Foo() // 'Foo' resides in the declared 'my.simple.name' package, qualifier is redundant\n val b = kotlin.Int.MAX_VALUE // Can be replaced with 'MAX_VALUE' since it's imported\n val c = kotlin.Double.MAX_VALUE // Can be replaced with 'Double.MAX_VALUE' since built-in types are imported automatically\n }\n\nAfter the quick-fix is applied:\n\n\n package my.simple.name\n import kotlin.Int.Companion.MAX_VALUE\n\n class Foo\n\n fun main() {\n val a = Foo()\n val b = MAX_VALUE\n val c = Double.MAX_VALUE\n }\n" + }, + { + "shortName": "RemoveCurlyBracesFromTemplate", + "displayName": "Redundant curly braces in string template", + "enabled": false, + "description": "Reports usages of curly braces in string templates around simple identifiers.\n\nUse the 'Remove curly braces' quick-fix to remove the redundant braces.\n\n**Examples:**\n\n\n fun redundant() {\n val x = 4\n val y = \"${x}\" // <== redundant\n }\n\n fun correctUsage() {\n val x = \"x\"\n val y = \"${x.length}\" // <== Ok\n }\n\nAfter the quick-fix is applied:\n\n\n fun redundant() {\n val x = 4\n val y = \"$x\"\n }\n\n fun correctUsage() {\n val x = \"x\" <== Updated\n val y = \"${x.length}\"\n }\n" + }, + { + "shortName": "RedundantElvisReturnNull", + "displayName": "Redundant '?: return null'", + "enabled": false, + "description": "Reports redundant `?: return null`\n\n**Example:**\n\n\n fun foo(): Int? {\n ...\n }\n\n fun test() : Int? {\n return foo() ?: return null\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(): Int? {\n ...\n }\n\n fun test() : Int? {\n return foo()\n }\n" + }, + { + "shortName": "RedundantUnitExpression", + "displayName": "Redundant 'Unit'", + "enabled": false, + "description": "Reports redundant `Unit` expressions.\n\n\n`Unit` in Kotlin can be used as the return type of functions that do not return anything meaningful.\nThe `Unit` type has only one possible value, which is the `Unit` object.\n\n**Examples:**\n\n\n fun redundantA(): Unit {\n return Unit // redundant, 'Unit' is returned by default and matches the expected return type\n }\n\n fun requiredA(condition: Boolean): Any {\n if (condition) return \"hello\"\n return Unit // explicit 'Unit' is required since the expected type is 'Any'\n }\n\n fun redundantB(condition: Boolean): Any = if (condition) {\n fun ancillary(): Int = 1\n println(\"${ancillary()}\")\n Unit // redundant since the last expression is already of type 'Unit'\n } else {\n println(\"else\")\n }\n\n fun requiredB(condition: Boolean): Any = if (condition) {\n 1024\n Unit // required, otherwise '1024' (Int) would be the return value\n } else {\n println(\"else\")\n }\n" + }, + { + "shortName": "KotlinDoubleNegation", + "displayName": "Redundant double negation", + "enabled": false, + "description": "Reports redundant double negations.\n\n**Example:**\n\n val truth = !!true\n" + }, + { + "shortName": "RedundantUnitReturnType", + "displayName": "Redundant 'Unit' return type", + "enabled": false, + "description": "Reports a redundant `Unit` return type which can be omitted." + }, + { + "shortName": "UnusedReceiverParameter", + "displayName": "Unused receiver parameter", + "enabled": false, + "description": "Reports receiver parameter of extension functions and properties that is not used.\n\n**Remove redundant receiver parameter** can be used to amend the code automatically." + }, + { + "shortName": "KotlinRedundantOverride", + "displayName": "Redundant overriding method", + "enabled": false, + "description": "Reports redundant overriding declarations.\n\n\nAn override can be omitted if it does not modify the inherited signature semantics, for example, by changing visibility.\n\n**Example:**\n\n\n open class Foo {\n open fun singleExpression() {\n }\n }\n\n class Bar : Foo() {\n override fun singleExpression() = super.singleExpression()\n }\n\nAfter the quick-fix is applied:\n\n\n class Bar : Foo() {\n }\n" + }, + { + "shortName": "RedundantNullableReturnType", + "displayName": "Redundant nullable return type", + "enabled": false, + "description": "Reports functions and variables with nullable return type which never return or become `null`.\n\n**Example:**\n\n\n fun greeting(user: String): String? = \"Hello, $user!\"\n\nAfter the quick-fix is applied:\n\n\n fun greeting(user: String): String = \"Hello, $user!\"\n" + } + ] + }, + { + "name": "Portability", + "inspections": [ + { + "shortName": "RuntimeExec", + "displayName": "Call to 'Runtime.exec()'", + "enabled": false, + "description": "Reports calls to `Runtime.exec()` or any of its variants. Calls to `Runtime.exec()` are inherently unportable." + }, + { + "shortName": "SystemExit", + "displayName": "Call to 'System.exit()' or related methods", + "enabled": false, + "description": "Reports calls to `System.exit()`, `Runtime.exit()`, and `Runtime.halt()`.\n\n\nInvoking `System.exit()` or `Runtime.exit()`\ncalls the shutdown hooks and terminates the currently running Java\nvirtual machine. Invoking `Runtime.halt()` forcibly\nterminates the JVM without causing shutdown hooks to be started.\nEach of these methods should be used with extreme caution. Calls\nto these methods make the calling code unportable to most\napplication servers.\n\n\nUse the option to ignore calls in main methods." + }, + { + "shortName": "HardcodedFileSeparators", + "displayName": "Hardcoded file separator", + "enabled": false, + "description": "Reports the forward (`/`) or backward (`\\`) slash in a string or character literal. These characters are commonly used as file separators, and portability may suffer if they are hardcoded.\n\n\nThe inspection will not report backward slashes inside escape sequences and forward slashes immediately following the '\\<' character\nor immediately preceding the '\\>' character, as those often indicate XML or HTML tags rather than file names.\nStrings representing a `java.util.TimeZone` ID, strings that are valid regular expressions,\nor strings that equal IANA-registered MIME media types will not be reported either.\n\n**Example:**\n\n\n new File(\"C:\\\\Users\\\\Name\");\n\n\nUse the option to include `example/*` in the set of recognized media types.\nNormally, usage of the `example/*` MIME media type outside of an example (e.g. in a `Content-Type`\nheader) is an error." + }, + { + "shortName": "UseOfAWTPeerClass", + "displayName": "Use of AWT peer class", + "enabled": false, + "description": "Reports uses of AWT peer classes. Such classes represent native windowing system widgets, and will be non-portable between different windowing systems.\n\n**Example:**\n\n\n import java.awt.peer.ButtonPeer;\n\n abstract class Sample implements ButtonPeer {\n public void foo() {\n Sample sample;\n }\n }\n" + }, + { + "shortName": "NativeMethods", + "displayName": "Native method", + "enabled": false, + "description": "Reports methods declared `native`. Native methods are inherently unportable." + }, + { + "shortName": "HardcodedLineSeparators", + "displayName": "Hardcoded line separator", + "enabled": false, + "description": "Reports linefeed (`\\n`) and carriage return (`\\r`) character escape sequences used in string literals, character literals or text blocks. These characters are commonly used as line separators, and portability may suffer if they are hardcoded.\n\n**Example:**\n\n\n String count = \"first\\nsecond\\rthird\";\n" + }, + { + "shortName": "UseOfSunClasses", + "displayName": "Use of 'sun.*' classes", + "enabled": false, + "description": "Reports uses of classes from the `sun.*` hierarchy. Such classes are non-portable between different JVMs." + }, + { + "shortName": "UseOfJDBCDriverClass", + "displayName": "Use of concrete JDBC driver class", + "enabled": false, + "description": "Reports uses of specific JDBC driver classes. Use of such classes will bind your project to a specific database and driver, defeating the purpose of JDBC and resulting in loss of portability.\n\n**Example:**\n\n\n import java.sql.Driver;\n\n abstract class Sample implements Driver {\n public void foo() {\n Sample sample;\n }\n }\n" + }, + { + "shortName": "SystemGetenv", + "displayName": "Call to 'System.getenv()'", + "enabled": false, + "description": "Reports calls to `System.getenv()`. Calls to `System.getenv()` are inherently unportable." + }, + { + "shortName": "UseOfProcessBuilder", + "displayName": "Use of 'java.lang.ProcessBuilder' class", + "enabled": false, + "description": "Reports uses of `java.lang.ProcessBuilder`, which might be unportable between operating systems because paths to executables, environment variables, command-line arguments and their escaping might vary depending on the OS." + } + ] + }, + { + "name": "Threading issues", + "inspections": [ + { + "shortName": "StaticInitializerReferencesSubClass", + "displayName": "Static initializer references subclass", + "enabled": true, + "description": "Reports classes that refer to their subclasses in static initializers or static fields.\n\nSuch references can cause JVM-level deadlocks in multithreaded environment, when one thread tries to load the superclass\nand another thread tries to load the subclass at the same time.\n\n**Example:**\n\n\n class Parent {\n static final Child field = new Child();\n }\n class Child extends Parent { }\n" + }, + { + "shortName": "FieldAccessedSynchronizedAndUnsynchronized", + "displayName": "Field accessed in both 'synchronized' and unsynchronized contexts", + "enabled": true, + "description": "Reports non-final fields that are accessed in both `synchronized` and non-`synchronized` contexts. `volatile` fields as well as accesses in constructors and initializers are ignored by this inspection.\n\n\nSuch \"partially synchronized\" access is often the result of a coding oversight\nand may lead to unexpectedly inconsistent data structures.\n\n**Example:**\n\n\n public class Program {\n Console console; // warning: Field 'console' is accessed in both synchronized and unsynchronized contexts\n\n public synchronized void execute() {\n console.print(\"running\");\n }\n\n public void check() {\n console.check();\n }\n }\n\n\nUse the option to specify if simple getters and setters are counted as accesses too." + }, + { + "shortName": "NonSynchronizedMethodOverridesSynchronizedMethod", + "displayName": "Unsynchronized method overrides 'synchronized' method", + "enabled": true, + "description": "Reports non-`synchronized` methods overriding `synchronized` methods.\n\n\nThe overridden method will not be automatically synchronized if the superclass method\nis declared as `synchronized`. This may result in unexpected race conditions when using the subclass.\n\n**Example:**\n\n\n class Super {\n synchronized void process() {}\n }\n class Sub extends Super {\n // Unsynchronized method 'process()' overrides synchronized method\n void process() {}\n } \n" + }, + { + "shortName": "WaitCalledOnCondition", + "displayName": "'wait()' called on 'java.util.concurrent.locks.Condition' object", + "enabled": false, + "description": "Reports calls to `wait()` made on a `java.util.concurrent.locks.Condition` object. This is probably a programming error, and some variant of the `await()` method was intended instead.\n\n**Example:**\n\n\n void acquire(Condition released) throws InterruptedException {\n while (acquired) {\n released.wait();\n }\n }\n\nGood code would look like this:\n\n\n void acquire(Condition released) throws InterruptedException {\n while (acquired) {\n released.await();\n }\n }\n" + }, + { + "shortName": "WaitNotifyNotInSynchronizedContext", + "displayName": "'wait()' or 'notify()' is not in synchronized context", + "enabled": false, + "description": "Reports calls to `wait()`, `notify()`, and `notifyAll()` that are not made inside a corresponding synchronized statement or synchronized method.\n\n\nCalling these methods on an object\nwithout holding a lock on that object causes `IllegalMonitorStateException`.\nSuch a construct is not necessarily an error, as the necessary lock may be acquired before\nthe containing method is called, but it's worth looking at.\n\n**Example:**\n\n\n class Sync {\n private final Object lock = new Object();\n\n void test() throws InterruptedException {\n synchronized (this) {\n lock.wait(); // 'lock.wait()' is not synchronized on 'lock'\n }\n }\n }\n" + }, + { + "shortName": "ExtendsThread", + "displayName": "Class directly extends 'Thread'", + "enabled": false, + "description": "Reports classes that directly extend `java.lang.Thread`. It is usually recommended to prefer composition over inheritance to create more reusable code that is easier to modify later.\n\n**Example:**\n\n\n class MainThread extends Thread {\n }\n" + }, + { + "shortName": "ThreadStopSuspendResume", + "displayName": "Call to 'Thread.stop()', 'suspend()' or 'resume()'", + "enabled": false, + "description": "Reports calls to `Thread.stop()`, `Thread.suspend()`, and `Thread.resume()`.\n\n\nThese calls are inherently prone to data corruption and deadlocks, and their use is strongly discouraged.\nIt is better to use cooperative cancellation instead of `stop`, and\ninterruption instead of direct calls to `suspend` and `resume`." + }, + { + "shortName": "SignalWithoutCorrespondingAwait", + "displayName": "'signal()' without corresponding 'await()'", + "enabled": false, + "description": "Reports calls to `Condition.signal()` or `Condition.signalAll()` for which no call to a corresponding `Condition.await()` can be found.\n\nOnly calls that target fields of the current class are reported by this inspection.\n\n**Example:**\n\n\n class Queue {\n private final Condition isEmpty = ...;\n\n void add(Object elem) {\n // ...\n isEmpty.signal(); // warning: Call to 'signal()' without corresponding 'await()'\n // ...\n }\n\n void remove(Object elem) throws InterruptedException {\n // ...\n // isEmpty.await();\n // ...\n }\n }\n" + }, + { + "shortName": "MethodMayBeSynchronized", + "displayName": "Method with single 'synchronized' block can be replaced with 'synchronized' method", + "enabled": false, + "description": "Reports methods whose body contains a single `synchronized` statement. A lock expression for this `synchronized` statement must be equal to `this` for instance methods or `[ClassName].class` for static methods.\n\n\nTo improve readability of such methods,\nyou can remove the `synchronized` wrapper and mark the method as `synchronized`.\n\n**Example:**\n\n\n public int generateInt(int x) {\n synchronized (this) {\n return 1;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public synchronized int generateInt(int x) {\n return 1;\n }\n" + }, + { + "shortName": "SynchronizationOnLocalVariableOrMethodParameter", + "displayName": "Synchronization on local variable or method parameter", + "enabled": true, + "description": "Reports synchronization on a local variable or parameter.\n\n\nIt is very difficult to guarantee correct operation when such synchronization is used.\nIt may be possible to improve such code, for example, by controlling access using a synchronized wrapper class or by synchronizing on a\nfield.\n\n**Example:**\n\n\n void bar() {\n final Object lock = new Object();\n synchronized (lock) { }\n }\n" + }, + { + "shortName": "ThreadYield", + "displayName": "Call to 'Thread.yield()'", + "enabled": false, + "description": "Reports calls to `Thread.yield()`.\n\n\nThe behavior of `yield()` is non-deterministic and platform-dependent, and it is rarely appropriate to use this method.\nIts use should be combined with detailed profiling and benchmarking to ensure that it actually has the desired effect.\n\n**Example:**\n\n\n public static void main(String[] args) {\n Runnable r = () -> {\n for (int i = 0; i < 10; i++) {\n System.out.println(i);\n Thread.yield();\n }\n };\n new Thread(r).start();\n new Thread(r).start();\n }\n" + }, + { + "shortName": "AtomicFieldUpdaterIssues", + "displayName": "Inconsistent 'AtomicFieldUpdater' declaration", + "enabled": true, + "description": "Reports issues with `AtomicLongFieldUpdater`, `AtomicIntegerFieldUpdater`, or `AtomicReferenceFieldUpdater` fields (the `java.util.concurrent.atomic` package).\n\nThe reported issues are identical to the runtime problems that can happen with atomic field updaters:\nspecified field not found, specified field not accessible, specified field has a wrong type, and so on.\n\n**Examples:**\n\n*\n\n\n class A {\n private static volatile int value = 0;\n private static final AtomicIntegerFieldUpdater updater =\n AtomicIntegerFieldUpdater.newUpdater((A.class), \"value\"); // warning: Field 'value' has 'static' modifier\n }\n \n*\n\n\n class B {\n private static final AtomicIntegerFieldUpdater updater =\n AtomicIntegerFieldUpdater.newUpdater(B.class, \"value\"); // warning: No field named 'value' found in class 'B'\n }\n \n" + }, + { + "shortName": "ThreadStartInConstruction", + "displayName": "Call to 'Thread.start()' during object construction", + "enabled": true, + "description": "Reports calls to `start()` on `java.lang.Thread` or any of its subclasses during object construction.\n\n\nWhile occasionally useful, such constructs should be avoided due to inheritance issues.\nSubclasses of a class that launches a thread during the object construction will not have finished\nany initialization logic of their own before the thread has launched.\n\nThis inspection does not report if the class that starts a thread is declared `final`.\n\n**Example:**\n\n\n class MyThread extends Thread {\n MyThread() {\n start();\n }\n }\n" + }, + { + "shortName": "DoubleCheckedLocking", + "displayName": "Double-checked locking", + "enabled": true, + "description": "Reports [double-checked locking](https://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html).\n\n\nDouble-checked locking tries to initialize a field on demand and in a thread-safe manner, while avoiding the cost of synchronization.\nUnfortunately it is not thread-safe when used on a field that is not declared `volatile`.\nWhen using Java 1.4 or earlier, double-checked locking doesn't work even with a `volatile` field.\nRead the article linked above for a detailed explanation of the problem.\n\nExample of incorrect double-checked locking:\n\n\n class Foo {\n private Helper helper = null;\n public Helper getHelper() {\n if (helper == null)\n synchronized(this) {\n if (helper == null) helper = new Helper();\n }\n return helper;\n }\n }\n // other functions and members...\n }\n" + }, + { + "shortName": "ConditionSignal", + "displayName": "Call to 'signal()' instead of 'signalAll()'", + "enabled": false, + "description": "Reports calls to `java.util.concurrent.locks.Condition.signal()`. While occasionally useful, in almost all cases `signalAll()` is a better and safer choice." + }, + { + "shortName": "ThreadLocalNotStaticFinal", + "displayName": "'ThreadLocal' field not declared 'static final'", + "enabled": false, + "description": "Reports fields of type `java.lang.ThreadLocal` that are not declared `static final`.\n\n\nIn the most common case, a `java.lang.ThreadLocal` instance associates state with a thread.\nA non-static non-final `java.lang.ThreadLocal` field associates state with an instance-thread combination.\nThis is usually unnecessary and quite often is a bug that can cause memory leaks and incorrect behavior.\n\n\nA quick-fix is suggested to make the field `static final`.\n\n\n**Example:**\n\n\n private ThreadLocal tl = ThreadLocal.withInitial(() -> Boolean.TRUE);\n" + }, + { + "shortName": "CallToNativeMethodWhileLocked", + "displayName": "Call to a 'native' method while locked", + "enabled": false, + "description": "Reports calls `native` methods within a `synchronized` block or method.\n\n\nWhen possible, it's better to keep calls to `native` methods out of the synchronized context\nbecause such calls cause an expensive context switch and may lead to performance issues.\n\n**Example:**\n\n\n native void nativeMethod();\n\n void example(){\n synchronized (lock){\n nativeMethod();//warning\n }\n }\n" + }, + { + "shortName": "WaitNotInLoop", + "displayName": "'wait()' not called in loop", + "enabled": true, + "description": "Reports calls to `wait()` that are not made inside a loop.\n\n\n`wait()` is normally used to suspend a thread until some condition becomes true.\nAs the thread could have been waken up for a different reason,\nthe condition should be checked after the `wait()` call returns.\nA loop is a simple way to achieve this.\n\n**Example:**\n\n\n class BoundedCounter {\n private int count;\n synchronized void inc() throws InterruptedException {\n if (count >= 10) wait();\n ++count;\n }\n }\n\nGood code should look like this:\n\n\n class BoundedCounter {\n private int count;\n synchronized void inc() throws InterruptedException {\n while (count >= 10) wait();\n ++count;\n }\n }\n" + }, + { + "shortName": "SafeLock", + "displayName": "Lock acquired but not safely unlocked", + "enabled": false, + "description": "Reports `java.util.concurrent.locks.Lock` resources that are not acquired in front of a `try` block or not unlocked in the corresponding `finally` block. Such resources may be inadvertently leaked if an exception is thrown before the resource is closed.\n\n**Example:**\n\n\n lock.lock(); // will be reported since the 'finally' block is missing\n try {\n doSmthWithLock();\n } catch (IOException e) {\n throw new UncheckedIOException(e);\n }\n lock.unlock();\n" + }, + { + "shortName": "NakedNotify", + "displayName": "'notify()' or 'notifyAll()' without corresponding state change", + "enabled": false, + "description": "Reports `Object.notify()` or `Object.notifyAll()` being called without any detectable state change occurring.\n\n\nNormally, `Object.notify()` and `Object.notifyAll()` are used to inform other threads that a state change has\noccurred. That state change should occur in a synchronized context that contains the `Object.notify()` or\n`Object.notifyAll()` call, and prior to the call. While not having such a state change isn't necessarily incorrect, it is\ncertainly worth examining.\n\n**Example:**\n\n\n synchronized (this) {\n notify();\n }\n // no state change\n synchronized (this) {\n notify(); // this notify might be redundant\n }\n" + }, + { + "shortName": "EmptySynchronizedStatement", + "displayName": "Empty 'synchronized' statement", + "enabled": true, + "description": "Reports `synchronized` statements with empty bodies.\n\n\nEmpty `synchronized` statements are sometimes used to wait for other threads to\nrelease a particular resource. However, there is no guarantee that the same resource\nwon't be acquired again right after the empty `synchronized` statement finishes.\nFor proper synchronization, the resource should be utilized inside the `synchronized` block.\n\n\nAlso, an empty `synchronized` block may appear after a refactoring\nwhen redundant code was removed. In this case, the `synchronized` block\nitself will be redundant and should be removed as well.\n\nExample:\n\n\n synchronized(lock) {}\n\n\nA quick-fix is suggested to remove the empty synchronized statement.\n\n\nThis inspection is disabled in JSP files." + }, + { + "shortName": "SharedThreadLocalRandom", + "displayName": "'ThreadLocalRandom' instance might be shared", + "enabled": false, + "description": "Reports `java.util.concurrent.ThreadLocalRandom` instances which might be shared between threads.\n\n\nA `ThreadLocalRandom` should not be shared between threads because that is not thread-safe.\nThe inspection reports instances that are assigned to a field used as a method argument,\nor assigned to a local variable and used in anonymous or nested classes as they might get shared between threads.\n\n\nUsages of `ThreadLocalRandom` should typically look like `ThreadLocalRandom.current().nextInt(...)`\n(or `nextDouble(...)` etc.).\nWhen all usages are in this form, `ThreadLocalRandom` instances cannot be used accidentally by multiple threads.\n\n**Example:**\n\n\n class Main {\n void printRandomNumbersAsync() {\n ThreadLocalRandom random = ThreadLocalRandom.current();\n CompletableFuture.supplyAsync(() -> generateNumbers(random))\n .thenAccept(numbers -> System.out.println(Arrays.toString(numbers)));\n }\n\n private int[] generateNumbers(Random random) {\n return random.ints(1000, 0, 100).toArray();\n }\n }\n \n\nUse the options to list methods that are safe to be passed to `ThreadLocalRandom` instances as an argument.\nIt's possible to use regular expressions for method names." + }, + { + "shortName": "NonAtomicOperationOnVolatileField", + "displayName": "Non-atomic operation on 'volatile' field", + "enabled": true, + "description": "Reports non-atomic operations on volatile fields.\n\n\nAn example of a non-atomic operation is updating the field using the increment operator.\nAs the operation involves read and write, and other modifications may happen in between, data may become corrupted.\nThe operation can be made atomic by surrounding it with a `synchronized` block or\nusing one of the classes from the `java.util.concurrent.atomic` package.\n\n**Example:**\n\n\n private volatile int v = 1;\n\n void foo() {\n v = 2 * v;\n }\n" + }, + { + "shortName": "ObjectNotify", + "displayName": "Call to 'notify()' instead of 'notifyAll()'", + "enabled": true, + "description": "Reports calls to `Object.notify()`. While occasionally useful, in almost all cases `Object.notifyAll()` is a better choice because calling `Object.notify()` may lead to deadlocks. See Doug Lea's *Concurrent Programming in Java* for a discussion." + }, + { + "shortName": "UnconditionalWait", + "displayName": "Unconditional 'wait()' call", + "enabled": false, + "description": "Reports `wait()` being called unconditionally within a synchronized context.\n\n\nNormally, `wait()` is used to block a thread until some condition is true. If\n`wait()` is called unconditionally, it often indicates that the condition was\nchecked before a lock was acquired. In that case a data race may occur, with the condition\nbecoming true between the time it was checked and the time the lock was acquired.\n\n\nWhile constructs found by this inspection are not necessarily incorrect, they are certainly worth examining.\n\n**Example:**\n\n\n class Bar {\n void foo() throws InterruptedException {\n synchronized (this) {\n wait(); // warning\n }\n }\n }\n" + }, + { + "shortName": "WaitOrAwaitWithoutTimeout", + "displayName": "'wait()' or 'await()' without timeout", + "enabled": false, + "description": "Reports calls to `Object.wait()` or `Condition.await()` without specifying a timeout.\n\n\nSuch calls may be dangerous in high-availability programs, as failures in one\ncomponent may result in blockages of the waiting component\nif `notify()`/`notifyAll()`\nor `signal()`/`signalAll()` never get called.\n\n**Example:**\n\n\n void foo(Object bar) throws InterruptedException {\n bar.wait();\n }\n" + }, + { + "shortName": "ThreadPriority", + "displayName": "Call to 'Thread.setPriority()'", + "enabled": false, + "description": "Reports calls to `Thread.setPriority()`. Modifying priorities of threads is an inherently non-portable operation, as no guarantees are given in the Java specification of how priorities are used in scheduling threads, or even whether they are used at all." + }, + { + "shortName": "AccessToStaticFieldLockedOnInstance", + "displayName": "Access to 'static' field locked on instance data", + "enabled": false, + "description": "Reports access to non-constant static fields that are locked on either `this` or an instance field of `this`.\n\n\nLocking a static field on instance data does not prevent the field from being\nmodified by other instances, and thus may result in unexpected race conditions.\n\n**Example:**\n\n\n static String test;\n public void foo() {\n synchronized (this) {\n System.out.println(test); // warning\n }\n }\n\n\nThere is a quick-fix that allows ignoring static fields of specific types.\nYou can manage those ignored types in the inspection options.\n\n\nUse the inspection options to specify which classes used for static fields should be ignored." + }, + { + "shortName": "NestedSynchronizedStatement", + "displayName": "Nested 'synchronized' statement", + "enabled": true, + "description": "Reports nested `synchronized` statements. It is recommended to avoid nested synchronization if possible, because in some cases it may lead to a deadlock.\n\n**Example:**\n\n\n synchronized (lockA){\n //thread 1 is waiting for lockB\n synchronized (lockB){ //warning\n }\n }\n ...\n synchronized (lockB) {\n //thread 2 is waiting for lockA\n synchronized (lockA) { //warning\n }\n }\n" + }, + { + "shortName": "WaitWithoutCorrespondingNotify", + "displayName": "'wait()' without corresponding 'notify()'", + "enabled": false, + "description": "Reports calls to `Object.wait()`, for which no call to the corresponding `Object.notify()` or `Object.notifyAll()` can be found.\n\nThis inspection only reports calls with qualifiers referencing fields of the current class.\n\n**Example:**\n\n\n public class Foo {\n public Object foo = new Object();\n\n void bar() throws InterruptedException {\n this.foo.wait();\n }\n }\n" + }, + { + "shortName": "SynchronizationOnGetClass", + "displayName": "Synchronization on 'getClass()'", + "enabled": true, + "description": "Reports synchronization on a call to `getClass()`.\n\n\nIf the class containing the synchronization is subclassed, the subclass\nwill\nsynchronize on a different class object. Usually the call to `getClass()` can be replaced with a class literal expression, for\nexample `String.class`. An even better solution is synchronizing on a `private static final` lock object, access to\nwhich can be completely controlled.\n\n**Example:**\n\n synchronized(getClass()) {}\n" + }, + { + "shortName": "SystemRunFinalizersOnExit", + "displayName": "Call to 'System.runFinalizersOnExit()'", + "enabled": true, + "description": "Reports calls to `System.runFinalizersOnExit()`.\n\n\nThis call is one of the most dangerous in the Java language. It is inherently non-thread-safe,\nmay result in data corruption, a deadlock, and may affect parts of the program far removed from its call point.\nIt is deprecated and was removed in JDK 11, and its use is strongly discouraged.\n\nThis inspection only reports if the language level of the project or module is 10 or lower." + }, + { + "shortName": "PublicFieldAccessedInSynchronizedContext", + "displayName": "Non-private field accessed in 'synchronized' context", + "enabled": true, + "description": "Reports non-`final`, non-`private` fields that are accessed in a synchronized context.\n\n\nA non-`private` field cannot be guaranteed to always be accessed in a synchronized manner, and such \"partially synchronized\"\naccess may result in unexpectedly inconsistent data structures.\n\n**Example:**\n\n\n class Bar {\n public String field1;\n }\n public Bar myBar;\n\n synchronized public void sample() {\n myBar.field1 = \"bar\";\n }\n" + }, + { + "shortName": "WaitWhileHoldingTwoLocks", + "displayName": "'wait()' while holding two locks", + "enabled": true, + "description": "Reports calls to `wait()` methods that may occur while the current thread is holding two locks.\n\n\nSince calling `wait()` only releases one lock on its target,\nwaiting with two locks held can easily lead to a deadlock.\n\n**Example:**\n\n\n synchronized (lockA) {\n synchronized (lockB) {\n lockB.wait(); //warning\n //thread A is stuck here holding lockA\n }\n }\n\n synchronized (lockA) { //thread B can't enter the block and release thread A\n lockB.notify();\n }\n" + }, + { + "shortName": "WhileLoopSpinsOnField", + "displayName": "'while' loop spins on field", + "enabled": true, + "description": "Reports `while` loops that spin on the value of a non-`volatile` field, waiting for it to be changed by another thread.\n\n\nIn addition to being potentially extremely CPU intensive when little work is done inside the loop, such\nloops are likely to have different semantics from what was intended.\nThe Java Memory Model allows such loops to never complete even if another thread changes the field's value.\n\n\nAdditionally, since Java 9 it's recommended to call `Thread.onSpinWait()` inside a spin loop\non a `volatile` field, which may significantly improve performance on some hardware.\n\n**Example:**\n\n\n class SpinsOnField {\n boolean ready = false;\n\n void run() {\n while (!ready) {\n }\n // do some work\n }\n\n void markAsReady() {\n ready = true;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class SpinsOnField {\n volatile boolean ready = false;\n\n void run() {\n while (!ready) {\n Thread.onSpinWait();\n }\n // do some work\n }\n\n void markAsReady() {\n ready = true;\n }\n }\n\n\nUse the inspection options to only report empty `while` loops." + }, + { + "shortName": "SynchronizeOnLock", + "displayName": "Synchronization on a 'Lock' object", + "enabled": false, + "description": "Reports `synchronized` blocks that lock on an instance of `java.util.concurrent.locks.Lock`. Such synchronization is almost certainly unintended, and appropriate versions of `.lock()` and `.unlock()` should be used instead.\n\n**Example:**\n\n\n final ReentrantLock lock = new ReentrantLock();\n\n public void foo() {\n synchronized (lock) {}\n }\n" + }, + { + "shortName": "AtomicFieldUpdaterNotStaticFinal", + "displayName": "'AtomicFieldUpdater' field not declared 'static final'", + "enabled": true, + "description": "Reports fields of types:\n\n* `java.util.concurrent.atomic.AtomicLongFieldUpdater`\n* `java.util.concurrent.atomic.AtomicIntegerFieldUpdater`\n* `java.util.concurrent.atomic.AtomicReferenceFieldUpdater`\n\nthat are not `static final`. Because only one atomic field updater is needed for updating a `volatile` field in all instances of a class, it can almost always be `static`.\n\nMaking the updater `final` allows the JVM to optimize access for improved performance.\n\n**Example:**\n\n\n class Main {\n private volatile int id;\n private AtomicIntegerFieldUpdater
    idFieldUpdater = AtomicIntegerFieldUpdater.newUpdater(Main.class, \"id\");\n }\n\nAfter the quick-fix is applied:\n\n\n class Main {\n private volatile int id;\n private static final AtomicIntegerFieldUpdater
    idFieldUpdater = AtomicIntegerFieldUpdater.newUpdater(Main.class, \"id\");\n }\n" + }, + { + "shortName": "NotifyCalledOnCondition", + "displayName": "'notify()' or 'notifyAll()' called on 'java.util.concurrent.locks.Condition' object", + "enabled": false, + "description": "Reports calls to `notify()` or `notifyAll()` made on `java.util.concurrent.locks.Condition` object.\n\n\nThis is probably a programming error, and some variant of the `signal()` or\n`signalAll()` method was intended instead, otherwise `IllegalMonitorStateException` may occur.\n\n**Example:**\n\n\n class C {\n final Lock l = new ReentrantLock();\n final Condition c = l.newCondition();\n\n void release() {\n l.lock();\n try {\n c.notifyAll(); // probably 'signalAll()' was intended here\n } finally {\n l.unlock();\n }\n }\n }\n" + }, + { + "shortName": "SynchronizedOnLiteralObject", + "displayName": "Synchronization on an object initialized with a literal", + "enabled": false, + "description": "Reports `synchronized` blocks that lock on an object initialized with a literal.\n\n\nString literals are interned and `Character`, `Boolean` and `Number` literals can be allocated from a cache.\nBecause of this, it is possible that some other part of the system, which uses an object initialized with the same literal, is actually\nholding a reference to the exact same object. This can create unexpected dead-lock situations, if the lock object was thought to be private.\n\n**Example:**\n\n\n class Main {\n final String mutex = \"Mutex\";\n void method() {\n synchronized (mutex) {\n }\n }\n }\n\n\nUse the **Warn on all possible literals** option to report any synchronization on\n`String`, `Character`, `Boolean` and `Number` objects." + }, + { + "shortName": "AccessToNonThreadSafeStaticFieldFromInstance", + "displayName": "Non-thread-safe 'static' field access", + "enabled": false, + "description": "Reports access to `static` fields that are of a non-thread-safe type.\n\n\nWhen a `static` field is accessed from an instance method or a non-synchronized block,\nmultiple threads can access that field.\nThis can lead to unspecified side effects, like exceptions and incorrect results.\n\n**Example:**\n\n\n class Sample {\n private static final SimpleDateFormat df = new SimpleDateFormat(\"yyyy-MM-dd\");\n String method() {\n return df.format(\"\");\n }\n }\n\n\nYou can specify which types should be considered not thread-safe.\nOnly fields with these exact types or initialized with these exact types are reported,\nbecause there may exist thread-safe subclasses of these types." + }, + { + "shortName": "AwaitNotInLoop", + "displayName": "'await()' not called in loop", + "enabled": false, + "description": "Reports `java.util.concurrent.locks.Condition.await()` not being called inside a loop.\n\n\n`await()` and related methods are normally used to suspend a thread until some condition becomes true.\nAs the thread could have been woken up for a different reason,\nthe condition should be checked after the `await()` call returns.\nA loop is a simple way to achieve this.\n\n**Example:**\n\n\n void acquire(Condition released) throws InterruptedException {\n released.await();\n }\n\nGood code should look like this:\n\n\n void acquire(Condition released) throws InterruptedException {\n while (acquired) {\n released.await();\n }\n }\n" + }, + { + "shortName": "SynchronizedMethod", + "displayName": "'synchronized' method", + "enabled": false, + "description": "Reports the `synchronized` modifier on methods.\n\n\nThere are several reasons a `synchronized` modifier on a method may be a bad idea:\n\n1. As little work as possible should be performed under a lock. Therefore it is often better to use a `synchronized` block and keep there only the code that works with shared state.\n2. Synchronization becomes a part of a method's interface. This makes a transition to a different locking mechanism difficult.\n3. Keeping track of what is locking a particular object gets harder.\n4. The DoS (denial-of-service) attack becomes feasible either on purpose or unknowingly when inheriting the method's class.\n\n\nAs an alternative, consider synchronizing on a `private final` lock object, access to which can be completely controlled.\n\nA quick-fix is provided to wrap the method body with `synchronized(this)`.\n\n**Example:**\n\n\n class Main {\n public synchronized void fooBar() {\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Main {\n public void fooBar() {\n synchronized (this) {\n }\n }\n }\n\nYou can configure the following options for this inspection:\n\n1. **Include native methods** - include native methods into the inspection's scope.\n2. **Ignore methods overriding a synchronized method** - do not report methods that override a `synchronized` method." + }, + { + "shortName": "SynchronizeOnNonFinalField", + "displayName": "Synchronization on a non-final field", + "enabled": true, + "description": "Reports `synchronized` statement lock expressions that consist of a non-`final` field reference. Such statements are unlikely to have useful semantics, as different threads may acquire different locks even when operating on the same object.\n\n**Example:**\n\n\n private Object o;\n public void foo() {\n synchronized (o) // synchronization on a non-final field\n { }\n }\n" + }, + { + "shortName": "ThreadWithDefaultRunMethod", + "displayName": "Instantiating a 'Thread' with default 'run()' method", + "enabled": true, + "description": "Reports code that instantiates `Thread` without specifying a `Runnable` parameter or overriding the `run()` method.\n\n\nSuch threads do nothing useful." + }, + { + "shortName": "VolatileArrayField", + "displayName": "Volatile array field", + "enabled": false, + "description": "Reports array fields that are declared `volatile`. Such declarations may be confusing because accessing the array itself follows the rules for `volatile` fields, but accessing the array's contents does not.\n\n**Example:**\n\n\n class Data {\n private volatile int[] idx = new int[0];\n }\n\n\nIf such volatile access is needed for array contents, consider using\n`java.util.concurrent.atomic` classes instead:\n\n\n class Data {\n private final AtomicIntegerArray idx = new AtomicIntegerArray(new int[0]);\n }\n" + }, + { + "shortName": "SynchronizeOnThis", + "displayName": "Synchronization on 'this'", + "enabled": true, + "description": "Reports synchronization on `this` or `class` expressions. The reported constructs include `synchronized` blocks and calls to `wait()`, `notify()` or `notifyAll()`.\n\nThere are several reasons synchronization on `this` or `class` expressions may be a bad idea:\n\n1. it makes synchronization a part of the external interface of the class, which makes a future change to a different locking mechanism difficult,\n2. it becomes hard to track just who is locking on a given object,\n3. it makes a denial-of-service attack possible, either on purpose or it can happen easily by accident when subclassing.\n\nAs an alternative, consider synchronizing on a `private final` lock object, access to which can be completely controlled.\n\n**Example:**\n\n\n public void print() {\n synchronized(this) { // warning: Lock operations on 'this' may have unforeseen side-effects\n System.out.println(\"synchronized\");\n }\n }\n \n" + }, + { + "shortName": "NotifyWithoutCorrespondingWait", + "displayName": "'notify()' without corresponding 'wait()'", + "enabled": false, + "description": "Reports calls to `Object.notify()` or `Object.notifyAll()` for which no call to a corresponding `Object.wait()` can be found.\n\nOnly calls that target fields of the current class are reported by this inspection.\n\n**Example:**\n\n\n synchronized (synList) {\n synList.notify(); //synList.wait() is never called\n }\n" + }, + { + "shortName": "SynchronizationOnStaticField", + "displayName": "Synchronization on 'static' field", + "enabled": false, + "description": "Reports synchronization on `static` fields. While not strictly incorrect, synchronization on `static` fields can lead to bad performance because of contention." + }, + { + "shortName": "AwaitWithoutCorrespondingSignal", + "displayName": "'await()' without corresponding 'signal()'", + "enabled": false, + "description": "Reports calls to `Condition.await()`, for which no call to a corresponding `Condition.signal()` or `Condition.signalAll()` can be found.\n\n\nCalling `Condition.await()` in a thread without corresponding `Condition.signal()` may cause the thread\nto become disabled until it is interrupted or \"spurious wakeup\" occurs.\n\nOnly calls that target fields of the current class are reported by this inspection.\n\n**Example:**\n\n\n class Queue {\n private final Condition isEmpty = ...;\n\n void add(Object elem) {\n // ...\n // isEmpty.signal();\n // ...\n }\n\n void remove(Object elem) throws InterruptedException {\n // ...\n isEmpty.await(); // 'await()' doesn't contain corresponding 'signal()'/'signalAll()' call\n // ...\n }\n }\n" + }, + { + "shortName": "BusyWait", + "displayName": "Busy wait", + "enabled": true, + "description": "Reports calls to `java.lang.Thread.sleep()` that occur inside loops.\n\nSuch calls\nare indicative of \"busy-waiting\". Busy-waiting is often inefficient, and may result in unexpected deadlocks\nas busy-waiting threads do not release locked resources.\n\n**Example:**\n\n\n class X {\n volatile int x;\n public void waitX() throws Exception {\n while (x > 0) {\n Thread.sleep(10);//warning: Call to 'Thread.sleep()' in a loop, probably busy-waiting\n }\n }\n }\n" + }, + { + "shortName": "SleepWhileHoldingLock", + "displayName": "Call to 'Thread.sleep()' while synchronized", + "enabled": false, + "description": "Reports calls to `java.lang.Thread.sleep()` methods that occur within a `synchronized` block or method.\n\n\n`sleep()` within a\n`synchronized` block may result in decreased performance, poor scalability, and possibly\neven deadlocking. Consider using `wait()` instead,\nas it will release the lock held.\n\n**Example:**\n\n\n synchronized (lock) {\n Thread.sleep(100);\n }\n" + }, + { + "shortName": "GroovyThreadStopSuspendResume", + "displayName": "Call to Thread.stop(), Thread.suspend(), or Thread.resume()", + "enabled": false, + "description": "Reports calls to `Thread.stop()`,`Thread.suspend()`, or `Thread.resume()`.\n\n\nThese calls are inherently prone to data corruption and deadlock, and their use is strongly\ndiscouraged." + }, + { + "shortName": "GroovyDoubleCheckedLocking", + "displayName": "Double-checked locking", + "enabled": false, + "description": "Reports [double-checked locking](https://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html).\n\n\nDouble-checked locking tries to initialize a field on demand and in a thread-safe manner, while avoiding the cost of synchronization.\nUnfortunately it is not thread-safe when used on a field that is not declared `volatile`.\nWhen using Java 1.4 or earlier, double-checked locking doesn't work even with a `volatile` field.\nRead the article linked above for a detailed explanation of the problem.\n\n**Example:**\n\n\n class Foo {\n private Helper helper = null\n\n Helper getHelper() {\n if (helper == null)\n synchronized(this) {\n if (helper == null) {\n helper = new Helper()\n }\n }\n }\n return helper;\n }\n }\n" + }, + { + "shortName": "GroovySynchronizedMethod", + "displayName": "Synchronized method", + "enabled": false, + "description": "Reports the `synchronized` modifier on methods.\n\n\nSome coding standards\nprohibit the use of the `synchronized` modifier, in favor of `synchronized` statements." + }, + { + "shortName": "GroovyUnconditionalWait", + "displayName": "Unconditional 'wait' call", + "enabled": false, + "description": "Reports **wait()**\nbeing called unconditionally within a synchronized context.\nNormally, **wait()** is\nused to block a thread until some condition is true. If **wait()**\nis called unconditionally, that often indicates that the condition was checked before a lock was\nacquired. In that case, a data race may occur, with the condition becoming true between the time\nit was checked and the time the lock was acquired. While constructs found by this inspection\nare not necessarily incorrect, they are certainly worth examining." + }, + { + "shortName": "GroovyUnsynchronizedMethodOverridesSynchronizedMethod", + "displayName": "Unsynchronized method overrides synchronized method", + "enabled": false, + "description": "Reports non-**synchronized** methods overriding **synchronized** methods.\n\n**Example:**\n\n\n abstract class Base {\n synchronized void foo() {\n // ...\n }\n }\n class Derived extends Base {\n @Override\n void foo() {\n super.foo()\n // ...\n }\n }\n\nHere the non-synchronized method `foo()` in class `Bar` overrides synchronized method." + }, + { + "shortName": "GroovySynchronizationOnThis", + "displayName": "Synchronization on 'this'", + "enabled": false, + "description": "Reports synchronization which uses `this` as its lock expression.\n\n\nConstructs reported include `synchronized`\nblocks which lock `this`, and calls to `wait()`\n`notify()` or `notifyAll()` which target `wait()`.\nSuch constructs, like synchronized methods, make it hard to track just who is locking on a given\nobject, and make possible \"denial of service\" attacks on objects. As an alternative, consider\nlocking on a private instance variable, access to which can be completely controlled." + }, + { + "shortName": "GroovyNestedSynchronizedStatement", + "displayName": "Nested 'synchronized' statement", + "enabled": false, + "description": "Reports nested `synchronized` statements.\n\n\nNested `synchronized` statements\nare either redundant (if the lock objects are identical) or prone to deadlock." + }, + { + "shortName": "GroovyWaitCallNotInLoop", + "displayName": "'wait()' not in loop", + "enabled": false, + "description": "Reports calls to `wait()` not made inside a loop.\n\n`wait()` is normally used to suspend a thread until a condition is true, and that condition should be checked after the `wait()`\nreturns. A loop is the clearest way to achieve this." + }, + { + "shortName": "GroovyAccessToStaticFieldLockedOnInstance", + "displayName": "Access to static field locked on instance data", + "enabled": false, + "description": "Reports accesses to a non-constant static field which is locked on either `this` or an instance field of `this`.\n\n\nLocking a static field on instance data does not prevent the field from being\nmodified by other instances, and thus may result in surprising race conditions.\n\n**Example:**\n\n\n static String s;\n def foo() {\n synchronized (this) {\n System.out.println(s); // warning\n }\n }\n" + }, + { + "shortName": "GroovyWaitWhileNotSynchronized", + "displayName": "'wait()' while not synced", + "enabled": false, + "description": "Reports calls to `wait()` not made inside a corresponding synchronized\nstatement or synchronized method.\n\nCalling `wait()` on an object\nwithout holding a lock on that object will result in an `IllegalMonitorStateException` being thrown.\nSuch a construct is not necessarily an error, as the necessary lock may be acquired before\nthe containing method is called, but its worth looking at." + }, + { + "shortName": "GroovySystemRunFinalizersOnExit", + "displayName": "Call to System.runFinalizersOnExit()", + "enabled": false, + "description": "Reports calls to `System.runFinalizersOnExit()`.\n\n\nThis call is one of the most dangerous in the Java language. It is inherently non-thread-safe,\nmay result in data corruption, deadlock, and may affect parts of the program far removed from its call point.\nIt is deprecated, and its use is strongly discouraged." + }, + { + "shortName": "GroovyWhileLoopSpinsOnField", + "displayName": "While loop spins on field", + "enabled": false, + "description": "Reports `while` loops, which spin on the\nvalue of a non-`volatile` field, waiting for it to be changed by another thread.\n\n\nIn addition to being potentially extremely CPU intensive when little work is done inside the loop, such\nloops likely have different semantics than intended. The Java Memory Model allows that loop to never complete even\nif another thread changes the field's value.\n\n**Example:**\n\n\n class SpinsOnField {\n boolean ready = false;\n\n void run() {\n // the loop may never complete even after\n // markAsReady call from the other thread\n while (!ready) {\n }\n // do some work\n }\n\n void markAsReady() {\n ready = true;\n }\n }\n\n\nAdditionally since Java 9, calling `Thread.onSpinWait()` inside spin loop\non a `volatile` field is recommended, which may significantly improve performance on some hardware.\n\n\nUse the checkbox below to have this inspection report only empty `while` loops." + }, + { + "shortName": "GroovyEmptySyncBlock", + "displayName": "Empty 'synchronized' block", + "enabled": false, + "description": "Reports `synchronized` statements with empty bodies. While theoretically this may be the semantics intended, this construction is confusing, and often the result of a typo.\n\n**Example:**\n\n\n synchronized(lock) {\n }\n\n" + }, + { + "shortName": "GroovyPublicFieldAccessedInSynchronizedContext", + "displayName": "Non-private field accessed in synchronized context", + "enabled": false, + "description": "Reports non-`final`, non-`private` fields which are accessed in a synchronized context.\n\n\nA non-private field cannot be guaranteed to always be accessed in a synchronized manner, and such \"partially synchronized\"\naccess may result in unexpectedly inconsistent data structures. Accesses in constructors an initializers are ignored\nfor purposes of this inspection." + }, + { + "shortName": "GroovyNotifyWhileNotSynchronized", + "displayName": "'notify()' or 'notifyAll()' while not synced", + "enabled": false, + "description": "Reports calls to `notify()` and `notifyAll()` not within a corresponding synchronized statement or synchronized method.\n\n\nCalling these methods on an object\nwithout holding a lock on that object will result in an `IllegalMonitorStateException` being thrown.\nSuch a construct is not necessarily an error, as the necessary lock may be acquired before\nthe containing method is called, but it's worth looking at." + }, + { + "shortName": "GroovyBusyWait", + "displayName": "Busy wait", + "enabled": false, + "description": "Reports calls to `java.lang.Thread.sleep()` that occur inside loops.\n\n\nSuch calls are indicative of \"busy-waiting\". Busy-waiting is often inefficient, and may result in unexpected deadlocks\nas busy-waiting threads do not release locked resources." + }, + { + "shortName": "GroovySynchronizationOnVariableInitializedWithLiteral", + "displayName": "Synchronization on variable initialized with literal", + "enabled": false, + "description": "Reports synchronized blocks which lock on an object which is initialized with a literal.\n\n\nString literals are interned and `Number` literals can be allocated from a cache. Because of\nthis, it is possible that some other part of the system which uses an object initialized with the same\nliteral, is actually holding a reference to the exact same object. This can create unexpected dead-lock\nsituations, if the string was thought to be private." + }, + { + "shortName": "GroovySynchronizationOnNonFinalField", + "displayName": "Synchronization on non-final field", + "enabled": false, + "description": "Reports `synchronized` statements where the lock expression is a non-`final` field.\n\n\nSuch statements are unlikely to have useful semantics, as different\nthreads may be locking on different objects even when operating on the same object." + } + ] + }, + { + "name": "Internationalization", + "inspections": [ + { + "shortName": "CallToSuspiciousStringMethod", + "displayName": "Call to suspicious 'String' method", + "enabled": false, + "description": "Reports calls of:\n\n* `equals()`\n* `equalsIgnoreCase()`\n* `compareTo()`\n* `compareToIgnoreCase()` and\n* `trim()`\n\n\non `String` objects.\nComparison of internationalized strings should probably use a `java.text.Collator` instead.\n`String.trim()` only removes control characters between 0x00 and 0x20.\nThe `String.strip()` method introduced in Java 11 is more Unicode aware and can be used as a replacement." + }, + { + "shortName": "StringToUpperWithoutLocale", + "displayName": "Call to 'String.toUpperCase()' or 'toLowerCase()' without locale", + "enabled": false, + "description": "Reports `toUpperCase()` or `toLowerCase()` calls on `String` objects that do not specify a `java.util.Locale`. In these cases the default system locale is used, which can cause problems in an internationalized environment.\n\n\nFor example the code `\"i\".toUpperCase().equals(\"I\")` returns `false` in the Turkish and Azerbaijani locales, where\nthe dotted and dotless 'i' are separate letters. Calling `toUpperCase()` on an English string containing an 'i', when running\nin a Turkish locale, will return incorrect results. Alternatively, when dealing with strings that should be treated as locale-independent,\nlike HTML tags, this can lead to errors." + }, + { + "shortName": "AbsoluteAlignmentInUserInterface", + "displayName": "Absolute alignment in AWT/Swing code", + "enabled": false, + "description": "Reports usages of absolute alignment constants from AWT and Swing. Internationalized applications use relative alignment because it respects the locale component orientation settings.\n\n**Example:**\n\n\n JPanel panel = new JPanel(new BorderLayout(2, 2));\n JLabel label = new JLabel(\"Hello World\");\n panel.add(label, BorderLayout.NORTH);\n\nAfter the quick-fix is applied:\n\n\n JPanel panel = new JPanel(new BorderLayout(2, 2));\n JLabel label = new JLabel(\"Hello World\");\n panel.add(label, BorderLayout.PAGE_START);\n" + }, + { + "shortName": "SimpleDateFormatWithoutLocale", + "displayName": "'SimpleDateFormat' without locale", + "enabled": false, + "description": "Reports instantiations of `java.util.SimpleDateFormat` or `java.time.format.DateTimeFormatter` that do not specify a `java.util.Locale`. These calls will use the platform default locale, which depends on the OS settings. This can lead to surprising behaviour when the code is run on a different platform or the OS settings are changed.\n\n`Example:`\n\n\n new SimpleDateFormat(\"yyyy\");\n DateTimeFormatter.ofPattern(\"d/M/y\");\n" + }, + { + "shortName": "TimeToString", + "displayName": "Call to 'Time.toString()'", + "enabled": false, + "description": "Reports `toString()` calls on `java.sql.Time` objects. Such calls are usually incorrect in an internationalized environment." + }, + { + "shortName": "DateToString", + "displayName": "Call to 'Date.toString()'", + "enabled": false, + "description": "Reports `toString()` calls on `java.util.Date` objects. Such calls are usually incorrect in an internationalized environment." + }, + { + "shortName": "ImplicitDefaultCharsetUsage", + "displayName": "Implicit platform default charset", + "enabled": false, + "description": "Reports method and constructor calls that implicitly use the platform default charset. Such calls can produce different results on systems that use a different default charset and may result in unexpected behaviour.\n\n**Example:**\n\n void foo(byte[] bytes) {\n String s = new String(bytes);\n }\n\nYou can use a quick-fix that specifies the explicit UTF-8 charset if the corresponding overloaded method is available.\nAfter the quick-fix is applied:\n\n void foo(byte[] bytes) {\n String s = new String(bytes, StandardCharsets.UTF_8);\n }\n" + }, + { + "shortName": "UnnecessaryUnicodeEscape", + "displayName": "Unnecessary unicode escape sequence", + "enabled": false, + "description": "Reports unnecessary unicode escape sequences. For example, when the file encoding can handle the character without escaping it. Unicode control characters are not reported by this inspection (except for a line feed and a tab).\n\n**Example:**\n\n String s = \"\\u0062\";\n" + }, + { + "shortName": "StringTokenizer", + "displayName": "Use of 'StringTokenizer'", + "enabled": false, + "description": "Reports usages of the `StringTokenizer` class. Excessive use of `StringTokenizer` is incorrect in an internationalized environment." + }, + { + "shortName": "NumericToString", + "displayName": "Call to 'Number.toString()'", + "enabled": false, + "description": "Reports `toString()` calls on objects of a class extending `Number`. Such calls are usually incorrect in an internationalized environment and some locale specific formatting should be used instead.\n\n**Example:**\n\n\n void print(Double d) {\n System.out.println(d.toString());\n }\n\nA possible way to fix this problem could be:\n\n\n void print(Double d) {\n System.out.printf(\"%f%n\", d);\n }\n\nThis formats the number using the default locale which is set during the startup of the JVM and is based on the host environment." + }, + { + "shortName": "CharacterComparison", + "displayName": "Character comparison", + "enabled": false, + "description": "Reports ordinal comparisons of `char` values. In an internationalized environment, such comparisons are rarely correct." + }, + { + "shortName": "MagicCharacter", + "displayName": "Magic character", + "enabled": false, + "description": "Reports character literals that are used without constant declaration. These characters might result in bad code readability. Also, there might be errors if a character is changed only in one location but not everywhere in code.\n\n**Example:**\n\n char c = 'c';\n" + }, + { + "shortName": "StringConcatenation", + "displayName": "String concatenation", + "enabled": false, + "description": "Reports `String` concatenations. Concatenation might be incorrect in an internationalized environment and could be replaced by usages of `java.text.MessageFormat` or similar classes." + }, + { + "shortName": "ConvertToBasicLatin", + "displayName": "Non-Basic Latin character", + "enabled": false, + "description": "Reports non-Basic Latin characters in literals and suggests replacing them with unicode entities.\n\nExample:\n\n\n // © 2021\n char c = '©';\n String s = \"Áî\";\n\nAfter the quick-fix is applied:\n\n\n // © 2021\n char c = '\\u00a9';\n String s = \"\\u00c1\\u00ee\";\n" + }, + { + "shortName": "HardCodedStringLiteral", + "displayName": "Hardcoded strings", + "enabled": false, + "description": "Reports any instances of hardcoded `String` literals.\n\nHardcoded `String` literals are probably errors in an\ninternationalized environment. This inspection won't report empty strings and strings consisting only of whitespaces. A quick-fix is available\nto transform a string literal into a `java.util.ResourceBundle.getString()` method call.\n\nUse inspection's options to further specialize whether this inspection should report strings in:\n\n* Assert statements like in `assert str.equals(\"message\")`\n* Exception constructor calls like in `new Exception(\"message\")`\n* JUnit assert calls like in `assertEquals(str, \"message\")`\n* The only argument to a method returning String like in `getStringByKey(\"key\")`\n* Literals with value of legal and existing class name like `Class.forName(\"java.lang.Object\")`\n* Literals with value of legal and existing property key `bundle.getString(\"authentication.failed\")`" + }, + { + "shortName": "DialogTitleCapitalization", + "displayName": "Incorrect string capitalization", + "enabled": false, + "description": "Reports strings in method parameters and return values annotated with `@Nls` and having the capitalization parameter to conform to capitalization rules existing in most platform UI guidelines.\n\n**Example:**\n\n\n void setTitle(@NlsContexts.DialogTitle String title) {}\n setTitle(\"This is sentence capitalization but should be title\"); \n\nAfter the quick-fix is applied:\n\n\n setTitle(\"This Is Sentence Capitalization but Should Be Title\"); \n" + }, + { + "shortName": "DuplicateStringLiteralInspection", + "displayName": "Duplicate string literal", + "enabled": false, + "description": "Reports string literals that are replicated unchanged throughout the project. Two quick-fixes are provided. One to introduce a constant for a duplicated string and use it throughout the project, and one to show the location of all the duplicates of a particular string literal.\n\nExample:\n\n\n class C1 { String CONST1 = \"duplicate string\"; }\n class C2 { String CONST2 = \"duplicate string\"; }\n\nConfigure the inspection:\n\n* Use the **Min string length** field to set the minimal string length required to detect duplicates.\n* Use the **Ignore @PropertyKey expressions** option to ignore strings passed as arguments to methods annotated with `org.jetbrains.annotations.PropertyKey`." + }, + { + "shortName": "NonAsciiCharacters", + "displayName": "Non-ASCII characters", + "enabled": false, + "description": "Reports code elements that use non-ASCII symbols in an unusual context.\n\nExample:\n\n* Non-ASCII characters used in identifiers, strings, or comments.\n* Identifiers written in different languages, such as `my`**С**`ollection` with the letter **C** written in Cyrillic.\n* Comments or strings containing Unicode symbols, such as long dashes and arrows." + }, + { + "shortName": "LossyEncoding", + "displayName": "Lossy encoding", + "enabled": false, + "description": "Reports characters that cannot be displayed because of the current document encoding.\n\nExamples:\n\n* If you type international characters in a document with the **US-ASCII** charset, some characters will be lost on save.\n* If you load a **UTF-8** -encoded file using the **ISO-8859-1** one-byte charset, some characters will be displayed incorrectly.\n\nYou can fix this by changing the file encoding\neither by specifying the encoding directly in the file, e.g. by editing `encoding=` attribute in the XML prolog of XML file,\nor by changing the corresponding options in **Settings \\| Editor \\| File Encodings**." + } + ] + }, + { + "name": "Performance", + "inspections": [ + { + "shortName": "KeySetIterationMayUseEntrySet", + "displayName": "Iteration over 'keySet()' can be optimized", + "enabled": false, + "description": "Reports iterations over the `keySet()` of a `java.util.Map` instance, where the iterated keys are used to retrieve the values from the map.\n\n\nSuch iteration may be more efficient when replaced with an iteration over the\n`entrySet()` or `values()` (if the key is not actually used).\n\n\nSimilarly, `keySet().forEach(key -> ...)`\ncan be replaced with `forEach((key, value) -> ...)` if values are retrieved\ninside a lambda.\n\n**Example:**\n\n\n for (Object key : map.keySet()) {\n Object val = map.get(key);\n }\n\nAfter the quick-fix is applied:\n\n\n for (Object val : map.values()) {}\n" + }, + { + "shortName": "StringConcatenationInLoops", + "displayName": "String concatenation in loop", + "enabled": true, + "description": "Reports String concatenation in loops.\n\n\nAs every String concatenation copies the whole\nstring, usually it is preferable to replace it with explicit calls to `StringBuilder.append()` or\n`StringBuffer.append()`.\n\n**Example:**\n\n\n String str = \"\";\n for(int i=0; i<10; i++) {\n str += i;\n }\n\nAfter the quick-fix is applied:\n\n\n String str = \"\";\n StringBuilder strBuilder = new StringBuilder(str);\n for(int i = 0; i<10; i++) {\n strBuilder.append(i);\n }\n str = strBuilder.toString();\n\n\nSometimes, the quick-fixes allow you to convert a `String` variable to a `StringBuilder` or\nintroduce a new `StringBuilder`. Be careful if the original code specially handles the `null` value, as the\nreplacement may change semantics. If `null` is possible, null-safe fixes that generate\nnecessary null-checks are suggested. Also, it's not guaranteed that the automatic replacement will always be more performant." + }, + { + "shortName": "DynamicRegexReplaceableByCompiledPattern", + "displayName": "Dynamic regular expression could be replaced by compiled 'Pattern'", + "enabled": false, + "description": "Reports calls to the regular expression methods (such as `matches()` or `split()`) of `java.lang.String` using constant arguments.\n\n\nSuch calls may be profitably replaced with a `private static final Pattern` field\nso that the regular expression does not have to be compiled each time it is used.\n\n**Example:**\n\n\n text.replaceAll(\"abc\", replacement);\n\nAfter the quick-fix is applied:\n\n\n private static final Pattern ABC = Pattern.compile(\"abc\", Pattern.LITERAL);\n ABC.matcher(text).replaceAll(Matcher.quoteReplacement(replacement));\n" + }, + { + "shortName": "ManualArrayCopy", + "displayName": "Manual array copy", + "enabled": true, + "description": "Reports manual copying of array contents that can be replaced with a call to `System.arraycopy()`.\n\n**Example:**\n\n\n for (int i = 0; i < array.length; i++) {\n newArray[i] = array[i];\n }\n\nAfter the quick-fix is applied:\n\n\n System.arraycopy(array, 0, newArray, 0, array.length);\n" + }, + { + "shortName": "LengthOneStringInIndexOf", + "displayName": "Single character string argument in 'String.indexOf()' call", + "enabled": false, + "description": "Reports single character strings being used as an argument in `String.indexOf()` and `String.lastIndexOf()` calls.\n\nA quick-fix is suggested to replace such string literals with equivalent character literals, gaining some performance enhancement.\n\n**Example:**\n\n\n return s.indexOf(\"x\");\n\nAfter the quick-fix is applied:\n\n\n return s.indexOf('x');\n" + }, + { + "shortName": "RandomDoubleForRandomInteger", + "displayName": "Using 'Random.nextDouble()' to get random integer", + "enabled": false, + "description": "Reports calls to `java.util.Random.nextDouble()` that are used to create a positive integer number by multiplying the call by a factor and casting to an integer.\n\n\nFor generating a random positive integer in a range,\n`java.util.Random.nextInt(int)` is simpler and more efficient.\n\n**Example:**\n\n\n int getRandomInt() {\n return (int) ((new Random()).nextDouble() * SIZE);\n }\n \nAfter the quick-fix is applied:\n\n\n int getRandomInt() {\n return (new Random()).nextInt(SIZE);\n }\n" + }, + { + "shortName": "UnnecessaryTemporaryOnConversionFromString", + "displayName": "Unnecessary temporary object in conversion from 'String'", + "enabled": true, + "description": "Reports unnecessary creation of temporary objects when converting from `String` to primitive types.\n\n**Example:**\n\n\n new Integer(\"3\").intValue()\n\nAfter the quick-fix is applied:\n\n\n Integer.valueOf(\"3\")\n" + }, + { + "shortName": "IOStreamConstructor", + "displayName": "'InputStream' and 'OutputStream' can be constructed using 'Files' methods", + "enabled": false, + "description": "Reports `new FileInputStream()` or `new FileOutputStream()` expressions that can be replaced with `Files.newInputStream()` or `Files.newOutputStream()` calls respectively. \nThe streams created using `Files` methods are usually more efficient than those created by stream constructors.\n\nExample:\n\n\n InputStream is = new BufferedInputStream(new FileInputStream(file));\n\nAfter the quick-fix is applied:\n\n\n InputStream is = new BufferedInputStream(Files.newInputStream(file.toPath()));\n\nThis inspection does not show warning if the language level 10 or higher, but the quick-fix is still available.\n\nThis inspection only reports if the language level of the project or module is 7 or higher.\n\nNew in 2022.1" + }, + { + "shortName": "TrivialStringConcatenation", + "displayName": "Concatenation with empty string", + "enabled": true, + "description": "Reports string concatenations where one of the arguments is the empty string. Such a concatenation is unnecessary and inefficient, particularly when used as an idiom for formatting non-`String` objects or primitives into `String`s.\n\n\nA quick-fix is suggested to simplify the concatenation.\n\n**Example:**\n\n\n void foo(int x, int y) {\n String s = \"\" + x + \" ; \" + y;\n }\n\nAfter the quick-fix is applied:\n\n\n void foo(int x, int y) {\n String s = x + \" ; \" + y;\n }\n" + }, + { + "shortName": "AutoUnboxing", + "displayName": "Auto-unboxing", + "enabled": false, + "description": "Reports expressions that are affected by unboxing conversion (automatic unwrapping of objects into primitive values). Try not to use objects instead of primitives. It might significantly affect the performance.\n\n**Example:**\n\n int x = new Integer(42);\n\nThe quick-fix makes the conversion explicit:\n\n int x = new Integer(42).intValue();\n\n\n*AutoUnboxing* appeared in Java 5.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions." + }, + { + "shortName": "EqualsHashCodeCalledOnUrl", + "displayName": "'equals()' or 'hashCode()' called on 'URL' object", + "enabled": false, + "description": "Reports `hashCode()` and `equals()` calls on `java.net.URL` objects.\n\n\n`URL`'s `equals()` and `hashCode()` methods can perform a DNS lookup to resolve the host name.\nThis may cause significant delays, depending on the availability and speed of the network and the DNS server.\nUsing `java.net.URI` instead of `java.net.URL` will avoid the DNS lookup.\n\n**Example:**\n\n\n int equalsHashCode(URL url1, URL url2) {\n return url1.hashCode() == url2.hashCode();\n }\n" + }, + { + "shortName": "FieldMayBeStatic", + "displayName": "Field can be made 'static'", + "enabled": true, + "description": "Reports instance variables that can safely be made `static`. A field can be static if it is declared `final` and initialized with a constant.\n\n**Example:**\n\n\n public final String str = \"sample\";\n" + }, + { + "shortName": "CollectionsMustHaveInitialCapacity", + "displayName": "Collection without initial capacity", + "enabled": false, + "description": "Reports attempts to instantiate a new `Collection` object without specifying an initial capacity.\n\n\nIf no initial capacity is specified, a default capacity is used, which will rarely be optimal. Failing\nto specify initial capacities for collections may result in performance issues if space needs to be reallocated and\nmemory copied when the initial capacity is exceeded.\nThis inspection checks allocations of classes listed in the inspection's settings.\n\n**Example:**\n\n\n new HashMap();\n\nUse the following options to configure the inspection:\n\n* List collection classes that should be checked.\n* Whether to ignore field initializers." + }, + { + "shortName": "MethodMayBeStatic", + "displayName": "Method can be made 'static'", + "enabled": false, + "description": "Reports methods that can safely be made `static`. Making methods static when possible can reduce memory consumption and improve your code quality.\n\nA method can be `static` if:\n\n* it is not `synchronized`, `native` or `abstract`,\n* does not reference any of non-static methods and non-static fields from the containing class,\n* is not an override and is not overridden in a subclass.\n\nUse the following options to configure the inspection:\n\n* Whether to report only `private` and `final` methods, which increases the performance of this inspection.\n* Whether to ignore empty methods.\n* Whether to ignore default methods in interface when using Java 8 or higher.\n* Whether to let the quick-fix replace instance qualifiers with class references in calls to methods which are made `static`, that is, call `myClass.m()` would be replaced with `MyClass.m()`." + }, + { + "shortName": "InstantiatingObjectToGetClassObject", + "displayName": "Instantiating object to get 'Class' object", + "enabled": true, + "description": "Reports code that instantiates a class to get its class object.\n\nIt is more performant to access the class object\ndirectly by name.\n\n**Example:**\n\n\n Class c = new Sample().getClass();\n\nAfter the quick-fix is applied:\n\n\n Class c = Sample.class;\n" + }, + { + "shortName": "AutoBoxing", + "displayName": "Auto-boxing", + "enabled": false, + "description": "Reports expressions that are affected by autoboxing conversion (automatic wrapping of primitive values as objects). Try not to use objects instead of primitives. It might significantly affect performance.\n\n**Example:**\n\n Integer x = 42;\n\nThe quick-fix makes the conversion explicit:\n\n Integer x = Integer.valueOf(42);\n\n\n*AutoBoxing* appeared in Java 5.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions." + }, + { + "shortName": "ArraysAsListWithZeroOrOneArgument", + "displayName": "Call to 'Arrays.asList()' with too few arguments", + "enabled": true, + "description": "Reports calls to `Arrays.asList()` with at most one argument.\n\n\nSuch calls could be replaced\nwith `Collections.singletonList()`, `Collections.emptyList()`,\nor `List.of()` on JDK 9 and later, which will save some memory.\n\nIn particular, `Collections.emptyList()` and `List.of()` with no arguments\nalways return a shared instance,\nwhile `Arrays.asList()` with no arguments creates a new object every time it's called.\n\nNote: the lists returned by `Collections.singletonList()` and `List.of()` are immutable,\nwhile the list returned `Arrays.asList()` allows calling the `set()` method.\nThis may break the code in rare cases.\n\n**Example:**\n\n\n List empty = Arrays.asList();\n List one = Arrays.asList(\"one\");\n\nAfter the quick-fix is applied:\n\n\n List empty = Collections.emptyList();\n List one = Collections.singletonList(\"one\");\n" + }, + { + "shortName": "ObjectAllocationInLoop", + "displayName": "Object allocation in loop", + "enabled": false, + "description": "Reports object or array allocations inside loops. While not necessarily a problem, an object allocation inside a loop is a great place to look for memory leaks and performance issues.\n\n\nThe inspection reports the following constructs:\n\n* Explicit allocations via `new` operator\n* Methods known to return new object\n* Instance-bound method references\n* Lambdas that capture variables or `this` reference\n\n**Example:**\n\n\n // Explicit allocation\n for (Status status : Status.values()) {\n declarationsMap.put(status, new ArrayList<>());\n }\n\n // Lambda captures variable\n String message = \"Engine running.\";\n for (Engine engine : engines) {\n if (!isRunning(engine)) {\n logger.warn(() -> {\n return String.format(message);\n });\n }\n }\n\n // Instance-bound method reference\n for(Node node : nodes) {\n descriptor = node.getDescription();\n descriptor.ifPresent(dynamicTestExecutor::execute);\n }\n\n" + }, + { + "shortName": "CallToSimpleGetterInClass", + "displayName": "Call to simple getter from within class", + "enabled": false, + "description": "Reports calls to a simple property getter from within the property's class.\n\n\nA simple property getter is defined as one which simply returns the value of a field,\nand does no other calculations. Such simple getter calls can be safely inlined using the quick-fix.\nSome coding standards also suggest against the use of simple getters for code clarity reasons.\n\n**Example:**\n\n\n public class Salient {\n private String name;\n\n public String getName() {\n return name;\n }\n\n @Override\n public String toString() {\n return getName();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class Salient {\n private String name;\n\n public String getName() {\n return name;\n }\n\n @Override\n public String toString() {\n return name;\n }\n }\n\nUse the following options to configure the inspection:\n\n* Whether to only report getter calls on `this`, not on objects of the same type passed in as a parameter.\n* Whether to ignore non-`private` getters." + }, + { + "shortName": "LengthOneStringsInConcatenation", + "displayName": "Single character string concatenation", + "enabled": false, + "description": "Reports concatenation with string literals that consist of one character.\n\nThese literals may be replaced with equivalent character literals, gaining some performance enhancement.\n\n**Example:**\n\n\n String hello = hell + \"o\";\n\nAfter the quick-fix is applied:\n\n\n String hello = hell + 'o';\n" + }, + { + "shortName": "ListRemoveInLoop", + "displayName": "'List.remove()' called in loop", + "enabled": true, + "description": "Reports `List.remove(index)` called in a loop that can be replaced with `List.subList().clear()`.\n\nThe replacement\nis more efficient for most `List` implementations when many elements are deleted.\n\nExample:\n\n\n void removeRange(List list, int from, int to) {\n for (int i = from; i < to; i++) {\n list.remove(from);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n void removeRange(List list, int from, int to) {\n if (to > from) {\n list.subList(from, to).clear();\n }\n }\n\n\nThe quick-fix adds a range check automatically to prevent a possible `IndexOutOfBoundsException` when the minimal value is bigger\nthan the maximal value. It can be removed if such a situation is impossible in your code.\n\nNew in 2018.2" + }, + { + "shortName": "ObjectInstantiationInEqualsHashCode", + "displayName": "Object instantiation inside 'equals()' or 'hashCode()'", + "enabled": false, + "description": "Reports construction of (temporary) new objects inside `equals()`, `hashCode()`, `compareTo()`, and `Comparator.compare()` methods.\n\n\nBesides constructor invocations, new objects can also be created by autoboxing or iterator creation inside a\n`foreach` statement.\nThis can cause performance problems, for example, when objects are added to a `Set` or `Map`,\nwhere these methods will be called often.\n\n\nThe inspection will not report when the objects are created in a `throw` or `assert` statement.\n\n**Example:**\n\n\n class Person {\n private String name;\n private int age;\n\n public boolean equals(Object o) {\n return Arrays.equals(new Object[] {name, age}, new Object[] {((Foo)o).name, ((Foo)o).age});\n }\n\n public int hashCode() {\n return (name + age).hashCode();\n }\n }\n\n\nIn this example, two additional arrays are created inside `equals()`, usages of `age` field require boxing,\nand `name + age` implicitly creates a new string." + }, + { + "shortName": "BooleanConstructor", + "displayName": "Boolean constructor call", + "enabled": true, + "description": "Reports creation of `Boolean` objects.\n\n\nConstructing new `Boolean` objects is rarely necessary,\nand may cause performance problems if done often enough. Also, `Boolean`\nconstructors are deprecated since Java 9 and could be removed or made\ninaccessible in future Java versions.\n\n**Example:**\n\n\n Boolean b1 = new Boolean(true);\n Boolean b2 = new Boolean(str);\n\nAfter the quick-fix is applied:\n\n\n Boolean b1 = Boolean.TRUE;\n Boolean b2 = Boolean.valueOf(str);\n" + }, + { + "shortName": "IfStatementMissingBreakInLoop", + "displayName": "Early loop exit in 'if' condition", + "enabled": true, + "description": "Reports loops with an `if` statement that can end with `break` without changing the semantics. This prevents redundant loop iterations.\n\n**Example:**\n\n\n boolean found = false;\n for (int i = 0; i < arr.length; i++) {\n if (Objects.equals(value, arr[i])) {\n found = true;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n boolean found = false;\n for (int i = 0; i < arr.length; i++) {\n if (Objects.equals(value, arr[i])) {\n found = true;\n break;\n }\n }\n\nNew in 2019.2" + }, + { + "shortName": "RedundantStringFormatCall", + "displayName": "Redundant call to 'String.format()'", + "enabled": true, + "description": "Reports calls to methods like `format()` and `printf()` that can be safely removed or simplified.\n\n**Example:**\n\n\n System.out.println(String.format(\"Total count: %d\", 42));\n\nAfter the quick-fix is applied:\n\n\n System.out.printf(\"Total count: %d%n\", 42);\n" + }, + { + "shortName": "TailRecursion", + "displayName": "Tail recursion", + "enabled": false, + "description": "Reports tail recursion, that is, when a method calls itself as its last action before returning.\n\n\nTail recursion can always be replaced by looping, which will be considerably faster.\nSome JVMs perform tail-call optimization, while others do not. Thus, tail-recursive solutions may have considerably different\nperformance characteristics on different virtual machines.\n\nExample:\n\n\n int factorial(int val, int runningVal) {\n if (val == 1) {\n return runningVal;\n } else {\n return factorial(val - 1, runningVal * val);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n int factorial(int val, int runningVal) {\n while (true) {\n if (val == 1) {\n return runningVal;\n } else {\n runningVal = runningVal * val;\n val = val - 1;\n }\n }\n }\n" + }, + { + "shortName": "StringEqualsEmptyString", + "displayName": "'String.equals()' can be replaced with 'String.isEmpty()'", + "enabled": false, + "description": "Reports `equals()` being called to compare a `String` with an empty string. In this case, using `.isEmpty()` is better as it shows you exactly what you're checking.\n\n**Example:**\n\n\n void checkString(String s){\n if (\"\".equals(s)) throw new IllegalArgumentException();\n }\n\nAfter the quick-fix is applied:\n\n\n void checkString(String s){\n if (s != null && s.isEmpty()) throw new IllegalArgumentException();\n }\n\n\n`\"\".equals(str)` returns false when `str` is null. For safety, this inspection's quick-fix inserts an explicit\nnull-check when\nthe `equals()` argument is nullable. Use the option to make the inspection ignore such cases." + }, + { + "shortName": "ObjectEqualsCanBeEquality", + "displayName": "'equals()' call can be replaced with '=='", + "enabled": true, + "description": "Reports calls to `equals()` that can be replaced by `==` or `!=` expressions without a change in semantics.\n\nThese calls can be replaced when they are used to compare `final` classes that don't have their own `equals()` implementation but use the default `Object.equals()`.\nThis replacement may result in better performance.\n\nThere is a separate inspection for `equals()` calls on `enum` values: 'equals()' called on Enum value." + }, + { + "shortName": "ToArrayCallWithZeroLengthArrayArgument", + "displayName": "'Collection.toArray()' call style", + "enabled": true, + "description": "Reports `Collection.toArray()` calls that are not in the preferred style, and suggests applying the preferred style.\n\nThere are two styles to convert a collection to an array:\n\n* A pre-sized array, for example, `c.toArray(new String[c.size()])`\n* An empty array, for example, `c.toArray(new String[0])`\n\nIn older Java versions, using a pre-sized array was recommended, as the reflection\ncall necessary to create an array of proper size was quite slow.\n\nHowever, since late updates of OpenJDK 6, this call was intrinsified, making\nthe performance of the empty array version the same, and sometimes even better, compared\nto the pre-sized version. Also, passing a pre-sized array is dangerous for a concurrent or\nsynchronized collection as a data race is possible between the `size` and `toArray`\ncalls. This may result in extra `null`s at the end of the array if the collection was concurrently\nshrunk during the operation.\n\nUse the inspection options to select the preferred style." + }, + { + "shortName": "ReplaceInefficientStreamCount", + "displayName": "Inefficient Stream API call chains ending with count()", + "enabled": true, + "description": "Reports Stream API call chains ending with the `count()` operation that could be optimized.\n\n\nThe following call chains are replaced by this inspection:\n\n* `Collection.stream().count()` → `Collection.size()`. In Java 8 `Collection.stream().count()` actually iterates over the collection elements to count them, while `Collection.size()` is much faster for most of the collections.\n* `Stream.flatMap(Collection::stream).count()` → `Stream.mapToLong(Collection::size).sum()`. Similarly, there's no need to iterate over all the nested collections. Instead, their sizes could be summed up.\n* `Stream.filter(o -> ...).count() > 0` → `Stream.anyMatch(o -> ...)`. Unlike the original call, `anyMatch()` may stop the computation as soon as a matching element is found.\n* `Stream.filter(o -> ...).count() == 0` → `Stream.noneMatch(o -> ...)`. Similar to the above.\n\n\nNote that if the replacement involves a short-circuiting operation like `anyMatch()`, there could be a visible behavior change,\nif the intermediate stream operations produce side effects. In general, side effects should be avoided in Stream API calls." + }, + { + "shortName": "ManualArrayToCollectionCopy", + "displayName": "Manual array to collection copy", + "enabled": true, + "description": "Reports code that uses a loop to copy the contents of an array into a collection.\n\n\nA shorter and potentially faster (depending on the collection implementation) way to do this is using `Collection.addAll(Arrays.asList())` or `Collections.addAll()`.\n\n\nOnly loops without additional statements inside are reported.\n\n**Example:**\n\n\n void addAll(List list, String[] arr) {\n for (int i = 0; i < arr.length; i++) {\n String s = arr[i];\n list.add(s);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n void addAll(List list, String[] arr) {\n Collections.addAll(list, arr);\n }\n" + }, + { + "shortName": "MapReplaceableByEnumMap", + "displayName": "'Map' can be replaced with 'EnumMap'", + "enabled": false, + "description": "Reports instantiations of `java.util.Map` objects whose key types are enumerated classes. Such `java.util.Map` objects can be replaced with `java.util.EnumMap` objects.\n\n\n`java.util.EnumMap` implementations can be much more efficient\nbecause the underlying data structure is a simple array.\n\n**Example:**\n\n\n Map myEnums = new HashMap<>();\n\nAfter the quick-fix is applied:\n\n\n Map myEnums = new EnumMap<>(MyEnum.class);\n" + }, + { + "shortName": "BulkFileAttributesRead", + "displayName": "Bulk 'Files.readAttributes()' call can be used", + "enabled": false, + "description": "Reports multiple sequential `java.io.File` attribute checks, such as:\n\n* `isDirectory()`\n* `isFile()`\n* `lastModified()`\n* `length()`\n\nSuch calls can be replaced with a bulk `Files.readAttributes()` call. This is usually more performant then multiple separate attribute checks.\n\nExample:\n\n\n boolean isNewFile(File file, long lastModified) throws IOException {\n return file.isFile() && file.lastModified() > lastModified;\n }\n\nAfter the quick-fix is applied:\n\n\n boolean isNewFile(File file, long lastModified) throws IOException {\n BasicFileAttributes fileAttributes = Files.readAttributes(file.toPath(), BasicFileAttributes.class);\n return fileAttributes.isRegularFile() && fileAttributes.lastModifiedTime().toMillis() > lastModified;\n }\n\nThis inspection does not show a warning if `IOException` is not handled in the current context, but the quick-fix is still available.\n\nNote that the replacements are usually not completely equivalent and should be applied with care. In particular, the behavior could differ if\nthe file does not exist at all.\n\nThis inspection only reports if the language level of the project or module is 7 or higher.\n\nNew in 2022.1" + }, + { + "shortName": "ExplicitArgumentCanBeLambda", + "displayName": "Explicit argument can be lambda", + "enabled": true, + "description": "Reports method calls that accept a non-trivial expression and can be replaced with an equivalent method call which accepts a lambda instead.\n\n\nConverting an expression to a lambda ensures that the expression won't be evaluated\nif it's not used inside the method. For example, `optional.orElse(createDefaultValue())` can be converted\nto `optional.orElseGet(this::createDefaultValue)`.\n\nNew in 2018.1" + }, + { + "shortName": "UseBulkOperation", + "displayName": "Bulk operation can be used instead of iteration", + "enabled": true, + "description": "Reports single operations inside loops that could be replaced with a bulk method.\n\n\nNot only are bulk methods shorter, but in some cases they may be more performant as well.\n\n**Example:**\n\n void test(Collection numbers) {\n List result = new ArrayList<>();\n for (Integer i : numbers) {\n result.add(i);\n }\n }\n\nAfter the fix is applied:\n\n\n void test(Collection numbers) {\n List result = new ArrayList<>();\n result.addAll(numbers);\n }\n\n\nThe **Use Arrays.asList() to wrap arrays** option allows to report arrays, even if the bulk method requires a collection.\nIn this case the quick-fix will automatically wrap the array in `Arrays.asList()` call.\n\nNew in 2017.1" + }, + { + "shortName": "SlowListContainsAll", + "displayName": "Call to 'list.containsAll(collection)' may have poor performance", + "enabled": true, + "description": "Reports calls to `containsAll()` on `java.util.List`.\n\n\nThe time complexity of this method call is O(n·m), where n is the number of elements in the list on which\nthe method is called, and m is the number of elements in the collection passed to the method as a parameter.\nWhen the list is large, this can be an expensive operation.\n\n\nThe quick-fix wraps the list in `new java.util.HashSet<>()` since the time required to create\n`java.util.HashSet` from `java.util.List` and execute `containsAll()` on\n`java.util.HashSet` is O(n+m).\n\n**Example:**\n\n public boolean check(List list, Collection collection) {\n // O(n·m) complexity\n return list.containsAll(collection);\n }\n\nAfter the quick-fix is applied:\n\n public boolean check(List list, Collection collection) {\n // O(n+m) complexity\n return new HashSet<>(list).containsAll(collection);\n }\n\nNew in 2022.1" + }, + { + "shortName": "StringConcatenationInsideStringBufferAppend", + "displayName": "String concatenation as argument to 'StringBuilder.append()' call", + "enabled": true, + "description": "Reports `String` concatenation used as the argument to `StringBuffer.append()`, `StringBuilder.append()` or `Appendable.append()`.\n\n\nSuch calls may profitably be turned into chained append calls on the existing `StringBuffer/Builder/Appendable`\nsaving the cost of an extra `StringBuffer/Builder` allocation.\nThis inspection ignores compile-time evaluated `String` concatenations, in which case the conversion would only\nworsen performance.\n\n**Example:**\n\n\n void bar(StringBuilder builder, String name) {\n builder.append(\"Hello,\" + name); //warning\n builder.append(\"Hello,\" + \"world\"); //no warning\n }\n" + }, + { + "shortName": "BoxingBoxedValue", + "displayName": "Boxing of already boxed value", + "enabled": true, + "description": "Reports boxing of already boxed values.\n\n\nThis is a redundant\noperation since any boxed value will first be auto-unboxed before boxing the\nvalue again. If done inside an inner loop, such code may cause performance\nproblems.\n\n**Example:**\n\n\n Integer value = 1;\n method(Integer.valueOf(value));\n\nAfter the quick fix is applied:\n\n\n Integer value = 1;\n method(value);\n" + }, + { + "shortName": "StringBufferMustHaveInitialCapacity", + "displayName": "'StringBuilder' without initial capacity", + "enabled": false, + "description": "Reports attempts to instantiate a new `StringBuffer` or `StringBuilder` object without specifying its initial capacity.\n\n\nIf no initial capacity is specified, a default capacity is used, which will rarely be optimal.\nFailing to specify the initial capacity for `StringBuffer` may result\nin performance issues if space needs to be reallocated and memory copied\nwhen the initial capacity is exceeded.\n\nExample:\n\n\n // Capacity is not specified\n var sb = new StringBuilder();\n" + }, + { + "shortName": "StringReplaceableByStringBuffer", + "displayName": "Non-constant 'String' can be replaced with 'StringBuilder'", + "enabled": false, + "description": "Reports variables declared as `java.lang.String` that are repeatedly appended to. Such variables could be declared more efficiently as `java.lang.StringBuffer` or `java.lang.StringBuilder`.\n\n**Example:**\n\n\n String s = \"\";\n for (int i = 0; i < names.length; i++) {\n String name = names[i] + (i == names.length - 1 ? \"\" : \" \");\n s = s + name;\n }\n\nSuch a loop can be replaced with:\n\n\n StringBuilder s = new StringBuilder();\n for (int i = 0; i < names.length; i++) {\n String name = names[i] + (i == names.length - 1 ? \"\" : \" \");\n s.append(name);\n }\n\nOr even with:\n\n\n String s = String.join(\" \", names);\n\n\nUse the option to make this inspection only report when the variable is appended to in a loop." + }, + { + "shortName": "StringBufferToStringInConcatenation", + "displayName": "'StringBuilder.toString()' in concatenation", + "enabled": false, + "description": "Reports `StringBuffer.toString()` or `StringBuilder.toString()` calls in string concatenations. Such calls are unnecessary when concatenating and can be removed, saving a method call and an object allocation, which may improve performance." + }, + { + "shortName": "CollectionContainsUrl", + "displayName": "'Map' or 'Set' may contain 'URL' objects", + "enabled": false, + "description": "Reports `java.util.Set` and `java.util.Map` variables that contain `java.net.URL` objects. Such collections will call the `equals()` and `hashCode()` methods on inserted objects, which can cause performance problems on `URL` objects.\n\n\n`URL`'s `equals()` and `hashCode()` methods can perform a DNS lookup to resolve the host name.\nThis may cause significant delays, depending on the availability and speed of the network and the DNS server.\nUsing `java.net.URI` instead of `java.net.URL` will avoid the DNS lookup.\n\n**Example:**\n\n\n Set set = new HashSet();\n" + }, + { + "shortName": "UnnecessaryTemporaryOnConversionToString", + "displayName": "Unnecessary temporary object in conversion to 'String'", + "enabled": true, + "description": "Reports unnecessary creation of temporary objects when converting from a primitive type to `String`.\n\n**Example:**\n\n\n String foo = new Integer(3).toString();\n\nAfter the quick-fix is applied:\n\n\n String foo = Integer.toString(3);\n" + }, + { + "shortName": "ClassInitializerMayBeStatic", + "displayName": "Class initializer may be 'static'", + "enabled": true, + "description": "Reports instance initializers which may be made `static`.\n\n\nAn instance initializer may be static if it does not reference any of its class' non-static members.\nStatic initializers are executed once the class is resolved,\nwhile instance initializers are executed on each instantiation of the class.\n\nThis inspection doesn't report instance empty initializers and initializers in anonymous classes.\n\n**Example:**\n\n\n class A {\n public static String CONSTANT;\n {\n CONSTANT = \"Hello\";\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class A {\n public static String CONSTANT;\n static {\n CONSTANT = \"Hello\"; //now initialized only once per class\n }\n }\n" + }, + { + "shortName": "SlowAbstractSetRemoveAll", + "displayName": "Call to 'set.removeAll(list)' may work slowly", + "enabled": true, + "description": "Reports calls to `java.util.Set.removeAll()` with a `java.util.List` argument.\n\n\nSuch a call can be slow when the size of the argument is greater than or equal to the size of the set,\nand the set is a subclass of `java.util.AbstractSet`.\nIn this case, `List.contains()` is called for each element in the set, which will perform a linear search.\n\n**Example:**\n\n\n public void check(String... ss) {\n // possible O(n^2) complexity\n mySet.removeAll(List.of(ss));\n }\n\nAfter the quick fix is applied:\n\n\n public void check(String... ss) {\n // O(n) complexity\n List.of(ss).forEach(mySet::remove);\n }\n\nNew in 2020.3" + }, + { + "shortName": "SetReplaceableByEnumSet", + "displayName": "'Set' can be replaced with 'EnumSet'", + "enabled": false, + "description": "Reports instantiations of `java.util.Set` objects whose content types are enumerated classes. Such `Set` objects can be replaced with `java.util.EnumSet` objects.\n\n\n`EnumSet` implementations can be much more efficient compared to\nother sets, as the underlying data structure is a bit vector. Use the quick-fix to replace the initializer with a call to\n`EnumSet.noneOf()`. This quick-fix is not available when the type of the variable is a sub-class of `Set`.\n\n**Example:**\n\n\n enum MyEnum { FOO, BAR; }\n\n Set enums = new HashSet();\n\nAfter the quick-fix is applied:\n\n\n enum MyEnum { FOO, BAR; }\n\n Set enums = EnumSet.noneOf(MyEnum.class);\n" + }, + { + "shortName": "CallToSimpleSetterInClass", + "displayName": "Call to simple setter from within class", + "enabled": false, + "description": "Reports calls to a simple property setter from within the property's class.\n\n\nA simple property setter is defined as one which simply assigns the value of its parameter to a field,\nand does no other calculations. Such simple setter calls can be safely inlined.\nSome coding standards also suggest against the use of simple setters for code clarity reasons.\n\n**Example:**\n\n\n class Foo {\n private int index;\n public Foo(int idx) {\n setIndex(idx);\n }\n public void setIndex(int idx) {\n index = idx;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n private int index;\n public Foo(int idx) {\n index = idx;\n }\n public void setIndex(int idx) {\n index = idx;\n }\n }\n\nUse the following options to configure the inspection:\n\n* Whether to only report setter calls on `this`, not on objects of the same type passed in as a parameter.\n* Whether to ignore non-`private` setters." + }, + { + "shortName": "WrapperTypeMayBePrimitive", + "displayName": "Wrapper type may be primitive", + "enabled": true, + "description": "Reports local variables of wrapper type that are mostly used as primitive types.\n\nIn some cases, boxing can be source of significant performance penalty, especially in loops.\n\nHeuristics are applied to estimate the number of boxing operations. For example, conversions inside loops are considered\nas much more numerous.\n\n**Example:**\n\n public void example() {\n Integer value = 12;\n needBox(value);\n for (int i = 0; i < 10; i++) {\n // Loop usages considered as happening more often\n needPrimitive(value);\n }\n }\n\n void needPrimitive(int value) {}\n void needBox(Integer value) {}\n\nAfter the quick-fix is applied:\n\n public void example() {\n int value = 12;\n needBox(value);\n for (int i = 0; i < 10; i++) {\n // Loop usages considered as happening more often\n needPrimitive(value);\n }\n }\n\n void needPrimitive(int value) {}\n void needBox(Integer value) {}\n\n\nNew in 2018.2" + }, + { + "shortName": "CollectionAddAllCanBeReplacedWithConstructor", + "displayName": "Redundant 'Collection.addAll()' call", + "enabled": true, + "description": "Reports `Collection.addAll()` and `Map.putAll()` calls immediately after an instantiation of a collection using a no-arg constructor.\n\nSuch constructs can be replaced with a single call to a parametrized constructor, which simplifies the code. Also, for some collections the replacement\nmight be more performant.\n\n**Example:**\n\n\n Set set = new HashSet<>();\n set.addAll(Arrays.asList(\"alpha\", \"beta\", \"gamma\"));\n\nAfter the quick-fix is applied:\n\n\n Set set = new HashSet<>(Arrays.asList(\"alpha\", \"beta\", \"gamma\"));\n\n\nThe JDK collection classes are supported by default.\nAdditionally, you can specify other classes using the **Classes to check** panel." + } + ] + }, + { + "name": "Class structure", + "inspections": [ + { + "shortName": "ConstantDeclaredInAbstractClass", + "displayName": "Constant declared in 'abstract' class", + "enabled": false, + "description": "Reports constants (`public static final` fields) declared in abstract classes.\n\nSome coding standards require declaring constants in interfaces instead." + }, + { + "shortName": "ClassWithOnlyPrivateConstructors", + "displayName": "Class with only 'private' constructors should be declared 'final'", + "enabled": false, + "description": "Reports classes with only `private` constructors.\n\nA class that only has `private` constructors cannot be extended outside a file and should be declared as `final`." + }, + { + "shortName": "NonFinalFieldInEnum", + "displayName": "Non-final field in 'enum'", + "enabled": false, + "description": "Reports non-final fields in enumeration types as they are rarely needed and provide a global mutable state.\n\n**Example:**\n\n\n enum Enum {\n FIRST(\"first\"),\n SECOND(\"second\");\n\n public String str;\n\n Enum(String str) {\n this.str = str;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n enum Enum {\n FIRST(\"first\"),\n SECOND(\"second\");\n\n public final String str;\n\n Enum(String str) {\n this.str = str;\n }\n }\n\nConfigure the \\`Ignore field if quick-fix is not available\\` checkbox to only highlight fields that can be made final by the quick-fix." + }, + { + "shortName": "FinalMethod", + "displayName": "Method can't be overridden", + "enabled": false, + "description": "Reports methods that are declared `final`. Such methods can't be overridden and may indicate a lack of object-oriented design. Some coding standards discourage `final` methods." + }, + { + "shortName": "NonFinalUtilityClass", + "displayName": "Utility class is not 'final'", + "enabled": false, + "description": "Reports utility classes that aren't `final`.\n\nUtility classes have all fields and methods declared as `static`.\nMaking them `final` prevents them from being accidentally subclassed." + }, + { + "shortName": "Singleton", + "displayName": "Singleton", + "enabled": false, + "description": "Reports singleton classes.\n\nSingleton classes are declared in a way that only one instance of the class can ever be instantiated. Singleton classes complicate testing,\nand their presence may indicate a lack of object-oriented design.\n\n**Example:**\n\n\n class Singleton {\n private static final Singleton ourInstance = new Singleton();\n\n private Singleton() {\n }\n\n public Singleton getInstance() {\n return ourInstance;\n }\n }\n" + }, + { + "shortName": "StaticNonFinalField", + "displayName": "'static', non-'final' field", + "enabled": false, + "description": "Reports non-`final` `static` fields.\n\nA quick-fix is available to add the `final` modifier to a non-`final` `static` field.\n\nThis inspection doesn't check fields' mutability. For example, adding the `final` modifier to a field that has a value\nbeing set somewhere will cause a compilation error.\n\n\nUse the **Only report 'public' fields** option so that the inspection reported only `public` fields." + }, + { + "shortName": "ParameterCanBeLocal", + "displayName": "Value passed as parameter never read", + "enabled": true, + "description": "Reports redundant method parameters that can be replaced with local variables.\n\nIf all local usages of a parameter are preceded by assignments to that parameter, the\nparameter can be removed and its usages replaced with local variables.\nIt makes no sense to have such a parameter, as values that are passed to it are overwritten.\nUsually, the problem appears as a result of refactoring.\n\nExample:\n\n\n void test(int p) {\n p = 1;\n System.out.print(p);\n }\n\nAfter the quick-fix is applied:\n\n\n void test() {\n int p = 1;\n System.out.print(p);\n }\n" + }, + { + "shortName": "NoopMethodInAbstractClass", + "displayName": "No-op method in 'abstract' class", + "enabled": false, + "description": "Reports no-op (for \"no operation\") methods in `abstract` classes.\n\nIt is usually a better\ndesign to make such methods `abstract` themselves so that classes inheriting these\nmethods provide their implementations.\n\n**Example:**\n\n\n abstract class Test {\n protected void doTest() {\n }\n }\n" + }, + { + "shortName": "ClassInitializer", + "displayName": "Non-'static' initializer", + "enabled": false, + "description": "Reports non-`static` initializers in classes.\n\nSome coding standards prohibit instance initializers and recommend using constructors or field initializers for initialization.\nAlso, deleting the `static` keyword may accidentally create non-`static` initializers and result in obscure bugs.\n\nThis inspection doesn't report instance initializers in anonymous classes.\n\n\nUse the **Only warn when the class has one or more constructors** option to ignore instance initializers in classes that don't have any constructors." + }, + { + "shortName": "UtilityClassWithPublicConstructor", + "displayName": "Utility class with 'public' constructor", + "enabled": true, + "description": "Reports utility classes with `public` constructors.\n\nUtility classes have all fields and methods declared as `static`. Creating a `public`\nconstructor in such classes is confusing and may cause accidental class instantiation." + }, + { + "shortName": "UtilityClassCanBeEnum", + "displayName": "Utility class can be 'enum'", + "enabled": false, + "description": "Reports utility classes that can be converted to enums.\n\nSome coding style guidelines require implementing utility classes as enums\nto avoid code coverage issues in `private` constructors.\n\n**Example:**\n\n\n class StringUtils {\n public static final String EMPTY = \"\";\n }\n\nAfter the quick-fix is applied:\n\n\n enum StringUtils {\n ;\n public static final String EMPTY = \"\";\n }\n" + }, + { + "shortName": "ListenerMayUseAdapter", + "displayName": "Class may extend adapter instead of implementing listener", + "enabled": false, + "description": "Reports classes implementing listeners instead of extending corresponding adapters.\n\nA quick-fix is available to\nremove any redundant empty methods left after replacing a listener implementation with an adapter extension.\n\n\nUse the **Only warn when empty implementing methods are found** option to configure the inspection to warn even if no empty methods are found." + }, + { + "shortName": "FinalClass", + "displayName": "Class is closed to inheritance", + "enabled": false, + "description": "Reports classes that are declared `final`. Final classes that extend a `sealed` class or interface are not reported. Such classes can't be inherited and may indicate a lack of object-oriented design. Some coding standards discourage `final` classes.\n\n**Example:**\n\n\n public final class Main {\n }\n\nAfter the quick-fix is applied:\n\n\n public class Main {\n }\n" + }, + { + "shortName": "UtilityClassWithoutPrivateConstructor", + "displayName": "Utility class without 'private' constructor", + "enabled": false, + "description": "Reports utility classes without `private` constructors.\n\nUtility classes have all fields and methods declared as `static`. Creating `private`\nconstructors in utility classes prevents them from being accidentally instantiated.\n\n\nUse the **Ignore if annotated by** option to specify special annotations. The inspection ignores classes marked with one of\nthese annotations.\n\n\nUse the **Ignore classes with only a main method** option to ignore classes with no methods other than the main one." + }, + { + "shortName": "MarkerInterface", + "displayName": "Marker interface", + "enabled": false, + "description": "Reports marker interfaces without any methods or fields.\n\nSuch interfaces may be confusing and typically indicate a design failure.\n\nThe inspection ignores interfaces that extend two or more interfaces and interfaces\nthat specify the generic type of their superinterface." + }, + { + "shortName": "InnerClassOnInterface", + "displayName": "Inner class of interface", + "enabled": false, + "description": "Reports inner classes in `interface` classes.\n\nSome coding standards\ndiscourage the use of such classes. The inspection doesn't report enum classes and annotation interfaces.\n\n\nUse the **Ignore inner interfaces of interfaces** option to ignore inner interfaces. For example:\n\n\n interface I {\n interface Inner {\n }\n }\n" + }, + { + "shortName": "FieldCanBeLocal", + "displayName": "Field can be local", + "enabled": false, + "description": "Reports redundant class fields that can be replaced with local variables.\n\nIf all local usages of a field are preceded by assignments to that field, the\nfield can be removed, and its usages can be replaced with local variables." + }, + { + "shortName": "UtilityClass", + "displayName": "Utility class", + "enabled": false, + "description": "Reports utility classes.\n\nUtility classes have all fields and methods declared as `static` and their\npresence may indicate a lack of object-oriented design.\n\n\nUse the **Ignore if annotated by** option to specify special annotations. The inspection ignores classes annotated with one of\nthese annotations." + }, + { + "shortName": "ClassNameDiffersFromFileName", + "displayName": "Class name differs from file name", + "enabled": false, + "description": "Reports top-level class names that don't match the name of a file containing them.\n\nWhile the Java specification allows for naming non-`public` classes this way,\nfiles with unmatched names may be confusing and decrease usefulness of various software tools." + }, + { + "shortName": "AnonymousInnerClass", + "displayName": "Anonymous inner class can be replaced with inner class", + "enabled": false, + "description": "Reports anonymous inner classes.\n\nIn some cases, replacing anonymous inner classes with inner classes can lead to more readable and maintainable code.\nAlso, some code standards discourage anonymous inner classes." + }, + { + "shortName": "MultipleTopLevelClassesInFile", + "displayName": "Multiple top level classes in single file", + "enabled": false, + "description": "Reports multiple top-level classes in a single Java file.\n\nPutting multiple\ntop-level classes in one file may be confusing and degrade the usefulness of various\nsoftware tools." + }, + { + "shortName": "LimitedScopeInnerClass", + "displayName": "Local class", + "enabled": false, + "description": "Reports local classes.\n\nA local class is a named nested class declared inside a code block.\nLocal classes are uncommon and may therefore be confusing.\nIn addition, some code standards discourage the use of local classes.\n\n**Example:**\n\n\n void test() {\n class Local { // local class\n }\n new Local();\n }\n" + }, + { + "shortName": "ClassMayBeInterface", + "displayName": "Abstract 'class' may be 'interface'", + "enabled": false, + "description": "Reports `abstract` classes that can be converted to interfaces.\n\nUsing interfaces instead of classes is preferable as Java doesn't support multiple class inheritance,\nwhile a class can implement multiple interfaces.\n\nA class may be converted to an interface if it has no superclasses (other\nthan Object), has only `public static final` fields,\n`public abstract` methods, and `public` inner classes.\n\n\nExample:\n\n\n abstract class Example {\n public static final int MY_CONST = 42;\n public abstract void foo();\n }\n\n class Inheritor extends Example {\n @Override\n public void foo() {\n System.out.println(MY_CONST);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n interface Example {\n int MY_CONST = 42;\n void foo();\n }\n\n class Inheritor implements Example {\n @Override\n public void foo() {\n System.out.println(MY_CONST);\n }\n }\n\nConfigure the inspection:\n\n\nUse the **Report classes containing non-abstract methods when using Java 8** option to report only the classes with `static` methods and non-abstract methods that can be converted to\n`default` methods (only applicable to language level of 8 or higher)." + }, + { + "shortName": "EmptyClass", + "displayName": "Redundant empty class", + "enabled": false, + "description": "Reports empty classes and Java files without any defined classes.\n\nA class is empty if it\ndoesn't contain any fields, methods, constructors, or initializers. Empty classes often remain\nafter significant changes or refactorings.\n\nConfigure the inspection:\n\n* Use the **Ignore if annotated by** option to specify special annotations. The inspection will ignore the classes marked with these annotations.\n*\n Use the **Ignore class if it is a parametrization of a super type** option to ignore classes that parameterize a superclass. For example:\n\n class MyList extends ArrayList {}\n\n* Use the **Ignore subclasses of java.lang.Throwable** to ignore classes that extend `java.lang.Throwable`.\n* Use the **Comments count as content** option to ignore classes that contain comments." + }, + { + "shortName": "InterfaceMayBeAnnotatedFunctional", + "displayName": "Interface may be annotated as '@FunctionalInterface'", + "enabled": false, + "description": "Reports interfaces that can be annotated with `@FunctionalInterface` (available since JDK 1.8).\n\nAnnotating an interface with `@FunctionalInterface` indicates that the interface\nis functional and no more `abstract` methods can be added to it.\n\n**Example:**\n\n\n interface FileProcessor {\n void execute(File file);\n }\n\nAfter the quick-fix is applied:\n\n\n @FunctionalInterface\n interface FileProcessor {\n void execute(File file);\n }\n\nThis inspection only reports if the language level of the project or module is 8 or higher." + }, + { + "shortName": "FinalPrivateMethod", + "displayName": "'private' method declared 'final'", + "enabled": false, + "description": "Reports methods that are marked with both `final` and `private` keywords.\n\nSince `private` methods cannot be meaningfully overridden because of their visibility, declaring them\n`final` is redundant." + }, + { + "shortName": "FinalStaticMethod", + "displayName": "'static' method declared 'final'", + "enabled": false, + "description": "Reports static methods that are marked as `final`.\n\nSuch code might indicate an error or an incorrect assumption about the effect of the `final` keyword.\nStatic methods are not subject to runtime polymorphism, so the only purpose of the `final` keyword used with static methods\nis to ensure the method will not be hidden in a subclass." + }, + { + "shortName": "MethodReturnAlwaysConstant", + "displayName": "Method returns per-class constant", + "enabled": false, + "description": "Reports methods that only return a constant, which may differ for various inheritors.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + { + "shortName": "PublicConstructor", + "displayName": "'public' constructor can be replaced with factory method", + "enabled": false, + "description": "Reports `public` constructors.\n\nSome coding standards discourage the use of `public` constructors and recommend\n`static` factory methods instead.\nThis way the implementation can be swapped out without affecting the call sites.\n\n**Example:**\n\n\n class Test {\n private String name;\n\n public Test(String name) {\n this.name = name;\n }\n\n public void test() {\n System.out.println(name);\n }\n\n public static void main(String[] args) {\n new Test(\"str\").test();\n }\n }\n\nAfter quick-fix is applied:\n\n\n class Test {\n private String name;\n\n private Test(String name) {\n this.name = name;\n }\n\n public static Test getInstance(String name) {\n return new Test(name);\n }\n\n public void test() {\n System.out.println(name);\n }\n\n public static void main(String[] args) {\n getInstance(\"str\").test();\n }\n }\n" + }, + { + "shortName": "ConstantDeclaredInInterface", + "displayName": "Constant declared in interface", + "enabled": false, + "description": "Reports constants (`public static final` fields) declared in interfaces.\n\nSome coding standards require declaring constants in abstract classes instead." + } + ] + }, + { + "name": "Code style issues", + "inspections": [ + { + "shortName": "UnnecessaryQualifierForThis", + "displayName": "Unnecessary qualifier for 'this' or 'super'", + "enabled": false, + "description": "Reports unnecessary qualification of `this` or `super`.\n\n\nUsing a qualifier on `this` or `super` to\ndisambiguate a code reference may easily become unnecessary via automatic refactorings and should be deleted for clarity.\n\n**Example:**\n\n\n class Foo {\n void foo() {}\n }\n\n class Bar extends Foo {\n void bar() {\n Bar.super.foo();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n void foo() {}\n }\n\n class Bar extends Foo {\n void bar() {\n super.foo();\n }\n }\n" + }, + { + "shortName": "SizeReplaceableByIsEmpty", + "displayName": "'size() == 0' can be replaced with 'isEmpty()'", + "enabled": false, + "description": "Reports `.size()` or `.length()` comparisons with a `0` literal that can be replaced with a call to `.isEmpty()`.\n\n**Example:**\n\n\n boolean emptyList = list.size() == 0;\n\nAfter the quick-fix is applied:\n\n\n boolean emptyList = list.isEmpty();\n \n\nUse the **Ignored classes** table to add classes for which any `.size()` or `.length()` comparisons should not be replaced.\n\nUse the **Ignore expressions which would be replaced with `!isEmpty()`** option to ignore any expressions which would be replaced with `!isEmpty()`." + }, + { + "shortName": "ArrayCanBeReplacedWithEnumValues", + "displayName": "Array can be replaced with enum values", + "enabled": false, + "description": "Reports arrays of enum constants that can be replaced with a call to `EnumType.values()`.\n\nUsually, when updating such an enum, you have to update the array as well. However, if you use `EnumType.values()`\ninstead, no modifications are required.\n\nExample:\n\n\n enum States {\n NOT_RUN, IN_PROGRESS, FINISHED;\n }\n \n handleStates(new States[] {NOT_RUN, IN_PROGRESS, FINISHED});\n\nAfter the quick-fix is applied:\n\n\n handleStates(States.values());\n\nNew in 2019.1" + }, + { + "shortName": "UnqualifiedStaticUsage", + "displayName": "Unqualified static access", + "enabled": false, + "description": "Reports usage of static members that is not qualified with the class name.\n\n\nThis is legal if the static member is in\nthe same class, but may be confusing.\n\n**Example:**\n\n\n class Foo {\n static void foo() {}\n static int x;\n\n void bar() {\n foo();\n System.out.println(x);\n }\n\n static void baz() { foo(); }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n static void foo() {}\n static int x;\n\n void bar() {\n Foo.foo();\n System.out.println(Foo.x);\n }\n\n static void baz() { Foo.foo(); }\n }\n\nUse the inspection settings to toggle the reporting for the following items:\n\n*\n static fields access \n\n `void bar() { System.out.println(x); }`\n\n*\n calls to static methods \n\n `void bar() { foo(); }` \n\n `static void baz() { foo(); }`\n\n\nYou can also configure the inspection to only report static member usage from a non-static context.\nIn the above example, `static void baz() { foo(); }` will not be reported." + }, + { + "shortName": "ControlFlowStatementWithoutBraces", + "displayName": "Control flow statement without braces", + "enabled": false, + "description": "Reports any `if`, `while`, `do`, or `for` statements without braces. Some code styles, e.g. the [Google Java Style guide](https://google.github.io/styleguide/javaguide.html), require braces for all control statements.\n\n\nWhen adding further statements to control statements without braces, it is important not to forget adding braces.\nWhen commenting out a line of code, it is also necessary to be more careful when not using braces,\nto not inadvertently make the next statement part of the control flow statement.\nAlways using braces makes inserting or commenting out a line of code safer.\n\n\nIt's likely the [goto fail vulnerability](https://www.imperialviolet.org/2014/02/22/applebug.html) would not have happened,\nif an always use braces code style was used.\nControl statements with braces make the control flow easier to see, without relying on, possibly incorrect, indentation.\n\nExample:\n\n\n class Strange {\n void x(boolean one, boolean two) {\n if(one)\n if(two)\n foo();\n else\n bar();\n }\n\n void foo() {}\n void bar() {}\n }\n\nThe quick-fix wraps the statement body with braces:\n\n\n class Strange {\n void x(boolean one, boolean two) {\n if(one) {\n if(two) {\n foo();\n } else {\n bar();\n }\n }\n }\n\n void foo() {}\n void bar() {}\n }\n" + }, + { + "shortName": "RedundantLabeledSwitchRuleCodeBlock", + "displayName": "Labeled switch rule has redundant code block", + "enabled": false, + "description": "Reports labeled rules of `switch` statements or `switch` expressions that have a redundant code block.\n\nExample:\n\n\n String s = switch (n) {\n case 1 -> { yield Integer.toString(n); }\n default -> \"default\";\n };\n\nAfter the quick-fix is applied:\n\n\n String s = switch (n) {\n case 1 -> Integer.toString(n);\n default -> \"default\";\n };\n\nThis inspection only reports if the language level of the project or module is 14 or higher.\n\nNew in 2019.1" + }, + { + "shortName": "MultiCatchCanBeSplit", + "displayName": "Multi-catch can be split into separate catch blocks", + "enabled": false, + "description": "Reports multi-`catch` sections and suggests splitting them into separate `catch` blocks.\n\nExample:\n\n\n try {\n int i = getIndex();\n } catch (NullPointerException|IndexOutOfBoundsException e) {\n e.printStackTrace();\n }\n\nAfter the quick-fix is applied:\n\n\n try {\n int i = getIndex();\n } catch (NullPointerException e) {\n e.printStackTrace();\n } catch (IndexOutOfBoundsException e) {\n e.printStackTrace();\n }\n\n\n*Multi-* `catch` appeared in Java 7.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions." + }, + { + "shortName": "JoinDeclarationAndAssignmentJava", + "displayName": "Assignment can be joined with declaration", + "enabled": false, + "description": "Reports variable assignments that can be joined with a variable declaration.\n\nExample:\n\n\n int x;\n x = 1;\n\nThe quick-fix converts the assignment into an initializer:\n\n\n int x = 1;\n\nNew in 2018.3" + }, + { + "shortName": "UnnecessaryModifier", + "displayName": "Unnecessary modifier", + "enabled": false, + "description": "Reports redundant modifiers and suggests to remove them. The resulting code will be shorter, but the behaviour and meaning will remain the same.\n\n**Example 1:**\n\n\n // all code is implicitly strictfp under Java 17 and higher\n strictfp class X {\n\n // inner enums are implicitly static\n static enum Inner {\n A, B, C\n }\n\n // inner records are implicitly static\n static record R() {\n }\n }\n\n**Example 2:**\n\n\n final record R() {\n // all records are implicitly final\n }\n\n**Example 3:**\n\n\n // all interfaces are implicitly abstract\n abstract interface Printer {\n\n // all interface members are implicitly public\n public int size();\n\n // all inner classes of interfaces are implicitly static\n static class Inner {}\n }\n" + }, + { + "shortName": "CStyleArrayDeclaration", + "displayName": "C-style array declaration", + "enabled": false, + "description": "Reports array declarations written in C-style syntax in which the array indicator brackets are placed after the variable name or after the method parameter list.\n\nExample:\n\n\n public String process(String value[])[] {\n return value;\n }\n\nMost code styles prefer Java-style array declarations in which the array indicator brackets are attached to the type name, for example:\n\n\n public String[] process(String[] value) {\n return value;\n }\n\nConfigure the inspection:\n\n\nUse the **Ignore C-style declarations in variables** option to report C-style array declaration of method return types only." + }, + { + "shortName": "UnnecessaryConstructor", + "displayName": "Redundant no-arg constructor", + "enabled": false, + "description": "Reports unnecessary constructors.\n\n\nA constructor is unnecessary if it is the only constructor of a class, has no parameters,\nhas the same access modifier as its containing class,\nand does not perform any initialization except explicitly or implicitly calling the superclass constructor without arguments.\nSuch a constructor can be safely removed as it will be generated by the compiler even if not specified.\n\n**Example:**\n\n\n public class Foo {\n public Foo() {}\n }\n\nAfter the quick-fix is applied:\n\n\n public class Foo {}\n\n\nUse the inspection settings to ignore unnecessary constructors that have an annotation." + }, + { + "shortName": "CallToStringConcatCanBeReplacedByOperator", + "displayName": "Call to 'String.concat()' can be replaced with '+'", + "enabled": false, + "description": "Reports calls to `java.lang.String.concat()`.\n\n\nSuch calls can be replaced with the `+` operator for clarity and possible increased\nperformance if the method was invoked on a constant with a constant argument.\n\n**Example:**\n\n\n String foo(String name) {\n return name.concat(\"foo\");\n }\n\nAfter the quick-fix is applied:\n\n\n String foo(String name) {\n return name + \"foo\";\n }\n" + }, + { + "shortName": "ListIndexOfReplaceableByContains", + "displayName": "'List.indexOf()' expression can be replaced with 'contains()'", + "enabled": false, + "description": "Reports any `List.indexOf()` expressions that can be replaced with the `List.contains()` method.\n\nExample:\n\n\n boolean hasEmptyString(List list) {\n // Warning: can be simplified\n return list.indexOf(\"\") >= 0;\n }\n\nThe provided quick-fix replaces the `indexOf` call with the `contains` call:\n\n\n boolean hasEmptyString(List list) {\n // Quick-fix is applied\n return list.contains(\"\");\n }\n" + }, + { + "shortName": "UnnecessaryParentheses", + "displayName": "Unnecessary parentheses", + "enabled": false, + "description": "Reports any instance of unnecessary parentheses.\n\nParentheses are considered unnecessary if the evaluation order of an expression remains\nunchanged after you remove the parentheses.\n\nExample:\n\n\n int n = 3 + (9 * 8);\n\nAfter quick-fix is applied:\n\n\n int n = 3 + 9 * 8;\n\nConfigure the inspection:\n\n* Use the **Ignore clarifying parentheses** option to ignore parentheses that help clarify a binary expression. Parentheses are clarifying if the parenthesized expression is an `instanceof` expression that is a part of a larger expression or has a different operator than the parent expression.\n* Use the **Ignore parentheses around the condition of conditional expressions** option to ignore any parentheses around the condition of conditional expressions. Some coding standards specify that all such conditions must be surrounded by parentheses.\n* Use the **Ignore parentheses around single no formal type lambda parameter** option to ignore parentheses around a single lambda parameter within a lambda expression." + }, + { + "shortName": "NestedMethodCall", + "displayName": "Nested method call", + "enabled": false, + "description": "Reports method calls used as parameters to another method call.\n\nThe quick-fix introduces a variable to make the code simpler and easier to debug.\n\n**Example:**\n\n\n public int y() { return 1; }\n public int f(int x) { return 2 * x; }\n\n public void foo() {\n int x = f(y());\n }\n\nAfter the quick-fix is applied:\n\n\n public int y() { return 1; }\n public int f(int x) { return 2 * x; }\n\n public void foo() {\n int y = y();\n int x = f(y);\n }\n\n\nUse the inspection options to toggle the reporting of:\n\n* method calls in field initializers\n* calls to static methods\n* calls to simple getters" + }, + { + "shortName": "RecordCanBeClass", + "displayName": "Record can be converted to class", + "enabled": false, + "description": "Reports record classes and suggests converting them to ordinary classes.\n\nThis inspection makes it possible to move a Java record to a codebase using an earlier Java version\nby applying the quick-fix to this record.\n\n\nNote that the resulting class is not completely equivalent to the original record:\n\n* The resulting class no longer extends `java.lang.Record`, so `instanceof Record` returns `false`.\n* Reflection methods like `Class.isRecord()` and `Class.getRecordComponents()` produce different results.\n* The generated `hashCode()` implementation may produce a different result because the formula to calculate record `hashCode` is deliberately not specified.\n* Record serialization mechanism differs from that of an ordinary class. Refer to *Java Object Serialization Specification* for details.\n\nExample:\n\n\n record Point(int x, int y) {}\n\nAfter the quick-fix is applied:\n\n\n final class Point {\n private final int x;\n private final int y;\n\n Point(int x, int y) {\n this.x = x;\n this.y = y;\n }\n\n public int x() { return x; }\n\n public int y() { return y; }\n\n @Override\n public boolean equals(Object obj) {\n if (obj == this) return true;\n if (obj == null || obj.getClass() != this.getClass()) return false;\n var that = (Point)obj;\n return this.x == that.x &&\n this.y == that.y;\n }\n\n @Override\n public int hashCode() {\n return Objects.hash(x, y);\n }\n\n @Override\n public String toString() {\n return \"Point[\" +\n \"x=\" + x + \", \" +\n \"y=\" + y + ']';\n }\n }\n\nThis inspection only reports if the language level of the project or module is 16 higher.\n\nNew in 2020.3" + }, + { + "shortName": "FuseStreamOperations", + "displayName": "Subsequent steps can be fused into Stream API chain", + "enabled": false, + "description": "Detects transformations outside a Stream API chain that could be incorporated into it.\n\nExample:\n\n\n List list = stream.collect(Collectors.toList());\n list.sort(null);\n return list.toArray(new String[list.size()]);\n\nAfter the conversion:\n\n\n return stream.sorted().toArray(String[]::new);\n\n\nNote that sometimes the converted stream chain may replace explicit `ArrayList` with `Collectors.toList()` or explicit\n`HashSet` with `Collectors.toSet()`. The current library implementation uses these collections internally. However,\nthis approach is not very reliable and might change in the future altering the semantics of your code.\n\nIf you are concerned about it, use the **Do not suggest 'toList()' or 'toSet()' collectors** option to suggest\n`Collectors.toCollection()` instead of `toList` and `toSet` collectors.\n\nThis inspection only reports if the language level of the project or module is 8 or higher." + }, + { + "shortName": "LocalCanBeFinal", + "displayName": "Local variable or parameter can be 'final'", + "enabled": false, + "description": "Reports parameters or local variables that may have the `final` modifier added to their declaration.\n\nExample:\n\n\n ArrayList list = new ArrayList();\n fill(list);\n return list;\n\nAfter the quick-fix is applied:\n\n\n final ArrayList list = new ArrayList();\n fill(list);\n return list;\n\n\nUse the inspection's options to define whether parameters or local variables should be reported." + }, + { + "shortName": "UnnecessarilyQualifiedStaticUsage", + "displayName": "Unnecessarily qualified static access", + "enabled": false, + "description": "Reports usages of static members qualified with the class name.\n\n\nSuch qualification is unnecessary and may be safely removed.\n\n**Example:**\n\n\n class Foo {\n static void foo() {}\n static int x;\n\n void bar() {\n Foo.foo();\n System.out.println(Foo.x);\n }\n\n static void baz() { Foo.foo(); }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n static void foo() {}\n static int x;\n\n void bar() {\n foo();\n System.out.println(x);\n }\n\n static void baz() { foo(); }\n }\n\n\nUse the inspection options to toggle the reporting for:\n\n* Static fields access: \n `void bar() { System.out.println(Foo.x); }`\n\n* Calls to static methods: \n `void bar() { Foo.foo(); }`\n\n\nAlso, you can configure the inspection to only report static member usage\nin a static context. In this case, only `static void baz() { Foo.foo(); }` will be reported." + }, + { + "shortName": "TryStatementWithMultipleResources", + "displayName": "'try' statement with multiple resources can be split", + "enabled": false, + "description": "Reports `try` statements with multiple resources that can be automatically split into multiple try-with-resources statements.\n\nThis conversion can be useful for further refactoring\n(for example, for extracting the nested `try` statement into a separate method).\n\nExample:\n\n\n try (FileInputStream in = new FileInputStream(\"in.txt\");\n FileOutputStream out = new FileOutputStream(\"out.txt\")) {\n /*read and write*/\n }\n\nAfter the quick-fix is applied:\n\n\n try (FileInputStream in = new FileInputStream(\"in.txt\")) {\n try (FileOutputStream out = new FileOutputStream(\"out.txt\")) {\n /*read and write*/\n }\n }\n" + }, + { + "shortName": "LambdaParameterTypeCanBeSpecified", + "displayName": "Lambda parameter type can be specified", + "enabled": false, + "description": "Reports lambda parameters that do not have their type specified and suggests adding the missing type declarations.\n\nExample:\n\n\n Function length = a -> a.length();\n\nAfter the quick-fix is applied:\n\n\n Function length = (String a) -> a.length();\n\nThis inspection only reports if the language level of the project or module is 8 or higher." + }, + { + "shortName": "EscapedSpace", + "displayName": "Non-terminal use of '\\s' escape sequence", + "enabled": true, + "description": "Reports uses of `\"\\s\"` escape sequence anywhere except text-block line endings or within series of several spaces. The `\"\\s\"` escape sequence is intended to encode a space at the end of text-block lines where normal spaces are trimmed. In other locations, as well as in regular string literals, `\"\\s\"` is identical to an ordinary space character (`\" \"`). Use of `\"\\s\"` is confusing and can be a mistake, especially if the string is interpreted as a regular expression.\n\n**Example:**\n\n\n if (str.matches(\"\\s+\")) {...}\n\nHere it's likely that `\"\\\\s+\"` was intended (to match any whitespace character). If not, using `str.matches(\" +\")` would be less confusing.\n\n\nThe quick-fix is provided that simply replaces `\\s` with a space character.\n\nThis inspection reports only if the language level of the project or module is 15 or higher.\n\nNew in 2022.3" + }, + { + "shortName": "ReturnThis", + "displayName": "Return of 'this'", + "enabled": false, + "description": "Reports methods returning `this`.\n\n\nWhile such a return is valid, it is rarely necessary, and usually indicates that the method is intended to be used\nas part of a chain of similar method calls (for example, `buffer.append(\"foo\").append(\"bar\").append(\"baz\")`).\nSuch chains are frowned upon by many coding standards.\n\n**Example:**\n\n\n public Builder append(String str) {\n // [...]\n return this;\n }\n" + }, + { + "shortName": "UnnecessarilyQualifiedInnerClassAccess", + "displayName": "Unnecessarily qualified inner class access", + "enabled": false, + "description": "Reports any references to inner classes that are unnecessarily qualified with the name of the enclosing class.\n\nSuch a qualification can be safely removed, which sometimes adds an import for the inner class.\n\nExample:\n\n\n class X {\n X.Y foo;\n class Y{}\n }\n\nAfter the quick-fix is applied:\n\n\n class X {\n Y foo;\n class Y{}\n }\n\nUse the **Ignore references for which an import is needed** option to ignore references to inner classes, where\nremoving the qualification adds an import." + }, + { + "shortName": "ChainedEquality", + "displayName": "Chained equality comparisons", + "enabled": false, + "description": "Reports chained equality comparisons.\n\nSuch comparisons may be confusing: `a == b == c` means `(a == b) == c`,\nbut possibly `a == b && a == c` is intended.\n\n**Example:**\n\n\n boolean chainedEquality(boolean a, boolean b, boolean c) {\n return a == b == c;\n }\n\nYou can use parentheses to make the comparison less confusing:\n\n\n boolean chainedEquality(boolean a, boolean b, boolean c) {\n return (a == b) == c;\n }\n" + }, + { + "shortName": "RedundantFieldInitialization", + "displayName": "Redundant field initialization", + "enabled": false, + "description": "Reports fields explicitly initialized to their default values.\n\n**Example:**\n\n\n class Foo {\n int foo = 0;\n List bar = null;\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n int foo;\n List bar;\n }\n\n\nUse the inspection settings to only report explicit `null` initialization, for example:\n\n\n class Foo {\n int foo = 0; // no warning\n List bar = null; // redundant field initialization warning\n }\n" + }, + { + "shortName": "SimplifiableEqualsExpression", + "displayName": "Unnecessary 'null' check before 'equals()' call", + "enabled": false, + "description": "Reports comparisons to `null` that are followed by a call to `equals()` with a constant argument.\n\n**Example:**\n\n\n if (s != null && s.equals(\"literal\")) {}\n\nAfter the quick-fix is applied:\n\n\n if (\"literal\".equals(s)) {}\n\n\nUse the inspection settings to report `equals()` calls with a non-constant argument\nwhen the argument to `equals()` is proven not to be `null`." + }, + { + "shortName": "MultipleVariablesInDeclaration", + "displayName": "Multiple variables in one declaration", + "enabled": false, + "description": "Reports multiple variables that are declared in a single declaration and suggest creating a separate declaration for each variable.\n\nSome coding standards prohibit such declarations.\n\nExample:\n\n\n int x = 1, y = 2;\n\nAfter the quick-fix is applied:\n\n\n int x = 1;\n int y = 2;\n\nConfigure the inspection:\n\n* Use the **Ignore 'for' loop declarations** option to ignore multiple variables declared in the initialization of a 'for' loop statement, for example:\n\n\n for (int i = 0, max = list.size(); i > max; i++) {}\n\n* Use the **Only warn on different array dimensions in a single declaration** option to only warn when variables with different array dimensions are declared in a single declaration, for example:\n\n\n String s = \"\", array[];\n\nNew in 2019.2" + }, + { + "shortName": "SimplifiableAnnotation", + "displayName": "Simplifiable annotation", + "enabled": false, + "description": "Reports annotations that can be simplified to their 'single element' or 'marker' shorthand form.\n\nAnnotations that contain whitespace between the @-sign and the name\nof the annotation are also reported.\n\n**Example:**\n\n\n @interface Foo { String[] value(); }\n\n @ Foo({\"foo\"})\n public String name;\n\nAfter the quick-fix is applied:\n\n\n @interface Foo { String[] value(); }\n\n @Foo(\"foo\")\n public String name;\n" + }, + { + "shortName": "ImplicitCallToSuper", + "displayName": "Implicit call to 'super()'", + "enabled": false, + "description": "Reports constructors that do not begin with a call to \"super\" constructor or another constructor of the same class.\n\nSuch constructors can be thought of as implicitly beginning with a\ncall to `super()`. Some coding standards prefer that such calls to\n`super()` be made explicitly.\n\n**Example:**\n\n\n class Foo {\n Foo() {}\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n Foo() {\n super();\n }\n }\n\n\nUse the inspection settings to ignore classes extending directly from `Object`.\nFor instance:\n\n\n class Foo {\n Foo() {} // Not reported\n }\n\n class Bar extends Foo {\n Bar() {} // Implicit call to 'super()'\n }\n" + }, + { + "shortName": "UnnecessaryThis", + "displayName": "Unnecessary 'this' qualifier", + "enabled": false, + "description": "Reports unnecessary `this` qualifier.\n\n\nUsing `this` to disambiguate a code reference is discouraged by many coding styles\nand may easily become unnecessary\nvia automatic refactorings.\n\n**Example:**\n\n\n class Foo {\n int x;\n void foo() {\n this.x = 2;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n int x;\n void foo() {\n x = 2;\n }\n }\n\n\nUse the inspection settings to ignore assignments to fields.\nFor instance, `this.x = 2;` won't be reported, but `int y = this.x;` will be." + }, + { + "shortName": "UnnecessarySemicolon", + "displayName": "Unnecessary semicolon", + "enabled": false, + "description": "Reports any unnecessary semicolons, including semicolons that are used between class members, inside block statements, or after class definitions.\n\nEven though these semicolons are valid in Java, they are redundant and may be removed.\n\nExample:\n\n\n class C {\n ;\n void m() throws Exception {\n try (AutoCloseable r1 = createAutoCloseable();) {\n ;\n }\n }\n ;\n }\n\nAfter the quick-fix is applied:\n\n\n class C {\n void m() throws Exception {\n try (AutoCloseable r1 = createAutoCloseable()) {\n }\n }\n }\n" + }, + { + "shortName": "SingleStatementInBlock", + "displayName": "Code block contains single statement", + "enabled": false, + "description": "Reports control flow statements with a single statement in their code block and suggests removing the braces from the control flow statement body.\n\nExample:\n\n\n if (x > 0) {\n System.out.println(\"x is positive\");\n }\n\nAfter the quick-fix is applied:\n\n\n if (x > 0) System.out.println(\"x is positive\");\n" + }, + { + "shortName": "ExtendsObject", + "displayName": "Class explicitly extends 'Object'", + "enabled": false, + "description": "Reports any classes that are explicitly declared to extend `java.lang.Object`.\n\nSuch declaration is redundant and can be safely removed.\n\nExample:\n\n\n class MyClass extends Object {\n }\n\nThe quick-fix removes the redundant `extends Object` clause:\n\n\n class MyClass {\n }\n" + }, + { + "shortName": "ReassignedVariable", + "displayName": "Reassigned variable", + "enabled": false, + "description": "Reports reassigned variables, which complicate reading and understanding the code.\n\nExample:\n\n\n int value = 2 * (height + width);\n System.out.println(\"perimeter: \" + value);\n\n value = height * width;\n System.out.println(\"area: \" + value);\n" + }, + { + "shortName": "LiteralAsArgToStringEquals", + "displayName": "String literal may be 'equals()' qualifier", + "enabled": false, + "description": "Reports `String.equals()` or `String.equalsIgnoreCase()` calls with a string literal argument.\n\nSome coding standards specify that string literals should be the qualifier of `equals()`, rather than\nargument, thus minimizing `NullPointerException`-s.\n\nA quick-fix is available to exchange the literal and the expression.\n\n**Example:**\n\n\n boolean isFoo(String value) {\n return value.equals(\"foo\");\n }\n\nAfter the quick-fix is applied:\n\n\n boolean isFoo(String value) {\n return \"foo\".equals(value);\n }\n" + }, + { + "shortName": "UnnecessarySuperQualifier", + "displayName": "Unnecessary 'super' qualifier", + "enabled": false, + "description": "Reports unnecessary `super` qualifiers in method calls and field references.\n\n\nA `super` qualifier is unnecessary\nwhen the field or method of the superclass is not hidden/overridden in the calling class.\n\n**Example:**\n\n\n class Foo {\n void foo() {}\n }\n\n class Bar extends Foo {\n void bar() {\n super.foo();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n void foo() {}\n }\n\n class Bar extends Foo {\n void bar() {\n foo();\n }\n }\n\n\nUse the inspection settings to ignore qualifiers that help to distinguish superclass members access\nfrom the identically named members of the outer class.\n\n\nSee also the following inspections:\n\n* *Java \\| Visibility \\| Access to inherited field looks like access to element from surrounding code*\n* *Java \\| Visibility \\| Call to inherited method looks like call to local method*" + }, + { + "shortName": "UnclearBinaryExpression", + "displayName": "Multiple operators with different precedence", + "enabled": false, + "description": "Reports binary, conditional, or `instanceof` expressions that consist of different operators without parentheses. Such expressions can be less readable due to different precedence rules of operators.\n\nExample:\n\n\n int n = 3 + 9 * 8 + 1;\n\nAfter quick-fix is applied:\n\n\n int n = 3 + (9 * 8) + 1;\n" + }, + { + "shortName": "ChainedMethodCall", + "displayName": "Chained method calls", + "enabled": false, + "description": "Reports method calls whose target is another method call. The quick-fix suggests to introduce a local variable.\n\n**Example:**\n\n\n class X {\n int foo(File f) {\n return f.getName().length();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class X {\n int foo(File f) {\n final String name = f.getName();\n return name.length();\n }\n }\n\nUse the inspection options to toggle warnings for the following cases:\n\n*\n chained method calls in field initializers,\n for instance, `private final int i = new Random().nextInt();`\n\n*\n chained method calls operating on the same type,\n for instance, `new StringBuilder().append(\"x: \").append(new X()).append(\"y: \").append(new Y()).toString();`." + }, + { + "shortName": "AssertMessageNotString", + "displayName": "'assert' message is not a string", + "enabled": false, + "description": "Reports `assert` messages that are not of the `java.lang.String` type.\n\nUsing a string provides more information to help diagnose the failure\nor the assertion reason.\n\n**Example:**\n\n\n void foo(List myList) {\n assert myList.isEmpty() : false;\n }\n\n\nUse the **Only warn when the `assert` message type is 'boolean' or 'java.lang.Boolean'** option to only warn when the `assert` message type is `boolean` or `java.lang.Boolean`.\nA `boolean` detail message is unlikely to provide additional information about an assertion failure\nand could result from a mistakenly entered `:` instead of `&`." + }, + { + "shortName": "MethodRefCanBeReplacedWithLambda", + "displayName": "Method reference can be replaced with lambda", + "enabled": false, + "description": "Reports method references, like `MyClass::myMethod` and `myObject::myMethod`, and suggests replacing them with an equivalent lambda expression.\n\nLambda expressions can be easier to modify than method references.\n\nExample:\n\n\n System.out::println\n\nAfter the quick-fix is applied:\n\n\n s -> System.out.println(s)\n\nBy default, this inspection does not highlight the code in the editor, but only provides a quick-fix." + }, + { + "shortName": "UnnecessaryFullyQualifiedName", + "displayName": "Unnecessary fully qualified name", + "enabled": false, + "description": "Reports fully qualified class names that can be shortened.\n\nThe quick-fix shortens fully qualified names and adds import statements if necessary.\n\nExample:\n\n\n class ListWrapper {\n java.util.List l;\n }\n\nAfter the quick-fix is applied:\n\n\n import java.util.List;\n class ListWrapper {\n List l;\n }\n\nConfigure the inspection:\n\n\nUse the **Ignore in Java 9 module statements** option to ignore fully qualified names inside the Java 9\n`provides` and `uses` module statements.\n\n\nIn [Settings \\| Editor \\| Code Style \\| Java \\| Imports](settings://preferences.sourceCode.Java?JavaDoc%20Inner),\nuse the following options to configure the inspection:\n\n* Use the **Insert imports for inner classes** option if references to inner classes should be qualified with the outer class.\n* Use the **Use fully qualified class names in JavaDoc** option to allow fully qualified names in Javadocs." + }, + { + "shortName": "LambdaBodyCanBeCodeBlock", + "displayName": "Lambda body can be code block", + "enabled": false, + "description": "Reports lambdas whose body is an expression and suggests converting expression bodies to code blocks.\n\nExample:\n\n\n n -> n + 1\n\nAfter the quick-fix is applied:\n\n n -> {\n return n + 1;\n }\n" + }, + { + "shortName": "SwitchLabeledRuleCanBeCodeBlock", + "displayName": "Labeled switch rule can have code block", + "enabled": false, + "description": "Reports rules of `switch` expressions or enhanced `switch` statements with an expression body. These can be converted to code blocks.\n\nExample:\n\n\n String message = switch (errorCode) {\n case 404 -> \"Not found!\";\n ...\n };\n\nAfter the quick-fix is applied:\n\n\n String message = switch (errorCode) {\n case 404 -> {\n yield \"Not found!\";\n }\n ...\n };\n\nThe inspection only reports if the language level of the project or module is 14 or higher.\n\nNew in 2019.1" + }, + { + "shortName": "MoveFieldAssignmentToInitializer", + "displayName": "Field assignment can be moved to initializer", + "enabled": false, + "description": "Suggests replacing initialization of fields using assignment with initialization in the field declaration.\n\nOnly reports if the field assignment is located in an instance or static initializer, and\njoining it with the field declaration is likely to be safe.\nIn other cases, like assignment inside a constructor, the quick-fix is provided without highlighting,\nas the fix may change the semantics.\n\nExample:\n\n\n class MyClass {\n static final int intConstant;\n \n static {\n intConstant = 10;\n }\n }\n\nThe quick fix moves the assigned value to the field initializer removing the class initializer if possible:\n\n\n class MyClass {\n static final int intConstant = 10;\n }\n\nSince 2017.2" + }, + { + "shortName": "UnqualifiedInnerClassAccess", + "displayName": "Unqualified inner class access", + "enabled": false, + "description": "Reports references to inner classes that are not qualified with the name of the enclosing class.\n\n**Example:**\n\n\n import foo.Foo.Bar;\n\n class Foo {\n class Bar {}\n }\n\n class Baz {\n void f(Bar bar) {}\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n class Bar {}\n }\n\n class Baz {\n void f(Foo.Bar bar) {}\n }\n\n\nUse the inspection settings to ignore references to inner classes within the same class,\nwhich therefore do not require an import." + }, + { + "shortName": "BlockMarkerComments", + "displayName": "Block marker comment", + "enabled": false, + "description": "Reports comments which are used as code block markers. The quick-fix removes such comments.\n\nExample:\n\n\n while (i < 10) {\n i++;\n } // end while\n\nAfter the quick-fix is applied:\n\n\n while (i < 10) {\n i++;\n }\n" + }, + { + "shortName": "OptionalIsPresent", + "displayName": "Non functional style 'Optional.isPresent()' usage", + "enabled": false, + "description": "Reports conditions, like `if(Optional.isPresent())` or `if(Optional.isEmpty())`, that can be rewritten in the functional style, as it is shorter and easier to read.\n\nExample:\n\n\n if (str.isPresent()) str.get().trim();\n\nAfter the quick-fix is applied:\n\n\n str.ifPresent(String::trim);\n\nThis inspection only reports if the language level of the project or module is 8 or higher." + }, + { + "shortName": "ObjectsEqualsCanBeSimplified", + "displayName": "'Objects.equals()' can be replaced with 'equals()'", + "enabled": false, + "description": "Reports calls to `Objects.equals(a, b)` in which the first argument is statically known to be non-null.\n\nSuch a call can be safely replaced with `a.equals(b)` or `a == b` if both arguments are primitives.\n\nExample:\n\n\n String defaultName = \"default\";\n boolean isDefault = Objects.equals(defaultName, name);\n\nAfter the quick-fix is applied:\n\n\n String defaultName = \"default\";\n boolean isDefault = defaultName.equals(name);\n\nNew in 2018.3" + }, + { + "shortName": "SimplifiableIfStatement", + "displayName": "'if' statement can be replaced with conditional or boolean expression", + "enabled": false, + "description": "Reports `if` statements that can be replaced with conditions using the `&&`, `||`, `==`, `!=`, or `?:` operator.\n\nThe result is usually shorter, but not always clearer, so it's not advised to apply the fix in every case.\n\nExample:\n\n\n if (condition) return true; else return foo;\n\nAfter the quick-fix is applied:\n\n\n return condition || foo;\n\nConfigure the inspection:\n\n* Use the **Don't suggest '?:' operator** option to disable the warning when the `?:` operator is suggested. In this case, only `&&`, `||`, `==`, and `!=` suggestions will be highlighted. The quick-fix will still be available in the editor.\n* Use the **Ignore chained 'if' statements** option to disable the warning for `if-else` chains. The quick-fix will still be available in the editor.\n\nNew in 2018.2" + }, + { + "shortName": "EqualsCalledOnEnumConstant", + "displayName": "'equals()' called on enum value", + "enabled": false, + "description": "Reports `equals()` calls on enum constants.\n\nSuch calls can be replaced by an identity comparison (`==`) because two\nenum constants are equal only when they have the same identity.\n\nA quick-fix is available to change the call to a comparison.\n\n**Example:**\n\n\n boolean foo(MyEnum value) {\n return value.equals(MyEnum.FOO);\n }\n\nAfter the quick-fix is applied:\n\n\n boolean foo(MyEnum value) {\n return value == MyEnum.FOO;\n }\n" + }, + { + "shortName": "UnnecessaryConstantArrayCreationExpression", + "displayName": "Redundant 'new' expression in constant array creation", + "enabled": false, + "description": "Reports constant new array expressions that can be replaced with an array initializer. Array initializers can omit the type because it is already specified in the left side of the assignment.\n\n**Example:**\n\n\n int[] foo = new int[] {42};\n\nAfter the quick-fix is applied:\n\n\n int[] foo = {42};\n" + }, + { + "shortName": "OptionalContainsCollection", + "displayName": "'Optional' contains array or collection", + "enabled": false, + "description": "Reports `java.util.Optional` or `com.google.common.base.Optional` types with an array or collection type parameter.\n\nIn such cases, it is more clear to just use an empty array or collection to indicate the absence of result.\n\n**Example:**\n\n\n Optional> foo() {\n return Optional.empty();\n }\n\nThis code could look like:\n\n\n List foo() {\n return new List<>();\n }\n \n" + }, + { + "shortName": "CharsetObjectCanBeUsed", + "displayName": "Standard 'Charset' object can be used", + "enabled": false, + "description": "Reports methods and constructors in which constant charset `String` literal (for example, `\"UTF-8\"`) can be replaced with the predefined `StandardCharsets.UTF_8` code.\n\nThe code after the fix may work faster, because the charset lookup becomes unnecessary.\nAlso, catching `UnsupportedEncodingException` may become unnecessary as well. In this case,\nthe catch block will be removed automatically.\n\nExample:\n\n\n try {\n byte[] bytes = \"str\".getBytes(\"UTF-8\");\n } catch (UnsupportedEncodingException e) {\n }\n\nAfter quick-fix is applied:\n\n\n byte[] bytes = \"str\".getBytes(StandardCharsets.UTF_8);\n\nThe inspection is available in Java 7 and later.\n\nNew in 2018.2" + }, + { + "shortName": "ArrayCreationWithoutNewKeyword", + "displayName": "Array creation without 'new' expression", + "enabled": false, + "description": "Reports array initializers without `new` array expressions and suggests adding them.\n\nExample:\n\n\n int[] a = {42}\n\nAfter the quick-fix is applied:\n\n\n int[] a = new int[]{42}\n" + }, + { + "shortName": "ConfusingOctalEscape", + "displayName": "Confusing octal escape sequence", + "enabled": false, + "description": "Reports string literals containing an octal escape sequence immediately followed by a digit.\n\nSuch strings may be confusing, and are often the result of errors in escape code creation.\n\n**Example:**\n\n\n System.out.println(\"\\1234\"); // Octal escape sequence '\\123' immediately followed by a digit\n" + }, + { + "shortName": "MissortedModifiers", + "displayName": "Missorted modifiers", + "enabled": false, + "description": "Reports declarations whose modifiers are not in the canonical preferred order (as stated in the Java Language Specification).\n\n**Example:**\n\n\n class Foo {\n native public final void foo();\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n public final native void foo();\n }\n\nUse the inspection settings to:\n\n*\n toggle the reporting of misplaced annotations:\n (annotations with `ElementType.TYPE_USE` *not* directly\n before the type and after the modifier keywords, or\n other annotations *not* before the modifier keywords).\n When this option is disabled, any annotation can be positioned before or after the modifier keywords.\n Modifier lists with annotations in between the modifier keywords will always be reported.\n\n*\n specify whether the `ElementType.TYPE_USE` annotation should be positioned directly before\n a type, even when the annotation has other targets specified." + }, + { + "shortName": "TypeParameterExtendsObject", + "displayName": "Type parameter explicitly extends 'Object'", + "enabled": false, + "description": "Reports type parameters and wildcard type arguments that are explicitly declared to extend `java.lang.Object`.\n\nSuch 'extends' clauses are redundant as `java.lang.Object` is a supertype for all classes.\n\n**Example:**\n\n class ClassA {}\n\n\nIf you need to preserve the 'extends Object' clause because of annotations, disable the\n**Ignore when java.lang.Object is annotated** option.\nThis might be useful, for example, when you use a nullness analyzer, and the 'extends Object' clause\nholds a `@Nullable`/`@NotNull` annotation.\n\n**Example:**\n\n class MyClass {}\n" + }, + { + "shortName": "UnnecessaryToStringCall", + "displayName": "Unnecessary call to 'toString()'", + "enabled": false, + "description": "Reports calls to `toString()` that are used in the following cases:\n\n* In string concatenations\n* In the `java.lang.StringBuilder#append()` or `java.lang.StringBuffer#append()` methods\n* In the methods of `java.io.PrintWriter` or `java.io.PrintStream`\n* in the methods `org.slf4j.Logger`\n\nIn these cases, conversion to string will be handled by the underlying library methods, and the explicit call to `toString()` is not needed.\n\nExample:\n\n\n System.out.println(this.toString())\n\nAfter the quick-fix is applied:\n\n\n System.out.println(this)\n\n\nNote that without the `toString()` call, the code semantics might be different: if the expression is null,\nthen the `null` string will be used instead of throwing a `NullPointerException`.\n\nUse the **Report only when qualifier is known to be not-null** option to avoid warnings for the values that could potentially be null." + }, + { + "shortName": "ReturnSeparatedFromComputation", + "displayName": "'return' separated from the result computation", + "enabled": false, + "description": "Reports `return` statements that return a local variable where the value of the variable is computed somewhere else within the same method.\n\nThe quick-fix inlines the returned variable by moving the return statement to the location in which the value\nof the variable is computed.\nWhen the returned value can't be inlined into the `return` statement,\nthe quick-fix attempts to move the return statement as close to the computation of the returned value as possible.\n\nExample:\n\n\n int n = -1;\n for (int i = 0; i < a.length; i++) {\n if (a[i] == b) {\n n = i;\n break;\n }\n }\n return n;\n\nAfter the quick-fix is applied:\n\n\n int n = -1;\n for (int i = 0; i < a.length; i++) {\n if (a[i] == b) {\n return i;\n }\n }\n return n;\n" + }, + { + "shortName": "FillPermitsList", + "displayName": "Same file subclasses are missing from permits clause of a sealed class", + "enabled": false, + "description": "Reports sealed classes whose permits clauses do not contain some of the subclasses from the same file.\n\nExample:\n\n\n sealed class A {}\n final class B extends A {}\n\nAfter the quick-fix is applied:\n\n\n sealed class A permits B {}\n final class B extends A {}\n\nNew in 2020.3" + }, + { + "shortName": "UnqualifiedFieldAccess", + "displayName": "Instance field access not qualified with 'this'", + "enabled": false, + "description": "Reports field access operations that are not qualified with `this` or some other qualifier.\n\n\nSome coding styles mandate that all field access operations are qualified to prevent confusion with local\nvariable or parameter access.\n\n**Example:**\n\n\n class Foo {\n int foo;\n\n void bar() {\n foo += 1;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n int foo;\n\n void bar() {\n this.foo += 1;\n }\n }\n" + }, + { + "shortName": "UnnecessaryCallToStringValueOf", + "displayName": "Unnecessary conversion to 'String'", + "enabled": false, + "description": "Reports calls to static methods like `String.valueOf()` or `Integer.toString()` when they are used in a string concatenation or as an argument of a library method in which the explicit string conversion is not needed.\n\nExample:\n\n\n System.out.println(\"Number: \" + Integer.toString(count));\n\nAfter the quick-fix is applied:\n\n\n System.out.println(\"Number: \" + count);\n\nLibrary methods in which explicit string conversion is considered redundant:\n\n* Classes `java.io.PrintWriter`, `java.io.PrintStream`\n * `print()`, `println()`\n* Classes `java.lang.StringBuilder`, `java.lang.StringBuffer`\n * `append()`\n* Class `org.slf4j.Logger`\n * `trace()`, `debug()`, `info()`, `warn()`, `error()`" + }, + { + "shortName": "ConstantOnWrongSideOfComparison", + "displayName": "Constant on wrong side of comparison", + "enabled": false, + "description": "Reports comparison operations where the constant value is on the wrong side.\n\nSome coding conventions specify that constants should be on a specific side of a comparison, either left or right.\n\n**Example:**\n\n\n boolean compare(int x) {\n return 1 > x; // Constant '1' on the left side of the comparison\n }\n\nAfter the quick-fix is applied:\n\n\n boolean compare(int x) {\n return x < 1;\n }\n\n\nUse the inspection settings to choose the side of constants in comparisons\nand whether to warn if `null` literals are on the wrong side.\n\nNew in 2019.2" + }, + { + "shortName": "UnnecessarilyQualifiedStaticallyImportedElement", + "displayName": "Unnecessarily qualified statically imported element", + "enabled": false, + "description": "Reports usage of statically imported members qualified with their containing class name.\n\nSuch qualification is unnecessary and can be removed\nbecause statically imported members can be accessed directly by member name.\n\n**Example:**\n\n\n import static foo.Test.WIDTH;\n\n class Bar {\n void bar() {\n System.out.println(Test.WIDTH);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n import static foo.Test.WIDTH;\n\n class Bar {\n void bar() {\n System.out.println(WIDTH);\n }\n }\n" + }, + { + "shortName": "LambdaCanBeReplacedWithAnonymous", + "displayName": "Lambda can be replaced with anonymous class", + "enabled": false, + "description": "Reports lambda expressions that can be replaced with anonymous classes.\n\n\nExpanding lambda expressions to anonymous classes may be useful if you need to implement other\nmethods inside an anonymous class.\n\nExample:\n\n\n s -> System.out.println(s)\n\nAfter the quick-fix is applied:\n\n new Consumer() {\n @Override\n public void accept(String s) {\n System.out.println(s);\n }\n }\n\n\n*Lambda expression* appeared in Java 8.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions." + }, + { + "shortName": "ConditionalCanBeOptional", + "displayName": "Conditional can be replaced with Optional", + "enabled": false, + "description": "Reports null-check conditions and suggests replacing them with `Optional` chains.\n\nExample:\n\n\n return str == null ? \"\" : str.trim();\n\nAfter applying the quick-fix:\n\n\n return Optional.ofNullable(str).map(String::trim).orElse(\"\");\n\nWhile the replacement is not always shorter, it could be helpful for further refactoring\n(for example, for changing the method return value to `Optional`).\n\nNote that when a not-null branch of the condition returns null, the corresponding mapping step will\nproduce an empty `Optional` possibly changing the semantics. If it cannot be statically\nproven that semantics will be preserved, the quick-fix action name will contain the \"(may change semantics)\"\nnotice, and the inspection highlighting will be turned off.\n\nThis inspection only reports if the language level of the project or module is 8 or higher.\n\nNew in 2018.1" + }, + { + "shortName": "ConstantExpression", + "displayName": "Constant expression can be evaluated", + "enabled": false, + "description": "Reports compile-time constant expressions and suggests replacing them with their actual values. For example, you will be prompted to replace \"2 + 2\" with \"4\".\n\nNew in 2018.1" + }, + { + "shortName": "StreamToLoop", + "displayName": "Stream API call chain can be replaced with loop", + "enabled": false, + "description": "Reports Stream API chains, `Iterable.forEach()`, and `Map.forEach()` calls that can be automatically converted into classical loops.\n\n**Example:**\n\n\n String joinNonEmpty(List list) {\n return list.stream() // Stream can be converted to loop\n .filter(s -> !s.isEmpty())\n .map(String::trim)\n .collect(Collectors.joining(\", \"));\n }\n\nAfter the quick-fix is applied:\n\n\n String joinNonEmpty(List list) {\n StringJoiner joiner = new StringJoiner(\", \");\n for (String s : list) {\n if (!s.isEmpty()) {\n String trim = s.trim();\n joiner.add(trim);\n }\n }\n return joiner.toString();\n }\n\n\nNote that sometimes this inspection might cause slight semantic changes.\nSpecial care should be taken when it comes to short-circuiting, as it's not specified how many elements will be actually read when\nthe stream short-circuits.\n\n\n*Stream API* appeared in Java 8.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions.\n\nConfigure the inspection:\n\nUse the **Iterate unknown Stream sources via Stream.iterator()** option to suggest conversions for streams with unrecognized source.\nIn this case, iterator will be created from the stream.\nFor example, when checkbox is selected, the conversion will be suggested here:\n\n\n List handles = ProcessHandle.allProcesses().collect(Collectors.toList());\n\nIn this case, the result will be as follows:\n\n\n List handles = new ArrayList<>();\n for (Iterator it = ProcessHandle.allProcesses().iterator(); it.hasNext(); ) {\n ProcessHandle allProcess = it.next();\n handles.add(allProcess);\n }\n\nNew in 2017.1" + }, + { + "shortName": "OptionalToIf", + "displayName": "'Optional' can be replaced with sequence of 'if' statements", + "enabled": false, + "description": "Reports `Optional` call chains that can be replaced with a sequence of `if` statements.\n\nExample:\n\n\n return Optional.ofNullable(name)\n .map(this::extractInitials)\n .map(initials -> initials.toUpperCase(Locale.ENGLISH))\n .orElseGet(this::getDefault);\n\nAfter the quick-fix is applied:\n\n\n if (name != null) {\n String initials = extractInitials(name);\n if (initials != null) return initials.toUpperCase(Locale.ENGLISH);\n }\n return getDefault();\n\n\n`java.util.Optional` appeared in Java 8.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions.\n\nNew in 2020.2" + }, + { + "shortName": "UnnecessaryFinalOnLocalVariableOrParameter", + "displayName": "Unnecessary 'final' on local variable or parameter", + "enabled": false, + "description": "Reports local variables or parameters unnecessarily declared `final`.\n\nSome coding standards frown upon variables declared `final` for reasons of terseness.\n\n**Example:**\n\n\n class Foo {\n Foo(Object o) {}\n\n void bar(final Object o) {\n new Foo(o);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n Foo(Object o) {}\n\n void bar(Object o) {\n new Foo(o);\n }\n }\n\n\nUse the inspection options to toggle the reporting for:\n\n* local variables\n* parameters (including parameters of `catch` blocks and enhanced `for` statements)\n\n\nAlso, you can configure the inspection to only report `final` parameters of `abstract` or interface\nmethods, which may be considered extra unnecessary as such markings don't\naffect the implementation of these methods." + }, + { + "shortName": "UnnecessaryBlockStatement", + "displayName": "Unnecessary code block", + "enabled": false, + "description": "Reports code blocks that are redundant to the semantics of the program and can be replaced with their contents.\n\nThe code blocks that are the bodies of `if`, `do`,\n`while`, or `for` statements will not be reported by this\ninspection.\n\nExample:\n\n\n void foo() {\n { // unnecessary\n int result = call();\n analyze(result);\n } // unnecessary\n }\n\nConfigure the inspection:\n\n\nUse the **Ignore branches of 'switch' statements** option to ignore the code blocks that are used as branches of switch statements." + }, + { + "shortName": "FieldMayBeFinal", + "displayName": "Field may be 'final'", + "enabled": false, + "description": "Reports fields that can be safely made `final`. All `final` fields have a value and this value does not change, which can make the code easier to reason about.\n\nTo avoid too expensive analysis, this inspection only reports if the field has a `private` modifier\nor it is defined in a local or anonymous class.\nA field can be `final` if:\n\n* It is `static` and initialized once in its declaration or in one `static` initializer.\n* It is non-`static` and initialized once in its declaration, in one instance initializer or in every constructor\n\nAnd it is not modified anywhere else.\n\n**Example:**\n\n\n public class Person {\n private String name; // can be final\n\n Person(String name) {\n this.name = name;\n }\n\n public String getName() {\n return name;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class Person {\n private final String name;\n\n Person(String name) {\n this.name = name;\n }\n\n public String getName() {\n return name;\n }\n }\n" + }, + { + "shortName": "SingleElementAnnotation", + "displayName": "Non-normalized annotation", + "enabled": false, + "description": "Reports annotations in a shorthand form and suggests rewriting them in a normal form with an attribute name.\n\nExample:\n\n\n @SuppressWarnings(\"foo\")\n\nAfter the quick-fix is applied:\n\n\n @SuppressWarnings(value = \"foo\")\n" + }, + { + "shortName": "BoundedWildcard", + "displayName": "Can use bounded wildcard", + "enabled": false, + "description": "Reports generic method parameters that can make use of [bounded wildcards](https://en.wikipedia.org/wiki/Wildcard_(Java)).\n\n**Example:**\n\n\n void process(Consumer consumer);\n\nshould be replaced with:\n\n\n void process(Consumer consumer);\n\n\nThis method signature is more flexible because it accepts more types: not only\n`Consumer`, but also `Consumer`.\n\nLikewise, type parameters in covariant position:\n\n\n T produce(Producer p);\n\nshould be replaced with:\n\n\n T produce(Producer p);\n\n\nTo quote [Joshua Bloch](https://en.wikipedia.org/wiki/Joshua_Bloch#Effective_Java) in *Effective Java* third Edition:\n>\n> #### Item 31: Use bounded wildcards to increase API flexibility\n>\n> Using wildcard types in your APIs, while tricky, makes the APIs far more flexible. If you write a library that will be widely used, the proper use of wildcard types should be considered mandatory. Remember the basic rule: producer-extends, consumer-super (PECS). Also remember that all Comparables and Comparators are consumers.\n\n\nUse the inspection options to toggle the reporting for:\n\n*\n invariant classes. An example of an invariant class is `java.util.List` because it both accepts values\n (via the `List.add(T)` method)\n and produces values (via the `T List.get()` method).\n\n\n On the\n other hand, `contravariant` classes only receive values, for example, `java.util.function.Consumer`\n with the only method `accept(T)`. Similarly, `covariant` classes\n only produce values, for example, `java.util.function.Supplier`\n with the only method `T get()`.\n\n\n People often use bounded wildcards in covariant/contravariant\n classes but avoid wildcards in invariant classes, for example, `void process(List l)`.\n Disable this option to ignore such invariant classes and leave them rigidly typed, for example, `void\n process(List l)`.\n*\n `private` methods, which can be considered as not a part of the public API\n\n*\n instance methods" + }, + { + "shortName": "UnqualifiedMethodAccess", + "displayName": "Instance method call not qualified with 'this'", + "enabled": false, + "description": "Reports calls to non-`static` methods on the same instance that are not qualified with `this`.\n\n**Example:**\n\n\n class Foo {\n void bar() {}\n\n void foo() {\n bar();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n void bar() {}\n\n void foo() {\n this.bar();\n }\n }\n" + }, + { + "shortName": "UnnecessarySuperConstructor", + "displayName": "Unnecessary call to 'super()'", + "enabled": false, + "description": "Reports calls to no-arg superclass constructors during object construction.\n\nSuch calls are unnecessary and may be removed.\n\n**Example:**\n\n\n class Foo {\n Foo() {\n super();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n Foo() {\n }\n }\n" + }, + { + "shortName": "DiamondCanBeReplacedWithExplicitTypeArguments", + "displayName": "Diamond can be replaced with explicit type arguments", + "enabled": false, + "description": "Reports instantiation of generic classes in which the **\\<\\>** symbol (diamond) is used instead of type parameters.\n\nThe quick-fix replaces **\\<\\>** (diamond) with explicit type parameters.\n\nExample:\n\n List list = new ArrayList<>()\n\nAfter the quick-fix is applied:\n\n List list = new ArrayList()\n\n\n*Diamond operation* appeared in Java 7.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions." + }, + { + "shortName": "TrailingWhitespacesInTextBlock", + "displayName": "Trailing whitespace in text block", + "enabled": false, + "description": "Reports text blocks with trailing whitespace characters. Trailing whitespace is considered incidental and will be stripped away by the Java compiler.\n\nThis inspection only reports if the language level of the project or module is 15 or higher.\n\nNew in 2021.1" + } + ] + }, + { + "name": "Probable bugs", + "inspections": [ + { + "shortName": "SubtractionInCompareTo", + "displayName": "Subtraction in 'compareTo()'", + "enabled": false, + "description": "Reports subtraction in `compareTo()` methods and methods implementing `java.util.Comparator.compare()`.\n\n\nWhile it is a common idiom to\nuse the results of integer subtraction as the result of a `compareTo()`\nmethod, this construct may cause subtle and difficult bugs in cases of integer overflow.\nComparing the integer values directly and returning `-1`, `0`, or `1` is a better practice in most cases.\n\n\nSubtraction on floating point values that is immediately cast to integral type is also reported because precision loss is possible due to\nrounding.\n\n\nThe inspection doesn't report when it's statically determined that value ranges are limited, and overflow never occurs.\nAdditionally, subtraction on `int` numbers greater than or equal to `0` will never overflow.\nTherefore, this inspection tries not to warn in those cases.\n\n\nMethods that always return zero or greater can be marked with the\n`javax.annotation.Nonnegative` annotation or specified in this inspection's options.\n\n**Example:**\n\n\n class DoubleHolder implements Comparable {\n double d;\n public int compareTo(DoubleHolder that) {\n return (int)(this.d - that.d);\n }\n }\n\nA no-warning example because `String.length()` is known to be non-negative:\n\n\n class A implements Comparable {\n final String s = \"\";\n public int compareTo(A a) {\n return s.length() - a.s.length();\n }\n }\n\n\nUse the options to list methods that are safe to use inside a subtraction.\nMethods are safe when they return an `int` value that is always greater than or equal to `0`." + }, + { + "shortName": "NumberEquality", + "displayName": "Number comparison using '==', instead of 'equals()'", + "enabled": true, + "description": "Reports code that uses **==** or **!=** instead of `equals()` to test for `Number` equality.\n\n\nWith auto-boxing, it is easy\nto make the mistake of comparing two instances of a wrapper type instead of two primitives, for example `Integer` instead of\n`int`.\n\n**Example:**\n\n void foo(Integer a, Integer b) {\n final boolean bool = a == b;\n }\n\nIf `a` is known to be non-null, then it's safe to apply the \"unsafe\" quick-fix and get the result similar to the following:\n\n void foo(Integer a, Integer b) {\n final boolean bool = a.equals(b);\n }\n" + }, + { + "shortName": "MathRandomCastToInt", + "displayName": "'Math.random()' cast to 'int'", + "enabled": true, + "description": "Reports calls to `Math.random()` which are immediately cast to `int`.\n\nCasting a `double` between `0.0` (inclusive) and\n`1.0` (exclusive) to `int` will always round down to zero. The value\nshould first be multiplied by some factor before casting it to an `int` to\nget a value between zero (inclusive) and the multiplication factor (exclusive).\nAnother possible solution is to use the `nextInt()` method of\n`java.util.Random`.\n\n**Example:**\n\n int r = (int)Math.random() * 10;\n\nAfter the quick fix is applied:\n\n int r = (int)(Math.random() * 10);\n" + }, + { + "shortName": "MismatchedStringCase", + "displayName": "Mismatched case in 'String' operation", + "enabled": true, + "description": "Reports `String` method calls that always return the same value (`-1` or `false`) because a lowercase character is searched in an uppercase-only string or vice versa.\n\nReported methods include `equals`, `startsWith`, `endsWith`, `contains`,\n`indexOf`, and `lastIndexOf`.\n\n**Example:**\n\n```\n if (columnName.toLowerCase().equals(\"ID\")) {...}\n```\n\nNew in 2019.3" + }, + { + "shortName": "NewStringBufferWithCharArgument", + "displayName": "StringBuilder constructor call with 'char' argument", + "enabled": true, + "description": "Reports calls to `StringBuffer` and `StringBuilder` constructors with `char` as the argument. In this case, `char` is silently cast to an integer and interpreted as the initial capacity of the buffer.\n\n**Example:**\n\n\n new StringBuilder('(').append(\"1\").append(')');\n\nAfter the quick-fix is applied:\n\n\n new StringBuilder(\"(\").append(\"1\").append(')');\n" + }, + { + "shortName": "ClassGetClass", + "displayName": "Suspicious 'Class.getClass()' call", + "enabled": true, + "description": "Reports `getClass()` methods that are called on a `java.lang.Class` instance.\n\nThis is usually a mistake as the result is always equivalent to `Class.class`.\nIf it's a mistake, then it's better to remove the `getClass()` call and use the qualifier directly.\nIf the behavior is intended, then it's better to write `Class.class` explicitly to avoid confusion.\n\nExample:\n\n\n void test(Class clazz) {\n String name = clazz.getClass().getName();\n }\n\nAfter one of the possible quick-fixes is applied:\n\n\n void test(Class clazz) {\n String name = clazz.getName();\n }\n\nNew in 2018.2" + }, + { + "shortName": "ResultOfObjectAllocationIgnored", + "displayName": "Result of object allocation ignored", + "enabled": false, + "description": "Reports object allocations where the allocated object is ignored and neither assigned to a variable nor used in another way.\n\n\nSuch allocation expressions are legal in Java, but are usually either unintended, or\nevidence of a very odd object initialization strategy.\n\n\nUse the options to list classes whose allocations should be ignored by this inspection." + }, + { + "shortName": "MisspelledEquals", + "displayName": "'equal()' instead of 'equals()'", + "enabled": true, + "description": "Reports declarations of `equal()` with a single parameter. Normally, this is a typo and `equals()` is actually intended.\n\nA quick-fix is suggested to rename the method to `equals`.\n\n**Example:**\n\n\n class Main {\n public boolean equal(Object obj) {\n return true;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Main {\n public boolean equals(Object obj) {\n return true;\n }\n }\n" + }, + { + "shortName": "MismatchedStringBuilderQueryUpdate", + "displayName": "Mismatched query and update of 'StringBuilder'", + "enabled": true, + "description": "Reports `StringBuilder` or `StringBuffer` objects whose contents are read but not written to, or written to but not read.\n\nSuch inconsistent reads and writes are pointless and probably indicate\ndead, incomplete, or erroneous code.\n\n**Example:**\n\n\n public void m1() {\n StringBuilder sb = new StringBuilder();\n sb.append(\"a\");\n }\n" + }, + { + "shortName": "SuspiciousArrayCast", + "displayName": "Suspicious array cast", + "enabled": false, + "description": "Reports suspicious array casts. An array cast is considered suspicious when it casts to a more specific array type. Such a cast is legal at compile time but may fail with a `ClassCastException` at runtime.\n\n**Example:**\n\n\n Number[] numbers = new Number[]{1L, 2L, 4L};\n Long[] longs = (Long[])numbers;\n" + }, + { + "shortName": "StringConcatenationMissingWhitespace", + "displayName": "Whitespace may be missing in string concatenation", + "enabled": false, + "description": "Reports string concatenations with missing whitespaces, that is where the left-hand side ends with a Unicode letter or digit and the right-hand side starts with a Unicode letter or digit.\n\n**Example:**\n\n\n String sql = \"SELECT column\" +\n \"FROM table\";\n\n\nUse the **Ignore concatenations with variable strings** option to only report\nwhen both the left and right side of the concatenation are literals." + }, + { + "shortName": "ResultSetIndexZero", + "displayName": "Use of index 0 in JDBC ResultSet", + "enabled": false, + "description": "Reports attempts to access column 0 of `java.sql.ResultSet` or `java.sql.PreparedStatement`. For historical reasons, columns of `java.sql.ResultSet` and `java.sql.PreparedStatement` are numbered starting with **1** , rather than with **0** , and accessing column 0 is a common error in JDBC programming.\n\n**Example:**\n\n\n String getName(ResultSet rs) {\n return rs.getString(0);\n }\n" + }, + { + "shortName": "SuspiciousInvocationHandlerImplementation", + "displayName": "Suspicious 'InvocationHandler' implementation", + "enabled": true, + "description": "Reports implementations of `InvocationHandler` that do not proxy standard `Object` methods like `hashCode()`, `equals()`, and `toString()`.\n\nFailing to handle these methods might cause unexpected problems upon calling them on a proxy instance.\n\n**Example:**\n\n\n InvocationHandler myHandler = (proxy, method, params) -> {\n System.out.println(\"Hello World!\");\n return null;\n };\n Runnable myProxy = (Runnable) Proxy.newProxyInstance(\n Thread.currentThread().getContextClassLoader(),\n new Class[] {Runnable.class}, myHandler\n );\n\n\nThis code snippet is designed to only proxy the `Runnable.run()` method.\nHowever, calls to any `Object` methods, like `hashCode()`, are proxied as well.\nThis can lead to problems like a `NullPointerException`, for example, when adding `myProxy` to a `HashSet`.\n\nNew in 2020.2" + }, + { + "shortName": "EqualsUsesNonFinalVariable", + "displayName": "Non-final field referenced in 'equals()'", + "enabled": false, + "description": "Reports implementations of `equals()` that access non-`final` variables. Such access may result in `equals()` returning different results at different points in the object's lifecycle, which may in turn cause problems when using the standard collections classes.\n\n**Example:**\n\n\n public class Person {\n private String lastName;\n\n @Override\n public boolean equals(Object obj) {\n ...\n Person other = (Person) obj;\n if (lastName == null) {\n if (!lastName.equals(other.lastName)) {\n return false;\n ...\n }\n }\n }\n \n" + }, + { + "shortName": "StringConcatenationInMessageFormatCall", + "displayName": "String concatenation as argument to 'MessageFormat.format()' call", + "enabled": false, + "description": "Reports non-constant string concatenations used as an argument to a call to `MessageFormat.format()`.\n\n\nWhile occasionally intended, this is usually a misuse of the formatting method\nand may even cause unexpected exceptions if the variables used in the concatenated string contain\nspecial characters like `{`.\n\n\nAlso, sometimes this could be the result\nof mistakenly concatenating a string format argument by typing a `+` when a `,` was meant.\n\n**Example:**\n\n\n String formatGreeting(String userName, int balance) {\n return MessageFormat.format(\"Hello, \" + userName + \"! Your balance is {0}.\", balance);\n }\n\n\nHere, the `userName` will be interpreted as a part of the format string, which may result\nin `IllegalArgumentException` (for example, if `userName` is `\"{\"`).\nThis call should be probably replaced with `MessageFormat.format(\"Hello, {0}! Your balance is {1}.\", userName, balance)`." + }, + { + "shortName": "ComparatorResultComparison", + "displayName": "Suspicious usage of compare method", + "enabled": true, + "description": "Reports comparisons of the result of `Comparator.compare()` or `Comparable.compareTo()` calls with non-zero constants. By contract, these methods can return any integer (not just -1, 0 or 1), so comparing against particular numbers is bad practice. Some widely used comparison methods (e.g. `String.compareTo()`) actually return values outside the \\[-1..1\\] range, and such a comparison may cause incorrect program behavior.\n\nExample:\n\n\n void validate(String s1, String s2) {\n // Comparing to 1 is incorrect\n if (s1.compareTo(s2) == 1) {\n throw new IllegalArgumentException(\"Incorrect order\");\n }\n }\n\nAfter the quick-fix is applied:\n\n\n void validate(String s1, String s2) {\n if (s1.compareTo(s2) > 0) {\n throw new IllegalArgumentException(\"Incorrect order\");\n }\n }\n\nNew in 2017.2" + }, + { + "shortName": "ImplicitArrayToString", + "displayName": "Call to 'toString()' on array", + "enabled": true, + "description": "Reports arrays used in `String` concatenations or passed as parameters to `java.io.PrintStream` methods, such as `System.out.println()`.\n\n\nUsually, the content of the array is meant to be used and not the array object itself.\n\n**Example:**\n\n\n void print(Object[] objects) {\n System.out.println(objects);\n }\n\nAfter the quick-fix is applied:\n\n\n void print(Object[] objects) {\n System.out.println(Arrays.toString(objects));\n }\n" + }, + { + "shortName": "SuspiciousToArrayCall", + "displayName": "Suspicious 'Collection.toArray()' call", + "enabled": true, + "description": "Reports suspicious calls to `Collection.toArray()`.\n\nThe following types of calls are considered suspicious:\n\n* when the type of the array argument is not the same as the array type to which the result is casted.\n* when the type of the array argument does not match the type parameter in the collection declaration.\n\n**Example:**\n\n\n void m1(List list) {\n Number[] ns = (Number[]) list.toArray(new String[0]);\n }\n\n void m2(List list) {\n Number[] ns = list.toArray(new String[0]);\n }\n" + }, + { + "shortName": "CompareToUsesNonFinalVariable", + "displayName": "Non-final field referenced in 'compareTo()'", + "enabled": false, + "description": "Reports access to a non-`final` field inside a `compareTo()` implementation.\n\n\nSuch access may result in `compareTo()`\nreturning different results at different points in the object's lifecycle, which may in turn cause problems when\nusing the standard collections classes, for example `java.util.TreeSet`.\n\n\nA quick-fix to make the field `final` is available\nonly when there is no write access to the field, otherwise no fixes are suggested.\n\n**Example:**\n\n\n class Foo implements Comparable{\n private int index;\n Foo(int idx) {\n index = idx;\n }\n @Override\n public int compareTo(Foo foo) {\n return Integer.compare(this.index, foo.index);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo implements Comparable{\n private final int index;\n Foo(int idx) {\n index = idx;\n }\n @Override\n public int compareTo(Foo foo) {\n return Integer.compare(this.index, foo.index);\n }\n }\n" + }, + { + "shortName": "SuspiciousSystemArraycopy", + "displayName": "Suspicious 'System.arraycopy()' call", + "enabled": true, + "description": "Reports suspicious calls to `System.arraycopy()`.\n\nSuch calls are suspicious when:\n\n* the source or destination is not of an array type\n* the source and destination are of different types\n* the copied chunk length is greater than `src.length - srcPos`\n* the copied chunk length is greater than `dest.length - destPos`\n* the ranges always intersect when the source and destination are the same array\n\n**Example:**\n\n\n void foo() {\n int[] src = new int[] { 1, 2, 3, 4 };\n System.arraycopy(src, 0, src, 1, 2); // warning: Copying to the same array with intersecting ranges\n }\n" + }, + { + "shortName": "MalformedFormatString", + "displayName": "Malformed format string", + "enabled": true, + "description": "Reports format strings that don't comply with the standard Java syntax.\n\nBy default, the inspection considers a compile-time constant a format string if it's used as an argument to the corresponding methods on\n`java.util.Formatter`, `java.lang.String`, `java.io.PrintWriter` or `java.io.PrintStream`.\n\n**Example:**\n\n\n String.format(\"x = %d, y = %d\", 42);\n\nUse the inspection settings to mark additional classes and methods as related to string formatting.\n\nAs an alternative, you can use the `org.intellij.lang.annotations.PrintFormat` annotation\nto mark the format string method parameter. In this case,\nthe format arguments parameter must immediately follow the format string and be the last method parameter. Example:\n\n\n void myFormatMethod(int mode, @PrintFormat String formatString, Object... args) {...}\n\n\nMethods annotated in this way will also be recognized by this inspection." + }, + { + "shortName": "EndlessStream", + "displayName": "Non-short-circuit operation consumes infinite stream", + "enabled": true, + "description": "Reports non-short-circuit operations consuming an infinite stream. Such operations can be completed only by throwing an exception.\n\nExample:\n\n\n Stream.iterate(0, i -> i + 1).collect(Collectors.toList())\n" + }, + { + "shortName": "ArrayEquals", + "displayName": "'equals()' called on array", + "enabled": true, + "description": "Reports `equals()` calls that compare two arrays.\n\nCalling `equals()` on an array compares identity and is equivalent to using `==`.\nUse `Arrays.equals()` to compare the contents of two arrays, or `Arrays.deepEquals()` for\nmulti-dimensional arrays.\n\n**Example:**\n\n\n void sample(int[] first, int[] second){\n if (first.equals(second)) return;\n }\n\nAfter the quick-fix is applied:\n\n\n void sample(int[] first, int[] second){\n if (Arrays.equals(first, second)) return;\n }\n" + }, + { + "shortName": "ThrowableNotThrown", + "displayName": "'Throwable' not thrown", + "enabled": true, + "description": "Reports instantiations of `Throwable` or its subclasses, where the created `Throwable` is never actually thrown. Additionally, this inspection reports method calls that return instances of `Throwable` or its subclasses, when the result of the method call is not thrown.\n\nCalls to methods annotated with the Error Prone's or AssertJ's `@CanIgnoreReturnValue` annotation will not be reported.\n\n**Example:**\n\n\n void check(String s) {\n if (s == null) {\n new NullPointerException(\"s\");\n }\n // ...\n }\n" + }, + { + "shortName": "CapturingCleaner", + "displayName": "Cleaner captures object reference", + "enabled": true, + "description": "Reports `Runnable` passed to a `Cleaner.register()` capturing reference being registered. If the reference is captured, it will never be phantom reachable and the cleaning action will never be invoked.\n\nPossible sources of this problem:\n\n* Lambda using non-static methods, fields, or `this` itself\n* Non-static inner class (anonymous or not) always captures this reference in java up to 18 version\n* Instance method reference\n* Access to outer class non-static members from non-static inner class\n\nSample of code that will be reported:\n\n\n int fileDescriptor;\n Cleaner.Cleanable cleanable = Cleaner.create().register(this, () -> {\n System.out.println(\"adsad\");\n //this is captured via fileDescriptor\n fileDescriptor = 0;\n });\n\nThis inspection only reports if the language level of the project or module is 9 or higher.\n\nNew in 2018.1" + }, + { + "shortName": "MismatchedArrayReadWrite", + "displayName": "Mismatched read and write of array", + "enabled": true, + "description": "Reports arrays whose contents are read but not updated, or updated but not read. Such inconsistent reads and writes are pointless and probably indicate dead, incomplete or erroneous code.\n\n**Example:**\n\n\n final int[] bar = new int[3];\n bar[2] = 3;\n" + }, + { + "shortName": "TextLabelInSwitchStatement", + "displayName": "Text label in 'switch' statement", + "enabled": true, + "description": "Reports labeled statements inside of `switch` statements. While occasionally intended, this construction is often the result of a typo.\n\n**Example:**\n\n\n switch (x) {\n case 1:\n case2: //warning: Text label 'case2:' in 'switch' statement\n case 3:\n break;\n }\n" + }, + { + "shortName": "WriteOnlyObject", + "displayName": "Write-only object", + "enabled": true, + "description": "Reports objects that are modified but never queried.\n\nThe inspection relies on the method mutation contract, which could be inferred\nor pre-annotated for some library methods. This inspection does not report collections, maps, and string builders, as these types\nare reported by other more precise inspections.\n\nExample:\n\n\n AtomicReference ref = new AtomicReference<>();\n ref.set(\"hello\"); // ref is never used again\n\n\nUse the **Ignore impure constructors** option to control whether to process objects created by constructor or method whose purity is not known.\nUnchecking the option may introduce some false-positives if the object reference is intentionally leaked during the construction.\n**New in 2021.2**" + }, + { + "shortName": "StringTokenizerDelimiter", + "displayName": "Duplicated delimiters in 'StringTokenizer'", + "enabled": true, + "description": "Reports `StringTokenizer()` constructor calls or `nextToken()` method calls that contain duplicate characters in the delimiter argument.\n\n**Example:**\n\n\n void printTokens(String text) {\n StringTokenizer tokenizer = new StringTokenizer(text, \"\\n\\n\");\n while (tokenizer.hasMoreTokens()) {\n System.out.println(tokenizer.nextToken());\n }\n }\n\nAfter the quick-fix is applied:\n\n\n void printTokens(String text) {\n StringTokenizer tokenizer = new StringTokenizer(text, \"\\n\");\n while (tokenizer.hasMoreTokens()) {\n System.out.println(tokenizer.nextToken());\n }\n }\n" + }, + { + "shortName": "ReflectionForUnavailableAnnotation", + "displayName": "Reflective access to a source-only annotation", + "enabled": true, + "description": "Reports attempts to reflectively check for the presence of a non-runtime annotation.\n\nUsing `Class.isAnnotationPresent()` to test for an annotation\nwhose retention policy is set to `SOURCE` or `CLASS`\n(the default) will always have a negative result. This mistake is easy to overlook.\n\n**Example:**\n\n\n {\n getClass().isAnnotationPresent(SourceAnnotation.class); //always false\n }\n\n @Retention(RetentionPolicy.SOURCE)\n @interface SourceAnnotation {}\n" + }, + { + "shortName": "ConstantAssertCondition", + "displayName": "Constant condition in 'assert' statement", + "enabled": false, + "description": "Reports `assert` statement conditions that are constants. `assert` statements with constant conditions will either always fail or always succeed. Such statements might be left over after a refactoring and are probably not intended.\n\n**Example:**\n\n\n void foo() {\n assert true;\n }\n" + }, + { + "shortName": "ArrayHashCode", + "displayName": "'hashCode()' called on array", + "enabled": true, + "description": "Reports incorrect hash code calculation for arrays.\n\nIn order to\ncorrectly calculate the hash code for an array, use:\n\n* `Arrays.hashcode()` for linear arrays\n* `Arrays.deepHashcode()` for multidimensional arrays\n\nThese methods should also be used with `Objects.hash()` when the sequence of input values includes arrays, for example: `Objects.hash(string, Arrays.hashcode(array))`" + }, + { + "shortName": "ConfusingMainMethod", + "displayName": "Confusing 'main()' method", + "enabled": false, + "description": "Reports methods that are named \"main\", but do not have the `public static void main(String[])` signature.\n\nSuch methods may be confusing, as methods named \"main\"\nare expected to be application entry points.\n\n**Example:**\n\n\n class Main {\n void main(String[] args) {} //a warning here because there are no \"public static\" modifiers\n }\n\nA quick-fix that renames such methods is available only in the editor." + }, + { + "shortName": "DataFlowIssue", + "displayName": "Nullability and data flow problems", + "enabled": true, + "description": "Reports code constructs that always violate nullability contracts, may throw exceptions, or are just redundant, based on data flow analysis.\n\nExamples:\n\n if (array.length < index) {\n System.out.println(array[index]);\n } // Array index is always out of bounds\n\n if (str == null) System.out.println(\"str is null\");\n System.out.println(str.trim());\n // the last statement may throw an NPE\n\n @NotNull\n Integer square(@Nullable Integer input) {\n // the method contract is violated\n return input == null ? null : input * input;\n }\n\n\nThe inspection behavior may be controlled by a number of annotations, such as\n[nullability](https://www.jetbrains.com/help/idea/nullable-and-notnull-annotations.html) annotations,\n[@Contract](https://www.jetbrains.com/help/idea/contract-annotations.html) annotation,\n`@Range` annotation and so on.\n\nConfigure the inspection:\n\n* Use the **Suggest @Nullable annotation for methods/fields/parameters where nullable values are used** option to warn when a nullable value is passed as an argument to a method with a non-annotated parameter, stored into non-annotated field, or returned from a non-annotated method. In this case, the inspection will suggest propagating the `@Nullable` annotation. You can also configure nullability annotations using the **Configure Annotations** button.\n* Use the **Treat non-annotated members and parameters as @Nullable** option to assume that non-annotated members can be null, so they must not be used in non-null context.\n* Use the **Report not-null required parameter with null-literal argument usages** option to report method parameters that cannot be null (e.g. immediately dereferenced in the method body), but there are call sites where a `null` literal is passed.\n* Use the **Report nullable methods that always return a non-null value** option to report methods that are annotated as `@Nullable`, but always return non-null value. In this case, it's suggested that you change the annotation to `@NotNull`.\n* Use the **Ignore assert statements** option to control how the inspection treats `assert` statements. By default, the option is disabled, which means that the assertions are assumed to be executed (-ea mode). If the option is enabled, the assertions will be completely ignored (-da mode).\n* Use the **Report problems that happen only on some code paths** option to control whether to report problems that may happen only on some code path. If this option is disabled, warnings like *exception is possible* will not be reported. The inspection will report only warnings like *exception will definitely occur*. This mode may greatly reduce the number of false-positives, especially if the code is not consistently annotated with nullability and contract annotations. That is why it can be useful for finding the most important problems in legacy code bases.\n\n\nBefore IntelliJ IDEA 2022.3, this inspection was part of the \"Constant Conditions \\& Exceptions\" inspection.\nNow, it is split into two inspections:\n\"Constant Values\" and \"Nullability and data flow problems\"." + }, + { + "shortName": "StringEqualsCharSequence", + "displayName": "'String.equals()' called with 'CharSequence' argument", + "enabled": true, + "description": "Reports calls to `String.equals()` with a `CharSequence` as the argument.\n\n\n`String.equals()` can only return `true` for `String` arguments.\nTo compare the contents of a `String` with a non-`String` `CharSequence` argument,\nuse the `contentEquals()` method.\n\n**Example:**\n\n\n boolean equals(String s, CharSequence ch) {\n return s.equals(ch);\n }\n\nAfter quick-fix is applied:\n\n\n boolean equals(String s, CharSequence ch) {\n return s.contentEquals(ch);\n }\n\n\nNew in 2017.3" + }, + { + "shortName": "AssertWithSideEffects", + "displayName": "'assert' statement with side effects", + "enabled": true, + "description": "Reports `assert` statements that cause side effects.\n\n\nSince assertions can be switched off,\nthese side effects are not guaranteed, which can cause subtle bugs. Common unwanted side effects detected by this inspection are\nmodifications of variables and fields. When methods calls are involved, they are analyzed one level deep.\n\n**Example:**\n\n\n assert i++ < 10;\n" + }, + { + "shortName": "CollectionAddedToSelf", + "displayName": "Collection added to itself", + "enabled": true, + "description": "Reports cases where the argument of a method call on a `java.util.Collection` or `java.util.Map` is the collection or map itself. Such situations may occur as a result of copy-paste in code with raw types.\n\n**Example:**\n\n\n ArrayList list = new ArrayList<>();\n list.add(list); // warning here\n return list.hashCode(); // throws StackOverflowError\n" + }, + { + "shortName": "EqualsOnSuspiciousObject", + "displayName": "'equals()' called on 'StringBuilder'", + "enabled": true, + "description": "Reports `equals()` calls on `StringBuilder` or `StringBuffer` instances.\n\nThe `equals()` method is not overridden in these classes, so it may return `false` even when the contents of the two objects are the same.\nIf the reference equality is intended, it's better to use `==` to avoid confusion.\n\nExample:\n\n\n public void test(StringBuilder sb1, StringBuilder sb2) {\n boolean result = sb1.equals(sb2); // Suspicious\n }\n\nNew in 2017.2" + }, + { + "shortName": "UseOfPropertiesAsHashtable", + "displayName": "Use of 'Properties' object as a 'Hashtable'", + "enabled": true, + "description": "Reports calls to the following methods on `java.util.Properties` objects:\n\n* `put()`\n* `putIfAbsent()`\n* `putAll()`\n* `get()`\n\n\nFor historical reasons, `java.util.Properties` inherits from `java.util.Hashtable`,\nbut using these methods is discouraged to prevent pollution of properties with values of types other than `String`.\n\n\nCalls to `java.util.Properties.putAll()` won't get reported when\nboth the key and the value parameters in the map are of the `String` type.\nSuch a call is safe and no better alternative exists.\n\n**Example:**\n\n\n Object f(Properties props) {\n props.put(\"hello\", \"world\");\n props.putIfAbsent(\"hello\", \"world\");\n props.putAll(new HashMap<>());\n return props.get(\"Hello\");\n }\n\nAfter the quick-fix is applied:\n\n\n Object f(Properties props) {\n props.setProperty(\"hello\", \"world\");\n props.putIfAbsent(\"hello\", \"world\");\n props.putAll(new HashMap<>());\n return props.getProperty(\"hello\");\n }\n" + }, + { + "shortName": "IncorrectDateTimeFormat", + "displayName": "Incorrect 'DateTimeFormat' pattern", + "enabled": false, + "description": "Reports incorrect date time format patterns.\n\nThe following errors are reported:\n\n* Unsupported pattern letters, like \"TT\"\n* Using reserved characters, like \"#\"\n* Incorrect use of padding\n* Unbalanced brackets\n* Incorrect amount of consecutive pattern letters\n\nExamples:\n\n\n DateTimeFormatter.ofPattern(\"[][]]\"); // Closing ']' without previous opening '['\n DateTimeFormatter.ofPattern(\"TT\"); // Illegal pattern letter 'T'\n DateTimeFormatter.ofPattern(\"{\"); // Use of reserved character '{'\n DateTimeFormatter.ofPattern(\"MMMMMM\"); // Too many consecutive pattern letters 'M'\n\nNew in 2022.3" + }, + { + "shortName": "CopyConstructorMissesField", + "displayName": "Copy constructor misses field", + "enabled": true, + "description": "Reports copy constructors that don't copy all the fields of the class.\n\n\n`final` fields with initializers and `transient` fields are considered unnecessary to copy.\n\n**Example:**\n\n\n class Point {\n\n private int x;\n private int y;\n\n Point(int x, int y) {\n this.x = x;\n this.y = y;\n }\n\n Point(Point other) {\n // fields x and y are not initialized\n }\n }\n\nNew in 2018.1" + }, + { + "shortName": "InvalidComparatorMethodReference", + "displayName": "Invalid method reference used for 'Comparator'", + "enabled": true, + "description": "Reports method references mapped to the `Comparator` interface that don't fulfill its contract.\n\n\nSome method references, like `Integer::max`, can be mapped to the `Comparator` interface.\nHowever, using them as `Comparator` is meaningless and the result might be unpredictable.\n\nExample:\n\n\n ArrayList ints = foo();\n ints.sort(Math::min);\n\nAfter the quick-fix is applied:\n\n\n ArrayList ints = foo();\n ints.sort(Comparator.reverseOrder());\n" + }, + { + "shortName": "SortedCollectionWithNonComparableKeys", + "displayName": "Sorted collection with non-comparable elements", + "enabled": true, + "description": "Reports construction of sorted collections, for example `TreeSet`, that rely on natural ordering, whose element type doesn't implement the `Comparable` interface.\n\nIt's unlikely that such a collection will work properly.\n\n\nA false positive is possible if the collection element type is a non-comparable super-type,\nbut the collection is intended to only hold comparable sub-types. Even if this is the case,\nit's better to narrow the collection element type or declare the super-type as `Comparable` because the mentioned approach is error-prone.\n\n\nThe inspection also reports cases when the collection element is a type parameter which is not declared as `extends Comparable`.\nYou can suppress the warnings on type parameters using the provided option (for example, to keep the API compatibility).\n\n\nNew in 2018.3" + }, + { + "shortName": "EqualsBetweenInconvertibleTypes", + "displayName": "'equals()' between objects of inconvertible types", + "enabled": true, + "description": "Reports calls to `equals()` where the target and argument are of incompatible types.\n\nWhile such a call might theoretically be useful, most likely it is a bug.\n\n**Example:**\n\n\n new HashSet().equals(new TreeSet());\n" + }, + { + "shortName": "ObjectEquality", + "displayName": "Object comparison using '==', instead of 'equals()'", + "enabled": false, + "description": "Reports code that uses `==` or `!=` rather than `equals()` to test for `Object` equality.\n\nComparing objects using `==` or `!=` is often a bug, because it compares objects by identity instead of\nequality.\nComparisons to `null` are not reported.\nArray, `String` and `Number` comparisons are reported by separate inspections.\n\n**Example:**\n\n if (list1 == list2) {\n return;\n }\n\nAfter the quick-fix is applied:\n\n if (Object.equals(list1, list2)) {\n return;\n }\n\n\nUse the inspection settings to configure exceptions for this inspection." + }, + { + "shortName": "IterableUsedAsVararg", + "displayName": "Iterable is used as vararg", + "enabled": true, + "description": "Reports suspicious usages of `Collection` or `Iterable` in vararg method calls.\n\nFor example, in the following method:\n\n\n boolean contains(T needle, T... haystack) {...}\n\na call like\n\n\n if(contains(\"item\", listOfStrings)) {...}\n\nlooks suspicious as the list will be wrapped into a single element array.\nSuch code can be successfully compiled and will likely run without\nexceptions, but it's probably used by mistake.\n\nNew in 2019.2" + }, + { + "shortName": "ReplaceAllDot", + "displayName": "Suspicious regex expression argument", + "enabled": true, + "description": "Reports calls to `String.replaceAll()` or `String.split()` where the first argument is a single regex meta character argument.\n\n\nThe regex meta characters are one of `.$|()[{^?*+\\`. They have a special meaning in regular expressions.\nFor example, calling `\"ab.cd\".replaceAll(\".\", \"-\")` produces `\"-----\"`, because the dot matches any character.\nMost likely the escaped variant `\"\\\\.\"` was intended instead.\n\n\nUsing `File.separator` as a regex is also reported. The `File.separator` has a platform specific value. It\nequals to `/` on Linux and Mac but equals to `\\` on Windows, which is not a valid regular expression, so\nsuch code is not portable.\n\n**Example:**\n\n\n s.replaceAll(\".\", \"-\");\n\nAfter the quick-fix is applied:\n\n\n s.replaceAll(\"\\\\.\", \"-\");\n" + }, + { + "shortName": "ComparableImplementedButEqualsNotOverridden", + "displayName": "'Comparable' implemented but 'equals()' not overridden", + "enabled": true, + "description": "Reports classes that implement `java.lang.Comparable` but do not override `equals()`.\n\n\nIf `equals()`\nis not overridden, the `equals()` implementation is not consistent with\nthe `compareTo()` implementation. If an object of such a class is added\nto a collection such as `java.util.SortedSet`, this collection will violate\nthe contract of `java.util.Set`, which is defined in terms of\n`equals()`.\n\n**Example:**\n\n\n class Length implements Comparable {\n private int cm = 0;\n\n @Override\n public int compareTo(@NotNull Length o) {\n if (cm == o.cm) return 0;\n return cm < o.cm ? -1 : 1;\n }\n }\n\nAfter the quick fix is applied:\n\n\n class Length implements Comparable {\n private int cm = 0;\n\n @Override\n public int compareTo(@NotNull Length o) {\n if (cm == o.cm) return 0;\n return cm < o.cm ? -1 : 1;\n }\n\n @Override\n public boolean equals(Object o) {\n return o instanceof Length && compareTo((Length) o) == 0;\n }\n }\n" + }, + { + "shortName": "InstantiationOfUtilityClass", + "displayName": "Instantiation of utility class", + "enabled": false, + "description": "Reports instantiation of utility classes using the `new` keyword.\n\n\nIn utility classes, all fields and methods are `static`.\nInstantiation of such classes is most likely unnecessary and indicates a mistake.\n\n**Example:**\n\n\n class MyUtils {\n public static double cube(double x) {\n return x * x * x;\n }\n }\n class Main {\n public static void main(String[] args) {\n // Instantiation of utility class\n MyUtils utils = new MyUtils();\n }\n }\n\n\nTo prevent utility classes from being instantiated,\nit's recommended to use a `private` constructor." + }, + { + "shortName": "StringConcatenationInFormatCall", + "displayName": "String concatenation as argument to 'format()' call", + "enabled": false, + "description": "Reports non-constant string concatenations used as a format string argument.\n\n\nWhile occasionally intended, this is usually a misuse of a formatting method\nand may even cause security issues if the variables used in the concatenated string\ncontain special characters like `%`.\n\n\nAlso, sometimes this could be the result\nof mistakenly concatenating a string format argument by typing a `+` when a `,` was meant.\n\n**Example:**\n\n\n static String formatGreeting(String userName) {\n return String.format(\"Hello, \" + userName);\n }\n\n\nHere, the `userName` will be interpreted as a part of format string, which may result\nin `IllegalFormatException` (for example, if `userName` is `\"%\"`) or\nin using an enormous amount of memory (for example, if `userName` is `\"%2000000000%\"`).\nThe call should be probably replaced with `String.format(\"Hello, %s\", userName);`.\n\n\nThis inspection checks calls to formatting methods on\n`java.util.Formatter`,\n`java.lang.String`,\n`java.io.PrintWriter`,\nor `java.io.PrintStream`." + }, + { + "shortName": "SuspiciousListRemoveInLoop", + "displayName": "Suspicious 'List.remove()' in loop", + "enabled": true, + "description": "Reports `list.remove(index)` calls inside an ascending counted loop.\n\n\nThis is suspicious as the list becomes\nshorter after the removal, and the next element gets skipped. A simple fix is to decrease the index variable\nafter the removal,\nbut probably removing via an iterator or using the `removeIf()` method (Java 8 and later) is a more robust alternative.\nIf you don't expect that `remove()` will be called more than once in a loop, consider adding a `break` after it.\n\n**Example:**\n\n public static void main(String[] args) {\n process(new ArrayList<>(\n Arrays.asList(\"1\", \"2\", \"|\", \"3\", \"4\")));\n }\n\n static void process(List list) {\n for (int i = 0; i < list.size(); i++) {\n if (list.get(i).equals(\"|\")) {\n list.remove(i);\n continue;\n }\n System.out.println(list.get(i));\n }\n }\n\nThe code looks like `1 2 3 4` is going to be printed, but in reality, `3` will be skipped in the output.\n\nNew in 2018.2" + }, + { + "shortName": "OptionalGetWithoutIsPresent", + "displayName": "Optional.get() is called without isPresent() check", + "enabled": true, + "description": "Reports calls to `get()` on an `Optional` without checking that it has a value.\n\nCalling `Optional.get()` on an empty `Optional` instance will throw an exception.\n\n**Example:**\n\n\n void x(List list) {\n final Optional optional =\n list.stream().filter(x -> x > 10).findFirst();\n final Integer result = optional.get(); // problem here\n }\n" + }, + { + "shortName": "RedundantOperationOnEmptyContainer", + "displayName": "Redundant operation on empty container", + "enabled": true, + "description": "Reports redundant operations on empty collections, maps or arrays.\n\n\nIterating, removing elements, sorting,\nand some other operations on empty collections have no effect and can be removed. Also, they may be a signal of a bug.\n\n**Example:**\n\n\n if (numbers.isEmpty()){\n //error due to the missed negation\n int max = numbers.stream().max(Comparator.naturalOrder()).get();\n ...\n }\n\nNew in 2019.1" + }, + { + "shortName": "WrongPackageStatement", + "displayName": "Wrong package statement", + "enabled": true, + "description": "Detects `package` statements that do not correspond to the project directory structure. Also, reports classes without `package` statements if the class is not located directly in source root directory.\n\nWhile it's not strictly mandated by Java language, it's good to keep classes\nfrom package `com.example.myapp` inside the `com/example/myapp` directory under\nthe source root. Failure to do this may confuse code readers and make some tools working incorrectly." + }, + { + "shortName": "CovariantEquals", + "displayName": "Covariant 'equals()'", + "enabled": true, + "description": "Reports `equals()` methods taking an argument type other than `java.lang.Object` if the containing class does not have other overloads of `equals()` that take `java.lang.Object` as its argument type.\n\n\nA covariant version of `equals()` does not override the\n`Object.equals(Object)` method. It may cause unexpected\nbehavior at runtime. For example, if the class is used to construct\none of the standard collection classes, which expect that the\n`Object.equals(Object)` method is overridden.\n\n**Example:**\n\n\n class Foo {\n public boolean equals(Foo foo) { // warning\n return false;\n }\n }\n class Bar {\n public boolean equals(Bar bar) { // no warning here\n return false;\n }\n @Override\n public boolean equals(Object obj) {\n return false;\n }\n }\n" + }, + { + "shortName": "EqualsWithItself", + "displayName": "'equals()' called on itself", + "enabled": true, + "description": "Reports calls to `equals()` or `compareTo()` where an object is compared for equality with itself.\n\nAccording to the method contracts, these operations will always return\n`true` for `equals()` or `0` for `compareTo()`. The inspection also checks\nthe calls to `Objects.equals()`, `Objects.deepEquals()`,\n`Arrays.equals()`, `Comparator.compare`, and the like.\n\n**Example:**\n\n\n class Foo {\n boolean foo(Object o) {\n return o.equals(o); // warning\n }\n\n boolean bar(String[] ss) {\n return Arrays.equals(ss, ss); // warning\n }\n }\n" + }, + { + "shortName": "SuspiciousNameCombination", + "displayName": "Suspicious variable/parameter name combination", + "enabled": true, + "description": "Reports assignments and function calls in which the name of the target variable or the function parameter does not match the name of the value assigned to it.\n\nExample 1:\n\n\n int x = 0;\n int y = x; // x is used as a y-coordinate\n \nExample 2:\n\n\n int x = 0, y = 0;\n // x is used as a y-coordinate and y as an x-coordinate\n Rectangle rc = new Rectangle(y, x, 20, 20);\n\nConfigure the inspection:\n\nUse the **Group of names** area to specify the names which should not be used together: an error is reported\nif the parameter name or assignment target name contains words from one group and the name of the assigned or passed\nvariable contains words from a different group.\n\nUse the **Ignore methods** area to specify the methods that should not be checked but have a potentially suspicious name.\nFor example, the `Integer.compare()` parameters are named `x` and `y` but are unrelated to coordinates." + }, + { + "shortName": "ComparatorMethodParameterNotUsed", + "displayName": "Suspicious 'Comparator.compare()' implementation", + "enabled": true, + "description": "Reports problems in `Comparator.compare()` and `Comparable.compareTo()` implementations.\n\nThe following cases are reported:\n\n* A parameter is not used. Most likely this is a typo and the other parameter is compared with itself, or the method is not implemented correctly.\n* It's evident that the method does not return `0` for the same elements. Such a comparison method violates the contract and can produce unpredictable results when equal elements are encountered. In particular, sorting may fail with an exception on some data.\n* Comparison method never returns positive or negative value. To fulfill the contract, if comparison method returns positive values, it should also return negative ones if arguments are supplied in reversed order.\n* Comparison method returns `Integer.MIN_VALUE`. While allowed by contract, it may be error-prone, as some call sites may incorrectly invert the return value of comparison method using unary minus. In this case, `Integer.MIN_VALUE` will stay negative.\n\n**Example:**\n\n\n Comparator lambda =\n (a, b) -> a.length() > b.length()\n ? 0\n : Math.random() > 0.5 ? -1 : 1;\n" + }, + { + "shortName": "PrimitiveArrayArgumentToVariableArgMethod", + "displayName": "Confusing primitive array argument to varargs method", + "enabled": true, + "description": "Reports any calls to a variable arity method where the call has a primitive array in the variable arity parameter position (for example, `System.out.printf(\"%s\", new int[]{1, 2, 3})`). Such a primitive-array argument may be confusing, as it will be wrapped as a single-element array, rather than each individual element being boxed, as might be expected.\n\n**Example:**\n\n\n String.format(\"%s\", new int[]{1, 2, 3});\n\nAfter the quick-fix is applied:\n\n\n String.format(\"%s\", (Object) new int[]{1, 2, 3});\n" + }, + { + "shortName": "IteratorNextDoesNotThrowNoSuchElementException", + "displayName": "'Iterator.next()' which can't throw 'NoSuchElementException'", + "enabled": false, + "description": "Reports implementations of `Iterator.next()` that cannot throw `java.util.NoSuchElementException`.\n\n\nSuch implementations violate the contract of `java.util.Iterator`,\nand may result in subtle bugs if the iterator is used in a non-standard way.\n\n**Example:**\n\n\n class Numbers implements Iterator {\n @Override\n public Integer next() { //warning\n if (hasNext()) {\n return generateNext();\n } else {\n return null; //throw NoSuchElementException instead\n }\n }\n\n ...\n }\n" + }, + { + "shortName": "SuspiciousTernaryOperatorInVarargsCall", + "displayName": "Suspicious ternary operator in varargs method call", + "enabled": true, + "description": "Reports vararg method calls that use a ternary operator with mixed array and non-array branches.\n\n\nWhen compiled, both branches are wrapped in arrays. As a result, the array branch is turned into\na two-dimensional array, which may indicate a problem.\n\n\nThe quick-fix wraps the non-array branch in an array to prevent the compiler from doing the conversion.\n\n**Example:**\n\n\n static void bar(boolean flag) {\n Object[] a = {1, 2};\n Object b = \"hello\";\n foo(flag ? a : b);\n }\n static void foo(Object... obj) {\n }\n\nAfter the quick-fix:\n\n\n static void bar(boolean flag) {\n Object[] a = {1, 2};\n Object b = \"hello\";\n foo(flag ? a : new Object[]{b});\n }\n static void foo(Object... obj) {\n }\n\nNew in 2020.3" + }, + { + "shortName": "ArrayObjectsEquals", + "displayName": "Use of shallow or 'Objects' methods with arrays", + "enabled": true, + "description": "Reports expressions that seem to use an inappropriate method for determining array equality or calculating their hashcode.\n\nThe following method calls are reported:\n\n* `Object.equals()` for any arrays\n* `Arrays.equals()` for multidimensional arrays\n* `Arrays.hashCode()` for multidimensional arrays" + }, + { + "shortName": "MeaninglessRecordAnnotationInspection", + "displayName": "Meaningless record annotation", + "enabled": true, + "description": "Reports annotations used on record components that have no effect.\n\nThis can happen in two cases:\n\n* The reported annotation has the METHOD target, but the corresponding accessor is explicitly defined.\n* The reported annotation has the PARAMETER target, but the canonical constructor is explicitly defined.\n\nExample:\n\n\n @Target(ElementType.METHOD)\n @interface A { }\n \n // The annotation will not appear in bytecode at all,\n // as it should be propagated to the accessor but accessor is explicitly defined \n record R(@A int x) {\n public int x() { return x; }\n }\n\nNew in 2021.1" + }, + { + "shortName": "EqualsWhichDoesntCheckParameterClass", + "displayName": "'equals()' method which does not check class of parameter", + "enabled": true, + "description": "Reports `equals()` methods that do not check the type of their parameter.\n\nFailure to check the type of the parameter\nin the `equals()` method may result in latent errors if the object is used in an untyped collection.\n\n**Example:**\n\n\n class MyClass {\n int x;\n\n @Override\n public boolean equals(Object obj) {\n // equals method should return false if obj is not MyClass\n return ((MyClass)obj).x == x;\n }\n }\n" + }, + { + "shortName": "SuspiciousIndentAfterControlStatement", + "displayName": "Suspicious indentation after control statement without braces", + "enabled": false, + "description": "Reports suspicious indentation of statements after a control statement without braces.\n\n\nSuch indentation can make it look like the statement is inside the control statement,\nwhen in fact it will be executed unconditionally after the control statement.\n\n**Example:**\n\n\n class Bar {\n void foo(int i) {\n if (i == 0)\n System.out.println(\"foo\");\n System.out.println(\"bar\"); // warning\n if (i == 1);\n System.out.println(\"great\"); // warning\n if (i == 42)\n System.out.println(\"answer\");\n System.out.println(\"question\"); // warning\n }\n }\n" + }, + { + "shortName": "SuspiciousDateFormat", + "displayName": "Suspicious date format pattern", + "enabled": true, + "description": "Reports date format patterns that are likely used by mistake.\n\nThe following patterns are reported:\n\n* Uppercase \"Y\", unless \"w\" appears nearby. It stands for \"Week year\" that is almost always the same as normal \"Year\" (lowercase \"y\" pattern), but may point to the next year at the end of December.\n* Uppercase \"M\" (month) close to \"H\", \"K\", \"h\", or \"k\" (hour). It's likely that a lowercase \"m\" (minute) was intended.\n* Lowercase \"m\" (minute) close to \"y\" (year) or \"d\" (day in month). It's likely that an uppercase \"M\" (month) was intended.\n* Uppercase \"D\" (day in year) close to \"M\", or \"L\" (month). It's likely that a lowercase \"d\" (day in month) was intended.\n* Uppercase \"S\" (milliseconds) close to \"m\" (minutes). It's likely that a lowercase \"s\" (seconds) was intended.\n\n\nExamples: \n\n`new SimpleDateFormat(\"YYYY-MM-dd\")`: likely `\"yyyy-MM-dd\"` was intended. \n\n`new SimpleDateFormat(\"yyyy-MM-DD\")`: likely `\"yyyy-MM-dd\"` was intended. \n\n`new SimpleDateFormat(\"HH:MM\")`: likely `\"HH:mm\"` was intended.\n\nNew in 2020.1" + }, + { + "shortName": "ClassNewInstance", + "displayName": "Unsafe call to 'Class.newInstance()'", + "enabled": false, + "description": "Reports calls to `java.lang.Class.newInstance()`.\n\n\nThis method propagates exceptions thrown by\nthe no-arguments constructor, including checked exceptions. Usages of this method\neffectively bypass the compile-time exception checking that would\notherwise be performed by the compiler.\n\n\nA quick-fix is suggested to replace the call with a call to the\n`java.lang.reflect.Constructor.newInstance()` method, which\navoids this problem by wrapping any exception thrown by the constructor in a\n(checked) `java.lang.reflect.InvocationTargetException`.\n\n**Example:**\n\n\n clazz.newInstance()\n\nAfter the quick-fix is applied:\n\n\n clazz.getConstructor().newInstance();\n" + }, + { + "shortName": "MagicConstant", + "displayName": "Magic Constant", + "enabled": true, + "description": "Reports expressions that can be replaced with \"magic\" constants.\n\nExample 1:\n\n\n // Bare literal \"2\" is used, warning:\n Font font = new Font(\"Arial\", 2)\n\nExample 2:\n\n\n // Predefined constant is used, good:\n Font font = new Font(\"Arial\", Font.ITALIC)\n\n\nWhen possible, the quick-fix inserts an appropriate predefined constant.\n\n\nThe behavior of this inspection is controlled by `org.intellij.lang.annotations.MagicConstant` annotation.\nSome standard Java library methods are pre-annotated, but you can use this annotation in your code as well." + }, + { + "shortName": "StaticFieldReferenceOnSubclass", + "displayName": "Static field referenced via subclass", + "enabled": false, + "description": "Reports accesses to static fields where the call is qualified by a subclass of the declaring class, rather than by the declaring class itself.\n\n\nJava allows such qualification, but such accesses may indicate a subtle confusion of inheritance and overriding.\n\n**Example:**\n\n\n class Parent {\n static int foo = 0;\n }\n\n class Child extends Parent { }\n\n void bar() {\n System.out.println(Child.foo);\n }\n\nAfter the quick-fix is applied, the result looks like this:\n\n\n class Parent {\n static int foo = 0;\n }\n\n class Child extends Parent { }\n\n void bar() {\n System.out.println(Parent.foo);\n }\n" + }, + { + "shortName": "IgnoreResultOfCall", + "displayName": "Result of method call ignored", + "enabled": true, + "description": "Reports method calls whose result is ignored.\n\nFor many methods, ignoring the result is perfectly\nlegitimate, but for some it is almost certainly an error. Examples of methods where ignoring\nthe result is likely an error include `java.io.inputStream.read()`,\nwhich returns the number of bytes actually read, and any method on\n`java.lang.String` or `java.math.BigInteger`. These methods do not produce side-effects and thus pointless\nif their result is ignored.\n\nThe calls to the following methods are inspected:\n\n* Simple getters (which do nothing except return a field)\n* Methods specified in the settings of this inspection\n* Methods annotated with `org.jetbrains.annotations.Contract(pure=true)`\n* Methods annotated with .\\*.`CheckReturnValue`\n* Methods in a class or package annotated with `javax.annotation.CheckReturnValue`\n* Optionally, all non-library methods\n\nCalls to methods annotated with Error Prone's or AssertJ's `@CanIgnoreReturnValue` annotation are not reported.\n\n\nUse the inspection settings to specify the classes to check.\nMethods are matched by name or name pattern using Java regular expression syntax.\nFor classes, use fully-qualified names. Each entry applies to both the class and all its inheritors." + }, + { + "shortName": "MismatchedCollectionQueryUpdate", + "displayName": "Mismatched query and update of collection", + "enabled": true, + "description": "Reports collections whose contents are either queried and not updated, or updated and not queried.\n\n\nSuch inconsistent queries and updates are pointless and may indicate\neither dead code or a typo.\n\n\nUse the inspection settings to specify name patterns that correspond to update/query methods.\nQuery methods that return an element are automatically detected, and only\nthose that write data to an output parameter (for example, an `OutputStream`) need to be specified.\n\n\n**Example:**\n\nSuppose you have your custom `FixedStack` class with method `store()`:\n\n\n public class FixedStack extends Collection {\n public T store(T t) {\n // implementation\n }\n }\n\nYou can add `store` to the update methods table in order to report mismatched queries like:\n\n\n void test(int i) {\n FixedStack stack = new FixedStack<>();\n stack.store(i);\n }\n" + }, + { + "shortName": "InnerClassReferencedViaSubclass", + "displayName": "Inner class referenced via subclass", + "enabled": false, + "description": "Reports accesses of inner and nested classes where the call is qualified by a subclass of the declaring class, rather than the declaring class itself.\n\n\nJava allows such qualification, but such accesses may indicate a subtle confusion of inheritance and overriding.\n\n**Example:**\n\n\n class Super {\n static class Inner {}\n }\n\n class Sub extends Super {\n void test() {\n Sub.Inner s = new Sub.Inner(); // 'Inner' class is declared in 'Super' class, but referenced via 'Sub' class\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Super {\n static class Inner {}\n }\n\n class Sub extends Super {\n void test() {\n Super.Inner s = new Super.Inner();\n }\n }\n" + }, + { + "shortName": "ScheduledThreadPoolExecutorWithZeroCoreThreads", + "displayName": "'ScheduledThreadPoolExecutor' with zero core threads", + "enabled": false, + "description": "Reports any `java.util.concurrent.ScheduledThreadPoolExecutor` instances in which `corePoolSize` is set to zero via the `setCorePoolSize` method or the object constructor.\n\n\nA `ScheduledThreadPoolExecutor` with zero core threads will run nothing.\n\n**Example:**\n\n\n void foo(int corePoolSize) {\n if (corePoolSize != 0) return;\n ThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(corePoolSize); // warning\n executor.setCorePoolSize(corePoolSize); // warning\n }\n" + }, + { + "shortName": "UnusedAssignment", + "displayName": "Unused assignment", + "enabled": true, + "description": "Reports assignment values that are not used after the assignment. If the assignment value is unused, it's better to remove the assignment to shorten the code and avoid redundant allocations.\n\nThe following cases are reported:\n\n* The variable never gets read after the assignment.\n* The variable is always overwritten with a new value before it is read.\n* The variable initializer is redundant (for one of the two reasons above).\n\nConfigure the inspection:\n\n\nUse the **Report redundant initializers** option to report redundant initializers:\n\n\n int getI() {\n int i = 0; // redundant initialization\n i = 2;\n return i;\n }\n\n\nUse the **Report ++i when may be replaced with (i + 1)** option to report the cases when `++i` expression\nmay be replaced with `i + 1`:\n\n\n int preInc(int i) {\n int res = i;\n return ++res;\n }\n\n\nUse the **Report i++ when changed value is not used afterwards** option to report the cases when the result of `i++` expression\nis not used later:\n\n\n int postInc(int i) {\n int res = i;\n return res++;\n }\n" + }, + { + "shortName": "HashCodeUsesNonFinalVariable", + "displayName": "Non-final field referenced in 'hashCode()'", + "enabled": false, + "description": "Reports implementations of `hashCode()` that access non-`final` variables.\n\n\nSuch access may result in `hashCode()`\nreturning different values at different points in the object's lifecycle, which may in turn cause problems when\nusing the standard collections classes.\n\n**Example:**\n\n\n class Drink {\n String name;\n Drink(String name) { this.name = name; }\n @Override public int hashCode() {\n return Objects.hash(name); //warning\n }\n }\n ...\n Drink coffee = new Drink(\"Coffee\");\n priceMap.put(coffee, 10.0);\n coffee.name = \"Tea\";\n double coffeePrice = priceMap.get(coffee); //not found\n\nA quick-fix is suggested to make the field final:\n\n\n class Drink {\n final String name;\n ...\n }\n" + }, + { + "shortName": "ObjectToString", + "displayName": "Call to default 'toString()'", + "enabled": true, + "description": "Reports calls to `toString()` that use the default implementation from `java.lang.Object`.\n\nThe default implementation is rarely intended but may be used by accident.\n\n\nCalls to `toString()` on objects with `java.lang.Object`,\ninterface or abstract class type are ignored by this inspection.\n\n**Example:**\n\n\n class Bar {\n void foo1(Bar bar) {\n String s = bar.toString(); // warning\n /* ... */\n }\n\n void foo2(Object obj) {\n String s = obj.toString(); // no warning here\n /* ... */\n }\n }\n" + }, + { + "shortName": "NewObjectEquality", + "displayName": "New object is compared using '=='", + "enabled": true, + "description": "Reports code that applies `==` or `!=` to a newly allocated object instead of calling `equals()`.\n\n\nThe references to newly allocated objects cannot point at existing objects,\nthus the comparison will always evaluate to `false`. The inspection may also report newly\ncreated objects returned from simple methods.\n\n**Example:**\n\n\n void test(Object obj) {\n if (new Object() == obj) {...}\n }\n\nAfter the quick-fix is applied:\n\n\n void test(Object obj) {\n if (new Object().equals(obj)) {...}\n }\n\n\nNew in 2018.3" + }, + { + "shortName": "StringEquality", + "displayName": "String comparison using '==', instead of 'equals()'", + "enabled": true, + "description": "Reports code that uses of **==** or **!=** to compare strings.\n\n\nThese operators determine referential equality instead of comparing content.\nIn most cases, strings should be compared using `equals()`,\nwhich does a character-by-character comparison when the strings are different objects.\n\n**Example:**\n\n\n void foo(String s, String t) {\n final boolean b = t == s;\n }\n\nIf `t` is known to be non-null, then it's safe to apply the \"unsafe\" quick-fix and get the result similar to the following:\n\n\n void foo(String s, String t) {\n final boolean b = t.equals(s);\n }\n" + }, + { + "shortName": "StaticCallOnSubclass", + "displayName": "Static method referenced via subclass", + "enabled": false, + "description": "Reports static method calls where the call is qualified by a subclass of the declaring class, rather than by the declaring class itself.\n\n\nJava allows such qualification for classes, but such calls\nmay indicate a subtle confusion of inheritance and overriding.\n\n**Example:**\n\n\n class Parent {\n public static void print(String str) {}\n }\n class Child extends Parent {}\n\n Child.print(\"Hello, world!\");\n\nAfter the quick-fix is applied:\n\n\n Parent.print(\"Hello, world!\");\n" + }, + { + "shortName": "NonShortCircuitBoolean", + "displayName": "Non-short-circuit boolean expression", + "enabled": false, + "description": "Reports usages of the non-short-circuit forms of boolean 'and' and 'or' (`&`, `|`, `&=` and `|=`). Although the non-short-circuit versions are occasionally useful, in most cases the short-circuit forms (`&&` and `||`) are intended and such unintentional usages may lead to subtle bugs.\n\n\nA quick-fix is suggested to use the short-circuit versions.\n\n**Example:**\n\n\n void foo(boolean x, boolean y, boolean z) {\n if (x | y) { x |= z; }\n }\n\nAfter the quick-fix is applied:\n\n\n void foo(boolean x, boolean y) {\n if (x || y) { x = x || z; }\n }\n" + }, + { + "shortName": "ArrayEquality", + "displayName": "Array comparison using '==', instead of 'Arrays.equals()'", + "enabled": true, + "description": "Reports operators `==` and `!=` used to test for array equality. In most cases, testing for the equality of array contents is intended, which can be done with the `java.util.Arrays.equals()` method.\n\n\nA quick-fix is suggested to replace `==` with `java.util.Arrays.equals()`.\n\n**Example:**\n\n\n void foo(Object[] x, Object[] y) {\n boolean comparison = x == y;\n }\n\nAfter the quick-fix is applied:\n\n\n void foo(Object[] x, Object[] y) {\n boolean comparison = Arrays.equals(x, y);\n }\n" + }, + { + "shortName": "ConstantValue", + "displayName": "Constant values", + "enabled": true, + "description": "Reports expressions and conditions that always produce the same result, like true, false, null, or zero. Such expressions could be replaced with the corresponding constant value. Very often though they signal about a bug in the code.\n\nExamples:\n\n // always true\n // root cause: || is used instead of &&\n if (x > 0 || x < 10) {}\n\n System.out.println(str.trim());\n // always false\n // root cause: variable was dereferenced before null-check\n if (str == null) {}\n\n\nThe inspection behavior may be controlled by a number of annotations, such as\n[nullability](https://www.jetbrains.com/help/idea/nullable-and-notnull-annotations.html) annotations,\n[@Contract](https://www.jetbrains.com/help/idea/contract-annotations.html) annotation,\n`@Range` annotation and so on.\n\nConfigure the inspection:\n\n* Use the **Don't report assertions with condition statically proven to be always true** option to avoid reporting assertions that were statically proven to be always true. This also includes conditions like `if (alwaysFalseCondition) throw new IllegalArgumentException();`.\n* Use the **Ignore assert statements** option to control how the inspection treats `assert` statements. By default, the option is disabled, which means that the assertions are assumed to be executed (-ea mode). If the option is enabled, the assertions will be completely ignored (-da mode).\n* Use the **Warn when constant is stored in variable** option to display warnings when variable is used, whose value is known to be a constant.\n\n\nBefore IntelliJ IDEA 2022.3, this inspection was part of \"Constant Conditions \\& Exceptions\" inspection. Now, it split into two inspections:\n\"Constant Values\" and \"Nullability and data flow problems\"." + }, + { + "shortName": "OverflowingLoopIndex", + "displayName": "Loop executes zero or billions of times", + "enabled": true, + "description": "Reports loops that cannot be completed without an index overflow or loops that don't loop at all. It usually happens because of a mistake in the update operation.\n\nExample:\n\n\n void foo(int s) {\n for (int i = s; i > 12; i++) { // i-- should be here\n System.out.println(i);\n }\n }\n\nNew in 2019.1" + }, + { + "shortName": "EmptyStatementBody", + "displayName": "Statement with empty body", + "enabled": true, + "description": "Reports `if`, `while`, `do`, `for`, and `switch` statements with empty bodies.\n\nWhile occasionally intended, such code is confusing and is often the result of a typo.\n\nThis inspection is disabled in JSP files." + }, + { + "shortName": "IteratorHasNextCallsIteratorNext", + "displayName": "'Iterator.hasNext()' which calls 'next()'", + "enabled": true, + "description": "Reports implementations of `Iterator.hasNext()` or `ListIterator.hasPrevious()` that call `Iterator.next()` or `ListIterator.previous()` on the iterator instance. Such calls are almost certainly an error, as methods like `hasNext()` should not modify the iterators state, while `next()` should.\n\n**Example:**\n\n\n class MyIterator implements Iterator {\n public boolean hasNext() {\n return next() != null;\n }\n }\n" + }, + { + "shortName": "EqualsAndHashcode", + "displayName": "'equals()' and 'hashCode()' not paired", + "enabled": true, + "description": "Reports classes that override the `equals()` method but do not override the `hashCode()` method or vice versa, which can potentially lead to problems when the class is added to a `Collection` or a `HashMap`.\n\nThe quick-fix generates the default implementation for an absent method.\n\nExample:\n\n\n class StringHolder {\n String s;\n\n @Override public int hashCode() {\n return s != null ? s.hashCode() : 0;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class StringHolder {\n String s;\n\n @Override public int hashCode() {\n return s != null ? s.hashCode() : 0;\n }\n\n @Override\n public boolean equals(Object o) {\n if (this == o) return true;\n if (!(o instanceof StringHolder)) return false;\n\n StringHolder holder = (StringHolder)o;\n\n if (s != null ? !s.equals(holder.s) : holder.s != null) return false;\n\n return true;\n }\n }\n" + }, + { + "shortName": "CastConflictsWithInstanceof", + "displayName": "Cast conflicts with 'instanceof'", + "enabled": true, + "description": "Reports type cast expressions that are preceded by an `instanceof` check for a different type.\n\n\nAlthough this might be intended, such a construct is most likely an error, and will\nresult in a `java.lang.ClassCastException` at runtime.\n\n**Example:**\n\n\n class Main {\n int whenCharSequenceCastToNumber(Object o){\n if (o instanceof CharSequence) {\n return ((Number) o).intValue();\n }\n return 0;\n }\n\n int earlyReturnWhenNotCharSequence(Object o){\n if (!(o instanceof CharSequence)) return 0;\n return ((Number)o).intValue();\n }\n }\n" + }, + { + "shortName": "Contract", + "displayName": "Contract issues", + "enabled": true, + "description": "Reports issues in method `@Contract` annotations. The types of issues that can be reported are:\n\n* Errors in contract syntax\n* Contracts that do not conform to the method signature (wrong parameter count)\n* Method implementations that contradict the contract (e.g. return `true` when the contract says `false`)\n\nExample:\n\n\n // method has no parameters, but contract expects 1\n @Contract(\"_ -> fail\")\n void x() {\n throw new AssertionError();\n }\n" + }, + { + "shortName": "SuspiciousArrayMethodCall", + "displayName": "Suspicious 'Arrays' method call", + "enabled": true, + "description": "Reports calls to non-generic-array manipulation methods like `Arrays.fill()` with mismatched argument types. Such calls don't do anything useful and are likely to be mistakes.\n\n**Example:**\n\n\n int foo(String[] strings) {\n return Arrays.binarySearch(strings, 1);\n }\n\nNew in 2017.2" + }, + { + "shortName": "OverwrittenKey", + "displayName": "Overwritten Map, Set, or array element", + "enabled": true, + "description": "Reports code that overwrites a `Map` key, a `Set` element, or an array element in a sequence of `add`/`put` calls or using a Java 9 factory method like `Set.of` (which will result in runtime exception).\n\nThis usually occurs due to a copy-paste error.\n\n**Example:**\n\n\n map.put(\"A\", 1);\n map.put(\"B\", 2);\n map.put(\"C\", 3);\n map.put(\"D\", 4);\n map.put(\"A\", 5); // duplicating key \"A\", overwrites the previously written entry\n\nNew in 2017.3" + }, + { + "shortName": "SuspiciousIntegerDivAssignment", + "displayName": "Suspicious integer division assignment", + "enabled": true, + "description": "Reports assignments whose right side is a division that shouldn't be truncated to integer.\n\nWhile occasionally intended, this construction is often buggy.\n\n**Example:**\n\n\n int x = 18;\n x *= 3/2; // doesn't change x because of the integer division result\n\n\nThis code should be replaced with:\n\n\n int x = 18;\n x *= 3.0/2;\n\n\nIn the inspection options, you can disable warnings for suspicious but possibly correct divisions,\nfor example, when the dividend can't be calculated statically.\n\n\n void calc(int d) {\n int x = 18;\n x *= d/2;\n }\n\n\nNew in 2019.2" + }, + { + "shortName": "CastToIncompatibleInterface", + "displayName": "Casting to incompatible interface", + "enabled": true, + "description": "Reports type cast expressions where the cast type is an interface and the cast expression has a class type that neither implements the cast interface, nor has any visible subclasses that implement the cast interface.\n\n\nAlthough this might be intended, such a construct is most likely an error, and will\nresult in a `java.lang.ClassCastException` at runtime.\n\n**Example:**\n\n\n interface A {}\n interface Z {}\n static class C {}\n\n void x(C c) {\n if (c instanceof Z) {\n A a = ((A)c); // cast to incompatible interface 'A'\n }\n }\n" + }, + { + "shortName": "InstanceofIncompatibleInterface", + "displayName": "'instanceof' with incompatible interface", + "enabled": true, + "description": "Reports `instanceof` expressions where the compared type is an interface, and the compared expression has a class type that neither implements the compared interface, nor has any visible subclasses which implement the compared interface.\n\n\nAlthough that might be intended, normally such a construct is most likely an error, where\nthe resulting `instanceof` expression always evaluates to `false`.\n\n**Example:**\n\n\n interface I1 {}\n\n interface I2 {}\n\n interface I3 extends I1 {}\n\n static class Sub1 implements I1 {}\n\n static class Sub2 extends Sub1 implements I2 {\n void test(Sub1 sub1) {\n if (sub1 instanceof I3) { // here 'I3' is incompatible interface\n }\n }\n }\n" + }, + { + "shortName": "InfiniteRecursion", + "displayName": "Infinite recursion", + "enabled": true, + "description": "Reports methods that call themselves infinitely unless an exception is thrown.\n\n\nMethods reported by this inspection cannot return normally.\nWhile such behavior may be intended, in many cases this is just an oversight.\n\n**Example:**\n\n int baz() {\n return baz();\n }\n" + }, + { + "shortName": "NullArgumentToVariableArgMethod", + "displayName": "Confusing argument to varargs method", + "enabled": true, + "description": "Reports calls to variable arity methods that have a single argument in the vararg parameter position, which is either a `null` or an array of a subtype of the vararg parameter. Such an argument may be confusing as it is unclear if a varargs or non-varargs call is desired.\n\n**Example:**\n\n\n String[] ss = new String[]{\"foo\", \"bar\"};\n System.out.printf(\"%s\", ss);\n\nIn this example only the first element of the array will be printed, not the entire array." + }, + { + "shortName": "VariableNotUsedInsideIf", + "displayName": "Reference checked for 'null' is not used inside 'if'", + "enabled": false, + "description": "Reports references to variables that are checked for nullability in the condition of an `if` statement or conditional expression but not used inside that `if` statement.\n\n\nUsually this either means that\nthe check is unnecessary or that the variable is not referenced inside the\n`if` statement by mistake.\n\n**Example:**\n\n\n void test(Integer i) {\n if (i != null) { // here 'i' is not used inside 'if' statement\n System.out.println();\n }\n }\n" + }, + { + "shortName": "SuspiciousMethodCalls", + "displayName": "Suspicious collection method call", + "enabled": true, + "description": "Reports method calls on parameterized collections, where the actual argument type does not correspond to the collection's elements type.\n\n**Example:**\n\n\n List list = getListOfElements();\n list.remove(\"\"); // remove is highlighted\n\n\nIn the inspection settings, you can disable warnings for potentially correct code like the following:\n\n\n public boolean accept(Map map, Object key) {\n return map.containsKey(key);\n }\n" + }, + { + "shortName": "IncompleteDestructuring", + "displayName": "Incomplete destructuring declaration", + "enabled": false, + "description": "Reports incomplete destructuring declaration.\n\n**Example:**\n\n\n data class Person(val name: String, val age: Int)\n val person = Person(\"\", 0)\n val (name) = person\n\nThe quick fix completes destructuring declaration with new variables:\n\n\n data class Person(val name: String, val age: Int)\n val person = Person(\"\", 0)\n val (name, age) = person\n" + }, + { + "shortName": "CanSealedSubClassBeObject", + "displayName": "Sealed subclass without state and overridden equals", + "enabled": true, + "description": "Reports direct inheritors of `sealed` classes that have no state and overridden `equals()` method.\n\nIt's highly recommended to override `equals()` to provide comparison stability, or convert the `class` to an `object` to reach the same effect.\n\n**Example:**\n\n\n sealed class Receiver {\n class Everyone : Receiver()\n class User(val id: Int) : Receiver()\n }\n\nA quick-fix converts a `class` into an `object`:\n\n\n sealed class Receiver {\n object Everyone : Receiver()\n class User(val id: Int) : Receiver()\n }\n" + }, + { + "shortName": "UselessCallOnCollection", + "displayName": "Useless call on collection type", + "enabled": true, + "description": "Reports `filter...` calls from the standard library on already filtered collections.\n\nSeveral functions from the standard library such as `filterNotNull()` or `filterIsInstance`\nhave sense only when they are called on receivers that have types distinct from the resulting one. Otherwise,\nsuch calls can be omitted as the result will be the same.\n\n**Remove redundant call** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n fun test(list: List) {\n val x = list.filterNotNull() // quick-fix simplifies to 'list'\n val y = list.filterIsInstance() // quick-fix simplifies to 'list'\n }\n" + }, + { + "shortName": "ConvertObjectToDataObject", + "displayName": "Convert 'object' to 'data object'", + "enabled": false, + "description": "Reports `object` that can be converted to `data object`\n\n`data object` auto-generates `toString`, `equals`, `hashCode` and `readResolve` if\nthe `object` is annotated with `java.io.Serializable`\n\nThere are mainly two cases when you should consider converting `object` to `data object`. The first one is when\ncustom `toString` returns name of the class. The second one is when the `object` implements\n`java.io.Serializable`\n\n**Example:**\n\n\n object Foo {\n override fun toString(): String = \"Foo\"\n }\n\nAfter the quick-fix is applied:\n\n\n data object Foo\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.8 or higher" + }, + { + "shortName": "KotlinCovariantEquals", + "displayName": "Covariant 'equals()'", + "enabled": true, + "description": "Reports `equals()` that takes an argument type other than `Any?` if the class does not have another `equals()` that takes `Any?` as its argument type.\n\n**Example:**\n\n\n class Foo {\n fun equals(other: Foo?): Boolean {\n return true\n }\n }\n\nTo fix the problem create `equals()` method that takes an argument of type `Any?`." + }, + { + "shortName": "WrapUnaryOperator", + "displayName": "Ambiguous unary operator use with number constant", + "enabled": true, + "description": "Reports an unary operator followed by a dot qualifier such as `-1.inc()`.\n\nCode like `-1.inc()` can be misleading because `-` has a lower precedence than `.inc()`.\nAs a result, `-1.inc()` evaluates to `-2` and not `0` as it might be expected.\n\n**Wrap unary operator and value with ()** quick-fix can be used to amend the code automatically." + }, + { + "shortName": "ConflictingExtensionProperty", + "displayName": "Extension property conflicting with synthetic one", + "enabled": true, + "description": "Reports extension properties that conflict with synthetic ones that have been automatically produced from Java `get` or `set` methods.\n\nSuch properties should be either removed or renamed to avoid breaking code by future changes in the compiler.\n\nA quick-fix deletes an extention property.\n\n**Example:**\n\n\n val File.name: String\n get() = getName()\n\nA quick-fix adds the `@Deprecated` annotation:\n\n\n @Deprecated(\"Is replaced with automatic synthetic extension\", ReplaceWith(\"name\"), level = DeprecationLevel.HIDDEN)\n val File.name: String\n get() = getName()\n" + }, + { + "shortName": "SuspiciousVarProperty", + "displayName": "Suspicious 'var' property: its setter does not influence its getter result", + "enabled": true, + "description": "Reports `var` properties with default setter and getter that do not reference backing field.\n\n\nSuch properties do not affect calling its setter; therefore, it will be clearer to change such property to `val` and delete the initializer.\n\n**Change to val and delete initializer** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n // This property always returns '1' and it doesn't important that the property is a 'var'\n var foo: Int = 0\n get() = 1\n" + }, + { + "shortName": "ReplaceArrayEqualityOpWithArraysEquals", + "displayName": "Arrays comparison via '==' and '!='", + "enabled": true, + "description": "Reports usages of `==` or `!=` operator for arrays that should be replaced with `contentEquals()`.\n\n\nThe `==` and `!=`operators compare array references instead of their content.\n\n**Examples:**\n\n fun test() {\n val a = arrayOf(1, 2, 3)\n val b = arrayOf(1, 2, 3)\n println(a == b) // references comparison\n }\n\nAfter the quick-fix is applied:\n\n fun test() {\n val a = arrayOf(1, 2, 3)\n val b = arrayOf(1, 2, 3)\n println(a.contentEquals(b))\n }\n" + }, + { + "shortName": "UnusedUnaryOperator", + "displayName": "Unused unary operator", + "enabled": true, + "description": "Reports unary operators for number types on unused expressions.\n\nUnary operators break previous expression if they are used without braces.\nAs a result, mathematical expressions spanning multi lines can be misleading.\n\nExample:\n\n\n fun main() {\n val result = 1 + 2 * 3\n + 3 // <== note that '+ 3' doesn't belong to the 'result' variable, it is unused\n println(\"Result = $result\") // The result is '7' and not '10' as it might be expected\n }\n" + }, + { + "shortName": "LateinitVarOverridesLateinitVar", + "displayName": "'lateinit var' property overrides 'lateinit var' property", + "enabled": true, + "description": "Reports `lateinit var` properties that override other `lateinit var` properties.\n\nA subclass instance will have two fields for a single property, and the one from the superclass will remain effectively unused.\n\n**Example:**\n\n\n open class BaseClass {\n open lateinit var name: String\n }\n\n class RealClass : BaseClass() {\n override lateinit var name: String\n }\n" + }, + { + "shortName": "KotlinEqualsBetweenInconvertibleTypes", + "displayName": "'equals()' between objects of inconvertible types", + "enabled": true, + "description": "Reports calls to `equals()` where the receiver and the argument are of incompatible primitive, enum, or string types.\n\nWhile such a call might theoretically be useful, most likely it represents a bug.\n\n**Example:**\n\n 5.equals(\"\");\n" + }, + { + "shortName": "DataClassPrivateConstructor", + "displayName": "Private data class constructor is exposed via the 'copy' method", + "enabled": true, + "description": "Reports the `private` primary constructor in data classes.\n\n\n`data` classes have a `copy()` factory method that can be used similarly to a constructor.\nA constructor should not be marked as `private` to provide enough safety.\n\n**Example:**\n\n\n data class User private constructor(val name: String)\n\nA quick-fix changes the constructor visibility modifier to `public`:\n\n\n data class User(val name: String)\n" + }, + { + "shortName": "SetterBackingFieldAssignment", + "displayName": "Existing backing field without assignment", + "enabled": true, + "description": "Reports property setters that don't update the backing field.\n\nThe quick-fix adds an assignment to the backing field.\n\n**Example:**\n\n\n class Test {\n var foo: Int = 1\n set(value) {\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Test {\n var foo: Int = 1\n set(value) {\n field = value\n }\n }\n" + }, + { + "shortName": "DelegationToVarProperty", + "displayName": "Delegating to 'var' property", + "enabled": true, + "description": "Reports interface delegation to a `var` property.\n\nOnly initial value of a property is used for delegation, any later assignments do not affect it.\n\n**Example:**\n\n\n class Example(var text: CharSequence): CharSequence by text\n\nA quick-fix replaces a property with immutable one:\n\n\n class Example(val text: CharSequence): CharSequence by text\n\nAlternative way, if you rely on mutability for some reason:\n\n\n class Example(text: CharSequence): CharSequence by text {\n var text = text\n }\n" + }, + { + "shortName": "ConvertNaNEquality", + "displayName": "Convert equality check with 'NaN' to 'isNaN' call", + "enabled": true, + "description": "Reports an equality check with `Float.NaN` or `Double.NaN` that should be replaced with an `isNaN()` check.\n\n\nAccording to IEEE 754, equality check against NaN always returns `false`, even for `NaN == NaN`.\nTherefore, such a check is likely to be a mistake.\n\nA quick-fix replaces comparison with `isNaN()` check that uses a different comparison technique and handles `NaN` values correctly.\n\n**Example:**\n\n\n fun check(value: Double): Boolean {\n return Double.NaN == value\n }\n\nAfter the fix is applied:\n\n\n fun check(value: Double): Boolean {\n return value.isNaN()\n }\n" + }, + { + "shortName": "KotlinCatchMayIgnoreException", + "displayName": "'catch' block may ignore exception", + "enabled": false, + "description": "Reports `catch` blocks that are empty or may ignore an exception.\n\nWhile occasionally intended, empty `catch` blocks may complicate debugging.\nAlso, ignoring a `catch` parameter might be wrong.\n\n\nThe inspection won't report any `catch` parameters named `ignore`, `ignored`, or `_`.\n\n\nYou can use a quick-fix to change the exception name to `_`.\n\n**Example:**\n\n\n try {\n throwingMethod()\n } catch (ex: IOException) {\n\n }\n\nAfter the quick-fix is applied:\n\n\n try {\n throwingMethod()\n } catch (_: IOException) {\n\n }\n\nUse the **Do not warn when 'catch' block contains a comment** option to ignore `catch` blocks with comments." + }, + { + "shortName": "SuspendFunctionOnCoroutineScope", + "displayName": "Ambiguous coroutineContext due to CoroutineScope receiver of suspend function", + "enabled": true, + "description": "Reports calls and accesses of `CoroutineScope` extensions or members inside suspend functions with `CoroutineScope` receiver.\n\nWhen a function is `suspend` and has `CoroutineScope` receiver,\nit has ambiguous access to `CoroutineContext` via `kotlin.coroutines.coroutineContext` and via `CoroutineScope.coroutineContext`,\nand two these contexts are different in general.\n\n\nTo improve this situation, one can wrap suspicious call inside `coroutineScope { ... }` or\nget rid of `CoroutineScope` function receiver." + }, + { + "shortName": "ImplicitNullableNothingType", + "displayName": "Implicit 'Nothing?' type", + "enabled": true, + "description": "Reports variables and functions with the implicit **Nothing?** type.\n\n**Example:**\n\n\n fun foo() = null\n\nThe quick fix specifies the return type explicitly:\n\n\n fun foo(): Nothing? = null\n" + }, + { + "shortName": "KDocUnresolvedReference", + "displayName": "Unresolved reference in KDoc", + "enabled": false, + "description": "Reports unresolved references in KDoc comments.\n\n**Example:**\n\n\n /**\n * [unresolvedLink]\n */\n fun foo() {}\n\nTo fix the problem make the link valid." + }, + { + "shortName": "KotlinConstantConditions", + "displayName": "Constant conditions", + "enabled": false, + "description": "Reports non-trivial conditions and values that are statically known to be always true, false, null or zero. While sometimes intended, often this is a sign of logical error in the program. Additionally, reports never reachable `when` branches and some expressions that are statically known to fail always.\n\nExamples:\n\n\n fun process(x: Int?) {\n val isNull = x == null\n if (!isNull) {\n if (x != null) {} // condition is always true\n require(x!! < 0 && x > 10) // condition is always false\n } else {\n println(x!!) // !! operator will always fail\n }\n }\n fun process(v: Any) {\n when(v) {\n is CharSequence -> println(v as Int) // cast will always fail\n is String -> println(v) // branch is unreachable\n }\n }\n\nNew in 2021.3" + }, + { + "shortName": "ForEachParameterNotUsed", + "displayName": "Iterated elements are not used in forEach", + "enabled": true, + "description": "Reports `forEach` loops that do not use iterable values.\n\n**Example:**\n\n\n listOf(1, 2, 3).forEach { }\n\nThe quick fix introduces anonymous parameter in the `forEach` section:\n\n\n listOf(1, 2, 3).forEach { _ -> }\n" + }, + { + "shortName": "LeakingThis", + "displayName": "Leaking 'this' in constructor", + "enabled": true, + "description": "Reports unsafe operations with `this` during object construction including:\n\n* Accessing a non-final property during class initialization: from a constructor or property initialization\n* Calling a non-final function during class initialization\n* Using `this` as a function argument in a constructor of a non-final class\n\n\nIf other classes inherit from the given class,\nthey may not be fully initialized at the moment when an unsafe operation is carried out.\n\n**Example:**\n\n\n abstract class Base {\n val code = calculate()\n abstract fun calculate(): Int\n }\n\n class Derived(private val x: Int) : Base() {\n override fun calculate() = x\n }\n\n fun testIt() {\n println(Derived(42).code) // Expected: 42, actual: 0\n }\n" + }, + { + "shortName": "KotlinThrowableNotThrown", + "displayName": "Throwable not thrown", + "enabled": true, + "description": "Reports instantiations of `Throwable` or its subclasses, when the created `Throwable` is never actually thrown.\n\nThe reported code indicates mistakes that are hard to catch in tests.\n\n\nAlso, this inspection reports method calls that return instances of `Throwable` or its subclasses,\nwhen the resulting `Throwable` instance is not thrown.\n\n**Example:**\n\n\n fun check(condition: Boolean) {\n if (!condition) /* throw is missing here */ IllegalArgumentException(\"condition is not met\");\n }\n\n fun createError() = RuntimeException()\n\n fun foo() {\n /* throw is missing here */ createError()\n }\n" + }, + { + "shortName": "SelfAssignment", + "displayName": "Redundant assignment", + "enabled": true, + "description": "Reports assignments of a variable to itself.\n\nThe quick-fix removes the redundant assignment.\n\n**Example:**\n\n\n fun test() {\n var bar = 1\n bar = bar\n }\n\nAfter the quick-fix is applied:\n\n\n fun test() {\n var bar = 1\n }\n" + }, + { + "shortName": "RecursiveEqualsCall", + "displayName": "Recursive equals call", + "enabled": true, + "description": "Reports recursive `equals`(`==`) calls.\n\n\nIn Kotlin, `==` compares object values by calling `equals` method under the hood.\n`===`, on the other hand, compares objects by reference.\n\n\n`===` is commonly used in `equals` method implementation.\nBut `===` may be mistakenly mixed up with `==` leading to infinite recursion.\n\n**Example:**\n\n\n class X {\n override fun equals(other: Any?): Boolean {\n if (this == other) return true\n return false\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class X {\n override fun equals(other: Any?): Boolean {\n if (this === other) return true\n return false\n }\n }\n" + }, + { + "shortName": "UnsafeCastFromDynamic", + "displayName": "Implicit (unsafe) cast from dynamic type", + "enabled": false, + "description": "Reports expressions with a dynamic type in the specified inspection scope that are implicitly cast to another type." + }, + { + "shortName": "ControlFlowWithEmptyBody", + "displayName": "Control flow with empty body", + "enabled": true, + "description": "Reports `if`, `while`, `do` or `for` statements with empty bodies.\n\nWhile occasionally intended, this construction is confusing and often the result of a typo.\n\nA quick-fix removes a statement.\n\n**Example:**\n\n\n if (a > b) {}\n" + }, + { + "shortName": "ArrayInDataClass", + "displayName": "Array property in data class", + "enabled": true, + "description": "Reports properties with an `Array` type in a `data` class without overridden `equals()` or `hashCode()`.\n\n\nArray parameters are compared by reference equality, which is likely an unexpected behavior.\nIt is strongly recommended to override `equals()` and `hashCode()` in such cases.\n\n**Example:**\n\n\n data class Text(val lines: Array)\n\nA quick-fix generates missing `equals()` and `hashCode()` implementations:\n\n\n data class Text(val lines: Array) {\n override fun equals(other: Any?): Boolean {\n if (this === other) return true\n if (javaClass != other?.javaClass) return false\n\n other as Text\n\n if (!lines.contentEquals(other.lines)) return false\n\n return true\n }\n\n override fun hashCode(): Int {\n return lines.contentHashCode()\n }\n }\n" + }, + { + "shortName": "SuspiciousCollectionReassignment", + "displayName": "Augmented assignment creates a new collection under the hood", + "enabled": true, + "description": "Reports augmented assignment (`+=`) expressions on a read-only `Collection`.\n\nAugmented assignment (`+=`) expression on a read-only `Collection` temporarily allocates a new collection,\nwhich may hurt performance.\n\n**Change type to mutable** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n fun test() {\n var list = listOf(0)\n list += 42 // A new list is allocated here, equivalent to list = list + 42\n }\n\nAfter the quick-fix is applied:\n\n\n fun test() {\n val list = mutableListOf(0)\n list += 42\n }\n" + }, + { + "shortName": "EmptyRange", + "displayName": "Range with start greater than endInclusive is empty", + "enabled": true, + "description": "Reports ranges that are empty because the `start` value is greater than the `endInclusive` value.\n\n**Example:**\n\n\n val range = 2..1\n\nThe quick-fix changes the `..` operator to `downTo`:\n\n\n val range = 2 downTo 1\n" + }, + { + "shortName": "RecursivePropertyAccessor", + "displayName": "Recursive property accessor", + "enabled": true, + "description": "Reports recursive property accessor calls which can end up with a `StackOverflowError`.\nSuch calls are usually confused with backing field access.\n\n**Example:**\n\n\n var counter: Int = 0\n set(value) {\n counter = if (value < 0) 0 else value\n }\n\nAfter the quick-fix is applied:\n\n\n var counter: Int = 0\n set(value) {\n field = if (value < 0) 0 else value\n }\n" + }, + { + "shortName": "DestructuringWrongName", + "displayName": "Variable in destructuring declaration uses name of a wrong data class property", + "enabled": true, + "description": "Reports entries of destructuring declarations that match the name of a different property of the destructured data class.\n\n**Example:**\n\n\n data class Foo(val a: String, val b: Int, val c: String)\n\n fun bar(f: Foo) {\n val (a, c) = f\n }\n\nThe quick-fix changes variable's name to match the name of the corresponding class field:\n\n\n data class Foo(val a: String, val b: Int, val c: String)\n\n fun bar(f: Foo) {\n val (a, b) = f\n }\n" + }, + { + "shortName": "SuspiciousEqualsCombination", + "displayName": "Suspicious combination of == and ===", + "enabled": true, + "description": "Reports `==` and `===` comparisons that are both used on the same variable within a single expression.\n\nDue to similarities `==` and `===` could be mixed without notice, and\nit takes a close look to check that `==` used instead of `===`\n\nExample:\n\n\n if (type === FIELD || type == METHOD || type == ANNOTATION_METHOD || // Note that \"==\" is used incorrectly\n type === LAMBDA_EXPRESSION) return\n" + }, + { + "shortName": "UnusedDataClassCopyResult", + "displayName": "Unused result of data class copy", + "enabled": true, + "description": "Reports calls to data class `copy` function without using its result." + }, + { + "shortName": "DeferredResultUnused", + "displayName": "'@Deferred' result is unused", + "enabled": true, + "description": "Reports function calls with the `Deferred` result type if the return value is not used.\n\nIf the `Deferred` return value is not used, the call site would not wait to complete this function.\n\n**Example:**\n\n\n fun calcEverythingAsync() = CompletableDeferred(42)\n\n fun usage() {\n calcEverythingAsync()\n }\n\nA quick-fix provides a variable with the `Deferred` initializer:\n\n\n fun calcEverythingAsync() = CompletableDeferred(42)\n\n fun usage() {\n val answer = calcEverythingAsync()\n }\n" + }, + { + "shortName": "SelfReferenceConstructorParameter", + "displayName": "Constructor can never be complete", + "enabled": true, + "description": "Reports constructors with a non-null self-reference parameter.\n\nSuch constructors never instantiate a class.\n\nThe quick-fix converts the parameter type to nullable.\n\n**Example:**\n\n\n class SelfRef(val ref: SelfRef)\n\nAfter the quick-fix is applied:\n\n\n class SelfRef(val ref: SelfRef?)\n" + }, + { + "shortName": "MainFunctionReturnUnit", + "displayName": "Main function should return 'Unit'", + "enabled": true, + "description": "Reports when a main function does not have a return type of `Unit`.\n\n**Example:**\n`fun main() = \"Hello world!\"`" + }, + { + "shortName": "SuspiciousCallableReferenceInLambda", + "displayName": "Suspicious callable reference used as lambda result", + "enabled": true, + "description": "Reports lambda expressions with one callable reference.\n\nIt is a common error to replace a lambda with a callable reference without changing curly braces to parentheses.\n\n**Example:**\n\n listOf(1,2,3).map { it::toString }\n\nAfter the quick-fix is applied:\n\n listOf(1,2,3).map(Int::toString)\n" + }, + { + "shortName": "UnusedEquals", + "displayName": "Unused equals expression", + "enabled": true, + "description": "Reports unused `equals`(`==`) expressions." + }, + { + "shortName": "UselessCallOnNotNull", + "displayName": "Useless call on not-null type", + "enabled": true, + "description": "Reports calls on not-null receiver that make sense only for nullable receiver.\n\nSeveral functions from the standard library such as `orEmpty()` or `isNullOrEmpty`\nhave sense only when they are called on receivers of nullable types. Otherwise, they can be omitted or simplified as the result will be the same.\n\n**Remove redundant call** and **Change call to ...** quick-fixes can be used to amend the code automatically.\n\nExamples:\n\n\n fun test(s: String) {\n val x = s.orEmpty() // quick-fix simplifies to 's'\n val y = s.isNullOrEmpty() // quick-fix simplifies to 's.isEmpty()'\n }\n" + }, + { + "shortName": "UnusedLambdaExpressionBody", + "displayName": "Unused return value of a function with lambda expression body", + "enabled": true, + "description": "Reports calls with an unused return value when the called function returns a lambda from an expression body.\n\n\nIf there is `=` between function header and body block,\ncode from the function will not be evaluated which can lead to incorrect behavior.\n\n**Remove = token from function declaration** can be used to amend the code automatically.\n\nExample:\n\n\n fun printHello() = { println(\"Hello\") }\n\n fun main() {\n printHello() // This function doesn't print anything\n }\n\nAfter the quick-fix is applied:\n\n\n fun printHello() { println(\"Hello\") }\n\n fun main() {\n printHello()\n }\n" + }, + { + "shortName": "EqualsOrHashCode", + "displayName": "'equals()' and 'hashCode()' not paired", + "enabled": true, + "description": "Reports classes that override `equals()` but do not override `hashCode()`, or vice versa. It also reports object declarations that override either `equals()` or `hashCode()`.\n\nThis can lead to undesired behavior when a class is added to a `Collection`\n\n**Example:**\n\n\n class C1 {\n override fun equals(other: Any?) = true\n }\n\n class C2 {\n override fun hashCode() = 0\n }\n\n object O1 {\n override fun equals(other: Any?) = true\n }\n\n object O2 {\n override fun hashCode() = 0\n }\n\nThe quick-fix overrides `equals()` or `hashCode()` for classes and deletes these methods for objects:\n\n\n class C1 {\n override fun equals(other: Any?) = true\n override fun hashCode(): Int {\n return javaClass.hashCode()\n }\n }\n\n class C2 {\n override fun hashCode() = 0\n override fun equals(other: Any?): Boolean {\n if (this === other) return true\n if (javaClass != other?.javaClass) return false\n return true\n }\n }\n\n object O1 {\n }\n\n object O2 {\n }\n" + }, + { + "shortName": "InconsistentTextBlockIndent", + "displayName": "Inconsistent whitespace indentation in text block", + "enabled": false, + "description": "Reports text blocks that are indented using both spaces and tabs. Such cases produce unexpected results since spaces and tabs are treated equally by the text block processing.\n\nIn the following example, spaces and tabs are visualized as `·` and `␉` respectively,\nand a tab is equal to 4 spaces in the editor.\n\n**Example:**\n\n\n String colors = \"\"\"\n ········red\n ␉ ␉ green\n ········blue\"\"\";\n\nAfter printing such a string, the result will be:\n\n\n ······red\n green\n ······blue\n\nAfter the compiler removes an equal amount of spaces or tabs from the beginning of each line,\nsome lines remain with leading spaces.\n\nThis inspection only reports if the configured language level is 15 or higher.\n\nNew in 2021.1" + }, + { + "shortName": "ForeignDelegate", + "displayName": "Possibly misplaced call to Gradle method", + "enabled": false, + "description": "Detects possibly misplaced calls to Gradle methods.\nGradle buildscripts comprise a lot of nested closures, making the code structure similar to a markup language. Due to the behavior of Groovy, the methods that you can write in the outer closures are also available in the inner ones. Such methods may have no meaning when written outside their scope. \nSometimes it may be hard to detect this situation. This inspection aims to detect such methods.\n\n**Example:**\n\n\n repositories {\n // the delegate of 'repositories' has method 'exclusiveContent', which can be written here\n maven {\n // the delegate of 'maven' has method 'content', which can be written here\n // but 'exclusiveContent' is also available\n exclusiveContent {} // reports 'exclusiveContent'\n }\n }\n" + }, + { + "shortName": "BintrayPublishingPlugin", + "displayName": "Bintray publishing plugin may stop working on May 1st, 2021", + "enabled": false, + "description": "Detects usages of Gradle plugin `com.jfrog.bintray`.\nThe plugin is used for publishing build results to Bintray.\nPublishing to\n[Bintray](https://www.jfrog.com/confluence/display/BT/Welcome+to+JFrog+Bintray) service is disabled." + }, + { + "shortName": "DependencyNotationArgument", + "displayName": "Unrecognized dependency notation", + "enabled": false, + "description": "Detects incorrect dependency notations.\nThe following types/formats are supported by Gradle:\n\n* Instances of `Dependency`;\n* `String` or `CharSequence` values, for example `'org.gradle:gradle-core:1.0'`;\n* Maps, for example `[group: 'org.gradle', name: 'gradle-core', version: '1.0']`;\n* FileCollections, for example `files('some.jar', 'someOther.jar')`;\n* Projects, for example `project(':some:project:path')`;\n* `ClassPathNotation`, for example `gradleApi()`;\n* Lists of dependency notations, for example `['org.gradle:gradle-core:1.0']`;\n* (Gradle 7.0+) [Version catalog accessors](https://docs.gradle.org/current/userguide/platforms.html), for example `libs.groovy.core`.\n\n[See Gradle documentation](https://docs.gradle.org/current/userguide/declaring_dependencies.html#sec:dependency-types)\n\n**Example:**\n\n\n dependencies {\n implementation(1) // reports '1'\n }\n" + }, + { + "shortName": "MultipleRepositoryUrls", + "displayName": "Multiple repository urls", + "enabled": false, + "description": "Reports the usage of multiple URLs per repository (maven or ivy) block. The problem is that only one URL can be picked up for the repository, the other URLs will be ignored." + }, + { + "shortName": "JCenterRepository", + "displayName": "Builds will no longer be able to resolve artifacts from JCenter after February 1st, 2022", + "enabled": false, + "description": "Detects usages of the JCenter repository to resolve dependencies. Builds will no longer be able to resolve artifacts from JCenter after February 1st, 2022." + }, + { + "shortName": "GroovyInArgumentCheck", + "displayName": "Incompatible 'in' argument types", + "enabled": false, + "description": "Reports usages of membership operator `in` with items and containers of incompatible types.\n\n**Example:**\n\n\n def list = [1, 2]\n if (\"foo\" in list) {} // list of Integers can't contain String\n\n" + }, + { + "shortName": "GroovyAccessibility", + "displayName": "Inaccessible element", + "enabled": false, + "description": "Reports references which exceed access rights.\n\nAccess to private members breaks encapsulation." + }, + { + "shortName": "GroovyNonShortCircuitBoolean", + "displayName": "Non short-circuit boolean", + "enabled": false, + "description": "Reports the non-short-circuit forms of boolean operators 'and' and 'or' ( `&` and `|` ).\n\n\nThe non-short-circuit versions are occasionally useful, but\ntheir presence is often due to typos of the short-circuit forms ( `&&`\nand `||` ), and may lead to subtle bugs.\n\n**Example:**\n\n\n if (a & b) {}\n\nAfter the quick-fix is applied:\n\n\n if (a && b) {}\n" + }, + { + "shortName": "GroovyDivideByZero", + "displayName": "Division by zero", + "enabled": false, + "description": "Reports divisions by zero or remainders by zero.\n\n**Example:**\n\n\n def a = 42\n a / 0 // warning\n a % 0.0 // warning\n" + }, + { + "shortName": "GrSwitchExhaustivenessCheck", + "displayName": "Exhaustiveness check for switch expressions", + "enabled": false, + "description": "Reports switch expressions that do not cover all possible outcomes of the matched expression.\n\n\nGroovy does not require that switch expression must be exhaustive. It acts as if an implicit `default -> null` branch is inserted.\nIt may cause unexpected nulls if a developer forgets to insert necessary `case` branches.\n\n**Example:**\n\n\n enum A { X, Y }\n\n def foo(A a) {\n def x = switch (a) { // reports switch\n case A.X -> ...\n }\n }\n" + }, + { + "shortName": "GroovyUntypedAccess", + "displayName": "Untyped reference expression", + "enabled": false, + "description": "Reports reference expressions whose type can't be determined." + }, + { + "shortName": "GroovyResultOfObjectAllocationIgnored", + "displayName": "Result of object allocation ignored", + "enabled": false, + "description": "Reports object allocation where the result of this operation is ignored.\n\n\nSuch allocation expressions are legal Groovy, but are usually either inadvertent, or\nevidence of a complicated object initialization strategy." + }, + { + "shortName": "GroovyDocCheck", + "displayName": "Unresolved GroovyDoc reference", + "enabled": false, + "description": "Reports unresolved references inside GroovyDoc comments." + }, + { + "shortName": "GroovyLabeledStatement", + "displayName": "Labeled statement inspection", + "enabled": false, + "description": "Reports labels already used in parent workflow.\n\n**Example:**\n\n\n def list = [\"foo\"]\n cycle:\n for (element in list) {\n cycle: // confusing label repeat\n element.chars().forEach {\n }\n }\n\n" + }, + { + "shortName": "GroovyConstructorNamedArguments", + "displayName": "Named arguments of constructor call", + "enabled": false, + "description": "Reports named arguments of a default class constructor call which don't correspond to properties of this class.\n\n**Example:**\n\n\n class Person {\n def name\n def age\n }\n\n // 'firstName' property doesn't exist\n new Person(firstName: \"John\")\n" + }, + { + "shortName": "GrUnresolvedAccess", + "displayName": "Unresolved reference expression", + "enabled": false, + "description": "Reports reference expressions which cannot be resolved." + }, + { + "shortName": "SecondUnsafeCall", + "displayName": "Second unsafe call", + "enabled": false, + "description": "Reports possible **NullPointerException** during chain methods or properties call.\n\n**Example:**\n\n\n domain?.getZone().getName()\n\nAfter the quick-fix is applied:\n\n\n domain?.getZone()?.getName()\n" + }, + { + "shortName": "GroovyInfiniteLoopStatement", + "displayName": "Infinite loop statement", + "enabled": false, + "description": "Reports `for`, `while`, or `do` statements which can only exit by throwing an exception. While such statements may be correct, they usually happen by mistake.\n\n**Example:**\n\n\n while(true) {\n Thread.sleep(1000)\n }\n\n" + }, + { + "shortName": "GrPermitsClause", + "displayName": "Non-extending permitted subclasses", + "enabled": false, + "description": "Reports permitted classes that do not extend the sealed base class.\n\n\nGroovy does not require that all permitted classes should be available in compile-time and compiled along with base class. Compiler will not warn the user on dealing with non-extending permitted subclass, but it contradicts the nature of sealed classes.\n\n**Example:**\n\n\n class A permits B {} // reports B\n class B {}\n" + }, + { + "shortName": "GrEqualsBetweenInconvertibleTypes", + "displayName": "'equals()' between objects of inconvertible types", + "enabled": false, + "description": "Reports calls to `equals()` where the target and argument are of incompatible types.\n\nWhile such a call might theoretically be useful, most likely it represents a bug.\n\n**Example:**\n\n\n new HashSet() == new TreeSet())\n" + }, + { + "shortName": "GroovyInfiniteRecursion", + "displayName": "Infinite recursion", + "enabled": false, + "description": "Reports methods which must either recurse infinitely or throw an exception. Methods reported by this inspection could not be finished correct.\n\n**Example:**\n\n\n // this function always dive deeper\n def fibonacci(int n) {\n return fibonacci(n-1) + fibonacci(n-2)\n }\n\n" + }, + { + "shortName": "GroovyRangeTypeCheck", + "displayName": "Incorrect range arguments", + "enabled": false, + "description": "Reports types used in ranges that do not have a `next()` or `previous()` method or do not implement the `java.lang.Comparable` interface." + } + ] + }, + { + "name": "Error handling", + "inspections": [ + { + "shortName": "UncheckedExceptionClass", + "displayName": "Unchecked 'Exception' class", + "enabled": false, + "description": "Reports subclasses of `java.lang.RuntimeException`.\n\nSome coding standards require that all user-defined exception classes are checked.\n\n**Example:**\n\n\n class EnigmaException extends RuntimeException {} // warning: Unchecked exception class 'EnigmaException'\n" + }, + { + "shortName": "TooBroadCatch", + "displayName": "Overly broad 'catch' block", + "enabled": false, + "description": "Reports `catch` blocks with parameters that are more generic than the exception thrown by the corresponding `try` block.\n\n**Example:**\n\n\n try {\n File file = new File(pathToFile);\n return file.getAbsolutePath();\n } catch (Exception ex) { // warning: 'catch' of 'Exception' is too broad, masking exceptions 'RuntimeException'\n return defaultFilePath;\n }\n\nAfter the quick-fix is applied:\n\n\n try {\n File file = new File(pathToFile);\n return file.getAbsolutePath();\n } catch (RuntimeException ex) {\n return defaultFilePath;\n }\n\nConfigure the inspection:\n\n* Use the **Only warn on RuntimeException, Exception, Error or Throwable** option to have this inspection warn only on the most generic exceptions.\n* Use the **Ignore exceptions which hide others but are themselves thrown** option to ignore any exceptions that hide other exceptions but still may be thrown and thus are technically not overly broad." + }, + { + "shortName": "UnnecessaryInitCause", + "displayName": "Unnecessary call to 'Throwable.initCause()'", + "enabled": true, + "description": "Reports calls to `Throwable.initCause()` where an exception constructor also takes a `Throwable cause` argument.\n\nIn this case, the `initCause()` call can be removed and its argument can be added to the call to the exception's constructor.\n\n**Example:**\n\n\n try {\n process();\n }\n catch (RuntimeException ex) {\n RuntimeException wrapper = new RuntimeException(\"Error while processing\");\n wrapper.initCause(ex); // Unnecessary call to 'Throwable.initCause()'\n throw wrapper;\n }\n\nA quick-fix is available to pass the cause argument to the constructor. After the quick-fix is applied:\n\n\n try {\n process();\n }\n catch (RuntimeException ex) {\n RuntimeException wrapper = new RuntimeException(\"Error while processing\", ex);\n throw wrapper;\n }\n \n" + }, + { + "shortName": "CheckedExceptionClass", + "displayName": "Checked exception class", + "enabled": false, + "description": "Reports checked exception classes (that is, subclasses of `java.lang.Exception` that are not subclasses of `java.lang.RuntimeException`).\n\nSome coding standards suppress checked user-defined exception classes.\n\n**Example:**\n\n\n class IllegalMoveException extends Exception {}\n" + }, + { + "shortName": "ExceptionFromCatchWhichDoesntWrap", + "displayName": "'throw' inside 'catch' block which ignores the caught exception", + "enabled": false, + "description": "Reports exceptions that are thrown from inside `catch` blocks but do not \"wrap\" the caught exception.\n\nWhen an exception is thrown in response to an exception, wrapping the initial exception prevents losing valuable context information,\nsuch as stack frames and line numbers.\n\n**Example:**\n\n\n ...\n catch (IOException e) {\n closeAllConnections();\n throw new ConnectException(\"Connection problem.\"); // warning: 'throw' inside 'catch' block ignores the caught exception 'e'\n }\n\nConfigure the inspection:\n\n* Use the **Ignore if result of exception method call is used** option to indicate whether the inspection should ignore exceptions whose argument is the result of a method call on the original exception, such as `getMessage()`.\n* Use the **Ignore if thrown exception cannot wrap an exception** option to ignore `throw` statements that throw exceptions without a constructor that accepts a `Throwable` cause." + }, + { + "shortName": "NestedTryStatement", + "displayName": "Nested 'try' statement", + "enabled": false, + "description": "Reports nested `try` statements.\n\nNested `try` statements\nmay result in unclear code and should probably have their `catch` and `finally` sections\nmerged." + }, + { + "shortName": "NullThrown", + "displayName": "'null' thrown", + "enabled": false, + "description": "Reports `null` literals that are used as the argument of a `throw` statement.\n\nSuch constructs produce a `java.lang.NullPointerException` that usually should not be thrown programmatically." + }, + { + "shortName": "BadExceptionThrown", + "displayName": "Prohibited exception thrown", + "enabled": false, + "description": "Reports `throw` statements that throw an inappropriate exception. For example an exception can be inappropriate because it is overly generic, such as `java.lang.Exception` or `java.io.IOException`.\n\n**Example:**\n\n\n void setup(Mode mode) {\n if (mode == null)\n throw new RuntimeException(\"Problem during setup\"); // warning: Prohibited exception 'RuntimeException' thrown\n ...\n }\n\nUse the **Prohibited exceptions** list to specify which exceptions should be reported." + }, + { + "shortName": "ExtendsThrowable", + "displayName": "Class directly extends 'Throwable'", + "enabled": false, + "description": "Reports classes that directly extend `java.lang.Throwable`.\n\nExtending `java.lang.Throwable` directly is generally considered bad practice.\nIt is usually enough to extend `java.lang.RuntimeException`, `java.lang.Exception`, or - in special\ncases - `java.lang.Error`.\n\n**Example:**\n\n\n class EnigmaThrowable extends Throwable {} // warning: Class 'EnigmaThrowable' directly extends 'java.lang.Throwable'\n" + }, + { + "shortName": "ThreadDeathRethrown", + "displayName": "'ThreadDeath' not rethrown", + "enabled": false, + "description": "Reports `try` statements that catch `java.lang.ThreadDeath` and do not rethrow the exception.\n\n**Example:**\n\n\n try {\n executeInParallel(request);\n } catch (ThreadDeath ex) { // warning: ThreadDeath 'ex' not rethrown\n return false;\n }\n" + }, + { + "shortName": "CaughtExceptionImmediatelyRethrown", + "displayName": "Caught exception is immediately rethrown", + "enabled": true, + "description": "Reports `catch` blocks that immediately rethrow the caught exception without performing any action on it. Such `catch` blocks are unnecessary and have no error handling.\n\n**Example:**\n\n\n try {\n new FileInputStream(\"\");\n } catch (FileNotFoundException e) {\n throw e;\n }\n" + }, + { + "shortName": "ThrowFromFinallyBlock", + "displayName": "'throw' inside 'finally' block", + "enabled": true, + "description": "Reports `throw` statements inside `finally` blocks.\n\nWhile occasionally intended, such `throw` statements may conceal exceptions thrown from `try`-`catch` and thus\ntremendously complicate the debugging process." + }, + { + "shortName": "ContinueOrBreakFromFinallyBlock", + "displayName": "'continue' or 'break' inside 'finally' block", + "enabled": true, + "description": "Reports `break` or `continue` statements inside of `finally` blocks.\n\nWhile occasionally intended, such statements are very confusing, may mask thrown exceptions, and complicate debugging.\n\n**Example:**\n\n\n while (true) {\n try {\n throwingMethod();\n } finally {\n continue;\n }\n }\n" + }, + { + "shortName": "BadExceptionDeclared", + "displayName": "Prohibited exception declared", + "enabled": false, + "description": "Reports methods that declare an inappropriate exception in their `throws` clause. For example an exception can be inappropriate because it is overly generic, such as `java.lang.Exception` or `java.lang.Throwable`.\n\n**Example:**\n\n\n void describeModule(String module) throws Exception {} // warning: Prohibited exception 'Exception' declared\n\nConfigure the inspection:\n\n* Use the **Prohibited exceptions** list to specify which exceptions should be reported.\n* Use the **Ignore exceptions declared on methods overriding a library method** option to ignore exceptions declared by methods that override a library method." + }, + { + "shortName": "ReturnFromFinallyBlock", + "displayName": "'return' inside 'finally' block", + "enabled": true, + "description": "Reports `return` statements inside of `finally` blocks.\n\nWhile occasionally intended, such `return` statements may mask thrown exceptions\nand complicate debugging.\n\n**Example:**\n\n\n try {\n foo();\n } finally {\n if (bar()) return;\n }\n" + }, + { + "shortName": "EmptyTryBlock", + "displayName": "Empty 'try' block", + "enabled": true, + "description": "Reports empty `try` blocks, including try-with-resources statements.\n\n`try` blocks with comments are considered empty.\n\n\nThis inspection doesn't report empty `try` blocks found in JSP files." + }, + { + "shortName": "NonFinalFieldOfException", + "displayName": "Non-final field of 'Exception' class", + "enabled": false, + "description": "Reports fields in subclasses of `java.lang.Exception` that are not declared `final`.\n\nData on exception objects should not be modified\nbecause this may result in losing the error context for later debugging and logging.\n\n**Example:**\n\n\n public class EditorException extends Exception {\n private String message; // warning: Non-final field 'message' of exception class\n }\n" + }, + { + "shortName": "TooBroadThrows", + "displayName": "Overly broad 'throws' clause", + "enabled": false, + "description": "Reports `throws` clauses with exceptions that are more generic than the exceptions that the method actually throws.\n\n**Example:**\n\n\n public void createFile() throws Exception { // warning: 'throws Exception' is too broad, masking exception 'IOException'\n File file = new File(\"pathToFile\");\n file.createNewFile();\n }\n\nAfter the quick-fix is applied:\n\n\n public void createFile() throws IOException {\n File file = new File(\"pathToFile\");\n file.createNewFile();\n }\n\nConfigure the inspection:\n\n* Use the **Only warn on RuntimeException, Exception, Error or Throwable** option to have this inspection warn only on the most generic exceptions.\n* Use the **Ignore exceptions declared on methods overriding a library method** option to ignore overly broad `throws` clauses in methods that override a library method.\n* Use the **Ignore exceptions which hide others but are themselves thrown** option to ignore any exceptions that hide other exceptions but still may be thrown from the method body and thus are technically not overly broad." + }, + { + "shortName": "BadExceptionCaught", + "displayName": "Prohibited 'Exception' caught", + "enabled": false, + "description": "Reports `catch` clauses that catch an inappropriate exception.\n\nSome exceptions, for example\n`java.lang.NullPointerException` or\n`java.lang.IllegalMonitorStateException`, represent programming errors\nand therefore almost certainly should not be caught in production code.\n\n**Example:**\n\n\n try {\n return component.getMousePosition(true) != null;\n } catch (NullPointerException e) { // warning: Prohibited exception 'NullPointerException' caught\n return false;\n }\n\nUse the **Prohibited exceptions** list to specify which exceptions should be reported." + }, + { + "shortName": "InstanceofCatchParameter", + "displayName": "'instanceof' on 'catch' parameter", + "enabled": false, + "description": "Reports cases in which an `instanceof` expression is used for testing the type of a parameter in a `catch` block.\n\nTesting the type of `catch` parameters is usually better done by having separate\n`catch` blocks instead of using `instanceof`.\n\n**Example:**\n\n\n void foo(Runnable runnable) {\n try {\n runnable.run();\n } catch (Throwable throwable) {\n if (throwable instanceof NoClassDefFoundError) { // warning: 'instanceof' on 'catch' parameter 'throwable'\n System.out.println(\"Class not found!\");\n }\n }\n }\n" + }, + { + "shortName": "CatchMayIgnoreException", + "displayName": "Catch block may ignore exception", + "enabled": true, + "description": "Reports `catch` blocks that are empty or may ignore an exception.\n\nWhile occasionally intended, empty `catch` blocks may complicate debugging.\nAlso, ignoring a `catch` parameter might be wrong.\nFinally, the static code analyzer reports if it detects that a `catch` block may silently ignore important VM\nexceptions like `NullPointerException`. Ignoring such an exception\n(without logging or rethrowing it) may hide a bug.\n\n\nThe inspection won't report any `catch` parameters named `ignore` or `ignored`.\nConversely, the inspection will warn you about any `catch` parameters named `ignore` or `ignored` that are actually in use.\nAdditionally, the inspection won't report `catch` parameters inside test sources named `expected` or `ok`.\n\n\nYou can use a quick-fix to change the exception name to `ignored`.\nFor empty **catch** blocks, an additional quick-fix to generate the **catch** body is suggested.\nYou can modify the \"Catch Statement Body\" template on the Code tab in\n[Settings \\| Editor \\| File and Code Templates](settings://fileTemplates).\n\n**Example:**\n\n\n try {\n throwingMethod();\n } catch (IOException ex) {\n\n }\n\nAfter the quick-fix is applied:\n\n\n try {\n System.out.println(System.in.read());\n } catch (IOException ignored) {\n\n }\n\nConfigure the inspection:\n\n* Use the **Do not warn when 'catch' block contains a comment** option to ignore `catch` blocks with comments.\n* Use the **Do not warn when 'catch' block is not empty** option to ignore `catch` blocks that contain statements or comments inside, while the variable itself is not used.\n* Use the **Do not warn when exception named 'ignore(d)' is not actually ignored** option to ignore variables named `ignored` if they are in use.\n\nNew in 2018.1" + }, + { + "shortName": "ThrowCaughtLocally", + "displayName": "'throw' caught by containing 'try' statement", + "enabled": false, + "description": "Reports `throw` statements whose exceptions are always caught by containing `try` statements.\n\nUsing `throw`\nstatements as a \"goto\" to change the local flow of control is confusing and results in poor performance.\n\n**Example:**\n\n\n try {\n if (!Files.isDirectory(PROJECTS)) {\n throw new IllegalStateException(\"Directory not found.\"); // warning: 'throw' caught by containing 'try' statement\n }\n ...\n } catch (Exception e) {\n LOG.error(\"run failed\");\n }\n\nUse the **Ignore rethrown exceptions** option to ignore exceptions that are rethrown." + }, + { + "shortName": "FinallyBlockCannotCompleteNormally", + "displayName": "'finally' block which can not complete normally", + "enabled": true, + "description": "Reports `return`, `throw`, `break`, `continue`, and `yield` statements that are used inside `finally` blocks. These cause the `finally` block to not complete normally but to complete abruptly. Any exceptions thrown from the `try` and `catch` blocks of the same `try`-`catch` statement will be suppressed.\n\n**Example:**\n\n\n void x() {\n try {\n throw new RuntimeException();\n } finally {\n // if bar() returns true, the RuntimeException will be suppressed\n if (bar()) return;\n }\n }\n" + }, + { + "shortName": "ThrowsRuntimeException", + "displayName": "Unchecked exception declared in 'throws' clause", + "enabled": false, + "description": "Reports declaration of an unchecked exception (`java.lang.RuntimeException` or one of its subclasses) in the `throws` clause of a method.\n\nDeclarations of unchecked exceptions are not required and may be deleted or moved to a Javadoc `@throws` tag.\n\n**Example:**\n\n\n public class InvalidDataException extends RuntimeException {}\n\n class TextEditor {\n void readSettings() throws InvalidDataException {} // warning: Unchecked exception 'InvalidDataException' declared in 'throws' clause\n }\n" + }, + { + "shortName": "EmptyFinallyBlock", + "displayName": "Empty 'finally' block", + "enabled": true, + "description": "Reports empty `finally` blocks.\n\nEmpty `finally` blocks usually indicate coding errors. They may also remain after code refactoring and can safely be removed.\n\nThis inspection doesn't report empty `finally` blocks found in JSP files.\n\n**Example:**\n\n\n try {\n Files.readString(Paths.get(\"in.txt\"));\n } catch (IOException e) {\n throw new RuntimeException(e);\n } finally {\n\n }\n\nAfter the quick-fix is applied:\n\n\n try {\n Files.readString(Paths.get(\"in.txt\"));\n } catch (IOException e) {\n throw new RuntimeException(e);\n }\n" + }, + { + "shortName": "ErrorRethrown", + "displayName": "'Error' not rethrown", + "enabled": false, + "description": "Reports `try` statements that catch `java.lang.Error` or any of its subclasses and do not rethrow the error.\n\nStatements that catch `java.lang.ThreadDeath` are not\nreported.\n\n**Example:**\n\n\n try {\n executeTests(request);\n }\n catch (OutOfMemoryError ex) { // warning: Error 'ex' not rethrown\n return false;\n }\n" + }, + { + "shortName": "NewExceptionWithoutArguments", + "displayName": "Exception constructor called without arguments", + "enabled": false, + "description": "Reports creation of a exception instance without any arguments specified.\n\nWhen an exception is constructed without any arguments, it contains no information about the problem that occurred, which makes\ndebugging needlessly hard.\n\n**Example:**\n\n\n throw new IOException(); // warning: exception without arguments\n" + }, + { + "shortName": "GroovyContinueOrBreakFromFinallyBlock", + "displayName": "'continue' or 'break' from 'finally' block", + "enabled": false, + "description": "Reports `break` and `continue` statements inside of `finally` blocks.\n\nWhile occasionally intended, such statements are very confusing, may mask thrown exceptions, and tremendously complicate debugging." + }, + { + "shortName": "GroovyThrowFromFinallyBlock", + "displayName": "'throw' inside 'finally' block", + "enabled": false, + "description": "Reports `throw` statements inside of `finally` blocks.\n\n\nWhile occasionally intended, such `throw` statements may mask exceptions thrown and\ntremendously complicate debugging." + }, + { + "shortName": "GroovyUnusedCatchParameter", + "displayName": "Unused 'catch' parameter", + "enabled": false, + "description": "Reports **catch** parameters that are unused in their\ncorresponding blocks. This inspection will not report any **catch** parameters\nnamed \"ignore\" or \"ignored\".\n\n**Example:**\n\n\n try {\n def arr = new int[3]\n arr[5] = 5\n } catch(Exception ex) {\n println('Catching the exception')\n }\n\nHere the parameter **ex** is never used in **catch** block.\n\nAfter the quick-fix is applied:\n\n\n try {\n def arr = new int[3]\n arr[5] = 5\n } catch(Exception ignored) {\n println('Catching the exception')\n }\n" + }, + { + "shortName": "GroovyReturnFromFinallyBlock", + "displayName": "'return' inside 'finally' block", + "enabled": false, + "description": "Reports `return` statements inside of `finally` blocks.\n\n\nWhile occasionally intended, such `return` statements may mask exceptions thrown, and\ncomplicate debugging." + }, + { + "shortName": "GroovyEmptyTryBlock", + "displayName": "Empty 'try' block", + "enabled": false, + "description": "Reports empty `try` blocks. Empty `try` blocks usually indicate coding errors.\n\n**Example:**\n\n\n try {\n }\n finally {\n close()\n }\n\n" + }, + { + "shortName": "GroovyEmptyCatchBlock", + "displayName": "Empty 'catch' block", + "enabled": false, + "description": "Reports empty `catch` blocks. While occasionally intended, empty `catch` blocks can make debugging extremely difficult.\n\n**Example:**\n\n\n try {\n throw new Exception()\n }\n catch (Exception e) {\n }\n\nAfter the quick-fix is applied:\n\n\n try {\n throw new Exception()\n }\n catch (Exception ignored) {\n }\n\n" + }, + { + "shortName": "GroovyEmptyFinallyBlock", + "displayName": "Empty 'finally' block", + "enabled": false, + "description": "Reports empty `finally` blocks. Empty `finally` blocks usually indicate coding errors.\n\n**Example:**\n\n\n try {\n throw new Exception()\n }\n finally {\n }\n\n" + } + ] + }, + { + "name": "Declaration redundancy", + "inspections": [ + { + "shortName": "UnusedReturnValue", + "displayName": "Method can be made 'void'", + "enabled": false, + "description": "Reports methods whose return values are never used when called. The return type of such methods can be made `void`.\n\nMethods annotated with Error Prone's or AssertJ's `@CanIgnoreReturnValue` annotation will not be reported.\nThe quick-fix updates the method signature and removes `return` statements from inside the method.\n\n**Example:**\n\n\n // reported if visibility setting is Protected or Public\n protected String myToUpperCase(String s) {\n return s.toUpperCase();\n }\n\n // simple setter, reporting depends on setting\n public String setStr(String str) {\n myStr = str;\n return myStr;\n }\n\n void test() {\n setStr(\"value\"); // return value is unused\n myToUpperCase(\"result\"); // return value is unused\n }\n\nAfter the quick-fix is applied to both methods:\n\n\n protected void myToUpperCase(String s) {\n // 'return' removed completely\n // as 's.toUpperCase()' has no side effect\n }\n\n public void setStr(String str) {\n myStr = str;\n // 'return' removed\n }\n ...\n\n\n**NOTE:** Some methods might not be reported during in-editor highlighting due to performance reasons.\nTo see all results, run the inspection using **Code \\| Inspect Code** or **Code \\| Analyze Code \\| Run Inspection by Name**\\>\n\nUse the **Ignore simple setters** option to ignore unused return values from simple setter calls.\n\nUse the **Maximal reported method visibility** option to control the maximum visibility of methods to be reported." + }, + { + "shortName": "unused", + "displayName": "Unused declaration", + "enabled": false, + "description": "Reports classes, methods, or fields that are not used or unreachable from the entry points.\n\nAn entry point can be a main method, tests, classes from outside the specified scope, classes accessible from\n`module-info.java`, and so on. It is possible to configure custom entry points by using name patterns or annotations.\n\n**Example:**\n\n\n public class Department {\n private Organization myOrganization;\n }\n\nIn this example, `Department` explicitly references `Organization` but if `Department` class itself is unused, then inspection will report both classes.\n\n\nThe inspection also reports parameters that are not used by their methods and all method implementations and overriders, as well as local\nvariables that are declared but not used.\n\n\n**Note:** Some unused members may not be reported during in-editor code highlighting. For performance reasons, a non-private member is\nchecked only when its name rarely occurs in the project.\nTo see all results, run the inspection by selecting **Code \\| Inspect Code** or **Code \\| Analyze Code \\| Run Inspection by Name** from the main menu.\n\nUse the visibility settings below to configure members to be reported. For example, configuring report `private` methods only means\nthat `public` methods of `private` inner class will be reported but `protected` methods of top level class\nwill be ignored.\n\n\nUse the **entry points** tab to configure entry points to be considered during the inspection run.\n\nYou can add entry points manually when inspection results are ready.\n\nIf your code uses unsupported frameworks, there are several options:\n\n* If the framework relies on annotations, use the **Annotations...** button to configure the framework's annotations.\n* If the framework doesn't rely on annotations, try to configure class name patterns that are expected by the framework.\n\nThis way the annotated code accessible by the framework internals will be treated as used." + }, + { + "shortName": "ProtectedMemberInFinalClass", + "displayName": "'protected' member in 'final' class", + "enabled": true, + "description": "Reports `protected` members in `final`classes.\n\nSince `final` classes cannot be inherited, marking the method as `protected`\nmay be confusing. It is better to declare such members as `private` or package-visible instead.\n\n**Example:**\n\n record Bar(int a, int b) {\n protected int sum() { \n return a + b;\n }\n }\n\nAfter the quick-fix is applied:\n\n record Bar(int a, int b) {\n int sum() { \n return a + b;\n }\n }\n\nAs shown in the example, a class can be marked as `final` explicitly or implicitly." + }, + { + "shortName": "EmptyInitializer", + "displayName": "Empty class initializer", + "enabled": false, + "description": "Reports empty class initializer blocks." + }, + { + "shortName": "UnusedLibrary", + "displayName": "Unused library", + "enabled": false, + "description": "Reports libraries attached to the specified inspection scope that are not used directly in code." + }, + { + "shortName": "TrivialFunctionalExpressionUsage", + "displayName": "Trivial usage of functional expression", + "enabled": true, + "description": "Reports functional interface methods calls that are directly invoked on the definition of the lambda, method reference, or anonymous class. Such method calls can be replaced with the body of the functional interface implementation.\n\n**Example:**\n\n\n boolean contains(List names, String name) {\n return ((Predicate)x -> {\n return names.contains(x);\n }).test(name);\n }\n\nWhen the quick-fix is applied, the method call changes to:\n\n\n boolean contains(List names, String name) {\n return names.contains(name);\n }\n" + }, + { + "shortName": "RedundantLambdaParameterType", + "displayName": "Redundant lambda parameter types", + "enabled": true, + "description": "Reports lambda formal parameter types that are redundant because they can be inferred from the context.\n\n**Example:**\n\n\n Map map = ...\n map.forEach((String s, Integer i) -> log.info(s + \"=\" + i));\n\nThe quick-fix removes the parameter types from the lambda.\n\n\n Map map = ...\n map.forEach((s, i) -> log.info(s + \"=\" + i));\n" + }, + { + "shortName": "AccessStaticViaInstance", + "displayName": "Access static member via instance reference", + "enabled": false, + "description": "Reports references to `static` methods and fields via a class instance rather than the class itself.\n\nEven though referring to static members via instance variables is allowed by The Java Language Specification,\nthis makes the code confusing as the reader may think that the result of the method depends on the instance.\n\nThe quick-fix replaces the instance variable with the class name.\n\nExample:\n\n\n String s1 = s.valueOf(0);\n\nAfter the quick-fix is applied:\n\n\n String s = String.valueOf(0);\n" + }, + { + "shortName": "UnnecessaryModuleDependencyInspection", + "displayName": "Unnecessary module dependency", + "enabled": false, + "description": "Reports dependencies on modules that are not used. The quick-fix safely removes such unused dependencies." + }, + { + "shortName": "CanBeFinal", + "displayName": "Declaration can have 'final' modifier", + "enabled": false, + "description": "Reports fields, methods, or classes that may have the `final` modifier added to their declarations.\n\nFinal classes can't be extended, final methods can't be overridden, and final fields can't be reassigned.\n\n**Example:**\n\n\n public class Person {\n private String name;\n\n Person(String name) {\n this.name = name;\n }\n\n public String getName() {\n return name;\n }\n\n public String toString() {\n return getName();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public final class Person {\n private final String name;\n\n Person(String name) {\n this.name = name;\n }\n\n public final String getName() {\n return name;\n }\n\n public final String toString() {\n return getName();\n }\n }\n\nUse the **Report classes** and **Report methods** options to define which declarations are to be reported." + }, + { + "shortName": "EmptyMethod", + "displayName": "Empty method", + "enabled": false, + "description": "Reports empty methods that can be removed.\n\nMethods are considered empty if they are empty themselves and if they are overridden or\nimplemented by empty methods only. Note that methods containing only comments and the `super()` call with own parameters are\nalso considered empty.\n\nThe inspection ignores methods with special annotations, for example, the `javax.ejb.Init` and `javax.ejb.Remove` EJB annotations .\n\nThe quick-fix safely removes unnecessary methods.\n\nConfigure the inspection:\n\n* Use the **Comments and javadoc count as content** option to select whether methods with comments should be treated as non-empty.\n* Use the **Additional special annotations** option to configure additional annotations that should be ignored by this inspection." + }, + { + "shortName": "RedundantExplicitClose", + "displayName": "Redundant 'close()'", + "enabled": true, + "description": "Reports unnecessary calls to `close()` at the end of a try-with-resources block and suggests removing them.\n\n**Example**:\n\n\n try(MyAutoCloseable ac = new MyAutoCloseable()) {\n foo();\n ac.close();\n }\n\nAfter the quick-fix is applied:\n\n\n try(MyAutoCloseable ac = new MyAutoCloseable()) {\n foo();\n }\n\nNew in 2018.1" + }, + { + "shortName": "RedundantThrows", + "displayName": "Redundant 'throws' clause", + "enabled": false, + "description": "Reports exceptions that are declared in a method's signature but never thrown by the method itself or its implementations and overriding methods.\n\nThe inspection ignores methods related to serialization, for example the methods `readObject()` and `writeObject()`.\n\n**Example:**\n\n\n void method() throws InterruptedException {\n System.out.println();\n }\n\nThe quick-fix removes unnecessary exceptions from the declaration and normalizes redundant `try`-`catch` statements:\n\n\n void method() {\n System.out.println();\n }\n\n\n**Note:** Some exceptions may not be reported during in-editor highlighting for performance reasons.\nTo see all results, run the inspection by selecting **Code \\| Inspect Code** or **Code \\| Analyze Code \\| Run Inspection by Name** from the main menu.\n\nUse the **Ignore exceptions thrown by entry point methods** option to not report exceptions thrown by\nfor example `main()` methods.\nEntry point methods can be configured in the settings of the\n[Java \\| Declaration redundancy \\| Unused declaration](settings://Errors?Unused%20Declaration%20entry%20point) inspection.\n\n
    " + }, + { + "shortName": "DuplicateThrows", + "displayName": "Duplicate throws", + "enabled": true, + "description": "Reports duplicate exceptions in a method `throws` list.\n\nExample:\n\n\n void f() throws Exception, Exception {}\n\nAfter the quick-fix is applied:\n\n\n void f() throws Exception {}\n\n\nUse the **Ignore exceptions subclassing others** option to ignore exceptions subclassing other exceptions." + }, + { + "shortName": "UnusedLabel", + "displayName": "Unused label", + "enabled": true, + "description": "Reports labels that are not targets of any `break` or `continue` statements.\n\n**Example:**\n\n\n label: for (int i = 0; i < 10; i++) {\n if (i == 3) {\n break;\n }\n }\n\nAfter the quick-fix is applied, the label is removed:\n\n\n for (int i = 0; i < 10; i++) {\n if (i == 3) {\n break;\n }\n }\n" + }, + { + "shortName": "DefaultAnnotationParam", + "displayName": "Default annotation parameter value", + "enabled": true, + "description": "Reports annotation parameters that are assigned to their `default` value.\n\nExample:\n\n\n @interface Test {\n Class expected() default Throwable.class;\n }\n\n @Test(expected = Throwable.class)\n void testSmth() {}\n\nAfter the quick-fix is applied:\n\n\n @Test()\n void testSmth() {}\n" + }, + { + "shortName": "RedundantImplements", + "displayName": "Redundant interface declaration", + "enabled": false, + "description": "Reports classes declaring that they implement or extend an interface, when that interface is already declared as `implemented` by a superclass or extended by another interface of that class. Such declarations are unnecessary and may be safely removed." + }, + { + "shortName": "SameParameterValue", + "displayName": "Method parameter is always the same value", + "enabled": false, + "description": "Reports method parameters that always have the same constant value.\n\nExample:\n\n\n static void printPoint(int x, int y) { // x is always 0\n System.out.println(x + \", \" + y);\n }\n\n public static void main(String[] args) {\n printPoint(0, 1);\n printPoint(0, 2);\n }\n\nThe quick-fix inlines the constant value. This may simplify the method implementation.\n\n\nUse the **Ignore when inline parameter initializer would not succeed** option to suppress the inspections when:\n\n* the parameter is modified inside the method.\n* the parameter value that is being passed is a reference to an inaccessible field (only in Java).\n* the parameter is a vararg (only in Java).\n\n\nUse the **Maximal reported method visibility** option to control the maximum visibility of methods to be reported.\n\n\nUse the **Minimal reported method usage count** field to specify the minimal number of method usages with the same parameter value." + }, + { + "shortName": "SameReturnValue", + "displayName": "Method always returns the same value", + "enabled": false, + "description": "Reports methods and method hierarchies that always return the same constant.\n\n**Example:**\n\n\n class X {\n int xxx() {\n return 0;\n }\n }\n" + }, + { + "shortName": "RedundantRecordConstructor", + "displayName": "Redundant record constructor", + "enabled": true, + "description": "Reports redundant constructors declared inside Java records.\n\n**Example 1:**\n\n\n record Point(int x, int y) {\n public Point {} // could be removed\n }\n \n record Point(int x, int y) {\n public Point(int x, int y) { // could be removed\n this.x = x;\n this.y = y;\n }\n }\n\nThe quick-fix removes the redundant constructors.\n\n**Example 2:**\n\n\n // could be converted to compact constructor\n record Range(int from, int to) {\n public Range(int from, int to) {\n if (from > to) throw new IllegalArgumentException();\n this.from = from;\n this.to = to;\n }\n }\n\nThe quick-fix converts this code into a compact constructor.\n\nThis inspection only reports if the language level of the project or module is 16 or higher.\n\nNew in 2020.1" + }, + { + "shortName": "WeakerAccess", + "displayName": "Declaration access can be weaker", + "enabled": false, + "description": "Reports fields, methods or classes that may have their access modifier narrowed down.\n\nExample:\n\n\n class Sample {\n void foo() {\n bar(\"foo\", \"foo\");\n }\n void bar(String x, String y) { } // can be private\n }\n\nAfter the quick-fix is applied:\n\n\n class Sample {\n void foo() {\n bar(\"foo\", \"foo\");\n }\n private void bar(String x, String y) { }\n }\n\nUse the inspection's options to define the rules for the modifier change suggestions." + }, + { + "shortName": "FinalMethodInFinalClass", + "displayName": "'final' method in 'final' class", + "enabled": false, + "description": "Reports `final` methods in `final` classes.\n\nSince `final` classes cannot be inherited, marking a method as `final`\nmay be unnecessary and confusing.\n\n**Example:**\n\n record Bar(int a, int b) {\n public final int sum() { \n return a + b;\n }\n }\n\nAfter the quick-fix is applied:\n\n record Bar(int a, int b) {\n public int sum() { \n return a + b;\n }\n }\n\nAs shown in the example, a class can be marked as `final` explicitly or implicitly." + }, + { + "shortName": "Java9RedundantRequiresStatement", + "displayName": "Redundant 'requires' directive in module-info", + "enabled": false, + "description": "Reports redundant `requires` directives in Java Platform Module System `module-info.java` files. A `requires` directive is redundant when a module `A` requires a module `B`, but the code in module `A` doesn't import any packages or classes from `B`. Furthermore, all modules have an implicitly declared dependence on the `java.base` module, therefore a `requires java.base;` directive is always redundant.\n\n\nThe quick-fix deletes the redundant `requires` directive.\nIf the deleted dependency re-exported modules that are actually used, the fix adds a `requires` directives for these modules.\n\nThis inspection only reports if the language level of the project or module is 9 or higher.\n\nNew in 2017.1" + }, + { + "shortName": "SillyAssignment", + "displayName": "Variable is assigned to itself", + "enabled": true, + "description": "Reports assignments of a variable to itself.\n\n**Example:**\n\n\n a = a;\n\nThe quick-fix removes the assigment." + }, + { + "shortName": "FunctionalExpressionCanBeFolded", + "displayName": "Functional expression can be folded", + "enabled": false, + "description": "Reports method references or lambda expressions that point to a method of their own functional interface type and hence can be replaced with their qualifiers removing unnecessary object allocation.\n\nExample:\n\n\n SwingUtilities.invokeLater(r::run);\n SwingUtilities.invokeAndWait(() -> r.run());\n\nAfter the quick-fix is applied:\n\n\n SwingUtilities.invokeLater(r);\n SwingUtilities.invokeAndWait(r);\n\nThis inspection reports only if the language level of the project or module is 8 or higher." + }, + { + "shortName": "GroovyUnusedDeclaration", + "displayName": "Unused declaration", + "enabled": false, + "description": "Reports unused classes, methods and fields.\n\n**Example:**\n\n\n public class Department {\n private Organization myOrganization;\n }\n\nHere `Department` explicitly references `Organization` but if `Department` class itself is unused,\nthen inspection would report both classes.\n\n\nThe inspection also reports parameters, which are not used by their methods and all method implementations/overriders, as well as local\nvariables, which are declared but not used.\n\nFor more information, see the same inspection in Java." + } + ] + }, + { + "name": "Migration", + "inspections": [ + { + "shortName": "NonExhaustiveWhenStatementMigration", + "displayName": "Non-exhaustive 'when' statements will be prohibited since 1.7", + "enabled": false, + "description": "Reports a non-exhaustive `when` statements that will lead to compilation error since 1.7.\n\nMotivation types:\n\n* Problematic/meaningless usage patterns need to be discouraged/blocked (e.g. counterintuitive behaviors)\n * Code is error-prone\n* Inconsistency in the design (things are done differently in different contexts)\n\nImpact types:\n\n* Compilation. Some code that used to compile won't compile any more\n * There were cases when such code worked with no exceptions\n * Some such code could compile without any warnings\n\n**More details:** [KT-47709: Make when statements with enum, sealed, and Boolean subjects exhaustive by default](https://youtrack.jetbrains.com/issue/KT-47709)\n\nThe quick-fix adds the missing `else -> {}` branch.\n\n**Example:**\n\n\n sealed class Base {\n class A : Base()\n class B : Base()\n }\n\n fun test(base: Base) {\n when (base) {\n is Base.A -> \"\"\n }\n }\n\nAfter the quick-fix is applied:\n\n\n sealed class Base {\n class A : Base()\n class B : Base()\n }\n\n fun test(base: Base) {\n when (base) {\n is Base.A -> \"\"\n else -> {}\n }\n }\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.6 or higher." + }, + { + "shortName": "InlineClassDeprecatedMigration", + "displayName": "Inline classes are deprecated since 1.5", + "enabled": false, + "description": "Reports inline classes that are deprecated and cause compilation warnings in Kotlin 1.5 and later.\nSee [What's new in Kotlin 1.5.0](https://kotlinlang.org/docs/whatsnew15.html#inline-classes)\n\nExample:\n\n\n inline class Password(val s: String)\n\nAfter the quick-fix is applied:\n\n\n @JvmInline\n value class Password(val s: String)\n\nInspection is available for Kotlin language level starting from 1.5." + }, + { + "shortName": "AmbiguousExpressionInWhenBranchMigration", + "displayName": "Ambiguous logical expressions in 'when' branches since 1.7", + "enabled": false, + "description": "Reports ambiguous logical expressions in `when` branches which cause compilation errors in Kotlin 1.8 and later.\n\n\n fun Int.matches(strict: Boolean): Boolean = when (strict) {\n true -> this == 6\n this in (4..7) -> true // is ambiguous\n else -> false\n }\n\nAfter the quick-fix is applied:\n\n\n fun Int.matches(strict: Boolean): Boolean = when (strict) {\n true -> this == 6\n (this in (4..7)) -> true // wrapped in parentheses\n else -> false\n }\n\nInspection is available for Kotlin language level starting from 1.7." + }, + { + "shortName": "ProhibitJvmOverloadsOnConstructorsOfAnnotationClassesMigration", + "displayName": "'@JvmOverloads' annotation cannot be used on constructors of annotation classes since 1.4", + "enabled": false, + "description": "Reports `@JvmOverloads` on constructors of annotation classes because it's meaningless.\n\n\nThere is no footprint of `@JvmOverloads` in the generated bytecode and Kotlin metadata,\nso `@JvmOverloads` doesn't affect the generated bytecode and the code behavior.\n\n`@JvmOverloads` on constructors of annotation classes causes a compilation error since Kotlin 1.4.\n\n**Example:**\n\n\n annotation class A @JvmOverloads constructor(val x: Int = 1)\n\nAfter the quick-fix is applied:\n\n\n annotation class A constructor(val x: Int = 1)\n" + }, + { + "shortName": "CastDueToProgressionResolutionChangeMigration", + "displayName": "Progression resolution change since 1.9", + "enabled": false, + "description": "Reports overloaded function calls where an argument requires an explicit cast to resolve to a proper declaration.\nThe current compiler warning (available since Kotlin 1.6.20) will become an error in Kotlin 1.8.\n\n\nProgressions and ranges types (`kotlin.ranges`) will start implementing the `Collection` interface in Kotlin\n1.9 and later. This update will cause a change in resolution for overloaded functions. For instance, in the example below, the\n`test(1..5)` call will be resolved to `test(t: Any)` in Kotlin 1.8 and earlier and to\n`test(t: Collection<*>)` in Kotlin 1.9 and later.\n\n\n fun test(t: Any) { }\n fun test(t: Collection<*>) { }\n fun invoke() {\n test(1..5) // IntRange becomes Collection in 1.9\n }\n\nThe provided quick-fix captures the behaviour specific to the compiler of version 1.8 and earlier:\n\n\n fun test(t: Any) { }\n fun test(t: Collection<*>) { }\n\n fun invoke() {\n test(1..5) // resolved to 'test(t: T)' before Kotlin 1.9\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(t: Any) { }\n fun test(t: Collection<*>) { }\n\n fun invoke() {\n test((1..5) as Iterable) // resolved to 'test(t: T)' in Kotlin 1.9\n }\n\nInspection is available for the Kotlin language level starting from 1.6." + }, + { + "shortName": "AddConversionCallMigration", + "displayName": "Explicit conversion from `Int` needed since 1.9", + "enabled": false, + "description": "Reports expressions that will be of type `Int`, thus causing compilation errors in Kotlin 1.9 and later.\n\nExample:\n\n\n fun takeByte(x: Byte) {}\n\n fun foo() {\n takeByte(1 + 1) // will be resolved to Int in 1.9\n }\n\nAfter the quick-fix is applied:\n\n\n fun takeByte(x: Byte) {}\n\n fun foo() {\n takeByte((1 + 1).toByte()) // will be resolved to Int in 1.9\n }\n\nInspection is available for Kotlin language level starting from 1.7." + }, + { + "shortName": "KotlinDeprecation", + "displayName": "Usage of redundant or deprecated syntax or deprecated symbols", + "enabled": true, + "description": "Reports obsolete language features and unnecessarily verbose code constructs during the code cleanup operation (**Code \\| Code Cleanup** ).\n\n\nA quick-fix automatically replaces usages of obsolete language features or unnecessarily verbose code constructs with compact and up-to-date syntax.\n\n\nIt also replaces deprecated symbols with their proposed substitutions." + }, + { + "shortName": "WarningOnMainUnusedParameterMigration", + "displayName": "Unused 'args' on 'main' since 1.4", + "enabled": false, + "description": "Reports `main` function with an unused single parameter.\n\nSince Kotlin 1.4, it is possible to use the `main` function without parameter as the entry point to the Kotlin program.\nThe compiler reports a warning for the `main` function with an unused parameter." + }, + { + "shortName": "RedundantLabelMigration", + "displayName": "Redundant label", + "enabled": false, + "description": "Reports redundant labels which cause compilation errors since Kotlin 1.4.\n\nSince Kotlin 1.0, one can mark any statement with a label:\n\n\n fun foo() {\n L1@ val x = L2@bar()\n }\n\nHowever, these labels can be referenced only in a limited number of ways:\n\n* break / continue from a loop\n* non-local return from an inline lambda or inline anonymous function\nsssss\n\nSuch labels are prohibited since Kotlin 1.4.\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.4 or higher." + }, + { + "shortName": "OverrideDeprecatedMigration", + "displayName": "Do not propagate method deprecation through overrides since 1.9", + "enabled": false, + "description": "Reports a declarations that are propagated by `@Deprecated` annotation that will lead to compilation error since 1.9.\n\nMotivation types:\n\n* Implementation changes are required for implementation design/architectural reasons\n* Inconsistency in the design (things are done differently in different contexts)\n\n**More details:** [KT-47902: Do not propagate method deprecation through overrides](https://youtrack.jetbrains.com/issue/KT-47902)\n\nThe quick-fix copies `@Deprecated` annotation from the parent declaration.\n\n**Example:**\n\n\n open class Base {\n @Deprecated(\"Don't use\")\n open fun foo() {}\n }\n\n class Derived : Base() {\n override fun foo() {}\n }\n\nAfter the quick-fix is applied:\n\n\n open class Base {\n @Deprecated(\"Don't use\")\n open fun foo() {}\n }\n\n class Derived : Base() {\n @Deprecated(\"Don't use\")\n override fun foo() {}\n }\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.6 or higher." + }, + { + "shortName": "NoConstructorMigration", + "displayName": "Forbidden constructor call", + "enabled": false, + "description": "Reports a constructor calls on functional supertypes that will lead to compilation error since 1.9.\n\nMotivation types:\n\n* The implementation does not abide by a published spec or documentation\n\n**More details:** [KT-46344: No error for a super class constructor call on a function interface in supertypes list](https://youtrack.jetbrains.com/issue/KT-46344)\n\nThe quick-fix removes a constructor call.\n\n**Example:**\n\n\n abstract class A : () -> Int()\n\nAfter the quick-fix is applied:\n\n\n abstract class A : () -> Int\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.7 or higher." + }, + { + "shortName": "ObsoleteExperimentalCoroutines", + "displayName": "Experimental coroutines usages are deprecated since 1.3", + "enabled": true, + "description": "Reports code that uses experimental coroutines.\n\nSuch usages are incompatible with Kotlin 1.3+ and should be updated." + }, + { + "shortName": "FromClosedRangeMigration", + "displayName": "MIN_VALUE step in fromClosedRange() since 1.3", + "enabled": false, + "description": "Reports `IntProgression.fromClosedRange()` and `LongProgression.fromClosedRange()` with `MIN_VALUE` step.\n\n\nIt is prohibited to call `IntProgression.fromClosedRange()` and `LongProgression.fromClosedRange()` with\n`MIN_VALUE` step. All such calls should be checked during migration to Kotlin 1.3+.\n\n**Example:**\n\n\n IntProgression.fromClosedRange(12, 143, Int.MIN_VALUE)\n\nTo fix the problem change the step of the progression." + }, + { + "shortName": "DeclaringClassMigration", + "displayName": "Deprecated 'Enum.declaringClass' property", + "enabled": false, + "description": "Reports 'declaringClass' property calls on Enum that will lead to compilation error since 1.9.\n\n'Enum.getDeclaringClass' is among \"hidden\" Java functions which aren't normally visible by resolve. However, it's visible via synthetic\nproperty that is a front-end bug.\n\n**More details:** [KT-49653 Deprecate and remove Enum.declaringClass synthetic\nproperty](https://youtrack.jetbrains.com/issue/KT-49653)\n\nThe quick-fix replaces a call with 'declaringJavaClass'.\n\n**Example:**\n\n\n fun > foo(values: Array) {\n EnumSet.noneOf(values.first().declaringClass)\n }\n\nAfter the quick-fix is applied:\n\n\n fun > foo(values: Array) {\n EnumSet.noneOf(values.first().declaringJavaClass)\n }\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.7 or higher." + }, + { + "shortName": "ProhibitUseSiteTargetAnnotationsOnSuperTypesMigration", + "displayName": "Meaningless annotations targets on superclass", + "enabled": false, + "description": "Reports meaningless annotation targets on superclasses since Kotlin 1.4.\n\nAnnotation targets such as `@get:` are meaningless on superclasses and are prohibited.\n\n**Example:**\n\n\n interface Foo\n\n annotation class Ann\n\n class E : @field:Ann @get:Ann @set:Ann @setparam:Ann Foo\n\nAfter the quick-fix is applied:\n\n\n interface Foo\n\n annotation class Ann\n\n class E : Foo\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.4 or higher." + }, + { + "shortName": "ProhibitTypeParametersForLocalVariablesMigration", + "displayName": "Local variable with type parameters", + "enabled": false, + "description": "Reports local variables with type parameters.\n\nA type parameter for a local variable doesn't make sense because it can't be specialized.\n\n**Example:**\n\n\n fun main() {\n val x = \"\"\n }\n\nAfter the quick-fix is applied:\n\n\n fun main() {\n val x = \"\"\n }\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.4 or higher." + }, + { + "shortName": "ObsoleteKotlinJsPackages", + "displayName": "'kotlin.browser' and 'kotlin.dom' packages are deprecated since 1.4", + "enabled": true, + "description": "Reports usages of `kotlin.dom` and `kotlin.browser` packages.\n\nThese packages were moved to `kotlinx.dom` and `kotlinx.browser`\nrespectively in Kotlin 1.4+." + }, + { + "shortName": "RestrictReturnStatementTargetMigration", + "displayName": "Target label does not denote a function since 1.4", + "enabled": false, + "description": "Reports labels that don't points to a functions.\n\nIt's forbidden to declare a target label that does not denote a function.\n\nThe quick-fix removes the label.\n\n**Example:**\n\n\n fun testValLabelInReturn() {\n L@ val fn = { return@L }\n fn()\n }\n\nAfter the quick-fix is applied:\n\n\n fun testValLabelInReturn() {\n L@ val fn = { return }\n fn()\n }\n\nThis inspection only reports if the language level of the project or module is 1.4 or higher." + }, + { + "shortName": "ProhibitRepeatedUseSiteTargetAnnotationsMigration", + "displayName": "Repeated annotation which is not marked as '@Repeatable'", + "enabled": false, + "description": "Reports the repeated use of a non-`@Repeatable` annotation on property accessors.\n\n\nAs a result of using non-`@Repeatable` annotation multiple times, both annotation usages\nwill appear in the bytecode leading to an ambiguity in reflection calls.\n\n\nSince Kotlin 1.4 it's mandatory to either mark annotation as `@Repeatable` or not\nrepeat the annotation, otherwise it will lead to compilation error.\n\n**Example:**\n\n\n annotation class Foo(val x: Int)\n\n @get:Foo(10)\n val a: String\n @Foo(20) get() = \"foo\" // annotation repeated twice but not marked as @Repeatable\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.4 or higher." + } + ] + }, + { + "name": "Pattern validation", + "inspections": [ + { + "shortName": "PatternNotApplicable", + "displayName": "Pattern Annotation not applicable", + "enabled": false, + "description": "Reports when a `@Pattern` annotation is applied to an element with a type other than `String`.\n\n**Example:**\n\n\n @Pattern(\"\\\\d\\\\d\") int i;\n" + }, + { + "shortName": "PatternOverriddenByNonAnnotatedMethod", + "displayName": "Non-annotated Method overrides @Pattern Method", + "enabled": false, + "description": "Reports when a method without any `@Pattern` annotation overrides a `@Pattern` annotated method. This does not prevent error-highlighting inside the editor, however the overriding method will not be checked at runtime.\n\n\nA quick fix is provided to add a `@Pattern` annotation that matches the one from the superclass method. This ensures the\nruntime-check instrumentation works correctly.\n\n**Example:**\n\n\n abstract class Parent {\n abstract @Pattern(\"\\\\d\\\\d-\\\\d\\\\d\\\\d\") String getId();\n }\n class Child extends Parent {\n @Override String getId() { // warning here\n return \"12-345\";\n }\n }\n" + }, + { + "shortName": "PatternValidation", + "displayName": "Validate annotated patterns", + "enabled": false, + "description": "Reports expressions passed as arguments for `@Pattern` parameters and returned from `@Pattern`-annotated methods that do not match the specified pattern.\n\n**Example:**\n\n\n @Pattern(\"\\\\d\\\\d-\\\\d\\\\d\\\\d\") String getId() {\n return \"1\";\n }\n" + } + ] + }, + { + "name": "Serialization issues", + "inspections": [ + { + "shortName": "ComparatorNotSerializable", + "displayName": "'Comparator' class not declared 'Serializable'", + "enabled": false, + "description": "Reports classes that implement `java.lang.Comparator`, but do not implement `java.io.Serializable`.\n\n\nIf a non-serializable comparator is used to construct an ordered collection such\nas a `java.util.TreeMap` or `java.util.TreeSet`, then the\ncollection will also be non-serializable. This can result in unexpected and\ndifficult-to-diagnose bugs.\n\n\nSince subclasses of `java.lang.Comparator` are often stateless,\nsimply marking them serializable is a small cost to avoid such issues.\n\n**Example:**\n\n\n class Foo implements Comparator { // warning\n @Override\n public int compare(Object o1, Object o2) {\n /* ... */\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo implements Comparator, Serializable { // no warning here\n @Override\n public int compare(Object o1, Object o2) {\n /* ... */\n }\n }\n" + }, + { + "shortName": "SerializableStoresNonSerializable", + "displayName": "'Serializable' object implicitly stores non-'Serializable' object", + "enabled": false, + "description": "Reports any references to local non-`Serializable` variables outside `Serializable` lambdas, local and anonymous classes.\n\n\nWhen a local variable is referenced from an anonymous class, its value\nis stored in an implicit field of that class. The same happens\nfor local classes and lambdas. If the variable is of a\nnon-`Serializable` type, serialization will fail.\n\n**Example:**\n\n\n interface A extends Serializable {\n abstract void foo();\n }\n class B {}\n class C {\n void foo() {\n B b = new B();\n A a = new A() {\n @Override\n public void foo() {\n System.out.println(b); // warning\n }\n };\n }\n }\n" + }, + { + "shortName": "ExternalizableWithoutPublicNoArgConstructor", + "displayName": "'Externalizable' class without 'public' no-arg constructor", + "enabled": true, + "description": "Reports `Externalizable` classes without a public no-argument constructor.\n\nWhen an `Externalizable` object is reconstructed, an instance is created using the public\nno-arg constructor before the `readExternal` method called. If a public\nno-arg constructor is not available, a `java.io.InvalidClassException` will be\nthrown at runtime." + }, + { + "shortName": "MissingSerialAnnotation", + "displayName": "'@Serial' annotation could be used", + "enabled": true, + "description": "Reports methods and fields in the `Serializable` and `Externalizable` classes that are suitable to be annotated with the `java.io.Serial` annotation. The quick-fix adds the annotation.\n\n**Example:**\n\n\n class Main implements Serializable {\n private static final long serialVersionUID = 7874493593505141603L;\n\n private void writeObject(ObjectOutputStream out) throws IOException {\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Main implements Serializable {\n @Serial\n private static final long serialVersionUID = 7874493593505141603L;\n\n @Serial\n private void writeObject(ObjectOutputStream out) throws IOException {\n }\n }\n\n**Example:**\n\n\n class Main implements Externalizable {\n protected Object readResolve() throws ObjectStreamException {\n return \"SomeObject\";\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Main implements Externalizable {\n @Serial\n protected Object readResolve() throws ObjectStreamException {\n return \"SomeObject\";\n }\n }\n\nFor more information about all possible cases, refer the documentation for `java.io.Serial`.\n\nThis inspection only reports if the language level of the project or module is 14 or higher.\n\nNew in 2020.3" + }, + { + "shortName": "SerialPersistentFieldsWithWrongSignature", + "displayName": "'serialPersistentFields' field not declared 'private static final ObjectStreamField[]'", + "enabled": false, + "description": "Reports `Serializable` classes whose `serialPersistentFields` field is not declared as `private static final ObjectStreamField[]`.\n\n\nIf a `serialPersistentFields` field is not declared with those modifiers,\nthe serialization behavior will be as if the field was not declared at all.\n\n**Example:**\n\n\n class List implements Serializable {\n private List next;\n\n ObjectStreamField[] serialPersistentFields = {new ObjectStreamField(\"next\", List.class)};\n\n }\n" + }, + { + "shortName": "NonSerializableObjectBoundToHttpSession", + "displayName": "Non-serializable object bound to 'HttpSession'", + "enabled": false, + "description": "Reports objects of classes not implementing `java.io.Serializable` used as arguments to `javax.servlet.http.HttpSession.setAttribute()` or `javax.servlet.http.HttpSession.putValue()`.\n\n\nSuch objects will not be serialized if the `HttpSession` is passivated or migrated,\nand may result in difficult-to-diagnose bugs.\n\n\nThis inspection assumes objects of the types `java.util.Collection` and\n`java.util.Map` to be `Serializable`,\nunless type parameters are non-`Serializable`.\n\n**Example:**\n\n\n void foo(HttpSession session) {\n session.setAttribute(\"foo\", new NonSerializable());\n }\n static class NonSerializable {}\n" + }, + { + "shortName": "ExternalizableWithSerializationMethods", + "displayName": "Externalizable class with 'readObject()' or 'writeObject()'", + "enabled": false, + "description": "Reports `Externalizable` classes that define `readObject()` or `writeObject()` methods. These methods are not called for serialization of `Externalizable` objects.\n\n**Example:**\n\n\n abstract class Crucial implements Externalizable {\n int value;\n private void readObject(ObjectInputStream in) {\n value = in.readInt();\n }\n }\n" + }, + { + "shortName": "SerializableRecordContainsIgnoredMembers", + "displayName": "'record' contains ignored members", + "enabled": true, + "description": "Reports serialization methods or fields defined in a `record` class. Serialization methods include `writeObject()`, `readObject()`, `readObjectNoData()`, `writeExternal()`, and `readExternal()` and the field `serialPersistentFields`. These members are not used for the serialization or deserialization of records and therefore unnecessary.\n\n**Examples:**\n\n\n record R1() implements Serializable {\n // The field is ignored during record serialization\n @Serial\n private static final ObjectStreamField[] serialPersistentFields = new ObjectStreamField[0];\n\n // The method is ignored during record serialization\n @Serial\n private void writeObject(ObjectOutputStream out) throws IOException {\n }\n }\n\n\n record R2() implements Externalizable {\n // The method is ignored during record serialization\n @Override\n public void writeExternal(ObjectOutput out) throws IOException {\n }\n\n // The method is ignored during record serialization\n @Override\n public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {\n }\n }\n\nThis inspection only reports if the language level of the project or module is 14 or higher.\n\nNew in 2020.3" + }, + { + "shortName": "ReadObjectInitialization", + "displayName": "Instance field may not be initialized by 'readObject()'", + "enabled": false, + "description": "Reports fields that are not guaranteed to be initialized after the object is deserialized by the `readObject()` method.\n\nThe inspection doesn't report transient fields.\n\n\nNote: This inspection uses a very conservative control flow algorithm, and may incorrectly report fields\nas uninitialized.\n\n**Example:**\n\n\n class DataObject implements Serializable {\n String s; // s is not initialized in readObject\n int i;\n\n private void readObject(ObjectInputStream stream) throws IOException {\n i = stream.readInt();\n }\n }\n" + }, + { + "shortName": "NonSerializableFieldInSerializableClass", + "displayName": "Non-serializable field in a 'Serializable' class", + "enabled": true, + "description": "Reports non-serializable fields in classes that implement `java.io.Serializable`. Such fields will result in runtime exceptions if the object is serialized.\n\n\nFields declared\n`transient` or `static`\nare not reported, nor are fields of classes that have a `writeObject` method defined.\n\n\nThis inspection assumes fields of the types\n`java.util.Collection` and\n`java.util.Map` to be\n`Serializable`, unless the types\nthey are declared in are non-`Serializable`.\n\n**Example:**\n\n\n class NonSerializableClass {}\n\n public class SerializableClass implements Serializable {\n NonSerializableClass clazz; // warning: Non-serializable field 'clazz' in a Serializable class\n static NonSerializableClass staticClazz; // no warnings\n }\n \n\nUse the following options to configure the inspection:\n\n* List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit `Serializable` from a superclass but are not intended for serialization.\n* List annotations that will make the inspection ignore the annotated fields.\n* Whether to ignore fields initialized with an anonymous class." + }, + { + "shortName": "TransientFieldNotInitialized", + "displayName": "Transient field is not initialized on deserialization", + "enabled": false, + "description": "Reports `transient` fields that are initialized during normal object construction, but whose class does not have a `readObject` method.\n\n\nAs `transient` fields are not serialized they need\nto be initialized separately in a `readObject()` method\nduring deserialization.\n\n\nAny `transient` fields that\nare not initialized during normal object construction are considered to use the default\ninitialization and are not reported by this inspection.\n\n**Example:**\n\n\n class Person implements Serializable {\n transient String name = \"Default\"; //warning, can actually be a null after deserialization\n transient String surname; //null is considered the default value and not reported\n }\n" + }, + { + "shortName": "ReadObjectAndWriteObjectPrivate", + "displayName": "'readObject()' or 'writeObject()' not declared 'private'", + "enabled": false, + "description": "Reports `Serializable` classes where the `readObject` or `writeObject` methods are not declared private. There is no reason these methods should ever have a higher visibility than `private`.\n\n\nA quick-fix is suggested to make the corresponding method `private`.\n\n**Example:**\n\n\n public class Test implements Serializable {\n public void readObject(ObjectInputStream stream) {\n /* ... */\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class Test implements Serializable {\n private void readObject(ObjectInputStream stream) {\n /* ... */\n }\n }\n" + }, + { + "shortName": "SerializableWithUnconstructableAncestor", + "displayName": "Serializable class with unconstructable ancestor", + "enabled": false, + "description": "Reports `Serializable` classes whose closest non-serializable ancestor doesn't have a no-argument constructor. Such classes cannot be deserialized and will fail with an `InvalidClassException`.\n\n**Example:**\n\n\n class Ancestor {\n private String name;\n Ancestor(String name) {\n this.name = name;\n }\n }\n\n // warning on this class because the superclass is not\n // serializable, and its constructor takes arguments\n class Descendant extends Ancestor implements Serializable {\n Descendant() {\n super(\"Bob\");\n }\n }\n" + }, + { + "shortName": "SerialVersionUIDNotStaticFinal", + "displayName": "'serialVersionUID' field not declared 'private static final long'", + "enabled": false, + "description": "Reports `Serializable` classes whose `serialVersionUID` field is not declared `private static final long`.\n\n**Example:**\n\n\n class SampleClass implements Serializable {\n private long serialVersionUID = 1; // field of a Serializable class is not declared 'private static final long'\n\n public SampleClass() {\n System.out.println(serialVersionUID);\n }\n }\n" + }, + { + "shortName": "SerializableInnerClassWithNonSerializableOuterClass", + "displayName": "Serializable non-'static' inner class with non-Serializable outer class", + "enabled": false, + "description": "Reports non-static inner classes that implement `Serializable` and are declared inside a class that doesn't implement `Serializable`.\n\n\nSuch classes are unlikely to serialize correctly due to implicit references to the outer class.\n\n**Example:**\n\n\n class A {\n class Main implements Serializable {\n }\n }\n\nUse the following options to configure the inspection:\n\n* List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit `Serializable` from a superclass but are not intended for serialization.\n* Whether to ignore `Serializable` anonymous classes." + }, + { + "shortName": "SerializableHasSerializationMethods", + "displayName": "Serializable class without 'readObject()' and 'writeObject()'", + "enabled": false, + "description": "Reports `Serializable` classes that do not implement `readObject()` and `writeObject()` methods.\n\n\nIf `readObject()` and `writeObject()` methods are not implemented,\nthe default serialization algorithms are used,\nwhich may be sub-optimal for performance and compatibility in many environments.\n\n\nUse the following options to configure the inspection:\n\n* List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit `Serializable` from a superclass but are not intended for serialization.\n* Whether to ignore `Serializable` classes without non-static fields.\n* Whether to ignore `Serializable` anonymous classes." + }, + { + "shortName": "NonSerializableWithSerialVersionUIDField", + "displayName": "Non-serializable class with 'serialVersionUID'", + "enabled": false, + "description": "Reports non-`Serializable` classes that define a `serialVersionUID` field. A `serialVersionUID` field in that context normally indicates an error because the field will be ignored and the class will not be serialized.\n\n**Example:**\n\n\n public class IWantToSerializeThis {\n private static final long serialVersionUID = 2669293150219020249L;\n }\n" + }, + { + "shortName": "SerializableInnerClassHasSerialVersionUIDField", + "displayName": "Serializable non-static inner class without 'serialVersionUID'", + "enabled": false, + "description": "Reports non-static inner classes that implement `java.io.Serializable`, but do not define a `serialVersionUID` field.\n\n\nWithout a `serialVersionUID` field, any change to the class will make previously\nserialized versions unreadable. It is strongly recommended that `Serializable`\nnon-static inner classes have a `serialVersionUID` field, otherwise the default\nserialization algorithm may result in serialized versions being incompatible between\ncompilers due to differences in synthetic accessor methods.\n\n\nA quick-fix is suggested to add the missing `serialVersionUID` field.\n\n**Example:**\n\n\n class Outer {\n class Inner implements Serializable {}\n }\n\nAfter the quick-fix is applied:\n\n\n class Outer {\n class Inner implements Serializable {\n private static final long serialVersionUID = -7004458730436243902L;\n }\n }\n\nUse the following options to configure the inspection:\n\n* List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit `Serializable` from a superclass but are not intended for serialization.\n* Whether to ignore `Serializable` anonymous classes." + }, + { + "shortName": "TransientFieldInNonSerializableClass", + "displayName": "Transient field in non-serializable class", + "enabled": false, + "description": "Reports `transient` fields in classes that do not implement `java.io.Serializable`.\n\n**Example:**\n\n\n public class NonSerializableClass {\n private transient String password;\n }\n\nAfter the quick-fix is applied:\n\n\n public class NonSerializableClass {\n private String password;\n }\n" + }, + { + "shortName": "SerialAnnotationUsedOnWrongMember", + "displayName": "'@Serial' annotation used on wrong member", + "enabled": true, + "description": "Reports methods and fields in the `Serializable` and `Externalizable` classes that are not suitable to be annotated with the `java.io.Serial` annotation.\n\n**Examples:**\n\n\n class Test implements Serializable {\n @Serial // The annotated field is not a part of serialization mechanism because it's not final\n private static long serialVersionUID = 7874493593505141603L;\n\n @Serial // The annotated method is not a part of the serialization mechanism because it's not private\n void writeObject(ObjectOutputStream out) throws IOException {\n }\n }\n\n\n class Test implements Externalizable {\n @Serial // The annotated method is not a part of the serialization mechanism as it's inside Externalizable class\n private void writeObject(ObjectOutputStream out) throws IOException {\n }\n }\n\nFor information about all valid cases, refer the documentation for `java.io.Serial`.\n\nThis inspection only reports if the language level of the project or module is 14 or higher.\n\nNew in 2020.3" + }, + { + "shortName": "ReadResolveAndWriteReplaceProtected", + "displayName": "'readResolve()' or 'writeReplace()' not declared 'protected'", + "enabled": false, + "description": "Reports classes that implement `java.io.Serializable` where the `readResolve()` or `writeReplace()` methods are not declared `protected`.\n\n\nDeclaring `readResolve()` and `writeReplace()` methods `private`\ncan force subclasses to silently ignore them, while declaring them\n`public` allows them to be invoked by untrusted code.\n\n\nIf the containing class is declared `final`, these methods can be declared `private`.\n\n**Example:**\n\n\n class ClassWithSerialization implements Serializable {\n public Object writeReplace() { // warning: 'writeReplace()' not declared protected\n ...\n }\n }\n \n" + }, + { + "shortName": "NonSerializableWithSerializationMethods", + "displayName": "Non-serializable class with 'readObject()' or 'writeObject()'", + "enabled": false, + "description": "Reports non-`Serializable` classes that define `readObject()` or `writeObject()` methods. Such methods in that context normally indicate an error.\n\n**Example:**\n\n\n public class SampleClass {\n private void readObject(ObjectInputStream str) {}\n private void writeObject(ObjectOutputStream str) {}\n }\n" + }, + { + "shortName": "NonSerializableObjectPassedToObjectStream", + "displayName": "Non-serializable object passed to 'ObjectOutputStream'", + "enabled": false, + "description": "Reports non-`Serializable` objects used as arguments to `java.io.ObjectOutputStream.write()`. Such calls will result in runtime exceptions.\n\n\nThis inspection assumes objects of the types `java.util.Collection` and\n`java.util.Map` to be `Serializable`, unless the types\nthey are declared in are non-`Serializable`.\n\n**Example:**\n\n\n public class IWantToSerializeThis {\n public static void main(String[] args) throws IOException {\n try(var stream = new ObjectOutputStream(Files.newOutputStream(Paths.get(\"output\")))) {\n // Warning -- will fail with NotSerializableException\n stream.writeObject(new IWantToSerializeThis());\n }\n }\n }\n" + } + ] + }, + { + "name": "GPath", + "inspections": [ + { + "shortName": "GroovyListSetCanBeKeyedAccess", + "displayName": "Call to List.set can be keyed access", + "enabled": false, + "description": "Reports calls to `java.util.List.set()` methods. Such calls could be replaced by the shorter and clearer keyed access form.\n\n**Example:**\n\n\n def list = [\"foo\"]\n list.set(0, \"bar\") // list.set(0, \"bar\") could be replaced with list[0] = \"bar\"\n\nAfter the quick-fix is applied:\n\n\n def list = [\"foo\"]\n list[0] = \"bar\"\n\n" + }, + { + "shortName": "GroovyMapPutCanBeKeyedAccess", + "displayName": "Call to Map.put can be keyed access", + "enabled": false, + "description": "Reports calls to `java.util.Map.put()` methods. Such calls could be replaced by the shorter and clearer keyed access form.\n\n**Example:**\n\n\n def map = [\"foo\": \"bar\"]\n map.put(\"foo\", \"baz\") // map.put(\"foo\", \"baz\") could be replaced with map[\"foo\"] = \"baz\"\n\nAfter the quick-fix is applied:\n\n\n def map = [\"foo\": \"bar\"]\n map[\"foo\"] = \"baz\"\n\n" + }, + { + "shortName": "GroovyMapGetCanBeKeyedAccess", + "displayName": "Call to Map.get can be keyed access", + "enabled": false, + "description": "Reports calls to `java.util.Map.get()` methods. Such calls could be replaced by the shorter and clearer keyed access form.\n\n**Example:**\n\n\n def map = [\"foo\": \"bar\"]\n def str = map.get(\"foo\") // map.get(\"foo\") could be replaced with map[\"foo\"]\n\nAfter the quick-fix is applied:\n\n\n def map = [\"foo\": \"bar\"]\n def str = map[\"foo\"]\n\n" + }, + { + "shortName": "GroovyListGetCanBeKeyedAccess", + "displayName": "Call to List.get can be keyed access", + "enabled": false, + "description": "Reports calls to `java.util.List.get()` methods. Such calls could be replaced by the shorter and clearer keyed access form.\n\n**Example:**\n\n\n def list = [\"foo\"]\n def str = list.get(0) // list.get(0) could be replaced with list[0]\n\nAfter the quick-fix is applied:\n\n\n def list = [\"foo\"]\n def str = list[0]\n\n" + } + ] + }, + { + "name": "Embedded", + "inspections": [ + { + "shortName": "ConnectionResource", + "displayName": "Connection opened but not safely closed", + "enabled": false, + "description": "Reports Java ME `javax.microedition.io.Connection` resources that are not opened in front of a `try` block and closed in the corresponding `finally` block. Such resources may be inadvertently leaked if an exception is thrown before the resource is closed.\n\n**Example:**\n\n\n void example() throws IOException {\n Connection c = Connector.open(\"foo\");\n }\n" + }, + { + "shortName": "OverlyLargePrimitiveArrayInitializer", + "displayName": "Overly large initializer for array of primitive type", + "enabled": false, + "description": "Reports array initializer expressions for primitive arrays that contain too many elements. Such initializers may result in overly large class files because code must be generated to initialize each array element. In memory or bandwidth constrained environments, it may be more efficient to load large arrays of primitives from resource files.\n\n\nThis inspection is intended for Java ME and other highly resource constrained environments.\nApplying the results of this inspection without consideration might have negative effects on code clarity and design.\n\n\nUse the option to specify the maximum number of elements to allow in primitive array initializers." + }, + { + "shortName": "SingleCharacterStartsWith", + "displayName": "Single character 'startsWith()' or 'endsWith()'", + "enabled": false, + "description": "Reports calls to `String.startsWith()` and `String.endsWith()` where single character string literals are passed as an argument.\n\n\nA quick-fix is suggested to replace such calls with more efficiently implemented `String.charAt()`.\n\n\nHowever, the performance gain of such change is minimal and the code becomes less readable because of the extra non-zero length check,\nso it is recommended to apply the quick-fix only inside tight loops.\n\n\nThis inspection is intended for Java ME and other highly resource constrained environments.\nApplying the results of this inspection without consideration might have negative effects on code clarity and design.\n\n**Example:**\n\n\n boolean startsWithX(String s) {\n return s.startsWith(\"x\");\n }\n\nAfter the quick-fix is applied:\n\n\n boolean startsWithX(String s) {\n return !s.isEmpty() && s.charAt(0) == 'x';\n }\n" + }, + { + "shortName": "AbstractClassWithOnlyOneDirectInheritor", + "displayName": "Abstract class with a single direct inheritor", + "enabled": false, + "description": "Reports abstract classes that have precisely one direct inheritor. While such classes may offer admirable clarity of design, in memory-constrained or bandwidth-limited environments, they needlessly increase the total footprint of the application. Consider merging the abstract class with its inheritor.\n\n\nThis inspection is intended for Java ME and other highly resource constrained environments.\nApplying the results of this inspection without consideration might have negative effects on code clarity and design.\n\n**Example:**\n\n\n abstract class Base {} // will be reported\n\n class Inheritor extends Base {}\n" + }, + { + "shortName": "PrivateMemberAccessBetweenOuterAndInnerClass", + "displayName": "Synthetic accessor call", + "enabled": false, + "description": "Reports references from a nested class to non-constant `private` members of an outer class. For such references, javac will generate package-private synthetic accessor methods, which may compromise the security because members appearing to be private will in fact be accessible from the entire package.\n\n\nA nested class and its outer class are compiled to separate\nclass files. The Java virtual machine normally prohibits access from a class to private fields and methods of\nanother class. To enable access from a nested class to private members of an outer class, javac creates a package-private\nsynthetic accessor method.\n\n\nBy making the `private` member package-private instead, the actual accessibility is made explicit.\nThis also saves a little bit of memory, which may improve performance in resource constrained environments.\n\n\nThis inspection only reports if the language level of the project or module is 10 or lower.\nUnder Java 11 and higher accessor methods are not generated anymore,\nbecause of nest-based access control ([JEP 181](https://openjdk.org/jeps/181)).\n\n**Example:**\n\n\n class Outer {\n private void x() {}\n\n class Inner {\n void y() {\n x();\n }\n }\n }\n\nAfter the quick fix is applied:\n\n\n class Outer {\n void x() {}\n\n class Inner {\n void y() {\n x();\n }\n }\n }\n" + }, + { + "shortName": "InterfaceWithOnlyOneDirectInheritor", + "displayName": "Interface with a single direct inheritor", + "enabled": false, + "description": "Reports interfaces that have precisely one direct inheritor. While such interfaces may offer admirable clarity of design, in memory-constrained or bandwidth-limited environments, they needlessly increase the total footprint of the application. Consider merging the interface with its inheritor.\n\n\nThis inspection is intended for Java ME and other highly resource constrained environments.\nApplying the results of this inspection without consideration might have negative effects on code clarity and design." + }, + { + "shortName": "RecordStoreResource", + "displayName": "'RecordStore' opened but not safely closed", + "enabled": false, + "description": "Reports Java ME `javax.microedition.rms.RecordStore` resources that are not opened in front of a `try` block and closed in the corresponding `finally` block.\n\nSuch resources may be inadvertently leaked if an exception is thrown before the resource is closed.\n\n\nThis inspection is intended for Java ME and other highly resource constrained environments.\nApplying the results of this inspection without consideration might have negative effects on code clarity and design.\n\n**Example:**\n\n\n void foo1() throws RecordStoreException {\n RecordStore rs = RecordStore.openRecordStore(\"bar\", true); // warning\n }\n void foo2() throws RecordStoreException {\n RecordStore rs = RecordStore.openRecordStore(\"bar\", true); // no warning\n try {\n /* ... */\n } finally {\n rs.closeRecordStore();\n }\n }\n" + }, + { + "shortName": "MultiplyOrDivideByPowerOfTwo", + "displayName": "Multiplication or division by power of two", + "enabled": false, + "description": "Reports multiplication of an integer value by a constant integer that can be represented as a power of two. Such expressions can be replaced with right or left shift operations for a possible performance improvement.\n\n\nNote that this inspection is not relevant for modern JVMs (e. g.,\nHotSpot or OpenJ9) because their JIT compilers will perform this optimization.\nIt might only be useful in some embedded systems where no JIT compilation is performed.\n\n**Example:**\n\n\n int y = x * 4;\n\nA quick-fix is suggested to replace the multiplication or division operation with the shift operation:\n\n\n int y = x << 2;\n\n\nUse the option to make the inspection also report division by a power of two.\nNote that replacing a power of two division with a shift does not work for negative numbers." + }, + { + "shortName": "MethodCallInLoopCondition", + "displayName": "Method call in loop condition", + "enabled": false, + "description": "Reports method calls in the condition part of a loop statement. In highly resource constrained environments, such calls may have adverse performance implications.\n\n\nApplying the results of this inspection without consideration might have negative effects on code clarity and design.\nThis inspection is intended for Java ME and other highly resource constrained environments.\n\n**Example:**\n\n\n String s = \"example\";\n for (int i = 0; i < s.length(); i++) {\n System.out.println(s.charAt(i));\n }\n\nAfter the quick-fix is applied:\n\n\n String s = \"example\";\n int length = s.length();\n for (int i = 0; i < length; i++) {\n System.out.println(s.charAt(i));\n }\n\n\nUse the option to ignore calls to common Java iteration methods like `Iterator.hasNext()`\nand known methods with side-effects like `Atomic*.compareAndSet`." + }, + { + "shortName": "ArrayLengthInLoopCondition", + "displayName": "Array.length in loop condition", + "enabled": false, + "description": "Reports accesses to the `.length` property of an array in the condition part of a loop statement. In highly resource constrained environments, such calls may have adverse performance implications.\n\n\nThis inspection is intended for Java ME and other highly resource constrained environments.\nApplying the results of this inspection without consideration might have negative effects on code clarity and design.\n\n**Example:**\n\n\n void foo(Object[] x) {\n for (int i = 0; i < x.length; i++) { /**/ }\n }\n" + }, + { + "shortName": "CheckForOutOfMemoryOnLargeArrayAllocation", + "displayName": "Large array allocation with no OutOfMemoryError check", + "enabled": false, + "description": "Reports large array allocations which do not check for `java.lang.OutOfMemoryError`. In memory constrained environments, allocations of large data objects should probably be checked for memory depletion.\n\n\nThis inspection is intended for Java ME and other highly resource constrained environments.\nApplying the results of this inspection without consideration might have negative effects on code clarity and design.\n\n\nUse the option to specify the maximum number of elements to allow in unchecked array allocations." + } + ] + }, + { + "name": "Imports", + "inspections": [ + { + "shortName": "UNUSED_IMPORT", + "displayName": "Unused import", + "enabled": false, + "description": "Reports redundant `import` statements.\n\nRegular `import` statements are unnecessary when not using imported classes and packages in the source file.\nThe same applies to imported `static` fields and methods that aren't used in the source file.\n\n**Example:**\n\n\n import java.util.ArrayList;\n public class Example {\n public static void main(String[] args) {\n System.out.println(\"Hello World!\");\n }\n }\n\nAfter the quick fix is applied:\n\n\n public class Example {\n public static void main(String[] args) {\n System.out.println(\"Hello World!\");\n }\n }\n" + }, + { + "shortName": "SingleClassImport", + "displayName": "Single class import", + "enabled": false, + "description": "Reports `import` statements that import single classes (as opposed to entire packages).\n\nSome coding standards prohibit such `import` statements.\n\n\nYou can configure IntelliJ IDEA to detect and fix such statements with its **Optimize Imports** command. Go to\n[Settings \\| Editor \\| Code Style \\| Java \\| Imports](settings://preferences.sourceCode.Java?Use%20single%20class%20import)\nand clear the **Use single class import** checkbox. Thus this inspection is mostly useful for\noffline reporting on code bases that you don't intend to change." + }, + { + "shortName": "OnDemandImport", + "displayName": "'*' import", + "enabled": false, + "description": "Reports any `import` statements that cover entire packages ('\\* imports').\n\nSome coding standards prohibit such `import` statements.\n\n\nYou can configure IntelliJ IDEA to detect and fix such statements with its **Optimize Imports**\ncommand. Go to [Settings \\| Editor \\| Code Style \\| Java \\| Imports](settings://preferences.sourceCode.Java?Use%20single%20class%20import),\nmake sure that the **Use single class import** option is enabled, and specify values in the\n**Class count to use import with '\\*'** and **Names count to use static import with '\\*'** fields.\nThus this inspection is mostly useful for offline reporting on code bases that you don't\nintend to change." + }, + { + "shortName": "JavaLangImport", + "displayName": "Unnecessary import from the 'java.lang' package", + "enabled": false, + "description": "Reports `import` statements that refer to the `java.lang` package.\n\n\n`java.lang` classes are always implicitly imported, so such import statements are\nredundant and confusing.\n\n\nSince IntelliJ IDEA can automatically detect and fix such statements with its **Optimize Imports** command, this inspection is mostly useful for offline reporting on code bases that you don't intend to change." + }, + { + "shortName": "SamePackageImport", + "displayName": "Unnecessary import from the same package", + "enabled": false, + "description": "Reports `import` statements that refer to the same package as the containing file.\n\n\nSame-package files are always implicitly imported, so such `import`\nstatements are redundant and confusing.\n\n\nSince IntelliJ IDEA can automatically detect and fix such statements with its **Optimize Imports**\ncommand, this inspection is mostly useful for offline reporting on code bases that you\ndon't intend to change." + }, + { + "shortName": "StaticImport", + "displayName": "Static import", + "enabled": false, + "description": "Reports `import static` statements.\n\nSuch `import` statements are not supported under Java 1.4 or earlier JVMs.\n\nConfigure the inspection:\n\n* Use the table below to specify the classes that will be ignored by the inspection when used in an `import static` statement.\n* Use the **Ignore single field static imports** checkbox to ignore single-field `import static` statements.\n* Use the **Ignore single method static imports** checkbox to ignore single-method `import static` statements." + } + ] + }, + { + "name": "Data flow", + "inspections": [ + { + "shortName": "BooleanVariableAlwaysNegated", + "displayName": "Boolean variable is always inverted", + "enabled": false, + "description": "Reports boolean variables or fields which are always negated when their value is used.\n\nExample:\n\n\n void m() {\n boolean b = true; //boolean variable 'b' is always inverted\n System.out.println(!b);\n }\n" + }, + { + "shortName": "ConstantValueVariableUse", + "displayName": "Use of variable whose value is known to be constant", + "enabled": false, + "description": "Reports any usages of variables which are known to be constant.\n\nThis is the case if the (read) use of the variable is surrounded by an\n`if`, `while`, or `for`\nstatement with an `==` condition which compares the variable with a constant.\nIn this case, the use of a variable which is known to be constant can be replaced with\nan actual constant.\n\nExample:\n\n\n private static void foo(double number) {\n if (number == 1.0) {\n f(number);\n }\n }\n private static void f(double number) {}\n\nAfter the quick-fix is applied:\n\n\n private static void foo(double number) {\n if (number == 1.0) {\n f(1.0);\n }\n }\n private static void f(double number) {}\n" + }, + { + "shortName": "ReuseOfLocalVariable", + "displayName": "Reuse of local variable", + "enabled": false, + "description": "Reports local variables that are \"reused\" overwriting their values with new values unrelated to their original use.\n\nSuch a local variable reuse may be confusing,\nas the intended semantics of the local variable may vary with each use. It may also be\nprone to bugs if due to the code changes, the values that have been considered overwritten actually\nappear to be alive. It is a good practice to keep variable lifetimes as short as possible, and not\nto reuse local variables for the sake of brevity.\n\nExample:\n\n\n void x() {\n String s = \"one\";\n System.out.println(\"s = \" + s);\n s = \"two\"; //reuse of local variable 's'\n System.out.println(\"s = \" + s);\n }\n" + }, + { + "shortName": "BooleanMethodIsAlwaysInverted", + "displayName": "Boolean method is always inverted", + "enabled": false, + "description": "Reports methods with a `boolean` return type that are used only in a negated context.\n\nThe quick-fix makes it possible to rename and invert the method.\nDue to performance reasons, some methods might not be highlighted in the editor.\n\nExample:\n\n\n class C {\n boolean alwaysTrue() {\n return true;\n }\n\n void f() {\n if (!alwaysTrue()) {\n return;\n }\n }\n boolean member = !alwaysTrue();\n }\n\nAfter the quick-fix is applied:\n\n\n class C {\n boolean alwaysFalse() {\n return false;\n }\n\n void f() {\n if (alwaysFalse()) {\n return;\n }\n }\n boolean member = alwaysFalse();\n }\n" + }, + { + "shortName": "TooBroadScope", + "displayName": "Scope of variable is too broad", + "enabled": false, + "description": "Reports any variable declarations that can be moved to a smaller scope.\n\nThis inspection is especially\nuseful for *Pascal style* declarations at the beginning of a method. Additionally variables with too broad a\nscope are also often left behind after refactorings.\n\n**Example:**\n\n\n StringBuilder sb = new StringBuilder();\n System.out.println();\n sb.append(1);\n\nAfter the quick-fix is applied:\n\n\n System.out.println();\n StringBuilder sb = new StringBuilder();\n sb.append(1);\n\nConfigure the inspection:\n\n* Use the **Only report variables that can be moved into inner blocks** option to report only those variables that can be moved inside deeper code blocks. For example, when the option is enabled, the movement will not be suggested for the `sb` variable above. However, it will be suggested for the following code:\n\n\n StringBuilder sb = new StringBuilder(a);\n if (flag) {\n sb.append(1);\n }\n\n* Use the **Report variables with a new expression as initializer\n (potentially unsafe)** option to report variables that are initialized with a new expression. This makes the inspection potentially unsafe when the constructor has non-local side effects. For example, when the option is enabled, the movement will be suggested for the `foo` variable:\n\n\n class Foo {\n static List fooList = new ArrayList<>();\n String bar;\n\n Foo(String bar) {\n this.bar = bar;\n fooList.add(this);\n }\n\n public static void main(String[] args) {\n // movement is possible even though is unsafe\n Foo foo = new Foo(\"bar\");\n System.out.println(fooList.size());\n System.out.println(foo.bar);\n }\n }\n" + }, + { + "shortName": "LawOfDemeter", + "displayName": "Method call violates Law of Demeter", + "enabled": false, + "description": "Reports [Law of Demeter](https://en.wikipedia.org/wiki/Law_of_Demeter) violations.\n\nThe Law of Demeter is not really a law, but specifies a style guideline: never call a method on an object received from another call.\nThe code that follows this guideline is easier to maintain, adapt, and refactor, has less coupling between methods, less duplication,\nand better information hiding. On the other hand, you may need to write many wrapper methods to meet this guideline.\n\n**Example:**\n\n\n boolean pay(Customer c, Invoice invoice) {\n int dollars = c.getWallet().getDollars(); // violation\n if (dollars >= invoice.getAmount()) {\n Wallet w = c.getWallet();\n w.subtract(invoice.getAmount()); // violation\n return true;\n }\n return false;\n }\n\nThe above example might be better implemented as a method `payInvoice(Invoice invoice)` in `Customer`.\n\n**Example:**\n\n\n Engine engine = car.getEngine();\n int cylinders = engine.getNumberOfCylinders();\n" + }, + { + "shortName": "UnnecessaryLocalVariable", + "displayName": "Redundant local variable", + "enabled": false, + "description": "Reports unnecessary local variables that add nothing to the comprehensibility of a method, including:\n\n* Local variables that are immediately returned.\n* Local variables that are immediately assigned to another variable and then not used.\n* Local variables that always have the same value as another local variable or parameter.\n\n**Example:**\n\n\n boolean yes() {\n boolean b = true;\n return b;\n }\n\nAfter the quick-fix is applied:\n\n\n boolean yes() {\n return true;\n }\n \nConfigure the inspection:\n\n* Use the **Ignore immediately returned or thrown variables** option to ignore immediately returned or thrown variables. Some coding styles suggest using such variables for clarity and ease of debugging.\n* Use the **Ignore variables which have an annotation** option to ignore annotated variables." + }, + { + "shortName": "NegativelyNamedBooleanVariable", + "displayName": "Negatively named boolean variable", + "enabled": false, + "description": "Reports negatively named variables, for example: `disabled`, `hidden`, or `isNotChanged`.\n\nUsually, inverting the `boolean` value and removing the negation from the name makes the code easier to understand.\n\nExample:\n\n\n boolean disabled = false;\n" + }, + { + "shortName": "GroovyVariableCanBeFinal", + "displayName": "Variable can be final", + "enabled": false, + "description": "Reports parameters or local variables that may have a final modifier added.\n\n**Example:**\n\n\n def list = [1,2,3]\n return list\n\nAfter the quick-fix is applied:\n\n\n final def list = [1,2,3]\n return list\n\nFor more information, see the same inspection in Java." + }, + { + "shortName": "GroovyUnusedIncOrDec", + "displayName": "Unused incrementing or decrementing", + "enabled": false, + "description": "Reports unused incrementing and decrementing expressions." + }, + { + "shortName": "GroovyVariableNotAssigned", + "displayName": "Variable not assigned", + "enabled": false, + "description": "Reports variables that might not have been initialized." + }, + { + "shortName": "GroovyMissingReturnStatement", + "displayName": "Missing return statement", + "enabled": false, + "description": "Reports missing `return` statements at the end of methods with a non-**void** return type. The end of method should be reachable by the method's execution flow.\n\n**Example:**\n\n\n String foo(int a) {\n if (a > 0) {\n return \"more than zero\"\n }\n } // foo(-1) will return 'null'\n\n int bar(int a) {\n if (a > 0) {\n return a\n }\n } // bar(-1) will fall with runtime exception\n\n" + }, + { + "shortName": "GroovyUnusedAssignment", + "displayName": "Unused assignment", + "enabled": false, + "description": "Reports the cases where a variable is redundant as its value is never used after its assignment.\n\nIf the variable is unused, we recommend removing it to shorten the code and to avoid redundant allocations.\n\nThe following cases are reported:\n\n* the variable never gets read after assignment\n* the value is always overwritten with another assignment before the next variable read\n* the variable initializer is redundant (for one of the above two reasons)\n\nFor more info see the same inspection in Java." + } + ] + }, + { + "name": "Inheritance issues", + "inspections": [ + { + "shortName": "ExtendsAnnotation", + "displayName": "Class extends annotation interface", + "enabled": true, + "description": "Reports classes declared as an implementation or extension of an annotation interface.\n\nWhile it is legal to extend an annotation interface, it is often done by accident,\nand the result can't be used as an annotation." + }, + { + "shortName": "RedundantMethodOverride", + "displayName": "Method is identical to its super method", + "enabled": false, + "description": "Reports methods that are identical to their super methods. Such methods have the same signature as their super method and either have an identical body or only their body consists only of a call to the super method. These methods are redundant and can be removed.\n\n\nUse the checkbox below to run the inspection for the methods that override library methods.\nChecking library methods may slow down the inspection." + }, + { + "shortName": "ProblematicVarargsMethodOverride", + "displayName": "Non-varargs method overrides varargs method", + "enabled": false, + "description": "Reports methods that override a variable arity (a.k.a. varargs) method but replace the variable arity parameter with an array parameter. Though this code is valid, it may be confusing and should be avoided." + }, + { + "shortName": "InterfaceNeverImplemented", + "displayName": "Interface which has no concrete subclass", + "enabled": false, + "description": "Reports interfaces that have no concrete subclasses.\n\nConfigure the inspection:\n\n* Use the list below to add annotations. Interfaces declared with one of these annotations will be ignored by the inspection.\n* Use the checkbox below to ignore interfaces that only declare constant fields. Such interfaces may still be usable even without implementations." + }, + { + "shortName": "AbstractMethodOverridesConcreteMethod", + "displayName": "Abstract method overrides concrete method", + "enabled": false, + "description": "Reports `abstract` methods that override concrete super methods.\n\nMethods overridden from `java.lang.Object` are not reported by this inspection." + }, + { + "shortName": "MissingOverrideAnnotation", + "displayName": "Missing '@Override' annotation", + "enabled": true, + "description": "Reports methods overriding superclass methods but are not annotated with `@java.lang.Override`.\n\n\nAnnotating methods with `@java.lang.Override` improves code readability since it shows the intent.\nIn addition, the compiler emits an error when a signature of the overridden method doesn't match the superclass method.\n\n**Example:**\n\n\n class X {\n public String toString() {\n return \"hello world\";\n }\n }\n \nAfter the quick-fix is applied:\n\n\n class X {\n @Override\n public String toString() {\n return \"hello world\";\n }\n }\n \nConfigure the inspection:\n\n* Use the **Ignore 'equals()', 'hashCode()' and 'toString()'** option to ignore these `java.lang.Object` methods: `equals()`, `hashCode()`, and `toString()`. The risk that these methods will disappear and your code won't be compiling anymore due to the `@Override` annotation is relatively small.\n* Use the **Ignore methods in anonymous classes** option to ignore methods in anonymous classes.\n* Disable the **Highlight method when its overriding methods do not all have the '@Override' annotation** option to only warn on the methods missing an `@Override` annotation, and not on overridden methods where one or more descendants are missing an `@Override` annotation.\n\nThis inspection only reports if the language level of the project or module is 5 or higher." + }, + { + "shortName": "ExtendsConcreteCollection", + "displayName": "Class explicitly extends a 'Collection' class", + "enabled": false, + "description": "Reports classes that extend concrete subclasses of the `java.util.Collection` or `java.util.Map` classes.\n\n\nSubclassing concrete collection types is a common yet poor practice. It is considerably more brittle than delegating collection calls." + }, + { + "shortName": "TypeParameterExtendsFinalClass", + "displayName": "Type parameter extends 'final' class", + "enabled": false, + "description": "Reports type parameters declared to extend a `final` class.\n\nSuggests replacing the type parameter with the type of the specified`final` class since\n`final` classes cannot be extended.\n\n**Example:**\n\n\n void foo() {\n List list; // Warning: the Integer class is a final class\n }\n\nAfter the quick-fix is applied:\n\n\n void foo() {\n List list;\n }\n" + }, + { + "shortName": "RefusedBequest", + "displayName": "Method does not call super method", + "enabled": true, + "description": "Reports methods that override a particular method without calling `super`.\n\nThis is also known as a *refused bequest*. Such methods\nmay represent a failure of abstraction and cause hard-to-trace bugs.\n\nThe inspection doesn't report default methods and methods overridden\nfrom `java.lang.Object`, except for `clone()`.\nThe `clone()` method is expected to call its `super`, which will automatically return an object of the correct type.\n\n**Examples:**\n\n*\n\n\n class A {\n @Override\n public Object clone() { // reported, because it does not call 'super.clone()'\n return new A();\n }\n }\n \n*\n\n\n interface I {\n default void foo() {}\n }\n\n class A implements I {\n // warning on method when 'Ignore 'default' super methods' and 'Ignore annotated' options are disabled\n @Override\n public void foo(){}\n }\n \nConfigure the inspection:\n\n* Use the **Only report when super method is annotated by** option to ignore `super` methods marked with the annotations from the provided list. You can manually add annotations to the list.\n* Use the **Ignore empty super methods** option to ignore `super` methods that are either empty or only throw an exception.\n* Use the **Ignore 'default' super methods** option to ignore `super` methods with the `default` keyword." + }, + { + "shortName": "ExtendsUtilityClass", + "displayName": "Class extends utility class", + "enabled": false, + "description": "Reports classes that extend a utility class.\n\n\nA utility class is a non-empty class in which all fields and methods are static.\nExtending a utility class also allows for inadvertent object instantiation of the\nutility class, because the constructor cannot be made private in order to allow extension.\n\n\nConfigure the inspection:\n\n* Use the **Ignore if overriding class is a utility class** option to ignore any classes that override a utility class but are also utility classes themselves." + }, + { + "shortName": "ImplicitSubclassInspection", + "displayName": "Final declaration can't be overridden at runtime", + "enabled": true, + "description": "Reports cases when your code prevents a class from being subclassed by some framework (for example, Spring or Hibernate) at runtime.\n\nTypical examples of necessary but impossible subclassing:\n\n* `final` classes marked with framework-specific annotations (for example, Spring `@Configuration`)\n* `final`, `static` or `private` methods marked with framework-specific annotations (for example, Spring `@Transactional`)\n* methods marked with framework-specific annotations inside `final` classes\n\nThe list of reported cases depends on the frameworks used." + }, + { + "shortName": "ParameterTypePreventsOverriding", + "displayName": "Parameter type prevents overriding", + "enabled": false, + "description": "Reports parameter types of a subclass method that have the same name as the parameter type of the corresponding super method but belong to a different package. In these cases, the subclass method cannot override the super method.\n\n**Example:**\n\n\n public class A {\n public void method(Object o) {}\n }\n\n public class B extends A {\n public void method(Object o) {} // warning on parameter type\n class Object {}\n }\n\nAfter the quick-fix is applied:\n\n\n public class A {\n public void method(Object o) {}\n }\n\n public class B extends A {\n public void method(java.lang.Object o) {} // new parameter type\n class Object {}\n }\n" + }, + { + "shortName": "NonProtectedConstructorInAbstractClass", + "displayName": "Public constructor in abstract class", + "enabled": false, + "description": "Reports `public` constructors of `abstract` classes.\n\n\nConstructors of `abstract` classes can only be called from the constructors of\ntheir subclasses, declaring them `public` may be confusing.\n\nThe quick-fix makes such constructors protected.\n\n**Example:**\n\n\n public abstract class Foo {\n public Foo () { // warning: has 'public' modifier\n /* ... */\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public abstract class Foo {\n protected Foo () {\n /* ... */\n }\n }\n\nConfigure the inspection:\n\nUse the **Ignore for non-public classes** option below to ignore `public` constructors in non-public classes." + }, + { + "shortName": "FrequentlyUsedInheritorInspection", + "displayName": "Class may extend a commonly used base class", + "enabled": true, + "description": "Reports classes or interfaces that can be replaced with an implementation or extension of a more specific commonly used class or interface.\n\nFor this inspection to work, a superclass needs to be in project source files and the project needs to use the IntelliJ IDEA build system.\n\n**Example:**\n\n\n class MyInheritor implements A {} // B suggested on the A reference\n\n interface A {}\n\n abstract class B implements A {}\n\n abstract class C1 extends B {}\n abstract class C2 extends B {}\n abstract class C3 extends B {}\n abstract class C4 extends B {}\n abstract class C5 extends B {}\n\nBy default, this inspection doesn't highlight issues in the editor but only provides a quick-fix.\n\nNew in 2017.2" + }, + { + "shortName": "AbstractClassExtendsConcreteClass", + "displayName": "Abstract class extends concrete class", + "enabled": false, + "description": "Reports `abstract` classes that extend concrete classes." + }, + { + "shortName": "AbstractMethodOverridesAbstractMethod", + "displayName": "Abstract method overrides abstract method", + "enabled": false, + "description": "Reports `abstract` methods that override `abstract` methods.\n\nSuch methods don't make sense because any concrete child class will have to implement the abstract method anyway.\n\n\nMethods whose return types, exception declarations, annotations, or modifiers differ from the overridden method are not reported by this inspection.\n\n\nConfigure the inspection:\n\n* Use the **Ignore methods with different Javadoc than their super methods** option to ignore any abstract methods whose JavaDoc comment differs from their super method." + }, + { + "shortName": "AbstractMethodWithMissingImplementations", + "displayName": "Abstract method with missing implementations", + "enabled": false, + "description": "Reports `abstract` methods that are not implemented in every concrete subclass.\n\n\nThis results in a compile-time error on the subclasses;\nthe inspection reports the problem at the point of the abstract method, allowing faster detection of the problem." + }, + { + "shortName": "AbstractClassWithoutAbstractMethods", + "displayName": "Abstract class without 'abstract' methods", + "enabled": false, + "description": "Reports `abstract` classes that have no `abstract` methods." + }, + { + "shortName": "AbstractClassNeverImplemented", + "displayName": "Abstract class which has no concrete subclass", + "enabled": true, + "description": "Reports `abstract` classes that have no concrete subclasses." + }, + { + "shortName": "StaticInheritance", + "displayName": "Static inheritance", + "enabled": false, + "description": "Reports interfaces that are implemented only to provide access to constants. This kind of inheritance is often confusing and may hide important dependency information." + } + ] + }, + { + "name": "Control flow issues", + "inspections": [ + { + "shortName": "NegatedEqualityExpression", + "displayName": "Negated equality expression", + "enabled": false, + "description": "Reports equality expressions which are negated by a prefix expression.\n\nSuch expressions can be simplified using the `!=` operator.\n\nExample:\n\n\n !(i == 1)\n\nAfter the quick-fix is applied:\n\n\n i != 1\n" + }, + { + "shortName": "AssertionCanBeIf", + "displayName": "Assertion can be replaced with 'if' statement", + "enabled": false, + "description": "Reports `assert` statements and suggests replacing them with `if` statements that throw `java.lang.AssertionError`.\n\nExample:\n\n\n assert param != null;\n\nAfter the quick-fix is applied:\n\n\n if (param == null) throw new AssertionError();\n" + }, + { + "shortName": "DoubleNegation", + "displayName": "Double negation", + "enabled": true, + "description": "Reports double negations that can be simplified.\n\nExample:\n\n\n if (!!functionCall()) {}\n\nAfter the quick-fix is applied:\n\n\n if (functionCall()) {}\n\nExample:\n\n\n if (!(a != b)) {}\n\nAfter the quick-fix is applied:\n\n\n if (a == b) {}\n" + }, + { + "shortName": "BreakStatement", + "displayName": "'break' statement", + "enabled": false, + "description": "Reports `break` statements that are used in places other than at the end of a `switch` statement branch.\n\n`break` statements complicate refactoring and can be confusing.\n\nExample:\n\n\n void foo(List strs) {\n for (String str : strs) {\n if (str.contains(\"stop\")) break;\n handleStr(str);\n }\n }\n" + }, + { + "shortName": "InfiniteLoopStatement", + "displayName": "Infinite loop statement", + "enabled": true, + "description": "Reports `for`, `while`, or `do` statements that can only exit by throwing an exception. While such statements may be correct, they often happen due to coding errors.\n\nExample:\n\n\n for (;;) {\n }\n\n\nUse the **Ignore when placed in Thread.run** option to ignore the\ninfinite loop statements inside `Thread.run`.\nIt may be useful for the daemon threads.\n\nExample:\n\n\n new Thread(() -> {\n while (true) {\n }\n }).start();\n" + }, + { + "shortName": "ConditionalCanBePushedInsideExpression", + "displayName": "Conditional can be pushed inside branch expression", + "enabled": false, + "description": "Reports conditional expressions with `then` and else branches that are similar enough so that the expression can be moved inside. This action shortens the code.\n\nExample:\n\n\n double g(int a, int b) {\n return a == b ? Math.cos(0) : Math.cos(1);\n }\n\nAfter the quick-fix is applied:\n\n\n double g(int a, int b) {\n return Math.cos(a == b ? 0 : 1);\n }\n\nNew in 2017.2" + }, + { + "shortName": "ContinueStatementWithLabel", + "displayName": "'continue' statement with label", + "enabled": false, + "description": "Reports `continue` statements with labels.\n\nLabeled `continue` statements complicate refactoring and can be confusing.\n\nExample:\n\n\n void handle(List strs) {\n outer:\n for (String s: strs) {\n for (char ch : s.toCharArray()) {\n if ('s' == ch) continue outer;\n handleChar(ch);\n }\n }\n }\n" + }, + { + "shortName": "SimplifiableBooleanExpression", + "displayName": "Simplifiable boolean expression", + "enabled": true, + "description": "Reports boolean expressions that can be simplified.\n\nExample:\n\n\n void f(boolean foo, boolean bar) {\n boolean b = !(foo ^ bar);\n }\n\nAfter the quick-fix is applied:\n\n\n void f(boolean foo, boolean bar) {\n boolean b = foo == bar;\n }\n\nExample:\n\n\n void f(boolean foo, boolean bar) {\n boolean b = (foo && bar) || !foo;\n }\n \nAfter the quick-fix is applied:\n\n\n void f(boolean foo, boolean bar) {\n boolean b = !foo || bar;\n }\n \n" + }, + { + "shortName": "NegatedConditionalExpression", + "displayName": "Negated conditional expression", + "enabled": false, + "description": "Reports conditional expressions which are negated with a prefix expression, as such constructions may be confusing.\n\nThere is a fix that propagates the outer negation to both branches.\n\nExample:\n\n\n !(i == 1 ? a : b)\n\nAfter the quick-fix is applied:\n\n\n i == 1 ? !a : !b\n" + }, + { + "shortName": "SwitchStatement", + "displayName": "'switch' statement", + "enabled": false, + "description": "Reports `switch` statements.\n\n`switch` statements often (but not always) indicate a poor object-oriented design.\n\nExample:\n\n\n switch (i) {\n // code\n }\n" + }, + { + "shortName": "ConditionalExpression", + "displayName": "Conditional expression", + "enabled": false, + "description": "Reports usages of the ternary condition operator and suggests converting them to `if`/`else` statements.\n\nSome code standards prohibit the use of the condition operator.\n\nExample:\n\n\n Object result = (condition) ? foo() : bar();\n\nAfter the quick-fix is applied:\n\n\n Object result;\n if (condition) {\n comp = foo();\n }\n else {\n comp = bar();\n }\n\nConfigure the inspection:\n\nUse the **Ignore for simple assignments and returns** option to ignore simple assignments and returns and allow the following constructs:\n\n\n String s = (foo == null) ? \"\" : foo.toString();\n\n\nUse the **Ignore places where an if statement is not possible** option to ignore conditional expressions in contexts in which automatic\nreplacement with an if statement is not possible (for example, when the conditional expression is used as an argument to a\n`super()` constructor call)." + }, + { + "shortName": "ConditionalExpressionWithIdenticalBranches", + "displayName": "Conditional expression with identical branches", + "enabled": true, + "description": "Reports conditional expressions with identical `then` and `else` branches.\n\nSuch expressions almost certainly indicate bugs. The inspection provides a fix that collapses conditional expressions.\n\nExample:\n\n\n int y = x == 10 ? 4 : 4;\n\nAfter the quick-fix is applied:\n\n\n int y = 4;\n" + }, + { + "shortName": "DefaultNotLastCaseInSwitch", + "displayName": "'default' not last case in 'switch'", + "enabled": false, + "description": "Reports `switch` statements or expressions in which the `default` branch is positioned before another case. Such a construct is unnecessarily confusing. A quick-fix is provided to move the `default` branch to the last position, if possible.\n\n**Example:**\n\n\n switch (n) {\n default:\n System.out.println();\n break;\n case 1:\n break;\n }\n\nAfter the quick-fix is applied:\n\n\n switch (n) {\n case 1:\n break;\n default:\n System.out.println();\n break;\n }\n" + }, + { + "shortName": "SwitchStatementWithTooManyBranches", + "displayName": "Maximum 'switch' branches", + "enabled": false, + "description": "Reports `switch` statements or expressions with too many `case` labels.\n\nSuch a long switch statement may be confusing and should probably be refactored.\nSometimes, it is not a problem (for example, a domain is very complicated and has enums with a lot of constants).\n\nExample:\n\n\n switch (x) {\n case 1 -> {}\n case 2 -> {}\n case 3 -> {}\n case 4 -> {}\n case 5 -> {}\n case 6 -> {}\n case 7 -> {}\n case 8 -> {}\n case 9 -> {}\n case 10 -> {}\n case 11,12,13 -> {}\n default -> {}\n }\n\nUse the **Maximum number of branches** field to specify the maximum number of `case` labels expected." + }, + { + "shortName": "LoopConditionNotUpdatedInsideLoop", + "displayName": "Loop variable not updated inside loop", + "enabled": true, + "description": "Reports any variables and parameters that are used in a loop condition and are not updated inside the loop.\n\nSuch variables and parameters are usually used by mistake as they\nmay cause an infinite loop if they are executed.\n\nExample:\n\n\n void loopDoesNotLoop(boolean b) {\n while (b) {\n System.out.println();\n break;\n }\n }\n\nConfigure the inspection:\n\n\nUse the **Ignore possible non-local changes** option to disable this inspection\nif the condition can be updated indirectly (e.g. via the called method or concurrently from another thread)." + }, + { + "shortName": "ContinueStatement", + "displayName": "'continue' statement", + "enabled": false, + "description": "Reports `continue` statements.\n\n`continue` statements complicate refactoring and can be confusing.\n\nExample:\n\n\n void foo(List strs) {\n for (String str : strs) {\n if (str.contains(\"skip\")) continue;\n handleStr(str);\n }\n }\n" + }, + { + "shortName": "SwitchStatementDensity", + "displayName": "'switch' statement with too low of a branch density", + "enabled": false, + "description": "Reports `switch` statements or expressions with a too low ratio of switch labels to executable statements.\n\nSuch `switch` statements\nmay be confusing and should probably be refactored.\n\nExample:\n\n\n switch (i) { // one case and 5 executable statements -> 20% density\n case 1:\n System.out.println(\"1\");\n System.out.println(\"2\");\n System.out.println(\"3\");\n System.out.println(\"4\");\n System.out.println(\"5\");\n break;\n }\n\n\nUse the **Minimum density of branches** field to specify the allowed ratio of the switch labels to executable statements." + }, + { + "shortName": "BooleanExpressionMayBeConditional", + "displayName": "Boolean expression could be replaced with conditional expression", + "enabled": false, + "description": "Reports any `boolean` expressions which can be formulated in a more compact and, arguably, clear way than by using a conditional expression.\n\nUse the quick-fix to replace the `boolean` expression by a conditional expression.\n\n**Example:**\n\n\n a && b || !a && c;\n\nAfter the quick-fix is applied:\n\n\n a ? b : c;\n" + }, + { + "shortName": "LoopWithImplicitTerminationCondition", + "displayName": "Loop with implicit termination condition", + "enabled": false, + "description": "Reports any `while`, `do-while`, and `for` loops that have the `true` constant as their only condition. At the same time, such loops can be still terminated by a containing `if` statement which can break out of the loop.\n\nSuch an `if` statement must be the first or the only statement\nin a `while` or `for`\nloop and the last or the only statement in a `do-while` loop.\n\nRemoving the `if` statement and making its condition an explicit\nloop condition simplifies the loop." + }, + { + "shortName": "ExpressionMayBeFactorized", + "displayName": "Expression can be factorized", + "enabled": false, + "description": "Reports expressions that can be factorized, i.e. reorganized to pull out a common factor. This reduces redundancy and could improve the readability of your code.\n\n**Example:**\n\n\n a && b || a && c\n\nAfter the quick-fix is applied:\n\n\n a && (b || c)\n\nNew in 2021.3" + }, + { + "shortName": "TrivialIf", + "displayName": "Redundant 'if' statement", + "enabled": false, + "description": "Reports `if` statements that can be simplified to a single assignment, `return`, or `assert` statement.\n\nExample:\n\n\n if (foo()) {\n return true;\n } else {\n return false;\n }\n\nAfter the quick-fix is applied:\n\n\n return foo();\n\nConfigure the inspection:\n\nUse the **Ignore chained 'if' statements** option if want to hide a warning for chained `if` statements.\n\nFor example, in the following code the warning will be hidden, but the quick-fix will still be available:\n\n\n if (condition1) return true;\n if (condition2) return false;\n return true;\n\nNote that replacing `if (isTrue()) assert false;` with `assert isTrue();` may change the program semantics\nwhen asserts are disabled if condition has side effects.\nUse the **Ignore 'if' statements with trivial 'assert'** option if you want to hide a warning for `if` statements\ncontaining only `assert` statement in their bodies." + }, + { + "shortName": "PointlessBooleanExpression", + "displayName": "Pointless boolean expression", + "enabled": true, + "description": "Reports unnecessary or overly complicated boolean expressions.\n\nSuch expressions include `&&`-ing with `true`,\n`||`-ing with `false`,\nequality comparison with a boolean literal, or negation of a boolean literal. Such expressions can be simplified.\n\nExample:\n\n\n boolean a = !(x && false);\n boolean b = false || x;\n boolean c = x != true;\n\nAfter the quick-fix is applied:\n\n\n boolean a = true;\n boolean b = x;\n boolean c = !x;\n\n\nConfigure the inspection:\nUse the **Ignore named constants in determining pointless expressions** option to ignore named constants when determining if an expression is pointless." + }, + { + "shortName": "NestedSwitchStatement", + "displayName": "Nested 'switch' statement", + "enabled": false, + "description": "Reports nested `switch` statements or expressions.\n\nNested `switch` statements\nmay result in extremely confusing code. These statements may be extracted to a separate method.\n\nExample:\n\n\n int res = switch (i) {\n case 0 -> 0;\n default -> switch (i) {\n case 100 -> 0;\n default -> i;\n };\n };\n" + }, + { + "shortName": "PointlessNullCheck", + "displayName": "Unnecessary 'null' check before method call", + "enabled": false, + "description": "Reports `null` checks followed by a method call that will definitely return `false` when `null` is passed (e.g. `Class.isInstance`).\n\nSuch a check seems excessive as the method call will always return `false` in this case.\n\n**Example:**\n\n\n if (x != null && myClass.isInstance(x)) { ... }\n\nAfter the quick-fix is applied:\n\n\n if (myClass.isInstance(x)) { ... }\n" + }, + { + "shortName": "NegatedConditional", + "displayName": "Conditional expression with negated condition", + "enabled": false, + "description": "Reports conditional expressions whose conditions are negated.\n\nFlipping the order of the conditional expression branches usually increases the clarity of such statements.\n\n\nUse the **Ignore '!= null' comparisons** and **Ignore '!= 0' comparisons** options to ignore comparisons of the form\n`obj != null` or `num != 0`.\nSince `obj != null` effectively means \"obj exists\",\nthe meaning of the whole expression does not involve any negation\nand is therefore easy to understand.\n\n\nThe same reasoning applies to `num != 0` expressions, especially when using bit masks.\n\n\nThese forms have the added benefit of mentioning the interesting case first.\nIn most cases, the value for the `== null` branch is `null` itself,\nlike in the following examples:\n\n\n static String getName(Person p) {\n return p != null ? p.getName() : null;\n }\n\n static String getExecutableString(int fileMode) {\n return (fileMode & 0b001001001) != 0 ? \"executable\" : \"non-executable\";\n }\n" + }, + { + "shortName": "DuplicateCondition", + "displayName": "Duplicate condition", + "enabled": true, + "description": "Reports duplicate conditions in `&&` and `||` expressions and branches of `if` statements. While sometimes duplicate conditions are intended, in most cases they the result of an oversight.\n\nExample:\n\n\n boolean result = digit1 != digit2 || digit1 != digit2;\n\n\nTo ignore conditions that may produce side effects, use the **Ignore conditions with side effects** option.\nDisabling this option may lead to false-positives, for example, when the same method returns different values on subsequent invocations.\n\nExample:\n\n\n if (iterator.next() != null || iterator.next() != null) {\n System.out.println(\"Got it\");\n }\n\nDue to possible side effects of `iterator.next()` (on the example), the warning will only be\ntriggered if the **Ignore conditions with side effects** option is disabled." + }, + { + "shortName": "ConditionalBreakInInfiniteLoop", + "displayName": "Conditional break inside loop", + "enabled": false, + "description": "Reports conditional breaks at the beginning or at the end of a loop and suggests adding a loop condition instead to shorten the code.\n\nExample:\n\n\n while (true) {\n if (i == 23) break;\n i++;\n }\n\nAfter the quick fix is applied:\n\n\n while (i != 23) {\n i++;\n }\n" + }, + { + "shortName": "IfStatementWithIdenticalBranches", + "displayName": "'if' statement with identical branches", + "enabled": true, + "description": "Reports `if` statements in which common parts can be extracted from the branches.\n\nThese common parts are independent from the condition and make `if` statements harder to understand.\n\nExample:\n\n\n if (x > 12) {\n doSomethingBefore();\n doSomethingDifferent1();\n doSomethingAfter();\n } else {\n doSomethingBefore();\n doSomethingDifferent2();\n doSomethingAfter();\n }\n\nAfter the quick-fix is applied:\n\n\n doSomethingBefore();\n if (x > 12) {\n doSomethingDifferent1();\n } else {\n doSomethingDifferent2();\n }\n doSomethingAfter();\n\nUpdated in 2018.1" + }, + { + "shortName": "IdempotentLoopBody", + "displayName": "Idempotent loop body", + "enabled": true, + "description": "Reports loops whose second and all subsequent iterations do not produce any additional side effects other than the one produced by the first iteration, which can indicate a programming error.\n\nSuch loops may iterate only zero, one, or infinite number of times.\nIf the infinite number of times case is unreachable, such a loop can be replaced with an `if` statement.\nOtherwise, there's a possibility that the program can get stuck.\n\nExample:\n\n\n public void foo(String baseName, String names) {\n int suffix = 1;\n String name = baseName;\n while (names.contains(name)) {\n // error: suffix is not updated making loop body idempotent\n name = baseName + suffix;\n }\n }\n\nNew in 2018.1" + }, + { + "shortName": "FallthruInSwitchStatement", + "displayName": "Fallthrough in 'switch' statement", + "enabled": false, + "description": "Reports 'fall-through' in a `switch` statement.\n\nFall-through occurs when a series of executable statements after a `case` label is not guaranteed\nto transfer control before the next `case` label. For example, this can happen if the branch is missing a `break` statement.\nIn that case, control falls through to the statements after\nthat `switch` label, even though the `switch` expression is not equal to\nthe value of the fallen-through label. While occasionally intended, this construction is confusing and is often the result of a typo.\n\n\nThis inspection ignores any fall-through commented with a text matching the regex pattern `(?i)falls?\\s*thro?u`.\n\nThere is a fix that adds a `break` to the branch that can fall through to the next branch.\n\nExample:\n\n\n switch(x) {\n case (4):\n if (condition) {\n System.out.println(\"3\");\n // no break here\n } else {\n break;\n }\n case (6):\n System.out.println(\"4\");\n }\n\nAfter the quick-fix is applied:\n\n\n switch(x) {\n case (4):\n if (condition) {\n System.out.println(\"3\");\n } else {\n break;\n }\n break;\n case (6):\n System.out.println(\"4\");\n }\n" + }, + { + "shortName": "ConstantConditionalExpression", + "displayName": "Constant conditional expression", + "enabled": false, + "description": "Reports conditional expressions in which the condition is either a `true` or `false` constant. These expressions sometimes occur as a result of automatic refactorings and may be simplified.\n\nExample:\n\n\n return true ? \"Yes\" : \"No\";\n\nAfter quick-fix is applied:\n\n\n return \"Yes\";\n" + }, + { + "shortName": "NestedConditionalExpression", + "displayName": "Nested conditional expression", + "enabled": false, + "description": "Reports nested conditional expressions as they may result in extremely confusing code.\n\nExample:\n\n\n int y = a == 10 ? b == 20 ? 10 : a : b;\n" + }, + { + "shortName": "OverlyComplexBooleanExpression", + "displayName": "Overly complex boolean expression", + "enabled": false, + "description": "Reports boolean expressions with too many terms. Such expressions may be confusing and bug-prone.\n\nExample:\n\n\n cond(x1) && cond(x2) ^ cond(x3) && cond(x4);\n\nConfigure the inspection:\n\n* Use the **Maximum number of terms** field to specify the maximum number of terms allowed in a boolean expression.\n* Use the **Ignore pure conjunctions and disjunctions** option to ignore boolean expressions which use only a single boolean operator repeatedly." + }, + { + "shortName": "SwitchStatementsWithoutDefault", + "displayName": "'switch' statement without 'default' branch", + "enabled": true, + "description": "Reports `switch` statements that do not contain `default` labels.\n\nAdding the `default` label guarantees that all possible scenarios are covered, and it becomes\neasier to make assumptions about the current state of the program.\n\n\nNote that by default, the inspection does not report `switch` statements if all cases for enums or `sealed` classes are covered.\nUse the **Ignore exhaustive switch statements** option if you want to change this behavior." + }, + { + "shortName": "LabeledStatement", + "displayName": "Labeled statement", + "enabled": false, + "description": "Reports labeled statements that can complicate refactorings and control flow of the method.\n\nExample:\n\n\n label:\n while (true) {\n // code\n }\n" + }, + { + "shortName": "LoopStatementsThatDontLoop", + "displayName": "Loop statement that does not loop", + "enabled": true, + "description": "Reports any instance of `for`, `while`, and `do` statements whose bodies will be executed once at most. Normally, this is an indication of a bug.\n\n\nUse the **Ignore enhanced for loops** option to ignore the foreach loops.\nThey are sometimes used to perform an action only on the first item of an iterable in a compact way.\n\nExample:\n\n\n for (String s : stringIterable) {\n doSomethingOnFirstString(s);\n break;\n }\n" + }, + { + "shortName": "ForLoopReplaceableByWhile", + "displayName": "'for' loop may be replaced by 'while' loop", + "enabled": false, + "description": "Reports `for` loops that contain neither initialization nor update components, and suggests converting them to `while` loops. This makes the code easier to read.\n\nExample:\n\n\n for(; exitCondition(); ) {\n process();\n }\n\nAfter the quick-fix is applied:\n\n\n while(exitCondition()) {\n process();\n }\n\nThe quick-fix is also available for other `for` loops, so you can replace any `for` loop with a\n`while` loop.\n\nUse the **Ignore 'infinite' for loops without conditions** option if you want to ignore `for`\nloops with trivial or non-existent conditions." + }, + { + "shortName": "SwitchExpressionCanBePushedDown", + "displayName": "Common subexpression can be extracted from 'switch'", + "enabled": false, + "description": "Reports switch expressions and statements where every branch has a common subexpression, so the `switch` could be moved inside. This action shortens the code. In many cases, it's reasonable to extract the resulting switch expression to a separate variable or method.\n\nExample:\n\n\n switch (value) {\n case 0 -> System.out.println(\"zero\");\n case 1 -> System.out.println(\"one\");\n case 2, 3, 4 -> System.out.println(\"few\");\n default -> System.out.println(\"many\");\n }\n\nAfter the quick-fix is applied:\n\n\n System.out.println(switch (value) {\n case 0 -> \"zero\";\n case 1 -> \"one\";\n case 2, 3, 4 -> \"few\";\n default -> \"many\";\n });\n\n\nThis inspection is applicable only to enhanced switches with arrow syntax.\n\nNew in 2022.3" + }, + { + "shortName": "ConfusingElse", + "displayName": "Redundant 'else'", + "enabled": false, + "description": "Reports redundant `else` keywords in `if`---`else` statements and statement chains.\n\n\nThe `else` keyword is redundant when all previous branches end with a\n`return`, `throw`, `break`, or `continue` statement. In this case,\nthe statements from the `else` branch can be placed after the `if` statement, and the\n`else` keyword can be removed.\n\n**Example:**\n\n\n if (name == null) {\n throw new IllegalArgumentException();\n } else {\n System.out.println(name);\n }\n\nAfter the quick-fix is applied:\n\n\n if (name == null) {\n throw new IllegalArgumentException();\n }\n System.out.println(name);\n\nDisable the **Report when there are no more statements after the 'if' statement** option to ignore cases where the `if`---`else` statement is the last statement in a code block." + }, + { + "shortName": "IfCanBeAssertion", + "displayName": "Statement can be replaced with 'assert' or 'Objects.requireNonNull'", + "enabled": true, + "description": "Reports `if` statements that throw only `java.lang.Throwable` from a `then` branch and do not have an `else` branch. Such statements can be converted to more compact `assert` statements.\n\n\nThe inspection also reports Guava's `Preconditions.checkNotNull()`.\nThey can be replaced with a `Objects.requireNonNull()` call for which a library may not be needed.\n\nExample:\n\n\n if (x == 2) throw new RuntimeException(\"fail\");\n if (y == null) throw new AssertionError();\n Preconditions.checkNotNull(z, \"z\");\n\nAfter the quick-fix is applied:\n\n\n assert x != 2 : \"fail\";\n Objects.requireNonNull(y);\n Objects.requireNonNull(z, \"z\");\n\nBy default, this inspection provides a quick-fix in the editor without code highlighting." + }, + { + "shortName": "BreakStatementWithLabel", + "displayName": "'break' statement with label", + "enabled": false, + "description": "Reports `break` statements with labels.\n\nLabeled `break` statements complicate refactoring and can be confusing.\n\nExample:\n\n\n void handle(List strs) {\n outer:\n for (String s: strs) {\n for (char ch : s.toCharArray()) {\n if ('s' == ch) break outer;\n handleChar(ch);\n }\n }\n }\n" + }, + { + "shortName": "PointlessIndexOfComparison", + "displayName": "Pointless 'indexOf()' comparison", + "enabled": false, + "description": "Reports unnecessary comparisons with `.indexOf()` expressions. An example of such an expression is comparing the result of `.indexOf()` with numbers smaller than -1." + }, + { + "shortName": "SwitchStatementWithConfusingDeclaration", + "displayName": "Local variable used and declared in different 'switch' branches", + "enabled": true, + "description": "Reports local variables declared in one branch of a `switch` statement and used in another branch. Such declarations can be extremely confusing.\n\nExample:\n\n\n switch(i) {\n case 2:\n int x = 0;\n break;\n case 3:\n x = 3;\n System.out.println(x);\n break;\n }\n" + }, + { + "shortName": "ForLoopWithMissingComponent", + "displayName": "'for' loop with missing components", + "enabled": false, + "description": "Reports `for` loops that lack initialization, condition, or update clauses. Some coding styles prohibit such loops.\n\nExample:\n\n\n for (int i = 0;;i++) {\n // body\n }\n\n\nUse the **Ignore collection iterations** option to ignore loops which use an iterator.\nThis is a standard way to iterate over a collection in which the `for` loop does not have an update clause." + }, + { + "shortName": "EnumSwitchStatementWhichMissesCases", + "displayName": "Enum 'switch' statement that misses case", + "enabled": true, + "description": "Reports `switch` statements over enumerated types that are not exhaustive.\n\n**Example:**\n\n\n enum AlphaBetaGamma {\n A, B, C;\n\n void x(AlphaBetaGamma e) {\n switch (e) {\n\n }\n }\n }\n\nAfter the quick-fix is applied:\n\n\n enum AlphaBetaGamma {\n A, B, C;\n\n void x(AlphaBetaGamma e) {\n switch (e) {\n case A -> {}\n case B -> {}\n case C -> {}\n }\n }\n }\n\n\nUse the **Ignore switch statements with a default branch** option to ignore `switch`\nstatements that have a `default` branch." + }, + { + "shortName": "SimplifiableConditionalExpression", + "displayName": "Simplifiable conditional expression", + "enabled": true, + "description": "Reports conditional expressions and suggests simplifying them.\n\nExamples:\n\n condition ? true : foo → condition || foo\n\n condition ? false : foo → !condition && foo\n\n condition ? foo : !foo → condition == foo\n\n condition ? true : false → condition\n\n a == b ? b : a → a\n\n result != null ? result : null → result\n" + }, + { + "shortName": "IfStatementWithTooManyBranches", + "displayName": "'if' statement with too many branches", + "enabled": false, + "description": "Reports `if` statements with too many branches.\n\nSuch statements may be confusing and are often a sign of inadequate levels of design\nabstraction.\n\n\nUse the **Maximum number of branches** field to specify the maximum number of branches an `if` statement is allowed to have." + }, + { + "shortName": "SwitchStatementWithTooFewBranches", + "displayName": "Minimum 'switch' branches", + "enabled": false, + "description": "Reports `switch` statements and expressions with too few `case` labels, and suggests rewriting them as `if` and `else if` statements.\n\nExample (minimum branches == 3):\n\n\n switch (expression) {\n case \"foo\" -> foo();\n case \"bar\" -> bar();\n }\n\nAfter the quick-fix is applied:\n\n\n if (\"foo\".equals(expression)) {\n foo();\n } else if (\"bar\".equals(expression)) {\n bar();\n }\n\nExhaustive switch expressions (Java 14+) or pattern switch statements (Java 17 preview) without the 'default' branch are not reported.\nThat's because compile-time exhaustiveness check will be lost when the `switch` is converted to `if`\nwhich might be undesired.\n\nConfigure the inspection:\n\nUse the **Minimum number of branches** field to specify the minimum expected number of `case` labels.\n\nUse the **Do not report pattern switch statements** option to avoid reporting switch statements and expressions that\nhave pattern branches. E.g.:\n\n\n String result = switch(obj) {\n case String str -> str.trim();\n default -> \"none\";\n };\n\nIt might be preferred to keep the switch even with a single pattern branch, rather than using the `instanceof` statement." + }, + { + "shortName": "NegatedIfElse", + "displayName": "'if' statement with negated condition", + "enabled": false, + "description": "Reports `if` statements that contain `else` branches and whose conditions are negated.\n\nFlipping the order of the `if` and `else`\nbranches usually increases the clarity of such statements.\n\nThere is a fix that inverts the current `if` statement.\n\nExample:\n\n\n void m(Object o1, Object o2) {\n if (o1 != o2) {\n System.out.println(1);\n }\n else {\n System.out.println(2);\n }\n }\n\nAfter applying the quick-fix:\n\n\n void m(Object o1, Object o2) {\n if (o1 == o2) {\n System.out.println(2);\n } else {\n System.out.println(1);\n }\n }\n\nUse the **Ignore '!= null' comparisons** option to ignore comparisons of the `!= null` form.\n\nUse the **Ignore '!= 0' comparisons** option to ignore comparisons of the `!= 0` form." + }, + { + "shortName": "GroovyTrivialIf", + "displayName": "Redundant 'if' statement", + "enabled": false, + "description": "Reports `if` statements which can be simplified to single assignment or `return` statements.\n\n**Example:**\n\n\n if (foo())\n return true;\n else\n return false;\n\nAfter the quick-fix is applied:\n\n\n return foo();\n" + }, + { + "shortName": "GroovyFallthrough", + "displayName": "Fallthrough in 'switch' statement", + "enabled": false, + "description": "Reports *fallthrough* in switch statements. While occasionally useful, fallthrough is often unintended, and may lead to surprising bugs.\n\n**Example:**\n\n\n switch(n) {\n case 1:\n print 1\n case 2: // \"case 1\" fallthrough to \"case 2\". Statements from \"case 2\" will be executed immediately after \"case 1\".\n print 2\n break\n default:\n print \"Default\"\n }\n\n" + }, + { + "shortName": "GroovyIfStatementWithIdenticalBranches", + "displayName": "If statement with identical branches", + "enabled": false, + "description": "Reports `if` statements with identical \"then\" and `else` branches. Such statements are almost certainly programmer error.\n\n**Example:**\n\n\n if (condition) {\n print \"foo\"\n } else {\n print \"foo\"\n }\n\nAfter the quick-fix is applied:\n\n\n print \"foo\"\n\n" + }, + { + "shortName": "GroovyTrivialConditional", + "displayName": "Redundant conditional expression", + "enabled": false, + "description": "Reports ternary conditional operators of the form `x ? true : false` or similar, which can be trivially simplified.\n\n**Example:**\n\n\n foo() ? true : false\n\nAfter the quick-fix is applied:\n\n\n foo()\n" + }, + { + "shortName": "GrFinalVariableAccess", + "displayName": "Final variable access", + "enabled": false, + "description": "Reports uninitialized final fields, invalid assignments to final variables, and parameters and fields." + }, + { + "shortName": "GroovyBreak", + "displayName": "'break' statement", + "enabled": false, + "description": "Reports `break` statements outside of `switch` statements." + }, + { + "shortName": "GroovyConstantConditional", + "displayName": "Constant conditional expression", + "enabled": false, + "description": "Reports conditional expressions with boolean constant as a condition.\n\n**Example:**\n\n\n true ? result1 : result2\n false ? result1 : result2\n" + }, + { + "shortName": "GroovyContinue", + "displayName": "'continue' statement", + "enabled": false, + "description": "Reports `continue` statements." + }, + { + "shortName": "GroovySwitchStatementWithNoDefault", + "displayName": "Switch statement with no default case", + "enabled": false, + "description": "Reports `switch` statements that do not contain `default` labels.\n\n\nSome coding practices may insist on adding this label to all `switch` statements." + }, + { + "shortName": "GroovyUnnecessaryReturn", + "displayName": "Unnecessary 'return' statement", + "enabled": false, + "description": "Reports `return` statements at the end of constructors and methods returning\n`void`. These are unnecessary and may be safely removed.\n\n**Example:**\n\n\n void foo (String s){\n print(s)\n return\n }\n\nAfter the quick-fix is applied:\n\n\n void foo (String s){\n print(s)\n }\n\nFor more information, see the same inspection in Java." + }, + { + "shortName": "GroovyConditionalWithIdenticalBranches", + "displayName": "Ternary expression with identical branches", + "enabled": false, + "description": "Reports ternary expressions with identical \"then\" and \"else\" branches. Such expressions are almost certainly a programmer error.\n\nThe quick-fix replaces the expression with its \"then\" branch.\n\n**Example:**\n\n\n condition ? a.foo() : a.foo()\n\nAfter the quick-fix is applied:\n\n\n a.foo()\n" + }, + { + "shortName": "GroovyConditionalCanBeElvis", + "displayName": "Ternary expression can be replaced with elvis expression", + "enabled": false, + "description": "Reports ternary expressions which can be replaced by an elvis expression.\n\n**Example:**\n\n\n def notNull(o, defaultValue) {\n o != null ? o : defaultValue\n }\n\nAfter the quick-fix is applied:\n\n\n def notNull(o, defaultValue) {\n o ?: defaultValue\n }\n" + }, + { + "shortName": "GroovyConstantIfStatement", + "displayName": "Constant if statement", + "enabled": false, + "description": "Reports `if` statements with boolean constant as a condition.\n\n**Example:**\n\n\n if (true) {\n // ...\n }\n if (false) {\n // ...\n }\n" + }, + { + "shortName": "GroovyIfStatementWithTooManyBranches", + "displayName": "If statement with too many branches", + "enabled": false, + "description": "Reports `if` statements with too many branches. Such statements may be confusing, and are often the sign of inadequate levels of design abstraction.\n\n**Example:**\n\n\n if (a) {\n print \"foo\"\n } else if (b) {\n print \"bar\"\n } else if (c) {\n print \"baz\"\n } else if (d) {\n print \"Too many branches\"\n }\n\n\nUse the **Maximum number of branches** field to specify the maximum number of branches expected." + }, + { + "shortName": "GroovyConditionalCanBeConditionalCall", + "displayName": "Ternary expression can be replaced with safe call", + "enabled": false, + "description": "Reports ternary expressions which can be replaced by a safe call.\n\n**Example:**\n\n\n def charArray(String s) {\n s == null ? null : s.toCharArray()\n }\n\nAfter the quick-fix is applied:\n\n\n def charArray(String s) {\n s?.toCharArray()\n }\n" + }, + { + "shortName": "GroovyUnnecessaryContinue", + "displayName": "Unnecessary 'continue' statement", + "enabled": false, + "description": "Reports `continue` statements if they are last reachable statements in the loop.\nThese `continue` statements are unnecessary and can be safely removed.\n\n**Example:**\n\n\n for(int i in array) {\n println(i)\n continue\n }\n\nAfter the quick-fix is applied:\n\n\n for(int i in array) {\n println(i)\n }\n\nFor more information, see the same inspection in Java." + }, + { + "shortName": "GroovyLoopStatementThatDoesntLoop", + "displayName": "Loop statement that doesn't loop", + "enabled": false, + "description": "Reports `for` or `while` statements whose bodies are guaranteed to execute at most once. While such statements could be written intentionally, they are usually a symptom of error.\n\n**Example:**\n\n\n for (int i in 0..<10) {\n return\n }\n\n" + }, + { + "shortName": "GroovyReturnFromClosureCanBeImplicit", + "displayName": "'return' statement can be implicit", + "enabled": false, + "description": "Reports return statements at the end of closures which can be made implicit.\n\n\nGroovy closures implicitly return the value of the last statement in them.\n\n**Example:**\n\n\n def foo = {\n return 1\n }\n\nAfter the quick-fix is applied:\n\n\n def foo = {\n 1\n }\n" + } + ] + }, + { + "name": "Numeric issues", + "inspections": [ + { + "shortName": "RemoveLiteralUnderscores", + "displayName": "Underscores in numeric literal", + "enabled": false, + "description": "Reports numeric literals with underscores and suggests removing them with a quick-fix. This may be useful if you need to lower the language level.\n\nThe quick-fix removes underscores from numeric literals. For example `1_000_000` will be converted to `1000000`.\n\n\n*Numeric literals with underscores* appeared in Java 7.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions.\n\nNew in 2020.2" + }, + { + "shortName": "BadOddness", + "displayName": "Suspicious oddness check", + "enabled": false, + "description": "Reports odd-even checks of the following form: `x % 2 == 1`. Such checks fail when used with negative odd values. Consider using `x % 2 != 0` or `(x & 1) == 1` instead." + }, + { + "shortName": "ComparisonOfShortAndChar", + "displayName": "Comparison of 'short' and 'char' values", + "enabled": true, + "description": "Reports equality comparisons between `short` and `char` values.\n\nSuch comparisons may cause subtle bugs because while both values are 2-byte long, `short` values are\nsigned, and `char` values are unsigned.\n\n**Example:**\n\n\n if (Character.MAX_VALUE == shortValue()) {} //never can be true\n" + }, + { + "shortName": "InsertLiteralUnderscores", + "displayName": "Unreadable numeric literal", + "enabled": true, + "description": "Reports long numeric literals without underscores and suggests adding them. Underscores make such literals easier to read.\n\nExample:\n\n\n 1000000\n\nAfter the quick-fix is applied:\n\n\n 1_000_000\n\nThis inspection only reports if the language level of the project of module is 7 or higher.\n\nNew in 2020.2" + }, + { + "shortName": "DivideByZero", + "displayName": "Division by zero", + "enabled": true, + "description": "Reports division by zero or remainder by zero. Such expressions will produce an `Infinity`, `-Infinity` or `NaN` result for doubles or floats, and will throw an `ArithmeticException` for integers.\n\nWhen the expression has a `NaN` result, the fix suggests replacing the division expression with the `NaN` constant." + }, + { + "shortName": "ComparisonToNaN", + "displayName": "Comparison to 'Double.NaN' or 'Float.NaN'", + "enabled": true, + "description": "Reports any comparisons to `Double.NaN` or `Float.NaN`. Such comparisons are never meaningful, as NaN is not equal to anything, including itself. Use the `Double.isNaN()` or `Float.isNaN()` methods instead.\n\n**Example:**\n\n\n if (x == Double.NaN) {...}\n\nAfter the quick-fix is applied:\n\n\n if (Double.isNaN(x)) {...}\n" + }, + { + "shortName": "ConfusingFloatingPointLiteral", + "displayName": "Confusing floating-point literal", + "enabled": false, + "description": "Reports any floating point numbers that don't have a decimal point, numbers before the decimal point, or numbers after the decimal point.\n\nSuch literals may be confusing, and violate several coding standards.\n\n**Example:**\n\n double d = .03;\n\nAfter the quick-fix is applied:\n\n double d = 0.03;\n\n\nUse the **Ignore floating point literals in scientific notation** option to ignore floating point numbers in scientific notation." + }, + { + "shortName": "UnaryPlus", + "displayName": "Unary plus", + "enabled": true, + "description": "Reports usages of the `+` unary operator. The unary plus is usually a null operation, and its presence might represent a coding error. For example, in a combination with the increment operator (like in `+++`) or with the equal operator (like in `=+`).\n\n**Example:**\n\n\n void unaryPlus(int i) {\n int x = + +i;\n }\n\nThe following quick fixes are suggested:\n\n* Remove `+` operators before the `i` variable:\n\n\n void unaryPlus(int i) {\n int x = i;\n }\n\n* Replace `+` operators with the prefix increment operator:\n\n\n void unaryPlus(int i) {\n int x = ++i;\n }\n\n\nUse the checkbox below to report unary pluses that are used together with a binary or another unary expression.\nIt means the inspection will not report situations when a unary plus expression is used in array\ninitializer expressions or as a method argument." + }, + { + "shortName": "OctalAndDecimalIntegersMixed", + "displayName": "Octal and decimal integers in same array", + "enabled": false, + "description": "Reports mixed octal and decimal integer literals in a single array initializer. This situation might happen when you copy a list of numbers into an array initializer. Some numbers in the array might be zero-padded and the compiler will interpret them as octal.\n\n**Example:**\n\n int[] elapsed = {1, 13, 052};\n\nAfter the quick-fix that removes a leading zero is applied:\n\n int[] elapsed = {1, 13, 52};\n\nIf it is an octal number (for example, after a variable inline), then you can use another quick-fix that converts octal to decimal:\n`int[] elapsed = {1, 13, 42};`" + }, + { + "shortName": "UnnecessaryUnaryMinus", + "displayName": "Unnecessary unary minus", + "enabled": true, + "description": "Reports unnecessary unary minuses. Such expressions might be hard to understand and might contain errors.\n\n**For example:**\n\n void unaryMinus(int i) {\n int x = - -i;\n }\n\nThe following quick fixes are suggested here:\n\n* Remove `-` operators before the `i` variable:\n\n void unaryMinus(int i) {\n int x = i;\n }\n\n* Replace `-` operators with the prefix decrement operator:\n\n void unaryMinus(int i) {\n int x = --i;\n }\n\n**Another example:**\n\n void unaryMinus(int i) {\n i += - 8;\n }\n\nAfter the quick-fix is applied:\n\n void unaryMinus(int i) {\n i -= 8;\n }\n" + }, + { + "shortName": "CachedNumberConstructorCall", + "displayName": "Number constructor call with primitive argument", + "enabled": true, + "description": "Reports instantiations of new `Long`, `Integer`, `Short`, or `Byte` objects that have a primitive `long`, `integer`, `short`, or `byte` argument.\n\nIt is recommended that you use the static method `valueOf()`\nintroduced in Java 5. By default, this method caches objects for values between -128 and\n127 inclusive.\n\n**Example:**\n\n\n Integer i = new Integer(1);\n Long l = new Long(1L);\n\nAfter the quick-fix is applied, the code changes to:\n\n\n Integer i = Integer.valueOf(1);\n Long l = Long.valueOf(1L);\n\nThis inspection only reports if the language level of the project or module is 5 or higher\n\n\nUse the **Ignore new number expressions with a String argument** option to ignore calls to number constructors with a `String` argument.\n\n\nUse the **Report only when constructor is @Deprecated** option to only report calls to deprecated constructors.\n`Long`, `Integer`, `Short` and `Byte` constructors are deprecated since JDK 9." + }, + { + "shortName": "PointlessArithmeticExpression", + "displayName": "Pointless arithmetic expression", + "enabled": true, + "description": "Reports pointless arithmetic expressions. Such expressions include adding or subtracting zero, multiplying by zero or one, and division by one.\n\nSuch expressions may be the result of automated refactorings and they are unlikely to be what the developer intended to do.\n\nThe quick-fix simplifies such expressions.\n\n**Example:**\n\n\n void f(int a) {\n int x = a - a;\n int y = a + 0;\n int res = x / x;\n }\n\nAfter the quick-fix is applied:\n\n\n void f(int a) {\n int x = 0;\n int y = a;\n int res = 1;\n }\n\n\nNote that in rare cases, the suggested replacement might not be completely equivalent to the original code\nfor all possible inputs. For example, the inspection suggests replacing `x / x` with `1`.\nHowever, if `x` is zero, the original code throws `ArithmeticException` or results in `NaN`.\nAlso, if `x` is `NaN`, then the result is also `NaN`. It's very unlikely that such behavior is intended." + }, + { + "shortName": "CharUsedInArithmeticContext", + "displayName": "'char' expression used in arithmetic context", + "enabled": false, + "description": "Reports expressions of the `char` type used in addition or subtraction expressions.\n\nSuch code is not necessarily an issue but may result in bugs (for example,\nif a string is expected).\n\n**Example:** `int a = 'a' + 42;`\n\nAfter the quick-fix is applied: `int a = (int) 'a' + 42;`\n\nFor the `String` context:\n\n int i1 = 1;\n int i2 = 2;\n System.out.println(i2 + '-' + i1 + \" = \" + (i2 - i1));\n\nAfter the quick-fix is applied:\n`System.out.println(i2 + \"-\" + i1 + \" = \" + (i2 - i1));`" + }, + { + "shortName": "UnpredictableBigDecimalConstructorCall", + "displayName": "Unpredictable 'BigDecimal' constructor call", + "enabled": true, + "description": "Reports calls to `BigDecimal` constructors that accept a `double` value. These constructors produce `BigDecimal` that is exactly equal to the supplied `double` value. However, because doubles are encoded in the IEEE 754 64-bit double-precision binary floating-point format, the exact value can be unexpected.\n\nFor example, `new BigDecimal(0.1)` yields a `BigDecimal` object. Its value is\n`0.1000000000000000055511151231257827021181583404541015625`\nwhich is the nearest number to 0.1 representable as a double.\nTo get `BigDecimal` that stores the same value as written in the source code,\nuse either `new BigDecimal(\"0.1\")` or `BigDecimal.valueOf(0.1)`.\n\n**Example:**\n\n\n class Constructor {\n void foo() {\n new BigDecimal(0.1);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Constructor {\n void foo() {\n new BigDecimal(\"0.1\");\n }\n }\n" + }, + { + "shortName": "IntegerDivisionInFloatingPointContext", + "displayName": "Integer division in floating-point context", + "enabled": true, + "description": "Reports integer divisions where the result is used as a floating-point number. Such division is often an error and may have unexpected results due to the truncation that happens in integer division.\n\n**Example:**\n\n\n float x = 3.0F + 3/5;\n" + }, + { + "shortName": "NegativeIntConstantInLongContext", + "displayName": "Negative int hexadecimal constant in long context", + "enabled": false, + "description": "Reports negative int hexadecimal constants in long context. Such constants are implicitly widened to long, which means their higher bits will become 1 rather than 0 (e.g., 0xFFFF_FFFF will become 0xFFFF_FFFF_FFFF_FFFFL). Unlikely this is intended, and even if it is, using an explicit long constant would be less confusing.\n\n**Example:**\n\n\n // Warning: this is int constant -1 which is widened to long\n // becoming 0xFFFF_FFFF_FFFF_FFFFL.\n long mask = 0xFFFF_FFFF;\n\nNew in 2022.3" + }, + { + "shortName": "ImplicitNumericConversion", + "displayName": "Implicit numeric conversion", + "enabled": false, + "description": "Reports implicit conversion between numeric types.\n\nImplicit numeric conversion is not a problem in itself but, if unexpected, may cause difficulties when tracing bugs.\n\n**Example:**\n\n\n double m(int i) {\n return i * 10;\n }\n\nAfter the quick-fix is applied:\n\n\n double m(int i) {\n return (double) (i * 10);\n }\n\nConfigure the inspection:\n\n* Use the **Ignore widening conversions** option to ignore implicit conversion that cannot result in data loss (for example, `int`-\\>`long`).\n* Use the **Ignore conversions from and to 'char'** option to ignore conversion from and to `char`. The inspection will still report conversion from and to floating-point numbers.\n* Use the **Ignore conversion from constants and literals** to make the inspection ignore conversion from literals and compile-time constants." + }, + { + "shortName": "BigDecimalEquals", + "displayName": "'equals()' called on 'BigDecimal'", + "enabled": false, + "description": "Reports `equals()` calls that compare two `java.math.BigDecimal` numbers. This is normally a mistake, as two `java.math.BigDecimal` numbers are only equal if they are equal in both value and scale.\n\n**Example:**\n\n\n if (new BigDecimal(\"2.0\").equals(\n new BigDecimal(\"2.00\"))) {} // false\n\nAfter the quick-fix is applied:\n\n\n if (new BigDecimal(\"2.0\").compareTo(\n new BigDecimal(\"2.00\")) == 0) {} // true\n" + }, + { + "shortName": "OctalLiteral", + "displayName": "Octal integer", + "enabled": true, + "description": "Reports octal integer literals. Some coding standards prohibit the use of octal literals, as they may be easily confused with decimal literals.\n\nExample:\n\n\n int i = 015;\n int j = 0_777;\n\nThis inspection has two different quick-fixes.\nAfter the **Convert octal literal to decimal literal** quick-fix is applied, the code changes to:\n\n\n int i = 13;\n int j = 511;\n\nAfter the **Remove leading zero to make decimal** quick-fix is applied, the code changes to:\n\n\n int i = 15;\n int j = 777;\n" + }, + { + "shortName": "ConstantMathCall", + "displayName": "Constant call to 'Math'", + "enabled": false, + "description": "Reports calls to `java.lang.Math` or `java.lang.StrictMath` methods that can be replaced with simple compile-time constants.\n\n**Example:**\n\n double v = Math.sin(0.0);\n\nAfter the quick-fix is applied:\n\n double v = 0.0;\n" + }, + { + "shortName": "NumericOverflow", + "displayName": "Numeric overflow", + "enabled": true, + "description": "Reports expressions that overflow during computation. Usually, this happens by accident and indicates a bug. For example, a wrong type is used or a shift should be done in an opposite direction .\n\n**Examples:**\n\n\n float a = 1.0f/0.0f;\n long b = 30 * 24 * 60 * 60 * 1000;\n long c = 1000L << 62;\n" + }, + { + "shortName": "NonReproducibleMathCall", + "displayName": "Non-reproducible call to 'Math'", + "enabled": false, + "description": "Reports calls to `java.lang.Math` methods, which results are not guaranteed to be reproduced precisely.\n\nIn environments where reproducibility of results is required, `java.lang.StrictMath`\nshould be used instead." + }, + { + "shortName": "FloatingPointEquality", + "displayName": "Floating-point equality comparison", + "enabled": false, + "description": "Reports floating-point values that are being compared using the `==` or `!=` operator.\n\nFloating-point values are inherently inaccurate, and comparing them for exact equality is seldom the desired semantics.\n\nThis inspection ignores comparisons with zero and infinity literals.\n\n**Example:**\n\n\n void m(double d1, double d2) {\n if (d1 == d2) {}\n }\n" + }, + { + "shortName": "SuspiciousLiteralUnderscore", + "displayName": "Suspicious underscore in number literal", + "enabled": false, + "description": "Reports decimal number literals that use the underscore numeric separator with groups where the number of digits is not three. Such literals may contain a typo.\n\nThis inspection will not warn on literals containing two consecutive underscores.\nIt is also allowed to omit underscores in the fractional part of `double` and `float` literals.\n\n**Example:** `int oneMillion = 1_000_0000;`" + }, + { + "shortName": "LongLiteralsEndingWithLowercaseL", + "displayName": "'long' literal ending with 'l' instead of 'L'", + "enabled": true, + "description": "Reports `long` literals ending with lowercase 'l'. These literals may be confusing, as the lowercase 'l' looks very similar to a literal '1' (one).\n\n**Example:**\n\n\n long nights = 100l;\n\nAfter the quick-fix is applied:\n\n\n long nights = 100L;\n" + }, + { + "shortName": "BigDecimalMethodWithoutRoundingCalled", + "displayName": "Call to 'BigDecimal' method without a rounding mode argument", + "enabled": true, + "description": "Reports calls to `divide()` or `setScale()` without a rounding mode argument.\n\nSuch calls can lead to an `ArithmeticException` when the exact value cannot be represented in the result\n(for example, because it has a non-terminating decimal expansion).\n\nSpecifying a rounding mode prevents the `ArithmeticException`.\n\n**Example:**\n\n\n BigDecimal.valueOf(1).divide(BigDecimal.valueOf(3));\n" + }, + { + "shortName": "OverlyComplexArithmeticExpression", + "displayName": "Overly complex arithmetic expression", + "enabled": false, + "description": "Reports arithmetic expressions with the excessive number of terms. Such expressions might be hard to understand and might contain errors.\n\nParameters, field references, and other primary expressions are counted as a term.\n\n**Example:**\n\n int calc(int a, int b) {\n return a + a + a + b + b + b + b; // The line contains 7 terms and will be reported.\n }\n\nUse the field below to specify a number of terms allowed in arithmetic expressions." + } + ] + }, + { + "name": "Initialization", + "inspections": [ + { + "shortName": "DoubleBraceInitialization", + "displayName": "Double brace initialization", + "enabled": true, + "description": "Reports [Double Brace Initialization](https://www.c2.com/cgi/wiki?DoubleBraceInitialization).\n\nDouble brace initialization may cause memory leaks when used in a non-static context because it creates an anonymous class\nthat will reference the surrounding object.\n\nCompared to regular initialization, double brace initialization provides worse performance since it requires loading an\nadditional class.\n\nIt may also cause failure of `equals()` comparisons if the `equals()` method doesn't accept subclasses as\nparameters.\n\nIn addition, before Java 9, double brace initialization couldn't be combined with the diamond operator since it was incompatible\nwith anonymous classes.\n\n**Example:**\n\n\n List list = new ArrayList<>() {{\n add(1);\n add(2);\n }};\n\nAfter the quick-fix is applied:\n\n\n List list = new ArrayList<>();\n list.add(1);\n list.add(2);\n" + }, + { + "shortName": "NonFinalStaticVariableUsedInClassInitialization", + "displayName": "Non-final static field is used during class initialization", + "enabled": false, + "description": "Reports the use of non-`final` `static` variables during class initialization.\n\nIn such cases, the code semantics may become dependent on the class creation order. Additionally, such cases may lead to the use of\nvariables before their initialization, and generally cause difficult and confusing bugs.\n\n**Example:**\n\n\n class Foo {\n public static int bar = 0;\n\n static {\n System.out.println(bar);\n }\n }\n" + }, + { + "shortName": "NonThreadSafeLazyInitialization", + "displayName": "Unsafe lazy initialization of 'static' field", + "enabled": false, + "description": "Reports `static` variables that are lazily initialized in a non-thread-safe manner.\n\nLazy initialization of `static` variables should be done with an appropriate synchronization construct\nto prevent different threads from performing conflicting initialization.\n\nWhen applicable, a quick-fix, which introduces the\n[lazy initialization holder class idiom](https://en.wikipedia.org/wiki/Initialization_on_demand_holder_idiom), is suggested.\nThis idiom makes use of the fact that the JVM guarantees that a class will not be initialized until it is used.\n\n**Example:**\n\n\n class X {\n private static List list;\n\n public List getList() {\n if (list == null) {\n list = List.of(\"one\", \"two\", \"tree\");\n }\n return list;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class X {\n private static final class ListHolder {\n static final List list = List.of(\"one\", \"two\", \"tree\");\n }\n\n public List getList() {\n return ListHolder.list;\n }\n }\n" + }, + { + "shortName": "StaticVariableInitialization", + "displayName": "Static field may not be initialized", + "enabled": false, + "description": "Reports `static` variables that may be uninitialized upon class initialization.\n\n**Example:**\n\n\n class Foo {\n public static int bar;\n\n static { }\n }\n\nNote that this inspection uses a very conservative dataflow algorithm and may incorrectly report `static` variables as uninitialized. Variables\nreported as initialized will always be initialized.\n\nUse the **Ignore primitive fields** option to ignore uninitialized primitive fields." + }, + { + "shortName": "OverridableMethodCallDuringObjectConstruction", + "displayName": "Overridable method called during object construction", + "enabled": false, + "description": "Reports calls to overridable methods of the current class during object construction.\n\nA method is called during object construction if it is inside a:\n\n* Constructor\n* Non-static instance initializer\n* Non-static field initializer\n* `clone()` method\n* `readObject()` method\n* `readObjectNoData()` method\n* Methods are overridable if they are not declared as `final`, `static`, or `private`. Package-local methods are considered safe, even though they are overridable. Such calls may result in subtle bugs, as object initialization may happen before the method call.\n* **Example:**\n\n\n class Parent {\n void someMethod() { }\n }\n\n class Child extends Parent {\n Child() {\n someMethod();\n }\n }\n\n* This inspection shares the functionality with the following inspections:\n * Abstract method called during object construction\n * Overridden method called during object construction\n* Only one inspection should be enabled at once to prevent warning duplication." + }, + { + "shortName": "InstanceVariableUninitializedUse", + "displayName": "Instance field used before initialization", + "enabled": false, + "description": "Reports instance variables that are read before initialization.\n\nThe inspection ignores equality checks with `null`.\n\n**Example:**\n\n\n class Foo {\n int bar;\n\n Foo() {\n System.out.println(bar);\n }\n }\n\nNote that this inspection uses a very conservative dataflow algorithm and may incorrectly report instance variables as uninitialized. Variables\nreported as initialized will always be initialized.\n\nUse the **Ignore if annotated by** option to specify special annotations. The inspection will ignore fields\nannotated with one of these annotations.\n\nUse the **Ignore primitive fields** option to ignore uninitialized primitive fields." + }, + { + "shortName": "AbstractMethodCallInConstructor", + "displayName": "Abstract method called during object construction", + "enabled": false, + "description": "Reports calls to `abstract` methods of the current class during object construction.\n\nA method is called during object construction if it is inside a:\n\n* Constructor\n* Non-static instance initializer\n* Non-static field initializer\n* `clone()` method\n* `readObject()` method\n* `readObjectNoData()` method\n\nSuch calls may result in subtle bugs, as object initialization may happen before the method call.\n\n**Example:**\n\n\n abstract class Parent {\n abstract void abstractMethod();\n }\n\n class Child extends Parent {\n Child() {\n abstractMethod();\n }\n }\n\nThis inspection shares the functionality with the following inspections:\n\n* Overridable method called during object construction\n* Overridden method called during object construction\n\nOnly one inspection should be enabled at once to prevent warning duplication." + }, + { + "shortName": "StaticVariableUninitializedUse", + "displayName": "Static field used before initialization", + "enabled": false, + "description": "Reports `static` variables that are read before initialization.\n\nThe inspection ignores equality checks with `null`.\n\n**Example:**\n\n\n class Foo {\n public static int bar;\n\n public static void main(String[] args) {\n System.out.println(bar);\n }\n }\n\nNote that this inspection uses a very conservative dataflow algorithm and may incorrectly report `static` variables as uninitialized. Variables\nreported as initialized will always be initialized.\n\nUse the **Ignore primitive fields** option to ignore uninitialized primitive fields." + }, + { + "shortName": "OverriddenMethodCallDuringObjectConstruction", + "displayName": "Overridden method called during object construction", + "enabled": false, + "description": "Reports any calls to overridden methods of the current class during object construction. This happens if an object construction is inside:\n\n* A constructor\n* A non-static instance initializer\n* A non-static field initializer\n* `clone()`\n* `readObject()`\n* `readObjectNoData()`\n\nSuch calls may result in subtle bugs, as the object is not guaranteed to be initialized before the method call occurs.\n\nExample:\n\n\n abstract class Parent {\n void someMethod() { }\n }\n\n class Child extends Parent {\n Child() {\n someMethod();\n }\n\n @Override\n void someMethod() { }\n }\n\nThis inspection shares its functionality with:\n\n* The **Abstract method called during object construction** inspection\n* The **Overridable method called during object construction** inspection\n\nOnly one inspection should be enabled at the same time to prevent duplicate warnings." + }, + { + "shortName": "InstanceVariableInitialization", + "displayName": "Instance field may not be initialized", + "enabled": false, + "description": "Reports instance variables that may be uninitialized upon object initialization.\n\n**Example:**\n\n\n class Foo {\n public int bar;\n\n static { }\n }\n\nNote that this inspection uses a very conservative dataflow algorithm and may incorrectly report instance variables as uninitialized. Variables\nreported as initialized will always be initialized.\n\nUse the **Ignore primitive fields** option to ignore uninitialized primitive fields." + }, + { + "shortName": "ThisEscapedInConstructor", + "displayName": "'this' reference escaped in object construction", + "enabled": false, + "description": "Reports possible escapes of `this` during the object initialization. The escapes occur when `this` is used as a method argument or an object of assignment in a constructor or initializer. Such escapes may result in subtle bugs, as the object is now available in the context where it is not guaranteed to be initialized.\n\n**Example:**\n\n\n class Foo {\n {\n System.out.println(this);\n }\n }\n" + } + ] + }, + { + "name": "HTML", + "inspections": [ + { + "shortName": "HtmlUnknownBooleanAttribute", + "displayName": "Incorrect boolean attribute", + "enabled": false, + "description": "Reports an HTML non-boolean attribute without a value. Suggests configuring attributes that should not be reported." + }, + { + "shortName": "HtmlUnknownTarget", + "displayName": "Unresolved file in a link", + "enabled": false, + "description": "Reports an unresolved file in a link." + }, + { + "shortName": "HtmlUnknownAttribute", + "displayName": "Unknown attribute", + "enabled": false, + "description": "Reports an unknown HTML attribute. Suggests configuring attributes that should not be reported." + }, + { + "shortName": "HtmlExtraClosingTag", + "displayName": "Redundant closing tag", + "enabled": false, + "description": "Reports redundant closing tags on empty elements, for example, `img` or `br`.\n\n**Example:**\n\n\n \n \n

    \n \n \n\nAfter the quick-fix is applied:\n\n\n \n \n
    \n \n \n" + }, + { + "shortName": "HtmlUnknownTag", + "displayName": "Unknown tag", + "enabled": false, + "description": "Reports an unknown HTML tag. Suggests configuring tags that should not be reported." + }, + { + "shortName": "RequiredAttributes", + "displayName": "Missing required attribute", + "enabled": false, + "description": "Reports a missing mandatory attribute in an XML/HTML tag. Suggests configuring attributes that should not be reported." + }, + { + "shortName": "HtmlWrongAttributeValue", + "displayName": "Wrong attribute value", + "enabled": false, + "description": "Reports an incorrect HTML attribute value." + }, + { + "shortName": "CheckValidXmlInScriptTagBody", + "displayName": "Malformed content of 'script' tag", + "enabled": false, + "description": "Reports contents of `script` tags that are invalid XML. \n\n**Example:**\n\n\n \n\nAfter the quick-fix is applied:\n\n\n \n" + }, + { + "shortName": "HtmlMissingClosingTag", + "displayName": "Missing closing tag", + "enabled": false, + "description": "Reports an HTML element without a closing tag. Some coding styles require that HTML elements have closing tags even where this is optional.\n\n**Example:**\n\n\n \n \n

    Behold!\n \n \n\nAfter the quick-fix is applied:\n\n\n \n \n

    Behold!

    \n \n \n" + }, + { + "shortName": "HtmlUnknownAnchorTarget", + "displayName": "Unresolved fragment in a link", + "enabled": false, + "description": "Reports an unresolved last part of an URL after the `#` sign." + }, + { + "shortName": "CheckEmptyScriptTag", + "displayName": "Empty tag", + "enabled": false, + "description": "Reports empty tags that do not work in some browsers.\n\n**Example:**\n\n\n \n \n \n" + } + ] + }, + { + "name": "Security", + "inspections": [ + { + "shortName": "CloneableClassInSecureContext", + "displayName": "Cloneable class in secure context", + "enabled": false, + "description": "Reports classes which may be cloned.\n\n\nA class\nmay be cloned if it supports the `Cloneable` interface,\nand its `clone()` method is not defined to immediately\nthrow an error. Cloneable classes may be dangerous in code intended for secure use.\n\n**Example:**\n`class SecureBean implements Cloneable {}`\n\nAfter the quick-fix is applied:\n`class SecureBean {}`\n\n\nWhen the class extends an existing cloneable class or implements a cloneable interface,\nthen after the quick-fix is applied, the code may look like:\n\n class SecureBean extends ParentBean {\n @Override\n protected SecureBean clone() throws CloneNotSupportedException {\n throw new CloneNotSupportedException();\n }\n }\n" + }, + { + "shortName": "JDBCExecuteWithNonConstantString", + "displayName": "Call to 'Statement.execute()' with non-constant string", + "enabled": false, + "description": "Reports calls to `java.sql.Statement.execute()` or any of its variants which take a dynamically-constructed string as the query to execute.\n\nConstructed SQL statements are a common source of security breaches.\nBy default, this inspection ignores compile-time constants.\n\n**Example:**\n\n\n ResultSet execute(Statement statement, String name) throws SQLException {\n return statement.executeQuery(\"select * from \" + name); // reports warning\n }\n\n\nUse the inspection options to consider any `static` `final` fields as constant.\nBe careful, because strings like the following will be ignored when the option is enabled:\n\n\n private static final String SQL = \"SELECT * FROM user WHERE name='\" + getUserInput() + \"'\";\n" + }, + { + "shortName": "SerializableDeserializableClassInSecureContext", + "displayName": "Serializable class in secure context", + "enabled": false, + "description": "Reports classes that may be serialized or deserialized.\n\n\nA class may be serialized if it supports the `Serializable` interface,\nand its `readObject()` and `writeObject()` methods are not defined to always\nthrow an exception. Serializable classes may be dangerous in code intended for secure use.\n\n**Example:**\n\n\n class DeserializableClass implements Serializable { // the class doesn't contain 'writeObject()' method throwing an exception\n private int sensitive = 736326;\n\n private void readObject(ObjectInputStream in) {\n throw new Error();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class DeserializableClass implements Serializable {\n private int sensitive = 736326;\n\n private void readObject(ObjectInputStream in) {\n throw new Error();\n }\n\n private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {\n throw new java.io.NotSerializableException(\"DeserializableClass\");\n }\n }\n\n\nUse the following options to configure the inspection:\n\n* List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit `Serializable` from a superclass but are not intended for serialization. Note that it still may be more secure to add `readObject()` and `writeObject()` methods which always throw an exception, instead of ignoring those classes.\n* Whether to ignore serializable anonymous classes." + }, + { + "shortName": "NonFinalClone", + "displayName": "Non-final 'clone()' in secure context", + "enabled": false, + "description": "Reports `clone()` methods without the `final` modifier.\n\n\nSince `clone()` can be used to instantiate objects without using a constructor, allowing the `clone()`\nmethod to be overridden may result in corrupted objects, and even in security exploits. This may be prevented by making the\n`clone()` method or the enclosing class itself `final`.\n\n**Example:**\n\n\n class Main implements Cloneable {\n @Override\n protected Object clone() throws CloneNotSupportedException {\n return super.clone();\n }\n }\n" + }, + { + "shortName": "PublicStaticCollectionField", + "displayName": "'public static' collection field", + "enabled": false, + "description": "Reports modifiable `public` `static` Collection fields.\n\nEven though they are often used to store collections of constant values, these fields nonetheless represent a security\nhazard, as their contents may be modified even if the field is declared as `final`.\n\n**Example:**\n\n\n public static final List EVENTS = new ArrayList<>();\n \n\nUse the table in the **Options** section to specify methods returning unmodifiable collections.\n`public` `static` collection fields initialized with these methods will not be reported." + }, + { + "shortName": "JDBCPrepareStatementWithNonConstantString", + "displayName": "Call to 'Connection.prepare*()' with non-constant string", + "enabled": false, + "description": "Reports calls to `java.sql.Connection.prepareStatement()`, `java.sql.Connection.prepareCall()`, or any of their variants which take a dynamically-constructed string as the statement to prepare.\n\n\nConstructed SQL statements are a common source of\nsecurity breaches. By default, this inspection ignores compile-time constants.\n\n**Example:**\n\n\n String bar() { return \"bar\"; }\n\n Connection connection = DriverManager.getConnection(\"\", \"\", \"\");\n connection.(\"SELECT * FROM user WHERE name='\" + bar() + \"'\");\n\nUse the inspection settings to consider any `static` `final` fields as constants. Be careful, because strings like the following will be ignored when the option is enabled:\n\n\n static final String SQL = \"SELECT * FROM user WHERE name='\" + getUserInput() + \"'\";\n" + }, + { + "shortName": "SystemProperties", + "displayName": "Access of system properties", + "enabled": false, + "description": "Reports code that accesses system properties using one of the following methods:\n\n* `System.getProperties()`, `System.setProperty()`, `System.setProperties()`, `System.clearProperties()`\n* `Integer.getInteger()`\n* `Boolean.getBoolean()`\n\n\nWhile accessing the system properties is not a security risk in itself, it is often found in malicious code.\nCode that accesses system properties should be closely examined in any security audit." + }, + { + "shortName": "UnsecureRandomNumberGeneration", + "displayName": "Insecure random number generation", + "enabled": false, + "description": "Reports any uses of `java.lang.Random` or `java.lang.Math.random()`.\n\n\nIn secure environments,\n`java.secure.SecureRandom` is a better choice, since is offers cryptographically secure\nrandom number generation.\n\n**Example:**\n\n\n long token = new Random().nextLong();\n" + }, + { + "shortName": "CustomSecurityManager", + "displayName": "Custom 'SecurityManager'", + "enabled": false, + "description": "Reports user-defined subclasses of `java.lang.SecurityManager`.\n\n\nWhile not necessarily representing a security hole, such classes should be thoroughly\nand professionally inspected for possible security issues.\n\n**Example:**\n\n\n class CustomSecurityManager extends SecurityManager {\n }\n" + }, + { + "shortName": "ClassLoaderInstantiation", + "displayName": "'ClassLoader' instantiation", + "enabled": false, + "description": "Reports instantiations of the `java.lang.ClassLoader` class.\n\nWhile often benign, any instantiations of `ClassLoader` should be closely examined in any security audit.\n\n**Example:**\n\n Class loadExtraClass(String name) throws Exception {\n try(URLClassLoader loader =\n new URLClassLoader(new URL[]{new URL(\"extraClasses/\")})) {\n return loader.loadClass(name);\n }\n }\n \n" + }, + { + "shortName": "DesignForExtension", + "displayName": "Design for extension", + "enabled": false, + "description": "Reports methods which are not `static`, `private`, `final` or `abstract`, and whose bodies are not empty.\n\n\nCoding in a style that avoids such methods protects the contracts of classes from being broken by their subclasses. The\nbenefit of this style is that subclasses cannot corrupt the state of the superclass by forgetting to call the super method. The cost is\nthat\nsubclasses are limited in their flexibility, in particular they cannot prevent execution of code in the superclass. Use the quick-fix to\nadd\nthe missing modifiers.\n\n**Example:**\n\n\n class Foo {\n public boolean equals(Object o) { return true; }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n public final boolean equals(Object o) { return true; }\n }\n\nThis inspection is intended for code that is going to be used in secure environments, and is probably not appropriate for less restrictive environments." + }, + { + "shortName": "LoadLibraryWithNonConstantString", + "displayName": "Call to 'System.loadLibrary()' with non-constant string", + "enabled": false, + "description": "Reports calls to `java.lang.System.loadLibrary()`, `java.lang.System.load()`, `java.lang.Runtime.loadLibrary()` and `java.lang.Runtime.load()` which take a dynamically-constructed string as the name of the library.\n\n\nConstructed library name strings are a common source of security breaches.\nBy default, this inspection ignores compile-time constants.\n\n**Example:**\n\n\n void test(int i) {\n System.loadLibrary(\"foo\" + i);\n }\n\n\nUse the inspection settings to consider any `static final` fields as constant.\nBe careful, because strings like the following will be ignored when the option is enabled:\n\n\n private static final String LIBRARY = getUserInput();\n" + }, + { + "shortName": "RuntimeExecWithNonConstantString", + "displayName": "Call to 'Runtime.exec()' with non-constant string", + "enabled": false, + "description": "Reports calls to `java.lang.Runtime.exec()` which take a dynamically-constructed string as the command to execute.\n\n\nConstructed execution strings are a common source of security breaches.\nBy default, this inspection ignores compile-time constants.\n\n**Example:**\n\n\n String i = getUserInput();\n Runtime runtime = Runtime.getRuntime();\n runtime.exec(\"foo\" + i); // reports warning\n\n\nUse the inspection settings to consider any `static` `final` fields as constant.\nBe careful, because strings like the following will be ignored when the option is enabled:\n\n\n static final String COMMAND = \"ping \" + getDomainFromUserInput() + \"'\";\n" + }, + { + "shortName": "SystemSetSecurityManager", + "displayName": "Call to 'System.setSecurityManager()'", + "enabled": false, + "description": "Reports calls to `System.setSecurityManager()`.\n\nWhile often benign, any call to `System.setSecurityManager()` should be closely examined in any security audit." + }, + { + "shortName": "PublicStaticArrayField", + "displayName": "'public static' array field", + "enabled": false, + "description": "Reports `public` `static` array fields.\n\n\nSuch fields are often used to store arrays of constant values. Still, they represent a security\nhazard, as their contents may be modified, even if the field is declared `final`.\n\n**Example:**\n\n\n public static String[] allowedPasswords = {\"foo\", \"bar\"};\n" + }, + { + "shortName": "CustomClassloader", + "displayName": "Custom 'ClassLoader' is declared", + "enabled": false, + "description": "Reports user-defined subclasses of `java.lang.ClassLoader`.\n\n\nWhile not necessarily representing a security hole, such classes should be thoroughly\ninspected for possible security issues." + } + ] + }, + { + "name": "Properties files", + "inspections": [ + { + "shortName": "UnusedMessageFormatParameter", + "displayName": "Missing message format parameter", + "enabled": false, + "description": "Reports properties values that look like `java.text.MessageFormat` format strings but do not use some the parameters of the `{xx}` kind.\n\nExample:\n\n\n # parameter {0} is not used\n error.message=Something happened in line {1}\n \n" + }, + { + "shortName": "InconsistentResourceBundle", + "displayName": "Inconsistent resource bundle", + "enabled": false, + "description": "Reports problems in the properties files contained in the resource bundle.\n\n* **Report missing translation**\n\noption controls search for an untranslated properties. \nIt reports properties contained in parent properties file that are missing in inherited (unless it's a language dialect). \nE.g. having this resource bundle: \n**messages.properties** : **abc=xxx** \n**messages_fr.properties** : empty \nProperty **abc** will be reported as untranslated.\n\n* **Report inconsistent properties**\n\noption controls invalid resource bundle structure inspection. \nIt reports properties contained in inherited properties file that are missing in parent (or in sibling if there is no parent). \nE.g. having this resource bundle: \n**messages.properties** : empty \n**messages_fr.properties** : **abc=xxx** \nProperty **abc** translation here is not available for any language except French, and, thus, will be reported as missing in the (default) properties file **messages.properties** .\n\n* **Report properties overridden with the same value**\n\noption checks for properties which are copy-pasted into several properties files verbatim. \nE.g. in this resource bundle: \n**messages.properties** : **abc=xxx** \n**messages_fr.properties** : **abc=xxx** \nProperty **abc** will be reported as unnecessarily inherited in the file **messages_fr.properties** . \n\n* **Report properties overridden with different placeholders**\n\noption checks for properties which are overridden for placeholder consistency. \nE.g. in this resource bundle: \n**messages.properties** : \n**qwe={0}xxx{1}** \n**abc={0}yyy{1}** \n**messages_fr.properties** : \n**qwe={0}xxx{0}xxx{1}** \n**abc={0}yyy** \nProperty **abc** will be reported as property contains message format placeholders with value not corresponding to **messages.properties** . \n\n* **Report properties overridden with different values endings**\n\noption checks for properties which are overridden for ending consistency. \nE.g. in this resource bundle: \n**messages.properties** : \n**abc=xxxzzz** \n**messages_fr.properties** : \n**abc=xxx;** \nProperty **abc** will be reported as property contains special signs ( **'!'** , **'?'** , **'.'** , **':'** or **';'** ) at the end of value but value in **messages.properties** doesn't. " + }, + { + "shortName": "SuspiciousLocalesLanguages", + "displayName": "Suspicious resource bundle locale languages", + "enabled": false, + "description": "Reports locales with language codes that are not supported by Java." + }, + { + "shortName": "UseEllipsisInPropertyInspection", + "displayName": "Three dot characters instead of the ellipsis", + "enabled": false, + "description": "Reports three \"dot\" characters which are used instead of the ellipsis character for UTF-8 properties files." + }, + { + "shortName": "AlphaUnsortedPropertiesFile", + "displayName": "Properties file or resource bundle is alphabetically unsorted", + "enabled": false, + "description": "Reports alphabetically unsorted resource bundles or .properties files." + }, + { + "shortName": "TrailingSpacesInProperty", + "displayName": "Trailing spaces in property", + "enabled": false, + "description": "Reports properties whose keys or values end with a whitespace." + }, + { + "shortName": "UnusedProperty", + "displayName": "Unused property", + "enabled": false, + "description": "Reports properties that are not referenced outside of the .properties file they are contained in." + }, + { + "shortName": "WrongPropertyKeyValueDelimiter", + "displayName": "Property key/value delimiter doesn't match code style settings", + "enabled": false, + "description": "Reports properties in which key or value delimiters do not match code style settings." + }, + { + "shortName": "DuplicatePropertyInspection", + "displayName": "Duplicate property", + "enabled": false, + "description": "Reports duplicate property keys with different values, duplicate keys, or duplicate property values.\n\nExample:\n\n\n property1=value;\n property2=value;\n\nThe **Options** list allows selecting the area in which the inspection should search for duplicates." + }, + { + "shortName": "UnresolvedPropertyKey", + "displayName": "Invalid property key", + "enabled": true, + "description": "Reports invalid arguments that are passed to methods with parameters annotated as `@PropertyKey`.\n\nThese arguments should be valid property keys in corresponding properties files.\nAlso, the inspection verifies that the `resourceBundle`\nargument of the `@PropertyKey` annotation is an existing resource bundle.\n\n\nUse the quick-fix to create a new property or to select an existing one.\n\nExample:\n\n\n @PropertyKey(resourceBundle = \"myBundle\") String value = \"invalid.key\";\n" + } + ] + }, + { + "name": "EditorConfig", + "inspections": [ + { + "shortName": "EditorConfigRootDeclarationUniqueness", + "displayName": "Extra top-level declaration", + "enabled": false, + "description": "Reports multiple top-level declarations. There can be only one optional \"root=true\" top-level declaration in the EditorConfig file. Using multiple top-level declarations is not allowed." + }, + { + "shortName": "EditorConfigNumerousWildcards", + "displayName": "Too many wildcards", + "enabled": false, + "description": "Reports sections that contain too many wildcards. Using a lot of wildcards may lead to performance issues." + }, + { + "shortName": "EditorConfigKeyCorrectness", + "displayName": "Unknown property", + "enabled": false, + "description": "Reports properties that are not supported by the IDE. Note: some \"ij\" domain properties may require specific language plugins." + }, + { + "shortName": "EditorConfigEncoding", + "displayName": "File encoding doesn't match EditorConfig charset", + "enabled": false, + "description": "Checks that current file encoding matches the encoding defined in \"charset\" property of .editorconfig file." + }, + { + "shortName": "EditorConfigRootDeclarationCorrectness", + "displayName": "Unexpected top-level declaration", + "enabled": false, + "description": "Reports unexpected top-level declarations. Top-level declarations other than \"root=true\" are not allowed in the EditorConfig file." + }, + { + "shortName": "EditorConfigPatternRedundancy", + "displayName": "Duplicate or redundant pattern", + "enabled": false, + "description": "Reports file patterns that are redundant as there already are other patterns that define the same scope of files or even a broader one. For example, in `[{*.java,*}]` the first `*.java` pattern defines a narrower scope compared to `*`. That is why it is redundant and can be removed." + }, + { + "shortName": "EditorConfigDeprecatedDescriptor", + "displayName": "Deprecated property", + "enabled": false, + "description": "Reports EditorConfig properties that are no longer supported." + }, + { + "shortName": "EditorConfigShadowedOption", + "displayName": "Overridden property", + "enabled": false, + "description": "Reports properties that are already defined in other sections.\n\nFor example:\n\n\n [*.java]\n indent_size=4\n [{*.java,*.js}]\n indent_size=2\n\nThe second section includes all `*.java` files too but it also redefines indent_size. As a result the value 2 will be used for files matching `*.java`." + }, + { + "shortName": "EditorConfigEmptyHeader", + "displayName": "Empty header", + "enabled": false, + "description": "Reports sections with an empty header. Section header must contain file path globs in the format similar to one supported by `gitignore`." + }, + { + "shortName": "EditorConfigValueUniqueness", + "displayName": "Non-unique list value", + "enabled": false, + "description": "Reports duplicates in lists of values." + }, + { + "shortName": "EditorConfigMissingRequiredDeclaration", + "displayName": "Required declarations are missing", + "enabled": false, + "description": "Reports properties that miss the required declarations. Refer to the documentation for more information." + }, + { + "shortName": "EditorConfigSpaceInHeader", + "displayName": "Space in file pattern", + "enabled": false, + "description": "Reports space characters in wildcard patterns that affect pattern matching. If these characters are not intentional, they should be removed." + }, + { + "shortName": "EditorConfigOptionRedundancy", + "displayName": "Redundant property", + "enabled": false, + "description": "Reports properties that are redundant when another applicable section already contains the same property and value.\n\n\nFor example:\n\n\n [*]\n indent_size=4\n [*.java]\n indent_size=4\n\nare both applicable to `*.java` files and define the same `indent_size` value." + }, + { + "shortName": "EditorConfigUnexpectedComma", + "displayName": "Unexpected comma", + "enabled": false, + "description": "Reports commas that cannot be used in the current context. Commas are allowed only as separators for values in lists." + }, + { + "shortName": "EditorConfigCharClassRedundancy", + "displayName": "Unnecessary character class", + "enabled": false, + "description": "Reports character classes that consist of a single character. Such classes can be simplified to a character, for example `[a]`→`a`." + }, + { + "shortName": "EditorConfigPartialOverride", + "displayName": "Overlapping sections", + "enabled": false, + "description": "Reports subsets of files specified in the current section that overlap with other subsets in other sections. For example: `[{foo,bar}]` and `[{foo,bas}]` both contain \"foo\"." + }, + { + "shortName": "EditorConfigEmptySection", + "displayName": "Empty section", + "enabled": false, + "description": "Reports sections that do not contain any EditorConfig properties." + }, + { + "shortName": "EditorConfigShadowingOption", + "displayName": "Overriding property", + "enabled": false, + "description": "Reports properties that override the same properties defined earlier in the file.\n\nFor example:\n\n\n [*.java]\n indent_size=4\n [{*.java,*.js}]\n indent_size=2\n\nThe second section includes the same files as `[*.java]` but also sets indent_size to value 2. Thus the first declaration `indent_size=4`will be ignored." + }, + { + "shortName": "EditorConfigListAcceptability", + "displayName": "Unexpected value list", + "enabled": false, + "description": "Reports lists of values that are used in properties in which lists are not supported. In this case, only a single value can be specified." + }, + { + "shortName": "EditorConfigPatternEnumerationRedundancy", + "displayName": "Unnecessary braces", + "enabled": false, + "description": "Reports pattern lists that are either empty `{}` or contain just one pattern, for example `{foo}`. The braces are needed only if there are two and more, for example: `{foo,bar}`" + }, + { + "shortName": "EditorConfigReferenceCorrectness", + "displayName": "Invalid reference", + "enabled": false, + "description": "Reports identifiers that are either unknown or have a wrong type." + }, + { + "shortName": "EditorConfigPairAcceptability", + "displayName": "Unexpected key-value pair", + "enabled": false, + "description": "Reports key-value pairs that are not allowed in the current context." + }, + { + "shortName": "EditorConfigNoMatchingFiles", + "displayName": "No matching files", + "enabled": false, + "description": "Reports sections with wildcard patterns that do not match any files under the directory in which the `.editorconfig` file is located." + }, + { + "shortName": "EditorConfigWildcardRedundancy", + "displayName": "Redundant wildcard", + "enabled": false, + "description": "Reports wildcards that become redundant when the \"\\*\\*\" wildcard is used in the same section.\n\n\nThe \"\\*\\*\" wildcard defines a broader set of files than any other wildcard.\nThat is why, any other wildcard used in the same section has no affect and can be removed." + }, + { + "shortName": "EditorConfigHeaderUniqueness", + "displayName": "EditorConfig section is not unique", + "enabled": false, + "description": "Reports sections that define the same file pattern as other sections." + }, + { + "shortName": "EditorConfigValueCorrectness", + "displayName": "Invalid property value", + "enabled": false, + "description": "Reports property values that do not meet value restrictions. For example, some properties may be only \"true\" or \"false\", others contain only integer numbers etc. If a value has a limited set of variants, use code completion to see all of them." + }, + { + "shortName": "EditorConfigCharClassLetterRedundancy", + "displayName": "Duplicate character class letter", + "enabled": false, + "description": "Reports wildcard patterns in the EditorConfig section that contain a duplicate character in the character class, for example `[aa]`." + }, + { + "shortName": "EditorConfigUnusedDeclaration", + "displayName": "Unused declaration", + "enabled": false, + "description": "Reports unused declarations. Such declarations can be removed." + } + ] + }, + { + "name": "Java language level migration aids", + "inspections": [ + { + "shortName": "UseCompareMethod", + "displayName": "'compare()' method can be used to compare numbers", + "enabled": false, + "description": "Reports expressions that can be replaced by a call to the `Integer.compare()` method or a similar method from the `Long`, `Short`, `Byte`, `Double` or `Float` classes, instead of more verbose or less efficient constructs.\n\nIf `x` and `y` are boxed integers, then `x.compareTo(y)` is suggested,\nif they are primitives `Integer.compare(x, y)` is suggested.\n\n**Example:**\n\n\n public int compare(int x, int y) {\n return x > y ? 1 : x < y ? -1 : 0;\n }\n\nAfter the quick-fix is applied:\n\n\n public int compare(int x, int y) {\n return Integer.compare(x, y);\n }\n\n\nNote that `Double.compare` and `Float.compare` slightly change the code semantics. In particular,\nthey make `-0.0` and `0.0` distinguishable (`Double.compare(-0.0, 0.0)` yields -1).\nAlso, they consistently process `NaN` value. In most of the cases, this semantics change actually improves the\ncode. Use the checkbox to disable this inspection for floating point numbers if semantics change is unacceptable\nin your case.\n\nNew in 2017.2" + }, + { + "shortName": "EnumerationCanBeIteration", + "displayName": "Enumeration can be iteration", + "enabled": false, + "description": "Reports calls to `Enumeration` methods that are used on collections and may be replaced with equivalent `Iterator` constructs.\n\n**Example:**\n\n\n Enumeration keys = map.keys();\n while (keys.hasMoreElements()) {\n String name = keys.nextElement();\n }\n\nAfter the quick-fix is applied:\n\n\n Iterator iterator = map.keySet().iterator();\n while (iterator.hasNext()) {\n String name = iterator.next();\n }\n" + }, + { + "shortName": "IfCanBeSwitch", + "displayName": "'if' can be replaced with 'switch'", + "enabled": false, + "description": "Reports `if` statements that can be replaced with `switch` statements.\n\nThe replacement result is usually shorter and clearer.\n\n**Example:**\n\n\n void test(String str) {\n if (str.equals(\"1\")) {\n System.out.println(1);\n } else if (str.equals(\"2\")) {\n System.out.println(2);\n } else if (str.equals(\"3\")) {\n System.out.println(3);\n } else {\n System.out.println(4);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n void test(String str) {\n switch (str) {\n case \"1\" -> System.out.println(1);\n case \"2\" -> System.out.println(2);\n case \"3\" -> System.out.println(3);\n default -> System.out.println(4);\n }\n }\n \nThis inspection only reports if the language level of the project or module is 7 or higher.\n\nUse the **Minimum number of 'if' condition branches** field to specify the minimum number of `if` condition branches\nfor an `if` statement to have to be reported. Note that the terminal `else` branch (without `if`) is not counted.\n\n\nUse the **Suggest switch on numbers** option to enable the suggestion of `switch` statements on\nprimitive and boxed numbers and characters.\n\n\nUse the **Suggest switch on enums** option to enable the suggestion of `switch` statements on\n`enum` constants.\n\n\nUse the **Only suggest on null-safe expressions** option to suggest `switch` statements that can't introduce a `NullPointerException` only." + } + ] + }, + { + "name": "JavaBeans issues", + "inspections": [ + { + "shortName": "SuspiciousGetterSetter", + "displayName": "Suspicious getter/setter", + "enabled": false, + "description": "Reports getter or setter methods that access a field that is not expected by its name. For example, when `getY()` returns the `x` field. Usually, it might be a copy-paste error.\n\n**Example:**\n\n class Point {\n private int x;\n private int y;\n\n public void setX(int x) { // Warning: setter 'setX()' assigns field 'y'\n this.y = x;\n }\n\n public int getY() { // Warning: getter 'getY()' returns field 'x'\n return x;\n }\n }\n\n\nUse the checkbox below to report situations when a field in the class has a name that matches a name of a getter or a setter." + }, + { + "shortName": "PropertyValueSetToItself", + "displayName": "Property value set to itself", + "enabled": false, + "description": "Reports calls of setter methods with the same object getter as a value. Usually, this code does nothing and probably was not intended.\n\n**For example:**\n\n bean.setPayerId(bean.getPayerId());\n" + }, + { + "shortName": "ClassWithoutConstructor", + "displayName": "Class without constructor", + "enabled": false, + "description": "Reports classes without constructors.\n\nSome coding standards prohibit such classes." + }, + { + "shortName": "FieldHasSetterButNoGetter", + "displayName": "Field has setter but no getter", + "enabled": false, + "description": "Reports fields that have setter methods but no getter methods.\n\n\nIn certain bean containers, when used within the Java beans specification, such fields might be difficult\nto work with." + }, + { + "shortName": "ClassWithoutNoArgConstructor", + "displayName": "Class without no-arg constructor", + "enabled": false, + "description": "Reports classes without a constructor that takes no arguments (i.e. has no parameters). No-arg constructors are necessary in some contexts. For example, if a class needs to be created using reflection.\n\n**Example:**\n\n\n public class Bean {\n private String name;\n\n public Bean(String name) {\n this.name = name;\n }\n }\n\n\nUse the checkbox below to ignore classes without explicit constructors.\nThe compiler provides a default no-arg constructor to such classes." + } + ] + }, + { + "name": "Assignment issues", + "inspections": [ + { + "shortName": "AssignmentToNull", + "displayName": "'null' assignment", + "enabled": false, + "description": "Reports variables that are assigned to `null` outside a declaration.\n\nThe main purpose of `null` in Java is to denote uninitialized\nreference variables. In rare cases, assigning a variable explicitly to `null`\nis useful to aid garbage collection. However, using `null` to denote a missing, not specified, or invalid value or a not\nfound element is considered bad practice and may make your code more prone to `NullPointerExceptions`.\nInstead, consider defining a sentinel object with the intended semantics\nor use library types like `Optional` to denote the absence of a value.\n\n**Example:**\n\n\n Integer convert(String s) {\n Integer value;\n try {\n value = Integer.parseInt(s);\n } catch (NumberFormatException e) {\n // Warning: null is used to denote an 'invalid value'\n value = null;\n }\n return value;\n }\n\n\nUse the **Ignore assignments to fields** option to ignore assignments to fields." + }, + { + "shortName": "AssignmentToForLoopParameter", + "displayName": "Assignment to 'for' loop parameter", + "enabled": true, + "description": "Reports assignment to, or modification of a `for` loop parameter inside the body of the loop.\n\nAlthough occasionally intended, this construct may be confusing and is often the result of a typo or a wrong variable being used.\n\nThe quick-fix adds a declaration of a new variable.\n\n**Example:**\n\n\n for (String s : list) {\n // Warning: s is changed inside the loop\n s = s.trim();\n System.out.println(\"String: \" + s);\n }\n\nAfter the quick-fix is applied:\n\n\n for (String s : list) {\n String trimmed = s.trim();\n System.out.println(\"String: \" + trimmed);\n }\n\nAssignments in basic `for` loops without an update statement are not reported.\nIn such cases the assignment is probably intended and can't be easily moved to the update part of the `for` loop.\n\n**Example:**\n\n\n for (int i = 0; i < list.size(); ) {\n if (element.equals(list.get(i))) {\n list.remove(i);\n } else {\n // modification of for loop parameter is not reported\n // as there's no update statement\n i++;\n }\n }\n\nUse the **Check enhanced 'for' loop parameters** option to specify whether modifications of enhanced `for` loop parameters\nshould be also reported." + }, + { + "shortName": "NestedAssignment", + "displayName": "Nested assignment", + "enabled": false, + "description": "Reports assignment expressions that are nested inside other expressions.\n\nSuch expressions may be confusing and violate the general design principle, which states that any construct should do precisely one thing.\n\n**Example:**\n\n\n String userName;\n // Warning: result of assignment to 'userName' is used\n String message = \"Hello \" + (userName = \"Alice\") + \"!\"\n System.out.println(message);\n System.out.println(\"Goodbye \" + userName);\n" + }, + { + "shortName": "IncrementDecrementUsedAsExpression", + "displayName": "Result of '++' or '--' used", + "enabled": false, + "description": "Reports increment or decrement expressions that are nested inside other expressions. Such expressions may be confusing and violate the general design principle, which states that any construct should do precisely one thing.\n\nThe quick-fix extracts the increment or decrement operation to a separate expression statement.\n\n**Example:**\n\n\n int i = 10;\n while (i-- > 0) {\n System.out.println(i);\n }\n\nAfter the quick-fix is applied:\n\n\n int i = 10;\n while (i > 0) {\n i--;\n System.out.println(i);\n }\n i--;\n" + }, + { + "shortName": "ReplaceAssignmentWithOperatorAssignment", + "displayName": "Assignment can be replaced with operator assignment", + "enabled": false, + "description": "Reports assignment operations which can be replaced by operator-assignment.\n\nCode using operator assignment is shorter and may be clearer.\n\n**Example:**\n\n x = x + 3;\n x = x / 3;\n\nAfter the quick fix is applied:\n\n x += 3;\n x /= 3;\n\n\nUse the **Ignore conditional operators** option to ignore `&&`\nand `||`. Replacing conditional operators with operator\nassignment would change the evaluation from lazy to eager, which may change the semantics of the expression.\n\n\nUse the **Ignore obscure operators** option to ignore `^` and `%`, which are less known." + }, + { + "shortName": "AssignmentToStaticFieldFromInstanceMethod", + "displayName": "Assignment to static field from instance context", + "enabled": false, + "description": "Reports assignment to, or modification of `static` fields from within an instance method.\n\nAlthough legal, such assignments are tricky to do\nsafely and are often a result of marking fields `static` inadvertently.\n\n**Example:**\n\n\n class Counter {\n private static int count = 0;\n\n void increment() {\n // Warning: updating a static field\n // from an instance method\n count++;\n }\n }\n" + }, + { + "shortName": "AssignmentToCatchBlockParameter", + "displayName": "Assignment to 'catch' block parameter", + "enabled": true, + "description": "Reports assignments to, `catch` block parameters.\n\nChanging a `catch` block parameter is very confusing and should be discouraged.\n\nThe quick-fix adds a declaration of a new variable.\n\n**Example:**\n\n\n void processFile(String fileName) throws Exception {\n try {\n doProcessFile(fileName);\n } catch(Exception ex) {\n if (ex instanceof UncheckedIOException) {\n // Warning: catch block parameter reassigned\n ex = ((UncheckedIOException) ex).getCause();\n }\n throw ex;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n void processFile(String fileName) throws Exception {\n try {\n doProcessFile(fileName);\n } catch(Exception ex) {\n Exception unwrapped = ex;\n if (unwrapped instanceof UncheckedIOException) {\n unwrapped = ((UncheckedIOException)\n unwrapped).getCause();\n }\n throw unwrapped;\n }\n }\n" + }, + { + "shortName": "AssignmentToSuperclassField", + "displayName": "Constructor assigns value to field defined in superclass", + "enabled": false, + "description": "Reports assignment to, or modification of fields that are declared in a superclass from within a subclass constructor.\n\nIt is considered preferable to initialize the fields of a superclass in its own constructor and\ndelegate to that constructor in a subclass. This will also allow declaring a field `final`\nif it isn't changed after the construction.\n\n**Example:**\n\n\n class Super {\n int x;\n }\n class Sub extends Super {\n Sub(int _x) {\n // Warning: x is declared in a superclass\n x = _x;\n }\n }\n\nTo avoid the problem, declare a superclass constructor:\n\n\n class Super {\n final int x;\n\n Super(int _x) {\n x = _x;\n }\n }\n class Sub extends Super {\n Sub(int _x) {\n super(_x);\n }\n }\n" + }, + { + "shortName": "AssignmentUsedAsCondition", + "displayName": "Assignment used as condition", + "enabled": true, + "description": "Reports assignments that are used as a condition of an `if`, `while`, `for`, or `do` statement, or a conditional expression.\n\nAlthough occasionally intended, this usage is confusing and may indicate a typo, for example, `=` instead of `==`.\n\nThe quick-fix replaces `=` with `==`.\n\n**Example:**\n\n\n void update(String str, boolean empty) {\n // Warning: 'empty' is reassigned,\n // not compared to str.isEmpty()\n if (empty = str.isEmpty()) {\n ...\n }\n }\n\nAfter the quick-fix is applied:\n\n\n void update(String str, boolean empty) {\n if (empty == str.isEmpty()) {\n ...\n }\n }\n" + }, + { + "shortName": "AssignmentToMethodParameter", + "displayName": "Assignment to method parameter", + "enabled": false, + "description": "Reports assignment to, or modification of method parameters.\n\nAlthough occasionally intended, this construct may be confusing\nand is therefore prohibited in some Java projects.\n\nThe quick-fix adds a declaration of a new variable.\n\n**Example:**\n\n\n void printTrimmed(String s) {\n s = s.trim();\n System.out.println(s);\n }\n\nAfter the quick-fix is applied:\n\n\n void printTrimmed(String s) {\n String trimmed = s.trim();\n System.out.println(trimmed);\n }\n\n\nUse the **Ignore if assignment is a transformation of the original parameter** option to ignore assignments that modify\nthe parameter value based on its previous value." + }, + { + "shortName": "AssignmentToLambdaParameter", + "displayName": "Assignment to lambda parameter", + "enabled": false, + "description": "Reports assignment to, or modification of lambda parameters. Although occasionally intended, this construct may be confusing and is often caused by a typo or use of a wrong variable.\n\nThe quick-fix adds a declaration of a new variable.\n\n**Example:**\n\n\n list.forEach(s -> {\n s = s.trim();\n System.out.println(\"String: \" + s);\n });\n\nAfter the quick-fix is applied:\n\n\n list.forEach(s -> {\n String trimmed = s.trim();\n System.out.println(\"String: \" + trimmed);\n });\n\nUse the **Ignore if assignment is a transformation of the original parameter** option to ignore assignments that modify the parameter\nvalue based on its previous value." + }, + { + "shortName": "GroovyAssignmentToMethodParameter", + "displayName": "Assignment to method parameter", + "enabled": false, + "description": "Reports assignment to method parameters.\n\nWhile occasionally intended, this construct can be extremely confusing, and is often the result of a typo.\n\n**Example:**\n\n\n def m(a, b, c) {\n a = [] // warning\n }\n" + }, + { + "shortName": "GroovyUncheckedAssignmentOfMemberOfRawType", + "displayName": "Unchecked assignment from members of raw type", + "enabled": false, + "description": "Reports unchecked assignments from members of raw type.\n\n**Example:**\n\n\n List list = new ArrayList()\n List<String> a = list.get(0)\n" + }, + { + "shortName": "GroovyAssignabilityCheck", + "displayName": "Incompatible type assignments", + "enabled": false, + "description": "Reports assignments with incompatible types.\n\nSuch assignments might result in various runtime exceptions.\n\n**Example:**\n\n\n class A {}\n class B {}\n\n // incompatible assignment\n A a = new B()\n" + }, + { + "shortName": "GroovyResultOfAssignmentUsed", + "displayName": "Result of assignment used", + "enabled": false, + "description": "Reports assignment expressions nested inside other expressions to use the assigned value immediately.\n\n\nSuch expressions may be confusing and violating the general design principle that a\ngiven construct should do precisely one thing." + }, + { + "shortName": "GroovyNestedAssignment", + "displayName": "Nested assignment", + "enabled": false, + "description": "Reports assignment expressions nested inside other expressions. While admirably terse, such expressions may be confusing, and violate the general design principle that a given construct should do precisely one thing.\n\n**Example:**\n\n\n a = b = 1\n\n" + }, + { + "shortName": "GroovyAssignmentToForLoopParameter", + "displayName": "Assignment to 'for' loop parameter", + "enabled": false, + "description": "Reports assignments to **for** loop parameters inside the **for** loop body.\n\nWhile occasionally intended, this construct can be extremely confusing, and is often the result of a typo.\n\n**Example:**\n\n\n for (value in [1, 2, 3]) {\n value = 4 // warning\n }\n" + }, + { + "shortName": "GroovyAssignmentCanBeOperatorAssignment", + "displayName": "Assignment can be replaced with operator assignment", + "enabled": false, + "description": "Reports assignments which can be replaced by an operator assignment.\n\n**Example:**\n\n\n a = a + b\n\nAfter the quick-fix is applied:\n\n\n a += b\n\nConfigure the inspection:\n\n* Use the **Ignore conditional operators** option to ignore `&&` and `||` operators.\n* Use the **Ignore obscure operators** option to ignore `^` and `%` operators." + }, + { + "shortName": "GroovySillyAssignment", + "displayName": "Silly assignment", + "enabled": false, + "description": "Reports assignments of a variable to itself." + } + ] + }, + { + "name": "Naming conventions", + "inspections": [ + { + "shortName": "GroovyConstantNamingConvention", + "displayName": "Constant naming convention", + "enabled": false, + "description": "Reports constant with names which don't match the specified convention.\n\nConstants are fields of immutable type declared with `static` and `final` modifiers.\nReports constants whose names are either too short, too long, or do not follow the specified regular expression pattern.\n\nConfigure the inspection:\n\n* Use the **Pattern** field to specify `java.util.regex.Pattern` which a constant name is expected to match.\n* Use the **Min length** field to specify the minimum length of a constant name.\n* Use the **Max length** field to specify the maximum length of a constant name." + }, + { + "shortName": "GroovyStaticMethodNamingConvention", + "displayName": "Static method naming convention", + "enabled": false, + "description": "Reports static methods whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n\nUse the fields provided below to specify minimum length, maximum length and regular expression expected for static method names.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + { + "shortName": "GroovyLocalVariableNamingConvention", + "displayName": "Local variable naming convention", + "enabled": false, + "description": "Reports local variables whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n\nUse the fields provided below to specify minimum length, maximum length and regular expression expected for local variables names.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + { + "shortName": "GroovyInstanceMethodNamingConvention", + "displayName": "Instance method naming convention", + "enabled": false, + "description": "Reports instance methods whose names are too short, too long, or do not follow the specified regular expression pattern. Instance methods that override library methods are ignored by this inspection.\n\n\nUse the fields provided below to specify minimum length, maximum length and regular expression expected for instance method names.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + { + "shortName": "NewGroovyClassNamingConvention", + "displayName": "Class naming convention", + "enabled": false, + "description": "Reports classes whose names are too short, too long, or do not follow\nthe specified regular expression pattern.\n\nFor each class type, specify the minimum length, maximum length, and the regular expression expected for class names using the\nprovided input fields.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + { + "shortName": "GroovyInstanceVariableNamingConvention", + "displayName": "Instance variable naming convention", + "enabled": false, + "description": "Reports instance variables whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n\nUse the fields provided below to specify minimum length, maximum length and regular expression expected for\ninstance variable names.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + { + "shortName": "GroovyParameterNamingConvention", + "displayName": "Method parameter naming convention", + "enabled": false, + "description": "Reports method parameters whose names are either too short, too long, or do not follow the specified regular expression pattern.\n\n\nUse the fields provided below to specify minimum length, maximum length and regular expression\nexpected for method parameter names.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + { + "shortName": "GroovyStaticVariableNamingConvention", + "displayName": "Static variable naming convention", + "enabled": false, + "description": "Reports `static` variables whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n\nConstants, i.e. variables of immutable type declared\n`static final`, are not checked by this inspection\n\n\nUse the fields provided below to specify minimum length, maximum length and regular expression expected for static variable names.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + { + "shortName": "PropertyName", + "displayName": "Property naming convention", + "enabled": false, + "description": "Reports property names that do not follow the recommended naming conventions.\n\n\nConsistent naming allows for easier code reading and understanding.\nAccording to the [Kotlin official style guide](https://kotlinlang.org/docs/coding-conventions.html#naming-rules),\nproperty names should start with a lowercase letter and use camel case.\n\nIt is possible to introduce other naming rules by changing the \"Pattern\" regular expression.\n\n**Example:**\n\n\n val My_Cool_Property = \"\"\n\nA quick-fix renames the class according to the Kotlin naming conventions:\n\n\n val myCoolProperty = \"\"\n" + }, + { + "shortName": "ObjectPropertyName", + "displayName": "Object property naming convention", + "enabled": false, + "description": "Reports properties that do not follow the naming conventions.\n\nThe following properties are reported:\n\n* Top-level properties\n* Properties in objects and companion objects\n\nYou can specify the required pattern in the inspection options.\n\n[Recommended naming conventions](https://kotlinlang.org/docs/coding-conventions.html#naming-rules): it has to start with an uppercase letter, use camel case and no underscores.\n\n**Example:**\n\n\n // top-level property\n val USER_NAME_FIELD = \"UserName\"\n // top-level property holding reference to singleton object\n val PersonComparator: Comparator = /*...*/\n\n class Person {\n companion object {\n // property in companion object\n val NO_NAME = Person()\n }\n }\n" + }, + { + "shortName": "ObjectPrivatePropertyName", + "displayName": "Object private property naming convention", + "enabled": false, + "description": "Reports properties that do not follow the naming conventions.\n\nThe following properties are reported:\n\n* Private properties in objects and companion objects\n\nYou can specify the required pattern in the inspection options.\n\n[Recommended naming conventions](https://kotlinlang.org/docs/coding-conventions.html#naming-rules): it has to start with an underscore or an uppercase letter, use camel case.\n\n**Example:**\n\n\n class Person {\n companion object {\n // property in companion object\n private val NO_NAME = Person()\n }\n }\n" + }, + { + "shortName": "ClassName", + "displayName": "Class naming convention", + "enabled": false, + "description": "Reports class names that do not follow the recommended naming conventions.\n\n\nConsistent naming allows for easier code reading and understanding.\nAccording to the [Kotlin official style guide](https://kotlinlang.org/docs/coding-conventions.html#naming-rules),\nclass names should start with an uppercase letter and use camel case.\n\nIt is possible to introduce other naming rules by changing the \"Pattern\" regular expression.\n\n**Example:**\n\n\n class user(val name: String)\n\nA quick-fix renames the class according to the Kotlin naming conventions:\n\n\n class User(val name: String)\n" + }, + { + "shortName": "EnumEntryName", + "displayName": "Enum entry naming convention", + "enabled": false, + "description": "Reports enum entry names that do not follow the recommended naming conventions.\n\n**Example:**\n\n\n enum class Foo {\n _Foo,\n foo\n }\n\nTo fix the problem rename enum entries to match the recommended naming conventions." + }, + { + "shortName": "InconsistentCommentForJavaParameter", + "displayName": "Inconsistent comment for Java parameter", + "enabled": false, + "description": "Reports inconsistent parameter names for **Java** method calls specified in a comment block.\n\n**Examples:**\n\n\n // Java\n public class JavaService {\n public void invoke(String command) {}\n }\n\n\n // Kotlin\n fun main() {\n JavaService().invoke(/* name = */ \"fix\")\n }\n\nThe quick fix corrects the parameter name in the comment block:\n\n\n fun main() {\n JavaService().invoke(/* command = */ \"fix\")\n }\n" + }, + { + "shortName": "PackageName", + "displayName": "Package naming convention", + "enabled": false, + "description": "Reports package names that do not follow the naming conventions.\n\nYou can specify the required pattern in the inspection options.\n\n[Recommended naming conventions](https://kotlinlang.org/docs/coding-conventions.html#naming-rules): names of packages are always lowercase and should not contain underscores.\n\n**Example:**\n`org.example.project`\n\nUsing multi-word names is generally discouraged, but if you do need to use multiple words, you can either just concatenate them together or use camel case\n\n**Example:**\n`org.example.myProject`" + }, + { + "shortName": "LocalVariableName", + "displayName": "Local variable naming convention", + "enabled": false, + "description": "Reports local variables that do not follow the naming conventions.\n\nYou can specify the required pattern in the inspection options.\n\n[Recommended naming conventions](https://kotlinlang.org/docs/coding-conventions.html#function-names): it has to start with a lowercase letter, use camel case and no underscores.\n\n**Example:**\n\n\n fun fibonacciNumber(index: Int): Long = when(index) {\n 0 -> 0\n else -> {\n // does not follow naming conventions: contains underscore symbol (`_`)\n var number_one: Long = 0\n // does not follow naming conventions: starts with an uppercase letter\n var NUMBER_TWO: Long = 1\n // follow naming conventions: starts with a lowercase letter, use camel case and no underscores.\n var numberThree: Long = number_one + NUMBER_TWO\n\n for(currentIndex in 2..index) {\n numberThree = number_one + NUMBER_TWO\n number_one = NUMBER_TWO\n NUMBER_TWO = numberThree\n }\n numberThree\n }\n }\n" + }, + { + "shortName": "PrivatePropertyName", + "displayName": "Private property naming convention", + "enabled": false, + "description": "Reports private property names that do not follow the recommended naming conventions.\n\n\nConsistent naming allows for easier code reading and understanding.\nAccording to the [Kotlin official style guide](https://kotlinlang.org/docs/coding-conventions.html#naming-rules),\nprivate property names should start with a lowercase letter and use camel case.\nOptionally, underscore prefix is allowed but only for **private** properties.\n\nIt is possible to introduce other naming rules by changing the \"Pattern\" regular expression.\n\n**Example:**\n\n\n val _My_Cool_Property = \"\"\n\nA quick-fix renames the class according to the Kotlin naming conventions:\n\n\n val _myCoolProperty = \"\"\n" + }, + { + "shortName": "TestFunctionName", + "displayName": "Test function naming convention", + "enabled": false, + "description": "Reports test function names that do not follow the [recommended naming conventions](https://kotlinlang.org/docs/coding-conventions.html#names-for-test-methods)." + }, + { + "shortName": "FunctionName", + "displayName": "Function naming convention", + "enabled": false, + "description": "Reports function names that do not follow the recommended naming conventions.\n\n**Example:**\n\n\n fun Foo() {}\n\nTo fix the problem change the name of the function to match the recommended naming conventions." + }, + { + "shortName": "ConstPropertyName", + "displayName": "Const property naming convention", + "enabled": false, + "description": "Reports `const` property names that do not follow the recommended naming conventions.\n\n\nConsistent naming allows for easier code reading and understanding.\nAccording to the [Kotlin official style guide](https://kotlinlang.org/docs/coding-conventions.html#property-names),\n`const` properties should use uppercase underscore-separated names.\n\n**Example:**\n\n\n const val Planck: Double = 6.62607015E-34\n\nA quick-fix renames the property:\n\n\n const val PLANCK: Double = 6.62607015E-34\n" + }, + { + "shortName": "DollarSignInName", + "displayName": "Use of '$' in identifier", + "enabled": false, + "description": "Reports variables, methods, and classes with dollar signs (`$`) in their names. While such names are legal Java, their use outside of generated java code is strongly discouraged.\n\n**Example:**\n\n\n class SalaryIn${}\n\nRename quick-fix is suggested only in the editor." + }, + { + "shortName": "StandardVariableNames", + "displayName": "Standard variable names", + "enabled": false, + "description": "Reports variables with 'standard' names that do not correspond to their types. Such names may be confusing. There are the following standard names for specific types:\n\n* i, j, k, m, n - `int`\n* f - `float`\n* d - `double`\n* b - `byte`\n* c, ch - `char`\n* l - `long`\n* s, str - `String`\n\nRename quick-fix is suggested only in the editor.\n\n\nUse the option to ignore parameter names which are identical to the parameter name from a direct super method." + }, + { + "shortName": "JavaModuleNaming", + "displayName": "Java module name contradicts the convention", + "enabled": false, + "description": "Reports cases when a module name contradicts Java Platform Module System recommendations.\n\nOne of the [recommendations](http://mail.openjdk.org/pipermail/jpms-spec-experts/2017-March/000659.html)\nis to avoid using digits at the end of module names.\n\n**Example:**\n\n\n module foo1.bar2 {}\n" + }, + { + "shortName": "UpperCaseFieldNameNotConstant", + "displayName": "Non-constant field with upper-case name", + "enabled": false, + "description": "Reports non-`static` non-`final` fields whose names are all in upper case.\n\nSuch fields may cause confusion by breaking a common naming convention and\nare often used by mistake.\n\n**Example:**\n\n\n public static int THE_ANSWER = 42; //a warning here: final modifier is missing\n\nA quick-fix that renames such fields is available only in the editor." + }, + { + "shortName": "PackageNamingConvention", + "displayName": "Package naming convention", + "enabled": false, + "description": "Reports packages whose names are either too short, too long, or do not follow the specified regular expression pattern.\n\n**Example:**\n\n\n package io;\n\n\nUse the options to specify the minimum and maximum length of the package name\nas well as a regular expression that matches valid package names\n(regular expressions are in standard `java.util.regex` format)." + }, + { + "shortName": "QuestionableName", + "displayName": "Questionable name", + "enabled": false, + "description": "Reports variables, methods, or classes with questionable, not really descriptive names. Such names do not help to understand the code, and most probably were created as a temporary thing but were forgotten afterwards.\n\n**Example:**\n\n\n int aa = 42;\n\nRename quick-fix is suggested only in the editor.\n\n\nUse the option to list names that should be reported." + }, + { + "shortName": "LocalVariableNamingConvention", + "displayName": "Local variable naming convention", + "enabled": false, + "description": "Reports local variables whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n**Example:** `int X = 42;`\nshould be reported if the inspection is enabled with the default settings in which a variable name should start with a lowercase letter.\n\nConfigure the inspection:\n\n\nUse the fields in the **Options** section to specify the minimum length, maximum length, and a regular expression expected for local variable names.\nSpecify **0** in order not to check the length of names. Regular expressions should be specified in the standard **java.util.regex** format.\n\nUse checkboxes to ignore `for`-loop and `catch` section parameters." + }, + { + "shortName": "LambdaParameterNamingConvention", + "displayName": "Lambda parameter naming convention", + "enabled": false, + "description": "Reports lambda parameters whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n**Example:** `Function id = X -> X;`\nshould be reported if the inspection is enabled with the default settings in which a parameter name should start with a lowercase letter.\n\nConfigure the inspection:\n\n\nUse the fields in the **Options** section to specify the minimum length, maximum length, and a regular expression expected for lambda parameter names.\nSpecify **0** in order not to check the length of names.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + { + "shortName": "FieldNamingConvention", + "displayName": "Field naming convention", + "enabled": false, + "description": "Reports fields whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n**Example:** if the inspection is enabled for constants, and the minimum specified length for a field name is 5 (the default), the following constant\nproduces a warning because the length of its name is 3, which is less than 5: `public static final int MAX = 42;`.\n\nA quick-fix that renames such fields is available only in the editor.\n\nConfigure the inspection:\n\nUse the list in the **Options** section to specify which fields should be checked. Deselect the checkboxes for the fields for which\nyou want to skip the check.\n\nFor each field type, specify the minimum length, maximum length, and the regular expression expected for field names using the\nprovided input fields.\nSpecify **0** in the length fields to skip the corresponding checks.\n\nRegular expressions should be specified in the standard\n`java.util.regex` format." + }, + { + "shortName": "ParameterNameDiffersFromOverriddenParameter", + "displayName": "Parameter name differs from parameter in overridden or overloaded method", + "enabled": false, + "description": "Reports parameters whose names differ from the corresponding parameters of the methods they override or overload. While legal in Java, such inconsistent names may be confusing and decrease the documentation benefits of good naming practices.\n\n**Example:**\n\n\n class Person {\n Person(String fullName) {}\n }\n class Child extends Person {\n Child(String name) { super(name); }\n }\n\nAfter the quick-fix is applied:\n\n\n class Person {\n Person(String fullName) {}\n }\n class Child extends Person {\n Child(String fullName) { super(fullName); }\n }\n\n\nUse the options to indicate whether to ignore overridden parameter names that are only\na single character long or come from a library method. Both can be useful if\nyou do not wish to be bound by dubious naming conventions used in libraries." + }, + { + "shortName": "ParameterNamingConvention", + "displayName": "Method parameter naming convention", + "enabled": false, + "description": "Reports method parameters whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n**Example:** `void fooBar(int X)`\nshould be reported if the inspection is enabled with the default settings in which a parameter name should start with a lowercase letter.\n\nConfigure the inspection:\n\n\nUse the fields in the **Options** section to specify the minimum length, maximum length, and a regular expression expected for\nmethod parameter names. Specify **0** in order not to check the length of names.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + } + ] + }, + { + "name": "Packaging issues", + "inspections": [ + { + "shortName": "PackageWithTooFewClasses", + "displayName": "Package with too few classes", + "enabled": false, + "description": "Reports packages that contain fewer classes than the specified minimum.\n\nPackages which contain subpackages are not reported. Overly small packages may indicate a fragmented design.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor.\n\nUse the **Minimum number of classes** field to specify the minimum allowed number of classes in a package." + }, + { + "shortName": "ClassUnconnectedToPackage", + "displayName": "Class independent of its package", + "enabled": false, + "description": "Reports classes that don't depend on any other class in their package and are not a dependency for any other class in their package. Such classes indicate ad-hoc or incoherent packaging strategies and often may be profitably moved. Classes that are the only class in their package are not reported.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + { + "shortName": "DisjointPackage", + "displayName": "Package with disjoint dependency graph", + "enabled": false, + "description": "Reports packages whose classes can be separated into mutually independent subsets.\n\nSuch disjoint packages indicate ad-hoc packaging or a lack of conceptual cohesion.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + { + "shortName": "ExceptionPackage", + "displayName": "Exception package", + "enabled": false, + "description": "Reports packages that only contain classes that extend `java.lang.Throwable`, either directly or indirectly.\n\nAlthough exceptions usually don't depend on other classes for their implementation, they are normally not used separately.\nIt is often a better design to locate exceptions in the same package as the classes that use them.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + { + "shortName": "ClassOnlyUsedInOnePackage", + "displayName": "Class only used from one other package", + "enabled": false, + "description": "Reports classes that don't depend on any other class in their package, depend on classes from another package, and are themselves a dependency only for classes from this other package. Consider moving such classes to the package on which they depend.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + { + "shortName": "PackageInMultipleModules", + "displayName": "Package with classes in multiple modules", + "enabled": false, + "description": "Reports non-empty packages that are present in several modules. When packages are contained in several modules, it is very easy to create a class with the same name in two modules. A module which depends on these modules will see a conflict if it tries to use such a class. The Java Platform Module System disallows packages contained in more than one module (also called *split packages* )\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + { + "shortName": "PackageWithTooManyClasses", + "displayName": "Package with too many classes", + "enabled": false, + "description": "Reports packages that contain too many classes.\n\nOverly large packages may indicate a lack of design clarity.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor.\n\nUse the **Maximum number of classes** field to specify the maximum allowed number of classes in a package." + } + ] + }, + { + "name": "Verbose or redundant code constructs", + "inspections": [ + { + "shortName": "ReplaceOnLiteralHasNoEffect", + "displayName": "Replacement operation has no effect", + "enabled": true, + "description": "Reports calls to the `String` methods `replace()`, `replaceAll()` or `replaceFirst()` that have no effect. Such calls can be guaranteed to have no effect when the qualifier and search string are compile-time constants and the search string is not found in the qualifier. This is redundant and may indicate an error.\n\n**Example:**\n\n\n // replacement does nothing\n \"hello\".replace(\"$value$\", value);\n\nNew in 2022.1" + }, + { + "shortName": "UnnecessaryBreak", + "displayName": "Unnecessary 'break' statement", + "enabled": true, + "description": "Reports any unnecessary `break` statements.\n\nAn `break` statement is unnecessary if no other statements are executed after it has been removed.\n\n**Example:**\n\n\n switch (e) {\n case A -> {\n System.out.println(\"A\");\n break; // reports 'break' statement is unnecessary\n }\n default -> {\n System.out.println(\"Default\");\n break; // reports 'break' statement is unnecessary\n }\n }\n" + }, + { + "shortName": "SimplifyOptionalCallChains", + "displayName": "Optional call chain can be simplified", + "enabled": true, + "description": "Reports **Optional** call chains that can be simplified. Here are several examples of possible simplifications:\n\n* `optional.map(x -> true).orElse(false)` → `optional.isPresent()`\n* `optional.map(x -> Optional.of(x.trim())).orElseGet(Optional::empty)` → `optional.map(String::trim)`\n* `optional.map(x -> (String)x).orElse(null)` → `(String) optional.orElse(null)`\n* `Optional.ofNullable(optional.orElse(null))` → `optional`\n* `val = optional.orElse(null); val != null ? val : defaultExpr ` → `optional.orElse(defaultExpr)`\n* `val = optional.orElse(null); if(val != null) expr(val) ` → `optional.ifPresent(val -> expr(val))`\n\nNew in 2017.2" + }, + { + "shortName": "ConditionCoveredByFurtherCondition", + "displayName": "Condition is covered by further condition", + "enabled": true, + "description": "Reports conditions that become redundant as they are completely covered by a subsequent condition.\n\nFor example, in the `value != -1 && value > 0` condition, the first part is redundant:\nif it's false, then the second part is also false.\nOr in a condition like `obj != null && obj instanceof String`,\nthe null-check is redundant as `instanceof` operator implies non-nullity.\n\nNew in 2018.3" + }, + { + "shortName": "UnnecessaryContinue", + "displayName": "Unnecessary 'continue' statement", + "enabled": true, + "description": "Reports `continue` statements if they are the last reachable statements in the loop. These `continue` statements are unnecessary and can be safely removed.\n\nExample:\n\n\n for (String element: elements) {\n System.out.println();\n continue;\n }\n\nAfter the quick-fix is applied:\n\n\n for (String element: elements) {\n System.out.println();\n }\n\nThe inspection doesn't analyze JSP files.\n\n\nUse the **Ignore in then branch of 'if' statement with 'else' branch** option to ignore\n`continue` statements when they are placed in a `then` branch of a complete\n`if`-`else` statement.\n\nExample:\n\n\n for (String element: elements) {\n if(element.isEmpty()) {\n continue;\n } else {\n //...\n }\n }\n" + }, + { + "shortName": "NonStrictComparisonCanBeEquality", + "displayName": "Non-strict inequality '>=' or '<=' can be replaced with '=='", + "enabled": false, + "description": "Reports inequality conditions that, according to data flow analysis, can be satisfied only for a single operand value. Such conditions could be replaced with equality conditions to make the code clearer.\n\nExample:\n\n```\n if (x >= 10) {\n ...\n if (x <= 10) { // can be replaced with 'x == 10'\n }\n }\n```\n\nNew in 2022.2" + }, + { + "shortName": "StringBufferReplaceableByString", + "displayName": "'StringBuilder' can be replaced with 'String'", + "enabled": true, + "description": "Reports usages of `StringBuffer`, `StringBuilder`, or `StringJoiner` which can be replaced with a single `String` concatenation.\n\nUsing `String` concatenation\nmakes the code shorter and simpler.\n\n\nThis inspection only reports when the suggested replacement does not result in significant\nperformance drawback on modern JVMs. In many cases, `String` concatenation may perform better.\n\n**Example:**\n\n\n StringBuilder result = new StringBuilder();\n result.append(\"i = \");\n result.append(i);\n result.append(\";\");\n return result.toString();\n\nAfter the quick-fix is applied:\n\n\n String result = \"i = \" + i + \";\";\n return result;\n" + }, + { + "shortName": "OnlyOneElementUsed", + "displayName": "Only one element is used", + "enabled": false, + "description": "Reports lists, arrays, and strings where exactly one element is queried right upon the creation. Such expressions may appear after refactoring and usually could be replaced with an accessed element.\n\nExample:\n\n\n System.out.println(new int[] {1,2,3,4,5}[2]);\n\nAfter the quick-fix is applied:\n\n\n System.out.println(3);\n\nNew in 2022.3" + }, + { + "shortName": "UnnecessaryLabelOnBreakStatement", + "displayName": "Unnecessary label on 'break' statement", + "enabled": true, + "description": "Reports `break` statements with unnecessary labels. Such labels do not change the control flow but make the code difficult to follow.\n\n**Example:**\n\n\n label:\n for(int i = 0; i < 10; i++) {\n if (shouldBreak()) break label;\n //doSmth\n }\n\nAfter the quick-fix is applied:\n\n\n label:\n for(int i = 0; i < 10; i++) {\n if (shouldBreak()) break;\n //doSmth\n }\n" + }, + { + "shortName": "RedundantLengthCheck", + "displayName": "Redundant array length check", + "enabled": false, + "description": "Reports unnecessary array length checks followed by array iteration. When array length is zero, the iteration will be skipped anyway, so there's no need to check length explicitly.\n\nExample:\n\n\n void f(String[] array) {\n if (array.length != 0) { // unnecessary check\n for (String str : array) {\n System.out.println(str);\n }\n }\n }\n\nA quick-fix is suggested to unwrap or remove the length check:\n\n\n void f(String[] array) {\n for (String str : array) {\n System.out.println(str);\n }\n }\n\nNew in 2022.3" + }, + { + "shortName": "ExplicitArrayFilling", + "displayName": "Explicit array filling", + "enabled": true, + "description": "Reports loops that can be replaced with `Arrays.setAll()` or `Arrays.fill()` calls.\n\nThis inspection suggests replacing loops with `Arrays.setAll()` if the language level of the project or module is 8 or higher.\nReplacing loops with `Arrays.fill()` is possible with any language level.\n\nExample:\n\n\n for (int i=0; i x)`, `filter(x -> true)` or redundant `sorted()` or `distinct()` calls.\n\nNote that a mapping operation in code like `streamOfIntegers.map(Integer::valueOf)`\nworks as `requireNonNull()` check:\nif the stream contains `null`, it throws a `NullPointerException`, thus it's not absolutely redundant.\nDisable the **Report redundant boxing in Stream.map()** option if you do not want such cases to be reported.\n\nThis inspection only reports if the language level of the project or module is 8 or higher." + }, + { + "shortName": "RedundantCompareToJavaTime", + "displayName": "Expression with 'java.time' 'compareTo()' call can be simplified", + "enabled": false, + "description": "Reports `java.time` comparisons with `compareTo()` calls that can be replaced with `isAfter()`, `isBefore()` or `isEqual()` calls.\n\nExample:\n\n\n LocalDate date1 = LocalDate.now();\n LocalDate date2 = LocalDate.now();\n boolean t = date1.compareTo(date2) > 0;\n\nAfter the quick-fix is applied:\n\n\n LocalDate date1 = LocalDate.now();\n LocalDate date2 = LocalDate.now();\n boolean t = date1.isAfter(date2);\n\nNew in 2022.3" + }, + { + "shortName": "CastCanBeRemovedNarrowingVariableType", + "displayName": "Too weak variable type leads to unnecessary cast", + "enabled": true, + "description": "Reports type casts that can be removed if the variable type is narrowed to the cast type.\n\nExample:\n\n\n Object x = \" string \";\n System.out.println(((String)x).trim());\n\n\nHere, changing the type of `x` to `String` makes the cast redundant. The suggested quick-fix updates the variable type and\nremoves all redundant casts on that variable:\n\n\n String x = \" string \";\n System.out.println(x.trim());\n\nNew in 2018.2" + }, + { + "shortName": "ExcessiveLambdaUsage", + "displayName": "Excessive lambda usage", + "enabled": true, + "description": "Reports if a trivial lambda expression is used in cases in which there's an alternative method that behaves in the same way, but accepts a concrete value instead of a lambda.\n\nThis inspection helps simplify the code.\n\nExample:\n\n\n Optional.orElseGet(() -> null)\n\nAfter the quick-fix is applied:\n\n\n Optional.orElse(null)\n\nNew in 2017.1" + }, + { + "shortName": "StringOperationCanBeSimplified", + "displayName": "Redundant 'String' operation", + "enabled": true, + "description": "Reports redundant calls to `String` constructors and methods like `toString()` or `substring()` that can be replaced with a simpler expression.\n\nFor example, calls to these methods can be safely removed in code\nlike `\"string\".substring(0)`, `\"string\".toString()`, or\n`new StringBuilder().toString().substring(1,3)`.\n\nExample:\n\n\n System.out.println(new String(\"message\"));\n\nAfter the quick-fix is applied:\n\n\n System.out.println(\"message\");\n\n\nNote that the quick-fix removes the redundant constructor call, and this may affect `String` referential equality.\nIf you need to preserve it, even though it is considered bad practice, suppress the warning or use the inspection setting to ignore\nredundant `String` constructor calls.\n\n\nUse the **Do not report String constructor calls** option below to not report code like the example above.\nThis will avoid changing the outcome of String comparisons with `==` or `!=` after applying\nthe quick-fix in code that uses `new String()` calls to guarantee a different object identity.\n\nNew in 2018.1" + }, + { + "shortName": "ObviousNullCheck", + "displayName": "Null-check method is called with obviously non-null argument", + "enabled": true, + "description": "Reports if a null-checking method (for example, `Objects.requireNonNull` or `Assert.assertNotNull`) is called on a value that is obviously non-null (for example, a newly created object). Such a check is redundant and may indicate a programming error.\n\n**Example:**\n\n\n final String greeting = Objects.requireNonNull(\"Hi!\");\n\nAfter the quick-fix is applied:\n\n\n final String greeting = \"Hi!\";\n\nNew in 2017.2" + }, + { + "shortName": "RedundantClassCall", + "displayName": "Redundant 'isInstance()' or 'cast()' call", + "enabled": true, + "description": "Reports redundant calls of `java.lang.Class` methods.\n\nFor example, `Xyz.class.isInstance(object)` can be replaced with `object instanceof Xyz`.\nThe instanceof check is preferred: even though the performance will probably be the same as these methods are intrinsics,\nthey better indicate a static check.\n\nNew in 2018.2" + }, + { + "shortName": "UnnecessaryStringEscape", + "displayName": "Unnecessarily escaped character", + "enabled": true, + "description": "Reports unnecessarily escaped characters in `String` and optionally `char` literals.\n\nThe escaped tab character `\\t` is not reported, because otherwise it will be invisible.\n\nExamples:\n\n\n String s = \"\\'Scare\\' quotes\";\n String t = \"\"\"\n All you need is\\n\\tLove\\n\"\"\";\n\nAfter the quick-fix is applied:\n\n\n String s = \"'Scare' quotes\";\n String t = \"\"\"\n All you need is\n \\tLove\n \"\"\";\n\nNew in 2019.3" + }, + { + "shortName": "SimplifyStreamApiCallChains", + "displayName": "Stream API call chain can be simplified", + "enabled": true, + "description": "Reports stream API call chains that can be simplified. Simplification will often avoid some temporary object creation during collection traversal.\n\n\nThe inspection replaces the following call chains:\n\n* `collection.stream().forEach()` → `collection.forEach()`\n* `collection.stream().collect(toList/toSet/toCollection())` → `new CollectionType<>(collection)`\n* `collection.stream().toArray()` → `collection.toArray()`\n* `Arrays.asList().stream()` → `Arrays.stream()` or `Stream.of()`\n* `IntStream.range(0, array.length).mapToObj(idx -> array[idx])` → `Arrays.stream(array)`\n* `IntStream.range(0, list.size()).mapToObj(idx -> list.get(idx))` → `list.stream()`\n* `Collections.singleton().stream()` → `Stream.of()`\n* `Collections.emptyList().stream()` → `Stream.empty()`\n* `stream.filter().findFirst().isPresent()` → `stream.anyMatch()`\n* `stream.collect(counting())` → `stream.count()`\n* `stream.collect(maxBy())` → `stream.max()`\n* `stream.collect(mapping())` → `stream.map().collect()`\n* `stream.collect(reducing())` → `stream.reduce()`\n* `stream.collect(summingInt())` → `stream.mapToInt().sum()`\n* `stream.mapToObj(x -> x)` → `stream.boxed()`\n* `stream.map(x -> {...; return x;})` → `stream.peek(x -> ...)`\n* `!stream.anyMatch()` → `stream.noneMatch()`\n* `!stream.anyMatch(x -> !(...))` → `stream.allMatch()`\n* `stream.map().anyMatch(Boolean::booleanValue)` → `stream.anyMatch()`\n* `IntStream.range(expr1, expr2).mapToObj(x -> array[x])` → `Arrays.stream(array, expr1, expr2)`\n* `Collection.nCopies(count, ...)` → `Stream.generate().limit(count)`\n* `stream.sorted(comparator).findFirst()` → `Stream.min(comparator)`\n* `optional.orElseGet(() -> { throw new ...; })` → `optional.orElseThrow()`\n\n\nNote that the replacement semantics may have minor differences in some cases. For example,\n`Collections.synchronizedList(...).stream().forEach()` is not synchronized while\n`Collections.synchronizedList(...).forEach()` is synchronized.\nAlso, `collect(Collectors.maxBy())` returns an empty `Optional` if the resulting element is\n`null` while `Stream.max()` throws `NullPointerException` in this case." + }, + { + "shortName": "RedundantEscapeInRegexReplacement", + "displayName": "Redundant escape in regex replacement string", + "enabled": false, + "description": "Reports redundant escapes in the replacement string of regex methods. It is possible to escape any character in a regex replacement string, but if a literal `$` or `\\` is required is escaping necessary.\n\n**Example:**\n\n\n string.replaceAll(\"a\", \"\\\\b\");\n\nAfter the quick-fix is applied:\n\n\n string.replaceAll(\"a\", \"b\");\n\nNew in 2022.3" + }, + { + "shortName": "RedundantCast", + "displayName": "Redundant type cast", + "enabled": false, + "description": "Reports unnecessary cast expressions.\n\nExample:\n\n\n static Object toObject(String s) {\n return (Object) s;\n }\n\n\nUse the checkbox below to ignore clarifying casts e.g., casts in collection calls where `Object` is expected:\n\n\n static void removeFromList(List l, Object o) {\n l.remove((String)o);\n } \n" + }, + { + "shortName": "SimplifyCollector", + "displayName": "Simplifiable collector", + "enabled": true, + "description": "Reports collectors that can be simplified.\n\nIn particular, some cascaded `groupingBy()` collectors can be expressed by using a\nsimpler `toMap()` collector, which is also likely to be more performant.\n\nExample:\n\n\n Collectors.groupingByConcurrent(String::length, Collectors.collectingAndThen(Collectors.maxBy(String::compareTo), Optional::get));\n\nAfter the quick-fix is applied:\n\n\n Collectors.toConcurrentMap(String::length, Function.identity(), BinaryOperator.maxBy(String::compareTo));\n\nThis inspection only reports if the language level of the project or module is 8 or higher.\n\nNew in 2017.1" + }, + { + "shortName": "RedundantCollectionOperation", + "displayName": "Redundant 'Collection' operation", + "enabled": true, + "description": "Reports unnecessarily complex collection operations which have simpler alternatives.\n\nExample:\n\n\n void f(String[] array, Collection collection) {\n String[] strings = Arrays.asList(array).subList(0, 10).toArray(new String[0]);\n boolean contains = collection.containsAll(Collections.singletonList(\"x\"));\n }\n\nAfter the quick-fix is applied:\n\n\n void f(String[] array, Collection collection) {\n String[] strings = Arrays.copyOf(array, 10);\n boolean contains = collection.contains(\"x\");\n }\n\nNew in 2018.1" + }, + { + "shortName": "UnnecessaryDefault", + "displayName": "Unnecessary 'default' for enum 'switch' statement", + "enabled": true, + "description": "Reports enum `switch` statements or expression with `default` branches which can never be taken, because all possible values are covered by a `case` branch.\n\nSuch elements are redundant, especially for `switch` expressions, because they don't compile when all\nenum constants are not covered by a `case` branch.\n\n\nThe language level needs to be configured to 14 to report `switch` expressions.\n\nThe provided quick-fix removes `default` branches.\n\nExample:\n\n\n enum E { A, B }\n int foo(E e) {\n return switch (e) {\n case A -> 1;\n case B -> 2;\n default -> 3;\n };\n }\n\nAfter the quick-fix is applied:\n\n\n enum E { A, B }\n int foo(E e) {\n return switch (e) {\n case A -> 1;\n case B -> 2;\n };\n }\n\nUse the **Only report switch expressions** option to report only redundant `default` branches in switch expressions." + }, + { + "shortName": "RedundantCompareCall", + "displayName": "Redundant 'compare()' method call", + "enabled": true, + "description": "Reports comparisons in which the `compare` method is superfluous.\n\nExample:\n\n\n boolean result = Integer.compare(a, b) == 0;\n\nAfter the quick-fix is applied:\n\n\n boolean result = a == b;\n\nNew in 2018.2" + }, + { + "shortName": "UnnecessaryLabelOnContinueStatement", + "displayName": "Unnecessary label on 'continue' statement", + "enabled": true, + "description": "Reports `continue` statements with unnecessary labels.\n\nExample:\n\n\n LABEL:\n while (a > b) {\n System.out.println(\"Hello\");\n //the code below is the last statement in a loop,\n //so unnecessary label and continue can be removed\n continue LABEL;\n }\n" + }, + { + "shortName": "RedundantArrayCreation", + "displayName": "Redundant array creation", + "enabled": true, + "description": "Reports arrays that are created specifically to be passed as a varargs parameter.\n\nExample:\n\n`Arrays.asList(new String[]{\"Hello\", \"world\"})`\n\nThe quick-fix replaces the array initializer with individual arguments:\n\n`Arrays.asList(\"Hello\", \"world\")`" + }, + { + "shortName": "RedundantUnmodifiable", + "displayName": "Redundant usage of unmodifiable collection wrappers", + "enabled": true, + "description": "Reports redundant calls to unmodifiable collection wrappers from the `Collections` class.\n\nIf the argument that is passed to an unmodifiable\ncollection wrapper is already immutable, such a wrapping becomes redundant.\n\nExample:\n\n\n List x = Collections.unmodifiableList(Collections.singletonList(\"abc\"));\n\nAfter the quick-fix is applied:\n\n\n List x = Collections.singletonList(\"abc\");\n\nIn order to detect the methods that return unmodifiable collections, the\ninspection uses the `org.jetbrains.annotations.Unmodifiable`\nand `org.jetbrains.annotations.UnmodifiableView` annotations.\nUse them to extend the inspection to your own unmodifiable collection\nwrappers.\n\nNew in 2020.3" + }, + { + "shortName": "CastCanBeReplacedWithVariable", + "displayName": "Cast can be replaced with variable", + "enabled": false, + "description": "Reports type cast operations that can be replaced with existing local or pattern variables with the same value.\n\nExample:\n\n\n void foo(Object obj) {\n String s = (String) obj;\n System.out.println(((String) obj).trim());\n }\n\nAfter the quick-fix is applied:\n\n\n void foo(Object obj) {\n String s = (String) obj;\n System.out.println(s.trim());\n }\n\nNew in 2022.3" + }, + { + "shortName": "RedundantTypeArguments", + "displayName": "Redundant type arguments", + "enabled": false, + "description": "Reports calls to parametrized methods with explicit argument types that can be omitted since they will be unambiguously inferred by the compiler.\n\n\nUsing redundant type arguments is unnecessary and makes the code less readable.\n\nExample:\n\n\n List list = Arrays.asList(\"Hello\", \"World\");\n\nA quick-fix is provided to remove redundant type arguments:\n\n\n List list = Arrays.asList(\"Hello\", \"World\");\n" + }, + { + "shortName": "DuplicateBranchesInSwitch", + "displayName": "Duplicate branches in 'switch'", + "enabled": true, + "description": "Reports `switch` statements or expressions that contain the same code in different branches and suggests merging the duplicate branches.\n\nExample:\n\n\n switch (n) {\n case 1:\n System.out.println(n);\n break;\n case 2:\n System.out.println(n);\n break;\n default:\n System.out.println(\"default\");\n }\n\nAfter the quick-fix is applied:\n\n\n switch (n) {\n case 1:\n case 2:\n System.out.println(n);\n break;\n default:\n System.out.println(\"default\");\n }\n\nNew in 2019.1" + }, + { + "shortName": "ManualMinMaxCalculation", + "displayName": "Manual min/max calculation", + "enabled": true, + "description": "Reports cases where the minimum or the maximum of two numbers can be calculated using a `Math.max()` or `Math.min()` call, instead of doing it manually.\n\n**Example:**\n\n\n public int min(int a, int b) {\n return b < a ? b : a;\n }\n\nAfter the quick-fix is applied:\n\n\n public int min(int a, int b) {\n return Math.min(a, b);\n }\n\n\nUse the **Disable for float and double** option to disable this inspection for `double` and `float` types.\nThis is useful because the quick-fix may slightly change the semantics for `float`/\n`double` types when handling `NaN`. Nevertheless, in most cases this will actually fix\na subtle bug where `NaN` is not taken into account.\n\nNew in 2019.2" + }, + { + "shortName": "RedundantComparatorComparing", + "displayName": "Comparator method can be simplified", + "enabled": false, + "description": "Reports `Comparator` combinator constructs that can be simplified.\n\nExample:\n\n\n c.thenComparing(Comparator.comparing(function));\n\n Comparator.comparing(Map.Entry::getKey);\n\n Collections.max(list, Comparator.reverseOrder());\n\nAfter the quick-fixes are applied:\n\n\n c.thenComparing(function)\n\n Map.Entry.comparingByKey()\n\n Collections.min(list, Comparator.naturalOrder());\n\nNew in 2018.1" + }, + { + "shortName": "ExcessiveRangeCheck", + "displayName": "Excessive range check", + "enabled": true, + "description": "Reports condition chains in which a value range is checked and these condition chains can be simplified to a single check.\n\nThe quick-fix replaces a condition chain with a simplified expression:\n\nExample:\n\n\n x > 2 && x < 4\n\nAfter the quick-fix is applied:\n\n\n x == 3\n\nExample:\n\n\n arr.length == 0 || arr.length > 1\n\nAfter the quick-fix is applied:\n\n\n arr.length != 1\n\nNew in 2019.1" + } + ] + }, + { + "name": "General", + "inspections": [ + { + "shortName": "InjectedReferences", + "displayName": "Injected references", + "enabled": false, + "description": "Reports unresolved references injected by [Language Injections](https://www.jetbrains.com/help/idea/using-language-injections.html).\n\nExample:\n\n```\n @Language(\"file-reference\")\n String fileName = \"/home/user/nonexistent.file\"; // highlighted if file doesn't exist\n```" + }, + { + "shortName": "InconsistentLineSeparators", + "displayName": "Inconsistent line separators", + "enabled": false, + "description": "Reports files with line separators different from the ones that are specified in the project's settings.\n\nFor example, the inspection will be triggered if you set the line separator to `\\n` in\n[Settings \\| Editor \\| Code Style \\| Line separator](settings://preferences.sourceCode?Line%20separator),\nwhile the file you are editing uses `\\r\\n` as a line separator.\n\nThe inspection also warns you about mixed line separators within a file." + }, + { + "shortName": "RedundantSuppression", + "displayName": "Redundant suppression", + "enabled": false, + "description": "Reports usages of the following elements that can be safely removed because the inspection they affect is no longer applicable in this context:\n\n* `@SuppressWarning` annotation, or\n* `// noinspection` line comment, or\n* `/** noinspection */` JavaDoc comment\n\nExample:\n\n\n public class C {\n // symbol is already private,\n // but annotation is still around\n @SuppressWarnings({\"WeakerAccess\"})\n private boolean CONST = true;\n void f() {\n CONST = false;\n }\n }\n" + }, + { + "shortName": "ProblematicWhitespace", + "displayName": "Problematic whitespace", + "enabled": false, + "description": "Reports the following problems:\n\n* Tabs used for indentation when the code style is configured to use only spaces.\n* Spaces used for indentation when the code style is configured to use only tabs.\n* Spaces used for indentation and tabs used for alignment when the code style is configured to use smart tabs." + }, + { + "shortName": "LongLine", + "displayName": "Line is longer than allowed by code style", + "enabled": false, + "description": "Reports lines that are longer than the **Hard wrap at** parameter specified in [Settings \\| Editor \\| Code Style \\| General](settings://preferences.sourceCode?Hard%20wrap%20at)." + }, + { + "shortName": "IncorrectFormatting", + "displayName": "Incorrect formatting", + "enabled": false, + "description": "Reports formatting issues that appear if your code doesn't\nfollow your project's code style settings.\n\n\nThis inspection is not compatible with languages that require\nthird-party formatters for code formatting, for example, Go or\nC with CLangFormat enabled." + }, + { + "shortName": "TodoComment", + "displayName": "TODO comment", + "enabled": false, + "description": "Reports **TODO** comments in your code.\n\nYou can configure the format for **TODO** comments in [Settings \\| Editor \\| TODO](settings://preferences.toDoOptions).\n\nEnable the **Only warn on TODO comments without any details** option to only warn on empty TODO comments, that\ndon't provide any description on the task that should be done. Disable to report all TODO comments." + }, + { + "shortName": "EmptyDirectory", + "displayName": "Empty directory", + "enabled": false, + "description": "Reports empty directories.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor.\n\nUse the **Only report empty directories located under a source folder** option to have only directories under source\nroots reported." + }, + { + "shortName": "SyntaxError", + "displayName": "Syntax error", + "enabled": false, + "description": "Reports syntax errors that have been found in the result of a batch code inspection run." + }, + { + "shortName": "ReassignedToPlainText", + "displayName": "Reassigned to plain text", + "enabled": false, + "description": "Reports files that were explicitly re-assigned to Plain Text File Type. This association is unnecessary because the platform auto-detects text files by content automatically.\n\nYou can dismiss this warning by removing the file type association\nin **Settings \\| Editor \\| File Types \\| Text**." + }, + { + "shortName": "Annotator", + "displayName": "Annotator", + "enabled": false, + "description": "Reports problems that are found by language annotators in the result of a batch code inspection run." + }, + { + "shortName": "JavaAnnotator", + "displayName": "Java annotator", + "enabled": false, + "description": "Allows viewing the problems reported by the Java annotator: compilation problems, unresolved by IDEA references, and so on." + }, + { + "shortName": "KotlinAnnotator", + "displayName": "Kotlin annotator", + "enabled": false, + "description": "Allows viewing the problems reported by the Kotlin annotator: compilation problems, references unresolved by the IDE, and so on." + }, + { + "shortName": "QodanaServiceMessage", + "displayName": "Qodana service message", + "enabled": false, + "description": "Reports the Qodana service messages such as suspending a particular inspection due to a large number of reported problems." + } + ] + }, + { + "name": "Javadoc", + "inspections": [ + { + "shortName": "DanglingJavadoc", + "displayName": "Dangling Javadoc comment", + "enabled": false, + "description": "Reports Javadoc comments that don't belong to any class, method or field. The Javadoc tool ignores dangling Javadoc comments and doesn't include them in the HTML documentation it generates.\n\n**Example:**\n\n\n class A {\n /**\n * Dangling comment\n */\n /**\n * Method javadoc\n */\n public void m(){}\n }\n\nA quick-fix is available to delete such comments completely or convert them into a block comment. After the quick-fix is applied:\n\n\n class A {\n /*\n Dangling comment\n */\n /**\n * Method javadoc\n */\n public void m(){}\n }\n\nUse the **Ignore file header comment in JavaDoc format** option to ignore comments at the beginning of Java files.\nThese are usually copyright messages." + }, + { + "shortName": "JavadocHtmlLint", + "displayName": "HTML problems in Javadoc (DocLint)", + "enabled": false, + "description": "Reports the same HTML issues in the Javadoc comments that have been reported by DocLint since Java 8.\n\nThe inspection detects the following issues:\n\n* Self-closed, unclosed, unknown, misplaced, or empty tag\n* Unknown or wrong attribute\n* Misplaced text\n\nExample:\n\n\n /**\n * Unknown tag: List\n * Unclosed tag: error\n * Misplaced text or tag:
    • one
    • ,
    • two
    \n * Wrong or empty attribute:
    \n * Self-closed tag:
    \n * ...\n */\n void sample(){ }\n" + }, + { + "shortName": "MissingPackageInfo", + "displayName": "Missing 'package-info.java'", + "enabled": false, + "description": "Reports packages that contain classes but do not contain the `package-info.java` or `package.html` files and are, thus, missing the package documentation.\n\nThe quick-fix creates an initial `package-info.java` file." + }, + { + "shortName": "HtmlTagCanBeJavadocTag", + "displayName": "'...' can be replaced with '{@code ...}'", + "enabled": false, + "description": "Reports usages of `` tags in Javadoc comments. Since Java 5, these tags can be replaced with `{@code ...}` constructs. This allows using angle brackets `<` and `>` inside the comment instead of HTML character entities.\n\n**Example:**\n\n\n /**\n * @return empty ArrayList<Integer>\n */\n List getList(){ ... }\n\nAfter the quick-fix is applied:\n\n\n /**\n * @return empty {@code ArrayList}\n */\n List getList(){ ... }\n" + }, + { + "shortName": "JavadocReference", + "displayName": "Declaration has problems in Javadoc references", + "enabled": false, + "description": "Reports unresolved references inside Javadoc comments.\n\nIn the following example, the `someParam` parameter is missing, so it will be highlighted:\n\n\n class A {\n /**\n * @param someParam description\n **/\n void foo() {\n }\n }\n\n\nDisable the **Report inaccessible symbols** option to ignore the tags that reference missing method parameters,\nclasses, fields and methods." + }, + { + "shortName": "JavadocLinkAsPlainText", + "displayName": "Link specified as plain text", + "enabled": false, + "description": "Reports links specified as plain text in Javadoc comments.\n\n\nThe quick-fix suggests to wrap the link in \\ tag.\n\n**Example:**\n\n\n class Main {\n /**\n * https://en.wikipedia.org/\n */\n void foo() {}\n }\n\nAfter the quick-fix is applied:\n\n\n class Main {\n /**\n * https://en.wikipedia.org/\n */\n void foo() {}\n }\n\nNew in 2022.1" + }, + { + "shortName": "MismatchedJavadocCode", + "displayName": "Mismatch between Javadoc and code", + "enabled": true, + "description": "Reports parts of method specification written in English that contradict with the method declaration. This includes:\n\n* Method specified to return `true` or `false` but its return type is not boolean.\n* Method specified to return `null` but it's annotated as `@NotNull` or its return type is primitive.\n* Method specified to return list but its return type is set or array.\n* And so on.\n\n**Example:**\n\n\n /**\n * @return true if user is found, false otherwise\n */\n User findUser(String name);\n\n\nNote that false-positives are possible, as this inspection tries to interpret a human language. However, if the inspection reports\nincorrectly, it's still possible that the description is confusing and should be rewritten.\n\n\nNew in 2022.3" + }, + { + "shortName": "MissingDeprecatedAnnotation", + "displayName": "Missing '@Deprecated' annotation", + "enabled": false, + "description": "Reports module declarations, classes, fields, or methods that have the `@deprecated` Javadoc tag but do not have the `@java.lang.Deprecated` annotation.\n\n**Example:**\n\n\n /**\n * @deprecated use {@code example()} instead\n */\n void sample(){ }\n\nAfter the quick-fix is applied:\n\n\n /**\n * @deprecated use {@code example()} instead\n */\n @Deprecated\n void sample(){ }\n\nThis inspection reports only if the language level of the project or module is 5 or higher.\n\n\nUse the checkbox below to be warned on the symbols annotated with `@Deprecated` without\nan explanation in the `@deprecated` Javadoc tag." + }, + { + "shortName": "JavadocBlankLines", + "displayName": "Blank line should be replaced with

    to break lines", + "enabled": false, + "description": "Reports blank lines in Javadoc comments.\n\n\nBlank lines in Javadoc may signal an intention split the text to different paragraphs. However, the Javadoc tool and IntelliJ IDEA will\nignore them when rendering documentation comments.\n\n\nThe quick-fix suggests to replace the blank line with a paragraph tag (\\).\n\n**Example:**\n\n\n class Main {\n /**\n * Doesn't do anything.\n *\n * Does absolutely nothing\n */\n void foo() {}\n }\n\nAfter the quick-fix is applied:\n\n\n class Main {\n /**\n * Doesn't do anything.\n *

    \n * Does absolutely nothing\n */\n void foo() {}\n }\n\nNew in 2022.1" + }, + { + "shortName": "UnnecessaryJavaDocLink", + "displayName": "Unnecessary Javadoc link", + "enabled": false, + "description": "Reports Javadoc `@see`, `{@link}`, and `{@linkplain}` tags that refer to the method owning the comment, the super method of the method owning the comment, or the class containing the comment.\n\nSuch links are unnecessary and can be safely removed with this inspection's quick-fix. The\nquick-fix will remove the entire Javadoc comment if the tag is its only content.\n\n**Example:**\n\n\n class Example {\n /**\n * @see Example#method\n */\n public void method() { }\n }\n\nAfter the quick-fix is applied:\n\n\n class Example {\n public void method() { }\n }\n\n\nUse the checkbox below to ignore inline links (`{@link}` and `{@linkplain}`)\nto super methods. Although a link to all super methods is automatically added by the\nJavadoc tool, an inline link to the super method may sometimes be needed in texts of the Javadoc comments." + }, + { + "shortName": "UnnecessaryInheritDoc", + "displayName": "Unnecessary '{@inheritDoc}' Javadoc comment", + "enabled": false, + "description": "Reports Javadoc comments that contain only an `{@inheritDoc}` tag. Since Javadoc copies the super class' comment if no comment is present, a comment containing only `{@inheritDoc}` adds nothing.\n\nAlso, it reports the `{@inheritDoc}` usages in invalid locations, for example, in fields.\n\nSuggests removing the unnecessary Javadoc comment.\n\n**Example:**\n\n\n class Example implements Comparable {\n /**\n * {@inheritDoc}\n */\n @Override\n public int compareTo(Example o) {\n return 0;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Example implements Comparable {\n @Override\n public int compareTo(Example o) {\n return 0;\n }\n }\n" + }, + { + "shortName": "JavadocDeclaration", + "displayName": "Javadoc declaration problems", + "enabled": false, + "description": "Reports Javadoc comments and tags with the following problems:\n\n* invalid tag names\n* incomplete tag descriptions\n* duplicated tags\n* missing Javadoc descriptions\n\nExample:\n\n\n /**\n * Invalid tag name\n * @poram param description\n */\n public void sample(int param){\n }\n\nExample:\n\n\n /**\n * Pointing to itself {@link #sample(int)}\n */\n public void sample(int param){\n }\n\nQuick-fix adds the unknown Javadoc tag to the list of user defined additional tags.\n\nUse textfield below to define additional Javadoc tags.\n\nUse first checkbox to ignore duplicated 'throws' tag.\n\nUse second checkbox to ignore problem with missing or incomplete first sentence in the description.\n\nUse third checkbox to ignore references pointing to itself." + }, + { + "shortName": "PackageDotHtmlMayBePackageInfo", + "displayName": "'package.html' may be converted to 'package-info.java'", + "enabled": false, + "description": "Reports any `package.html` files which are used for documenting packages.\n\nSince JDK 1.5, it is recommended that you use `package-info.java` files instead, as such\nfiles can also contain package annotations. This way, package-info.java becomes a\nsole repository for package level annotations and documentation.\n\nExample: `package.html`\n\n\n \n \n Documentation example.\n \n \n\nAfter the quick-fix is applied: `package-info.java`\n\n\n /**\n * Documentation example.\n */\n package com.sample;\n" + }, + { + "shortName": "PackageInfoWithoutPackage", + "displayName": "'package-info.java' without 'package' statement", + "enabled": false, + "description": "Reports `package-info.java` files without a `package` statement.\n\n\nThe Javadoc tool considers such files documentation for the default package even when the file is located somewhere else." + }, + { + "shortName": "ReplaceWithJavadoc", + "displayName": "Comment replaceable with Javadoc", + "enabled": false, + "description": "Reports a regular comment that belongs to a field, method, or class that can be replaced with a Javadoc comment.\n\n**Example:**\n\n\n public class Main {\n /*\n * Hello,\n */\n // World!\n void f() {\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class Main {\n /**\n * Hello,\n * World!\n */\n void f() {\n }\n }\n" + }, + { + "shortName": "MissingJavadoc", + "displayName": "Missing Javadoc", + "enabled": false, + "description": "Reports missing Javadoc comments and tags.\n\nExample:\n\n\n /**\n * Missing \"@param\" is reported (if configured).\n */\n public void sample(int param){\n }\n\nThe quick-fixes add missing tag or missing Javadoc comment:\n\n\n /**\n * Missing \"@param\" is reported (if configured).\n * @param param\n */\n public void sample(int param){\n }\n\n\nInspection can be configured to ignore deprecated elements or simple accessor methods like `getField()` or `setField()`.\nYou can also use options below to configure required tags and minimal required visibility for the specific code elements like method, field, class, package, module." + } + ] + }, + { + "name": "Resource management", + "inspections": [ + { + "shortName": "HibernateResource", + "displayName": "Hibernate resource opened but not safely closed", + "enabled": false, + "description": "Reports calls to the `openSession()` method if the returned `org.hibernate.Session` resource is not safely closed.\n\n\nBy default, the inspection assumes that the resources can be closed by any method with\n'close' or 'cleanup' in its name.\n\n**Example:**\n\n\n void doHibernateQuery(SessionFactory factory) {\n Session session = factory.openSession(); //warning\n session.createQuery(\"...\");\n }\n\n\nUse the following options to configure the inspection:\n\n* Whether a `org.hibernate.Session` resource is allowed to be opened inside a `try` block. This style is less desirable because it is more verbose than opening a resource in front of a `try` block.\n* Whether the resource can be closed by any method call with the resource passed as argument." + }, + { + "shortName": "SocketResource", + "displayName": "Socket opened but not safely closed", + "enabled": true, + "description": "Reports socket resources that are not safely closed. Socket resources reported by this inspection include `java.net.Socket`, `java.net.DatagramSocket`, and `java.net.ServerSocket`.\n\n\nBy default, the inspection assumes that the resources can be closed by any method with\n'close' or 'cleanup' in its name.\n\n**Example:**\n\n\n byte[] getMessage(ServerSocket socket) throws IOException {\n Socket client = socket.accept(); //socket is not closed\n return client.getInputStream().readAllBytes();\n }\n\n\nUse the following options to configure the inspection:\n\n* Whether a socket is allowed to be opened inside a `try` block. This style is less desirable because it is more verbose than opening a resource in front of a `try` block.\n* Whether the resource can be closed by any method call with the resource passed as argument." + }, + { + "shortName": "IOResource", + "displayName": "I/O resource opened but not safely closed", + "enabled": true, + "description": "Reports I/O resources that are not safely closed. I/O resources checked by this inspection include `java.io.InputStream`, `java.io.OutputStream`, `java.io.Reader`, `java.io.Writer`, `java.util.zip.ZipFile`, `java.io.Closeable` and `java.io.RandomAccessFile`.\n\n\nI/O resources wrapped by other I/O resources are not reported, as the wrapped resource will be closed by the wrapping resource.\n\n\nBy default, the inspection assumes that the resources can be closed by any method with\n'close' or 'cleanup' in its name.\n\n**Example:**\n\n\n void save() throws IOException {\n FileWriter writer = new FileWriter(\"filename.txt\"); //warning\n writer.write(\"sample\");\n }\n\n\nUse the following options to configure the inspection:\n\n* List I/O resource classes that do not need to be closed and should be ignored by this inspection.\n* Whether an I/O resource is allowed to be opened inside a `try`block. This style is less desirable because it is more verbose than opening a resource in front of a `try` block.\n* Whether the resource can be closed by any method call with the resource passed as argument." + }, + { + "shortName": "AutoCloseableResource", + "displayName": "AutoCloseable used without 'try'-with-resources", + "enabled": false, + "description": "Reports `AutoCloseable` instances which are not used in a try-with-resources statement, also known as *Automatic Resource Management* .\n\n\nThis means that the \"open resource before/in `try`, close in `finally`\" style that had been used before\ntry-with-resources became available, is also reported.\nThis inspection is meant to replace all *opened but not safely closed* inspections when developing in Java 7 and higher.\n\n**Example:**\n\n\n private static void foo() throws IOException {\n InputStream profile = Thread.currentThread().getContextClassLoader().getResourceAsStream(\"/someFile\");\n System.out.println(profile.read());\n }\n\n\nUse the following options to configure the inspection:\n\n* List subclasses of `AutoCloseable` that do not need to be closed and should be ignored by this inspection. \n **Note** : The inspection will still report streams returned from the `java.nio.file.Files` methods `lines()`, `walk()`, `list()` and `find()`, even when `java.util.stream.Stream` is listed to be ignored. These streams contain an associated I/O resource that needs to be closed.\n* List methods returning `AutoCloseable` that should be ignored when called.\n* Whether to ignore an `AutoCloseable` if it is the result of a method call. When this option is enabled, the results of factory methods will also be ignored.\n* Whether the inspection should report if an `AutoCloseable` instance is passed as a method call argument. If this option is enabled, the inspection assumes the resource is closed in the called method. Method calls inside a `finally` block with 'close' in the name and an `AutoCloseable` argument will not be ignored.\n* Whether to ignore method references to constructors of resource classes.\n* Whether to ignore methods that return a resource and whose name starts with 'get'. This can reduce false positives because most of the getters do not transfer the ownership of the resource, and their call sites are not responsible for closing the resource." + }, + { + "shortName": "ChannelResource", + "displayName": "'Channel' opened but not safely closed", + "enabled": false, + "description": "Reports `Channel` resources that are not safely closed, including any instances created by calling `getChannel()` on a file or socket resource.\n\n\nBy default, the inspection assumes that the resources can be closed by any method with\n'close' or 'cleanup' in its name.\n\n**Example:**\n\n\n void send(Socket socket) throws IOException {\n SocketChannel channel = socket.getChannel(); //warning\n channel.write(ByteBuffer.wrap(\"message\".getBytes()));\n }\n\n\nUse the following options to configure the inspection:\n\n* Whether a `Channel` resource is allowed to be opened inside a `try` block. This style is less desirable because it is more verbose than opening a `Channel` in front of a `try` block.\n* Whether the resource can be closed by any method call with the resource passed as argument." + }, + { + "shortName": "JDBCResource", + "displayName": "JDBC resource opened but not safely closed", + "enabled": false, + "description": "Reports JDBC resources that are not safely closed. JDBC resources reported by this inspection include `java.sql.Connection`, `java.sql.Statement`, `java.sql.PreparedStatement`, `java.sql.CallableStatement`, and `java.sql.ResultSet`.\n\n\nBy default, the inspection assumes that the resources can be closed by any method with\n'close' or 'cleanup' in its name.\n\n**Example:**\n\n\n ResultSet findAllElements(Connection connection) throws SQLException {\n PreparedStatement statement = connection.prepareStatement(\"SELECT * FROM TABLE\");//statement is not closed\n statement.execute();\n return statement.getResultSet();\n }\n\n\nUse the following options to configure the inspection:\n\n* Whether a JDBC resource is allowed to be opened inside a `try` block. This style is less desirable because it is more verbose than opening a resource in front of a `try` block.\n* Whether the resource can be closed by any method call with the resource passed as argument." + }, + { + "shortName": "JNDIResource", + "displayName": "JNDI resource opened but not safely closed", + "enabled": false, + "description": "Reports JNDI resources that are not safely closed. JNDI resources reported by this inspection include `javax.naming.InitialContext`, and `javax.naming.NamingEnumeration`.\n\n\nBy default, the inspection assumes that the resources can be closed by any method with\n'close' or 'cleanup' in its name.\n\n**Example:**\n\n\n Object findObject(Properties properties, String name) throws NamingException {\n Context context = new InitialContext(properties); //context is not closed\n return context.lookup(name);\n }\n\n\nUse the following options to configure the inspection:\n\n* Whether a JNDI Resource is allowed to be opened inside a `try` block. This style is less desirable because it is more verbose than opening a resource in front of a `try` block.\n* Whether the resource can be closed by any method call with the resource passed as argument." + }, + { + "shortName": "DriverManagerGetConnection", + "displayName": "Use of 'DriverManager' to get JDBC connection", + "enabled": false, + "description": "Reports any uses of `java.sql.DriverManager` to acquire a JDBC connection.\n\n\n`java.sql.DriverManager`\nhas been superseded by `javax.sql.Datasource`, which\nallows for connection pooling and other optimizations.\n\n**Example:**\n\n Connection conn = DriverManager.getConnection(url, username, password);\n" + } + ] + }, + { + "name": "Validity issues", + "inspections": [ + { + "shortName": "IncorrectPluginDslStructure", + "displayName": "Plugin DSL structure", + "enabled": false, + "description": "Detects disallowed statements before 'plugins {}' block.\nDue to the limitations of Gradle Plugin DSL, only a restricted set of Groovy statements is available before '`plugins {}`' block. The only options are '`buildscript {}`', '`pluginManagement {}`' and other '`plugins {}`'. \n[See Gradle documentation](https://docs.gradle.org/current/userguide/plugins.html#plugins_dsl_limitations)\n\n**Example:**\n\n\n import foo.bar.Baz\n plugins {} // reports 'plugins'\n plugins {\n foo() // reporst 'foo'\n id 'java'\n }\n" + }, + { + "shortName": "DeprecatedConfigurations", + "displayName": "Deprecated configurations", + "enabled": false, + "description": "Detects usage of configuration methods that were deprecated.\nConfiguration methods may be deprecated because of two possible reasons:\n\n* The Gradle API has evolved, so old method choices should be avoided;\n* Some plugin provides a better version of the deprecated configuration method.\n\nMost likely there will be an alternative for the deprecated method.\n\n**Example:**\n\n\n plugins {\n id 'java'\n }\n\n dependencies {\n archive 'org.gradle.api:gradle:1.0' // reports 'archive'\n }\n" + }, + { + "shortName": "GroovyDuplicateSwitchBranch", + "displayName": "Duplicate switch case", + "enabled": false, + "description": "Reports duplicated expressions in `case` labels for `switch` statements.\n\n**Example:**\n\n\n switch (n) {\n case 1: //duplicate\n break\n case 1: //duplicate\n System.out.println(\"2\")\n break\n default:\n System.out.println(\"default\");\n }\n\n" + }, + { + "shortName": "GroovyUnreachableStatement", + "displayName": "Unreachable statement", + "enabled": false, + "description": "Reports statements that are unreachable. This can occur if the statement is after an infinite loop,\n`return`, `break`, or `continue` statement.\n\n**Example:**\n\n\n void foo (int n) {\n if (n < 1) {\n return\n print('This statement is unreachable')\n }\n while (true){\n print ('Hello, world!')\n }\n print('This statement is unreachable too')\n }\n" + } + ] + }, + { + "name": "Code maturity", + "inspections": [ + { + "shortName": "SystemOutErr", + "displayName": "Use of 'System.out' or 'System.err'", + "enabled": false, + "description": "Reports usages of `System.out` or `System.err`.\n\nSuch statements are often used for temporary debugging and should be either removed from the production code, or replaced by a more robust\nlogging facility." + }, + { + "shortName": "ObsoleteCollection", + "displayName": "Use of obsolete collection type", + "enabled": true, + "description": "Reports usages of `java.util.Vector`, `java.util.Hashtable` and `java.util.Stack`.\n\nUsages of these classes can often be replaced with usages of\n`java.util.ArrayList`, `java.util.HashMap` and `java.util.ArrayDeque` respectively.\nWhile still supported,\nthe former classes were made obsolete by the JDK1.2 collection classes, and should probably\nnot be used in new development.\n\n\nUse the **Ignore obsolete collection types where they are required** option to ignore any cases where the obsolete collections are used\nas method arguments or assigned to a variable that requires the obsolete type.\nEnabling this option may consume significant processor resources." + }, + { + "shortName": "Deprecation", + "displayName": "Deprecated API usage", + "enabled": false, + "description": "Reports usages of deprecated APIs (classes, fields, and methods), for example: `new Thread().stop();`.\n\nBy default, the inspection doesn't produce a warning if it's impossible or hard to avoid it. For example,\nthe following code won't be reported:\n\n\n abstract class A { //library code\n @Deprecated\n abstract void m();\n }\n class B extends A { //project code\n @Override\n void m() {\n //doSmth;\n }\n }\n\nConfigure the inspection:\n\n\nUse the inspection's options to disable this inspection inside deprecated members,\noverrides of abstract deprecated methods, non-static import statements, methods of deprecated classes, or same top-level classes." + }, + { + "shortName": "CommentedOutCode", + "displayName": "Commented out code", + "enabled": false, + "description": "Reports comments that contain Java code.\n\nUsually, code that is commented out gets outdated very quickly and becomes misleading.\nAs most projects use some kind of version control system,\nit is better to delete commented out code completely and use the VCS history instead.\n\nNew in 2020.3" + }, + { + "shortName": "RedundantScheduledForRemovalAnnotation", + "displayName": "Redundant @ScheduledForRemoval annotation", + "enabled": false, + "description": "Reports usages of `@ApiStatus.ScheduledForRemoval` annotation without `inVersion` attribute in code which targets Java 9 or newer version.\n\n\nSuch usages can be replaced by `forRemoval` attribute in `@Deprecated` annotation to simplify code.\n\nNew in 2022.1" + }, + { + "shortName": "MarkedForRemoval", + "displayName": "Usage of API marked for removal", + "enabled": true, + "description": "Reports usages of deprecated APIs (classes, fields, and methods) that are marked for removal with `@Deprecated(`**forRemoval**`=true)`.\n\n\nThe code that uses an API marked for removal may cause a runtime error with a future version of the API. That is why\nthe recommended severity for this inspection is *Error*.\n\n\nYou can change the severity to *Warning* if you want to use the same code highlighting as in ordinary deprecation.\n\nNew in 2017.3" + }, + { + "shortName": "SuppressionAnnotation", + "displayName": "Inspection suppression annotation", + "enabled": false, + "description": "Reports comments or annotations suppressing inspections.\n\nThis inspection can be useful when leaving suppressions intentionally for further review.\n\n**Example:**\n\n\n @SuppressWarnings(\"unused\")\n static Stream stringProvider() {\n return Stream.of(\"foo\", \"bar\");\n }\n" + }, + { + "shortName": "ThrowablePrintStackTrace", + "displayName": "Call to 'printStackTrace()'", + "enabled": true, + "description": "Reports calls to `Throwable.printStackTrace()` without arguments.\n\nSuch statements are often used for temporary debugging and should be either removed from the production code\nor replaced with a more robust logging facility." + }, + { + "shortName": "ThrowablePrintedToSystemOut", + "displayName": "'Throwable' printed to 'System.out'", + "enabled": true, + "description": "Reports calls to `System.out.println()` with an exception as an argument.\n\nUsing print statements for logging exceptions hides the stack trace from you, which can complicate the investigation of the problem.\nIt is recommended that you use logger instead.\n\nCalls to `System.out.print()`, `System.err.println()`, and `System.err.print()` with an exception argument are also\nreported. It is better to use a logger to log exceptions instead.\n\nFor example, instead of:\n\n\n try {\n foo();\n } catch (Exception e) {\n System.out.println(e);\n }\n\nuse the following code:\n\n\n try {\n foo();\n } catch (Exception e) {\n logger.warn(e); // logger call may be different\n }\n" + }, + { + "shortName": "ThreadDumpStack", + "displayName": "Call to 'Thread.dumpStack()'", + "enabled": true, + "description": "Reports usages of `Thread.dumpStack()`.\n\nSuch statements are often used for temporary debugging and should be either removed from the production code\nor replaced with a more robust logging facility." + }, + { + "shortName": "OptionalAssignedToNull", + "displayName": "Null value for Optional type", + "enabled": false, + "description": "Reports `null` assigned to `Optional` variable or returned from method returning `Optional`.\n\nIt's recommended that you use `Optional.empty()` (or `Optional.absent()` for Guava) to denote an empty value.\n\nExample:\n\n\n Optional foo(boolean flag) {\n return flag ? Optional.of(42) : null;\n }\n\nAfter the quick-fix is applied:\n\n\n Optional foo(boolean flag) {\n return flag ? Optional.of(42) : Optional.empty();\n }\n\nConfigure the inspection:\n\n\nUse the **Report comparison of Optional with null** option to also report comparisons like `optional == null`. While in rare cases (e.g. lazily initialized\noptional field) this might be correct, optional variable is usually never null, and probably `optional.isPresent()` was\nintended.\n\nThis inspection only reports if the language level of the project or module is 8 or higher.\n\nNew in 2017.2" + }, + { + "shortName": "UseOfObsoleteDateTimeApi", + "displayName": "Use of obsolete date-time API", + "enabled": false, + "description": "Reports usages of `java.util.Date`, `java.util.Calendar`, `java.util.GregorianCalendar`, `java.util.TimeZone`, and `java.util.SimpleTimeZone`.\n\nWhile still supported, these classes were made obsolete by the JDK8 Date-Time API and should probably\nnot be used in new development." + }, + { + "shortName": "DeprecatedIsStillUsed", + "displayName": "Deprecated member is still used", + "enabled": true, + "description": "Reports deprecated classes, methods, and fields that are used in your code nonetheless.\n\nExample:\n\n\n class MyCode {\n @Deprecated\n void oldMethod() {}// warning: \"Deprecated member is still used\"\n\n void newMethod() {\n oldMethod(); // forgotten usage\n }\n }\n\nUsages within deprecated elements are ignored.\n\n**NOTE:** Due to performance reasons, a non-private member is checked only when its name rarely occurs in the project." + } + ] + }, + { + "name": "Java 5", + "inspections": [ + { + "shortName": "RawUseOfParameterizedType", + "displayName": "Raw use of parameterized class", + "enabled": false, + "description": "Reports generic classes with omitted type parameters. Such *raw* use of generic types is valid in Java, but it defeats the purpose of type parameters and may mask bugs. This inspection mirrors the `rawtypes` warning of `javac`.\n\n**Examples:**\n\n\n //warning: Raw use of parameterized class 'List'\n List list = new ArrayList();\n //list of strings was created but integer is accepted as well\n list.add(1);\n\n\n //no warning as it's impossible to provide type arguments during array creation\n IntFunction[]> fun = List[]::new;\n\nConfigure the inspection:\n\n* Use the **Ignore construction of new objects** option to ignore raw types used in object construction.\n* Use the **Ignore type casts** option to ignore raw types used in type casts.\n* Use the **Ignore where a type parameter would not compile** option to ignore the cases when a type parameter fails to compile (for example, when creating an array or overriding a library method).\n* Use the **Ignore parameter types of overriding methods** option to ignore type parameters used in parameters of overridden methods.\n* Use the **Ignore when automatic quick-fix is not available** option to ignore the cases when a quick-fix is not available.\nThis inspection only reports if the language level of the project or module is 5 or higher." + }, + { + "shortName": "BigDecimalLegacyMethod", + "displayName": "'BigDecimal' legacy method called", + "enabled": false, + "description": "Reports calls to `BigDecimal.divide()` or `BigDecimal.setScale()` that use integer constants to specify the rounding mode. Since JDK 1.5, consider using methods that take the `RoundingMode` `enum` parameter instead.\n\n**Example:**\n\n new BigDecimal(\"42\").setScale(2, BigDecimal.ROUND_FLOOR);\n\nAfter the quick-fix is applied:\n\n new BigDecimal(\"42\").setScale(2, RoundingMode.FLOOR);\n" + }, + { + "shortName": "UnnecessaryBoxing", + "displayName": "Unnecessary boxing", + "enabled": false, + "description": "Reports explicit boxing, that is wrapping of primitive values in objects.\n\nExplicit manual boxing is unnecessary as of Java 5 and later, and can safely be removed.\n\n**Examples:**\n\n* `Integer i = new Integer(1);` → `Integer i = Integer.valueOf(1);`\n* `int i = Integer.valueOf(1);` → `int i = 1;`\n\n\nUse the **Only report truly superfluously boxed expressions** option to report only truly superfluous boxing,\nwhere a boxed value is immediately unboxed either implicitly or explicitly.\nIn this case, the entire boxing-unboxing step can be removed. The inspection doesn't report simple explicit boxing.\n\nThis inspection only reports if the language level of the project or module is 5 or higher." + }, + { + "shortName": "CollectionsFieldAccessReplaceableByMethodCall", + "displayName": "Reference to empty collection field can be replaced with method call", + "enabled": false, + "description": "Reports usages of `java.util.Collections` fields: `EMPTY_LIST`, `EMPTY_MAP` or `EMPTY_SET`. These field usages may be replaced with the following method calls: `emptyList()`, `emptyMap()`, or `emptySet()`. Such method calls prevent unchecked warnings by the compiler because the type parameters can be inferred.\n\n**Example:**\n\n\n List emptyList = Collections.EMPTY_LIST;\n\nAfter the quick-fix is applied:\n\n\n List emptyList = Collections.emptyList();\n\nThis inspection only reports if the language level of the project or module is 5 or higher." + }, + { + "shortName": "ForCanBeForeach", + "displayName": "'for' loop can be replaced with enhanced for loop", + "enabled": false, + "description": "Reports `for` loops that iterate over collections or arrays, and can be automatically replaced with an enhanced `for` loop (foreach iteration syntax).\n\n**Example:**\n\n\n for (Iterator iterator = list.iterator(); iterator.hasNext(); ) {\n String item = iterator.next();\n System.out.println(item);\n }\n\nAfter the quick-fix is applied:\n\n\n for (String item : list) {\n System.out.println(item);\n }\n\n\nUse the **Report indexed 'java.util.List' loops** option to find loops involving `list.get(index)` calls.\nGenerally, these loops can be replaced with enhanced `for` loops,\nunless they modify an underlying list in the process, for example, by calling `list.remove(index)`.\nIf the latter is the case, the enhanced `for` loop may throw `ConcurrentModificationException`.\nAlso, in some cases, `list.get(index)` loops may work a little bit faster.\n\n\nUse the **Do not report iterations over untyped collections** option to ignore collections without type parameters.\nThis prevents the creation of enhanced `for` loop variables of the `java.lang.Object` type and the insertion of casts\nwhere the loop variable is used.\n\nThis inspection only reports if the language level of the project or module is 5 or higher." + }, + { + "shortName": "WhileCanBeForeach", + "displayName": "'while' loop can be replaced with enhanced 'for' loop", + "enabled": false, + "description": "Reports `while` loops that iterate over collections and can be replaced with enhanced `for` loops (foreach iteration syntax).\n\n**Example:**\n\n\n Iterator it = c.iterator();\n while(it.hasNext()) {\n Object obj = it.next();\n System.out.println(obj);\n }\n\nCan be replaced with:\n\n\n for (Object obj : c) {\n System.out.println(obj);\n }\n\nThis inspection only reports if the language level of the project or module is 5 or higher." + }, + { + "shortName": "IndexOfReplaceableByContains", + "displayName": "'String.indexOf()' expression can be replaced with 'contains()'", + "enabled": false, + "description": "Reports comparisons with `String.indexOf()` calls that can be replaced with a call to the `String.contains()` method.\n\n**Example:**\n\n\n boolean b = \"abcd\".indexOf('e') >= 0;\n\nAfter the quick-fix is applied:\n\n\n boolean b = \"abcd\".contains('e');\n\nThis inspection only reports if the language level of the project or module is 5 or higher." + }, + { + "shortName": "StringBufferReplaceableByStringBuilder", + "displayName": "'StringBuffer' may be 'StringBuilder'", + "enabled": false, + "description": "Reports variables declared as `StringBuffer` and suggests replacing them with `StringBuilder`. `StringBuilder` is a non-thread-safe replacement for `StringBuffer`.\n\nThis inspection only reports if the language level of the project or module is 5 or higher." + }, + { + "shortName": "MethodCanBeVariableArityMethod", + "displayName": "Method can have varargs parameter", + "enabled": false, + "description": "Reports methods that can be converted to variable arity methods.\n\n**Example:**\n\n\n void process(String name, Object[] objects);\n\nAfter the quick-fix is applied:\n\n\n void process(String name, Object... objects);\n\n\nThis inspection only reports if the language level of the project or module is 5 or higher." + }, + { + "shortName": "UnnecessaryUnboxing", + "displayName": "Unnecessary unboxing", + "enabled": false, + "description": "Reports unboxing, that is explicit unwrapping of wrapped primitive values.\n\nUnboxing is unnecessary as of Java 5 and later, and can safely be removed.\n\n**Examples:**\n\n* `Integer i = Integer.valueOf(42).intValue();` → `Integer i = Integer.valueOf(42);`\n* `int k = Integer.valueOf(42).intValue();` → `int k = Integer.valueOf(42);`\n\n (reports only when the **Only report truly superfluously unboxed expressions** option is not checked)\n\n\nUse the **Only report truly superfluously unboxed expressions** option to only report truly superfluous unboxing,\nwhere an unboxed value is immediately boxed either implicitly or explicitly.\nIn this case, the entire unboxing-boxing step can be removed. The inspection doesn't report simple explicit unboxing.\n\nThis inspection only reports if the language level of the project or module is 5 or higher." + } + ] + }, + { + "name": "Other problems", + "inspections": [ + { + "shortName": "ReplaceWithStringBuilderAppendRange", + "displayName": "'StringBuilder.append(CharArray, offset, len)' call on the JVM", + "enabled": false, + "description": "Reports a `StringBuilder.append(CharArray, offset, len)` function call on the JVM platform that should be replaced with a `StringBuilder.appendRange(CharArray, startIndex, endIndex)` function call.\n\nThe `append` function behaves differently on the JVM, JS and Native platforms, so using the `appendRange` function is recommended.\n\n**Example:**\n\n\n fun f(charArray: CharArray, offset: Int, len: Int): String {\n return buildString {\n append(charArray, offset, len)\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun f(charArray: CharArray, offset: Int, len: Int): String {\n return buildString {\n appendRange(charArray, offset, offset + len)\n }\n }\n" + }, + { + "shortName": "ConvertArgumentToSet", + "displayName": "Argument could be converted to 'Set' to improve performance", + "enabled": false, + "description": "Detects the function calls that could work faster with an argument converted to `Set`.\n\n\nOperations like 'minus' or 'intersect' are more effective when their argument is a set.\nAn explicit conversion of an `Iterable` or an `Array`\ninto a `Set` can often make code more effective.\n\n\nThe quick-fix adds an explicit conversion to the function call.\n\n**Example:**\n\n\n fun f(a: Iterable, b: Iterable): Int =\n a.intersect(b).size\n\nAfter the quick-fix is applied:\n\n\n fun f(a: Iterable, b: Iterable): Int =\n a.intersect(b.toSet()).size\n" + }, + { + "shortName": "DeprecatedCallableAddReplaceWith", + "displayName": "@Deprecated annotation without 'replaceWith' argument", + "enabled": false, + "description": "Reports deprecated functions and properties that do not have the `kotlin.ReplaceWith` argument in its `kotlin.deprecated` annotation and suggests to add one based on their body.\n\n\nKotlin provides the `ReplaceWith` argument to replace deprecated declarations automatically.\nIt is recommended to use the argument to fix deprecation issues in code.\n\n**Example:**\n\n\n @Deprecated(\"Use refined() instead.\")\n fun deprecated() = refined()\n\n fun refined() = 42\n\nA quick-fix adds the `ReplaceWith()` argument:\n\n\n @Deprecated(\"Use refined() instead.\", ReplaceWith(\"refined()\"))\n fun deprecated() = refined()\n\n fun refined() = 42\n" + }, + { + "shortName": "FloatingPointLiteralPrecision", + "displayName": "Floating-point literal exceeds the available precision", + "enabled": false, + "description": "Reports floating-point literals that cannot be represented with the required precision using [IEEE 754](https://en.wikipedia.org/wiki/IEEE_754) `Float` and `Double` types.\n\n\nFor example, `1.9999999999999999999` has too many significant digits,\nso its representation as a `Double` will be rounded to `2.0`.\nSpecifying excess digits may be misleading as it hides the fact that computations\nuse rounded values instead.\n\n\nThe quick-fix replaces the literal with a rounded value that matches the actual representation\nof the constant.\n\n**Example:**\n\n\n val x: Float = 3.14159265359f\n\nAfter the quick-fix is applied:\n\n\n val x: Float = 3.1415927f\n" + }, + { + "shortName": "KDocMissingDocumentation", + "displayName": "Missing KDoc comments for public declarations", + "enabled": false, + "description": "Reports public declarations that do not have KDoc comments.\n\n**Example:**\n\n\n class A\n\nThe quick fix generates the comment block above the declaration:\n\n\n /**\n *\n */\n class A\n" + }, + { + "shortName": "RedundantEmptyInitializerBlock", + "displayName": "Redundant empty initializer block", + "enabled": false, + "description": "Reports redundant empty initializer blocks.\n\n**Example:**\n\n\n class Foo {\n init {\n // Empty init block\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n }\n" + }, + { + "shortName": "PublicApiImplicitType", + "displayName": "Public API declaration with implicit return type", + "enabled": false, + "description": "Reports `public` and `protected` functions and properties that have an implicit return type.\nFor API stability reasons, it's recommended to specify such types explicitly.\n\n**Example:**\n\n\n fun publicFunctionWhichAbusesTypeInference() =\n otherFunctionWithNotObviousReturnType() ?: yetAnotherFunctionWithNotObviousReturnType()\n\nAfter the quick-fix is applied:\n\n\n fun publicFunctionWhichAbusesTypeInference(): Api =\n otherFunctionWithNotObviousReturnType() ?: yetAnotherFunctionWithNotObviousReturnType()\n" + }, + { + "shortName": "ReplaceWithEnumMap", + "displayName": "'HashMap' can be replaced with 'EnumMap'", + "enabled": true, + "description": "Reports `hashMapOf` function or `HashMap` constructor calls that can be replaced with an `EnumMap` constructor call.\n\nUsing `EnumMap` constructor makes your code simpler.\n\nThe quick-fix replaces the function call with the `EnumMap` constructor call.\n\n**Example:**\n\n\n enum class E {\n A, B\n }\n\n fun getMap(): Map = hashMapOf()\n\nAfter the quick-fix is applied:\n\n\n enum class E {\n A, B\n }\n\n fun getMap(): Map = EnumMap(E::class.java)\n" + }, + { + "shortName": "MigrateDiagnosticSuppression", + "displayName": "Diagnostic name should be replaced", + "enabled": true, + "description": "Reports suppressions with old diagnostic names, for example `@Suppress(\"HEADER_WITHOUT_IMPLEMENTATION\")`.\n\n\nSome of diagnostics from Kotlin 1.2 and earlier are now obsolete, making such suppressions redundant.\n\n**Example:**\n\n\n @Suppress(\"HEADER_DECLARATION_WITH_BODY\")\n expect fun connection() {\n // ...\n }\n\nAfter the quick-fix is applied:\n\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n expect fun connection() {\n // ...\n }\n" + } + ] + }, + { + "name": "Visibility", + "inspections": [ + { + "shortName": "PublicConstructorInNonPublicClass", + "displayName": "'public' constructor in non-public class", + "enabled": false, + "description": "Reports `public` constructors in non-`public` classes.\n\nUsually, there is no reason for creating a `public` constructor in a class with a lower access level.\nPlease note, however, that this inspection changes the behavior of some reflection calls. In particular,\n`Class.getConstructor()` won't be able to find the updated constructor\n(`Class.getDeclaredConstructor()` should be used instead). Do not use the inspection if your code\nor code of some used frameworks relies on constructor accessibility via `getConstructor()`.\n\n**Example:**\n\n\n class House {\n public House() {}\n }\n\nAfter the quick-fix is applied:\n\n\n class House {\n House() {}\n }\n" + }, + { + "shortName": "PatternVariableHidesField", + "displayName": "Pattern variable hides field", + "enabled": false, + "description": "Reports pattern variables named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the pattern variable when using the identically named field is intended.\n\n\nA quick-fix is suggested to rename the variable.\n\n**Example:**\n\n\n class Pointless {\n Point p = new Point();\n\n public void test(Object a) {\n if (a instanceof Point p) {\n System.out.print(\"a is a point (\" + p.x + \", \" + p.y + ')');\n } else {\n System.out.print(\"p is a point (\" + p.x + \", \" + p.y + ')');\n }\n }\n }\n\nNew in 2022.2" + }, + { + "shortName": "InnerClassVariableHidesOuterClassVariable", + "displayName": "Inner class field hides outer class field", + "enabled": false, + "description": "Reports inner class fields named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the field from the inner class when using the identically named field of a surrounding class is intended.\n\nA quick-fix is suggested to rename the inner class field.\n\n**Example:**\n\n\n class Outer {\n private String name;\n\n class Inner {\n private String name;\n }\n }\n\n\nUse the option to choose whether this inspection should report all name clashes,\nor only clashes with fields that are visible from the inner class." + }, + { + "shortName": "ClassEscapesItsScope", + "displayName": "Non-accessible class is exposed", + "enabled": true, + "description": "Reports usages of classes in a field or method signature when a class in a signature is less visible than the member itself. While legal Java, such members are useless outside of the visibility scope.\n\nExample:\n\n* `public` method which returns a `private` inner `class`.\n* `protected` field whose type is a package-local `class`.\n\n\nIn Java 9, a module may hide some of its classes by excluding their packages from export.\nSo, if the signature of exported API contains a non-exported class, such an API is useless outside of the module.\n\nConfigure the inspection:\n\n* Use the **Module's API exposes not exported classes (Java 9+)** option to report about the module API that exposes unexported classes. \n Note that the option works if the language level of the project or module is 9 or higher.\n* Use the **Public API exposes non-accessible classes** option to report about a public API that exposes non-accessible classes.\n* Use the **Package-local API exposes private classes** option to report about package-local API that exposes `private` classes." + }, + { + "shortName": "MethodOverloadsParentMethod", + "displayName": "Possibly unintended overload of method from superclass", + "enabled": true, + "description": "Reports instance methods with the same name and the same number of parameters as a method in a superclass, but where at least one of the parameters is of a different incompatible type.\n\n\nIn this case, the method in a subclass will be overloading the method from the superclass\ninstead of overriding it. If it is unintended, it may result in latent bugs.\n\n**Example:**\n\n\n public class Foo {\n void foo(int x) {}\n }\n\n public class Bar extends Foo {\n void foo(Number x) {} // Method 'foo()' overloads a compatible method of a superclass,\n // when overriding might have been intended\n }\n\n\nUse the option to choose whether the inspection should also report cases where parameter types are not compatible." + }, + { + "shortName": "TypeParameterHidesVisibleType", + "displayName": "Type parameter hides visible type", + "enabled": true, + "description": "Reports type parameters that have the same names as the visible types in the current scope. Such parameter names may be confusing.\n\nExample:\n\n\n abstract class MyList extends AbstractList {\n private List elements;\n // type parameter 'T' hides type parameter 'T'\n public T[] toArray(T[] array) {\n return elements.toArray(array);\n }\n }\n" + }, + { + "shortName": "FieldHidesSuperclassField", + "displayName": "Subclass field hides superclass field", + "enabled": false, + "description": "Reports fields in a derived class that are named identically a field of a superclass. Java fields cannot be overridden in derived classes, so the field in the derived class will hide the field from the superclass.\n\n\nAs a result of such naming, you may accidentally use the field of the derived class\nwhere the identically named field of a base class is intended.\n\nA quick-fix is suggested to rename the field in the derived class.\n\n**Example:**\n\n class Parent {\n Parent parent;\n }\n class Child extends Parent {\n Child parent;\n }\n\n\nYou can configure the following options for this inspection:\n\n1. **Ignore non-accessible fields** - indicates whether this inspection should report all name clashes, or only clashes with fields which are visible from the subclass.\n2. **Ignore static fields hiding static fields** - ignore `static` fields which hide `static` fields in base classes." + }, + { + "shortName": "MethodOverridesInaccessibleMethodOfSuper", + "displayName": "Method overrides inaccessible method of superclass", + "enabled": false, + "description": "Reports methods with the same signature as an inaccessible method of a superclass, for example, a private method, or a package-private method of a superclass in another package.\n\n\nSuch method names may be confusing because the method in the subclass may look like an override when in fact\nit hides the inaccessible method of the superclass.\nMoreover, if the visibility of the method in the superclass changes later,\nit may either silently change the semantics of the subclass or cause a compilation error.\n\nA quick-fix is suggested to rename the method.\n\n**Example:**\n\n\n public class Super {\n private void test() {\n }\n }\n\n public class Sub extends Super {\n void test() { // making 'Super.test()' public causes a compilation error\n // making 'Super.test()' package-private makes 'Sub.test()' an override\n }\n }\n" + }, + { + "shortName": "MethodOverridesStaticMethod", + "displayName": "Method tries to override 'static' method of superclass", + "enabled": true, + "description": "Reports `static` methods with a signature identical to a `static` method of a superclass. Such a method may look like an override when in fact it hides the method from the superclass because `static` methods in Java cannot be overridden.\n\n**Example:**\n\n\n class Parent {\n static void method(){}\n }\n\n class Example extends Parent {\n static void method(){} //warning\n }\n" + }, + { + "shortName": "AnonymousClassVariableHidesContainingMethodVariable", + "displayName": "Anonymous class variable hides variable in containing method", + "enabled": false, + "description": "Reports fields in an anonymous class that are named identically to local variables or parameters of the containing method or lambda expression.\n\n\nAs a result of such naming, you may accidentally use the anonymous class field where\nthe identically named variable or parameter from the containing method is intended.\n\nA quick-fix is suggested to rename the field.\n\n**Example:**\n\n\n class Test {\n public Test(String value) {\n Object foo = new Object() {\n private String value = \"TEST\";\n public void foo() {\n System.out.println(value); //the field is accessed, not the parameter\n }\n };\n }\n }\n" + }, + { + "shortName": "Java9ModuleExportsPackageToItself", + "displayName": "Module exports/opens package to itself", + "enabled": true, + "description": "Reports packages that are exported to, or opened in the same Java 9 module in which they are defined. The quick-fix removes such directives from `module-info.java`.\n\nExample:\n\n\n module com.mycomp {\n exports com.mycomp.main to com.mycomp;\n }\n\nAfter the quick-fix is applied:\n\n\n module main {\n }\n\nThis inspection only reports if the language level of the project or module is 9 or higher." + }, + { + "shortName": "ParameterHidingMemberVariable", + "displayName": "Parameter hides field", + "enabled": false, + "description": "Reports method parameters named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the parameter when using the identically named field is intended.\n\nA quick-fix is suggested to rename the parameter.\n\n**Example:**\n\n\n class Main {\n private String value;\n\n public Main(String value) {\n value = value.toUpperCase();\n }\n }\n \n\nYou can configure the following options for this inspection:\n\n1. **Ignore for property setters** - ignore parameters of simple setters.\n2. **Ignore superclass fields not visible from subclass** - ignore `private` fields in a superclass, which are not visible from the method.\n3. **Ignore for constructors** - ignore parameters of constructors.\n4. **Ignore for abstract methods** - ignore parameters of abstract methods.\n5. **Ignore for static method parameters hiding instance fields** - ignore parameters of `static` methods hiding an instance field and to ignore parameters of instance methods in static inner classes hiding an instance field of an outer class. While not strictly hiding, such parameters can still be confusing." + }, + { + "shortName": "AmbiguousFieldAccess", + "displayName": "Access to inherited field looks like access to element from surrounding code", + "enabled": false, + "description": "Reports access to a superclass field from an anonymous, inner or local class, if a local variable, parameter, or field with the same name is available in the code surrounding the class. In this case it may seem that an element from the surrounding code is accessed, when in fact it is an access to a field from the superclass.\n\n\nTo clarify the intent of the code, it is recommended to add an explicit\n`super` qualifier to the field access.\n\n**Example:**\n\n\n class First {\n protected String ambiguous;\n }\n class Second {\n void foo(String ambiguous) {\n new First() {\n {\n System.out.println(ambiguous); // the field is accessed, not the parameter\n }\n };\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class First {\n protected String ambiguous;\n }\n class Second {\n void foo(String ambiguous) {\n new First() {\n {\n System.out.println(super.ambiguous);\n }\n };\n }\n }\n" + }, + { + "shortName": "LambdaParameterHidingMemberVariable", + "displayName": "Lambda parameter hides field", + "enabled": false, + "description": "Reports lambda parameters named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the lambda parameter when using the identically named field is intended.\n\nA quick-fix is suggested to rename the lambda parameter.\n\n**Example:**\n\n\n public class MyClass {\n public Object foo;\n\n void sort(List list) {\n list.sort((foo, bar) -> foo - bar);\n }\n }\n\n\nUse the option to choose whether to ignore fields that are not visible from the lambda expression.\nFor example, private fields of a superclass." + }, + { + "shortName": "LocalVariableHidingMemberVariable", + "displayName": "Local variable hides field", + "enabled": false, + "description": "Reports local variables named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the variable where the identically named field is intended.\n\nA quick-fix is suggested to rename the variable.\n\n**Example:**\n\n\n public class Foo {\n public Object foo;\n\n void bar() {\n Object o = new Object() {\n void baz() {\n Object foo; // Local variable 'foo' hides field in class 'Foo'\n }\n };\n }\n }\n\n\nYou can configure the following options for this inspection:\n\n1. **Ignore non-accessible fields** - ignore local variables named identically to superclass fields that are not visible (for example, because they are private).\n2. **Ignore local variables in a static context hiding non-static fields** - for example when the local variable is inside a static method or inside a method which is inside a static inner class." + }, + { + "shortName": "AmbiguousMethodCall", + "displayName": "Call to inherited method looks like call to local method", + "enabled": false, + "description": "Reports calls to a superclass method from an anonymous, inner or local class, if a method with the same signature exists in the code surrounding the class. In this case it may seem that a method from the surrounding code is called, when in fact it is a call to a method from the superclass.\n\n\nTo clarify the intent of the code, it is recommended to add an explicit\n`super` qualifier to the method call.\n\n**Example:**\n\n\n class Parent {\n void ambiguous(){}\n }\n\n class Example {\n void ambiguous(){}\n\n class Inner extends Parent {\n void example(){\n ambiguous(); //warning\n }\n }\n }\n \nAfter the quick-fix is applied:\n\n\n class Parent {\n void ambiguous(){}\n }\n\n class Example {\n void ambiguous(){}\n\n class Inner extends Parent {\n void example(){\n super.ambiguous();\n }\n }\n }\n" + }, + { + "shortName": "Java9UndeclaredServiceUsage", + "displayName": "Usage of service not declared in 'module-info'", + "enabled": true, + "description": "Reports situations in which a service is loaded with `java.util.ServiceLoader` but it isn't declared with the `uses` clause in the `module-info.java` file and suggests inserting it.\n\nNew in 2018.1" + } + ] + }, + { + "name": "Lombok", + "inspections": [ + { + "shortName": "SpringQualifierCopyableLombok", + "displayName": "@Qualifier not copyable by lombok", + "enabled": true, + "description": "Reports Spring `@Qualifier` annotations on class fields that are ignored by the corresponding Lombok `@RequiredArgsConstructor` and `@AllArgsConstructor` annotations. The generated constructors will not receive the `@Qualifier` annotation without a `lombok.copyableAnnotations` definition inside the `lombok.config` file." + }, + { + "shortName": "Lombok", + "displayName": "Lombok annotations", + "enabled": true, + "description": "Offers general inspections for Lombok annotations." + }, + { + "shortName": "DeprecatedLombok", + "displayName": "Deprecated Lombok annotations", + "enabled": true, + "description": "Reports deprecated Lombok annotations and suggests quick-fixes to replace them with the ones promoted to the main package." + } + ] + }, + { + "name": "Redundant definitions", + "inspections": [ + { + "shortName": "RedundantSlf4jDefinition", + "displayName": "@Slf4j", + "enabled": true, + "description": "Reports explicitly defined *Slf4j* Loggers. The `@Slf4j` annotation can be used instead." + } + ] + }, + { + "name": "Encapsulation", + "inspections": [ + { + "shortName": "ProtectedInnerClass", + "displayName": "Protected nested class", + "enabled": false, + "description": "Reports `protected` nested classes.\n\n**Example:**\n\n\n public class Outer {\n protected static class Nested {} // warning\n protected class Inner {} // warning\n protected enum Mode {} // warning depends on the setting\n protected interface I {} // warning depends on the setting\n }\n\nConfigure the inspection:\n\n* Use the **Ignore 'protected' inner enums** option to ignore `protected` inner enums.\n* Use the **Ignore 'protected' inner interfaces** option to ignore `protected` inner interfaces." + }, + { + "shortName": "PackageVisibleInnerClass", + "displayName": "Package-visible nested class", + "enabled": false, + "description": "Reports nested classes that are declared without any access modifier (also known as package-private).\n\n**Example:**\n\n\n public class Outer {\n static class Nested {} // warning\n class Inner {} // warning\n enum Mode {} // warning depends on the setting\n interface I {} // warning depends on the setting\n }\n\nConfigure the inspection:\n\n* Use the **Ignore package-visible inner enums** option to ignore package-private inner enums.\n* Use the **Ignore package-visible inner interfaces** option to ignore package-private inner interfaces." + }, + { + "shortName": "PublicInnerClass", + "displayName": "'public' nested class", + "enabled": false, + "description": "Reports `public` nested classes.\n\n**Example:**\n\n\n public class Outer {\n public static class Nested {} // warning\n public class Inner {} // warning\n public enum Mode {} // warning depends on the setting\n public interface I {} // warning depends on the setting\n }\n\nConfigure the inspection:\n\n* Use the **Ignore 'public' inner enums** option to ignore `public` inner enums.\n* Use the **Ignore 'public' inner interfaces** option to ignore `public` inner interfaces." + }, + { + "shortName": "UseOfAnotherObjectsPrivateField", + "displayName": "Accessing a non-public field of another object", + "enabled": false, + "description": "Reports accesses to `private` or `protected` fields of another object. Java allows access to such fields for objects of the same class as the current object but some coding styles discourage this use. Additionally, such direct access to `private` fields may fail in component-oriented architectures, such as Spring or Hibernate, that expect all access to other objects to be through method calls so the framework can mediate access using proxies.\n\n**Example:**\n\n\n public class Base {\n protected int bar;\n\n void increment(Base base) {\n bar++;\n base.bar++; // warning: direct access to another object's non-public field\n }\n }\n\nA quick-fix to encapsulate the field is available.\n\nConfigure the inspection:\n\n* Use the **Ignore accesses from the same class** option to ignore access from the same class and only report access from inner or outer classes.\n\n To ignore access from inner classes as well, use the nested **Ignore accesses from inner classes**.\n* Use the **Ignore accesses from 'equals()' method** to ignore access from an `equals()` method." + }, + { + "shortName": "PackageVisibleField", + "displayName": "Package-visible field", + "enabled": false, + "description": "Reports fields that are declared without any access modifier (also known as package-private).\n\nConstants (that is, fields marked `static` and `final`) are not reported.\n\n**Example:**\n\n\n public class A {\n Object object; // warning\n final static int MODE = 0; // constant, no warning\n }\n" + }, + { + "shortName": "ProtectedField", + "displayName": "Protected field", + "enabled": false, + "description": "Reports `protected` fields.\n\nConstants (that is, variables marked `static` or `final`) are not reported.\n\n**Example:**\n\n\n public class A {\n protected Object object; // warning\n protected final static int MODE = 0; // constant, no warning\n }\n" + }, + { + "shortName": "PublicField", + "displayName": "'public' field", + "enabled": false, + "description": "Reports `public` fields. Constants (fields marked with `static` and `final`) are not reported.\n\n**Example:**\n\n\n class Main {\n public String name;\n }\n\nAfter the quick-fix is applied:\n\n\n class Main {\n private String name;\n\n public String getName() {\n return name;\n }\n\n public void setName(String name) {\n this.name = name;\n }\n }\n\nConfigure the inspection:\n\n* Use the **Ignore If Annotated By** list to specify annotations to ignore. The inspection will ignore fields with any of these annotations.\n* Use the **Ignore 'public final' fields of an enum** option to ignore `public final` fields of the `enum` type." + }, + { + "shortName": "AssignmentOrReturnOfFieldWithMutableType", + "displayName": "Assignment or return of field with mutable type", + "enabled": false, + "description": "Reports return of, or assignment from a method parameter to an array or a mutable type like `Collection`, `Date`, `Map`, `Calendar`, etc.\n\nBecause such types are mutable, this construct may\nresult in unexpected modifications of an object's state from outside the owning class. Although this construct may be useful for\nperformance reasons, it is inherently prone to bugs.\n\nThe following mutable types are reported:\n\n* `java.util.Date`\n* `java.util.Calendar`\n* `java.util.Collection`\n* `java.util.Map`\n* `com.google.common.collect.Multimap`\n* `com.google.common.collect.Table`\n\nThe quick-fix adds a call to the field's `.clone()` method.\n\n**Example:**\n\n\n class Log {\n String[] messages;\n ...\n\n String[] getMessages() {\n return messages; // warning: Return of String[] field 'messages'\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Log {\n String[] messages;\n ...\n\n String[] getMessages() {\n return messages.clone();\n }\n }\n\nUse the **Ignore assignments in and returns from private methods** option to ignore assignments and returns in `private` methods." + } + ] + }, + { + "name": "Concurrency annotation issues", + "inspections": [ + { + "shortName": "StaticGuardedByInstance", + "displayName": "Static member guarded by instance field or this", + "enabled": false, + "description": "Reports `@GuardedBy` annotations on `static` fields or methods in which the guard is either a non-static field or `this`.\n\nGuarding a static element with a non-static element may result in\nexcessive concurrency, multiple threads may be able to access the guarded field simultaneously by locking in different object contexts.\n\nExample:\n\n\n private ReadWriteLock lock = new ReentrantReadWriteLock();\n\n @GuardedBy(\"lock\")\n public static void bar() {\n // ...\n }\n\nSupported `@GuardedBy` annotations are:\n\n* `net.jcip.annotations.GuardedBy`\n* `javax.annotation.concurrent.GuardedBy`\n* `org.apache.http.annotation.GuardedBy`\n* `com.android.annotations.concurrency.GuardedBy`\n* `androidx.annotation.GuardedBy`\n* `com.google.errorprone.annotations.concurrent.GuardedBy`" + }, + { + "shortName": "NonFinalFieldInImmutable", + "displayName": "Non-final field in '@Immutable' class", + "enabled": false, + "description": "Reports any non-final field in a class with the `@Immutable` annotation. This violates the contract of the `@Immutable` annotation.\n\nExample:\n\n\n import javax.annotation.concurrent.Immutable;\n @Immutable\n class Foo {\n String bar = \"foo\";\n }\n\nSupported `@GuardedBy` annotations are:\n\n* `net.jcip.annotations.GuardedBy`\n* `javax.annotation.concurrent.GuardedBy`\n* `org.apache.http.annotation.GuardedBy`\n* `com.android.annotations.concurrency.GuardedBy`\n* `androidx.annotation.GuardedBy`\n* `com.google.errorprone.annotations.concurrent.GuardedBy`" + }, + { + "shortName": "InstanceGuardedByStatic", + "displayName": "Instance member guarded by static field", + "enabled": false, + "description": "Reports `@GuardedBy` annotations on instance fields or methods in which the guard is a `static` field. Guarding a non-static by a static may result in excessive lock contention, as access to each locked field in any object instance will prevent simultaneous access to that field in every object instance.\n\nExample:\n\n\n private static ReadWriteLock lock = new ReentrantReadWriteLock(); //static guarding field\n private Object state;\n\n @GuardedBy(\"lock\")\n public void bar() {\n state = new Object();\n }\n\nSupported `@GuardedBy` annotations are:\n\n* `net.jcip.annotations.GuardedBy`\n* `javax.annotation.concurrent.GuardedBy`\n* `org.apache.http.annotation.GuardedBy`\n* `com.android.annotations.concurrency.GuardedBy`\n* `androidx.annotation.GuardedBy`\n* `com.google.errorprone.annotations.concurrent.GuardedBy`" + }, + { + "shortName": "NonFinalGuard", + "displayName": "Non-final '@GuardedBy' field", + "enabled": false, + "description": "Reports `@GuardedBy` annotations in which the guarding field is not `final`.\n\nGuarding on a non-final field may result in unexpected race conditions, as locks will\nbe held on the value of the field (which may change), rather than the field itself.\n\nExample:\n\n\n private ReadWriteLock lock = new ReentrantReadWriteLock(); //not final guarding field\n private Object state;\n\n @GuardedBy(\"lock\")\n public void bar() {\n state = new Object();\n }\n\nSupported `@GuardedBy` annotations are:\n\n* `net.jcip.annotations.GuardedBy`\n* `javax.annotation.concurrent.GuardedBy`\n* `org.apache.http.annotation.GuardedBy`\n* `com.android.annotations.concurrency.GuardedBy`\n* `androidx.annotation.GuardedBy`\n* `com.google.errorprone.annotations.concurrent.GuardedBy`" + }, + { + "shortName": "UnknownGuard", + "displayName": "Unknown '@GuardedBy' field", + "enabled": false, + "description": "Reports `@GuardedBy` annotations in which the specified guarding field is unknown.\n\nExample:\n\n\n private Object state;\n\n @GuardedBy(\"lock\") //unknown guard reference\n public void bar() {\n state = new Object();\n }\n\nSupported `@GuardedBy` annotations are:\n\n* `net.jcip.annotations.GuardedBy`\n* `javax.annotation.concurrent.GuardedBy`\n* `org.apache.http.annotation.GuardedBy`\n* `com.android.annotations.concurrency.GuardedBy`\n* `androidx.annotation.GuardedBy`\n* `com.google.errorprone.annotations.concurrent.GuardedBy`" + }, + { + "shortName": "FieldAccessNotGuarded", + "displayName": "Unguarded field access or method call", + "enabled": false, + "description": "Reports accesses of fields declared as `@GuardedBy` that are not guarded by an appropriate synchronization structure.\n\nExample:\n\n\n @GuardedBy(\"this\")\n void x() {\n notify();\n }\n void y() {\n x(); // unguarded method call\n }\n\nSupported `@GuardedBy` annotations are:\n\n* `net.jcip.annotations.GuardedBy`\n* `javax.annotation.concurrent.GuardedBy`\n* `org.apache.http.annotation.GuardedBy`\n* `com.android.annotations.concurrency.GuardedBy`\n* `androidx.annotation.GuardedBy`\n* `com.google.errorprone.annotations.concurrent.GuardedBy`" + } + ] + }, + { + "name": "Java 8", + "inspections": [ + { + "shortName": "StaticPseudoFunctionalStyleMethod", + "displayName": "Pseudo-functional expression using static class", + "enabled": false, + "description": "Reports usages of pseudo-functional code if `Java Stream API` is available.\n\nThough `guava Iterable API` provides functionality similar to `Java Streams API`, it's slightly different and\nmay miss some features.\nEspecially, primitive-specialized stream variants like `IntStream` are more performant than generic variants.\n\n**Example:**\n\n\n List transformedIterable = Iterables.transform(someList, someTransformFunction);//warning: Pseudo functional style code\n\nAfter the quick-fix is applied:\n\n List transformedIterable = someList.stream().map(someTransformFunction).collect(Collectors.toList());\n\n\n**Note:** Code semantics can be changed; for example, guava's `Iterable.transform` produces a lazy-evaluated iterable,\nbut the replacement is eager-evaluated.\n\n\nUse the **Static method calls translated to the 'Stream' API** option\nto configure static method calls that should be translated to the `stream` API.\n\nThis inspection only reports if the language level of the project or module is 8 or higher." + }, + { + "shortName": "AnonymousHasLambdaAlternative", + "displayName": "Anonymous type has shorter lambda alternative", + "enabled": false, + "description": "Reports anonymous classes which could be transformed to a constructor or a factory method call with a lambda expression argument.\n\nThe following classes are reported by this inspection:\n\n* Anonymous classes extending `ThreadLocal` which have an `initialValue()` method (can be replaced with `ThreadLocal.withInitial`)\n* Anonymous classes extending `Thread` which have a `run()` method (can be replaced with `new Thread(Runnable)`\n\nExample:\n\n\n new Thread() {\n @Override\n public void run() {\n System.out.println(\"Hello from thread!\");\n }\n }.start();\n\nAfter the quick-fix is applied:\n\n\n new Thread(() -> {\n System.out.println(\"Hello from thread!\");\n }).start();\n" + }, + { + "shortName": "Java8ListReplaceAll", + "displayName": "Loop can be replaced with 'List.replaceAll()'", + "enabled": false, + "description": "Reports loops which can be collapsed into a single `List.replaceAll()` call.\n\n**Example:**\n\n\n for (int i = 0; i < strings.size(); i++) {\n String str = strings.get(i).toLowerCase();\n strings.set(i, str);\n }\n\nAfter the quick-fix is applied:\n\n\n strings.replaceAll(String::toLowerCase);\n\n\nThis inspection only reports if the language level of the project or module is 8 or higher.\n\nNew in 2022.1" + }, + { + "shortName": "FoldExpressionIntoStream", + "displayName": "Expression can be folded into Stream chain", + "enabled": false, + "description": "Reports expressions with a repeating pattern which could be replaced with *Stream API* or `String.join()`.\n\nExample:\n\n\n boolean allStartWith(String a, String b, String c, String d, String prefix) {\n return a.startsWith(prefix) && b.startsWith(prefix) && c.startsWith(prefix) && d.startsWith(prefix);\n }\n\nAfter the quick-fix is applied:\n\n\n boolean foo(String a, String b, String c, String d, String prefix) {\n return Stream.of(a, b, c, d).allMatch(s -> s.startsWith(prefix));\n }\n\nExample:\n\n\n String joinAll(String a, String b, String c, String d) {\n return a + \",\" + b + \",\" + c + \",\" + d;\n }\n\nAfter the quick-fix is applied:\n\n\n String joinAll(String a, String b, String c, String d) {\n return String.join(\",\", a, b, c, d);\n }\n\nThis inspection only reports if the language level of the project or module is 8 or higher.\n\nNew in 2018.2" + }, + { + "shortName": "Convert2streamapi", + "displayName": "Loop can be collapsed with Stream API", + "enabled": false, + "description": "Reports loops which can be replaced with stream API calls using lambda expressions.\n\nSuch a replacement changes the style from imperative to more functional and makes the code more compact.\n\nExample:\n\n\n boolean check(List data) {\n for (String e : data) {\n String trimmed = e.trim();\n if (!trimmed.startsWith(\"xyz\")) {\n return false;\n }\n }\n return true;\n }\n\nAfter the quick-fix is applied:\n\n\n boolean check(List data) {\n return data.stream().map(String::trim).allMatch(trimmed -> trimmed.startsWith(\"xyz\"));\n }\n\nThis inspection only reports if the language level of the project or module is 8 or higher." + }, + { + "shortName": "LambdaCanBeMethodCall", + "displayName": "Lambda can be replaced with method call", + "enabled": false, + "description": "Reports lambda expressions which can be replaced with a call to a JDK method.\n\nFor example, an expression `x -> x` of type `Function`\ncan be replaced with a `Function.identity()` call.\n\nNew in 2017.1" + }, + { + "shortName": "Anonymous2MethodRef", + "displayName": "Anonymous type can be replaced with method reference", + "enabled": false, + "description": "Reports anonymous classes which can be replaced with method references.\n\n\nNote that if an anonymous class is converted into an unbound method reference, the same method reference object\ncan be reused by the Java runtime during subsequent invocations. On the other hand, when an anonymous class is used,\nseparate objects are created every time. Thus, applying the quick-fix can cause the semantics change in rare cases,\ne.g. when anonymous class instances are used as `HashMap` keys.\n\n**Example:**\n\n\n Runnable r = new Runnable() {\n @Override\n public void run() {\n System.out.println();\n }\n };\n\nThe quick-fix changes this code to the compact form: `Runnable r = System.out::println;`.\n\nUse the **Report when interface is not annotated with @FunctionalInterface** option to enable this inspection for\ninterfaces which are not annotated with @FunctionalInterface.\n\nThis inspection only reports if the language level of the project or module is 8 or higher." + }, + { + "shortName": "CodeBlock2Expr", + "displayName": "Statement lambda can be replaced with expression lambda", + "enabled": false, + "description": "Reports lambda expressions with code block bodies when expression-style bodies can be used instead. The result of the conversion is shorter and more clear.\n\nExample:\n\n\n Comparable c = o -> {return 0;};\n\nAfter the quick-fix is applied:\n\n\n Comparable c = o -> 0;\n" + }, + { + "shortName": "SimplifyForEach", + "displayName": "Simplifiable forEach() call", + "enabled": false, + "description": "Reports `forEach()` calls that can be replaced with a more concise method or from which intermediate steps can be extracted.\n\n**Example:**\n\n\n List findNStrings(List list, int n) {\n List other = new ArrayList<>();\n list.forEach(s -> {\n if(s.length() > n) other.add(s);\n });\n return other;\n }\n\nAfter the quick-fix is applied:\n\n\n List findNStrings(List list, int n) {\n List other = list.stream()\n .filter(s -> s.length() > n)\n .collect(Collectors.toList());\n return other;\n }\n\nThis inspection only reports if the language level of the project or module is 8 or higher.\n\nNew in 2017.3" + }, + { + "shortName": "Guava", + "displayName": "Guava's functional primitives can be replaced with Java", + "enabled": false, + "description": "Reports usages of Guava's functional primitives that can be migrated to standard Java API calls.\n\nFor example, the inspection reports usages of classes and interfaces like `FluentIterable`, `Optional`, `Function`,\n`Predicate`, or `Supplier`.\n\nExample:\n\n\n ImmutableList results = FluentIterable.from(List.of(1, 2, 3)).transform(Object::toString).toList();\n\nAfter the quick-fix is applied:\n\n\n List results = List.of(1, 2, 3).stream().map(Object::toString).collect(Collectors.toList());\n\n\nThe quick-fix may change the semantics. Some lazy-evaluated Guava's iterables can be transformed to eager-evaluated.\n\nThis inspection only reports if the language level of the project or module is 8 or higher." + }, + { + "shortName": "Java8ListSort", + "displayName": "'Collections.sort()' can be replaced with 'List.sort()'", + "enabled": false, + "description": "Reports calls of `Collections.sort(list, comparator)` which can be replaced with `list.sort(comparator)`.\n\n`Collections.sort` is just a wrapper, so it is better to use an instance method directly.\n\nThis inspection only reports if the language level of the project or module is 8 or higher." + }, + { + "shortName": "ComparatorCombinators", + "displayName": "'Comparator' combinator can be used", + "enabled": false, + "description": "Reports `Comparator` instances defined as lambda expressions that could be expressed using `Comparator.comparing()` calls. Chained comparisons which can be replaced by `Comparator.thenComparing()` expression are also reported.\n\nExample:\n\n\n myList.sort((person1, person2) -> person1.getName().compareTo(person2.getName()));\n\n myList2.sort((person1, person2) -> {\n int res = person1.first().compareTo(person2.first());\n if(res == 0) res = person1.second().compareTo(person2.second());\n if(res == 0) res = person1.third() - person2.third();\n return res;\n });\n\nAfter the quick-fixes are applied:\n\n\n myList.sort(Comparator.comparing(Person::getName));\n\n myList2.sort(Comparator.comparing(Person::first)\n .thenComparing(Person::second)\n .thenComparingInt(Person::third));\n" + }, + { + "shortName": "Java8MapForEach", + "displayName": "Map.forEach() can be used", + "enabled": false, + "description": "Suggests replacing `for(Entry entry : map.entrySet()) {...}` or `map.entrySet().forEach(entry -> ...)` with `map.forEach((key, value) -> ...)`.\n\nExample\n\n\n void print(Map map) {\n map.entrySet().forEach(entry -> {\n String str = entry.getKey();\n System.out.println(str + \":\" + entry.getValue());\n });\n }\n\nAfter the quick-fix is applied:\n\n\n void print(Map map) {\n map.forEach((str, value) -> System.out.println(str + \":\" + value));\n }\n\n\nWhen the **Do not report loops** option is enabled, only `entrySet().forEach()` cases will be reported.\nHowever, the quick-fix action will be available for `for`-loops as well.\n\nThis inspection only reports if the language level of the project or module is 8 or higher.\n\nNew in 2017.1" + }, + { + "shortName": "Convert2Lambda", + "displayName": "Anonymous type can be replaced with lambda", + "enabled": false, + "description": "Reports anonymous classes which can be replaced with lambda expressions.\n\nExample:\n\n\n new Thread(new Runnable() {\n @Override\n public void run() {\n // run thread\n }\n });\n\nAfter the quick-fix is applied:\n\n\n new Thread(() -> {\n // run thread\n });\n\n\nNote that if an anonymous class is converted into a stateless lambda, the same lambda object\ncan be reused by Java runtime during subsequent invocations. On the other hand, when an anonymous class is used,\nseparate objects are created every time. Thus, applying the quick-fix can cause the semantics change in rare cases,\ne.g. when anonymous class instances are used as `HashMap` keys.\n\nLambda syntax is not supported in Java 1.7 and earlier JVMs.\n\n\nUse the **Report when interface is not annotated with @FunctionalInterface** option to ignore the cases in which an anonymous\nclass implements an interface without `@FunctionalInterface` annotation." + }, + { + "shortName": "Java8CollectionRemoveIf", + "displayName": "Loop can be replaced with 'Collection.removeIf()'", + "enabled": false, + "description": "Reports loops which can be collapsed into a single `Collection.removeIf` call.\n\nExample:\n\n\n for (Iterator it = collection.iterator(); it.hasNext(); ) {\n String aValue = it.next();\n if(shouldBeRemoved(aValue)) {\n it.remove();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n collection.removeIf(aValue -> shouldBeRemoved(aValue));\n\n\nThis inspection only reports if the language level of the project or module is 8 or higher." + }, + { + "shortName": "Convert2MethodRef", + "displayName": "Lambda can be replaced with method reference", + "enabled": false, + "description": "Reports lambdas that can be replaced with method references. While often it could be a matter of taste, method references are more clear and readable compared to lambdas.\n\nExample:\n\n\n Runnable r = () -> System.out.println();\n\nAfter the quick-fix is applied:\n\n\n Runnable r = System.out::println;\n\n\nThe inspection may suggest method references even if a lambda doesn't call any method, like replacing `obj -> obj != null`\nwith `Objects::nonNull`.\nUse the [Settings \\| Editor \\| Code Style \\| Java \\| Code Generation](settings://preferences.sourceCode.Java?Lambda%20Body)\nsettings to configure special method references.\n\nThis inspection only reports if the language level of the project or module is 8 or higher." + }, + { + "shortName": "Java8MapApi", + "displayName": "Simplifiable 'Map' operations", + "enabled": false, + "description": "Reports common usage patterns of `java.util.Map` and suggests replacing them with: `getOrDefault()`, `computeIfAbsent()`, `putIfAbsent()`, `merge()`, or `replaceAll()`.\n\nExample:\n\n\n map.containsKey(key) ? map.get(key) : \"default\";\n\nAfter the quick-fix is applied:\n\n\n map.getOrDefault(key, \"default\");\n\nExample:\n\n\n List list = map.get(key);\n if (list == null) {\n list = new ArrayList<>();\n map.put(key, list);\n }\n\nAfter the quick-fix is applied:\n\n\n map.computeIfAbsent(key, localKey -> new ArrayList<>());\n\nExample:\n\n\n Integer val = map.get(key);\n if (val == null) map.put(key, 1);\n else map.put(key, val + 1);\n\nAfter the quick-fix is applied:\n\n\n map.merge(key, 1, (localKey, localValue) -> localValue + 1);\n\nExample:\n\n\n for (Map.Entry entry : map.entrySet()) {\n map.put(entry.getKey(), transform(entry.getValue()));\n }\n\nAfter the quick-fix is applied:\n\n\n map.replaceAll((localKey, localValue) -> transform(localValue));\n\nNote that the replacement with `computeIfAbsent()` or `merge()` might work incorrectly for some `Map`\nimplementations if the code extracted to the lambda expression modifies the same `Map`. By default,\nthe warning doesn't appear if this code might have side effects. If necessary, enable the\n**Suggest replacement even if lambda may have side effects** option to always show the warning.\n\nAlso, due to different handling of the `null` value in old methods like `put()` and newer methods like\n`computeIfAbsent()` or `merge()`, semantics might change if storing the `null` value into given\n`Map` is important. The inspection won't suggest the replacement when the value is statically known to be nullable,\nbut for values with unknown nullability the replacement is still suggested. In these cases, we recommended suppressing the warning\nand adding an explanatory comment.\n\nThis inspection reports only if the language level of the project or module is 8 or higher." + } + ] + }, + { + "name": "Java language level issues", + "inspections": [ + { + "shortName": "EnumClass", + "displayName": "Enumerated class", + "enabled": false, + "description": "Reports **enum** classes. Such statements are not supported in Java 1.4 and earlier JVM." + }, + { + "shortName": "AnnotationClass", + "displayName": "Annotation interface", + "enabled": false, + "description": "Reports annotation interfaces. Such interfaces are not supported under Java 1.4 and earlier." + }, + { + "shortName": "AssertStatement", + "displayName": "'assert' statement", + "enabled": false, + "description": "Reports `assert` statements. By default, `assert` statements are disabled during execution in the production environment. Consider using logger or exceptions instead.\n\nThe `assert` statements are not supported in Java 1.3 and earlier JVM." + }, + { + "shortName": "ForeachStatement", + "displayName": "Enhanced 'for' statement", + "enabled": false, + "description": "Reports enhanced `for` statements.\n\nExample:\n\n\n for (int x: Arrays.asList(1, 2, 3)) {\n System.out.println(x);\n }\n\nAfter the quick-fix is applied:\n\n\n for (Iterator iterator = Arrays.asList(1, 2, 3).iterator(); iterator.hasNext(); ) {\n final int x = iterator.next();\n System.out.println(x);\n }\n\n\n*Enhanced* `for` *statement* appeared in Java 5.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions." + }, + { + "shortName": "Annotation", + "displayName": "Annotation", + "enabled": false, + "description": "Reports annotations. Annotations are not supported in Java 1.4 and earlier JVM." + }, + { + "shortName": "VarargParameter", + "displayName": "Varargs method", + "enabled": false, + "description": "Reports methods that accept an arbitrary number of parameters (also known as varargs methods).\n\n**Example:**\n\n\n enum EnumConstants {\n A(null), B, C;\n\n EnumConstants(String... ss) {}\n }\n\nA quick-fix is available to replace a variable argument\nparameter with an equivalent array parameter. Relevant arguments in method calls are wrapped in an array initializer expression.\nAfter the quick-fix is applied:\n\n\n enum EnumConstants {\n A(null), B(new String[]{}), C(new String[]{});\n\n EnumConstants(String[] ss) {}\n }\n\n\n*Varargs method* appeared in Java 5.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions." + }, + { + "shortName": "ForwardCompatibility", + "displayName": "Forward compatibility", + "enabled": true, + "description": "Reports Java code constructs that may fail to compile in future Java versions.\n\nThe following problems are reported:\n\n* Use of `assert`, `enum` or `_` as an identifier\n* Use of the `var`, `yield`, or `record` restricted identifier as a type name\n* Unqualified calls to the `yield()` method\n* Modifiers on the `requires java.base` statement inside of `module-info.java`\n\n**Example:**\n\n\n // This previously legal class does not compile with Java 14,\n // as 'yield' became a restricted identifier.\n public class yield {} \n\nFixing these issues timely may simplify migration to future Java versions." + } + ] + }, + { + "name": "XML", + "inspections": [ + { + "shortName": "DeprecatedClassUsageInspection", + "displayName": "Deprecated API usage in XML", + "enabled": false, + "description": "Reports usages of deprecated classes and methods in XML files." + }, + { + "shortName": "XmlWrongRootElement", + "displayName": "Wrong root element", + "enabled": false, + "description": "Reports a root tag name different from the name specified in the `` tag." + }, + { + "shortName": "CheckXmlFileWithXercesValidator", + "displayName": "Failed external validation", + "enabled": false, + "description": "Reports a discrepancy in an XML file with the specified DTD or schema detected by the Xerces validator." + }, + { + "shortName": "XmlHighlighting", + "displayName": "XML highlighting", + "enabled": false, + "description": "Reports XML validation problems in the results of a batch code inspection." + }, + { + "shortName": "XmlDuplicatedId", + "displayName": "Duplicate 'id' attribute", + "enabled": false, + "description": "Reports a duplicate `id` attribute in XML." + }, + { + "shortName": "XmlUnboundNsPrefix", + "displayName": "Unbound namespace prefix", + "enabled": false, + "description": "Reports an unbound namespace prefix in XML." + }, + { + "shortName": "XmlUnusedNamespaceDeclaration", + "displayName": "Unused schema declaration", + "enabled": false, + "description": "Reports an unused namespace declaration or location hint in XML." + }, + { + "shortName": "XmlPathReference", + "displayName": "Unresolved file reference", + "enabled": false, + "description": "Reports an unresolved file reference in XML." + }, + { + "shortName": "XmlDefaultAttributeValue", + "displayName": "Redundant attribute with default value", + "enabled": false, + "description": "Reports a redundant assignment of the default value to an XML attribute." + }, + { + "shortName": "CheckDtdRefs", + "displayName": "Unresolved DTD reference", + "enabled": false, + "description": "Reports inconsistency in a DTD-specific reference, for example, in a reference to an XML entity or to a DTD element declaration. Works in DTD an XML files." + }, + { + "shortName": "CheckTagEmptyBody", + "displayName": "Empty element content", + "enabled": false, + "description": "Reports XML elements without contents.\n\n**Example:**\n\n\n \n \n \n\nAfter the quick-fix is applied:\n\n\n \n \n \n" + }, + { + "shortName": "XmlInvalidId", + "displayName": "Unresolved 'id' reference", + "enabled": false, + "description": "Reports an unresolved `id` reference in XML." + }, + { + "shortName": "XmlDeprecatedElement", + "displayName": "Deprecated symbol", + "enabled": false, + "description": "Reports a deprecated XML element or attribute.\n\nSymbols can be marked by XML comment or documentation tag with text 'deprecated'." + } + ] + }, + { + "name": "Finalization", + "inspections": [ + { + "shortName": "FinalizeNotProtected", + "displayName": "'finalize()' should be protected, not public", + "enabled": true, + "description": "Reports any implementations of the `Object.finalize()` method that are declared `public`.\n\n\nAccording to the contract of the `Object.finalize()`, only the garbage\ncollector calls this method. Making this method public may be confusing, because it\nmeans that the method can be used from other code.\n\n\nA quick-fix is provided to make the method `protected`, to prevent it from being invoked\nfrom other classes.\n\n**Example:**\n\n\n class X {\n public void finalize() {\n /* ... */\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class X {\n protected void finalize() {\n /* ... */\n }\n }\n" + }, + { + "shortName": "Finalize", + "displayName": "'finalize()' should not be overridden", + "enabled": true, + "description": "Reports overriding the `Object.finalize()` method.\n\nAccording to the `Object.finalize()` documentation:\n>\n> The finalization mechanism is inherently problematic. Finalization can lead\n> to performance issues, deadlocks, and hangs. Errors in finalizers can lead\n> to resource leaks; there is no way to cancel finalization if it is no longer\n> necessary; and no ordering is specified among calls to `finalize`\n> methods of different objects. Furthermore, there are no guarantees regarding\n> the timing of finalization. The `finalize` method might be called\n> on a finalizable object only after an indefinite delay, if at all.\n\nConfigure the inspection:\n\n* Use the **Ignore for trivial 'finalize()' implementations** option to ignore `finalize()` implementations with an empty method body or a body containing only `if` statements that have a condition which evaluates to `false` and is a compile-time constant. For performance reasons it can be beneficial to override a non-trivial `finalize()` with an empty implementation in a subclass. An empty final `finalize()` implementation can also be used to prevent subclasses from overriding." + }, + { + "shortName": "NoExplicitFinalizeCalls", + "displayName": "'finalize()' called explicitly", + "enabled": false, + "description": "Reports calls to `Object.finalize()`.\n\nCalling `Object.finalize()` explicitly may result in objects being placed in an\ninconsistent state.\nThe garbage collector automatically calls this method on an object when it determines that there are no references to this object.\n\nThe inspection doesn't report calls to `super.finalize()` from within implementations of `finalize()` as\nthey're benign.\n\n**Example:**\n\n\n MyObject m = new MyObject();\n m.finalize();\n System.gc()\n" + } + ] + }, + { + "name": "Logging", + "inspections": [ + { + "shortName": "LogStatementGuardedByLogCondition", + "displayName": "Logging call not guarded by log condition", + "enabled": false, + "description": "Reports logging calls with non-constant arguments that are not surrounded by a guard condition. The evaluation of the arguments of a logging call can be expensive. Surrounding a logging call with a guard clause prevents that cost when logging is disabled for the level used by the logging statement. This is especially useful for the least serious level (trace, debug, finest) of logging calls, because those are most often disabled in a production environment.\n\n**Example:**\n\n\n public class Principal {\n void bad(Object object) {\n if (true) {\n LOG.debug(\"log log log \" + expensiveCalculation(object));\n }\n LOG.debug(\"some more logging \" + expensiveCalculation(1));\n }\n\n void good(Object) {\n if (LOG.isDebug()) {\n LOG.debug(\"value: \" + expensiveCalculation(object));\n }\n }\n }\n\n\nConfigure the inspection:\n\n* Use the **Logger class name** field to specify the logger class name used.\n*\n Use the table to specify the logging methods this inspection should warn on, with the corresponding log condition text.\n\n* Use the **Flag all unguarded logging calls** option to have the inspection flag all unguarded log calls, not only those with non-constant arguments." + }, + { + "shortName": "LoggingConditionDisagreesWithLogStatement", + "displayName": "Log condition does not match logging call", + "enabled": false, + "description": "Reports *is log enabled for* conditions of `if` statements that do not match the log level of the contained logging call.\n\n\nFor example:\n\n\n if (LOG.isTraceEnabled()) {\n // debug level logged, but checked for trace level\n LOG.debug(\"some log message\");\n }\n\nThis inspection understands the *java.util.logging* , *log4j* , *Log4j 2* , *Apache Commons Logging*\nand the *SLF4J* logging frameworks." + }, + { + "shortName": "NonStaticFinalLogger", + "displayName": "Non-constant logger", + "enabled": true, + "description": "Reports logger fields that are not declared `static` and/or `final`. Ensuring that every class logger is effectively constant and bound to that class simplifies the task of providing a unified logging implementation for an application.\n\nA quick-fix is provided to change the logger modifiers to `static final`.\n\n**Example:**\n\n\n public class Significant {\n private Logger LOG = Logger.getLogger(Critical.class);\n }\n\nAfter the quick-fix is applied:\n\n\n public class Significant {\n private static final Logger LOG = Logger.getLogger(Critical.class);\n }\n\n\nConfigure the inspection:\n\n* Use the **Logger class name** table to specify logger class names. The inspection will report the fields that are not `static` and `final` and are of the type equal to one of the specified class names." + }, + { + "shortName": "PublicMethodWithoutLogging", + "displayName": "'public' method without logging", + "enabled": false, + "description": "Reports any public methods that do not contain a logging statement. This inspection does not report simple getters and setters.\n\nFor example:\n\n\n public class Crucial {\n private static finalLogger LOG = LoggerFactory.getLogger(Crucial.class);\n public void doImportantStuff() {\n // warning on this method\n }\n\n public void doOtherStuff() {\n LOG.info(\"do other stuff\");\n }\n }\n\n\nUse the table below to specify Logger class names.\nPublic methods that do not use instance methods of the specified classes will be reported by this inspection." + }, + { + "shortName": "PlaceholderCountMatchesArgumentCount", + "displayName": "Number of placeholders does not match number of arguments in logging call", + "enabled": false, + "description": "Reports SLF4J or Log4j 2 logging calls, such as `logger.info(\"{}: {}\", key)` where the number of `{}` placeholders in the logger message doesn't match the number of other arguments to the logging call." + }, + { + "shortName": "ClassWithMultipleLoggers", + "displayName": "Class with multiple loggers", + "enabled": false, + "description": "Reports classes that have multiple loggers declared. Ensuring that every class has a single dedicated logger is an important step in providing a unified logging implementation for an application.\n\nFor example:\n\n\n public class Critical {\n protected static final Logger LOG = Logger.getLogger(Critical.class);\n\n protected static final Logger myLogger = Logger.getLogger(getClass());\n }\n\n\nUse the table below to specify Logger class names.\nClasses which declare multiple fields that have the type of one of the specified classes will be reported by this inspection." + }, + { + "shortName": "LoggerInitializedWithForeignClass", + "displayName": "Logger initialized with foreign class", + "enabled": false, + "description": "Reports `Logger` instances that are initialized with a `class` literal from a different class than the `Logger` is contained in. This can easily happen when copy-pasting some code from another class and may result in logging events under an unexpected category and cause filters to be applied incorrectly.\n\nA quick-fix is provided to replace the foreign class literal with one from the surrounding class.\n\n**Example:**\n\n\n public class Paramount {\n protected static final Logger LOG = Logger.getLogger(Critical.class);\n\n // ... other fields and methods\n }\n\nAfter the quick-fix is applied:\n\n\n public class Paramount {\n protected static final Logger LOG = Logger.getLogger(Paramount.class);\n\n // ... other fields and methods\n }\n\n\nConfigure the inspection:\n\n* Use the table to specify the logger factory classes and logger factory methods recognized by this inspection.\n* Use the **Ignore loggers initialized with a superclass** option to ignore loggers that are initialized with a superclass of the class containing the logger.\n* Use the **Ignore loggers in non-public classes** to only warn on loggers in `public` classes." + }, + { + "shortName": "ClassWithoutLogger", + "displayName": "Class without logger", + "enabled": false, + "description": "Reports classes which do not have a declared logger.\n\nEnsuring that every class has a dedicated logger is an important step in providing a unified logging\nimplementation for an application. Interfaces, enumerations, annotations, inner classes, and abstract classes are not reported by this inspection.\n\nFor example:\n\n\n public class NoLoggerDeclared {\n\n int calculateNthDigitOfPi(int n) {\n // todo\n return 1;\n }\n }\n\n\nUse the table in the **Options** section to specify logger class names.\nClasses which do not declare a field with the type of one of the specified classes will be reported by this inspection." + }, + { + "shortName": "StringConcatenationArgumentToLogCall", + "displayName": "Non-constant string concatenation as argument to logging call", + "enabled": false, + "description": "Reports non-constant string concatenations that are used as arguments to **SLF4J** and **Log4j 2** logging methods. Non-constant concatenations are evaluated at runtime even when the logging message is not logged; this can negatively impact performance. It is recommended to use a parameterized log message instead, which will not be evaluated when logging is disabled.\n\n**Example:**\n\n\n public class Vital {\n private static final Logger LOG = LoggerFactory.getLogger(Vital.class);\n\n public void saveTheWorld(int i, String s, boolean b) {\n LOG.info(\"saveTheWorld(\" + i + \", \" + s + \", \" + b + \")\");\n // todo\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class Vital {\n private static final Logger LOG = LoggerFactory.getLogger(Vital.class);\n\n public void saveTheWorld(int i, String s, boolean b) {\n LOG.info(\"saveTheWorld({}, {}, {})\", i, s, b);\n // todo\n }\n }\n\n\nConfigure the inspection:\n\n* Use the **Warn on** list to ignore certain higher logging levels. Higher logging levels may be enabled even in production, and the arguments will always be evaluated." + }, + { + "shortName": "KotlinPlaceholderCountMatchesArgumentCount", + "displayName": "Number of placeholders does not match number of arguments in logging call", + "enabled": true, + "description": "Reports SLF4J or Log4j 2 logging calls, such as `logger.info(\"{}: {}\", key)` where the number of `{}` placeholders in the logger message doesn't match the number of other arguments to the logging call." + }, + { + "shortName": "KotlinLoggerInitializedWithForeignClass", + "displayName": "Logger initialized with foreign class", + "enabled": false, + "description": "Reports `Logger` instances initialized with a class literal other than the class the `Logger` resides in.\n\n\nThis can happen when copy-pasting from another class.\nIt may result in logging events under an unexpected category and incorrect filtering.\n\n\nUse the inspection options to specify the logger factory classes and methods recognized by this inspection.\n\n**Example:**\n\n\n class AnotherService\n class MyService {\n private val logger = LoggerFactory.getLogger(AnotherService::class.java)\n }\n\nAfter the quick-fix is applied:\n\n\n class MyService {\n private val logger = LoggerFactory.getLogger(MyService::class.java)\n }\n" + } + ] + }, + { + "name": "Modularization issues", + "inspections": [ + { + "shortName": "ModuleWithTooManyClasses", + "displayName": "Module with too many classes", + "enabled": false, + "description": "Reports modules that contain too many classes. Overly large modules may indicate a lack of design clarity. Java, Kotlin and Groovy classes are counted.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor.\n\nUse the **Maximum number of classes** field to specify the maximum number of classes a module may have." + }, + { + "shortName": "ClassOnlyUsedInOneModule", + "displayName": "Class only used from one other module", + "enabled": false, + "description": "Reports classes that:\n\n* do not depend on any other class in their module\n* depend on classes from a different module\n* are a dependency only for classes from this other module\n\nSuch classes could be moved into the module on which they depend.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + { + "shortName": "ClassIndependentOfModule", + "displayName": "Class independent of its module", + "enabled": false, + "description": "Reports classes that:\n\n* do not depend on any other class in their module\n* are not a dependency for any other class in their module\n\nSuch classes are an indication of ad-hoc or incoherent modularisation strategies,\nand may often profitably be moved.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + { + "shortName": "InconsistentLanguageLevel", + "displayName": "Inconsistent language level settings", + "enabled": false, + "description": "Reports modules which depend on other modules with a higher language level.\n\nSuch dependencies should be removed or the language level of the module be increased.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + { + "shortName": "ModuleWithTooFewClasses", + "displayName": "Module with too few classes", + "enabled": false, + "description": "Reports modules that contain too few classes. Overly small modules may indicate a too fragmented design. Java, Kotlin and Groovy classes are counted.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor.\n\nUse the **Minimum number of classes** field to specify the minimum number of classes a module may have." + } + ] + }, + { + "name": "Java interop issues", + "inspections": [ + { + "shortName": "PackageDirectoryMismatch", + "displayName": "Package name does not match containing directory", + "enabled": true, + "description": "Reports `package` directives that do not match the location of the file.\n\n\nWhen applying fixes, \"Move refactoring\" defaults are used to update usages of changed declarations, namely:\n\n* \"Search in comments and strings\"\n* \"Search for text occurrences\"" + }, + { + "shortName": "FakeJvmFieldConstant", + "displayName": "Kotlin non-const property used as Java constant", + "enabled": true, + "description": "Reports Kotlin properties that are not `const` and used as Java annotation arguments.\n\n\nFor example, a property with the `@JvmField` annotation has an initializer that can be evaluated at compile-time,\nand it has a primitive or `String` type.\n\n\nSuch properties have a `ConstantValue` attribute in bytecode in Kotlin 1.1-1.2.\nThis attribute allows javac to fold usages of the corresponding field and use that field in annotations.\nThis can lead to incorrect behavior in the case of separate or incremental compilation in mixed Java/Kotlin code.\nThis behavior is subject to change in Kotlin 1.3 (no `ConstantValue` attribute any more).\n\n**Example:**\n\nKotlin code in foo.kt file:\n\n\n annotation class Ann(val s: String)\n @JvmField val importantString = \"important\"\n\nJava code:\n\n\n public class JavaUser {\n // This is dangerous\n @Ann(s = FooKt.importantString)\n public void foo() {}\n }\n\nTo fix the problem replace the `@JvmField` annotation with the `const` modifier on a relevant Kotlin property or inline it." + }, + { + "shortName": "HasPlatformType", + "displayName": "Function or property has platform type", + "enabled": true, + "description": "Reports functions and properties that have a platform type.\n\nTo prevent unexpected errors, the type should be declared explicitly.\n\n**Example:**\n\n\n fun foo() = java.lang.String.valueOf(1)\n\nThe quick fix allows you to specify the return type:\n\n\n fun foo(): String = java.lang.String.valueOf(1)\n" + }, + { + "shortName": "JavaCollectionsStaticMethodOnImmutableList", + "displayName": "Call of Java mutator method on immutable Kotlin collection", + "enabled": true, + "description": "Reports Java mutator methods calls (like `fill`, `reverse`, `shuffle`, `sort`) on an immutable Kotlin collection.\n\nThis can lead to `UnsupportedOperationException` at runtime.\n\n**Example:**\n\n\n import java.util.Collections\n\n fun test() {\n val immutableList = listOf(1, 2)\n Collections.reverse(immutableList)\n }\n\nTo fix the problem make the list mutable." + }, + { + "shortName": "KotlinInternalInJava", + "displayName": "Usage of Kotlin internal declarations from Java", + "enabled": true, + "description": "Reports usages of Kotlin `internal` declarations in Java code that is located in a different module.\n\n\nThe `internal` keyword is designed to restrict access to a class, function, or property from other modules.\nDue to JVM limitations, `internal` classes, functions, and properties can still be\naccessed from outside Kotlin, which may later lead to compatibility problems." + }, + { + "shortName": "KotlinSealedInheritorsInJava", + "displayName": "Inheritance of Kotlin sealed interface/class from Java", + "enabled": true, + "description": "Reports attempts to inherit from Kotlin sealed interfaces or classes in Java code.\n\n**Example:**\n\n\n // Kotlin file: MathExpression.kt\n\n sealed class MathExpression\n\n data class Const(val number: Double) : MathExpression()\n data class Sum(val e1: MathExpression, val e2: MathExpression) : MathExpression()\n\n\n // Java file: NotANumber.java\n\n public class NotANumber extends MathExpression {\n }\n" + }, + { + "shortName": "RedundantNotNullExtensionReceiverOfInline", + "displayName": "'inline fun' extension receiver can be explicitly nullable until Kotlin 1.2", + "enabled": false, + "description": "Reports inline functions with non-nullable extension receivers which don't use the fact that extension receiver is not nullable.\n\n\nBefore Kotlin 1.2, calls of `inline fun` with flexible nullable extension receiver (a platform type with an unknown\nnullability) did not include nullability checks in bytecode. Since Kotlin 1.2, nullability checks are included into the bytecode\n(see [KT-12899](https://youtrack.jetbrains.com/issue/KT-12899)).\n\n\nThus functions which do not use the fact that extension receiver is not nullable are dangerous in Kotlin until 1.2 and it's\nrecommended to make such functions to have nullable receiver.\n\n**Example:**\n\n\n inline fun String.greet() {\n println(\"Hello, $this!\")\n }\n\n fun main() {\n // `System.getProperty` returns not denotable `String!` type\n val user = System.getProperty(\"user.name\")\n user.greet()\n }\n\nAfter the quick-fix is applied:\n\n\n inline fun String.greet() {\n println(\"Hello, $this!\")\n }\n\n fun main() {\n // `System.getProperty` returns not denotable `String!` type\n val user = System.getProperty(\"user.name\")\n user.greet()\n }\n\nThis inspection only reports if the Kotlin language level of the project or module is lower than 1.2." + }, + { + "shortName": "KotlinJvmAnnotationInJava", + "displayName": "Kotlin JVM annotation in Java", + "enabled": false, + "description": "Reports useless Kotlin JVM annotations in Java code.\n\n**Example:**\n\n\n import kotlin.jvm.Volatile;\n\n public class Test {\n @Volatile\n public int i;\n }\n" + }, + { + "shortName": "PlatformExtensionReceiverOfInline", + "displayName": "'inline fun' with nullable receiver until Kotlin 1.2", + "enabled": true, + "description": "Reports potentially unsafe calls of inline functions with flexible nullable (platform type with unknown nullability) extension receivers.\n\n\nBefore Kotlin 1.2, calls of `inline fun` with flexible nullable extension receiver (a platform type with an unknown\nnullability) did not include nullability checks in bytecode. Since Kotlin 1.2, nullability checks are included into the bytecode\n(see [KT-12899](https://youtrack.jetbrains.com/issue/KT-12899)).\n\n\nIt's recommended to add an explicit `!!` you want an exception to be thrown,\nor consider changing the function's receiver type to nullable if it should work without exceptions.\n\n**Example:**\n\n\n inline fun String.removePrefix(prefix: String): String {\n return this.substring(prefix.length)\n }\n\n fun main() {\n // `System.getProperty` returns not denotable `String!` type\n val property = System.getProperty(\"user.dir\")\n println(property.removePrefix(\"/home\"))\n }\n\nAfter the quick-fix is applied:\n\n\n inline fun String.removePrefix(prefix: String): String {\n return this.substring(prefix.length)\n }\n\n fun main() {\n // `System.getProperty` returns not denotable `String!` type\n val property = System.getProperty(\"user.dir\")\n println(property!!.removePrefix(\"/home\"))\n }\n\nThis inspection only reports if the Kotlin language level of the project or module is lower than 1.2." + } + ] + }, + { + "name": "Class", + "inspections": [ + { + "shortName": "ExceptionNameDoesntEndWithException", + "displayName": "Exception class name does not end with 'Exception'", + "enabled": false, + "description": "Reports exception classes whose names don't end with `Exception`.\n\n**Example:** `class NotStartedEx extends Exception {}`\n\nA quick-fix that renames such classes is available only in the editor." + }, + { + "shortName": "ClassNameSameAsAncestorName", + "displayName": "Class name same as ancestor name", + "enabled": false, + "description": "Reports classes that have the same name as one of their superclasses, while their fully qualified names remain different. Such class names may be very confusing.\n\n**Example:**\n\n\n package util;\n abstract class Iterable implements java.lang.Iterable {}\n\nA quick-fix that renames such classes is available only in the editor." + }, + { + "shortName": "NewClassNamingConvention", + "displayName": "Class naming convention", + "enabled": false, + "description": "Reports classes whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n**Example:** if the inspection is enabled for tests, and the specified length for the minimum class name is 8 (the default), the following test class\nproduces a warning because the length of its name is 6, which is less than 8: `public class MyTest{}`.\n\nA quick-fix that renames such classes is available only in the editor.\n\nConfigure the inspection:\n\n\nUse the list in the **Options** section to specify which classes should be checked. Deselect the checkboxes for the classes for which\nyou want to skip the check.\n\nFor each class type, specify the minimum length, maximum length, and the regular expression expected for class names using the\nprovided input fields. Specify **0** in the length fields to skip corresponding checks.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + { + "shortName": "ClassNamePrefixedWithPackageName", + "displayName": "Class name prefixed with package name", + "enabled": false, + "description": "Reports classes whose names are prefixed with their package names, ignoring differences in capitalization.\n\nWhile occasionally having such names is reasonable, they are often used due to a poor naming scheme, may be redundant and\nannoying.\n\n**Example:**\n\n\n package byteCode;\n class ByteCodeAnalyzer {}\n\nA quick-fix that renames such classes is available only in the editor." + }, + { + "shortName": "NonExceptionNameEndsWithException", + "displayName": "Non-exception class name ends with 'Exception'", + "enabled": false, + "description": "Reports non-`exception` classes whose names end with `Exception`.\n\nSuch classes may cause confusion by breaking a common naming convention and\noften indicate that the `extends Exception` clause is missing.\n\n**Example:**\n\n public class NotStartedException {}\n\nA quick-fix that renames such classes is available only in the editor." + } + ] + }, + { + "name": "Memory", + "inspections": [ + { + "shortName": "ZeroLengthArrayInitialization", + "displayName": "Zero-length array allocation", + "enabled": false, + "description": "Reports allocations of arrays with known lengths of zero.\n\n\nSince array lengths in Java are non-modifiable, it is almost always possible to share zero-length arrays, rather than repeatedly\nallocate new ones. Such sharing may provide useful optimizations in the program runtime or footprint.\n\n\nNote that the inspection does not report zero-length arrays allocated as static final fields,\nsince those arrays are assumed to be used for implementing array sharing." + }, + { + "shortName": "StringBufferField", + "displayName": "'StringBuilder' field", + "enabled": false, + "description": "Reports fields of type `java.lang.StringBuffer` or `java.lang.StringBuilder`. Such fields can grow without limit and are often the cause of memory leaks.\n\n**Example:**\n\n\n public class Example {\n private StringBuilder builder = new StringBuilder();\n\n }\n" + }, + { + "shortName": "UnnecessaryEmptyArrayUsage", + "displayName": "Unnecessary zero length array usage", + "enabled": true, + "description": "Reports allocations of arrays with known lengths of zero when there is a constant for that in the class of the array's element type. As zero-length arrays are immutable, you can save memory reusing the same array instance.\n\n**Example:**\n\n\n class Item {\n // Public zero-length array constant that can be reused \n public static final Item[] EMPTY_ARRAY = new Item[0];\n }\n class EmptyNode {\n Item[] getChildren() {\n // Unnecessary zero-length array creation\n return new Item[0];\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class EmptyNode {\n Item[] getChildren() {\n return Item.EMPTY_ARRAY;\n }\n }\n" + }, + { + "shortName": "ReturnOfInnerClass", + "displayName": "Return of instance of anonymous, local or inner class", + "enabled": false, + "description": "Reports `return` statements that return an instance of an anonymous, local, or inner class. Such instances keep an implicit reference to the outer instance, which can prevent the outer instance from being garbage-collected. Any caller of a method returning such an instance might cause a memory leak by holding on to the instance returned.\n\n\nConfigure the inspection:\n\n* Use the **Ignore returns from non-public methods** option to ignore returns from `protected` or package-private methods. Returns from `private` methods are always ignored." + }, + { + "shortName": "StaticCollection", + "displayName": "Static collection", + "enabled": false, + "description": "Reports static fields of a `Collection` type. While it's not necessarily a problem, static collections often cause memory leaks and are therefore prohibited by some coding standards.\n\n**Example:**\n\n\n public class Example {\n static List list = new ArrayList<>();\n\n }\n\n\nConfigure the inspection:\n\n* Use the **Ignore weak static collections or maps** option to ignore the fields of the `java.util.WeakHashMap` type." + }, + { + "shortName": "SystemGC", + "displayName": "Call to 'System.gc()' or 'Runtime.gc()'", + "enabled": false, + "description": "Reports `System.gc()` or `Runtime.gc()` calls. While occasionally useful in testing, explicitly triggering garbage collection via `System.gc()` is almost never recommended in production code and can result in serious performance issues." + }, + { + "shortName": "InnerClassMayBeStatic", + "displayName": "Inner class may be 'static'", + "enabled": true, + "description": "Reports inner classes that can be made `static`.\n\nA `static` inner class does not keep an implicit reference to its enclosing instance.\nThis prevents a common cause of memory leaks and uses less memory per instance of the class.\n\n**Example:**\n\n\n public class Outer {\n class Inner { // not static\n public void foo() {\n bar(\"x\");\n }\n\n private void bar(String string) {}\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class Outer {\n static class Inner {\n public void foo() {\n bar(\"x\");\n }\n\n private void bar(String string) {}\n }\n }\n" + }, + { + "shortName": "AnonymousInnerClassMayBeStatic", + "displayName": "Anonymous class may be a named 'static' inner class", + "enabled": false, + "description": "Reports anonymous classes that may be safely replaced with `static` inner classes. An anonymous class may be a `static` inner class if it doesn't explicitly reference its enclosing instance or local classes from its surrounding method.\n\n\nA `static` inner class does not keep an implicit reference to its enclosing instance.\nThis prevents a common cause of memory leaks and uses less memory per class instance.\n\n\nSince Java 18, only serializable anonymous classes keep an implicit reference to its enclosing instance,\nif this reference is not used. So, if module language level is Java 18 or higher,\nthis inspection reports serializable classes only.\n\nThe quick-fix extracts the anonymous class into a named `static` inner class.\n\n**Example:**\n\n\n void sample() {\n Thread thread = new Thread(new Runnable() {\n @Override\n public void run() {\n }\n });\n }\n\nAfter the quick-fix is applied:\n\n\n void sample() {\n Thread thread = new Thread(new Task());\n }\n\n private static class Task implements Runnable {\n @Override\n public void run() {\n }\n }\n" + } + ] + }, + { + "name": "Potentially confusing code constructs", + "inspections": [ + { + "shortName": "GroovyPointlessArithmetic", + "displayName": "Pointless arithmetic expression", + "enabled": false, + "description": "Reports pointless arithmetic expressions.\n\n\nSuch expressions include adding or subtracting zero, multiplying by zero or one,\ndivision by one, and shift by zero. Such expressions may be the result of automated refactorings\nnot completely followed through to completion, and in any case are unlikely to be what the developer\nintended to do.\n\n**Example:**\n\n\n a + 0\n\nAfter the quick-fix is applied:\n\n\n a\n" + }, + { + "shortName": "UnnecessaryQualifiedReference", + "displayName": "Unnecessary qualified reference", + "enabled": false, + "description": "Reports fully qualified references, which can be replaced with import.\n\n**Example:**\n\n\n def swingBuilder = new groovy.swing.SwingBuilder()\n\nAfter the quick-fix is applied:\n\n\n import groovy.swing.SwingBuilder\n \n def swingBuilder = new SwingBuilder()\n" + }, + { + "shortName": "GroovyOverlyComplexArithmeticExpression", + "displayName": "Overly complex arithmetic expression", + "enabled": false, + "description": "Reports arithmetic expressions with too many terms.\n\n\nSuch expressions may be confusing and bug-prone.\n\n\nUse the **Maximum number of terms** field to specify the maximum number of terms allowed in an arithmetic expression." + }, + { + "shortName": "GroovyNegatedIf", + "displayName": "Negated if condition expression", + "enabled": false, + "description": "Reports `if` statements which contain `else` branches and whose conditions are negated. Flipping the order of the `if` and `else` branches will usually increase the clarity of such statements.\n\n**Example:**\n\n\n if (!condition) {\n return \"1\"\n } else {\n return \"2\"\n }\n\n" + }, + { + "shortName": "ClashingGetters", + "displayName": "Clashing getters", + "enabled": false, + "description": "Reports boolean methods which can be accessed via the same property name.\n\nThe result of accessing such property might be unexpected.\n\n**Example:**\n\n\n class X {\n boolean isFoo() { true }\n boolean getFoo() { false }\n }\n\n // getFoo() will be called\n new X().foo\n" + }, + { + "shortName": "GroovyGStringKey", + "displayName": "GString map key", + "enabled": false, + "description": "Reports statements which use a `groovy.lang.GString` object as a key to map. In general `GString` objects are mutable and probably should not be used as keys. Also, a `GString` entry cannot be accessed with a `java.lang.String` object with same value.\n\n**Example:**\n\n\n def map = [:]\n def key = 'foo'\n map << [\"${key}\": 'bar']\n assert map[key] == null // confusing 'true' result of comparison\n\nNew in 2017.1" + }, + { + "shortName": "NewInstanceOfSingleton", + "displayName": "New instance of class annotated with @groovy.lang.Singleton", + "enabled": false, + "description": "Reports new instance creation of classes annotated with `@groovy.lang.Singleton`.\nSuch constructions can lead to runtime exception **Can't instantiate singleton**.\n\n**Example:**\n\n\n @Singleton\n class Foo{\n }\n \n Foo foo = new Foo()\n\nAfter the quick-fix is applied:\n\n\n @Singleton\n class Foo{\n }\n \n Foo foo = Foo.instance\n" + }, + { + "shortName": "GrReassignedInClosureLocalVar", + "displayName": "Local variable is reassigned in closure or anonymous class", + "enabled": false, + "description": "Reports local variables assigned to expression with different type inside of closure or anonymous class.\n\n**Example:**\n\n\n int sum = 0\n [1, 2, 3].each { sum += 'as' }\n println(sum)\n\nAs a result, the `integer` variable **sum** is reassigned to a `String` expression." + }, + { + "shortName": "GroovyNestedConditional", + "displayName": "Nested conditional expression", + "enabled": false, + "description": "Reports ternary conditional expressions that are nested inside other conditional expressions. Such nested conditionals may be very confusing. \"Elvis\" expressions are counted as conditionals for purpose of this inspection.\n\n**Example:**\n\n\n return (condition ? \"result\" : null) ?: \"fail\"\n\n" + }, + { + "shortName": "GroovyEmptyStatementBody", + "displayName": "Statement with empty body", + "enabled": false, + "description": "Reports `if`, `while`, `do` or `for` statements with empty bodies. While occasionally intended, this construction is confusing, and often the result of a typo.\n\n**Example:**\n\n\n if (condition) {}\n while(true){}\n\n" + }, + { + "shortName": "GroovyImplicitNullArgumentCall", + "displayName": "Implicit null argument", + "enabled": false, + "description": "Reports calls with no arguments to method that has exactly one parameter. This is equivalent to call with `null`, and that behavior is often confusing and unintended.\n\n**Example:**\n\n\n def foo(String s){}\n foo() // this call is actually 'foo(null)' call\n\n" + }, + { + "shortName": "GrPackage", + "displayName": "Package mismatch", + "enabled": false, + "description": "Reports files with a declared package that does not match the package expected. Also, reports files without `package` statements if the class is not located directly in the source root directory." + }, + { + "shortName": "GroovyOverlyComplexBooleanExpression", + "displayName": "Overly complex boolean expression", + "enabled": false, + "description": "Reports boolean expressions with too many terms.\n\n\nSuch expressions may be confusing and bug-prone.\n\n\nUse the **Maximum number of terms** field to specify the maximum number of terms allowed in a boolean expression." + }, + { + "shortName": "GroovyPointlessBoolean", + "displayName": "Pointless boolean expression", + "enabled": false, + "description": "Reports pointless or pointlessly complicated boolean expressions.\n\n\nSuch expressions include conjunction with true,\ndisjunction with false,\nequality comparison with a boolean literal, or negation of a boolean literal. Such expressions may be\nthe result of automated refactorings\nnot completely followed through to completion, and in any case are unlikely to be what the developer\nintended to do.\n\n**Example:**\n\n\n if (someBool && true) {}\n\nAfter the quick-fix is applied:\n\n\n if (someBool) {}\n" + }, + { + "shortName": "ClashingTraitMethods", + "displayName": "Clashing trait methods", + "enabled": false, + "description": "Reports classes which implement two or more traits that contain methods with same signatures.\n\nThe result of calling such methods might be unexpected.\n\nThe quick-fix adds an explicit overriding method.\n\n**Example:**\n\n\n trait T1 {\n def foo() {}\n }\n\n trait T2 {\n def foo() {}\n }\n\n class X implements T1, T2 {}\n\n // T2.foo() will be called\n new X().foo()\n\nAfter the quick-fix is applied:\n\n\n class X implements T1, T2 {\n @Override\n Object foo() {\n return T2.super.foo()\n }\n }\n" + }, + { + "shortName": "GroovyDoubleNegation", + "displayName": "Double negation", + "enabled": false, + "description": "Reports double negation that can be simplified.\n\n**Example:**\n\n\n if (!!functionCall()) {} // double negation\n if (!(a != b)) {} // double negation\n\nAfter the quick-fix is applied:\n\n\n if (functionCall()) {}\n if (a == b) {}\n\n" + }, + { + "shortName": "GroovyNegatedConditional", + "displayName": "Negated conditional expression", + "enabled": false, + "description": "Reports conditional expressions whose conditions are negated. Flipping the order of the conditional expression branches will usually increase the clarity of such statements.\n\n**Example:**\n\n\n ~condition ? \"1\" : \"2\"\n\n" + }, + { + "shortName": "GroovyNestedSwitch", + "displayName": "Nested switch statement", + "enabled": false, + "description": "Reports `switch` statements that are nested inside other `switch` statements. Such nested switch statements are confusing, and may result in unexpected behaviour.\n\n**Example:**\n\n\n switch (outer) {\n case 1:\n switch (inner) {\n case 1:\n print \"inner 1\"\n break\n default:\n print \"inner default\"\n }\n break\n default:\n print \"default\"\n }\n\n" + }, + { + "shortName": "GrDeprecatedAPIUsage", + "displayName": "Deprecated API usage", + "enabled": false, + "description": "Reports references to deprecated classes, fields, and methods." + }, + { + "shortName": "GroovyOctalInteger", + "displayName": "Octal integer", + "enabled": false, + "description": "Reports octal integer literals.\n\n\nSome coding standards prohibit the\nuse of octal literals, as they may be easily confused with decimal literals." + }, + { + "shortName": "GroovyResultOfIncrementOrDecrementUsed", + "displayName": "Result of increment or decrement used", + "enabled": false, + "description": "Reports increment or decrement expressions nested inside other expressions.\n\n\nSuch expressions may be confusing, and violate the general design principle that a\ngiven construct should do precisely one thing." + } + ] + }, + { + "name": "TestNG", + "inspections": [ + { + "shortName": "groupsTestNG", + "displayName": "Undefined group name", + "enabled": false, + "description": "Reports undefined group names passed to the `dependsOnGroups` or `groups` attributes in the `@Test` annotation.\n\nThe quick-fix adds an undefined name to a list of known groups.\n\nUse the **Defined Groups** field to define a comma-separated list of known groups." + }, + { + "shortName": "JUnitTestNG", + "displayName": "JUnit Test can be converted to TestNG", + "enabled": false, + "description": "Reports any JUnit-based test class that can be converted into TestNG based unit test.\n\nExample:\n\n\n import org.junit.Test;\n import static org.junit.Assert.*;\n\n public class ExampleTest {\n @Test\n public void testExample(){\n assertEquals(2 + 2, 4);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n import org.testng.Assert;\n import org.testng.annotations.Test;\n\n public class ExampleTest {\n @Test\n public void testExample(){\n Assert.assertEquals(4, 2 + 2);\n }\n }\n" + }, + { + "shortName": "ConvertJavadoc", + "displayName": "TestNG Javadoc can be converted to annotations", + "enabled": false, + "description": "Asserts your TestNG tests with Javadoc annotations and converts them to JDK annotations.\n\nExample:\n\n\n /**\n * @testng.before-test\n */\n public void sample() {}\n\nAfter the quick-fix is applied:\n\n\n @BeforeTest\n public void sample() {}\n" + }, + { + "shortName": "DataProviderReturnType", + "displayName": "Invalid data provider return type", + "enabled": false, + "description": "Reports methods marked with `@DataProvider` annotation that doesn't return `Object[][]` or `Iterator`. If another type is returned, TestNG throws an exception.\n\nExample:\n\n\n public class TestNgTest {\n @DataProvider(name = \"Languages\")\n List<String> getData() {\n return List.of(\"Java\", \"Kotlin\");\n }\n\n @Test(dataProvider = \"Languages\")\n public void testData(String language) {\n System.out.println(language);\n }\n }\n" + }, + { + "shortName": "ExpectedExceptionNeverThrownTestNG", + "displayName": "Expected exception never thrown in test method body", + "enabled": false, + "description": "Reports checked exceptions expected by a TestNG test method that are never thrown inside the method body.\n\n**Example:**\n\n\n @Test(expectedExceptions = Exception.class) // warning: Expected 'Exception' never thrown\n public void testEngineIsRunning() {\n assertTrue(engine.isRunning());\n }\n \n" + }, + { + "shortName": "UndeclaredTests", + "displayName": "Undeclared test", + "enabled": false, + "description": "Reports test classes that are not registered in `testing.xml`. This is often a mistake because such tests won't be executed." + }, + { + "shortName": "ConvertOldAnnotations", + "displayName": "Old TestNG annotation @Configuration is used", + "enabled": false, + "description": "Reports TestNG `org.testng.annotations.Configuration` annotations.\n\nIt's better to configure a test suite with the modern `@BeforeXXX`/`@AfterXXX` annotations.\n\nExample:\n\n\n public class Test {\n @Configuration(beforeSuite = true, afterTest = true)\n public void afterBefore(){\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class Test {\n @AfterTest()\n @BeforeSuite()\n public void afterBefore(){\n }\n }\n" + }, + { + "shortName": "DuplicatedDataProviderNames", + "displayName": "Duplicated data provider names", + "enabled": false, + "description": "Reports `TestNG` data providers with equal names if `org.testng.TestNGException` has occurred.\n\nExample:\n\n\n public class DuplicatedDataProviders {\n @DataProvider\n public Object[][] intTestData() { // duplicate 1\n return new Integer[][]{\n new Integer[]{1, 1},\n };\n }\n\n @DataProvider(name = \"intTestData\")\n public Object[][] someTestData() { // duplicate 2\n return new Integer[][]{\n new Integer[]{1, 1},\n };\n }\n\n @Test(dataProvider = \"intTestData\")\n public void testIsOK(Integer key, Integer value) {\n assertEquals(key, value);\n }\n }\n" + }, + { + "shortName": "dependsOnMethodTestNG", + "displayName": "Illegal method name passed to 'dependsOnMethods'", + "enabled": false, + "description": "Reports illegal method names passed to the `dependsOnMethods` attribute in the `@Test` annotation.\n\nA method name is considered illegal if it can't be resolved into a valid, accessible `@Test` annotated method in the current class\nor any of its parent classes.\n\nExample:\n\n\n public class SampleTest {\n @Test(dependsOnMethods = \"testSpellignError\")\n public void testSample() {}\n @Test\n public void testSpellingError(){}\n }\n" + }, + { + "shortName": "MalformedDataProvider", + "displayName": "Data provider problems", + "enabled": false, + "description": "Reports references to data provider methods that do not exist or are not accessible.\n\nExample:\n\n\n public class InstanceDataProviderFromForeignClass {\n // method data() doesn't exist in class A\n @Test(dataProvider = \"data\", dataProviderClass = A.class)\n public void test() {\n }\n }\n class A { }\n\nAfter the quick-fix is applied:\n\n\n //the needed data() method is created in class A\n class A {\n @DataProvider\n public Object[][] data() {\n return new Object[][]{};\n }\n }\n" + } + ] + }, + { + "name": "Plugin DevKit", + "inspections": [ + { + "shortName": "DevKitPropertiesQuotesValidation", + "displayName": "Quotes validation in properties files", + "enabled": false, + "description": "Reports wrong number of quotes around parameter in property value.\n\n\nIf parameters are present in the property value, then the value will be passed as a pattern to `java.text.MessageFormat`.\nThis means that single quotes are used for escaping. Thus to keep a quote visible, it must be duplicated:\n\n* `'{0}'` → `{0}`\n* `''{0}''` → `'$value$'`\n\n\nWhen using choice format, nested formats are evaluated as formats themselves, and second double quotes are required.\nWhen passing `1`:\n\n* `{0, choice, 0#no|#1''{0}'' file}` → `{0} files`\n* `{0, choice, 0#no|#1''''{0}'''' file}` → `'$number_of_files$' files`" + } + ] + }, + { + "name": "Plugin descriptor", + "inspections": [ + { + "shortName": "PluginXmlCapitalization", + "displayName": "Plugin.xml text capitalization", + "enabled": false, + "description": "Reports text capitalization problems in `plugin.xml`.\n\n\nThe following elements are checked:\n\n* ``\n* `, `\n* `, `\n* extension point properties annotated with `org.jetbrains.annotations.Nls` specifying required `capitalization`\n\n\nPlease see [Capitalization](https://jetbrains.design/intellij/text/capitalization/) in IntelliJ Platform UI Guidelines for more\ninformation." + }, + { + "shortName": "PluginXmlDynamicPlugin", + "displayName": "Plugin.xml dynamic plugin verification", + "enabled": false, + "description": "Reports dynamic plugin problems.\n\n\nDynamic plugins can be installed, updated and uninstalled without restarting the IDE (supported in 2020.1 and later).\n\n\nPlease see [Dynamic Plugins](https://plugins.jetbrains.com/docs/intellij/dynamic-plugins.html?from=PluginXmlDynamicPlugin) for further reference.\n\nNew in 2020.1" + }, + { + "shortName": "PluginXmlExtensionRegistration", + "displayName": "Plugin.xml extension registration", + "enabled": false, + "description": "Reports problems with extension registration in `plugin.xml`.\n\n\nThe following problems are reported:\n\n* Missing `language` declaration. If the extension does not target a specific language, use quick fix to create an explicit declaration for \"any language\".\n* Inspections: missing attributes\n* Services: redundant `serviceInterface` declaration\n* `com.intellij.stubElementTypeHolder` without `externalIdPrefix`, see [Stub Indexes](https://plugins.jetbrains.com/docs/intellij/stub-indexes.html?from=?from=DevkitPluginXmlInspectionDescription)\n\n
    \n\nNew in 2022.3" + }, + { + "shortName": "PluginXmlI18n", + "displayName": "Plugin.xml i18n verification", + "enabled": false, + "description": "Reports hardcoded texts in `plugin.xml`.\n\n\nUsing texts defined in resource bundles allows supporting multiple languages in the IDE.\n\n\nThe following elements are checked:\n\n* `, `\n* ``\n* known extension points having `bundle/key` alternative" + }, + { + "shortName": "PluginXmlValidity", + "displayName": "Plugin.xml validity", + "enabled": false, + "description": "Reports problems in `plugin.xml`.\n\n\nInvalid configuration can lead to problems at runtime." + } + ] + }, + { + "name": "JUnit", + "inspections": [ + { + "shortName": "MultipleExceptionsDeclaredOnTestMethod", + "displayName": "Multiple exceptions declared on test method", + "enabled": false, + "description": "Reports JUnit test method `throws` clauses with more than one exception. Such clauses are unnecessarily verbose. Test methods will not be called from other project code, so there is no need to handle these exceptions separately.\n\nFor example:\n\n\n @Test\n public void testReflection() throws NoSuchMethodException,\n InvocationTargetException, IllegalAccessException {\n String result = (String) String.class.getMethod(\"trim\")\n .invoke(\" hello \");\n assertEquals(\"hello\", result);\n }\n\nA quick fix is provided to replace the exception declarations with a single exception:\n\n\n @Test\n public void testReflection() throws Exception {\n String result = (String) String.class.getMethod(\"trim\")\n .invoke(\" hello \");\n assertEquals(\"hello\", result);\n }\n" + }, + { + "shortName": "MetaAnnotationWithoutRuntimeRetention", + "displayName": "Test annotation without '@Retention(RUNTIME)' annotation", + "enabled": false, + "description": "Reports annotations with a `SOURCE` or `CLASS` retention policy that are supposed to be used by JUnit 5. Such annotations are not available at runtime and most probably their retention policy should be fixed to be accessible through reflection.\n\nNote that if the retention policy is not specified, then the default retention policy `CLASS` is used.\n\n**Example:**\n\n\n @Testable\n public @interface UnitTest {}\n\nAfter the quick-fix is applied:\n\n\n @Retention(RetentionPolicy.RUNTIME)\n @Testable\n public @interface UnitTest {}\n" + }, + { + "shortName": "ExpectedExceptionNeverThrown", + "displayName": "Expected exception never thrown in test method body", + "enabled": false, + "description": "Reports checked exceptions expected by a JUnit 4 test-method that are never thrown inside the method body. Such test methods will never succeed.\n\n**Example:**\n\n\n @Test(expected = CloneNotSupportedException.class)\n public void testIt() {\n }\n" + }, + { + "shortName": "TestCaseWithNoTestMethods", + "displayName": "Test class with no tests", + "enabled": false, + "description": "Reports non-`abstract` test cases without any test methods.\n\nSuch test cases usually indicate unfinished code\nor could be a refactoring leftover that should be removed.\n\nExample:\n\n\n public class CrucialTest {\n @Before\n public void setUp() {\n System.out.println(\"setting up\");\n }\n }\n\nUse the **Ignore test cases which have superclasses with test methods** option to ignore test cases which have super classes\nwith test methods." + }, + { + "shortName": "UseOfObsoleteAssert", + "displayName": "Usage of obsolete 'junit.framework.Assert' method", + "enabled": false, + "description": "Reports any calls to methods from the `junit.framework.Assert` class. This class is obsolete and the calls can be replaced by calls to methods from the `org.junit.Assert` class.\n\nFor example:\n\n\n import org.junit.*;\n public class NecessaryTest {\n @Test\n public void testIt() {\n junit.framework.Assert.assertEquals(\"expected\", \"actual\");\n }\n }\n\nAfter the quick fix is applied, the result looks like the following:\n\n\n import org.junit;\n public class NecessaryTest {\n\n public void testIt() {\n Assert.assertEquals(\"expected\", \"actual\");\n }\n }\n" + }, + { + "shortName": "JUnit3StyleTestMethodInJUnit4Class", + "displayName": "Old style JUnit test method in JUnit 4 class", + "enabled": false, + "description": "Reports JUnit 3 style test methods that are located inside a class that does not extend the JUnit 3 `TestCase` class and contains JUnit 4 or JUnit 5 `@Test` annotated methods. Such test methods cannot be run." + }, + { + "shortName": "JUnit4AnnotatedMethodInJUnit3TestCase", + "displayName": "JUnit 4 test method in class extending JUnit 3 TestCase", + "enabled": false, + "description": "Reports JUnit 4 `@Test` annotated methods inside the inheritor of `junit.framework.TestCase`. Mixing API of JUnit can lead to problems running the tests.\n\n**Example:**\n\n\n public class MyTest extends TestCase {\n @Test //name doesn't start from \"test\", thus would be ignored\n public void wouldBeIgnored() {}\n \n @Test //name starts from \"test\"\n @Ignore //thus would be executed despite @Ignore annotation\n public void testWouldBeExecuted() {}\n }\n\n**Provided fixes:**\n\n* Remove the `@Ignore` annotation and rename the test method, so the name doesn't start with \"test\".\n* Convert a JUnit 3 test class to JUnit 4." + }, + { + "shortName": "ParameterizedParametersStaticCollection", + "displayName": "Parameterized test class without data provider method", + "enabled": false, + "description": "Reports JUnit 4 [parameterized test](https://github.com/junit-team/junit4/wiki/parameterized-tests) classes that are annotated with `@RunWith(Parameterized.class)` but either do not include a data provider method annotated with `@Parameterized.Parameters` or this method has an incorrect signature. Such test classes cannot be run. The data provider method should be `public` and `static` and have a return type of `Iterable` or `Object[]`.\n\nSuggests creating an empty parameter provider method or changing the signature of the incorrect data provider method.\n\n**Example:**\n\n\n\n @RunWith(Parameterized.class)\n public class ImportantTest {\n private int input;\n private int expected;\n\n ImportantTest(int input, int expected) {\n this.input = input;\n this.expected = expected;\n }\n\n // ... test cases\n }\n\nAfter the quick-fix is applied:\n\n\n @RunWith(Parameterized.class)\n public class ImportantTest {\n private int input;\n private int expected;\n\n ImportantTest(int input, int expected) {\n this.input = input;\n this.expected = expected;\n }\n\n @Parameters\n public static Iterable parameters() {\n return null;\n }\n\n // ... test cases\n }\n" + }, + { + "shortName": "Junit4Converter", + "displayName": "JUnit 3 test can be JUnit 4", + "enabled": false, + "description": "Reports JUnit 3 test classes that can be converted to JUnit 4 test classes.\n\n**Example:**\n\n\n public class MainTestCase extends junit.framework.TestCase {\n public void test() {\n Assert.assertTrue(true);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class MainTestCase {\n @org.junit.Test\n public void test() {\n Assert.assertTrue(true);\n }\n }\n\nThis inspection only reports if the language level of the project or module is 5 or higher, and JUnit 4 is available on the classpath." + } + ] + }, + { + "name": "Abstraction issues", + "inspections": [ + { + "shortName": "UseOfConcreteClass", + "displayName": "Use of concrete class", + "enabled": false, + "description": "Reports usages of concrete classes, rather than interfaces. Such declarations may represent a failure of abstraction and may make testing more difficult.\n\n\nDeclarations whose classes come from system or third-party libraries will not be reported by this inspection.\nCasts, instanceofs, and local variables are not reported in `equals()` method implementations.\nAlso, casts are not reported in `clone()` method implementations.\n\nExample:\n\n\n interface Entity {}\n class EntityImpl implements Entity {}\n\n void processObject(Object obj) {\n // warning: instanceof of the concrete class\n if (obj instanceof EntityImpl) {\n // warning: cast to the concrete class,\n // rather than the interface\n processEntity((EntityImpl)obj);\n }\n }\n // warning: parameter of concrete class\n void processEntity(EntityImpl obj) {\n }\n\n\nUse the **Ignore abstract class type** option to ignore casts to abstract classes.\n\nUse the subsequent options to control contexts where the problem is reported." + }, + { + "shortName": "MethodOnlyUsedFromInnerClass", + "displayName": "Private method only used from inner class", + "enabled": false, + "description": "Reports `private` methods which are only called from an inner class of the class containing the method. Such methods can be safely moved into that inner class.\n\nExample:\n\n\n public class Outer {\n public static void main(String[] args) {\n new Inner().run(args[0]);\n }\n\n static class Inner {\n void run(String arg) {\n // Method isEmpty() is used from Inner class only\n // consider moving it to the Inner class\n if (!isEmpty(arg)) {\n System.out.println(\"Argument is supplied\");\n }\n }\n }\n\n private static boolean isEmpty(String s) {\n return s != null && s.trim().isEmpty();\n }\n }\n\n\nUse the first checkbox below to ignore `private`\nmethods which are called from an anonymous or local class.\n\n\nUse the third checkbox to only report `static` methods." + }, + { + "shortName": "DeclareCollectionAsInterface", + "displayName": "Collection declared by class, not interface", + "enabled": false, + "description": "Reports declarations of `Collection` variables made by using the collection class as a type, rather than an appropriate interface. The warning is not issued if weakening the variable type will cause a compilation error.\n\nExample:\n\n\n // Warning: concrete collection class ArrayList used.\n int getTotalLength(ArrayList list) {\n return list.stream().mapToInt(String::length).sum();\n }\n\n // No warning, as trimToSize() method is not\n // available in the List interface\n void addData(ArrayList data) {\n data.add(\"Hello\");\n data.add(\"World\");\n data.trimToSize();\n }\n\nA quick-fix is suggested to use the appropriate collection interface (e.g. `Collection`, `Set`, or `List`)." + }, + { + "shortName": "PublicMethodNotExposedInInterface", + "displayName": "'public' method not exposed in interface", + "enabled": false, + "description": "Reports `public` methods in classes which are not exposed in an interface.\n\nExposing all `public` methods via an interface is important for\nmaintaining loose coupling, and may be necessary for certain component-based programming styles.\n\nExample:\n\n\n interface Person {\n String getName();\n }\n\n class PersonImpl implements Person {\n private String name;\n\n // ok: method is exposed in interface\n @Override\n public String getName() {\n return name;\n }\n\n // warning: method is public\n // but not exposed in interface\n public void setName() {\n this.name = name;\n }\n }\n\n\nUse the **Ignore if annotated by** list to specify special annotations. Methods annotated with one of\nthese annotations will be ignored by this inspection.\n\n\nUse the **Ignore if the containing class does not implement a non-library interface** option to ignore methods from classes which do not\nimplement any interface from the project." + }, + { + "shortName": "TypeMayBeWeakened", + "displayName": "Type may be weakened", + "enabled": false, + "description": "Reports variable and method return types that can be changed to a more abstract (weaker) type. This allows making the code more abstract, hence more reusable.\n\nExample:\n\n\n // Type of parameter can be weakened to java.util.List\n void processList(ArrayList list) {\n if (list.isEmpty()) return;\n System.out.println(\"Processing\");\n for (String s : list) {\n System.out.println(\"String: \" + s);\n }\n }\n\n\nEnable the **Use righthand type** checkbox below\nto prevent weakening the left side of assignments when the right side is not\na type cast or a new expression. When storing the result of a method call in a variable, it is\nuseful to retain the type of the method call result instead of unnecessarily weakening it.\n\n\nEnable the **Use parameterized type** checkbox below\nto use the parameterized type of the collection as the weakest type when\nthe object evaluated is used as an argument to a collection method with a parameter type of\n`java.lang.Object`.\nUse this option to prevent weakening to `Object` when passing an object to the following collection methods:\n`get()`, `remove()`,\n`contains()`, `indexOf()`,\n`lastIndexOf()`, `containsKey()` and `containsValue()`.\n\n\nEnable the **Do not weaken to Object** checkbox below\nto specify whether a type should be weakened to `java.lang.Object`.\nWeakening to `java.lang.Object` is rarely very useful.\n\n\nEnable the **Only weaken to an interface** checkbox below\nto only report a problem when the type can be weakened to an interface type.\n\n\nEnable the **Do not weaken return type** checkbox below\nto prevent reporting a problem when the return type may be weakened.\nOnly variables will be analyzed.\n\n\nEnable the **Do not suggest weakening variable declared as 'var'** checkbox below\nto prevent reporting on local variables declared using the 'var' keyword (Java 10+)\n\n\n**Stop classes** are intended to prevent weakening to classes\nlower than stop classes, even if it is possible.\nIn some cases, this may improve readability." + }, + { + "shortName": "BooleanParameter", + "displayName": "'public' method with 'boolean' parameter", + "enabled": false, + "description": "Reports public methods that accept a `boolean` parameter.\n\nIt's almost always bad practice to add a `boolean` parameter to a public method (part of an API) if that method is not a setter.\nWhen reading code using such a method, it can be difficult to decipher what the `boolean` stands for without looking at\nthe source or documentation.\n\nThis problem is also known as [the boolean trap](https://ariya.io/2011/08/hall-of-api-shame-boolean-trap).\nThe `boolean` parameter can often be replaced with an `enum`.\n\nExample:\n\n\n // Warning: it's hard to understand what the\n // boolean parameters mean when looking at\n // a call to this method\n public boolean setPermission(File f,\n int access,\n boolean enable,\n boolean ownerOnly) {\n // ...\n }\n\n\nUse the **Only report methods with multiple boolean parameters** option to warn only when a method contains more than one boolean parameter." + }, + { + "shortName": "ClassReferencesSubclass", + "displayName": "Class references one of its subclasses", + "enabled": false, + "description": "Reports classes which contain references to one of their subclasses. Such references may be confusing and violate several rules of object-oriented design.\n\nExample:\n\n\n class Entity {\n // Warning: the class references its subclass\n void compare(SimpleEntity entity) {\n ...\n }\n }\n class SimpleEntity extends Entity {\n ...\n }\n" + }, + { + "shortName": "OptionalUsedAsFieldOrParameterType", + "displayName": "'Optional' used as field or parameter type", + "enabled": true, + "description": "Reports any cases in which `java.util.Optional`, `java.util.OptionalDouble`, `java.util.OptionalInt`, `java.util.OptionalLong`, or `com.google.common.base.Optional` are used as types for fields or parameters.\n\n`Optional` was designed to provide a limited mechanism for library method return types in which a clear way to represent \"no result\"\nwas needed.\n\nUsing a field with the `java.util.Optional` type is also problematic if the class needs to be\n`Serializable`, as `java.util.Optional` is not serializable.\n\nExample:\n\n\n class MyClass {\n Optional name; // Optional field\n\n // Optional parameter\n void setName(Optional name) {\n this.name = name;\n }\n }\n" + }, + { + "shortName": "InstanceofChain", + "displayName": "Chain of 'instanceof' checks", + "enabled": false, + "description": "Reports any chains of `if`-`else` statements all of whose conditions are `instanceof` expressions or class equality expressions (e.g. comparison with `String.class`). Such constructions usually indicate a failure in object-oriented design which dictates that such type-based dispatch should be done via polymorphic method calls rather than explicit chains of type tests.\n\nExample:\n\n\n double getArea(Shape shape) {\n // Warning: abstraction failure.\n // It would be better to declare a getArea()\n // abstract method in the shape interface\n // and implement it in every inheritor.\n if (shape instanceof Point) {\n return 0;\n }\n if (shape instanceof Circle) {\n return Math.PI *\n Math.pow(((Circle) shape).radius(), 2);\n }\n if (shape instanceof Rectangle) {\n return ((Rectangle) shape).width() *\n ((Rectangle) shape).height();\n }\n throw new IllegalArgumentException();\n }\n\n\nUse the checkbox below to ignore `instanceof` expressions on library classes." + }, + { + "shortName": "UnresolvedClassReferenceRepair", + "displayName": "Unresolved class reference", + "enabled": false, + "description": "Reports an unresolved class reference.\n\nThe quick-fix suggests trying to resolve reference." + }, + { + "shortName": "OverlyStrongTypeCast", + "displayName": "Overly strong type cast", + "enabled": false, + "description": "Reports type casts that are overly strong. For instance, casting an object to `ArrayList` when casting it to `List` would do just as well.\n\n\n**Note:** much like the *Redundant type cast*\ninspection, applying the fix for this inspection may change the semantics of your program if you are\nintentionally using an overly strong cast to cause a `ClassCastException` to be generated.\n\nExample:\n\n\n interface Super {\n void doSmth();\n }\n interface Sub extends Super { }\n\n void use(Object obj) {\n // Warning: ((Super)obj).doSmth() could be used\n ((Sub)obj).doSmth();\n }\n\n\nUse the checkbox below to ignore casts when there's a matching `instanceof` check in the code." + }, + { + "shortName": "InterfaceMethodClashesWithObject", + "displayName": "Interface method clashes with method in 'Object'", + "enabled": true, + "description": "Reports interface methods that clash with the **protected** methods `clone()` and `finalize()` from the `java.lang.Object` class.\n\nIn an interface, it is possible to declare these methods with a return type that is incompatible with the `java.lang.Object` methods.\nA class that implements such an interface will not be compilable.\nWhen the interface is functional, it remains possible to create a lambda from it, but this is not recommended.\n\nExample:\n\n\n // Warning: this interface cannot be implemented\n // by any class, only by a lambda or method reference\n interface MyInterface {\n double clone();\n }\n" + }, + { + "shortName": "StaticMethodOnlyUsedInOneClass", + "displayName": "Static member only used from one other class", + "enabled": false, + "description": "Reports `static` methods and fields that are only used from a class other than the containing class. Such members could be moved into the using class. Factory methods and members accessed from an anonymous class inside the member's class are ignored by this inspection. Convenience overloads, which call a method with the same name in the same class but have fewer parameters, are also ignored.\n\n\nUse the first checkbox to supress this inspection when the static member is only used from a test class.\n\n\nUse the second checkbox below to ignore member usages from inside anonymous, local, or non-static inner classes.\n\n\nUse the third checkbox below to not warn on members that cannot be moved without problems,\nfor example, because a method with an identical signature is already present in the target class,\nor because a field or a method used inside the method will not be accessible when this method is moved.\n\n\nUse the fourth checkbox to ignore members located in utility classes." + }, + { + "shortName": "FeatureEnvy", + "displayName": "Feature envy", + "enabled": false, + "description": "Reports the *Feature Envy* code smell. The warning is thrown when a method calls methods on another class three or more times. Calls to library classes, parent classes, contained or containing classes are not counted by this inspection. Feature envy is often an indication of the fact that this functionality is located in a wrong class.\n\nExample:\n\n\n class JobManager {\n // Warning: this method calls three methods\n // of the Job class\n // It would be better to move this chain of\n // calls to the Job class itself.\n void performJob(Job job) {\n job.beforeStart();\n job.process();\n job.afterProcessing();\n }\n }\n" + }, + { + "shortName": "InstanceofThis", + "displayName": "'instanceof' check for 'this'", + "enabled": false, + "description": "Reports usages of `instanceof` or `getClass() == SomeClass.class` in which a `this` expression is checked.\n\nSuch expressions indicate a failure of the object-oriented design, and should be replaced by\npolymorphic constructions.\n\nExample:\n\n\n class Super {\n void process() {\n if (this instanceof Sub) { // warning\n doSomething();\n } else {\n doSomethingElse();\n }\n }\n }\n \n class Sub extends Super {}\n\nTo fix the problem, use an overriding method:\n\n\n class Super {\n void process() {\n doSomethingElse();\n }\n }\n \n class Sub extends Super {\n @Override\n void process() {\n doSomething();\n }\n } \n" + }, + { + "shortName": "MagicNumber", + "displayName": "Magic number", + "enabled": false, + "description": "Reports \"magic numbers\": numeric literals that are not named by a constant declaration.\n\nUsing magic numbers can lead to unclear code, as well as errors if a magic\nnumber is changed in one location but remains unchanged not another. The numbers 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 1000, 0L, 1L, 2L,\n0.0, 1.0, 0.0F and 1.0F are not reported by this inspection.\n\nExample:\n\n\n void checkFileSize(long bytes) {\n if (bytes > 1_048_576) {\n throw new IllegalArgumentException(\"too big\");\n }\n }\n\nA quick-fix introduces a new constant:\n\n\n static final int MAX_SUPPORTED_FILE_SIZE = 1_048_576;\n\n void checkFileSize(long bytes) {\n if (bytes > MAX_SUPPORTED_FILE_SIZE) {\n throw new IllegalArgumentException(\"too big\");\n }\n }\n\nConfigure the inspection:\n\n* Use the **Ignore constants in 'hashCode()' methods** option to disable this inspection within `hashCode()` methods.\n* Use the **Ignore in annotations** option to ignore magic numbers in annotations.\n* Use the **Ignore initial capacity for StringBuilders and Collections** option to ignore magic numbers used as initial capacity when constructing `Collection`, `Map`, `StringBuilder` or `StringBuffer` objects." + } + ] + }, + { + "name": "Java 9", + "inspections": [ + { + "shortName": "Java9CollectionFactory", + "displayName": "Immutable collection creation can be replaced with collection factory call", + "enabled": false, + "description": "Reports `java.util.Collections` unmodifiable collection calls that can be converted to newer collection factory methods. These can be replaced with e.g. `List.of()` or `Set.of()` introduced in Java 9 or `List.copyOf()` introduced in Java 10.\n\nNote that in contrast to `java.util.Collections` methods, Java 9 collection factory methods:\n\n* Do not accept `null` values.\n* Require unique set elements and map keys.\n* Do not accept `null` arguments to query methods like `List.contains()` or `Map.get()` of the collections returned.\n\nWhen these cases are violated, exceptions are thrown.\nThis can change the semantics of the code after the migration.\n\nExample:\n\n\n List even = Collections.unmodifiableList(\n Arrays.asList(2, 4, 6, 8, 10, 2));\n List evenCopy = Collections.unmodifiableList(\n new ArrayList<>(list1));\n\nAfter the quick-fix is applied:\n\n\n List even = List.of(2, 4, 6, 8, 10, 2);\n List evenCopy = List.copyOf(list);\n\nThis inspection only reports if the language level of the project or module is 9 or higher.\n\n\nUse the **Do not warn when content is non-constant** option to report only in cases when the supplied arguments are compile-time constants.\nThis reduces the chances that the behavior changes,\nbecause it's not always possible to statically check whether original elements are unique and not `null`.\n\n\nUse the **Suggest 'Map.ofEntries'** option to suggest replacing unmodifiable maps with more than 10 entries with `Map.ofEntries()`.\n\nNew in 2017.2" + }, + { + "shortName": "JavaRequiresAutoModule", + "displayName": "Dependencies on automatic modules", + "enabled": false, + "description": "Reports usages of automatic modules in a `requires` directive.\n\nAn automatic\nmodule is unreliable since it can depend on the types on the class path,\nand its name and exported packages can change if it's\nconverted into an explicit module.\n\nCorresponds to `-Xlint:requires-automatic` and `-Xlint:requires-transitive-automatic` Javac options.\nThe first option increases awareness of when automatic modules are used.\nThe second warns the authors of a module that they're putting the users of that module at risk by establishing implied readability to an automatic module.\n\n**Example:**\n\n\n //module-info.java\n module org.printer {\n requires transitive drivers.corp.org; // reported in case 'drivers.corp.org' is an automatic module\n }\n\n\nUse the **Highlight only transitive dependencies** option to warn only about transitive dependencies." + }, + { + "shortName": "ReplaceNullCheck", + "displayName": "Null check can be replaced with method call", + "enabled": false, + "description": "Reports `null` checks that can be replaced with a call to a static method from `Objects` or `Stream`.\n\n**Example:**\n\n\n if (message == null) {\n application.messageStorage().save(new EmptyMessage());\n } else {\n application.messageStorage().save(message);\n }\n\nAfter the quick-fix is applied:\n\n\n application.messageStorage()\n .save(Objects.requireNonNullElseGet(message, () -> new EmptyMessage()));\n\n\nUse the **Don't warn if the replacement is longer than the original** option to ignore the cases when the replacement is longer than the\noriginal code.\n\nNew in 2017.3" + } + ] + }, + { + "name": "XSLT", + "inspections": [ + { + "shortName": "XsltUnusedDeclaration", + "displayName": "Unused variable or parameter", + "enabled": false, + "description": "Reports local variables and parameters that are never used." + }, + { + "shortName": "XsltDeclarations", + "displayName": "Incorrect declaration", + "enabled": false, + "description": "Reports duplicate declarations and illegal identifiers in XSLT variables, parameters, and named templates:" + }, + { + "shortName": "XsltVariableShadowing", + "displayName": "Shadowed variable", + "enabled": false, + "description": "Reports shadowed XSLT variables." + }, + { + "shortName": "XsltTemplateInvocation", + "displayName": "Incorrect template invocation", + "enabled": false, + "description": "Reports missing arguments, passing arguments that are not declared, and passing arguments for parameters more than once in named XSLT template invocations.\n\n\nParameters declared with a default value are optional and will not be reported as missing." + } + ] + }, + { + "name": "Workspace model", + "inspections": [ + { + "shortName": "WorkspaceImplObsolete", + "displayName": "Obsolete version of entity implementation", + "enabled": false, + "description": "Reports existence of the obsolete implementation for the entity.\n\n\nVerifies that existing implementation for entities has the same API version as described at `com.intellij.workspaceModel.storage.CodeGeneratorVersions` from dependencies.\n\n\nSuggests regenerating implementation for the whole entities in the current module." + }, + { + "shortName": "WorkspaceImplAbsent", + "displayName": "Absent entity implementation", + "enabled": false, + "description": "Reports absent of implementation for the entity.\n\n\nVerifies that each entity in the project has the implementation.\n\n\nSuggests generation implementation for the whole entities in the current module." + } + ] + }, + { + "name": "Other", + "inspections": [ + { + "shortName": "GrMethodMayBeStatic", + "displayName": "Method can be made 'static'", + "enabled": false, + "description": "Reports methods which may safely be made `static`.\n\n\nA method may be `static` if it is not `synchronized`,\nit does not reference any of its class' instance methods and instance fields,\nand it is not overridden in a subclass." + }, + { + "shortName": "TypeCustomizer", + "displayName": "Type customizer inspection", + "enabled": false, + "description": "Reports files which can be custom type checkers and are not added to compiler resources yet." + } + ] + }, + { + "name": "Cloning issues", + "inspections": [ + { + "shortName": "CloneInNonCloneableClass", + "displayName": "'clone()' method in non-Cloneable class", + "enabled": false, + "description": "Reports classes that override the `clone()` method but don't implement the `Cloneable` interface. This usually represents a programming error.\n\n\nUse the **Only warn on 'public' clone methods** option to ignore methods that aren't `public`.\n\nFor classes designed to be inherited, you may choose to override `clone()` and declare it as `protected`\nwithout implementing the `Cloneable` interface and decide whether to implement the `Cloneable` interface in subclasses." + }, + { + "shortName": "UseOfClone", + "displayName": "Use of 'clone()' or 'Cloneable'", + "enabled": false, + "description": "Reports implementations of and calls to the `clone()` method and uses of `java.lang.Cloneable`.\n\nSome coding standards prohibit the use of `clone()` and recommend using a copy constructor or\nthe `static` factory method instead.\n\nThe inspection ignores calls to `clone()` on arrays because it's a correct and compact way to copy an array." + }, + { + "shortName": "CloneableImplementsClone", + "displayName": "Cloneable class without 'clone()' method", + "enabled": false, + "description": "Reports classes implementing the `Cloneable` interface that don't override the `clone()` method.\n\nSuch classes use the default implementation of `clone()`,\nwhich isn't `public` but `protected`, and which does not copy the mutable state of the class.\n\nA quick-fix is available to generate a basic `clone()` method,\nwhich can be used as a basis for a properly functioning `clone()` method\nexpected from a `Cloneable` class.\n\n**Example:**\n\n\n public class Data implements Cloneable {\n private String[] names;\n }\n\nAfter the quick-fix is applied:\n\n\n public class Data implements Cloneable {\n private String[] names;\n\n @Override\n public Data clone() {\n try {\n Data clone = (Data) super.clone();\n // TODO: copy mutable state here, so the clone can't change the internals of the original\n return clone;\n } catch (CloneNotSupportedException e) {\n throw new AssertionError();\n }\n }\n }\n\nUse the **Ignore classes cloneable due to inheritance** option to ignore classes that are\n`Cloneable` because they inherit from the `Cloneable` class.\n\nUse the **Ignore when Cloneable is necessary to call clone() method of super class**\noption to ignore classes that require implementing `Cloneable` because they call the `clone()` method from a superclass." + }, + { + "shortName": "CloneCallsConstructors", + "displayName": "'clone()' instantiates objects with constructor", + "enabled": false, + "description": "Reports calls to object constructors inside `clone()` methods.\n\nIt is considered good practice to call `clone()` to instantiate objects inside of a `clone()` method\ninstead of creating them directly to support later subclassing.\nThis inspection will not report\n`clone()` methods declared as `final`\nor `clone()` methods on `final` classes." + }, + { + "shortName": "CloneDeclaresCloneNotSupported", + "displayName": "'clone()' does not declare 'CloneNotSupportedException'", + "enabled": false, + "description": "Reports `clone()` methods that do not declare `throws CloneNotSupportedException`.\n\nIf `throws CloneNotSupportedException` is not declared, the method's subclasses will not be able to prohibit cloning\nin the standard way. This inspection does not report `clone()` methods declared `final`\nand `clone()` methods on `final` classes.\n\nConfigure the inspection:\n\nUse the **Only warn on 'protected' clone methods** option to indicate that this inspection should only warn on `protected clone()` methods.\nThe *Effective Java* book (second and third edition) recommends omitting the `CloneNotSupportedException`\ndeclaration on `public` methods, because the methods that do not throw checked exceptions are easier to use.\n\nExample:\n\n\n public class Example implements Cloneable {\n // method doesn't declare 'throws CloneNotSupportedException'\n protected Object clone() {\n try {\n return super.clone();\n } catch (CloneNotSupportedException e) {\n return null;\n }\n }\n }\n" + }, + { + "shortName": "CloneReturnsClassType", + "displayName": "'clone()' should have return type equal to the class it contains", + "enabled": false, + "description": "Reports `clone()` methods with return types different from the class they're located in.\n\nOften a `clone()` method will have a return type of `java.lang.Object`, which makes it harder to use by its clients.\n*Effective Java* (the second and third editions) recommends making the return type of the `clone()` method the same as the\nclass type of the object it returns.\n\n**Example:**\n\n\n class Foo implements Cloneable {\n public Object clone() {\n try {\n return super.clone();\n } catch (CloneNotSupportedException e) {\n throw new AssertionError();\n }\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo implements Cloneable {\n public Foo clone() {\n try {\n return (Foo)super.clone();\n } catch (CloneNotSupportedException e) {\n throw new AssertionError();\n }\n }\n }\n" + }, + { + "shortName": "NonPublicClone", + "displayName": "'clone()' method not 'public'", + "enabled": false, + "description": "Reports `clone()` methods that are `protected` and not `public`.\n\nWhen overriding the `clone()` method from `java.lang.Object`, it is expected to make the method `public`,\nso that it is accessible from non-subclasses outside the package." + } + ] + }, + { + "name": "Style", + "inspections": [ + { + "shortName": "JavaStylePropertiesInvocation", + "displayName": "Java-style property access", + "enabled": false, + "description": "Reports properties accessed via method calls.\n\n**Example:**\n\n\n class Foo {\n int foo\n }\n\n def bar = new Foo()\n print(bar.getFoo())\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n int foo\n }\n\n def bar = new Foo()\n print(bar.foo)\n" + }, + { + "shortName": "GrUnnecessarySemicolon", + "displayName": "Unnecessary semicolon", + "enabled": false, + "description": "Reports unnecessary semicolons.\n\n**Example:**\n\n\n print 2; print 3 // semicolon is required\n print 2; // semicolon is unnecessary\n" + }, + { + "shortName": "ChangeToMethod", + "displayName": "Operator invocation can be replaced with method call", + "enabled": false, + "description": "Reports operator invocations that can be replaced with method calls.\n\n**Example:**\n\n\n a + b\n\nAfter the quick-fix is applied:\n\n\n a.plus(b)\n" + }, + { + "shortName": "ChangeToOperator", + "displayName": "Method call can be replaced with operator invocation", + "enabled": false, + "description": "Reports method calls that can be replaced with operator invocations.\n\n**Example:**\n\n\n a.plus(b)\n\nAfter the quick-fix is applied:\n\n\n a + b\n" + }, + { + "shortName": "GroovyConditional", + "displayName": "Ternary expression", + "enabled": false, + "description": "Reports ternary expressions.\n\nSome coding standards prohibit the use of the condition operator in favor of `if` statements." + }, + { + "shortName": "GrUnnecessaryAlias", + "displayName": "Unnecessary import alias", + "enabled": false, + "description": "Reports unnecessary import aliases.\n\n**Example:**\n\n\n import com.foo.Bar as Bar\n\nAfter the quick-fix is applied:\n\n\n import com.foo.Bar\n" + }, + { + "shortName": "GrUnnecessaryNonSealedModifier", + "displayName": "Unnecessary 'non-sealed' modifier", + "enabled": false, + "description": "Reports unnecessary `non-sealed` modifiers which used on methods, fields, or variables.\n\nThis modifier has effect only on classes, interfaces and traits.\n\n**Example:**\n\n\n non-sealed boolean foo() {} // modifier is unnecessary\n non-sealed Object bar // modifier is unnecessary\n\n // modifier is required and therefore not highlighted\n non-sealed class A {}\n" + }, + { + "shortName": "GrUnnecessaryDefModifier", + "displayName": "Unnecessary 'def'", + "enabled": false, + "description": "Reports unnecessary `def` modifiers when used with explicit type declaration.\n\n**Example:**\n\n\n def boolean foo() {} // modifier is unnecessary\n def Object bar // modifier is unnecessary\n\n // modifier is required and therefore not highlighted\n def (int a, String b) = []\n" + }, + { + "shortName": "GrUnnecessaryFinalModifier", + "displayName": "Unnecessary 'final'", + "enabled": false, + "description": "Reports unnecessary `final` modifiers when used with the record definition.\n\n**Example:**\n\n\n final record R(int a) {} // modifier is unnecessary\n" + }, + { + "shortName": "GrUnnecessaryPublicModifier", + "displayName": "Unnecessary 'public'", + "enabled": false, + "description": "Reports unnecessary `public` modifiers as Groovy classes and methods are `public` by default.\n\n**Example:**\n\n\n public class Foo{\n public void bar(){\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo{\n void bar(){\n }\n }\n" + }, + { + "shortName": "GrStringStyleViolation", + "displayName": "String style violation", + "enabled": false, + "description": "Reports strings with quotation that doesn't match code style.\n\n**Example:**\n\n\n def hw = \"Hello, world!\"\n\nAfter the quick-fix is applied:\n\n\n def hw = 'Hello, world!'\n\nUse the fields provided below to specify code style for different kinds of strings." + }, + { + "shortName": "GrUnnecessarySealedModifier", + "displayName": "Unnecessary 'sealed' modifier", + "enabled": false, + "description": "Reports unnecessary `sealed` modifiers which used on methods, fields, or variables.\n\nThis modifier has effect only on classes, interfaces and traits.\n\n**Example:**\n\n\n sealed boolean foo() {} // modifier is unnecessary\n sealed Object bar // modifier is unnecessary\n\n // modifier is required and therefore not highlighted\n sealed class A {}\n" + } + ] + }, + { + "name": "RegExp", + "inspections": [ + { + "shortName": "RegExpRedundantEscape", + "displayName": "Redundant character escape", + "enabled": true, + "description": "Reports redundant character escape sequences that can be replaced with unescaped characters preserving the meaning. Many escape sequences that are necessary outside of a character class are redundant inside square brackets `[]` of a character class.\n\n\nAlthough unescaped opening curly braces `{` outside of character classes are allowed in some dialects (JavaScript, Python, and so on),\nit can cause confusion and make the pattern less portable, because there are dialects that require escaping curly braces as characters.\nFor this reason the inspection does not report escaped opening curly braces.\n\n**Example:**\n\n\n \\-\\;[\\.]\n\nAfter the quick-fix is applied:\n\n\n -;[.]\n\n\nThe **Ignore escaped closing brackets '}' and '\\]'** option specifies whether to report `\\}` and `\\]` outside of a character class\nwhen they are allowed to be unescaped by the RegExp dialect.\n\nNew in 2017.3" + }, + { + "shortName": "RegExpUnexpectedAnchor", + "displayName": "Begin or end anchor in unexpected position", + "enabled": true, + "description": "Reports `^` or `\\A` anchors not at the beginning of the pattern and `$`, `\\Z` or `\\z` anchors not at the end of the pattern. In the wrong position these RegExp anchors prevent the pattern from matching anything. In case of the `^` and `$` anchors, most likely the literal character was meant and the escape forgotten.\n\n**Example:**\n\n\n (Price $10)\n\n\nNew in 2018.1" + }, + { + "shortName": "RegExpEscapedMetaCharacter", + "displayName": "Escaped meta character", + "enabled": true, + "description": "Reports escaped meta characters. Some RegExp coding styles specify that meta characters should be placed inside a character class, to make the regular expression easier to understand. This inspection does not warn about the meta character `[`, `]` and `^`, because those would need additional escaping inside a character class.\n\n**Example:**\n\n\n \\d+\\.\\d+\n\nAfter the quick-fix is applied:\n\n\n \\d+[.]\\d+\n\nNew in 2017.1" + }, + { + "shortName": "RegExpDuplicateCharacterInClass", + "displayName": "Duplicate character in character class", + "enabled": true, + "description": "Reports duplicate characters inside a RegExp character class. Duplicate characters are unnecessary and can be removed without changing the semantics of the regex.\n\n**Example:**\n\n\n [aabc]\n\nAfter the quick-fix is applied:\n\n\n [abc]\n" + }, + { + "shortName": "RegExpRedundantClassElement", + "displayName": "Redundant '\\d', '[:digit:]', or '\\D' class elements", + "enabled": false, + "description": "Reports redundant `\\d` or `[:digit:]` that are used in one class with `\\w` or `[:word:]` (`\\D` with `\\W`) and can be removed.\n\n**Example:**\n\n\n [\\w\\d]\n\nAfter the quick-fix is applied:\n\n\n [\\w]\n\nNew in 2022.2" + }, + { + "shortName": "RegExpSimplifiable", + "displayName": "Regular expression can be simplified", + "enabled": false, + "description": "Reports regular expressions that can be simplified.\n\n**Example:**\n\n\n [a] xx* [ah-hz]\n\nAfter the quick-fix is applied:\n\n\n a x+ [ahz]\n\nNew in 2022.1" + }, + { + "shortName": "RegExpEmptyAlternationBranch", + "displayName": "Empty branch in alternation", + "enabled": true, + "description": "Reports empty branches in a RegExp alternation. An empty branch will only match the empty string, and in most cases that is not what is desired. This inspection will not report a single empty branch at the start or the end of an alternation.\n\n**Example:**\n\n\n (alpha||bravo)\n\nAfter the quick-fix is applied:\n\n\n (alpha|bravo)\n\nNew in 2017.2" + }, + { + "shortName": "RegExpUnnecessaryNonCapturingGroup", + "displayName": "Unnecessary non-capturing group", + "enabled": true, + "description": "Reports unnecessary non-capturing groups, which have no influence on the match result.\n\n**Example:**\n\n\n Everybody be cool, (?:this) is a robbery!\n\nAfter the quick-fix is applied:\n\n\n Everybody be cool, this is a robbery!\n\nNew in 2021.1" + }, + { + "shortName": "RegExpSuspiciousBackref", + "displayName": "Suspicious back reference", + "enabled": true, + "description": "Reports back references that will not be resolvable at runtime. This means that the back reference can never match anything. A back reference will not be resolvable when the group is defined after the back reference, or if the group is defined in a different branch of an alternation.\n\n**Example of a group defined after its back reference:**\n\n\n \\1(abc)\n\n**Example of a group and a back reference in different branches:**\n\n\n a(b)c|(xy)\\1z\n\nNew in 2022.1" + }, + { + "shortName": "RegExpSingleCharAlternation", + "displayName": "Single character alternation", + "enabled": true, + "description": "Reports single char alternation in a RegExp. It is simpler to use a character class instead. This may also provide better matching performance.\n\n**Example:**\n\n\n a|b|c|d\n\nAfter the quick-fix is applied:\n\n\n [abcd]\n\n\nNew in 2017.1" + }, + { + "shortName": "RegExpRedundantNestedCharacterClass", + "displayName": "Redundant nested character class", + "enabled": true, + "description": "Reports unnecessary nested character classes.\n\n**Example:**\n\n\n [a-c[x-z]]\n\nAfter the quick-fix is applied:\n\n\n [a-cx-z]\n\nNew in 2020.2" + }, + { + "shortName": "RegExpOctalEscape", + "displayName": "Octal escape", + "enabled": true, + "description": "Reports octal escapes, which are easily confused with back references. Use hexadecimal escapes to avoid confusion.\n\n**Example:**\n\n\n \\07\n\nAfter the quick-fix is applied:\n\n\n \\x07\n\nNew in 2017.1" + }, + { + "shortName": "RegExpAnonymousGroup", + "displayName": "Anonymous capturing group or numeric back reference", + "enabled": false, + "description": "Reports anonymous capturing groups and numeric back references in a RegExp. These are only reported when the RegExp dialect supports named group and named group references. Named groups and named back references improve code readability and are recommended to use instead. When a capture is not needed, matching can be more performant and use less memory by using a non-capturing group, i.e. `(?:xxx)` instead of `(xxx)`.\n\n**Example:**\n\n\n (\\d\\d\\d\\d)\\1\n\nA better regex pattern could look like this:\n\n\n (?\\d\\d\\d\\d)\\k\n\nNew in 2017.2" + }, + { + "shortName": "RegExpDuplicateAlternationBranch", + "displayName": "Duplicate branch in alternation", + "enabled": true, + "description": "Reports duplicate branches in a RegExp alternation. Duplicate branches slow down matching and obscure the intent of the expression.\n\n**Example:**\n\n\n (alpha|bravo|charlie|alpha)\n\nAfter the quick-fix is applied:\n\n\n (alpha|bravo|charlie)\n\nNew in 2017.1" + }, + { + "shortName": "RegExpRepeatedSpace", + "displayName": "Consecutive spaces", + "enabled": true, + "description": "Reports multiple consecutive spaces in a RegExp. Because spaces are not visible by default, it can be hard to see how many spaces are required. The RegExp can be made more clear by replacing the consecutive spaces with a single space and a counted quantifier.\n\n**Example:**\n\n\n ( )\n\nAfter the quick-fix is applied:\n\n\n ( {5})\n\n\nNew in 2017.1" + } + ] + }, + { + "name": "Code", + "inspections": [ + { + "shortName": "UseDPIAwareBorders", + "displayName": "Use DPI-aware borders", + "enabled": false, + "description": "Reports usages of `javax.swing.border.EmptyBorder` and `JBUI.Borders.emptyXyz()` that can be simplified.\n\n\nThe `EmptyBorder` instances are not DPI-aware and can result in UI layout problems.\n\n\nQuick fix performs replacement with `JBUI.Borders.empty()` or simplifies the expression.\n\nExample:\n\n```\n// bad:\nBorder border1 = new EmptyBorder(1, 2, 3, 4);\nBorder border2 = new EmptyBorder(1, 2, 1, 2);\nBorder border3 = new EmptyBorder(1, 0, 0, 0);\n\n// good:\nBorder border1 = JBUI.Borders.empty(1, 2, 3, 4);\nBorder border2 = JBUI.Borders.empty(1, 2);\nBorder border3 = JBUI.Borders.emptyTop(1);\n```" + }, + { + "shortName": "NonDefaultConstructor", + "displayName": "Non-default constructors for service and extension class", + "enabled": false, + "description": "Reports extension/service class having a non-default (empty) constructor.\n\n\nOther dependencies should be acquired when needed in corresponding methods only.\nConstructor having `Project` for extension/service on the corresponding level is allowed." + }, + { + "shortName": "PresentationAnnotation", + "displayName": "Invalid icon path in @Presentation", + "enabled": false, + "description": "Reports invalid and deprecated value for `icon` attribute in `com.intellij.ide.presentation.Presentation` annotation." + }, + { + "shortName": "UseVirtualFileEquals", + "displayName": "Use 'VirtualFile#equals(Object)'", + "enabled": false, + "description": "Reports comparing `VirtualFile` instances using `==`.\n\n\nReplace with `equals()` call." + }, + { + "shortName": "UnspecifiedActionsPlace", + "displayName": "Unspecified action place", + "enabled": false, + "description": "Reports passing unspecified `place` parameter for `ActionManager.createActionToolbar()` and `ActionManager.createActionPopupMenu()`.\n\n\nSpecifying proper `place` is required to distinguish Action's usage in `update()/actionPerformed()` via `AnActionEvent.getPlace()`.\n\n\nExamples:\n\n```\n// bad:\nactionManager.createActionToolbar(\"\", group, false);\nactionManager.createActionToolbar(\"unknown\", group, false);\nactionManager.createActionPopupMenu(ActionPlaces.UNKNOWN, group);\n\n// good:\nactionManager.createActionToolbar(\"MyPlace\", group, false);\nactionManager.createActionPopupMenu(ActionPlaces.EDITOR_TOOLBAR, group);\n```\n\n
    " + }, + { + "shortName": "ActionIsNotPreviewFriendly", + "displayName": "Field blocks intention preview", + "enabled": false, + "description": "Reports fields in `LocalQuickFix` and `IntentionAction` implementations that prevent intention preview action from functioning properly. Additionally, excessive `@SafeFieldForPreview` annotations are reported on fields whose types are known to be safe.\n\n\nIntention preview is an IntelliJ platform feature that displays how quick-fix or intention action\nwill change the current file when applied. To implement this in quick fixes,\n`LocalQuickFix.generatePreview()` is called with a custom `ProblemDescriptor`\nthat points to the non-physical copy of current file. In intention actions, `IntentionAction.generatePreview()`\nis called with the non-physical copy of current file and imaginary editor.\nNormally, these methods just delegate to `LocalQuickFix.applyFix()` or `IntentionAction.invoke()`.\nHowever, some quick-fixes may refer directly or indirectly to physical elements and use them for writing. As a result,\npreview won't work, as the quick-fix will attempt to update physical PSI instead of non-physical one.\nTo avoid this, default implementation of `generatePreview()` delegates only if all the\ninstance fields of a quick fix or intention action class have safe types: primitives, Strings, etc.\n\n\nYou may fix this problem in a number of ways:\n\n1. If the field does not actually store any PSI reference, or that PSI is used only for reading, you may annotate the field with `@SafeFieldForPreview`. You can also use `@SafeTypeForPreview` if the field type can never store any writable PSI reference.\n2. You may override `getFileModifierForPreview()` method and create a copy of the quick-fix rebinding it to the non-physical file copy which is supplied as a parameter. Use `PsiTreeUtil.findSameElementInCopy()` to find the corresponding PSI elements inside the supplied non-physical copy.\n3. Instead of storing PSI references in fields, try to extract all the necessary information from `ProblemDescriptor.getPsiElement()` in quick fix or from the supplied file/editor in intention action. You may also inherit the abstract `LocalQuickFixAndIntentionActionOnPsiElement` class and implement its `invoke()` and `isAvailable()` methods, which have `startElement` and `endElement` parameters. These parameters are automatically mapped to a non-physical file copy for you.\n4. You may override `generatePreview()` method and provide completely custom preview behavior. For example, it's possible to display a custom HTML document instead of actual preview if your action does something besides modifying a current file.\n\n\nThis inspection does not report if a custom implementation of `getFileModifierForPreview()`\nor `generatePreview()` exists. However, this doesn't mean that the implementation is correct and preview works.\nPlease test. Also note that preview result is calculated in background thread, so you cannot start a write action\nduring the preview or do any operation that requires a write action. Finally, no preview is generated automatically\nif `startInWriteAction()` returns `false`. In this case, having custom `generatePreview()`\nimplementation is desired.\n\nNew in 2022.1" + }, + { + "shortName": "InspectionUsingGrayColors", + "displayName": "Using new Color(a,a,a)", + "enabled": false, + "description": "Reports usages of `java.awt.Color` to create gray colors.\n\n\nThe **Convert to 'Gray'** quick fix replaces it using `com.intellij.ui.Gray` constants instead.\n\nExamples:\n\n```\n// bad:\nColor gray = new Color(37, 37, 37);\n\n// good:\nColor gray = Gray._37;\n```" + }, + { + "shortName": "ComponentRegistrationProblems", + "displayName": "Component type mismatch", + "enabled": false, + "description": "Reports incorrect registration of plugin components (Actions and Components).\n\n\nThe following problems are reported:\n\n* Action/Component implementation class is abstract.\n* Class is registered in plugin.xml as action but does not extend `AnAction` class.\n* Action class does not have a public no-argument constructor." + }, + { + "shortName": "MissingRecentApi", + "displayName": "Usage of IntelliJ API not available in older IDEs", + "enabled": false, + "description": "Reports usages of IntelliJ Platform API introduced in a version *newer* than the one specified in `` `@since-build` in `plugin.xml`.\n\n\nUsing such API may lead to incompatibilities of the plugin with older IDE versions.\n\n\nTo avoid possible issues when running the plugin in older IDE versions, increase `since-build` accordingly,\nor remove usages of this API.\n\n\nSee [Build Number Ranges](https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html) in IntelliJ Platform Plugin SDK docs for more details.\n\nConfigure the inspection:\nIf `` `@since/until-build` attributes are not specified in `plugin.xml`, set **Since** /**Until** explicitly." + }, + { + "shortName": "MissingAccessibleContext", + "displayName": "Accessible context is missing", + "enabled": false, + "description": "Reports Swing components that do not provide accessibility context.\n\n\nThis information is used by screen readers. Failing to provide it makes the component inaccessible for\nvisually impaired users.\n\n**Example:**\n\n ListCellRenderer renderer = (list, val, index, sel, cell) -> {\n JPanel panel = new JPanel();\n return panel;\n };\n\n\nTo fix the problem, you should either call `setAccessibleName()` on the returned `JPanel`\nor override its `getAccessibleContext()` method.\n\n\nThe returned text should reflect the purpose\nof the component. For example, in the case of `ListCellRenderer`, this would be the text of the menu\nitem." + }, + { + "shortName": "UseJBColor", + "displayName": "Use Darcula aware JBColor", + "enabled": false, + "description": "Reports usages of `java.awt.Color`.\n\n\nThese are not aware of \"dark\" themes (e.g., bundled \"Darcula\") and might result in bad looking UI.\n\n\nQuick-fix replaces usages with `JBColor`, which defines \"dark\" color variant.\n\nExamples:\n\n```\n// bad:\nColor darkGreen = new Color(12, 58, 27);\nColor blue = Color.BLUE;\n\n// good:\nColor darkGreen = new JBColor(12, 58, 27);\nColor blue = JBColor.BLUE;\nColor green = new JBColor(new Color(12, 58, 27), new Color(27, 112, 39));\n```" + }, + { + "shortName": "UElementAsPsi", + "displayName": "UElement as PsiElement usage", + "enabled": false, + "description": "Reports usage of UAST `UElement` as `PsiElement`.\n\n\nThe `PsiElement` obtained this way is ambiguous.\n\n\nTo obtain \"physical\" `PsiElement` use `UElementKt.getSourcePsiElement()`,\nfor `PsiElement` that \"emulates\" behaviour of Java-elements (`PsiClass`, `PsiMethod`, etc.)\nuse `UElementKt.getAsJavaPsiElement()`.\n\n\nSee [UAST - Unified Abstract Syntax Tree](https://plugins.jetbrains.com/docs/intellij/uast.html) in SDK Docs." + }, + { + "shortName": "MissingActionUpdateThread", + "displayName": "ActionUpdateThread is missing", + "enabled": false, + "description": "Reports actions, action groups and other `ActionUpdateThreadAware``\nthat implicitly state the deprecated and costly ``ActionUpdateThread.OLD_EDT`` mode.\n\n`\n\n\nWhen an action or an action group defines its own `update` method, IntelliJ Platform tries to mimic\nthe old synchronous way of calling `update` and `getChildren` methods in the UI thread and\nsupply it with all the data in `AnActionEvent.dataContext`.\nTo do that, it caches all the possible data on a background thread beforehand even if it is not needed.\n`\n`\n\n\nProvide one of the two new modes `ActionUpdateThread.EDT` or `ActionUpdateThread.BGT`\nby overriding the `getActionUpdateThread` method.\n`\n`\n\n\nSee `ActionUpdateThread` documentation for more information.\n`\n``\n`" + }, + { + "shortName": "UsePrimitiveTypes", + "displayName": "Use 'PsiType#equals(Object)' with primitive types", + "enabled": false, + "description": "Reports comparing `PsiPrimitiveType` instances using `==`.\n\n\nPrimitive types should be compared with `equals` as Java 8 type annotations are also applicable for them.\n\n\nReplace with `equals()` call." + }, + { + "shortName": "QuickFixGetFamilyNameViolation", + "displayName": "QuickFix's getFamilyName() implementation must not depend on a specific context", + "enabled": false, + "description": "Reports `QuickFix#getFamilyName()` using contextual information.\n\n\nThis method must not use any non-static information." + }, + { + "shortName": "UseCouple", + "displayName": "Use Couple instead of Pair", + "enabled": false, + "description": "Reports usages of `Pair` replaceable by `Couple`.\n\n\nQuick-fix performs replacement." + }, + { + "shortName": "UsePluginIdEquals", + "displayName": "Use 'PluginId#equals(Object)'", + "enabled": false, + "description": "Reports comparing `PluginId` instances using `==`.\n\n\nReplace with `equals()` call." + }, + { + "shortName": "StatefulEp", + "displayName": "Stateful extension", + "enabled": false, + "description": "Reports extensions and quick-fixes holding potentially leaking state.\n\n\nKeeping references to `PsiElement`, `PsiReference`, or `Project` instances can result in memory leaks.\n\n\nIdeally, these should be stateless.\nFor quick-fix, see `LocalQuickFixOnPsiElement` as a convenient base class." + }, + { + "shortName": "IncorrectParentDisposable", + "displayName": "Incorrect parentDisposable parameter", + "enabled": false, + "description": "Reports using `Application` or `Project` as a parent `Disposable` in plugin code.\n\n\nSuch usages will lead to plugins not being unloaded correctly.\nPlease see [Choosing a\nDisposable Parent](https://plugins.jetbrains.com/docs/intellij/disposers.html?from=IncorrectParentDisposable#choosing-a-disposable-parent) in SDK Docs." + }, + { + "shortName": "SerializableCtor", + "displayName": "Non-default constructor in serializable class", + "enabled": false, + "description": "Reports non-default constructor in serializable classes.\n\n\nThe platform's `IonObjectSerializer` requires specifying `@PropertyMapping` explicitly.\n\n\nQuick-fix generates necessary `@PropertyMapping` annotation for the constructor." + }, + { + "shortName": "PsiElementConcatenation", + "displayName": "Using PsiElement string representation to generate new expression is incorrect", + "enabled": false, + "description": "Reports direct usage of `PsiElement` and `PsiType` in strings.\n\n\nWhen building strings for `PsiJavaParserFacade.createExpressionFromText()` (or similar methods), `PsiElement.getText()` should be used\ninstead." + }, + { + "shortName": "ComponentNotRegistered", + "displayName": "Component/Action not registered", + "enabled": false, + "description": "Reports plugin components and actions that are not registered in a `plugin.xml` descriptor.\n\n\nThis eases developing new components when using the \"Create Class\" intention and helps keep track of potentially obsolete components.\n\n\nProvided quick-fix to register the component adds necessary registration in `plugin.xml` descriptor.\n\nConfigure the inspection:\n\n* Use the **Check Actions** option to turn off the check for Actions, as they may be intentionally created and registered dynamically.\n* Use the **Ignore non-public classes** option to ignore abstract and non-public classes." + }, + { + "shortName": "UnsafeReturnStatementVisitor", + "displayName": "Unsafe return statements visitor", + "enabled": false, + "description": "Reports unsafe use of `JavaRecursiveElementVisitor.visitReturnStatement()`.\n\n\nProcessing `PsiReturnStatement`s\neven if they belong to another `PsiClass` or `PsiLambdaExpression` is a bug in most cases, and a visitor most\nprobably should implement `visitClass()` and `visitLambdaExpression()` methods." + }, + { + "shortName": "UnresolvedPluginConfigReference", + "displayName": "Unresolved plugin configuration reference", + "enabled": false, + "description": "Reports unresolved references to plugin configuration elements.\n\n#### Extensions\n\n\nReferencing extension with an unknown `id` might result in errors at runtime.\n\n\nThe following extension points are supported:\n\n* `com.intellij.advancedSetting` in resource bundle `advanced.setting.*` key\n* `com.intellij.experimentalFeature` in `Experiments.isFeatureEnabled()/setFeatureEnabled()`\n* `com.intellij.notificationGroup` in `Notification` constructor and `NotificationGroupManager.getNotificationGroup()`\n* `com.intellij.registryKey` in `Registry` methods `key` parameter\n* `com.intellij.toolWindow` in resource bundle `toolwindow.stripe.*` key\n\n#### Extension Point\n\n\nExtension point name referencing its corresponding `` declaration in `plugin.xml`.\n\n* `com.intellij.openapi.extensions.ExtensionPointName` constructor and `create()`\n* `com.intellij.openapi.extensions.ProjectExtensionPointName` constructor\n* `com.intellij.openapi.util.KeyedExtensionCollector` and inheritors constructor\n\n
    " + }, + { + "shortName": "UseDPIAwareInsets", + "displayName": "Use DPI-aware insets", + "enabled": false, + "description": "Reports usages of `java.awt.Insets` and `JBUI.insetsXyz()` that can be simplified.\n\n\nThe `Insets` instances are not DPI-aware and can result in UI layout problems.\n\n\nQuick fix performs replacement with `JBUI.insets()` or simplifies the expression.\n\nExample:\n\n```\n// bad:\nInsets insets1 = new Insets(1, 2, 3, 4);\nInsets insets2 = new Insets(1, 2, 1, 2);\nInsets insets3 = new Insets(1, 0, 0, 0);\n\n// good:\nInsets insets1 = JBUI.insets(1, 2, 3, 4);\nInsets insets2 = JBUI.insets(1, 2);\nInsets insets3 = JBUI.insetsTop(1);\n```" + }, + { + "shortName": "UndesirableClassUsage", + "displayName": "Undesirable class usage", + "enabled": false, + "description": "Reports usages of undesirable classes (mostly Swing components).\n\n\nQuick-fix offers replacement with recommended IntelliJ Platform replacement." + }, + { + "shortName": "LeakableMapKey", + "displayName": "Map key may leak", + "enabled": false, + "description": "Reports using `Language` or `FileType` as a map key in plugin code.\n\n\nSuch usages might lead to inability to unload the plugin properly.\n\n\nPlease consider using `String` as keys instead.\n\n\nSee [Dynamic\nPlugins](https://plugins.jetbrains.com/docs/intellij/dynamic-plugins.html) in SDK Docs for more information." + }, + { + "shortName": "UnsafeVfsRecursion", + "displayName": "Unsafe VFS recursion", + "enabled": false, + "description": "Reports usage of `VirtualFile.getChildren()` inside recursive methods.\n\n\nThis may cause endless loops when iterating over cyclic symlinks.\nUse `VfsUtilCore.visitChildrenRecursively()` instead.\n\n\n void processDirectory(VirtualFile dir) {\n for (VirtualFile file : dir.getChildren()) { // bad\n if (!file.isDirectory()) {\n processFile(file);\n } else {\n processDirectory(file); // recursive call\n }\n }\n }\n\n\n void processDirectory(VirtualFile dir) {\n VfsUtilCore.visitChildrenRecursively(dir, new VirtualFileVisitor() { // good\n @Override\n public boolean visitFile(@NotNull VirtualFile file) {\n if (!file.isDirectory()) {\n processFile(file);\n }\n return true;\n }\n });\n }\n" + }, + { + "shortName": "FileEqualsUsage", + "displayName": "File.equals() usage", + "enabled": false, + "description": "Reports usages of `java.io.File.equals()/hashCode()/compareTo()` methods.\n\n\nThese do not honor case-insensitivity on macOS.\n\n\nUse `com.intellij.openapi.util.io.FileUtil.filesEquals()/fileHashCode()/compareFiles()` methods instead." + } + ] + }, + { + "name": "UI form", + "inspections": [ + { + "shortName": "NoLabelFor", + "displayName": "No label for component", + "enabled": false, + "description": "Reports components that do not have any static text and do not have any label marked with `setLabelFor` for this component.\n\nComponents that do not have static text include edit fields and combo boxes.\nSuch components cannot be activated with a keyboard shortcut. The quick-fix for this inspection\nallows you to automatically associate an adjacent label with the problematic component." + }, + { + "shortName": "InvalidPropertyKeyForm", + "displayName": "Invalid property key in a UI form", + "enabled": false, + "description": "Reports unresolved references to .properties files." + }, + { + "shortName": "MissingMnemonic", + "displayName": "Missing mnemonics", + "enabled": false, + "description": "Reports focusable components with the `text` property or labels with the assigned `labelFor` property that do not have a mnemonic character. The quick-fix assigns a unique mnemonic to such a component." + }, + { + "shortName": "OneButtonGroup", + "displayName": "Button group with one button", + "enabled": false, + "description": "Reports `ButtonGroup` instances that contain only one `JRadioButton`." + }, + { + "shortName": "NoScrollPane", + "displayName": "Scrollable component not in JScrollPane", + "enabled": false, + "description": "Reports `Scrollable` components, except for `JTextField`, that are not placed in `JScrollPane`. The quick-fix surrounds the problematic component with a scroll pane." + }, + { + "shortName": "FormSpellChecking", + "displayName": "Typo in a UI form", + "enabled": false, + "description": "Reports typos and misspelling in your UI forms (for example, in a `JLabel` text or `JPanel` title) and fixes them\nwith one click." + }, + { + "shortName": "DuplicateMnemonic", + "displayName": "Duplicate mnemonics", + "enabled": false, + "description": "Reports components that have duplicated mnemonic characters.\n\nThe quick-fix assigns a unique mnemonic character to each of the components." + }, + { + "shortName": "I18nForm", + "displayName": "Hardcoded string literal in a UI form", + "enabled": false, + "description": "Reports any instances of hardcoded strings in your UI forms.\n\nHardcoded string literals are usually errors in\nan internationalized environment.\nThis inspection does not report empty strings and strings consisting of only whitespace.\n\nThe quick-fix transforms a string literal\ninto a reference to a property in a resource bundle." + }, + { + "shortName": "NoButtonGroup", + "displayName": "Radio button not in a group", + "enabled": false, + "description": "Reports `JRadioButton` components that are not placed in `ButtonGroup`. A quick-fix is available to group radio buttons placed in adjacent grid cells." + }, + { + "shortName": "BoundFieldAssignment", + "displayName": "Assignment to UI-bound field", + "enabled": false, + "description": "Reports assignments to fields which are bound to components in UI Designer forms.\n\nSuch assignments will cause the component setup code generated by UI Designer\nfor such fields to be ignored." + } + ] + }, + { + "name": "Test frameworks", + "inspections": [ + { + "shortName": "UnconstructableTestCase", + "displayName": "JUnit unconstructable test case", + "enabled": false, + "description": "Reports JUnit test classes that can't be constructed by a standard JUnit test runner.\n\n\nJUnit 4 test classes need to be `public` and have a `public` no-arg constructor or no constructor at all\n(implicit default constructor) and no other `public` constructors.\nJUnit 3 test classes need to be `public` and need either a `public` no-arg constructor\nor a `public` constructor with a single parameter of `String` type, which calls the matching super constructor.\nOtherwise the test classes cannot be run by standard JUnit test runners.\n\n**Example:**\n\n\n public class MyTest {\n\n private MyTest() {} // no-arg constructor is private\n\n @Test\n public void testSomething() {\n assertEquals(1, 1);\n }\n }\n" + }, + { + "shortName": "TestMethodWithoutAssertion", + "displayName": "Test method without assertions", + "enabled": false, + "description": "Reports test methods that do not contain any assertions. Such methods may indicate either incomplete or weak test cases.\n\n**Example:**\n\n\n public class ExtensiveTest {\n\n @Test\n public void testAlive() {\n System.out.println(\"nothing\");\n }\n }\n\n\nConfigure the inspection:\n\n* Use the table to specify the combinations of fully qualified class name and method name regular expression that should qualify as assertions. Class names also match subclasses.\n* Use the **'assert' keyword is considered an assertion** option to specify if the Java `assert` statements using the `assert` keyword should be considered an assertion.\n* Use the **Ignore test methods which declare exceptions** option to ignore the test methods that declare exceptions. This can be useful when you have tests that will throw an exception on failure and thus don't need any assertions." + }, + { + "shortName": "TestFailedLine", + "displayName": "Failed line in test", + "enabled": true, + "description": "Reports failed method calls or assertions in tests. It helps detect the failed line in code faster and start debugging it immediately.\n\n**Example:**\n\n\n @Test\n fun foo() {\n assertEquals(1, 0) // highlighted\n }\n" + }, + { + "shortName": "AssertEqualsMayBeAssertSame", + "displayName": "'assertEquals()' may be 'assertSame()'", + "enabled": false, + "description": "Reports JUnit `assertEquals()` calls that can be replaced with an equivalent `assertSame()` call. This is possible when the arguments are instances of a `final` class that does not override the `Object.equals()` method and makes it explicit that the object identity is compared.\n\nSuggests replacing `assertEquals()` with `assertSame()`.\n\n**Example:**\n\n\n @Test\n public void testObjectType() {\n Object o = getObject();\n Assert.assertEquals(String.class, o.getClass());\n }\n\nAfter the quick fix is applied:\n\n\n @Test\n public void testSort() {\n Object o = getObject();\n Assert.assertSame(String.class, o.getClass());\n }\n" + }, + { + "shortName": "TestCaseWithConstructor", + "displayName": "TestCase with non-trivial constructors", + "enabled": false, + "description": "Reports test cases with initialization logic in their constructors. If a constructor fails, the `@After` annotated or `tearDown()` method won't be called. This can leave the test environment partially initialized, which can adversely affect other tests. Instead, initialization of test cases should be done in a `setUp()` or `@Before` annotated method.\n\nBad example:\n\n\n public class ImportantTest {\n private File file;\n\n public ImportantTest() throws IOException {\n file = File.createTempFile(\"xyz\", \".tmp\");\n }\n\n // ... tests go here\n }\n" + }, + { + "shortName": "SuperTearDownInFinally", + "displayName": "JUnit 3 'super.tearDown()' is not called from 'finally' block", + "enabled": false, + "description": "Reports calls of the JUnit 3's `super.tearDown()` method that are not performed inside a `finally` block. If an exception is thrown before `super.tearDown()` is called it could lead to inconsistencies and leaks.\n\n**Example:**\n\n\n public class AnotherTest extends CompanyTestCase {\n private Path path;\n\n @Override\n protected void setUp() throws Exception {\n super.setUp();\n path = Files.createTempFile(\"File\", \".tmp\");\n }\n\n @Override\n protected void tearDown() throws Exception {\n Files.delete(path);\n super.tearDown();\n }\n }\n\nImproved code:\n\n\n public class AnotherTest extends CompanyTestCase {\n private Path path;\n\n @Override\n protected void setUp() throws Exception {\n super.setUp();\n path = Files.createTempFile(\"File\", \".tmp\");\n }\n\n @Override\n protected void tearDown() throws Exception {\n try {\n Files.delete(path);\n } finally {\n super.tearDown();\n }\n }\n }\n" + }, + { + "shortName": "JUnitMalformedDeclaration", + "displayName": "JUnit malformed declaration", + "enabled": true, + "description": "Reports JUnit test member declarations that are malformed and are likely not recognized by the JUnit test framework. The following problems are reported by this inspection:\n\n* Fields annotated by `@RegisterExtension` that have the wrong type or are not declared as static when it is required\n* Static or private inner classes annotated with `@Nested`\n* Parameterized tests that are defined without a source\n* Parameterized tests with a `@MethodSource` that has an unknown, non-static or no-arg target\n* Mismatched types between parameterized test method parameter and the specified `@ValueSource` or `@EnumSource` values\n* Tests that are annotated by more than one of `@Test`, `@ParameterizedTest` or `@RepeatedTest`\n* `setup()` or `tearDown()` methods that are not public, whose return type is not void or take arguments\n* `suite()` methods that are private, take arguments or are not static\n* Methods annotated by `@BeforeClass`, `@AfterClass`, `@BeforeAll` or `@AfterAll` that are not public, not static, whose return type is not void or do not have a valid parameter list\n* Methods annotated by `@Before`, `@After`, `@BeforeEach` or `@AfterEach` that are not public, whose return type is not void or take arguments\n* Injected `RepetitionInfo` in `@BeforeAll` or `@AfterAll` methods\n* Injected `RepetitionInfo` in `@BeforeEach` or `@AfterEach` methods that are used by `@Test` annotated tests\n* Fields and methods annotated by `@DataPoint` or `@DataPoints` that are not public or not static\n* Fields and methods annotated by `@Rule` that are not public or not a subtype of `TestRule` or `MethodRule`\n* Fields and methods annotated by `@ClassRule` that are not public, not static or not a subtype of `TestRule`\n* Methods inside a subclass of `TestCase` with a `test` prefix that are not public, whose return type is not void, take arguments or are static\n* Methods annotated by `@Test` that are not public, whose return type is not void, take arguments or are static\n\nNote that in Kotlin, suspending functions do have arguments and a non-void return type. Therefore, they also will not be executed by the JUnit test runner. This inspection will also report about this problem.\n\n**Malformed `@Before` method example (Java):**\n\n @Before private int foo(int arg) { ... } \n\nAfter the quick-fix is applied:\n\n @Before public void foo() { ... } \n\n**Missing method source example (Kotlin):**\n\n\n class Example {\n @MethodSource(\"parameters\")\n @ParameterizedTest\n fun foo(param: String) { ... }\n }\n\nAfter the quick-fix is applied:\n\n\n class Example {\n @MethodSource(\"parameters\")\n @ParameterizedTest\n fun foo(param: String) { ... }\n\n companion object {\n @JvmStatic\n fun parameters(): Stream {\n TODO(\"Not yet implemented\")\n }\n }\n }\n\nUse the inspection options to specify annotations. Any parameter annotated with one of these annotations will not be reported." + }, + { + "shortName": "AssertEqualsCalledOnArray", + "displayName": "'assertEquals()' called on array", + "enabled": false, + "description": "Reports JUnit `assertEquals()` calls with arguments of an array type. Such methods compare the arrays' identities instead of the arrays' contents. Array contents should be checked with the `assertArrayEquals()` method.\n\n**Example:**\n\n\n @Test\n public void testSort() {\n int[] actual = {248, 496, 0, 56};\n Arrays.sort(actual);\n Assert.assertEquals(new int[] {0, 56, 248, 496}, actual);\n }\n\nAfter the quick-fix is applied:\n\n\n @Test\n public void testSort() {\n int[] actual = {248, 496, 0, 56};\n Arrays.sort(actual);\n Assert.assertArrayEquals(new int[] {0, 56, 248, 496}, actual);\n }\n" + }, + { + "shortName": "TestInProductSource", + "displayName": "Test in product source", + "enabled": false, + "description": "Reports test classes and test methods that are located in production source trees. This most likely a mistake and can result in test code being shipped into production." + }, + { + "shortName": "JUnit5AssertionsConverter", + "displayName": "JUnit 5 obsolete assertions", + "enabled": false, + "description": "Reports any calls to methods from the `junit.framework.Assert`, `org.junit.Assert`, or `org.junit.Assume`\nclasses inside JUnit 5 tests.\n\nAlthough the tests work properly, migration to `org.junit.jupiter.api.Assertions`/`org.junit.jupiter.api.Assumptions`\nwill help you avoid dependencies on old JUnit version.\n\n**Example:**\n\n\n import org.junit.Assert;\n import org.junit.jupiter.api.Test;\n\n public class MyTest {\n @Test\n public void simpleTest() {\n Assert.assertEquals(4, 2 + 2);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n import org.junit.jupiter.api.Assertions;\n import org.junit.jupiter.api.Test;\n\n public class MyTest {\n @Test\n public void simpleTest() {\n Assertions.assertEquals(4, 2 + 2);\n }\n }\n" + }, + { + "shortName": "TestOnlyProblems", + "displayName": "Test-only usage in production code", + "enabled": false, + "description": "Reports `@TestOnly`- and `@VisibleForTesting`-annotated methods and classes that are used in production code. Also reports usage of applying `@TestOnly` `@VisibleForTesting` to the same element.\n\nThe problems are not reported if such method or class is referenced from:\n\n* Code under the **Test Sources** folder\n* A test class (JUnit/TestNG)\n* Another `@TestOnly`-annotated method\n\n**Example (in production code):**\n\n\n @TestOnly\n fun foo() { ... }\n\n fun main () {\n foo()\n }\n" + }, + { + "shortName": "JUnit5Converter", + "displayName": "JUnit 4 test can be JUnit 5", + "enabled": false, + "description": "Reports JUnit 4 tests that can be automatically migrated to JUnit 5. While default runners are automatically convertible, custom runners, method- and field- rules are not and require manual changes.\n\n**Example:**\n\n\n import org.junit.Assert;\n import org.junit.Test;\n\n public class RelevantTest {\n @Test\n public void testIt() {\n Assert.assertEquals(\"expected\", \"actual\");\n }\n }\n\nAfter the quick-fix is applied:\n\n\n import org.junit.jupiter.api.Assertions;\n import org.junit.jupiter.api.Test;\n\n public class RelevantTest {\n @Test\n public void testIt() {\n Assertions.assertEquals(\"expected\", \"actual\");\n }\n }\n\nThis inspection requires that the JUnit 5 library is available in the classpath, and JDK 1.8 or later is configured for the project." + }, + { + "shortName": "IgnoredJUnitTest", + "displayName": "JUnit test annotated with '@Ignore'/'@Disabled'", + "enabled": false, + "description": "Reports usages of JUnit 4's `@Ignore` or JUnit 5's `@Disabled` annotations. It is considered a code smell to have tests annotated with these annotations for a long time, especially when no reason is specified.\n\n**Example:**\n\n\n @Ignore\n public class UrgentTest {\n\n @Test\n public void testIt() {\n Assert.assertEquals(\"expected\", \"actual\");\n }\n }\n\n\nConfigure the inspection:\n\n* Use the **Only report annotations without reason** option to only report the cases when no reason is specified as the annotation's `value` attribute." + }, + { + "shortName": "AssertBetweenInconvertibleTypes", + "displayName": "'assertEquals()' between objects of inconvertible types", + "enabled": false, + "description": "Reports calls to assertion methods where the \"expected\" and \"actual\" arguments are of incompatible types.\n\nSuch calls often indicate that there is a bug in the test.\nThis inspection checks the relevant JUnit, TestNG, and AssertJ methods.\n\n**Examples:**\n\n\n assertEquals(\"1\", 1);\n assertNotSame(new int[0], 0);\n\n // weak warning, may just test the equals() contract\n assertThat(foo).as(\"user type\").isNotEqualTo(bar);\n" + }, + { + "shortName": "MigrateAssertToMatcherAssert", + "displayName": "JUnit assertion can be 'assertThat()' call", + "enabled": false, + "description": "Reports calls to `Assert.assertEquals()`, `Assert.assertTrue()`, etc. methods which can be migrated to Hamcrest declarative style `Assert.assertThat()` calls.\n\nFor example:\n\n\n public class SubstantialTest {\n @Test\n public void testContents(Collection c, String s) {\n Assert.assertTrue(c.contains(s));\n Assert.assertEquals(c, s);\n Assert.assertNotNull(c);\n Assert.assertNull(c);\n Assert.assertFalse(c.contains(s));\n }\n }\n\nA quick-fix is provided to perform the migration:\n\n\n public class SubstantialTest {\n @Test\n public void testContents(Collection c, String s) {\n assertThat(c, hasItem(o));\n assertThat(o, is(c));\n assertThat(c, notNullValue());\n assertThat(c, nullValue());\n assertThat(c, not(hasItem(o)));\n }\n }\n\nThis inspection requires that the Hamcrest library is available on the classpath.\n\nUse the **Statically import matcher's methods** option to specify if you want the quick-fix to statically import the Hamcrest matcher methods." + }, + { + "shortName": "MaskedAssertion", + "displayName": "Assertion is suppressed by 'catch'", + "enabled": false, + "description": "Reports `assert` statements and test framework assertions that are suppressed by a surrounding catch block. Such assertions will never fail, as the thrown `AssertionError` will be caught and silently ignored.\n\n**Example 1:**\n\n\n void javaAssertion() {\n try {\n ...\n assert 1 == 2;\n } catch (AssertionError e) {\n // the assertion is silently ignored\n }\n }\n\n**Example 2:**\n\n\n @Test\n void testWithAssertJ() {\n try {\n ...\n assertThat(1).as(\"test\").isEqualTo(2);\n } catch (AssertionError e) {\n // the assertion is silently ignored\n }\n }\n\n**Example 3:**\n\n\n @Test\n void testWithJunit() {\n try {\n ...\n assertEquals(1, 2);\n } catch (AssertionError e) {\n // the assertion is silently ignored\n }\n }\n\nNew in 2020.3" + }, + { + "shortName": "MisorderedAssertEqualsArguments", + "displayName": "Misordered 'assertEquals()' arguments", + "enabled": false, + "description": "Reports calls to `assertEquals()` that have the expected argument and the actual argument in the wrong order.\n\n\nFor JUnit 3, 4, and 5 the correct order is `(expected, actual)`.\nFor TestNG the correct order is `(actual, expected)`.\n\n\nSuch calls will behave fine for assertions that pass, but may give confusing error reports on failure.\nUse the quick-fix to flip the order of the arguments.\n\n**Example (JUnit):**\n\n\n assertEquals(actual, expected)\n\nAfter the quick-fix is applied:\n\n\n assertEquals(expected, actual)\n" + }, + { + "shortName": "AssertWithoutMessage", + "displayName": "Message missing on assertion", + "enabled": false, + "description": "Reports calls to `assertXXX()` or `fail()` without an error message string argument. An error message on assertion failure may help clarify the test case's intent.\n\n**Example:**\n\n\n assertTrue(checkValid());\n\nAfter the quick-fix is applied:\n\n assertTrue(checkValid(), \"|\");\n\n\nThe message argument is added before or after the existing arguments according to the assertions framework that you use." + }, + { + "shortName": "SimplifiableAssertion", + "displayName": "Simplifiable assertion", + "enabled": false, + "description": "Reports any `assert` calls that can be replaced with simpler and equivalent calls.\n\n| Example | → | Replacement |\n|----------------------------------|---|-------------------------|\n| `assertEquals(`**true**`, x());` | | `assertTrue(x());` |\n| `assertTrue(y() != null);` | | `assertNotNull(y());` |\n| `assertTrue(z == z());` | | `assertSame(z, z());` |\n| `assertTrue(a.equals(a()));` | | `assertEquals(a, a());` |\n| `assertTrue(`**false**`);` | | `fail();` |" + }, + { + "shortName": "ConstantAssertArgument", + "displayName": "Constant assert argument", + "enabled": false, + "description": "Reports constant arguments in `assertTrue()`, `assertFalse()`, `assertNull()`, and `assertNotNull()` calls.\n\n\nCalls to these methods with\nconstant arguments will either always succeed or always fail.\nSuch statements can easily be left over after refactoring and are probably not intended.\n\n**Example:**\n\n\n assertNotNull(\"foo\");\n" + } + ] + }, + { + "name": "Redundant modifiers", + "inspections": [ + { + "shortName": "RedundantModifiersUtilityClassLombok", + "displayName": "@UtilityClass modifiers", + "enabled": false, + "description": "Reports unneeded modifiers for classes annotated with `@UtilityClass`." + }, + { + "shortName": "RedundantModifiersValueLombok", + "displayName": "@Value modifiers", + "enabled": true, + "description": "Reports unneeded modifiers for classes annotated with `@Value`." + }, + { + "shortName": "RedundantModifiersValLombok", + "displayName": "Unnecessary final before 'val'", + "enabled": true, + "description": "Reports unneeded `final` modifiers before `val`." + } + ] + }, + { + "name": "Class metrics", + "inspections": [ + { + "shortName": "ConstructorCount", + "displayName": "Class with too many constructors", + "enabled": false, + "description": "Reports classes whose number of constructors exceeds the specified maximum.\n\nClasses with too many constructors are prone to initialization errors, and often modeling such a class as multiple subclasses is preferable.\n\nConfigure the inspection:\n\n* Use the **Constructor count limit** field to specify the maximum allowed number of constructors in a class.\n* Use the **Ignore deprecated constructors** option to avoid adding deprecated constructors to the total count." + }, + { + "shortName": "ClassNestingDepth", + "displayName": "Inner class too deeply nested", + "enabled": false, + "description": "Reports classes whose number of nested inner classes exceeds the specified maximum.\n\nNesting inner classes inside other inner classes is confusing and indicates that a refactoring may be necessary.\n\nUse the **Nesting limit** field to specify the maximum allowed nesting depth for a class." + }, + { + "shortName": "ClassCoupling", + "displayName": "Overly coupled class", + "enabled": false, + "description": "Reports classes that reference too many other classes.\n\nClasses with too high coupling can be very fragile, and should probably be split into smaller classes.\n\nConfigure the inspection:\n\n* Use the **Class coupling limit** field to specify the maximum allowed coupling for a class.\n* Use the **Include couplings to java system classes** option to specify whether references to system classes (those in the `java.`or `javax.` packages) should be counted.\n* Use the **Include couplings to library classes** option to specify whether references to any library classes should be counted." + }, + { + "shortName": "AnonymousClassComplexity", + "displayName": "Overly complex anonymous class", + "enabled": false, + "description": "Reports anonymous inner classes whose total complexity exceeds the specified maximum.\n\nThe total complexity of a class is the sum of cyclomatic complexities of all the methods\nand initializers the class declares. Inherited methods and initializers are not counted\ntoward the total complexity.\n\nAnonymous classes should have very low complexity otherwise they are hard to understand and should be promoted to become named inner classes.\n\nUse the **Cyclomatic complexity limit** field to specify the maximum allowed complexity for a class." + }, + { + "shortName": "ClassInheritanceDepth", + "displayName": "Class too deep in inheritance tree", + "enabled": false, + "description": "Reports classes that are too deep in the inheritance hierarchy.\n\nClasses that are too deeply inherited may be confusing and indicate that a refactoring is necessary.\n\nAll superclasses from a library are treated as a single superclass, libraries are considered unmodifiable.\n\nUse the **Inheritance depth limit** field to specify the maximum inheritance depth for a class." + }, + { + "shortName": "MethodCount", + "displayName": "Class with too many methods", + "enabled": false, + "description": "Reports classes whose number of methods exceeds the specified maximum.\n\nClasses with too many methods are often trying to 'do too much'. Consider splitting such a class into multiple smaller classes.\n\nConfigure the inspection:\n\n* Use the **Method count limit** field to specify the maximum allowed number of methods in a class.\n* Use the **Ignore simple getter and setter methods** option to ignore simple getters and setters in method count.\n* Use the **Ignore methods overriding/implementing a super method** to ignore methods that override or implement a method from a superclass." + }, + { + "shortName": "ClassComplexity", + "displayName": "Overly complex class", + "enabled": false, + "description": "Reports classes whose total complexity exceeds the specified maximum.\n\nThe total complexity of a class is the sum of cyclomatic complexities of all the methods\nand initializers the class declares. Inherited methods and initializers are not counted\ntoward the total complexity.\n\nToo high complexity indicates that the class should be refactored into several smaller classes.\n\nUse the **Cyclomatic complexity limit** field below to specify the maximum allowed complexity for a class." + }, + { + "shortName": "AnonymousClassMethodCount", + "displayName": "Anonymous inner class with too many methods", + "enabled": false, + "description": "Reports anonymous inner classes whose method count exceeds the specified maximum.\n\nAnonymous classes with numerous methods may be\ndifficult to understand and should be promoted to become named inner classes.\n\nUse the **Method count limit** field to specify the maximum allowed number of methods in an anonymous inner class." + }, + { + "shortName": "FieldCount", + "displayName": "Class with too many fields", + "enabled": false, + "description": "Reports classes whose number of fields exceeds the specified maximum.\n\nClasses with a large number of fields are often trying to do too much. Consider splitting such a class into multiple smaller classes.\n\nConfigure the inspection:\n\n* Use the **Field count limit** field to specify the maximum allowed number of fields in a class.\n* Use the **Include constant fields in count** option to indicate whether constant fields should be counted.\n* By default only immutable `static final` objects are counted as constants. Use the **'static final' fields count as constant** option to count any `static final` field as constant.\n* Use the **Include enum constants in count** option to specify whether `enum` constants in `enum` classes should be counted." + } + ] + }, + { + "name": "Method", + "inspections": [ + { + "shortName": "BooleanMethodNameMustStartWithQuestion", + "displayName": "Boolean method name must start with question word", + "enabled": false, + "description": "Reports boolean methods whose names do not start with a question word.\n\nBoolean methods that override library methods are ignored by this inspection.\n\n**Example:**\n\n boolean empty(List list) {\n return list.isEmpty();\n }\n\nA quick-fix that renames such methods is available only in the editor.\n\nConfigure the inspection:\n\n* Use the **Boolean method name prefixes** list to specify acceptable question words to start boolean method names with.\n* Use the **Ignore methods with 'java.lang.Boolean' return type** option to ignore methods with the `java.lang.Boolean` return type.\n* Use the **Ignore boolean methods in an @interface** option to ignore boolean methods in annotation types (`@interface`).\n* Use the **Ignore methods overriding/implementing a super method** to ignore methods the have supers." + }, + { + "shortName": "MisspelledMethodName", + "displayName": "Method names differing only by case", + "enabled": false, + "description": "Reports cases in which multiple methods of a class have the names that differ only by case. Such names may be very confusing.\n\n**Example:**\n\n\n public int hashcode() { // reported, should be hashCode probably?\n return 0;\n }\n\nA quick-fix that renames such methods is available only in the editor.\n\nUse the **Ignore methods overriding/implementing a super method** option to ignore methods overriding or implementing a method from\nthe superclass." + }, + { + "shortName": "LambdaUnfriendlyMethodOverload", + "displayName": "Lambda-unfriendly method overload", + "enabled": false, + "description": "Reports overloaded methods that take functional interfaces with conflicting abstract method signatures.\n\nSuch overloads introduce ambiguity and require callers to cast lambdas to a specific type or specify lambda parameter types explicitly.\nIt is preferable to give the overloaded methods different names to eliminate ambiguity.\n\nExample:\n\n\n interface MyExecutor {\n void execute(Supplier supplier);\n void execute(Callable callable);\n }\n\n\nHere, `Supplier` and `Callable` are functional interfaces\nwhose single abstract methods do not take any parameters and return a non-void value.\nAs a result, the type of the lambda cannot be inferred at the call site unless an explicit cast is used." + }, + { + "shortName": "OverloadedMethodsWithSameNumberOfParameters", + "displayName": "Overloaded methods with same number of parameters", + "enabled": false, + "description": "Reports methods that are declared in the same class, have the same name, and the same number of parameters. Such overloads cam be very confusing because it can be unclear which overload gets called.\n\n**Example:**\n\n\n class Main {\n public static void execute(Runnable r) {}\n public static void execute(RunnableFuture c) {}\n }\n\n\nUse the option to ignore overloaded methods whose parameter types are definitely incompatible." + }, + { + "shortName": "MethodNameSameAsClassName", + "displayName": "Method name same as class name", + "enabled": false, + "description": "Reports methods that are named identically to their class. While such naming is allowed by the Java language, by convention it is reserved for defining constructors. Using it for methods is probably a mistake or bad practice.\n\n**Example:**\n\n\n class MyClass {\n int val;\n\n // Method MyClass named identically to its containing class.\n // Likely, 'void' was added by mistake.\n void MyClass(int val) {\n this.val = val;\n }\n }\n\nWhen appropriate, a quick-fix converts the method to a constructor:\n\n\n class MyClass {\n int val;\n\n MyClass(int val) {\n this.val = val;\n }\n }\n\nAnother quick-fix renames the method." + }, + { + "shortName": "MethodNameSameAsParentName", + "displayName": "Method name same as parent class name", + "enabled": false, + "description": "Reports methods that have the same name as the superclass of the method's class, as such a method name may be confusing.\n\nThis inspection doesn't check interfaces or superclasses deep in the hierarchy.\n\n**Example:**\n\n\n class Parent {}\n class Child extends Parent {\n public Parent Parent() {\n return null;\n }\n }\n\nA quick-fix that renames such methods is available only in the editor." + }, + { + "shortName": "NewMethodNamingConvention", + "displayName": "Method naming convention", + "enabled": false, + "description": "Reports methods whose names are too short, too long, or do not follow the specified regular expression pattern.\n\nInstance methods that override library\nmethods and constructors are ignored by this inspection.\n\n**Example:** if the inspection is enabled for static methods, and the minimum specified method name length is 4 (the default),\nthe following static method produces a warning, because the length of its name is 3, which is less\nthan 4: `public static int max(int a, int b)`.\n\nA quick-fix that renames such methods is available only in the editor.\n\nConfigure the inspection:\n\nUse the list in the **Options** section to specify which methods should be checked. Deselect the checkboxes for the method types for which\nyou want to skip the check. Specify **0** in the length fields to skip the corresponding checks.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + { + "shortName": "NonBooleanMethodNameMayNotStartWithQuestion", + "displayName": "Non-boolean method name must not start with question word", + "enabled": false, + "description": "Reports non-boolean methods whose names start with a question word. Such method names may be confusing.\n\nNon-boolean methods that override library methods are ignored by this inspection.\n\n**Example:**\n\n\n public void hasName(String name) {\n assert names.contains(name);\n }\n\nA quick-fix that renames such methods is available only in the editor.\n\nConfigure the inspection:\n\n* Use the **Boolean method name prefixes** list to specify the question words that should be used only for boolean methods.\n* Use the **Ignore methods with 'java.lang.Boolean' return type** option to ignore methods with `java.lang.Boolean` return type.\n* Use the **Ignore methods overriding/implementing a super method** option to ignore methods which have supers." + }, + { + "shortName": "OverloadedVarargsMethod", + "displayName": "Overloaded varargs method", + "enabled": false, + "description": "Reports varargs methods with the same name as other methods in the class or in a superclass. Overloaded methods that take a variable number of arguments can be very confusing because it is often unclear which overload gets called.\n\n**Example:**\n\n\n public void execute(Runnable... r) {} // warning\n public void execute(Runnable r1, Runnable r2) {}\n" + } + ] + }, + { + "name": "Dependency issues", + "inspections": [ + { + "shortName": "ClassWithTooManyTransitiveDependents", + "displayName": "Class with too many transitive dependents", + "enabled": false, + "description": "Reports a class on which too many other classes are directly or indirectly dependent.\n\nAny modification to such a class may require changing many other classes, which may be expensive.\n\nOnly top-level classes are reported.\n\nUse the **Maximum number of transitive dependents** field to specify the maximum allowed number of direct or indirect dependents\nfor a class.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + { + "shortName": "ClassWithTooManyTransitiveDependencies", + "displayName": "Class with too many transitive dependencies", + "enabled": false, + "description": "Reports classes that are directly or indirectly dependent on too many other classes.\n\nModifications to any dependency of such a class may require changing the class thus making it prone to instability.\n\nOnly top-level classes are reported.\n\nUse the **Maximum number of transitive dependencies** field to specify the maximum allowed number of direct or indirect dependencies\nfor a class.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + { + "shortName": "ClassWithTooManyDependents", + "displayName": "Class with too many dependents", + "enabled": false, + "description": "Reports a class on which too many other classes are directly dependent.\n\nAny modification to such a class may require changing many other classes, which may be expensive.\n\nOnly top-level classes are reported.\n\nUse the field below to specify the maximum allowed number of dependents for a class.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + { + "shortName": "CyclicClassDependency", + "displayName": "Cyclic class dependency", + "enabled": false, + "description": "Reports classes that are mutually or cyclically dependent on other classes.\n\nSuch cyclic dependencies make code fragile and hard to maintain.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + { + "shortName": "CyclicPackageDependency", + "displayName": "Cyclic package dependency", + "enabled": false, + "description": "Reports packages that are mutually or cyclically dependent on other packages.\n\nSuch cyclic dependencies make code fragile and hard to maintain.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + { + "shortName": "ClassWithTooManyDependencies", + "displayName": "Class with too many dependencies", + "enabled": false, + "description": "Reports classes that are directly dependent on too many other classes in the project.\n\nModifications to any dependency of such classes may require changing the class, thus making it prone to instability.\n\nOnly top-level classes are reported.\n\nUse the **Maximum number of dependencies** field to specify the maximum allowed number of dependencies for a class.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + } + ] + }, + { + "name": "Compiler issues", + "inspections": [ + { + "shortName": "JavacQuirks", + "displayName": "Javac quirks", + "enabled": true, + "description": "Reports known Javac issues, performance problems, and incompatibilities. For example, type inference may be slow when it has to process many nested calls.\n\nThe following code triggers a warning, as the vararg method call has 50+ poly arguments:\n\n\n Arrays.asList(\n Arrays.asList(\"a1\", \"b1\"),\n Arrays.asList(\"a2\", \"b2\"),\n ...\n Arrays.asList(\"a100\", \"b100\"));\n\nThe quick-fix adds explicit type arguments, which makes compilation and IDE processing much faster:\n\n\n //noinspection RedundantTypeArguments\n Arrays.>asList(\n Arrays.asList(\"a1\", \"b1\"),\n Arrays.asList(\"a2\", \"b2\"),\n ...\n Arrays.asList(\"a100\", \"b100\"));\n" + }, + { + "shortName": "UNCHECKED_WARNING", + "displayName": "Unchecked warning", + "enabled": false, + "description": "Reports code on which an unchecked warning will be issued by the javac compiler. Every unchecked warning may potentially trigger `ClassCastException` at runtime.\n\nExample:\n\n\n List items = Arrays.asList(\"string\", \"string\");\n List numbers = Collections.unmodifiableList(items); // unchecked assignment\n\nThe quick-fix tries to generify the containing file,\nwhich may expose any problems in the editor and during compilation that previously only appeared at runtime:\n\n\n List items = Arrays.asList(\"string\", \"string\");\n List numbers = Collections.unmodifiableList(items); // incompatible types\n" + }, + { + "shortName": "PreviewFeature", + "displayName": "Preview Feature warning", + "enabled": false, + "description": "Reports usages of Preview Feature APIs, i.e. of a module, package, class, interface, method, constructor, field, or enum constant in the `java.*` or `javax.*` namespace annotated with `@PreviewFeature`.\n\n\nA preview feature is a new feature of the Java language, Java Virtual Machine, or Java SE API that is fully specified, fully implemented,\nand is yet impermanent. The notion of a preview feature is defined in [JEP 12](https://openjdk.org/jeps/12).\n\n\nIf some piece of code depends on a preview API, it may stop compiling in future JDK versions if the feature is changed or removed.\n\nThe inspection only reports if the language level of the project or module is **Preview**.\n\nNew in 2021.1" + }, + { + "shortName": "SynchronizeOnValueBasedClass", + "displayName": "Value-based warnings", + "enabled": false, + "description": "Reports attempts to synchronize on an instance of a value-based class that produce compile-time warnings and raise run-time exceptions starting from Java 16.\n\n\nFor example, `java.lang.Double` is annotated with `jdk.internal.ValueBased`, so the following code will\nproduce a compile-time warning:\n\n\n Double d = 20.0;\n synchronized (d) { ... } // javac warning\n\nNew in 2021.1" + } + ] + }, + { + "name": "Annotations", + "inspections": [ + { + "shortName": "DelegatesTo", + "displayName": "@DelegatesTo", + "enabled": false, + "description": "Reports unused `@DelegatesTo.Target` annotations and unresolved `@DelegatedTo.target` annotation attribute values.\n\n**Example:**\n\n\n // unused target 't1' and unresolved target 't2'\n def m(\n @DelegatesTo.Target('t1') target,\n @DelegatesTo(target = 't2') Closure c\n ) {}\n" + }, + { + "shortName": "GrAnnotationReferencingUnknownIdentifiers", + "displayName": "@TupleConstructor and @MapConstructor", + "enabled": false, + "description": "Reports unresolved identifiers in `@TupleConstructor` and `@MapConstructor` `includes` and `excludes` annotation attribute values.\n\n**Example:**\n\n\n // unresolved 'c'\n @TupleConstructor(includes = ['a', 'b', 'c'])\n class X {\n def a\n def b\n }\n" + }, + { + "shortName": "GrPOJO", + "displayName": "@POJO without @CompileStatic", + "enabled": false, + "description": "Reports annotation `@groovy.transform.stc.POJO` applied without `@groovy.transform.CompileStatic`.\n\n\nAnnotation `@POJO` changes compilation process of Groovy classes to bytecode. It has no effect without explicitly enabled static compilation (which is done via `@CompileStatic` annotation).\n\n**Example:**\n\n\n @POJO // reports @POJO\n class A {}\n" + }, + { + "shortName": "SingletonConstructor", + "displayName": "@Singleton constructors", + "enabled": false, + "description": "Reports constructors of classes annotated by `@Singleton` unless it is declared non-strict.\n\n**Example:**\n\n\n @Singleton\n class Foo{\n Foo(){\n }\n }\n\nThere are two possible quick-fixes: either to remove the constructor or to declare `@Singleton` non-strict.\n\nAfter the quick-fix is applied:\n\n\n @Singleton\n class Foo{\n }\n\nor:\n\n\n @Singleton(strict = false)\n class Foo{\n Foo(){\n }\n }\n" + }, + { + "shortName": "GrNamedVariantLabels", + "displayName": "@NamedVariant/@NamedParam/@NamedDelegate unresolved label", + "enabled": false, + "description": "Reports unresolved argument labels in calls of methods annotated by `@NamedVariant`/`@NamedParam`/`@NamedDelegate`.\n\n**Example:**\n\n\n @groovy.transform.NamedVariant\n def foo(a, b) {}\n\n // unresolved label 'c'\n foo(a: 1, b: 2, c: 3)\n" + } + ] + }, + { + "name": "Proofreading", + "inspections": [ + { + "shortName": "SpellCheckingInspection", + "displayName": "Typo", + "enabled": false, + "description": "Reports typos and misspellings in your code, comments, and literals and fixes them with one click." + } + ] + }, + { + "name": "Manifest", + "inspections": [ + { + "shortName": "MissingFinalNewline", + "displayName": "Missing final new line", + "enabled": false, + "description": "Reports if manifest files do not end with a final newline as required by the JAR file specification." + }, + { + "shortName": "MisspelledHeader", + "displayName": "Unknown or misspelled header name", + "enabled": false, + "description": "Reports any unknown and probably misspelled header names and provides possible variants." + } + ] + }, + { + "name": "Ant", + "inspections": [ + { + "shortName": "AntMissingPropertiesFileInspection", + "displayName": "Missing properties file", + "enabled": false, + "description": "|------------------------------------|\n| Reports missing .properties files. |" + }, + { + "shortName": "AntResolveInspection", + "displayName": "Ant references resolve problems", + "enabled": false, + "description": "|--------------------------------------------------------------------------------------------------|\n| Reports unresolved references on properties and custom type definitions that cannot be resolved. |" + }, + { + "shortName": "AntDuplicateTargetsInspection", + "displayName": "Duplicate targets", + "enabled": false, + "description": "|--------------------------------------------------------|\n| Reports duplicate `targets` in the current build file. |" + } + ] + }, + { + "name": "Method metrics", + "inspections": [ + { + "shortName": "NestingDepth", + "displayName": "Overly nested method", + "enabled": false, + "description": "Reports methods whose body contain too deeply nested statements.\n\nMethods with too deep statement\nnesting may be confusing and are a good sign that refactoring may be necessary.\n\nUse the **Nesting depth limit** field to specify the maximum allowed nesting depth for a method." + }, + { + "shortName": "NonCommentSourceStatements", + "displayName": "Overly long method", + "enabled": false, + "description": "Reports methods whose number of statements exceeds the specified maximum.\n\nMethods with too many statements may be confusing and are a good sign that refactoring is necessary.\n\nThe following statements are not counted:\n\n* empty statements (semicolons)\n* block statements\n* `for` loop initialization statements, that is, `int i = ...` within a `for(int i = ...;...)` statement\n* `for` loop update statements, that is, `i += 2` within a `for(int i = ...;...; i += 2)` statement\n\nUse the **Maximum statements per method** field to specify the maximum allowed number of statements in a method." + }, + { + "shortName": "OverlyLongLambda", + "displayName": "Overly long lambda expression", + "enabled": false, + "description": "Reports lambda expressions whose number of statements exceeds the specified maximum.\n\nLambda expressions that are too long may be confusing, and it is often better to extract the statements into a separate method.\n\n\nThe following statements are not counted:\n\n* empty statements (semicolons)\n* block statements\n* `for` loop initialization statements, that is, `int i = ...` within a `for(int i = ...;...)` statement\n* `for` loop update statements, that is, `i += 2` within a `for(int i = ...;...; i += 2)` statement\n\nUse the **Non-comment source statements limit** field to specify the maximum allowed number of statements in a lambda expression." + }, + { + "shortName": "ParametersPerMethod", + "displayName": "Method with too many parameters", + "enabled": false, + "description": "Reports methods whose number of parameters exceeds the specified maximum. Methods with too many parameters can be a good sign that a refactoring is necessary.\n\nMethods that have super methods are not reported.\n\nUse the **Parameter limit** field to specify the maximum allowed number of parameters for a method." + }, + { + "shortName": "MethodCoupling", + "displayName": "Overly coupled method", + "enabled": false, + "description": "Reports methods that reference too many other classes. Methods with too high coupling can be very fragile and should be probably split into smaller methods.\n\nEach referenced class is counted only once no matter how many times it is referenced.\n\nConfigure the inspection:\n\n* Use the **Method coupling limit** field to specify the maximum allowed coupling for a method.\n* Use the **Include couplings to java system classes** option to count references to classes from `java`or `javax` packages.\n* Use the **Include couplings to library classes** option to count references to third-party library classes." + }, + { + "shortName": "ThrownExceptionsPerMethod", + "displayName": "Method with too many exceptions declared", + "enabled": false, + "description": "Reports methods that have too many types of exceptions in its `throws` list.\n\nMethods with too many exceptions declared are a good sign that your error handling code is getting overly complex.\n\nUse the **Exceptions thrown limit** field to specify the maximum number of exception types a method is allowed to have in its `throws` list." + }, + { + "shortName": "CyclomaticComplexity", + "displayName": "Overly complex method", + "enabled": false, + "description": "Reports methods that have too many branch points.\n\nA branch point is one of the following:\n\n* loop statement\n* `if` statement\n* ternary expression\n* `catch` section\n* expression with one or more `&&` or `||` operators inside\n* `switch` block with non-default branches\n\nMethods with too high cyclomatic complexity may be confusing and hard to test.\n\nUse the **Method complexity limit** field to specify the maximum allowed cyclomatic complexity for a method." + }, + { + "shortName": "ThreeNegationsPerMethod", + "displayName": "Method with more than three negations", + "enabled": false, + "description": "Reports methods with three or more negations. Such methods may be confusing.\n\n**Example:**\n\n\n void doSmth(int a, int b, boolean flag1, boolean flag2) {\n if (!flag && !flag2) {\n if (a != b) {\n doOther();\n }\n }\n }\n\nWithout negations, the method becomes easier to understand:\n\n\n void doSmth(int a, int b, boolean flag1, boolean flag2) {\n if (flag1 || flag2 || a == b) return;\n doOther();\n }\n\nConfigure the inspection:\n\n* Use the **Ignore negations in 'equals()' methods** option to disable the inspection within `equals()` methods.\n* Use the **Ignore negations in 'assert' statements** to disable the inspection within `assert` statements." + }, + { + "shortName": "ParametersPerConstructor", + "displayName": "Constructor with too many parameters", + "enabled": false, + "description": "Reports constructors whose number of parameters exceeds the specified maximum. Such objects are hard to instantiate, especially if some parameters are optional. Constructors with too many parameters may indicate that refactoring is necessary. Consider applying the builder pattern, for example.\n\n**Example:**\n\n\n public BankAccount(long accountNumber,\n String owner,\n double balance,\n double interestRate) {\n // fields initialization\n }\n\nConfigure the inspection:\n\n* Use the **Parameter limit** field to specify the maximum allowed number of parameters in a constructor.\n* Use the **Ignore constructors with visibility** list to specify whether the inspection should ignore constructors with specific visibility." + }, + { + "shortName": "MethodWithMultipleLoops", + "displayName": "Method with multiple loops", + "enabled": false, + "description": "Reports methods that contain more than one loop statement.\n\n**Example:**\n\nThe method below will be reported because it contains two loops:\n\n\n void methodWithTwoLoops(int n1, int n2) {\n for (int i = 0; i < n1; i++) {\n System.out.println(i);\n }\n\n int j = 0;\n while (j < n2) {\n System.out.println(j);\n j++;\n }\n }\n\nThe following method will also be reported because it contains a nested loop:\n\n\n void methodWithNestedLoop(int n1, int n2) {\n for (int i = 0; i < n1; i++) {\n for (int j = 0; j < n2; j++) {\n System.out.println(i + j);\n }\n }\n }\n" + }, + { + "shortName": "MultipleReturnPointsPerMethod", + "displayName": "Method with multiple return points", + "enabled": false, + "description": "Reports methods whose number of `return` points exceeds the specified maximum. Methods with too many `return` points may be confusing and hard to refactor.\n\nA `return` point is either a `return` statement or a falling through the bottom of a\n`void` method or constructor.\n\n**Example:**\n\nThe method below is reported if only two `return` statements are allowed:\n\n\n void doSmth(User[] users) {\n for (User user : users) {\n if (cond1(user)) {\n user.setId(getId());\n return;\n } else if (cond2(user)) {\n if (cond3(user)) {\n user.setId(getId());\n return;\n }\n }\n }\n }\n\nConsider rewriting the method so it becomes easier to understand:\n\n\n void doSmth(User[] users) {\n for (User user : users) {\n if (cond1(user) || cond2(user) && cond3(user)) {\n user.setId(getId());\n return;\n }\n }\n }\n\nConfigure the inspection:\n\n* Use the **Return point limit** field to specify the maximum allowed number of `return` points for a method.\n* Use the **Ignore guard clauses** option to ignore guard clauses. A guard clause is an `if` statement that contains only a `return` statement\n* Use the **Ignore for 'equals()' methods** option to ignore `return` points inside `equals()` methods." + }, + { + "shortName": "GroovyMethodParameterCount", + "displayName": "Method with too many parameters", + "enabled": false, + "description": "Reports methods with too many parameters. Method with too many parameters is a good sign that refactoring is necessary. Methods whose signatures are inherited from library classes are ignored by this inspection.\n\n\nUse the **Maximum number of parameters:** field to specify the maximum acceptable number of parameters a method might have." + }, + { + "shortName": "GroovyMultipleReturnPointsPerMethod", + "displayName": "Method with multiple return points", + "enabled": false, + "description": "Reports methods with too many return points. Methods with too many return points may be confusing, and hard to refactor.\n\n**Example:**\n\n\n int foo(int a) {\n if (a > 0) {\n return a\n }\n if (a < 0) return -a\n return 0\n }\n\n\nUse the field provided below to specify the maximum acceptable number of return points a method\nmight have." + }, + { + "shortName": "GroovyOverlyLongMethod", + "displayName": "Overly long method", + "enabled": false, + "description": "Reports methods that are too long.\n\n\nMethods that are too long\nmay be confusing, and are a good sign that refactoring is necessary.\n\n\nUse the **Maximum statements per method** field to specify the maximum acceptable number of non-comment source\nstatements a method might have." + }, + { + "shortName": "GroovyOverlyComplexMethod", + "displayName": "Overly complex method", + "enabled": false, + "description": "Reports methods that have too high a cyclomatic complexity.\n\n\nCyclomatic\ncomplexity is basically a measurement of the number of branching points in a method. Methods with too high\na cyclomatic complexity may be confusing and difficult to test.\n\n\nUse the **Method complexity limit** field to specify the maximum acceptable cyclomatic complexity a method might have." + }, + { + "shortName": "GroovyOverlyNestedMethod", + "displayName": "Overly nested method", + "enabled": false, + "description": "Reports methods whose bodies are too deeply nested.\n\n\nMethods with too much statement\nnesting may be confusing, and are a good sign that refactoring may be necessary.\n\n\nUse the **Maximum nesting depth** field to specify the maximum acceptable nesting depth a method might have." + }, + { + "shortName": "GroovyMethodWithMoreThanThreeNegations", + "displayName": "Method with more than three negations", + "enabled": false, + "description": "Reports methods with three or more negation operations (`!` or `!=`). Such methods may be unnecessarily confusing." + } + ] + }, + { + "name": "Bitwise operation issues", + "inspections": [ + { + "shortName": "ShiftOutOfRange", + "displayName": "Shift operation by inappropriate constant", + "enabled": true, + "description": "Reports shift operations where the shift value is a constant outside the reasonable range.\n\nInteger shift operations outside the range `0..31` and long shift operations outside the\nrange `0..63` are reported. Shifting by negative or overly large values is almost certainly\na coding error.\n\n**Example:**\n\n\n int shiftSize = 32;\n // Warning: shift by 32 bits is equivalent to shift by 0 bits, so there's no shift at all.\n int mask = (1 << shiftSize) - 1;\n" + }, + { + "shortName": "PointlessBitwiseExpression", + "displayName": "Pointless bitwise expression", + "enabled": true, + "description": "Reports pointless bitwise expressions.\n\n\nSuch expressions include applying the `&` operator to the maximum value for the given type, applying the\n`or` operator to zero, and shifting by zero. Such expressions may be the result of automated\nrefactorings not followed through to completion and are unlikely to be originally intended.\n\n**Examples:**\n\n\n // Warning: operation is pointless and can be replaced with just `flags`\n // 0xFFFF_FFFF is the maximum value for an integer, and both literals are treated\n // as 32 bit integer literals.\n int bits = flags & 0xFFFF_FFFF;\n\n // Warning: operation is pointless and can be replaced with just `bits`\n // OR-ing with 0 always outputs the other operand.\n int or = bits | 0x0;\n\n // Warning: operation is pointless, as always results in 0\n int xor = or ^ or;\n" + }, + { + "shortName": "IncompatibleMask", + "displayName": "Incompatible bitwise mask operation", + "enabled": true, + "description": "Reports bitwise mask expressions which are guaranteed to evaluate to `true` or `false`.\n\n\nThe inspection checks the expressions of the form `(var & constant1) == constant2` or\n`(var | constant1) == constant2`, where `constant1`\nand `constant2` are incompatible bitmask constants.\n\n**Example:**\n\n // Incompatible mask: as the mask ends in 00,\n // the result could be 0x1200 but not 0x1234\n if ((mask & 0xFF00) == 0x1234) {...}\n" + } + ] + }, + { + "name": "Reflective access", + "inspections": [ + { + "shortName": "JavaReflectionInvocation", + "displayName": "Reflective invocation arguments mismatch", + "enabled": true, + "description": "Reports cases in which the arguments provided to `Method.invoke()` and `Constructor.newInstance()` do not match the signature specified in `Class.getMethod()` and `Class.getConstructor()`.\n\nExample:\n\n\n Method m = myObj.getClass().getMethod(\"myMethod\", int.class);\n // the argument should be an **int** value\n m.invoke(myObj, \"abc\");\n\nNew in 2017.2" + }, + { + "shortName": "JavaLangInvokeHandleSignature", + "displayName": "MethodHandle/VarHandle type mismatch", + "enabled": true, + "description": "Reports `MethodHandle` and `VarHandle` factory method calls that don't match any method or field.\n\nAlso reports arguments to `MethodHandle.invoke()` and similar methods, that don't match the `MethodHandle` signature\nand arguments to `VarHandle.set()` that don't match the `VarHandle` type.\n\n\nExamples:\n\n```\n MethodHandle mh = MethodHandles.lookup().findVirtual(\n MyClass.class, \"foo\", MethodType.methodType(void.class, int.class));\n // the argument should be an int value\n mh.invoke(myObj, \"abc\");\n```\n\n
    \n\n```\n // the argument should be String.class\n VarHandle vh = MethodHandles.lookup().findVarHandle(\n MyClass.class, \"text\", int.class);\n```\n\n
    \n\n```\n VarHandle vh = MethodHandles.lookup().findVarHandle(\n MyClass.class, \"text\", String.class);\n // the argument should be a String value\n vh.set(myObj, 42);\n```\n\n\nNew in 2017.2" + }, + { + "shortName": "JavaReflectionMemberAccess", + "displayName": "Reflective access to non-existent or not visible class member", + "enabled": true, + "description": "Reports reflective access to fields and methods that don't exist or aren't visible.\n\nExample:\n\n\n Field stringHashField() throws NoSuchFieldException {\n return String.class.getField(\"hash\");\n }\n\nAfter the quick-fix is applied:\n\n\n Field stringHashField() throws NoSuchFieldException {\n return String.class.getDeclaredField(\"hash\");\n }\n\n\nWith a `final` class, it's clear if there is a field or method with the specified name in the class.\n\n\nWith non-`final` classes, it's possible that a subclass has a field or method with that name, so there could be false positives.\nUse the inspection's settings to get rid of such false positives everywhere or with specific classes.\n\nNew in 2017.2" + }, + { + "shortName": "Java9ReflectionClassVisibility", + "displayName": "Reflective access across modules issues", + "enabled": true, + "description": "Reports `Class.forName()` and `ClassLoader.loadClass()` calls which try to access classes that aren't visible in the current scope due to Java 9 module accessibility rules.\n\nThis inspection only reports if the language level of the project or module is 9 or higher." + } + ] + }, + { + "name": "Java 15", + "inspections": [ + { + "shortName": "TextBlockMigration", + "displayName": "Text block can be used", + "enabled": false, + "description": "Reports `String` concatenations that can be simplified by replacing them with text blocks.\n\nRequirements:\n\n* `\\n` occurs two or more times.\n* Text blocks are not concatenated.\n\n\nUse the **Apply to single string literals** option to suggest the fix for single literals containing line breaks.\n\n\n**Example:**\n\n\n String html = \"\\n\" +\n \" \\n\" +\n \"

    Hello, world

    \\n\" +\n \" \\n\" +\n \"\\n\";\n\nAfter the quick-fix is applied:\n\n\n String html = \"\"\"\n \n \n

    Hello, world

    \n \n \n \"\"\";\n\nThis inspection only reports if the language level of the project or module is 15 or higher.\n\nNew in 2019.3" + }, + { + "shortName": "TextBlockBackwardMigration", + "displayName": "Text block can be replaced with regular string literal", + "enabled": false, + "description": "Reports text blocks that can be replaced with regular string literals.\n\n**Example:**\n\n\n Object obj = engine.eval(\"\"\"\n function hello() {\n print('\"Hello, world\"');\n }\n\n hello();\n \"\"\");\n\nAfter the quick fix is applied:\n\n\n Object obj = engine.eval(\"function hello() {\\n\" +\n \" print('\\\"Hello, world\\\"');\\n\" +\n \"}\\n\" +\n \"\\n\" +\n \"hello();\\n\");\n\n\n*Text block* appeared in Java 15.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions.\n\nNew in 2019.3" + } + ] + }, + { + "name": "Java 14", + "inspections": [ + { + "shortName": "EnhancedSwitchMigration", + "displayName": "Statement can be replaced with enhanced 'switch'", + "enabled": false, + "description": "Reports `switch` statements that can be automatically replaced with enhanced `switch` statements or expressions.\n\n**Example:**\n\n\n double getPrice(String fruit) {\n // Switch statement can be replaced with enhanced 'switch'\n switch (fruit) {\n case \"Apple\":\n return 1.0;\n case \"Orange\":\n return 1.5;\n case \"Mango\":\n return 2.0;\n default:\n throw new IllegalArgumentException();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n double getPrice(String fruit) {\n return switch (fruit) {\n case \"Apple\" -> 1.0;\n case \"Orange\" -> 1.5;\n case \"Mango\" -> 2.0;\n default -> throw new IllegalArgumentException();\n };\n }\n \nThis inspection only reports if the language level of the project or module is 14 or higher\n\nNew in 2019.1" + }, + { + "shortName": "EnhancedSwitchBackwardMigration", + "displayName": "Enhanced 'switch'", + "enabled": false, + "description": "Reports enhanced `switch` statements and expressions. Suggests replacing them with regular `switch` statements.\n\n**Example:**\n\n\n boolean even = switch (condition) {\n case 1, 3, 5, 7, 9 -> false;\n default -> true;\n };\n\nAfter the quick-fix is applied:\n\n\n boolean even;\n switch (condition) {\n case 1:\n case 3:\n case 5:\n case 7:\n case 9:\n even = false;\n break;\n default:\n even = true;\n break;\n }\n\n\n*Enhanced* `switch` appeared in Java 14.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions.\n\nNew in 2019.1" + } + ] + }, + { + "name": "Cast", + "inspections": [ + { + "shortName": "DoubleLiteralMayBeFloatLiteral", + "displayName": "Cast to 'float' can be 'float' literal", + "enabled": false, + "description": "Reports `double` literal expressions that are immediately cast to `float`.\n\nSuch literal expressions can be replaced with equivalent `float` literals.\n\n**Example:**\n\n float f = (float)1.1;\n\nAfter the quick-fix is applied:\n\n float f = 1.1f;\n" + }, + { + "shortName": "UnnecessaryExplicitNumericCast", + "displayName": "Unnecessary explicit numeric cast", + "enabled": false, + "description": "Reports primitive numeric casts that would be inserted implicitly by the compiler. Also, reports any primitive numeric casts that the compiler will remove.\n\n**Example:**\n\n int x = (short)5; // The cast will be removed by the javac tool\n\nAfter the quick-fix is applied:\n`int x = 5;`" + }, + { + "shortName": "IntegerMultiplicationImplicitCastToLong", + "displayName": "Integer multiplication or shift implicitly cast to 'long'", + "enabled": true, + "description": "Reports integer multiplications and left shifts that are implicitly cast to long.\n\n**Example:**\n\n\n void f(int i) {\n long val = 65536 * i;\n }\n\nAfter the quick-fix is applied, the code changes to:\n\n\n void x(int i) {\n long val = 65536L * i;\n }\n\n**Example:**\n\n\n void f(int i) {\n long value = i << 24;\n }\n\nAfter the quick-fix is applied, the code changes to:\n\n\n void f(int i) {\n long value = (long) i << 24;\n }\n\n\nSuch multiplications are often a mistake, as overflow truncation may occur unexpectedly.\nConverting an `int` literal to a `long` literal (`65536`**L**) fixes the problem." + }, + { + "shortName": "IntLiteralMayBeLongLiteral", + "displayName": "Cast to 'long' can be 'long' literal", + "enabled": false, + "description": "Reports `int` literal expressions that are immediately cast to `long`.\n\nSuch literal expressions can be replaced with equivalent `long` literals.\n\n**Example:**\n\n Long l = (long)42;\n\nAfter the quick-fix is applied:\n\n Long l = 42L;\n" + }, + { + "shortName": "CastThatLosesPrecision", + "displayName": "Numeric cast that loses precision", + "enabled": false, + "description": "Reports cast operations between primitive numeric types that may result in precision loss.\n\nSuch casts are not necessarily a problem but may result in difficult to\ntrace bugs if the loss of precision is unexpected.\n\n**Example:**\n\n\n int a = 420;\n byte b = (byte) a;\n\nUse the **Ignore casts from int to char** option to ignore casts from `int` to `char`.\nThis type of cast is often used when implementing I/O operations because the `read()` method of the\n`java.io.Reader` class returns an `int`.\n\nUse the **Ignore casts from int 128-255 to byte** option to ignore casts of constant values (128-255) from `int` to\n`byte`.\nSuch values will overflow to negative numbers that still fit inside a byte." + } + ] + }, + { + "name": "Description file", + "inspections": [ + { + "shortName": "IntentionDescriptionNotFoundInspection", + "displayName": "Intention description checker", + "enabled": false, + "description": "Reports intentions that are missing an HTML description file, `before.template` file or `after.template` file. These are shown in [Settings \\| Editor \\| Intentions](settings://preferences.intentionPowerPack).\n\n\nThe **Create description file** quick-fix creates a template HTML description file." + }, + { + "shortName": "InspectionDescriptionNotFoundInspection", + "displayName": "Inspection description checker", + "enabled": false, + "description": "Reports inspections that are missing an HTML description file, i.e. a file containing a text like this.\n\n\nThe **Create description file** quick-fix creates a template HTML description file." + }, + { + "shortName": "PostfixTemplateDescriptionNotFound", + "displayName": "Postfix template description checker", + "enabled": false, + "description": "Reports postfix templates missing an HTML description file, `before.template` file or `after.template` file. These are shown in [Settings \\| Editor \\| General \\| Postfix Completion](settings://reference.settingsdialog.IDE.editor.postfix.templates).\n\n\nThe **Create description file** quick-fix creates a template HTML description file." + } + ] + }, + { + "name": "JSON and JSON5", + "inspections": [ + { + "shortName": "Json5StandardCompliance", + "displayName": "Compliance with JSON5 standard", + "enabled": false, + "description": "Reports inconsistency with [the language specification](http://json5.org) in a JSON5 file." + }, + { + "shortName": "JsonPathUnknownFunction", + "displayName": "Unknown JSONPath function", + "enabled": false, + "description": "Reports an unknown name in a JSONPath function call instead of known standard function names: `concat`, `keys`, `length`, `min`, `max`, `avg`, `stddev`, `sum`." + }, + { + "shortName": "JsonSchemaCompliance", + "displayName": "Compliance with JSON schema", + "enabled": false, + "description": "Reports inconsistence between a JSON file and the [JSON schema](https://json-schema.org) that is assigned to it. " + }, + { + "shortName": "JsonStandardCompliance", + "displayName": "Compliance with JSON standard", + "enabled": false, + "description": "Reports the following discrepancies of a JSON file with [the language specification](https://tools.ietf.org/html/rfc7159):\n\n* A line or block comment (configurable).\n* Multiple top-level values (expect for JSON Lines files, configurable for others).\n* A trailing comma in an object or array (configurable).\n* A single quoted string.\n* A property key is a not a double quoted strings.\n* A NaN or Infinity/-Infinity numeric value as a floating point literal (configurable)." + }, + { + "shortName": "JsonSchemaDeprecation", + "displayName": "Deprecated JSON property", + "enabled": false, + "description": "Reports a deprecated property in a JSON file. \nNote that deprecation mechanism is not defined in the JSON Schema specification yet, and this inspection uses a non-standard extension 'deprecationMessage'." + }, + { + "shortName": "JsonSchemaRefReference", + "displayName": "Unresolved '$ref' and '$schema' references", + "enabled": false, + "description": "Reports an unresolved `$ref` or `$schema` path in a JSON schema. " + }, + { + "shortName": "JsonPathEvaluateUnknownKey", + "displayName": "Unknown property key used for JSONPath evaluate expression", + "enabled": false, + "description": "Reports a key in a JSONPath expression that is missing in the source JSON document to evaluate." + }, + { + "shortName": "JsonDuplicatePropertyKeys", + "displayName": "Duplicate keys in object literals", + "enabled": false, + "description": "Reports a duplicate key in an object literal." + }, + { + "shortName": "JsonPathUnknownOperator", + "displayName": "Unknown JSONPath operator", + "enabled": false, + "description": "Reports an unknown operator on a JSONPath expression instead of one of the standard ones: `in`, `nin`, `subsetof`, `anyof`, `noneof`, `size`, `empty`, `contains`." + } + ] + }, + { + "name": "XPath", + "inspections": [ + { + "shortName": "RedundantTypeConversion", + "displayName": "Redundant type conversion", + "enabled": false, + "description": "Reports unnecessary type conversions. Type conversions are unnecessary when the argument type of a `string()`, `number()`, or `boolean()` function is already the same as the function's return type or if the expected expression type is `any`. Suggests removing the unnecessary conversion." + }, + { + "shortName": "IndexZeroUsage", + "displayName": "XPath predicate with index 0", + "enabled": false, + "description": "Reports usages of `0` in a predicate index or in a comparison with the function `position()`. Such usage is almost always a bug because in XPath, the index starts at `1`, *not* at `0`.\n\n**Example:**\n\n\n //someelement[position() = 0] or //something[0]\n" + }, + { + "shortName": "CheckNodeTest", + "displayName": "Unknown element or attribute name", + "enabled": false, + "description": "Reports names of elements or attributes that are used in an XPath-expression but are missing in the associated XML files and are not defined in the referenced schemas. Such names are often the result of typos and would otherwise probably only be discovered at runtime.\n\n**Example:**\n\n\n \n\n\nIf the `h` is bound to the XHTML namespace, the inspection will report this part of the `match` expression as an\nunknown element name because the correct name of the element is \"textarea\"." + }, + { + "shortName": "HardwiredNamespacePrefix", + "displayName": "Hardcoded namespace prefix", + "enabled": false, + "description": "Reports comparisons of the `name()` function with a string that contains a colon (`:`). Such usages usually indicate a hardcoded namespace prefix in the comparison. As a result, the code will break when run against XML that uses another prefix for the same namespace.\n\n**Example:**\n\n\n ...\n" + }, + { + "shortName": "ImplicitTypeConversion", + "displayName": "Implicit type conversion", + "enabled": false, + "description": "Reports implicit conversions between the predefined XPath-types `STRING`, `NUMBER`, `BOOLEAN`, and `NODESET`. Helps to write XSLT scripts that are more expressive about types and prevents subtle bugs:\n\n**Example:**\n\n\n \n\nis not the same as\n\n\n \n\n\nThe first test checks whether the element \"foo\" exists (`count(foo) > 0)`; the latter one however is only\ntrue if the element actually contains any text (`string-length(foo) > 0`). Suggests making\nthe type conversion more explicit.\n\n\nUse the following options to configure the inspection:\n\n* Enable or disable implicit conversions between certain types\n* Always report explicit conversions that do not result in the actually expected type, for example, ``\n* Ignore conversion from `NODESET` to `BOOLEAN` by using the `string()` function as a shortcut for writing `string-length() > 0`." + } + ] + }, + { + "name": "Java 10", + "inspections": [ + { + "shortName": "VariableTypeCanBeExplicit", + "displayName": "Variable type can be explicit", + "enabled": false, + "description": "Reports local variables of the `var` type that can be replaced with an explicit type.\n\n**Example:**\n\n\n var str = \"Hello\";\n\nAfter the quick-fix is applied:\n\n\n String str = \"Hello\";\n\n\n`var` *keyword* appeared in Java 10.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions." + }, + { + "shortName": "RedundantExplicitVariableType", + "displayName": "Local variable type can be omitted", + "enabled": false, + "description": "Reports redundant local variable types.\n\nThese types can be inferred from the context and thus replaced with `var`.\n\n**Example:**\n\n\n void test(InputStream s) {\n try (InputStream in = s) {}\n }\n\nAfter the fix is applied:\n\n\n void test(InputStream s) {\n try (var in = s) {}\n }\n" + } + ] + }, + { + "name": "Java 16", + "inspections": [ + { + "shortName": "PatternVariableCanBeUsed", + "displayName": "Pattern variable can be used", + "enabled": false, + "description": "Reports local variable declarations that can be replaced with pattern variables, which are usually more compact.\n\n**Example:**\n\n\n if (obj instanceof String) {\n String str = (String) obj;\n System.out.println(str);\n }\n\nCan be replaced with:\n\n\n if (obj instanceof String str) {\n System.out.println(str);\n }\n\nThis inspection only reports if the language level of the project or module is 16 or higher\n\nNew in 2020.1" + }, + { + "shortName": "ClassCanBeRecord", + "displayName": "Class can be a record", + "enabled": false, + "description": "Suggests replacing classes with records.\n\nThe inspection can be useful if you need to focus on modeling immutable data rather than extensible behavior.\nAutomatic implementation of data-driven methods, such as equals and accessors, helps to get rid of boilerplate.\n\n\nNote that not every class can be a record. Here are some of the restrictions:\n\n* A class must contain no inheritors and must be a top-level class.\n* All the non-static fields in class must be final.\n* Class must contain no instance initializers, generic constructors, nor native methods.\n\nTo get a full list of the restrictions, refer to the\n[Oracle documentation](https://docs.oracle.com/javase/specs/jls/se15/preview/specs/records-jls.html).\n\nExample:\n\n\n class Point {\n private final double x;\n private final double y;\n\n Point(double x, double y) {\n this.x = x;\n this.y = y;\n }\n\n double getX() {\n return x;\n }\n\n double getY() {\n return y;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n record Point(int x, int y) {\n }\n\nEnable the **Suggest renaming get/is-accessors** option to allow renaming `getX()`/`isX()` accessors to `x()` automatically.\n\n\nUse the **When conversion makes a member more accessible** options to specify if the conversion may violate class encapsulation:\n\n* Choose **Do not suggest conversion** option to never violate class encapsulation\n* Choose **Show affected members in conflicts view** option to apply conversion with notification about encapsulation violation issues\n* Choose **Convert silently** option to apply conversion silently whether encapsulation violation issues exist or not\n\nUse the **Suppress conversion if class is annotated by** list to exclude classes from conversion when annotated by annotations matching the specified patterns.\n\nThis inspection only reports if the language level of the project or module is 16 or higher.\n\nNew in 2020.3" + } + ] + }, + { + "name": "Java 7", + "inspections": [ + { + "shortName": "EqualsReplaceableByObjectsCall", + "displayName": "'equals()' expression replaceable by 'Objects.equals()' expression", + "enabled": false, + "description": "Reports expressions that can be replaced with a call to `java.util.Objects#equals`.\n\n**Example:**\n\n\n void f(Object a, Object b) {\n boolean result = a != null && a.equals(b);\n }\n\nAfter the quick-fix is applied:\n\n\n void f(Object a, Object b) {\n boolean result = Objects.equals(a, b);\n }\n\n\nReplacing expressions like `a != null && a.equals(b)` with `Objects.equals(a, b)`\nslightly changes the semantics. Use the **Highlight expressions like 'a != null \\&\\& a.equals(b)'** option to enable or disable this behavior.\n\nThis inspection only reports if the language level of the project or module is 7 or higher." + }, + { + "shortName": "SafeVarargsDetector", + "displayName": "Possible heap pollution from parameterized vararg type", + "enabled": false, + "description": "Reports methods with variable arity, which can be annotated as `@SafeVarargs`. The `@SafeVarargs` annotation suppresses unchecked warnings about parameterized array creation at call sites.\n\n**Example:**\n\n\n public class Foo {\n private List list = new ArrayList<>();\n\n public final void safeVarargs(T... elements) {\n Collections.addAll(list, elements);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class Foo {\n private List list = new ArrayList<>();\n\n @SafeVarargs\n public final void safeVarargs(T... elements) {\n Collections.addAll(list, elements);\n }\n }\n\n\nThis annotation is not supported under Java 1.6 or earlier JVMs." + }, + { + "shortName": "TryWithIdenticalCatches", + "displayName": "Identical 'catch' branches in 'try' statement", + "enabled": false, + "description": "Reports identical `catch` sections in a single `try` statement.\n\nCollapsing such sections into one *multi-catch* block reduces code duplication and prevents\nthe situations when one `catch` section is updated, and another one is not.\n\n**Example:**\n\n\n try {\n doSmth();\n }\n catch (IOException e) {\n LOG.error(e);\n }\n catch (URISyntaxException e) {\n LOG.error(e);\n }\n\nA quick-fix is available to make the code more compact:\n\n\n try {\n doSmth();\n }\n catch (IOException | URISyntaxException e) {\n LOG.error(e);\n }\n\nThis inspection only reports if the language level of the project or module is 7 or higher." + }, + { + "shortName": "Convert2Diamond", + "displayName": "Explicit type can be replaced with '<>'", + "enabled": false, + "description": "Reports `new` expressions with type arguments that can be replaced a with diamond type `<>`.\n\nExample:\n\n\n List list = new ArrayList(); // reports array list type argument\n\nAfter the quick-fix is applied:\n\n\n List list = new ArrayList<>();\n\nThis inspection only reports if the language level of the project or module is 7 or higher." + }, + { + "shortName": "TryFinallyCanBeTryWithResources", + "displayName": "'try finally' can be replaced with 'try' with resources", + "enabled": false, + "description": "Reports `try`-`finally` statements that can use Java 7 Automatic Resource Management, which is less error-prone.\n\nA quick-fix is available to convert a `try`-`finally`\nstatement into a `try`-with-resources statement.\n\n**Example:**\n\n\n PrintStream printStream = new PrintStream(fileName);\n try {\n printStream.print(true);\n } finally {\n printStream.close();\n }\n\nA quick-fix is provided to pass the cause to a constructor:\n\n\n try (PrintStream printStream = new PrintStream(fileName)) {\n printStream.print(true);\n }\n\nThis inspection only reports if the language level of the project or module is 7 or higher." + } + ] + }, + { + "name": "Version control", + "inspections": [ + { + "shortName": "IgnoreFileDuplicateEntry", + "displayName": "Ignore file duplicates", + "enabled": false, + "description": "Reports duplicate entries (patterns) in the ignore file (e.g. .gitignore, .hgignore). Duplicate entries in these files are redundant and can be removed.\n\nExample:\n\n```\n # Output directories\n /out/\n /target/\n /out/\n```" + } + ] + }, + { + "name": "Gradle", + "inspections": [ + { + "shortName": "GradleKotlinxCoroutinesDeprecation", + "displayName": "Incompatible kotlinx.coroutines dependency is used with Kotlin 1.3+ in Gradle", + "enabled": true, + "description": "Reports `kotlinx.coroutines` library dependencies in Gradle that should be updated to be compatible with Kotlin 1.3+.\n\n**Example:**\n\n\n dependencies {\n implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.0.1'\n }\n\nThe quick fix changes the `kotlinx.coroutines` library version to a compatible with Kotlin 1.3:\n\n\n dependencies {\n implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.27.0-eap13'\n }\n" + } + ] + }, + { + "name": "Nullability problems", + "inspections": [ + { + "shortName": "NullableProblems", + "displayName": "@NotNull/@Nullable problems", + "enabled": false, + "description": "Reports problems related to nullability annotations.\n\n**Examples:**\n\n* Overriding methods are not annotated:\n\n\n abstract class A {\n @NotNull abstract String m();\n }\n class B extends A {\n String m() { return \"empty string\"; }\n }\n \n* Annotated primitive types: `@NotNull int myFoo;`\n* Both `@Nullable` and `@NotNull` are present on the same member: `@Nullable @NotNull String myFooString;`\n* Collection of nullable elements is assigned into a collection of non-null elements:\n\n\n void testList(List<@Nullable String> nullableList) {\n List<@NotNull String> list2 = nullableList;\n }\n \nUse the **Configure Annotations** button to specify nullability annotations and the checkboxes to fine-tune where the inspection should provide warnings.\n\nThis inspection only reports if the language level of the project or module is 5 or higher,\nand nullability annotations are available on the classpath." + }, + { + "shortName": "ReturnNull", + "displayName": "Return of 'null'", + "enabled": false, + "description": "Reports `return` statements with `null` return values. While occasionally useful, this construct may make the code more prone to failing with a `NullPointerException`.\n\n\nIf a method is designed to return `null`, it is suggested to mark it with the\n`@Nullable` annotation - such methods will be ignored by this inspection.\n\n**Example:**\n\n\n class Person {\n public String getName () {\n return null;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Person {\n @Nullable\n public String getName () {\n return null;\n }\n }\n\n\nIf the return type is `java.util.Optional`, an additional quick-fix to convert\n`null` to `Optional.empty()` is suggested.\n\n\nUse the following options to configure the inspection:\n\n* Whether to ignore `private` methods. This will also ignore return of `null` from anonymous classes and lambdas.\n* Whether `null` values on array returns, collection object returns, plain object returns, or a combination of the three should be reported. Return of `null` in methods with return type `java.util.Optional` are always reported.\n* Click **Configure annotations** to specify which annotations should be considered 'nullable'." + }, + { + "shortName": "NotNullFieldNotInitialized", + "displayName": "@NotNull field is not initialized", + "enabled": false, + "description": "Reports fields annotated as not-null that are not initialized in the constructor.\n\nExample:\n\n public class MyClass {\n private @NotNull String value;\n\n public void setValue(@NotNull String value) {\n this.value = value;\n }\n\n public @NotNull String getValue() {\n return value;\n }\n }\n\n\nSuch fields may violate the not-null constraint. In the example above, the `setValue` parameter is annotated as not-null, but\n`getValue` may return null if the setter was not called.\n\nConfigure the inspection:\n\n* Use the **Ignore fields which could be initialized implicitly** option to control whether a warning should be issued if the field could be initialized implicitly (e.g. via a dependency injection).\n* Use the **Ignore fields initialized in setUp() method** option to control whether a warning should be issued if the field is written in the test case `setUp()` method." + }, + { + "shortName": "UnsatisfiedRange", + "displayName": "Return value is outside of declared range", + "enabled": false, + "description": "Reports numeric values returned from methods that don't conform to the declared method return range. You can declare method return range using a number of annotations:\n\n* `org.jetbrains.annotations.Range` from JetBrains annotations package (specify 'from' and 'to')\n* `org.checkerframework.common.value.qual.IntRange` from Checker Framework annotations package (specify 'from' and 'to')\n* `org.checkerframework.checker.index.qual.GTENegativeOne` from Checker Framework annotations package (range is '\\>= -1')\n* `org.checkerframework.checker.index.qual.NonNegative` from Checker Framework annotations package (range is '\\>= 0')\n* `org.checkerframework.checker.index.qual.Positive` from Checker Framework annotations package (range is '\\> 0')\n* `javax.annotation.Nonnegative` from JSR 305 annotations package (range is '\\>= 0')\n* `javax.validation.constraints.Min` (specify minimum value)\n* `javax.validation.constraints.Max` (specify maximum value)\n\nExample:\n\n\n @Range(from = 0, to = Integer.MAX_VALUE) int getValue() {\n // Warning: -1 is outside of declared range\n return -1;\n }\n\nNew in 2021.2" + } + ] + }, + { + "name": "Structural search", + "inspections": [ + { + "shortName": "SSBasedInspection", + "displayName": "Structural search inspection", + "enabled": true, + "description": "Allows configuring **Structural Search/Structural Replace** templates that you can apply to the file you are editing.\n\nAll matches will be highlighted and marked with the template name that you have configured.\nIf you configure the **Structural Replace** pattern as well, the corresponding replace option will be available as a quick-fix." + } + ] + }, + { + "name": "toString() issues", + "inspections": [ + { + "shortName": "FieldNotUsedInToString", + "displayName": "Field not used in 'toString()' method", + "enabled": false, + "description": "Reports any fields that are not used in the `toString()` method of a class.\n\nThis inspection can help discover the\nfields that were added after the `toString()` method was created and for which the `toString()` method was not\nupdated. The quick-fix regenerates the `toString()` method.\n\n\nIn the **Generate \\| toString()** dialog, it is possible to exclude fields from this check.\nThis inspection will also check for problems with getter methods if the *Enable getters in code generation* option is enabled there.\n\nExample:\n\n\n public class Relevant {\n private String name; // not used in toString()\n private int index;\n private int length;\n\n @Override\n public String toString() {\n return \"Relevant{\" + \"index=\" + index +\n \", length=\" + length + '}';\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class Relevant {\n private String name;\n private int index;\n private int length;\n\n @Override\n public String toString() {\n return \"Relevant{\" + \"name='\" + name + '\\'' +\n \", index=\" + index + \", length=\" + length + '}';\n }\n }\n" + }, + { + "shortName": "ClassHasNoToStringMethod", + "displayName": "Class does not override 'toString()' method", + "enabled": false, + "description": "Reports classes without a `toString()` method." + } + ] + }, + { + "name": "RELAX NG", + "inspections": [ + { + "shortName": "UnresolvedReference", + "displayName": "Unresolved reference", + "enabled": false, + "description": "Reports an unresolved reference to a named pattern (`define`) in RELAX-NG files that use XML syntax. Suggests creating the referenced `define` element." + }, + { + "shortName": "UnusedDefine", + "displayName": "Unused define", + "enabled": false, + "description": "Reports an unused named pattern (`define`) in a RELAX-NG file (XML or Compact Syntax). `define` elements that are used through an include in another file are ignored." + } + ] + }, + { + "name": "Java 11", + "inspections": [ + { + "shortName": "ReadWriteStringCanBeUsed", + "displayName": "'Files.readString()' or 'Files.writeString()' can be used", + "enabled": false, + "description": "Reports method calls that read or write a `String` as bytes using `java.nio.file.Files`. Such calls can be replaced with a call to a `Files.readString()` or `Files.writeString()` method introduced in Java 11.\n\n**Example:**\n\n\n String s = \"example\";\n Files.write(Paths.get(\"out.txt\"), s.getBytes(StandardCharsets.UTF_8), StandardOpenOption.WRITE);\n s = new String(Files.readAllBytes(Paths.get(\"in.txt\")), StandardCharsets.ISO_8859_1);\n\nAfter the quick fix is applied:\n\n\n String s = \"example\";\n Files.writeString(Paths.get(\"out.txt\"), s, StandardOpenOption.WRITE);\n s = Files.readString(Paths.get(\"in.txt\"), StandardCharsets.ISO_8859_1);\n\nNew in 2018.3" + }, + { + "shortName": "StringRepeatCanBeUsed", + "displayName": "String.repeat() can be used", + "enabled": false, + "description": "Reports loops that can be replaced with a single `String.repeat()` method (available since Java 11).\n\n**Example:**\n\n\n void append(StringBuilder sb, int count, Object obj) {\n for (int i = 0; i < count; i++) {\n sb.append(obj);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n void append(StringBuilder sb, int count, Object obj) {\n sb.append(String.valueOf(obj).repeat(Math.max(0, count)));\n }\n\n\nBy default, the inspection may wrap `count` with `Math.max(0, count)` if it cannot prove statically that `count` is\nnot negative. This is done to prevent possible semantics change, as `String.repeat()` rejects negative numbers.\nUse the **Add Math.max(0,count) to avoid possible semantics change** option to disable this behavior if required.\n\nSimilarly, a string you want to repeat can be wrapped in\n`String.valueOf` to prevent possible `NullPointerException` if it's unknown whether it can be `null`.\n\nThis inspection only reports if the language level of the project or module is 11 or higher.\n\nNew in 2019.1" + } + ] + }, + { + "name": "Best practises", + "inspections": [ + { + "shortName": "ConfigurationAvoidance", + "displayName": "Configuration avoidance", + "enabled": false, + "description": "(Gradle 4.9+) Detects usage of API that interacts with tasks eagerly.\nEager interaction with tasks implies some invonveniences:\n\n* The user should manually set up all dependencies between tasks;\n* In the [configuration phase](https://docs.gradle.org/current/userguide/build_lifecycle.html#sec:build_phases), all the tasks accessed via the eager API become configured, even if they are not executed afterwards. It results in performance degradation.\n\nEventually, the eager API will be deprecated in favor of the lazy one. \n[See Gradle documentation for migration guide.](https://docs.gradle.org/current/userguide/task_configuration_avoidance.html)\n\n**Example:**\n\n\n task foo { // reports 'task', suggests replacing it with 'task.register'\n // ...\n }\n" + } + ] + } + ] +} \ No newline at end of file diff --git a/reports-generated/code-quality/results/metaInformation.json b/reports-generated/code-quality/results/metaInformation.json new file mode 100644 index 00000000..8368700a --- /dev/null +++ b/reports-generated/code-quality/results/metaInformation.json @@ -0,0 +1,19 @@ +{ + "total": 20, + "tools inspection": { + "Code Inspection": 20 + }, + "linter": "QDJVMC", + "attributes": { + "vcs": { + "sarifIdea": { + "repositoryUri": "https://github.com/JavierSegoviaCordoba/semver-gradle-plugin.git", + "revisionId": "d4e66d8d570a2333ba9bad0a2f09cb9f218c7063", + "branch": "main" + } + }, + "deviceId": "200820300000000-3932-f0c5-1d0e-714296d476a3", + "jobUrl": "https://github.com/JavierSegoviaCordoba/semver-gradle-plugin/actions/runs/4393523897", + "repoUrl": "https://github.com/JavierSegoviaCordoba/semver-gradle-plugin.git" + } +} \ No newline at end of file diff --git a/reports-generated/code-quality/results/projectStructure/Code_Inspection.json b/reports-generated/code-quality/results/projectStructure/Code_Inspection.json new file mode 100644 index 00000000..b34c2781 --- /dev/null +++ b/reports-generated/code-quality/results/projectStructure/Code_Inspection.json @@ -0,0 +1,3478 @@ +{ + "modules": [ + { + "name": "semver-gradle-plugin-project", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$", + "sourceFolders": [] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-gradle-plugin", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-gradle-plugin", + "sourceFolders": [] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin", + "sourceFolders": [] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-settings-gradle-plugin", + "sourceFolders": [] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-gradle-plugin.test", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-gradle-plugin/test", + "sourceFolders": [] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "semver-gradle-plugin-project.semver-gradle-plugin.main", + "type": "Module" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-test-kit-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "type": "Library" + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "type": "Library" + }, + { + "name": "/data/project/semver-gradle-plugin/build/pluginUnderTestMetadata", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-gradle-plugin.main", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-gradle-plugin/main", + "sourceFolders": [ + { + "path": "file://$PROJECT_DIR$/semver-gradle-plugin/main/kotlin", + "type": "Source", + "packagePrefix": "" + } + ] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.test", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/test", + "sourceFolders": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/test/kotlin", + "type": "TestSource", + "packagePrefix": "" + } + ] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-test-kit-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.8.10", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "type": "Library" + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "type": "Library" + }, + { + "name": "/data/project/semver-project-gradle-plugin/build/pluginUnderTestMetadata", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFixtures", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/testFixtures", + "sourceFolders": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/testFixtures/kotlin", + "type": "Source", + "packagePrefix": "" + } + ] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-test-kit-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.7.20", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.7.20", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.7.20", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/testFunctional", + "sourceFolders": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/testFunctional/kotlin", + "type": "Source", + "packagePrefix": "" + }, + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/testFunctional/resources", + "type": "Resource", + "packagePrefix": "" + } + ] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-test-kit-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "type": "Library" + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "type": "Library" + }, + { + "name": "/data/project/semver-project-gradle-plugin/build/pluginUnderTestMetadata", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/main", + "sourceFolders": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/main/kotlin", + "type": "Source", + "packagePrefix": "" + } + ] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testIntegration", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/testIntegration", + "sourceFolders": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/testIntegration/kotlin", + "type": "Source", + "packagePrefix": "" + } + ] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-test-kit-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "type": "Library" + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "type": "Library" + }, + { + "name": "/data/project/semver-project-gradle-plugin/build/pluginUnderTestMetadata", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.test", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-settings-gradle-plugin/test", + "sourceFolders": [] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-test-kit-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.8.10", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "type": "Library" + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "type": "Library" + }, + { + "name": "/data/project/semver-settings-gradle-plugin/build/pluginUnderTestMetadata", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testFixtures", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-settings-gradle-plugin/testFixtures", + "sourceFolders": [] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-test-kit-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.7.20", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.7.20", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.7.20", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testFunctional", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-settings-gradle-plugin/testFunctional", + "sourceFolders": [ + { + "path": "file://$PROJECT_DIR$/semver-settings-gradle-plugin/testFunctional/kotlin", + "type": "Source", + "packagePrefix": "" + }, + { + "path": "file://$PROJECT_DIR$/semver-settings-gradle-plugin/testFunctional/resources", + "type": "Resource", + "packagePrefix": "" + } + ] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-test-kit-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "type": "Library" + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "type": "Library" + }, + { + "name": "/data/project/semver-settings-gradle-plugin/build/pluginUnderTestMetadata", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-settings-gradle-plugin/main", + "sourceFolders": [ + { + "path": "file://$PROJECT_DIR$/semver-settings-gradle-plugin/main/kotlin", + "type": "Source", + "packagePrefix": "" + } + ] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testIntegration", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-settings-gradle-plugin/testIntegration", + "sourceFolders": [] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-test-kit-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "type": "Library" + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "type": "Library" + }, + { + "name": "/data/project/semver-settings-gradle-plugin/build/pluginUnderTestMetadata", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "type": "Library" + } + ] + } + ] +} \ No newline at end of file diff --git a/reports-generated/code-quality/results/projectStructure/Gradle.json b/reports-generated/code-quality/results/projectStructure/Gradle.json new file mode 100644 index 00000000..295b4876 --- /dev/null +++ b/reports-generated/code-quality/results/projectStructure/Gradle.json @@ -0,0 +1,365 @@ +{ + "gradleJvm": "#JAVA_HOME", + "libraries": [ + { + "ideaName": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "gradleName": "com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "unresolved": false, + "groupId": "com.javiersc.gradle", + "artifactId": "gradle-extensions", + "version": "1.0.0-alpha.30" + }, + { + "ideaName": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "gradleName": "com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "unresolved": false, + "groupId": "com.javiersc.gradle", + "artifactId": "gradle-test-extensions", + "version": "1.0.0-alpha.30" + }, + { + "ideaName": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "gradleName": "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "unresolved": false, + "groupId": "org.jetbrains.kotlin", + "artifactId": "kotlin-stdlib-jdk8", + "version": "1.8.10" + }, + { + "ideaName": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "gradleName": "org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "unresolved": false, + "groupId": "org.eclipse.jgit", + "artifactId": "org.eclipse.jgit", + "version": "6.5.0.202303070854-r" + }, + { + "ideaName": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.8.10", + "gradleName": "org.jetbrains.kotlin:kotlin-test-junit5:1.8.10", + "unresolved": false, + "groupId": "org.jetbrains.kotlin", + "artifactId": "kotlin-test-junit5", + "version": "1.8.10" + }, + { + "ideaName": "Gradle: org.jetbrains.kotlin:kotlin-test:1.8.10", + "gradleName": "org.jetbrains.kotlin:kotlin-test:1.8.10", + "unresolved": false, + "groupId": "org.jetbrains.kotlin", + "artifactId": "kotlin-test", + "version": "1.8.10" + }, + { + "ideaName": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.8.10", + "gradleName": "org.jetbrains.kotlin:kotlin-test-annotations-common:1.8.10", + "unresolved": false, + "groupId": "org.jetbrains.kotlin", + "artifactId": "kotlin-test-annotations-common", + "version": "1.8.10" + }, + { + "ideaName": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "gradleName": "com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "unresolved": false, + "groupId": "com.javiersc.semver", + "artifactId": "semver-core-jvm", + "version": "0.1.0-beta.13" + }, + { + "ideaName": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "gradleName": "com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "unresolved": false, + "groupId": "com.javiersc.gradle", + "artifactId": "gradle-delegated-properties-extensions", + "version": "1.0.0-alpha.30" + }, + { + "ideaName": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "gradleName": "com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "unresolved": false, + "groupId": "com.javiersc.gradle", + "artifactId": "gradle-logging-extensions", + "version": "1.0.0-alpha.30" + }, + { + "ideaName": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "gradleName": "com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "unresolved": false, + "groupId": "com.javiersc.gradle", + "artifactId": "gradle-miscellanea-extensions", + "version": "1.0.0-alpha.30" + }, + { + "ideaName": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "gradleName": "com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "unresolved": false, + "groupId": "com.javiersc.gradle", + "artifactId": "gradle-plugin-extensions", + "version": "1.0.0-alpha.30" + }, + { + "ideaName": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "gradleName": "com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "unresolved": false, + "groupId": "com.javiersc.gradle", + "artifactId": "gradle-project-extensions", + "version": "1.0.0-alpha.30" + }, + { + "ideaName": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "gradleName": "com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "unresolved": false, + "groupId": "com.javiersc.gradle", + "artifactId": "gradle-properties-extensions", + "version": "1.0.0-alpha.30" + }, + { + "ideaName": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "gradleName": "com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "unresolved": false, + "groupId": "com.javiersc.gradle", + "artifactId": "gradle-tasks-extensions", + "version": "1.0.0-alpha.30" + }, + { + "ideaName": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "gradleName": "com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "unresolved": false, + "groupId": "com.javiersc.gradle", + "artifactId": "gradle-version-catalog-extensions", + "version": "1.0.0-alpha.30" + }, + { + "ideaName": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "gradleName": "com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "unresolved": false, + "groupId": "com.javiersc.gradle", + "artifactId": "gradle-project-test-extensions", + "version": "1.0.0-alpha.30" + }, + { + "ideaName": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "gradleName": "com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "unresolved": false, + "groupId": "com.javiersc.gradle", + "artifactId": "gradle-testkit-test-extensions", + "version": "1.0.0-alpha.30" + }, + { + "ideaName": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "gradleName": "com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "unresolved": false, + "groupId": "com.javiersc.gradle", + "artifactId": "gradle-common-test-extensions", + "version": "1.0.0-alpha.30" + }, + { + "ideaName": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "gradleName": "com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "unresolved": false, + "groupId": "com.javiersc.kotlin", + "artifactId": "kotlin-stdlib-jvm", + "version": "0.1.0-alpha.12" + }, + { + "ideaName": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "gradleName": "com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "unresolved": false, + "groupId": "com.javiersc.kotlin", + "artifactId": "kotlin-test-junit5-jvm", + "version": "0.1.0-alpha.12" + }, + { + "ideaName": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "gradleName": "io.kotest:kotest-assertions-core-jvm:5.5.4", + "unresolved": false, + "groupId": "io.kotest", + "artifactId": "kotest-assertions-core-jvm", + "version": "5.5.4" + }, + { + "ideaName": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "gradleName": "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "unresolved": false, + "groupId": "org.jetbrains.kotlin", + "artifactId": "kotlin-stdlib-jdk7", + "version": "1.8.10" + }, + { + "ideaName": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "gradleName": "org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "unresolved": false, + "groupId": "org.jetbrains.kotlin", + "artifactId": "kotlin-stdlib", + "version": "1.8.10" + }, + { + "ideaName": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "gradleName": "com.googlecode.javaewah:JavaEWAH:1.1.13", + "unresolved": false, + "groupId": "com.googlecode.javaewah", + "artifactId": "JavaEWAH", + "version": "1.1.13" + }, + { + "ideaName": "Gradle: org.slf4j:slf4j-api:1.7.30", + "gradleName": "org.slf4j:slf4j-api:1.7.30", + "unresolved": false, + "groupId": "org.slf4j", + "artifactId": "slf4j-api", + "version": "1.7.30" + }, + { + "ideaName": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "gradleName": "org.junit.jupiter:junit-jupiter-api:5.9.2", + "unresolved": false, + "groupId": "org.junit.jupiter", + "artifactId": "junit-jupiter-api", + "version": "5.9.2" + }, + { + "ideaName": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "gradleName": "org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "unresolved": false, + "groupId": "org.jetbrains.kotlin", + "artifactId": "kotlin-stdlib-common", + "version": "1.8.10" + }, + { + "ideaName": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "gradleName": "org.junit.jupiter:junit-jupiter-params:5.9.2", + "unresolved": false, + "groupId": "org.junit.jupiter", + "artifactId": "junit-jupiter-params", + "version": "5.9.2" + }, + { + "ideaName": "Gradle: org.jetbrains:annotations:13.0", + "gradleName": "org.jetbrains:annotations:13.0", + "unresolved": false, + "groupId": "org.jetbrains", + "artifactId": "annotations", + "version": "13.0" + }, + { + "ideaName": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "gradleName": "org.junit.platform:junit-platform-commons:1.9.2", + "unresolved": false, + "groupId": "org.junit.platform", + "artifactId": "junit-platform-commons", + "version": "1.9.2" + }, + { + "ideaName": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "gradleName": "org.apiguardian:apiguardian-api:1.1.2", + "unresolved": false, + "groupId": "org.apiguardian", + "artifactId": "apiguardian-api", + "version": "1.1.2" + }, + { + "ideaName": "Gradle: org.opentest4j:opentest4j:1.2.0", + "gradleName": "org.opentest4j:opentest4j:1.2.0", + "unresolved": false, + "groupId": "org.opentest4j", + "artifactId": "opentest4j", + "version": "1.2.0" + }, + { + "ideaName": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "gradleName": "io.kotest:kotest-assertions-shared-jvm:5.5.4", + "unresolved": false, + "groupId": "io.kotest", + "artifactId": "kotest-assertions-shared-jvm", + "version": "5.5.4" + }, + { + "ideaName": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "gradleName": "io.kotest:kotest-assertions-api-jvm:5.5.4", + "unresolved": false, + "groupId": "io.kotest", + "artifactId": "kotest-assertions-api-jvm", + "version": "5.5.4" + }, + { + "ideaName": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "gradleName": "org.junit.jupiter:junit-jupiter-engine:5.9.2", + "unresolved": false, + "groupId": "org.junit.jupiter", + "artifactId": "junit-jupiter-engine", + "version": "5.9.2" + }, + { + "ideaName": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "gradleName": "org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "unresolved": false, + "groupId": "org.jetbrains.kotlinx", + "artifactId": "kotlinx-coroutines-jdk8", + "version": "1.6.4" + }, + { + "ideaName": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "gradleName": "org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "unresolved": false, + "groupId": "org.jetbrains.kotlin", + "artifactId": "kotlin-reflect", + "version": "1.6.21" + }, + { + "ideaName": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "gradleName": "org.junit.platform:junit-platform-engine:1.9.2", + "unresolved": false, + "groupId": "org.junit.platform", + "artifactId": "junit-platform-engine", + "version": "1.9.2" + }, + { + "ideaName": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "gradleName": "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "unresolved": false, + "groupId": "org.jetbrains.kotlinx", + "artifactId": "kotlinx-coroutines-core-jvm", + "version": "1.6.4" + }, + { + "ideaName": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "gradleName": "io.kotest:kotest-common-jvm:5.5.4", + "unresolved": false, + "groupId": "io.kotest", + "artifactId": "kotest-common-jvm", + "version": "5.5.4" + }, + { + "ideaName": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "gradleName": "io.github.java-diff-utils:java-diff-utils:4.12", + "unresolved": false, + "groupId": "io.github.java-diff-utils", + "artifactId": "java-diff-utils", + "version": "4.12" + }, + { + "ideaName": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.7.20", + "gradleName": "org.jetbrains.kotlin:kotlin-test-junit5:1.7.20", + "unresolved": false, + "groupId": "org.jetbrains.kotlin", + "artifactId": "kotlin-test-junit5", + "version": "1.7.20" + }, + { + "ideaName": "Gradle: org.jetbrains.kotlin:kotlin-test:1.7.20", + "gradleName": "org.jetbrains.kotlin:kotlin-test:1.7.20", + "unresolved": false, + "groupId": "org.jetbrains.kotlin", + "artifactId": "kotlin-test", + "version": "1.7.20" + }, + { + "ideaName": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.7.20", + "gradleName": "org.jetbrains.kotlin:kotlin-test-annotations-common:1.7.20", + "unresolved": false, + "groupId": "org.jetbrains.kotlin", + "artifactId": "kotlin-test-annotations-common", + "version": "1.7.20" + } + ] +} \ No newline at end of file diff --git a/reports-generated/code-quality/results/projectStructure/Java.json b/reports-generated/code-quality/results/projectStructure/Java.json new file mode 100644 index 00000000..9ee83480 --- /dev/null +++ b/reports-generated/code-quality/results/projectStructure/Java.json @@ -0,0 +1,68 @@ +{ + "modules": [ + { + "name": "semver-gradle-plugin-project", + "languageLevel": 17 + }, + { + "name": "semver-gradle-plugin-project.semver-gradle-plugin", + "languageLevel": 17 + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin", + "languageLevel": 17 + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin", + "languageLevel": 17 + }, + { + "name": "semver-gradle-plugin-project.semver-gradle-plugin.test", + "languageLevel": 8 + }, + { + "name": "semver-gradle-plugin-project.semver-gradle-plugin.main", + "languageLevel": 8 + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.test", + "languageLevel": 8 + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFixtures", + "languageLevel": 8 + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "languageLevel": 8 + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "languageLevel": 8 + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testIntegration", + "languageLevel": 8 + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.test", + "languageLevel": 8 + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testFixtures", + "languageLevel": 8 + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testFunctional", + "languageLevel": 8 + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "languageLevel": 8 + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testIntegration", + "languageLevel": 8 + } + ] +} \ No newline at end of file diff --git a/reports-generated/code-quality/results/projectStructure/Libraries.json b/reports-generated/code-quality/results/projectStructure/Libraries.json new file mode 100644 index 00000000..0a65dee6 --- /dev/null +++ b/reports-generated/code-quality/results/projectStructure/Libraries.json @@ -0,0 +1,282 @@ +{ + "libraries": [ + { + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.gradle/gradle-extensions/1.0.0-alpha.30/bd787b61a21a01fc7388c157c998f313d1aec902/gradle-extensions-1.0.0-alpha.30.jar!/" + ] + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk8/1.8.10/7c002ac41f547a82e81dfebd2a20577a738dbf3f/kotlin-stdlib-jdk8-1.8.10.jar!/" + ] + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.eclipse.jgit/org.eclipse.jgit/6.5.0.202303070854-r/a846f632cf00da830745b721807d05ddf3e0790f/org.eclipse.jgit-6.5.0.202303070854-r.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.semver/semver-core-jvm/0.1.0-beta.13/bdf2990069aed3ae53c9427407828185d1b370aa/semver-core-jvm-0.1.0-beta.13.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.gradle/gradle-delegated-properties-extensions/1.0.0-alpha.30/d53f3904047c3d078ec00b88d2d455573f954358/gradle-delegated-properties-extensions-1.0.0-alpha.30.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.gradle/gradle-logging-extensions/1.0.0-alpha.30/5913ec11c149bf8a4977cfdb4b82258fea3c333b/gradle-logging-extensions-1.0.0-alpha.30.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.gradle/gradle-miscellanea-extensions/1.0.0-alpha.30/2a8ff43ec6d131665af8cea2be412ab5f4192e26/gradle-miscellanea-extensions-1.0.0-alpha.30.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.gradle/gradle-plugin-extensions/1.0.0-alpha.30/ce91f9a4f00b327bb7bc4ea4c46d1f9b7d519ec8/gradle-plugin-extensions-1.0.0-alpha.30.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.gradle/gradle-project-extensions/1.0.0-alpha.30/50afef26ad6e5ddcad92fcdaae72312fc3d5a5fd/gradle-project-extensions-1.0.0-alpha.30.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.gradle/gradle-properties-extensions/1.0.0-alpha.30/211ebbb6d90145fa6278d472d0f82b40e100893f/gradle-properties-extensions-1.0.0-alpha.30.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.gradle/gradle-tasks-extensions/1.0.0-alpha.30/446b15b3b5fbefb5288a48f1f3238e17be80b872/gradle-tasks-extensions-1.0.0-alpha.30.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.gradle/gradle-version-catalog-extensions/1.0.0-alpha.30/2a371939b6041c2f0268c972ea3a362a56a4677e/gradle-version-catalog-extensions-1.0.0-alpha.30.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.kotlin/kotlin-stdlib-jvm/0.1.0-alpha.12/f93a78fce811a650444ae373d760afeccee997c1/kotlin-stdlib-jvm-0.1.0-alpha.12.jar!/" + ] + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.8.10/cb726a23c808a850a43e7d6b9d1ba91b02fe9f05/kotlin-stdlib-jdk7-1.8.10.jar!/" + ] + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.8.10/6d5560a229477df9406943d5feda5618e98eb64c/kotlin-stdlib-1.8.10.jar!/" + ] + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.googlecode.javaewah/JavaEWAH/1.1.13/32cd724a42dc73f99ca08453d11a4bb83e0034c7/JavaEWAH-1.1.13.jar!/" + ] + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-api/1.7.30/b5a4b6d16ab13e34a88fae84c35cd5d68cac922c/slf4j-api-1.7.30.jar!/" + ] + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.8.10/a61b182458550492c12aee66157d7b524a63a5ec/kotlin-stdlib-common-1.8.10.jar!/" + ], + "properties": {} + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar!/" + ] + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-coroutines-core-jvm/1.6.4/2c997cd1c0ef33f3e751d3831929aeff1390cb30/kotlinx-coroutines-core-jvm-1.6.4.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.gradle/gradle-test-extensions/1.0.0-alpha.30/dfa2f41310a452861f870a080b3d468b3188096b/gradle-test-extensions-1.0.0-alpha.30.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.gradle/gradle-project-test-extensions/1.0.0-alpha.30/da8a056fd896762d98936034a02df0e58db96bc2/gradle-project-test-extensions-1.0.0-alpha.30.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.gradle/gradle-testkit-test-extensions/1.0.0-alpha.30/ffa8f200cb5863eb585f6e9cb687e0b8a734f994/gradle-testkit-test-extensions-1.0.0-alpha.30.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.gradle/gradle-common-test-extensions/1.0.0-alpha.30/be5973b8acaa4e953845ee74a8879e58e20850db/gradle-common-test-extensions-1.0.0-alpha.30.jar!/" + ] + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/com.javiersc.kotlin/kotlin-test-junit5-jvm/0.1.0-alpha.12/d01166fcd46dcc4ea1366829613abb60bc0ff0ce/kotlin-test-junit5-jvm-0.1.0-alpha.12.jar!/" + ] + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/io.kotest/kotest-assertions-core-jvm/5.5.4/ab40f3267df9c8c6ce68b3ab7f708bcd4a8748a4/kotest-assertions-core-jvm-5.5.4.jar!/" + ] + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.junit.jupiter/junit-jupiter-params/5.9.2/bc2765afb7b85b583c710dd259a11c6b8c39e912/junit-jupiter-params-5.9.2.jar!/" + ] + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.junit.jupiter/junit-jupiter-api/5.9.2/fed843581520eac594bc36bb4b0f55e7b947dda9/junit-jupiter-api-5.9.2.jar!/" + ] + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.apiguardian/apiguardian-api/1.1.2/a231e0d844d2721b0fa1b238006d15c6ded6842a/apiguardian-api-1.1.2.jar!/" + ] + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.junit.platform/junit-platform-commons/1.9.2/6f9f8621d8230cd38aa42e58ccbc0c00569131ce/junit-platform-commons-1.9.2.jar!/" + ] + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.opentest4j/opentest4j/1.2.0/28c11eb91f9b6d8e200631d46e20a7f407f2a046/opentest4j-1.2.0.jar!/" + ] + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/io.kotest/kotest-assertions-shared-jvm/5.5.4/bb14c2e2e6ec60eb16a3ea33dd6ba4e24bef6986/kotest-assertions-shared-jvm-5.5.4.jar!/" + ] + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/io.kotest/kotest-assertions-api-jvm/5.5.4/119bff97e591506fbe708ca75f6ef2cf500e0abb/kotest-assertions-api-jvm-5.5.4.jar!/" + ] + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.7.20", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-test-junit5/1.7.20/262797b12ea731ca9a58a5a992d5deb8a55e0834/kotlin-test-junit5-1.7.20.jar!/" + ] + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.7.20", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-test/1.7.20/1cfae9a58285c1bafb4ad0bd1b27406d97a2623c/kotlin-test-1.7.20.jar!/" + ] + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.7.20", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-test-annotations-common/1.7.20/cc5fb934384fc3eaf58fbd24c3ee5d1b850c481/kotlin-test-annotations-common-1.7.20.jar!/" + ], + "properties": {} + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-coroutines-jdk8/1.6.4/5bc4b0bf6fd90fc190fd2f17e919c74c6274cb71/kotlinx-coroutines-jdk8-1.6.4.jar!/" + ] + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-reflect/1.6.21/5dc3574d9b7bebfcb4ec6b10ada4aaa9e140bd0b/kotlin-reflect-1.6.21.jar!/" + ] + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.junit.jupiter/junit-jupiter-engine/5.9.2/572f7a553b53f83ee59cc045ce1c3772864ab76c/junit-jupiter-engine-5.9.2.jar!/" + ] + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/io.kotest/kotest-common-jvm/5.5.4/4778924a952debb650c4ed34c86c4dc582c63fcc/kotest-common-jvm-5.5.4.jar!/" + ] + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.junit.platform/junit-platform-engine/1.9.2/40aeef2be7b04f96bb91e8b054affc28b7c7c935/junit-platform-engine-1.9.2.jar!/" + ] + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/io.github.java-diff-utils/java-diff-utils/4.12/1a712a91324d566eef39817fc5c9980eb10c21db/java-diff-utils-4.12.jar!/" + ] + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.8.10", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-test-junit5/1.8.10/d4f30f551c4edcc9eb1ce87272b66dd9d0816052/kotlin-test-junit5-1.8.10.jar!/" + ] + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.8.10", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-test/1.8.10/5fd889abbc164b0a080a7a3314627bd796315421/kotlin-test-1.8.10.jar!/" + ] + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.8.10", + "roots": [ + "jar://$PROJECT_DIR$/../cache/gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-test-annotations-common/1.8.10/b3015327d703b67b7450bf6714e3854d7130efdc/kotlin-test-annotations-common-1.8.10.jar!/" + ], + "properties": {} + } + ] +} \ No newline at end of file diff --git a/reports-generated/code-quality/results/projectStructure/Maven.json b/reports-generated/code-quality/results/projectStructure/Maven.json new file mode 100644 index 00000000..949933b6 --- /dev/null +++ b/reports-generated/code-quality/results/projectStructure/Maven.json @@ -0,0 +1,3 @@ +{ + "libraries": [] +} \ No newline at end of file diff --git a/reports-generated/code-quality/results/projectStructure/Modules.json b/reports-generated/code-quality/results/projectStructure/Modules.json new file mode 100644 index 00000000..b34c2781 --- /dev/null +++ b/reports-generated/code-quality/results/projectStructure/Modules.json @@ -0,0 +1,3478 @@ +{ + "modules": [ + { + "name": "semver-gradle-plugin-project", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$", + "sourceFolders": [] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-gradle-plugin", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-gradle-plugin", + "sourceFolders": [] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin", + "sourceFolders": [] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-settings-gradle-plugin", + "sourceFolders": [] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-gradle-plugin.test", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-gradle-plugin/test", + "sourceFolders": [] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "semver-gradle-plugin-project.semver-gradle-plugin.main", + "type": "Module" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-test-kit-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "type": "Library" + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "type": "Library" + }, + { + "name": "/data/project/semver-gradle-plugin/build/pluginUnderTestMetadata", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-gradle-plugin.main", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-gradle-plugin/main", + "sourceFolders": [ + { + "path": "file://$PROJECT_DIR$/semver-gradle-plugin/main/kotlin", + "type": "Source", + "packagePrefix": "" + } + ] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.test", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/test", + "sourceFolders": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/test/kotlin", + "type": "TestSource", + "packagePrefix": "" + } + ] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-test-kit-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.8.10", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "type": "Library" + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "type": "Library" + }, + { + "name": "/data/project/semver-project-gradle-plugin/build/pluginUnderTestMetadata", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFixtures", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/testFixtures", + "sourceFolders": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/testFixtures/kotlin", + "type": "Source", + "packagePrefix": "" + } + ] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-test-kit-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.7.20", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.7.20", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.7.20", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/testFunctional", + "sourceFolders": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/testFunctional/kotlin", + "type": "Source", + "packagePrefix": "" + }, + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/testFunctional/resources", + "type": "Resource", + "packagePrefix": "" + } + ] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-test-kit-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "type": "Library" + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "type": "Library" + }, + { + "name": "/data/project/semver-project-gradle-plugin/build/pluginUnderTestMetadata", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/main", + "sourceFolders": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/main/kotlin", + "type": "Source", + "packagePrefix": "" + } + ] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testIntegration", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/testIntegration", + "sourceFolders": [ + { + "path": "file://$PROJECT_DIR$/semver-project-gradle-plugin/testIntegration/kotlin", + "type": "Source", + "packagePrefix": "" + } + ] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-test-kit-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "type": "Library" + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "type": "Library" + }, + { + "name": "/data/project/semver-project-gradle-plugin/build/pluginUnderTestMetadata", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.test", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-settings-gradle-plugin/test", + "sourceFolders": [] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-test-kit-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.8.10", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "type": "Library" + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "type": "Library" + }, + { + "name": "/data/project/semver-settings-gradle-plugin/build/pluginUnderTestMetadata", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testFixtures", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-settings-gradle-plugin/testFixtures", + "sourceFolders": [] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-test-kit-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.7.20", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.7.20", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.7.20", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testFunctional", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-settings-gradle-plugin/testFunctional", + "sourceFolders": [ + { + "path": "file://$PROJECT_DIR$/semver-settings-gradle-plugin/testFunctional/kotlin", + "type": "Source", + "packagePrefix": "" + }, + { + "path": "file://$PROJECT_DIR$/semver-settings-gradle-plugin/testFunctional/resources", + "type": "Resource", + "packagePrefix": "" + } + ] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-test-kit-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "type": "Library" + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "type": "Library" + }, + { + "name": "/data/project/semver-settings-gradle-plugin/build/pluginUnderTestMetadata", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-settings-gradle-plugin/main", + "sourceFolders": [ + { + "path": "file://$PROJECT_DIR$/semver-settings-gradle-plugin/main/kotlin", + "type": "Source", + "packagePrefix": "" + } + ] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + } + ] + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testIntegration", + "contentEntries": [ + { + "path": "file://$PROJECT_DIR$/semver-settings-gradle-plugin/testIntegration", + "sourceFolders": [] + } + ], + "orderEntries": [ + { + "name": "17", + "type": "SDK" + }, + { + "name": "", + "type": "Own sources" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-api-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-ant-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-astbuilder-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-console-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-datetime-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-dateutil-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-groovydoc-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-json-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-nio-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-sql-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-templates-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-test-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/groovy-xml-3.0.13.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/javaparser-core-3.17.0.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-common-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-reflect-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk7-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/kotlin-stdlib-jdk8-1.8.10.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-installation-beacon-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-kotlin-dsl-extensions-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/wrapper/dists/gradle-8.0.2-bin/25jlreiuz6u3xu2phlpa2vv4m/gradle-8.0.2/lib/gradle-kotlin-dsl-tooling-models-8.0.2.jar", + "type": "Library" + }, + { + "name": "/data/cache/gradle/caches/8.0.2/generated-gradle-jars/gradle-test-kit-8.0.2.jar", + "type": "Library" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.main", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testFixtures", + "type": "Module" + }, + { + "name": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "type": "Module" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.eclipse.jgit:org.eclipse.jgit:6.5.0.202303070854-r", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-junit5:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-delegated-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-logging-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-miscellanea-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-plugin-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-properties-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-tasks-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-version-catalog-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-project-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-testkit-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.gradle:gradle-common-test-extensions:1.0.0-alpha.30", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.semver:semver-core-jvm:0.1.0-beta.13", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-stdlib-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: com.javiersc.kotlin:kotlin-test-junit5-jvm:0.1.0-alpha.12", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-core-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: com.googlecode.javaewah:JavaEWAH:1.1.13", + "type": "Library" + }, + { + "name": "Gradle: org.slf4j:slf4j-api:1.7.30", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-api:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-params:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains:annotations:13.0", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-commons:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.opentest4j:opentest4j:1.2.0", + "type": "Library" + }, + { + "name": "Gradle: org.apiguardian:apiguardian-api:1.1.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-shared-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-assertions-api-jvm:5.5.4", + "type": "Library" + }, + { + "name": "/data/project/semver-settings-gradle-plugin/build/pluginUnderTestMetadata", + "type": "Library" + }, + { + "name": "Gradle: org.junit.jupiter:junit-jupiter-engine:5.9.2", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlin:kotlin-reflect:1.6.21", + "type": "Library" + }, + { + "name": "Gradle: org.junit.platform:junit-platform-engine:1.9.2", + "type": "Library" + }, + { + "name": "Gradle: io.kotest:kotest-common-jvm:5.5.4", + "type": "Library" + }, + { + "name": "Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4", + "type": "Library" + }, + { + "name": "Gradle: io.github.java-diff-utils:java-diff-utils:4.12", + "type": "Library" + } + ] + } + ] +} \ No newline at end of file diff --git a/reports-generated/code-quality/results/projectStructure/ProjectFingerprint.json b/reports-generated/code-quality/results/projectStructure/ProjectFingerprint.json new file mode 100644 index 00000000..114d4d5f --- /dev/null +++ b/reports-generated/code-quality/results/projectStructure/ProjectFingerprint.json @@ -0,0 +1,11 @@ +{ + "languages": [ + "Plain text", + "Properties", + "JSON", + ".gitignore (GitIgnore)", + "EditorConfig", + "Kotlin", + "XML" + ] +} \ No newline at end of file diff --git a/reports-generated/code-quality/results/projectStructure/SDKs.json b/reports-generated/code-quality/results/projectStructure/SDKs.json new file mode 100644 index 00000000..64cdbda4 --- /dev/null +++ b/reports-generated/code-quality/results/projectStructure/SDKs.json @@ -0,0 +1,69 @@ +{ + "sdks": [ + { + "name": "17", + "roots": [ + "jrt:///opt/idea/jbr!/gluegen.rt", + "jrt:///opt/idea/jbr!/java.base", + "jrt:///opt/idea/jbr!/java.compiler", + "jrt:///opt/idea/jbr!/java.datatransfer", + "jrt:///opt/idea/jbr!/java.desktop", + "jrt:///opt/idea/jbr!/java.instrument", + "jrt:///opt/idea/jbr!/java.logging", + "jrt:///opt/idea/jbr!/java.management", + "jrt:///opt/idea/jbr!/java.management.rmi", + "jrt:///opt/idea/jbr!/java.naming", + "jrt:///opt/idea/jbr!/java.net.http", + "jrt:///opt/idea/jbr!/java.prefs", + "jrt:///opt/idea/jbr!/java.rmi", + "jrt:///opt/idea/jbr!/java.scripting", + "jrt:///opt/idea/jbr!/java.se", + "jrt:///opt/idea/jbr!/java.security.jgss", + "jrt:///opt/idea/jbr!/java.security.sasl", + "jrt:///opt/idea/jbr!/java.smartcardio", + "jrt:///opt/idea/jbr!/java.sql", + "jrt:///opt/idea/jbr!/java.sql.rowset", + "jrt:///opt/idea/jbr!/java.transaction.xa", + "jrt:///opt/idea/jbr!/java.xml", + "jrt:///opt/idea/jbr!/java.xml.crypto", + "jrt:///opt/idea/jbr!/jcef", + "jrt:///opt/idea/jbr!/jdk.accessibility", + "jrt:///opt/idea/jbr!/jdk.attach", + "jrt:///opt/idea/jbr!/jdk.charsets", + "jrt:///opt/idea/jbr!/jdk.compiler", + "jrt:///opt/idea/jbr!/jdk.crypto.cryptoki", + "jrt:///opt/idea/jbr!/jdk.crypto.ec", + "jrt:///opt/idea/jbr!/jdk.dynalink", + "jrt:///opt/idea/jbr!/jdk.hotspot.agent", + "jrt:///opt/idea/jbr!/jdk.httpserver", + "jrt:///opt/idea/jbr!/jdk.internal.ed", + "jrt:///opt/idea/jbr!/jdk.internal.jvmstat", + "jrt:///opt/idea/jbr!/jdk.internal.le", + "jrt:///opt/idea/jbr!/jdk.internal.vm.ci", + "jrt:///opt/idea/jbr!/jdk.javadoc", + "jrt:///opt/idea/jbr!/jdk.jcmd", + "jrt:///opt/idea/jbr!/jdk.jdi", + "jrt:///opt/idea/jbr!/jdk.jdwp.agent", + "jrt:///opt/idea/jbr!/jdk.jfr", + "jrt:///opt/idea/jbr!/jdk.jsobject", + "jrt:///opt/idea/jbr!/jdk.localedata", + "jrt:///opt/idea/jbr!/jdk.management", + "jrt:///opt/idea/jbr!/jdk.management.agent", + "jrt:///opt/idea/jbr!/jdk.management.jfr", + "jrt:///opt/idea/jbr!/jdk.naming.dns", + "jrt:///opt/idea/jbr!/jdk.naming.rmi", + "jrt:///opt/idea/jbr!/jdk.net", + "jrt:///opt/idea/jbr!/jdk.sctp", + "jrt:///opt/idea/jbr!/jdk.security.auth", + "jrt:///opt/idea/jbr!/jdk.security.jgss", + "jrt:///opt/idea/jbr!/jdk.unsupported", + "jrt:///opt/idea/jbr!/jdk.unsupported.desktop", + "jrt:///opt/idea/jbr!/jdk.xml.dom", + "jrt:///opt/idea/jbr!/jdk.zipfs", + "jrt:///opt/idea/jbr!/jogl.all" + ], + "sdkType": "JavaSDK", + "sdkVersion": "java version \"17.0.6\"" + } + ] +} \ No newline at end of file diff --git a/reports-generated/code-quality/results/promo.json b/reports-generated/code-quality/results/promo.json new file mode 100644 index 00000000..2f8de996 --- /dev/null +++ b/reports-generated/code-quality/results/promo.json @@ -0,0 +1,757 @@ +{"version":"3","listProblem":[{ + "tool": "Code Inspection", + "category": "Naming conventions", + "type": "Function naming convention", + "severity": "Moderate", + "comment": "Function name '`stage and scope`' may contain only letters and digits", + "detailsInfo": "Reports function names that do not follow the recommended naming conventions.\n\n**Example:**\n\n\n fun Foo() {}\n\nTo fix the problem change the name of the function to match the recommended naming conventions.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/PropertiesTest.kt", + "language": "kotlin", + "line": 31, + "offset": 9, + "length": 17, + "code": { + "startLine": 29, + "length": 17, + "offset": 19, + "surroundingCode": "\n @Test\n fun `stage and scope`() {\n runPropertyTestsBasedOnResourceDirectory(\"stage+scope\")\n }" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "inspectionName": "FunctionName" + }, + "hash": "f782e6ee45aa92325959a273e7137f0770714d71b25fe640b34cc0d55f79dba6" +},{ + "tool": "Code Inspection", + "category": "Naming conventions", + "type": "Function naming convention", + "severity": "Moderate", + "comment": "Function name '`multi project test`' may contain only letters and digits", + "detailsInfo": "Reports function names that do not follow the recommended naming conventions.\n\n**Example:**\n\n\n fun Foo() {}\n\nTo fix the problem change the name of the function to match the recommended naming conventions.", + "sources": [ + { + "type": "file", + "path": "semver-settings-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/settings/gradle/plugin/MultiProjectTest.kt", + "language": "kotlin", + "line": 11, + "offset": 9, + "length": 20, + "code": { + "startLine": 9, + "length": 20, + "offset": 19, + "surroundingCode": "\n @Test\n fun `multi project test`() {\n gradleTestKitTest(\"multi-project\") {\n val git = Git.init().setDirectory(projectDir).call()" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testFunctional", + "inspectionName": "FunctionName" + }, + "hash": "e3eb2818732639eaa013f00b4eef3ed618da8fb378eaed618f7fb64ef3771ce5" +},{ + "tool": "Code Inspection", + "category": "Naming conventions", + "type": "Function naming convention", + "severity": "Moderate", + "comment": "Function name '`configuration cache clean v1_0_0`' should not contain underscores", + "detailsInfo": "Reports function names that do not follow the recommended naming conventions.\n\n**Example:**\n\n\n fun Foo() {}\n\nTo fix the problem change the name of the function to match the recommended naming conventions.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt", + "language": "kotlin", + "line": 38, + "offset": 9, + "length": 34, + "code": { + "startLine": 36, + "length": 34, + "offset": 19, + "surroundingCode": "\n @Test\n fun `configuration cache clean v1_0_0`() {\n gradleTestKitTest(\"gradle-features/configuration cache clean v1_0_0\") {\n beforeTest()" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "inspectionName": "FunctionName" + }, + "hash": "6c000e38bd388f78b56867dca3f98690f824fd10356bc7abc18c181f845c8c13" +},{ + "tool": "Code Inspection", + "category": "Naming conventions", + "type": "Function naming convention", + "severity": "Moderate", + "comment": "Function name '`android build cache clean v1_0_0`' should not contain underscores", + "detailsInfo": "Reports function names that do not follow the recommended naming conventions.\n\n**Example:**\n\n\n fun Foo() {}\n\nTo fix the problem change the name of the function to match the recommended naming conventions.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt", + "language": "kotlin", + "line": 22, + "offset": 9, + "length": 34, + "code": { + "startLine": 20, + "length": 34, + "offset": 19, + "surroundingCode": "\n @Test\n fun `android build cache clean v1_0_0`() {\n gradleTestKitTest(\"gradle-features/android build cache clean v1_0_0\") {\n beforeTest()" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "inspectionName": "FunctionName" + }, + "hash": "8327ae2db52cde46095b2f4b2cc804ffa414b0f4f412633a979e1f78bdc56527" +},{ + "tool": "Code Inspection", + "category": "Naming conventions", + "type": "Function naming convention", + "severity": "Moderate", + "comment": "Function name '`project isolation clean v1_0_0`' should not contain underscores", + "detailsInfo": "Reports function names that do not follow the recommended naming conventions.\n\n**Example:**\n\n\n fun Foo() {}\n\nTo fix the problem change the name of the function to match the recommended naming conventions.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt", + "language": "kotlin", + "line": 46, + "offset": 9, + "length": 32, + "code": { + "startLine": 44, + "length": 32, + "offset": 19, + "surroundingCode": "\n @Test\n fun `project isolation clean v1_0_0`() {\n gradleTestKitTest(\"gradle-features/project isolation clean v1_0_0\") { beforeTest() }\n }" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "inspectionName": "FunctionName" + }, + "hash": "df6ec63578875d75856cd4210f672adfa08bc609596fab2f14eadefbded72b85" +},{ + "tool": "Code Inspection", + "category": "Naming conventions", + "type": "Function naming convention", + "severity": "Moderate", + "comment": "Function name '`build cache clean v1_0_0`' should not contain underscores", + "detailsInfo": "Reports function names that do not follow the recommended naming conventions.\n\n**Example:**\n\n\n fun Foo() {}\n\nTo fix the problem change the name of the function to match the recommended naming conventions.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt", + "language": "kotlin", + "line": 30, + "offset": 9, + "length": 26, + "code": { + "startLine": 28, + "length": 26, + "offset": 19, + "surroundingCode": "\n @Test\n fun `build cache clean v1_0_0`() {\n gradleTestKitTest(\"gradle-features/build cache clean v1_0_0\") {\n beforeTest()" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "inspectionName": "FunctionName" + }, + "hash": "82568917e459a44f20e0f387b5f9fe1581dbbb2719b9f2b71f66613660aa1b81" +},{ + "tool": "Code Inspection", + "category": "Naming conventions", + "type": "Function naming convention", + "severity": "Moderate", + "comment": "Function name '`android configuration cache clean v1_0_0`' should not contain underscores", + "detailsInfo": "Reports function names that do not follow the recommended naming conventions.\n\n**Example:**\n\n\n fun Foo() {}\n\nTo fix the problem change the name of the function to match the recommended naming conventions.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt", + "language": "kotlin", + "line": 14, + "offset": 9, + "length": 42, + "code": { + "startLine": 12, + "length": 42, + "offset": 19, + "surroundingCode": "\n @Test\n fun `android configuration cache clean v1_0_0`() {\n gradleTestKitTest(\"gradle-features/android configuration cache clean v1_0_0\") {\n beforeTest()" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "inspectionName": "FunctionName" + }, + "hash": "0e2be8cf3e97477aa05ebfa6a780bb372e89b512a6769b4fb12f1d0dc4cbaeac" +},{ + "tool": "Code Inspection", + "category": "Naming conventions", + "type": "Function naming convention", + "severity": "Moderate", + "comment": "Function name '`no clean createSemverTag should fail`' may contain only letters and digits", + "detailsInfo": "Reports function names that do not follow the recommended naming conventions.\n\n**Example:**\n\n\n fun Foo() {}\n\nTo fix the problem change the name of the function to match the recommended naming conventions.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/VersionBuildDirTest.kt", + "language": "kotlin", + "line": 73, + "offset": 9, + "length": 38, + "code": { + "startLine": 71, + "length": 38, + "offset": 19, + "surroundingCode": "\n @Test\n fun `no clean createSemverTag should fail`() {\n gradleTestKitTest(\"version-build-dir/no-clean-with-no-tag-current-commit (dirty)\") {\n projectDir.generateInitialCommitAddVersionTagAndAddNewCommit()" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "inspectionName": "FunctionName" + }, + "hash": "a41a8aa745c5d175c97ac48939aaa36d3be4e4aa5aa5c5ada921e5a189047cdc" +},{ + "tool": "Code Inspection", + "category": "Naming conventions", + "type": "Function naming convention", + "severity": "Moderate", + "comment": "Function name '`clean v1_0_0`' should not contain underscores", + "detailsInfo": "Reports function names that do not follow the recommended naming conventions.\n\n**Example:**\n\n\n fun Foo() {}\n\nTo fix the problem change the name of the function to match the recommended naming conventions.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/VersionBuildDirTest.kt", + "language": "kotlin", + "line": 12, + "offset": 9, + "length": 14, + "code": { + "startLine": 10, + "length": 14, + "offset": 19, + "surroundingCode": "\n @Test\n fun `clean v1_0_0`() {\n gradleTestKitTest(\"version-build-dir/clean v1_0_0\") {\n projectDir.generateInitialCommitAddVersionTagAndAddNewCommit()" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "inspectionName": "FunctionName" + }, + "hash": "d9d1ef87dd02ac6c5d73f53110161872083be73b4eba7a6b3db0cfca07be63bf" +},{ + "tool": "Code Inspection", + "category": "Naming conventions", + "type": "Function naming convention", + "severity": "Moderate", + "comment": "Function name '`no clean without tag in current commit - dirty`' may contain only letters and digits", + "detailsInfo": "Reports function names that do not follow the recommended naming conventions.\n\n**Example:**\n\n\n fun Foo() {}\n\nTo fix the problem change the name of the function to match the recommended naming conventions.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/VersionBuildDirTest.kt", + "language": "kotlin", + "line": 49, + "offset": 9, + "length": 48, + "code": { + "startLine": 47, + "length": 48, + "offset": 19, + "surroundingCode": "\n @Test\n fun `no clean without tag in current commit - dirty`() {\n gradleTestKitTest(\"version-build-dir/no-clean-with-no-tag-current-commit (dirty)\") {\n projectDir.generateInitialCommitAddVersionTagAndAddNewCommit()" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "inspectionName": "FunctionName" + }, + "hash": "79de7de4bb0981922e90ee7874dda38269dad956a0d1224815fae88f1b3334fa" +},{ + "tool": "Code Inspection", + "category": "Naming conventions", + "type": "Function naming convention", + "severity": "Moderate", + "comment": "Function name '`clean without tag in current commit - hash`' may contain only letters and digits", + "detailsInfo": "Reports function names that do not follow the recommended naming conventions.\n\n**Example:**\n\n\n fun Foo() {}\n\nTo fix the problem change the name of the function to match the recommended naming conventions.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/VersionBuildDirTest.kt", + "language": "kotlin", + "line": 38, + "offset": 9, + "length": 44, + "code": { + "startLine": 36, + "length": 44, + "offset": 19, + "surroundingCode": "\n @Test\n fun `clean without tag in current commit - hash`() {\n gradleTestKitTest(\"version-build-dir/clean-with-no-tag-current-commit (hash)\") {\n projectDir.generateInitialCommitAddVersionTagAndAddNewCommit()" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "inspectionName": "FunctionName" + }, + "hash": "1909860cd0e4d050df0797549a601473034f27adc244d83c7e525ab1a7921b38" +},{ + "tool": "Code Inspection", + "category": "Naming conventions", + "type": "Function naming convention", + "severity": "Moderate", + "comment": "Function name '`clean v1_0_0 configuration phase`' should not contain underscores", + "detailsInfo": "Reports function names that do not follow the recommended naming conventions.\n\n**Example:**\n\n\n fun Foo() {}\n\nTo fix the problem change the name of the function to match the recommended naming conventions.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/VersionBuildDirTest.kt", + "language": "kotlin", + "line": 24, + "offset": 9, + "length": 34, + "code": { + "startLine": 22, + "length": 34, + "offset": 19, + "surroundingCode": "\n @Test\n fun `clean v1_0_0 configuration phase`() {\n gradleTestKitTest(\"version-build-dir/clean v1_0_0 configuration phase\") {\n projectDir.generateInitialCommitAddVersionTagAndAddNewCommit()" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "inspectionName": "FunctionName" + }, + "hash": "d5a1ef3c0728f50113647a9c6d4c9b78bdfb3cee87812d138562b869ef597974" +},{ + "tool": "Code Inspection", + "category": "Style issues", + "type": "Class member can have 'private' visibility", + "severity": "Moderate", + "comment": "Property 'commitsInCurrentBranchRevCommit' could be private", + "detailsInfo": "Reports declarations that can be made `private` to follow the encapsulation principle.\n\n**Example:**\n\n\n class Service(val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n\nAfter the quick-fix is applied (considering there are no usages of `url` outside of `Service` class):\n\n\n class Service(private val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "language": "kotlin", + "line": 59, + "offset": 5, + "length": 8, + "code": { + "startLine": 57, + "length": 8, + "offset": 11, + "surroundingCode": " }\n\n internal val commitsInCurrentBranchRevCommit: List by lazy {\n git.log().setMaxCount(maxCount?.get() ?: -1).call().toList()\n }" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "MemberVisibilityCanBePrivate" + }, + "hash": "2f27d2e7bebcd8f5cc69f90f0fdbfe22af393d951753f9f26a38abe436fd7790" +},{ + "tool": "Code Inspection", + "category": "Style issues", + "type": "Class member can have 'private' visibility", + "severity": "Moderate", + "comment": "Property 'tagsInRepoRef' could be private", + "detailsInfo": "Reports declarations that can be made `private` to follow the encapsulation principle.\n\n**Example:**\n\n\n class Service(val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n\nAfter the quick-fix is applied (considering there are no usages of `url` outside of `Service` class):\n\n\n class Service(private val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "language": "kotlin", + "line": 62, + "offset": 5, + "length": 8, + "code": { + "startLine": 60, + "length": 8, + "offset": 79, + "surroundingCode": " git.log().setMaxCount(maxCount?.get() ?: -1).call().toList()\n }\n internal val tagsInRepoRef: List by lazy { git.tagList().call() }\n\n internal val commitsInCurrentBranchHash: List by lazy {" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "MemberVisibilityCanBePrivate" + }, + "hash": "0a82bf4f0ba0a2ece7081305605071db33d5df1f75599962778ae1f23056a0e9" +},{ + "tool": "Code Inspection", + "category": "Style issues", + "type": "Class member can have 'private' visibility", + "severity": "Moderate", + "comment": "Function 'lastVersionTagInCurrentBranch' could be private", + "detailsInfo": "Reports declarations that can be made `private` to follow the encapsulation principle.\n\n**Example:**\n\n\n class Service(val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n\nAfter the quick-fix is applied (considering there are no usages of `url` outside of `Service` class):\n\n\n class Service(private val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "language": "kotlin", + "line": 173, + "offset": 5, + "length": 8, + "code": { + "startLine": 171, + "length": 8, + "offset": 11, + "surroundingCode": " }\n\n internal fun lastVersionTagInCurrentBranch(tagPrefix: String): GitRef.Tag? =\n versionTagsInCurrentBranchSortedByTimelineOrSemverOrder(tagPrefix).lastOrNull()\n" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "MemberVisibilityCanBePrivate" + }, + "hash": "e5d6e45ddadeda88e6565d7e248cd92acbc3cf6834a99076730ae15537ac67cd" +},{ + "tool": "Code Inspection", + "category": "Style issues", + "type": "Class member can have 'private' visibility", + "severity": "Moderate", + "comment": "Function 'versionTagsSortedBySemver' could be private", + "detailsInfo": "Reports declarations that can be made `private` to follow the encapsulation principle.\n\n**Example:**\n\n\n class Service(val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n\nAfter the quick-fix is applied (considering there are no usages of `url` outside of `Service` class):\n\n\n class Service(private val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "language": "kotlin", + "line": 157, + "offset": 5, + "length": 8, + "code": { + "startLine": 155, + "length": 8, + "offset": 15, + "surroundingCode": " }\n\n internal fun versionTagsSortedBySemver(tagPrefix: String): List =\n versionTagsInCurrentBranch(tagPrefix).sortedBy { tag ->\n Version.safe(tag.name.removePrefix(tagPrefix)).getOrNull()" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "MemberVisibilityCanBePrivate" + }, + "hash": "da0c2a24ad6ef36ea84eb0b69c90e4c00b1029bedae89b2150053b87002c824f" +},{ + "tool": "Code Inspection", + "category": "Style issues", + "type": "Class member can have 'private' visibility", + "severity": "Moderate", + "comment": "Function 'versionTagsInCurrentBranchSortedByTimelineOrSemverOrder' could be private", + "detailsInfo": "Reports declarations that can be made `private` to follow the encapsulation principle.\n\n**Example:**\n\n\n class Service(val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n\nAfter the quick-fix is applied (considering there are no usages of `url` outside of `Service` class):\n\n\n class Service(private val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "language": "kotlin", + "line": 162, + "offset": 5, + "length": 8, + "code": { + "startLine": 160, + "length": 8, + "offset": 15, + "surroundingCode": " }\n\n internal fun versionTagsInCurrentBranchSortedByTimelineOrSemverOrder(\n tagPrefix: String\n ): List {" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "MemberVisibilityCanBePrivate" + }, + "hash": "41956dc9f8619b0c5878589a69932efc86c69cffcc7512b4a10c93fffa6b5fda" +},{ + "tool": "Code Inspection", + "category": "Style issues", + "type": "Class member can have 'private' visibility", + "severity": "Moderate", + "comment": "Function 'tagsInCurrentCommit' could be private", + "detailsInfo": "Reports declarations that can be made `private` to follow the encapsulation principle.\n\n**Example:**\n\n\n class Service(val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n\nAfter the quick-fix is applied (considering there are no usages of `url` outside of `Service` class):\n\n\n class Service(private val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "language": "kotlin", + "line": 137, + "offset": 5, + "length": 8, + "code": { + "startLine": 135, + "length": 8, + "offset": 19, + "surroundingCode": " }\n\n internal fun tagsInCurrentCommit(hash: String): List =\n tagsInCurrentBranch.filter { it.commit.hash == hash }\n" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "MemberVisibilityCanBePrivate" + }, + "hash": "002e1b494705c1bccf90132a9bbba16edf369fa8f6082b000f00b0eaf350da69" +},{ + "tool": "Code Inspection", + "category": "Style issues", + "type": "Class member can have 'private' visibility", + "severity": "Moderate", + "comment": "Property 'tagName' could be private", + "detailsInfo": "Reports declarations that can be made `private` to follow the encapsulation principle.\n\n**Example:**\n\n\n class Service(val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n\nAfter the quick-fix is applied (considering there are no usages of `url` outside of `Service` class):\n\n\n class Service(private val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "language": "kotlin", + "line": 115, + "offset": 5, + "length": 8, + "code": { + "startLine": 113, + "length": 8, + "offset": 62, + "surroundingCode": " lastVersionTagInCurrentBranch(tagPrefix)?.commit\n\n internal val Ref.tagName: String\n get() = name.substringAfter(\"refs/tags/\")\n" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "MemberVisibilityCanBePrivate" + }, + "hash": "38bfc258ff0da49a105dd62c842a4b716ff9fe1c2cb2ae3e51d691091457afec" +},{ + "tool": "Code Inspection", + "category": "Style issues", + "type": "Class member can have 'private' visibility", + "severity": "Moderate", + "comment": "Function 'commitHash' could be private", + "detailsInfo": "Reports declarations that can be made `private` to follow the encapsulation principle.\n\n**Example:**\n\n\n class Service(val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n\nAfter the quick-fix is applied (considering there are no usages of `url` outside of `Service` class):\n\n\n class Service(private val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "language": "kotlin", + "line": 107, + "offset": 5, + "length": 8, + "code": { + "startLine": 105, + "length": 8, + "offset": 11, + "surroundingCode": " }\n\n internal fun commitHash(ref: Ref): String = commitHash(ref.objectId)\n\n internal fun commitHash(objectId: ObjectId): String =" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "MemberVisibilityCanBePrivate" + }, + "hash": "af463b24da18b1515df7fea9e254fc809397792bd23ec600c51187bf81078249" +},{ + "tool": "Code Inspection", + "category": "Style issues", + "type": "Class member can have 'private' visibility", + "severity": "Moderate", + "comment": "Property 'commitsInCurrentBranchHash' could be private", + "detailsInfo": "Reports declarations that can be made `private` to follow the encapsulation principle.\n\n**Example:**\n\n\n class Service(val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n\nAfter the quick-fix is applied (considering there are no usages of `url` outside of `Service` class):\n\n\n class Service(private val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "language": "kotlin", + "line": 64, + "offset": 5, + "length": 8, + "code": { + "startLine": 62, + "length": 8, + "offset": 80, + "surroundingCode": " internal val tagsInRepoRef: List by lazy { git.tagList().call() }\n\n internal val commitsInCurrentBranchHash: List by lazy {\n commitsInCurrentBranchRevCommit.map(RevCommit::getName)\n }" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "MemberVisibilityCanBePrivate" + }, + "hash": "5166832e29f6e2273217d6acbb0a422050875cace9d13713687707f44a3b80a1" +},{ + "tool": "Code Inspection", + "category": "Style issues", + "type": "Class member can have 'private' visibility", + "severity": "Moderate", + "comment": "Property 'gitFiles' could be private", + "detailsInfo": "Reports declarations that can be made `private` to follow the encapsulation principle.\n\n**Example:**\n\n\n class Service(val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n\nAfter the quick-fix is applied (considering there are no usages of `url` outside of `Service` class):\n\n\n class Service(private val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "language": "kotlin", + "line": 40, + "offset": 5, + "length": 8, + "code": { + "startLine": 38, + "length": 8, + "offset": 11, + "surroundingCode": " }\n\n internal val gitFiles: List = git.repository.directory.walkTopDown().toList()\n\n internal val isClean: Boolean" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "MemberVisibilityCanBePrivate" + }, + "hash": "28fbc04f7cecea83d302ce752951e8e9d5a2e7e328cff48fc69459e7fc2ef976" +},{ + "tool": "Code Inspection", + "category": "Style issues", + "type": "Class member can have 'private' visibility", + "severity": "Moderate", + "comment": "Property 'tagsInCurrentBranch' could be private", + "detailsInfo": "Reports declarations that can be made `private` to follow the encapsulation principle.\n\n**Example:**\n\n\n class Service(val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n\nAfter the quick-fix is applied (considering there are no usages of `url` outside of `Service` class):\n\n\n class Service(private val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "language": "kotlin", + "line": 121, + "offset": 5, + "length": 8, + "code": { + "startLine": 119, + "length": 8, + "offset": 99, + "surroundingCode": " get() = tagsInRepoRef.filter { ref -> commitHash(ref) in commitsInCurrentBranchHash }\n\n internal val tagsInCurrentBranch: List\n get() =\n tagsInCurrentBranchRef.map { ref ->" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "MemberVisibilityCanBePrivate" + }, + "hash": "6ba52159f77535079b3802fecaa02e09ea059c11a069344cb591d469b04ba6db" +},{ + "tool": "Code Inspection", + "category": "Style issues", + "type": "Class member can have 'private' visibility", + "severity": "Moderate", + "comment": "Property 'tagsInCurrentBranchRef' could be private", + "detailsInfo": "Reports declarations that can be made `private` to follow the encapsulation principle.\n\n**Example:**\n\n\n class Service(val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n\nAfter the quick-fix is applied (considering there are no usages of `url` outside of `Service` class):\n\n\n class Service(private val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "language": "kotlin", + "line": 118, + "offset": 5, + "length": 8, + "code": { + "startLine": 116, + "length": 8, + "offset": 55, + "surroundingCode": " get() = name.substringAfter(\"refs/tags/\")\n\n internal val tagsInCurrentBranchRef: List\n get() = tagsInRepoRef.filter { ref -> commitHash(ref) in commitsInCurrentBranchHash }\n" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "MemberVisibilityCanBePrivate" + }, + "hash": "d1d4d777d429900cced7975b8a6c28d6748cf57da42690af9dd410e292e07ac1" +},{ + "tool": "Code Inspection", + "category": "Style issues", + "type": "Class member can have 'private' visibility", + "severity": "Moderate", + "comment": "Function 'commitHash' could be private", + "detailsInfo": "Reports declarations that can be made `private` to follow the encapsulation principle.\n\n**Example:**\n\n\n class Service(val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n\nAfter the quick-fix is applied (considering there are no usages of `url` outside of `Service` class):\n\n\n class Service(private val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "language": "kotlin", + "line": 109, + "offset": 5, + "length": 8, + "code": { + "startLine": 107, + "length": 8, + "offset": 78, + "surroundingCode": " internal fun commitHash(ref: Ref): String = commitHash(ref.objectId)\n\n internal fun commitHash(objectId: ObjectId): String =\n git.repository.parseCommit(objectId).toObjectId().name\n" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "MemberVisibilityCanBePrivate" + }, + "hash": "14647184a4fc51f6ad4d773ed436829107de2c453abac739c8ac99da23527170" +},{ + "tool": "Code Inspection", + "category": "Style issues", + "type": "Class member can have 'private' visibility", + "severity": "Moderate", + "comment": "Function 'versionTagsInCurrentCommit' could be private", + "detailsInfo": "Reports declarations that can be made `private` to follow the encapsulation principle.\n\n**Example:**\n\n\n class Service(val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n\nAfter the quick-fix is applied (considering there are no usages of `url` outside of `Service` class):\n\n\n class Service(private val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "language": "kotlin", + "line": 140, + "offset": 5, + "length": 8, + "code": { + "startLine": 138, + "length": 8, + "offset": 67, + "surroundingCode": " tagsInCurrentBranch.filter { it.commit.hash == hash }\n\n internal fun versionTagsInCurrentCommit(hash: String, tagPrefix: String): List =\n tagsInCurrentCommit(hash).filter { tag ->\n tag.name.startsWith(tagPrefix) &&" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "MemberVisibilityCanBePrivate" + }, + "hash": "a9e4e31e452c8f20a9e04609dfa8fc405d5d50941279ac1dde48804ef1f07e9b" +},{ + "tool": "Code Inspection", + "category": "Style issues", + "type": "Class member can have 'private' visibility", + "severity": "Moderate", + "comment": "Property 'headRevCommit' could be private", + "detailsInfo": "Reports declarations that can be made `private` to follow the encapsulation principle.\n\n**Example:**\n\n\n class Service(val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n\nAfter the quick-fix is applied (considering there are no usages of `url` outside of `Service` class):\n\n\n class Service(private val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "language": "kotlin", + "line": 45, + "offset": 5, + "length": 8, + "code": { + "startLine": 43, + "length": 8, + "offset": 49, + "surroundingCode": " get() = git.status().call().isClean\n\n internal val headRevCommit: RevCommit by lazy {\n RevWalk(git.repository).parseCommit(git.repository.resolve(Constants.HEAD))\n }" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "MemberVisibilityCanBePrivate" + }, + "hash": "ba98339f74b645af424460e717a2372ed1a7708e0489aaf80495c86487787541" +}]} \ No newline at end of file diff --git a/reports-generated/code-quality/results/qodana.sarif.json b/reports-generated/code-quality/results/qodana.sarif.json new file mode 100644 index 00000000..9ed6b7f8 --- /dev/null +++ b/reports-generated/code-quality/results/qodana.sarif.json @@ -0,0 +1,51151 @@ +{ + "$schema": "https://raw.githubusercontent.com/schemastore/schemastore/master/src/schemas/json/sarif-2.1.0-rtm.5.json", + "version": "2.1.0", + "runs": [ + { + "tool": { + "driver": { + "name": "QDJVMC", + "fullName": "Qodana Community for JVM", + "version": "223.8787.120", + "rules": [], + "taxa": [ + { + "id": "Language injection", + "name": "Language injection" + }, + { + "id": "Maven", + "name": "Maven" + }, + { + "id": "Kotlin", + "name": "Kotlin" + }, + { + "id": "Kotlin/Style issues", + "name": "Style issues", + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 2, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JVM languages", + "name": "JVM languages" + }, + { + "id": "Kotlin/Redundant constructs", + "name": "Redundant constructs", + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 2, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java", + "name": "Java" + }, + { + "id": "Java/Portability", + "name": "Portability", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Threading issues", + "name": "Threading issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Internationalization", + "name": "Internationalization", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Performance", + "name": "Performance", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Class structure", + "name": "Class structure", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Code style issues", + "name": "Code style issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Probable bugs", + "name": "Probable bugs", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Error handling", + "name": "Error handling", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Declaration redundancy", + "name": "Declaration redundancy", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Kotlin/Migration", + "name": "Migration", + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 2, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Pattern validation", + "name": "Pattern validation" + }, + { + "id": "Java/Serialization issues", + "name": "Serialization issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Groovy", + "name": "Groovy" + }, + { + "id": "Groovy/GPath", + "name": "GPath", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 19, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Performance/Embedded", + "name": "Embedded", + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Imports", + "name": "Imports", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Data flow", + "name": "Data flow", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Kotlin/Probable bugs", + "name": "Probable bugs", + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 2, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Inheritance issues", + "name": "Inheritance issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Control flow issues", + "name": "Control flow issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Numeric issues", + "name": "Numeric issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Initialization", + "name": "Initialization", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HTML", + "name": "HTML" + }, + { + "id": "Java/Security", + "name": "Security", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Properties files", + "name": "Properties files" + }, + { + "id": "EditorConfig", + "name": "EditorConfig" + }, + { + "id": "Java/Java language level migration aids", + "name": "Java language level migration aids", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Java language level migration aids/Probable bugs", + "name": "Probable bugs", + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 33, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/JavaBeans issues", + "name": "JavaBeans issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Assignment issues", + "name": "Assignment issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Groovy/Naming conventions", + "name": "Naming conventions", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 19, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Packaging issues", + "name": "Packaging issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Verbose or redundant code constructs", + "name": "Verbose or redundant code constructs", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Groovy/Threading issues", + "name": "Threading issues", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 19, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Gradle", + "name": "Gradle" + }, + { + "id": "Gradle/Probable bugs", + "name": "Probable bugs", + "relationships": [ + { + "target": { + "id": "Gradle", + "index": 41, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Groovy/Error handling", + "name": "Error handling", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 19, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "General", + "name": "General" + }, + { + "id": "Java/Javadoc", + "name": "Javadoc", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Resource management", + "name": "Resource management", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Gradle/Validity issues", + "name": "Validity issues", + "relationships": [ + { + "target": { + "id": "Gradle", + "index": 41, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Kotlin/Naming conventions", + "name": "Naming conventions", + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 2, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Code maturity", + "name": "Code maturity", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Naming conventions", + "name": "Naming conventions", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Java language level migration aids/Java 5", + "name": "Java 5", + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 33, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Groovy/Probable bugs", + "name": "Probable bugs", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 19, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Kotlin/Other problems", + "name": "Other problems", + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 2, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Visibility", + "name": "Visibility", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Lombok", + "name": "Lombok", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Lombok/Redundant definitions", + "name": "Redundant definitions", + "relationships": [ + { + "target": { + "id": "Java/Lombok", + "index": 55, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Encapsulation", + "name": "Encapsulation", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Concurrency annotation issues", + "name": "Concurrency annotation issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Java language level migration aids/Java 8", + "name": "Java 8", + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 33, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Java language level issues", + "name": "Java language level issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XML", + "name": "XML" + }, + { + "id": "Java/Finalization", + "name": "Finalization", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Groovy/Assignment issues", + "name": "Assignment issues", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 19, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Logging", + "name": "Logging", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Modularization issues", + "name": "Modularization issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Kotlin/Java interop issues", + "name": "Java interop issues", + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 2, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Naming conventions/Class", + "name": "Class", + "relationships": [ + { + "target": { + "id": "Java/Naming conventions", + "index": 50, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Groovy/Control flow issues", + "name": "Control flow issues", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 19, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Memory", + "name": "Memory", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Groovy/Potentially confusing code constructs", + "name": "Potentially confusing code constructs", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 19, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/TestNG", + "name": "TestNG", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Plugin DevKit", + "name": "Plugin DevKit" + }, + { + "id": "Plugin DevKit/Plugin descriptor", + "name": "Plugin descriptor", + "relationships": [ + { + "target": { + "id": "Plugin DevKit", + "index": 72, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/JUnit", + "name": "JUnit", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Abstraction issues", + "name": "Abstraction issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Java language level migration aids/Java 9", + "name": "Java 9", + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 33, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XSLT", + "name": "XSLT" + }, + { + "id": "Plugin DevKit/Workspace model", + "name": "Workspace model", + "relationships": [ + { + "target": { + "id": "Plugin DevKit", + "index": 72, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Groovy/Other", + "name": "Other", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 19, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Cloning issues", + "name": "Cloning issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Groovy/Style", + "name": "Style", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 19, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExp", + "name": "RegExp" + }, + { + "id": "Plugin DevKit/Code", + "name": "Code", + "relationships": [ + { + "target": { + "id": "Plugin DevKit", + "index": 72, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UI form", + "name": "UI form" + }, + { + "id": "JVM languages/Test frameworks", + "name": "Test frameworks", + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 4, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Lombok/Redundant modifiers", + "name": "Redundant modifiers", + "relationships": [ + { + "target": { + "id": "Java/Lombok", + "index": 55, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Class metrics", + "name": "Class metrics", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Naming conventions/Method", + "name": "Method", + "relationships": [ + { + "target": { + "id": "Java/Naming conventions", + "index": 50, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Dependency issues", + "name": "Dependency issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Compiler issues", + "name": "Compiler issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Groovy/Annotations", + "name": "Annotations", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 19, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Proofreading", + "name": "Proofreading" + }, + { + "id": "Manifest", + "name": "Manifest" + }, + { + "id": "Ant", + "name": "Ant" + }, + { + "id": "Java/Method metrics", + "name": "Method metrics", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Test frameworks", + "name": "Test frameworks", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Bitwise operation issues", + "name": "Bitwise operation issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Reflective access", + "name": "Reflective access", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Java language level migration aids/Java 15", + "name": "Java 15", + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 33, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Java language level migration aids/Java 14", + "name": "Java 14", + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 33, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Groovy/Validity issues", + "name": "Validity issues", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 19, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Numeric issues/Cast", + "name": "Cast", + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Plugin DevKit/Description file", + "name": "Description file", + "relationships": [ + { + "target": { + "id": "Plugin DevKit", + "index": 72, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JSON and JSON5", + "name": "JSON and JSON5" + }, + { + "id": "Groovy/Data flow", + "name": "Data flow", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 19, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Groovy/Method metrics", + "name": "Method metrics", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 19, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XPath", + "name": "XPath" + }, + { + "id": "Kotlin/Migration/Maven", + "name": "Maven", + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Internationalization", + "name": "Internationalization" + }, + { + "id": "Java/Java language level migration aids/Java 10", + "name": "Java 10", + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 33, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Java language level migration aids/Java 16", + "name": "Java 16", + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 33, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Java language level migration aids/Java 7", + "name": "Java 7", + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 33, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Version control", + "name": "Version control" + }, + { + "id": "Kotlin/Migration/Gradle", + "name": "Gradle", + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Probable bugs/Nullability problems", + "name": "Nullability problems", + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Kotlin/Logging", + "name": "Logging", + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 2, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Java language level migration aids/Code style issues", + "name": "Code style issues", + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 33, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Structural search", + "name": "Structural search" + }, + { + "id": "Java/toString() issues", + "name": "toString() issues", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RELAX NG", + "name": "RELAX NG" + }, + { + "id": "Java/Properties files", + "name": "Properties files", + "relationships": [ + { + "target": { + "id": "Java", + "index": 6, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java/Java language level migration aids/Java 11", + "name": "Java 11", + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 33, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Gradle/Best practises", + "name": "Best practises", + "relationships": [ + { + "target": { + "id": "Gradle", + "index": 41, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Groovy/Declaration redundancy", + "name": "Declaration redundancy", + "relationships": [ + { + "target": { + "id": "Groovy", + "index": 19, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + "extensions": [ + { + "name": "org.intellij.intelliLang", + "version": "223.8787", + "rules": [ + { + "id": "InjectionNotApplicable", + "shortDescription": { + "text": "Injection Annotation not applicable" + }, + "fullDescription": { + "text": "Reports when a '@Language' annotation is applied to an element with a type other than 'String' or 'String[]'. Example: '@Language(\"HTML\") int i;' After the quick-fix is applied: 'int i;'", + "markdown": "Reports when a `@Language` annotation is applied to an element with a type other than `String` or `String[]`.\n\n**Example:**\n\n\n @Language(\"HTML\") int i;\n\nAfter the quick-fix is applied:\n\n\n int i;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Language injection", + "index": 0, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PatternNotApplicable", + "shortDescription": { + "text": "Pattern Annotation not applicable" + }, + "fullDescription": { + "text": "Reports when a '@Pattern' annotation is applied to an element with a type other than 'String'. Example: '@Pattern(\"\\\\d\\\\d\") int i;'", + "markdown": "Reports when a `@Pattern` annotation is applied to an element with a type other than `String`.\n\n**Example:**\n\n\n @Pattern(\"\\\\d\\\\d\") int i;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Pattern validation", + "index": 17, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnknownLanguage", + "shortDescription": { + "text": "Unknown Language ID" + }, + "fullDescription": { + "text": "Reports when the ID of the language used in a '@Language' annotation is unknown. Example: '@Language(\"HMTL\") String html;'", + "markdown": "Reports when the ID of the language used in a `@Language` annotation is unknown.\n\n**Example:**\n\n\n @Language(\"HMTL\") String html;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Language injection", + "index": 0, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PatternOverriddenByNonAnnotatedMethod", + "shortDescription": { + "text": "Non-annotated Method overrides @Pattern Method" + }, + "fullDescription": { + "text": "Reports when a method without any '@Pattern' annotation overrides a '@Pattern' annotated method. This does not prevent error-highlighting inside the editor, however the overriding method will not be checked at runtime. A quick fix is provided to add a '@Pattern' annotation that matches the one from the superclass method. This ensures the runtime-check instrumentation works correctly. Example: 'abstract class Parent {\n abstract @Pattern(\"\\\\d\\\\d-\\\\d\\\\d\\\\d\") String getId();\n }\n class Child extends Parent {\n @Override String getId() { // warning here\n return \"12-345\";\n }\n }'", + "markdown": "Reports when a method without any `@Pattern` annotation overrides a `@Pattern` annotated method. This does not prevent error-highlighting inside the editor, however the overriding method will not be checked at runtime.\n\n\nA quick fix is provided to add a `@Pattern` annotation that matches the one from the superclass method. This ensures the\nruntime-check instrumentation works correctly.\n\n**Example:**\n\n\n abstract class Parent {\n abstract @Pattern(\"\\\\d\\\\d-\\\\d\\\\d\\\\d\") String getId();\n }\n class Child extends Parent {\n @Override String getId() { // warning here\n return \"12-345\";\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Pattern validation", + "index": 17, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InjectedReferences", + "shortDescription": { + "text": "Injected references" + }, + "fullDescription": { + "text": "Reports unresolved references injected by Language Injections. Example: @Language(\"file-reference\")\n String fileName = \"/home/user/nonexistent.file\"; // highlighted if file doesn't exist", + "markdown": "Reports unresolved references injected by [Language Injections](https://www.jetbrains.com/help/idea/using-language-injections.html).\n\nExample:\n\n```\n @Language(\"file-reference\")\n String fileName = \"/home/user/nonexistent.file\"; // highlighted if file doesn't exist\n```" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 44, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PatternValidation", + "shortDescription": { + "text": "Validate annotated patterns" + }, + "fullDescription": { + "text": "Reports expressions passed as arguments for '@Pattern' parameters and returned from '@Pattern'-annotated methods that do not match the specified pattern. Example: '@Pattern(\"\\\\d\\\\d-\\\\d\\\\d\\\\d\") String getId() {\n return \"1\";\n }'", + "markdown": "Reports expressions passed as arguments for `@Pattern` parameters and returned from `@Pattern`-annotated methods that do not match the specified pattern.\n\n**Example:**\n\n\n @Pattern(\"\\\\d\\\\d-\\\\d\\\\d\\\\d\") String getId() {\n return \"1\";\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Pattern validation", + "index": 17, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LanguageMismatch", + "shortDescription": { + "text": "Language mismatch" + }, + "fullDescription": { + "text": "Reports when the language of a reference does not match the expected language of the usage context. Example: '@Language(\"JavaScript\")\n String JS_CODE = \"var x;\";\n\n @Language(\"XPath\")\n String XPATH_CODE = JS_CODE; // warning here'", + "markdown": "Reports when the language of a reference does not match the expected language of the usage context.\n\nExample:\n\n\n @Language(\"JavaScript\")\n String JS_CODE = \"var x;\";\n\n @Language(\"XPath\")\n String XPATH_CODE = JS_CODE; // warning here\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Language injection", + "index": 0, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "org.jetbrains.idea.maven", + "version": "223.8787", + "rules": [ + { + "id": "MavenRedundantGroupId", + "shortDescription": { + "text": "Redundant groupId" + }, + "fullDescription": { + "text": "Reports the unnecessary definition since it is already defined in the parent pom.xml", + "markdown": "Reports the unnecessary \\ definition since it is already defined in the parent pom.xml" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Maven", + "index": 1, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MavenDuplicatePluginInspection", + "shortDescription": { + "text": "Duplicate plugin declaration" + }, + "fullDescription": { + "text": "Reports the duplication of the plugin declaration in pom.xml", + "markdown": "Reports the duplication of the plugin declaration in pom.xml" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Maven", + "index": 1, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MavenPropertyInParent", + "shortDescription": { + "text": "Usage of properties in parent description" + }, + "fullDescription": { + "text": "Reports that the usage of properties in modules parent definition is prohibited", + "markdown": "Reports that the usage of properties in modules parent definition is prohibited" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Maven", + "index": 1, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MavenDuplicateDependenciesInspection", + "shortDescription": { + "text": "Duplicate Dependencies" + }, + "fullDescription": { + "text": "Reports duplicate dependencies", + "markdown": "Reports duplicate dependencies" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Maven", + "index": 1, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MavenModelInspection", + "shortDescription": { + "text": "Maven Model Inspection" + }, + "fullDescription": { + "text": "Reports resolution problems in a Maven model", + "markdown": "Reports resolution problems in a Maven model" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Maven", + "index": 1, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MavenParentMissedVersionInspection", + "shortDescription": { + "text": "Parent version missed" + }, + "fullDescription": { + "text": "Reports the absence of the parent version element for versions that do not support consumer POM feature", + "markdown": "Reports the absence of the parent version element for versions that do not support consumer POM feature" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Maven", + "index": 1, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "org.jetbrains.kotlin", + "version": "223-1.8.0-release-345-IJ8787", + "rules": [ + { + "id": "RedundantRunCatching", + "shortDescription": { + "text": "Redundant 'runCatching' call" + }, + "fullDescription": { + "text": "Reports 'runCatching' calls that are immediately followed by 'getOrThrow'. Such calls can be replaced with just 'run'. Example: 'fun foo() = runCatching { doSomething() }.getOrThrow()' After the quick-fix is applied: 'fun foo() = run { doSomething() }'", + "markdown": "Reports `runCatching` calls that are immediately followed by `getOrThrow`. Such calls can be replaced with just `run`.\n\n**Example:**\n\n\n fun foo() = runCatching { doSomething() }.getOrThrow()\n\nAfter the quick-fix is applied:\n\n\n fun foo() = run { doSomething() }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimpleRedundantLet", + "shortDescription": { + "text": "Redundant receiver-based 'let' call" + }, + "fullDescription": { + "text": "Reports redundant receiver-based 'let' calls. The quick-fix removes the redundant 'let' call. Example: 'fun test(s: String?): Int? = s?.let { it.length }' After the quick-fix is applied: 'fun test(s: String?): Int? = s?.length'", + "markdown": "Reports redundant receiver-based `let` calls.\n\nThe quick-fix removes the redundant `let` call.\n\n**Example:**\n\n\n fun test(s: String?): Int? = s?.let { it.length }\n\nAfter the quick-fix is applied:\n\n\n fun test(s: String?): Int? = s?.length\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveSingleExpressionStringTemplate", + "shortDescription": { + "text": "Redundant string template" + }, + "fullDescription": { + "text": "Reports single-expression string templates that can be safely removed. Example: 'val x = \"Hello\"\n val y = \"$x\"' After the quick-fix is applied: 'val x = \"Hello\"\n val y = x // <== Updated'", + "markdown": "Reports single-expression string templates that can be safely removed.\n\n**Example:**\n\n val x = \"Hello\"\n val y = \"$x\"\n\nAfter the quick-fix is applied:\n\n val x = \"Hello\"\n val y = x // <== Updated\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonExhaustiveWhenStatementMigration", + "shortDescription": { + "text": "Non-exhaustive 'when' statements will be prohibited since 1.7" + }, + "fullDescription": { + "text": "Reports a non-exhaustive 'when' statements that will lead to compilation error since 1.7. Motivation types: Problematic/meaningless usage patterns need to be discouraged/blocked (e.g. counterintuitive behaviors) Code is error-prone Inconsistency in the design (things are done differently in different contexts) Impact types: Compilation. Some code that used to compile won't compile any more There were cases when such code worked with no exceptions Some such code could compile without any warnings More details: KT-47709: Make when statements with enum, sealed, and Boolean subjects exhaustive by default The quick-fix adds the missing 'else -> {}' branch. Example: 'sealed class Base {\n class A : Base()\n class B : Base()\n }\n\n fun test(base: Base) {\n when (base) {\n is Base.A -> \"\"\n }\n }' After the quick-fix is applied: 'sealed class Base {\n class A : Base()\n class B : Base()\n }\n\n fun test(base: Base) {\n when (base) {\n is Base.A -> \"\"\n else -> {}\n }\n }' This inspection only reports if the Kotlin language level of the project or module is 1.6 or higher.", + "markdown": "Reports a non-exhaustive `when` statements that will lead to compilation error since 1.7.\n\nMotivation types:\n\n* Problematic/meaningless usage patterns need to be discouraged/blocked (e.g. counterintuitive behaviors)\n * Code is error-prone\n* Inconsistency in the design (things are done differently in different contexts)\n\nImpact types:\n\n* Compilation. Some code that used to compile won't compile any more\n * There were cases when such code worked with no exceptions\n * Some such code could compile without any warnings\n\n**More details:** [KT-47709: Make when statements with enum, sealed, and Boolean subjects exhaustive by default](https://youtrack.jetbrains.com/issue/KT-47709)\n\nThe quick-fix adds the missing `else -> {}` branch.\n\n**Example:**\n\n\n sealed class Base {\n class A : Base()\n class B : Base()\n }\n\n fun test(base: Base) {\n when (base) {\n is Base.A -> \"\"\n }\n }\n\nAfter the quick-fix is applied:\n\n\n sealed class Base {\n class A : Base()\n class B : Base()\n }\n\n fun test(base: Base) {\n when (base) {\n is Base.A -> \"\"\n else -> {}\n }\n }\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.6 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConvertLambdaToReference", + "shortDescription": { + "text": "Can be replaced with function reference" + }, + "fullDescription": { + "text": "Reports function literal expressions that can be replaced with function references. Replacing lambdas with function references often makes code look more concise and understandable. Example: 'fun Int.isEven() = this % 2 == 0\n\n fun example() {\n val numbers = listOf(1, 2, 4, 7, 9, 10)\n val evenNumbers = numbers.filter { it.isEven() }\n }' After the quick-fix is applied: 'fun Int.isEven() = this % 2 == 0\n\n fun example() {\n val numbers = listOf(1, 2, 4, 7, 9, 10)\n val evenNumbers = numbers.filter(Int::isEven)\n }'", + "markdown": "Reports function literal expressions that can be replaced with function references.\n\nReplacing lambdas with function references often makes code look more concise and understandable.\n\n**Example:**\n\n\n fun Int.isEven() = this % 2 == 0\n\n fun example() {\n val numbers = listOf(1, 2, 4, 7, 9, 10)\n val evenNumbers = numbers.filter { it.isEven() }\n }\n\nAfter the quick-fix is applied:\n\n\n fun Int.isEven() = this % 2 == 0\n\n fun example() {\n val numbers = listOf(1, 2, 4, 7, 9, 10)\n val evenNumbers = numbers.filter(Int::isEven)\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantSetter", + "shortDescription": { + "text": "Redundant property setter" + }, + "fullDescription": { + "text": "Reports redundant property setters. Setter is considered to be redundant in one of the following cases: Setter has no body. Accessor visibility isn't changed, declaration isn't 'external' and has no annotations. 'var myPropWithRedundantSetter: Int = 0\n set // redundant\n\n var myPropA: Int = 0\n private set // OK - property visibility is changed to private\n\n var myPropB: Int = 0\n external set // OK - implemented not in Kotlin (external)\n\n var myPropC: Int = 0\n @Inject set // OK - accessor is annotated' Setter body is a block with a single statement assigning the parameter to the backing field. 'var prop: Int = 0\n set(value) { // redundant\n field = value\n }'", + "markdown": "Reports redundant property setters.\n\n\nSetter is considered to be redundant in one of the following cases:\n\n1. Setter has no body. Accessor visibility isn't changed, declaration isn't `external` and has no annotations.\n\n\n var myPropWithRedundantSetter: Int = 0\n set // redundant\n\n var myPropA: Int = 0\n private set // OK - property visibility is changed to private\n\n var myPropB: Int = 0\n external set // OK - implemented not in Kotlin (external)\n\n var myPropC: Int = 0\n @Inject set // OK - accessor is annotated\n \n2. Setter body is a block with a single statement assigning the parameter to the backing field.\n\n\n var prop: Int = 0\n set(value) { // redundant\n field = value\n }\n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IncompleteDestructuring", + "shortDescription": { + "text": "Incomplete destructuring declaration" + }, + "fullDescription": { + "text": "Reports incomplete destructuring declaration. Example: 'data class Person(val name: String, val age: Int)\n val person = Person(\"\", 0)\n val (name) = person' The quick fix completes destructuring declaration with new variables: 'data class Person(val name: String, val age: Int)\n val person = Person(\"\", 0)\n val (name, age) = person'", + "markdown": "Reports incomplete destructuring declaration.\n\n**Example:**\n\n\n data class Person(val name: String, val age: Int)\n val person = Person(\"\", 0)\n val (name) = person\n\nThe quick fix completes destructuring declaration with new variables:\n\n\n data class Person(val name: String, val age: Int)\n val person = Person(\"\", 0)\n val (name, age) = person\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ScopeFunctionConversion", + "shortDescription": { + "text": "Scope function can be converted to another one" + }, + "fullDescription": { + "text": "Reports scope functions ('let', 'run', 'apply', 'also') that can be converted between each other. Using corresponding functions makes your code simpler. The quick-fix replaces the scope function to another one. Example: 'val x = \"\".let {\n it.length\n }' After the quick-fix is applied: 'val x = \"\".run {\n length\n }'", + "markdown": "Reports scope functions (`let`, `run`, `apply`, `also`) that can be converted between each other.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces the scope function to another one.\n\n**Example:**\n\n\n val x = \"\".let {\n it.length\n }\n\nAfter the quick-fix is applied:\n\n\n val x = \"\".run {\n length\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TrailingComma", + "shortDescription": { + "text": "Trailing comma recommendations" + }, + "fullDescription": { + "text": "Reports trailing commas that do not follow the recommended style guide.", + "markdown": "Reports trailing commas that do not follow the recommended [style guide](https://kotlinlang.org/docs/coding-conventions.html#trailing-commas)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FoldInitializerAndIfToElvis", + "shortDescription": { + "text": "If-Null return/break/... foldable to '?:'" + }, + "fullDescription": { + "text": "Reports an 'if' expression that checks variable being null or not right after initializing it that can be converted into an elvis operator in the initializer. Example: 'fun test(foo: Int?, bar: Int): Int {\n var i = foo\n if (i == null) {\n return bar\n }\n return i\n }' The quick-fix converts the 'if' expression with an initializer into an elvis expression: 'fun test(foo: Int?, bar: Int): Int {\n var i = foo ?: return bar\n return i\n }'", + "markdown": "Reports an `if` expression that checks variable being null or not right after initializing it that can be converted into an elvis operator in the initializer.\n\n**Example:**\n\n\n fun test(foo: Int?, bar: Int): Int {\n var i = foo\n if (i == null) {\n return bar\n }\n return i\n }\n\nThe quick-fix converts the `if` expression with an initializer into an elvis expression:\n\n\n fun test(foo: Int?, bar: Int): Int {\n var i = foo ?: return bar\n return i\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CanSealedSubClassBeObject", + "shortDescription": { + "text": "Sealed subclass without state and overridden equals" + }, + "fullDescription": { + "text": "Reports direct inheritors of 'sealed' classes that have no state and overridden 'equals()' method. It's highly recommended to override 'equals()' to provide comparison stability, or convert the 'class' to an 'object' to reach the same effect. Example: 'sealed class Receiver {\n class Everyone : Receiver()\n class User(val id: Int) : Receiver()\n }' A quick-fix converts a 'class' into an 'object': 'sealed class Receiver {\n object Everyone : Receiver()\n class User(val id: Int) : Receiver()\n }'", + "markdown": "Reports direct inheritors of `sealed` classes that have no state and overridden `equals()` method.\n\nIt's highly recommended to override `equals()` to provide comparison stability, or convert the `class` to an `object` to reach the same effect.\n\n**Example:**\n\n\n sealed class Receiver {\n class Everyone : Receiver()\n class User(val id: Int) : Receiver()\n }\n\nA quick-fix converts a `class` into an `object`:\n\n\n sealed class Receiver {\n object Everyone : Receiver()\n class User(val id: Int) : Receiver()\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InlineClassDeprecatedMigration", + "shortDescription": { + "text": "Inline classes are deprecated since 1.5" + }, + "fullDescription": { + "text": "Reports inline classes that are deprecated and cause compilation warnings in Kotlin 1.5 and later. See What's new in Kotlin 1.5.0 Example: 'inline class Password(val s: String)' After the quick-fix is applied: '@JvmInline\n value class Password(val s: String)' Inspection is available for Kotlin language level starting from 1.5.", + "markdown": "Reports inline classes that are deprecated and cause compilation warnings in Kotlin 1.5 and later.\nSee [What's new in Kotlin 1.5.0](https://kotlinlang.org/docs/whatsnew15.html#inline-classes)\n\nExample:\n\n\n inline class Password(val s: String)\n\nAfter the quick-fix is applied:\n\n\n @JvmInline\n value class Password(val s: String)\n\nInspection is available for Kotlin language level starting from 1.5." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PropertyName", + "shortDescription": { + "text": "Property naming convention" + }, + "fullDescription": { + "text": "Reports property names that do not follow the recommended naming conventions. Consistent naming allows for easier code reading and understanding. According to the Kotlin official style guide, property names should start with a lowercase letter and use camel case. It is possible to introduce other naming rules by changing the \"Pattern\" regular expression. Example: 'val My_Cool_Property = \"\"' A quick-fix renames the class according to the Kotlin naming conventions: 'val myCoolProperty = \"\"'", + "markdown": "Reports property names that do not follow the recommended naming conventions.\n\n\nConsistent naming allows for easier code reading and understanding.\nAccording to the [Kotlin official style guide](https://kotlinlang.org/docs/coding-conventions.html#naming-rules),\nproperty names should start with a lowercase letter and use camel case.\n\nIt is possible to introduce other naming rules by changing the \"Pattern\" regular expression.\n\n**Example:**\n\n\n val My_Cool_Property = \"\"\n\nA quick-fix renames the class according to the Kotlin naming conventions:\n\n\n val myCoolProperty = \"\"\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Naming conventions", + "index": 48, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinMavenPluginPhase", + "shortDescription": { + "text": "Kotlin Maven Plugin misconfigured" + }, + "fullDescription": { + "text": "Reports kotlin-maven-plugin configuration issues", + "markdown": "Reports kotlin-maven-plugin configuration issues" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 2, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceWithStringBuilderAppendRange", + "shortDescription": { + "text": "'StringBuilder.append(CharArray, offset, len)' call on the JVM" + }, + "fullDescription": { + "text": "Reports a 'StringBuilder.append(CharArray, offset, len)' function call on the JVM platform that should be replaced with a 'StringBuilder.appendRange(CharArray, startIndex, endIndex)' function call. The 'append' function behaves differently on the JVM, JS and Native platforms, so using the 'appendRange' function is recommended. Example: 'fun f(charArray: CharArray, offset: Int, len: Int): String {\n return buildString {\n append(charArray, offset, len)\n }\n }' After the quick-fix is applied: 'fun f(charArray: CharArray, offset: Int, len: Int): String {\n return buildString {\n appendRange(charArray, offset, offset + len)\n }\n }'", + "markdown": "Reports a `StringBuilder.append(CharArray, offset, len)` function call on the JVM platform that should be replaced with a `StringBuilder.appendRange(CharArray, startIndex, endIndex)` function call.\n\nThe `append` function behaves differently on the JVM, JS and Native platforms, so using the `appendRange` function is recommended.\n\n**Example:**\n\n\n fun f(charArray: CharArray, offset: Int, len: Int): String {\n return buildString {\n append(charArray, offset, len)\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun f(charArray: CharArray, offset: Int, len: Int): String {\n return buildString {\n appendRange(charArray, offset, offset + len)\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Other problems", + "index": 53, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConvertToStringTemplate", + "shortDescription": { + "text": "String concatenation that can be converted to string template" + }, + "fullDescription": { + "text": "Reports string concatenation that can be converted to a string template. Using string templates is recommended as it makes code easier to read. Example: 'fun example() {\n val capitals = mapOf(\"France\" to \"Paris\", \"Spain\" to \"Madrid\")\n for ((country, capital) in capitals) {\n print(capital + \" is a capital of \" + country)\n }\n }' After the quick-fix is applied: 'fun example() {\n val capitals = mapOf(\"France\" to \"Paris\", \"Spain\" to \"Madrid\")\n for ((country, capital) in capitals) {\n print(\"$capital is a capital of $country\")\n }\n }'", + "markdown": "Reports string concatenation that can be converted to a string template.\n\nUsing string templates is recommended as it makes code easier to read.\n\n**Example:**\n\n\n fun example() {\n val capitals = mapOf(\"France\" to \"Paris\", \"Spain\" to \"Madrid\")\n for ((country, capital) in capitals) {\n print(capital + \" is a capital of \" + country)\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun example() {\n val capitals = mapOf(\"France\" to \"Paris\", \"Spain\" to \"Madrid\")\n for ((country, capital) in capitals) {\n print(\"$capital is a capital of $country\")\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinInvalidBundleOrProperty", + "shortDescription": { + "text": "Invalid property key" + }, + "fullDescription": { + "text": "Reports unresolved references to '.properties' file keys and resource bundles in Kotlin files.", + "markdown": "Reports unresolved references to `.properties` file keys and resource bundles in Kotlin files." + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 2, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UselessCallOnCollection", + "shortDescription": { + "text": "Useless call on collection type" + }, + "fullDescription": { + "text": "Reports 'filter…' calls from the standard library on already filtered collections. Several functions from the standard library such as 'filterNotNull()' or 'filterIsInstance' have sense only when they are called on receivers that have types distinct from the resulting one. Otherwise, such calls can be omitted as the result will be the same. Remove redundant call quick-fix can be used to amend the code automatically. Example: 'fun test(list: List) {\n val x = list.filterNotNull() // quick-fix simplifies to 'list'\n val y = list.filterIsInstance() // quick-fix simplifies to 'list'\n }'", + "markdown": "Reports `filter...` calls from the standard library on already filtered collections.\n\nSeveral functions from the standard library such as `filterNotNull()` or `filterIsInstance`\nhave sense only when they are called on receivers that have types distinct from the resulting one. Otherwise,\nsuch calls can be omitted as the result will be the same.\n\n**Remove redundant call** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n fun test(list: List) {\n val x = list.filterNotNull() // quick-fix simplifies to 'list'\n val y = list.filterIsInstance() // quick-fix simplifies to 'list'\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifiableCall", + "shortDescription": { + "text": "Library function call could be simplified" + }, + "fullDescription": { + "text": "Reports library function calls which could be replaced by simplified one. Using corresponding functions makes your code simpler. The quick-fix replaces the function calls with another one. Example: 'fun test(list: List) {\n list.filter { it is String }\n }' After the quick-fix is applied: 'fun test(list: List) {\n list.filterIsInstance()\n }'", + "markdown": "Reports library function calls which could be replaced by simplified one.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces the function calls with another one.\n\n**Example:**\n\n\n fun test(list: List) {\n list.filter { it is String }\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(list: List) {\n list.filterIsInstance()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObjectLiteralToLambda", + "shortDescription": { + "text": "Object literal can be converted to lambda" + }, + "fullDescription": { + "text": "Reports anonymous object literals implementing a Java interface with a single abstract method that can be converted into a call with a lambda expression. Example: 'class SomeService {\n val threadPool = Executors.newCachedThreadPool()\n \n fun foo() {\n threadPool.submit(object : Runnable {\n override fun run() {\n println(\"hello\")\n }\n })\n }\n}' After the quick-fix is applied: 'fun foo() {\n threadPool.submit { println(\"hello\") }\n }'", + "markdown": "Reports anonymous object literals implementing a Java interface with a single abstract method that can be converted into a call with a lambda expression.\n\n**Example:**\n\n\n class SomeService {\n val threadPool = Executors.newCachedThreadPool()\n \n fun foo() {\n threadPool.submit(object : Runnable {\n override fun run() {\n println(\"hello\")\n }\n })\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo() {\n threadPool.submit { println(\"hello\") }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantLambdaOrAnonymousFunction", + "shortDescription": { + "text": "Redundant creation of lambda or anonymous function" + }, + "fullDescription": { + "text": "Reports lambdas or anonymous functions that are created and used immediately. 'fun test() {\n ({ println() })() // redundant\n (fun() { println() })() // redundant\n }'", + "markdown": "Reports lambdas or anonymous functions that are created and used immediately.\n\n\n fun test() {\n ({ println() })() // redundant\n (fun() { println() })() // redundant\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantRequireNotNullCall", + "shortDescription": { + "text": "Redundant 'requireNotNull' or 'checkNotNull' call" + }, + "fullDescription": { + "text": "Reports redundant 'requireNotNull' or 'checkNotNull' call on non-nullable expressions. Example: 'fun foo(i: Int) {\n requireNotNull(i) // This 'i' is always not null, so this 'requireNotNull' call is redundant.\n ...\n }' After the quick-fix is applied: 'fun foo(i: Int) {\n ...\n }'", + "markdown": "Reports redundant `requireNotNull` or `checkNotNull` call on non-nullable expressions.\n\n**Example:**\n\n\n fun foo(i: Int) {\n requireNotNull(i) // This 'i' is always not null, so this 'requireNotNull' call is redundant.\n ...\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(i: Int) {\n ...\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObjectPropertyName", + "shortDescription": { + "text": "Object property naming convention" + }, + "fullDescription": { + "text": "Reports properties that do not follow the naming conventions. The following properties are reported: Top-level properties Properties in objects and companion objects You can specify the required pattern in the inspection options. Recommended naming conventions: it has to start with an uppercase letter, use camel case and no underscores. Example: '// top-level property\n val USER_NAME_FIELD = \"UserName\"\n // top-level property holding reference to singleton object\n val PersonComparator: Comparator = /*...*/\n\n class Person {\n companion object {\n // property in companion object\n val NO_NAME = Person()\n }\n }'", + "markdown": "Reports properties that do not follow the naming conventions.\n\nThe following properties are reported:\n\n* Top-level properties\n* Properties in objects and companion objects\n\nYou can specify the required pattern in the inspection options.\n\n[Recommended naming conventions](https://kotlinlang.org/docs/coding-conventions.html#naming-rules): it has to start with an uppercase letter, use camel case and no underscores.\n\n**Example:**\n\n\n // top-level property\n val USER_NAME_FIELD = \"UserName\"\n // top-level property holding reference to singleton object\n val PersonComparator: Comparator = /*...*/\n\n class Person {\n companion object {\n // property in companion object\n val NO_NAME = Person()\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Naming conventions", + "index": 48, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PackageDirectoryMismatch", + "shortDescription": { + "text": "Package name does not match containing directory" + }, + "fullDescription": { + "text": "Reports 'package' directives that do not match the location of the file. When applying fixes, \"Move refactoring\" defaults are used to update usages of changed declarations, namely: \"Search in comments and strings\" \"Search for text occurrences\"", + "markdown": "Reports `package` directives that do not match the location of the file.\n\n\nWhen applying fixes, \"Move refactoring\" defaults are used to update usages of changed declarations, namely:\n\n* \"Search in comments and strings\"\n* \"Search for text occurrences\"" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Java interop issues", + "index": 66, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConvertObjectToDataObject", + "shortDescription": { + "text": "Convert 'object' to 'data object'" + }, + "fullDescription": { + "text": "Reports 'object' that can be converted to 'data object' 'data object' auto-generates 'toString', 'equals', 'hashCode' and 'readResolve' if the 'object' is annotated with 'java.io.Serializable' There are mainly two cases when you should consider converting 'object' to 'data object'. The first one is when custom 'toString' returns name of the class. The second one is when the 'object' implements 'java.io.Serializable' Example: 'object Foo {\n override fun toString(): String = \"Foo\"\n }' After the quick-fix is applied: 'data object Foo' This inspection only reports if the Kotlin language level of the project or module is 1.8 or higher", + "markdown": "Reports `object` that can be converted to `data object`\n\n`data object` auto-generates `toString`, `equals`, `hashCode` and `readResolve` if\nthe `object` is annotated with `java.io.Serializable`\n\nThere are mainly two cases when you should consider converting `object` to `data object`. The first one is when\ncustom `toString` returns name of the class. The second one is when the `object` implements\n`java.io.Serializable`\n\n**Example:**\n\n\n object Foo {\n override fun toString(): String = \"Foo\"\n }\n\nAfter the quick-fix is applied:\n\n\n data object Foo\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.8 or higher" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BooleanLiteralArgument", + "shortDescription": { + "text": "Boolean literal argument without parameter name" + }, + "fullDescription": { + "text": "Reports call arguments with 'Boolean' type without explicit parameter names specified. When multiple boolean literals are passed sequentially, it's easy to forget parameter ordering that could lead to mistakes. Explicit parameter names allow for easier code reading and understanding. Example: 'fun check(checkName: Boolean, checkAddress: Boolean, checkPhone: Boolean) {}\n\n fun usage() {\n check(true, false, true) // What does this mean?\n }' A quick-fix adds missing parameter names: 'fun check(checkName: Boolean, checkAddress: Boolean, checkPhone: Boolean) {}\n\n fun usage() {\n check(checkName = true, checkAddress = false, checkPhone = true)\n }'", + "markdown": "Reports call arguments with `Boolean` type without explicit parameter names specified.\n\n\nWhen multiple boolean literals are passed sequentially, it's easy to forget parameter ordering that could lead to mistakes.\nExplicit parameter names allow for easier code reading and understanding.\n\n**Example:**\n\n\n fun check(checkName: Boolean, checkAddress: Boolean, checkPhone: Boolean) {}\n\n fun usage() {\n check(true, false, true) // What does this mean?\n }\n\nA quick-fix adds missing parameter names:\n\n\n fun check(checkName: Boolean, checkAddress: Boolean, checkPhone: Boolean) {}\n\n fun usage() {\n check(checkName = true, checkAddress = false, checkPhone = true)\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConvertArgumentToSet", + "shortDescription": { + "text": "Argument could be converted to 'Set' to improve performance" + }, + "fullDescription": { + "text": "Detects the function calls that could work faster with an argument converted to 'Set'. Operations like 'minus' or 'intersect' are more effective when their argument is a set. An explicit conversion of an 'Iterable' or an 'Array' into a 'Set' can often make code more effective. The quick-fix adds an explicit conversion to the function call. Example: 'fun f(a: Iterable, b: Iterable): Int =\n a.intersect(b).size' After the quick-fix is applied: 'fun f(a: Iterable, b: Iterable): Int =\n a.intersect(b.toSet()).size'", + "markdown": "Detects the function calls that could work faster with an argument converted to `Set`.\n\n\nOperations like 'minus' or 'intersect' are more effective when their argument is a set.\nAn explicit conversion of an `Iterable` or an `Array`\ninto a `Set` can often make code more effective.\n\n\nThe quick-fix adds an explicit conversion to the function call.\n\n**Example:**\n\n\n fun f(a: Iterable, b: Iterable): Int =\n a.intersect(b).size\n\nAfter the quick-fix is applied:\n\n\n fun f(a: Iterable, b: Iterable): Int =\n a.intersect(b.toSet()).size\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Other problems", + "index": 53, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinCovariantEquals", + "shortDescription": { + "text": "Covariant 'equals()'" + }, + "fullDescription": { + "text": "Reports 'equals()' that takes an argument type other than 'Any?' if the class does not have another 'equals()' that takes 'Any?' as its argument type. Example: 'class Foo {\n fun equals(other: Foo?): Boolean {\n return true\n }\n }' To fix the problem create 'equals()' method that takes an argument of type 'Any?'.", + "markdown": "Reports `equals()` that takes an argument type other than `Any?` if the class does not have another `equals()` that takes `Any?` as its argument type.\n\n**Example:**\n\n\n class Foo {\n fun equals(other: Foo?): Boolean {\n return true\n }\n }\n\nTo fix the problem create `equals()` method that takes an argument of type `Any?`." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceGuardClauseWithFunctionCall", + "shortDescription": { + "text": "Guard clause can be replaced with Kotlin's function call" + }, + "fullDescription": { + "text": "Reports guard clauses that can be replaced with a function call. Example: 'fun test(foo: Int?) {\n if (foo == null) throw IllegalArgumentException(\"foo\") // replaceable clause\n }' After the quick-fix is applied: 'fun test(foo: Int?) {\n checkNotNull(foo)\n }'", + "markdown": "Reports guard clauses that can be replaced with a function call.\n\n**Example:**\n\n fun test(foo: Int?) {\n if (foo == null) throw IllegalArgumentException(\"foo\") // replaceable clause\n }\n\nAfter the quick-fix is applied:\n\n fun test(foo: Int?) {\n checkNotNull(foo)\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceSizeZeroCheckWithIsEmpty", + "shortDescription": { + "text": "Size zero check can be replaced with 'isEmpty()'" + }, + "fullDescription": { + "text": "Reports 'size == 0' checks on 'Collections/Array/String' that should be replaced with 'isEmpty()'. Using 'isEmpty()' makes your code simpler. The quick-fix replaces the size check with 'isEmpty()'. Example: 'fun foo() {\n val arrayOf = arrayOf(1, 2, 3)\n arrayOf.size == 0\n }' After the quick-fix is applied: 'fun foo() {\n val arrayOf = arrayOf(1, 2, 3)\n arrayOf.isEmpty()\n }'", + "markdown": "Reports `size == 0` checks on `Collections/Array/String` that should be replaced with `isEmpty()`.\n\nUsing `isEmpty()` makes your code simpler.\n\nThe quick-fix replaces the size check with `isEmpty()`.\n\n**Example:**\n\n\n fun foo() {\n val arrayOf = arrayOf(1, 2, 3)\n arrayOf.size == 0\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo() {\n val arrayOf = arrayOf(1, 2, 3)\n arrayOf.isEmpty()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AmbiguousExpressionInWhenBranchMigration", + "shortDescription": { + "text": "Ambiguous logical expressions in 'when' branches since 1.7" + }, + "fullDescription": { + "text": "Reports ambiguous logical expressions in 'when' branches which cause compilation errors in Kotlin 1.8 and later. 'fun Int.matches(strict: Boolean): Boolean = when (strict) {\n true -> this == 6\n this in (4..7) -> true // is ambiguous\n else -> false\n }' After the quick-fix is applied: 'fun Int.matches(strict: Boolean): Boolean = when (strict) {\n true -> this == 6\n (this in (4..7)) -> true // wrapped in parentheses\n else -> false\n }' Inspection is available for Kotlin language level starting from 1.7.", + "markdown": "Reports ambiguous logical expressions in `when` branches which cause compilation errors in Kotlin 1.8 and later.\n\n\n fun Int.matches(strict: Boolean): Boolean = when (strict) {\n true -> this == 6\n this in (4..7) -> true // is ambiguous\n else -> false\n }\n\nAfter the quick-fix is applied:\n\n\n fun Int.matches(strict: Boolean): Boolean = when (strict) {\n true -> this == 6\n (this in (4..7)) -> true // wrapped in parentheses\n else -> false\n }\n\nInspection is available for Kotlin language level starting from 1.7." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantEnumConstructorInvocation", + "shortDescription": { + "text": "Redundant enum constructor invocation" + }, + "fullDescription": { + "text": "Reports redundant constructor invocation on an enum entry. Example: 'enum class Baz(i: Int = 0) {\n A(1),\n B(),\n C(),\n }' After the quick-fix is applied: 'enum class Baz(i: Int = 0) {\n A(1),\n B,\n C,\n }'", + "markdown": "Reports redundant constructor invocation on an enum entry.\n\n**Example:**\n\n\n enum class Baz(i: Int = 0) {\n A(1),\n B(),\n C(),\n }\n\nAfter the quick-fix is applied:\n\n\n enum class Baz(i: Int = 0) {\n A(1),\n B,\n C,\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceToStringWithStringTemplate", + "shortDescription": { + "text": "Call of 'toString' could be replaced with string template" + }, + "fullDescription": { + "text": "Reports 'toString' function calls that can be replaced with a string template. Using string templates makes your code simpler. The quick-fix replaces 'toString' with a string template. Example: 'fun test(): String {\n val x = 1\n return x.toString()\n }' After the quick-fix is applied: 'fun test(): String {\n val x = 1\n return \"$x\"\n }'", + "markdown": "Reports `toString` function calls that can be replaced with a string template.\n\nUsing string templates makes your code simpler.\n\nThe quick-fix replaces `toString` with a string template.\n\n**Example:**\n\n\n fun test(): String {\n val x = 1\n return x.toString()\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(): String {\n val x = 1\n return \"$x\"\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ProtectedInFinal", + "shortDescription": { + "text": "'protected' visibility is effectively 'private' in a final class" + }, + "fullDescription": { + "text": "Reports 'protected' visibility used inside of a 'final' class. In such cases 'protected' members are accessible only in the class itself, so they are effectively 'private'. Example: 'class FinalClass {\n protected fun foo() {}\n }' After the quick-fix is applied: 'class FinalClass {\n private fun foo() {}\n }'", + "markdown": "Reports `protected` visibility used inside of a `final` class. In such cases `protected` members are accessible only in the class itself, so they are effectively `private`.\n\n**Example:**\n\n\n class FinalClass {\n protected fun foo() {}\n }\n\nAfter the quick-fix is applied:\n\n\n class FinalClass {\n private fun foo() {}\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FakeJvmFieldConstant", + "shortDescription": { + "text": "Kotlin non-const property used as Java constant" + }, + "fullDescription": { + "text": "Reports Kotlin properties that are not 'const' and used as Java annotation arguments. For example, a property with the '@JvmField' annotation has an initializer that can be evaluated at compile-time, and it has a primitive or 'String' type. Such properties have a 'ConstantValue' attribute in bytecode in Kotlin 1.1-1.2. This attribute allows javac to fold usages of the corresponding field and use that field in annotations. This can lead to incorrect behavior in the case of separate or incremental compilation in mixed Java/Kotlin code. This behavior is subject to change in Kotlin 1.3 (no 'ConstantValue' attribute any more). Example: Kotlin code in foo.kt file: 'annotation class Ann(val s: String)\n @JvmField val importantString = \"important\"' Java code: 'public class JavaUser {\n // This is dangerous\n @Ann(s = FooKt.importantString)\n public void foo() {}\n }' To fix the problem replace the '@JvmField' annotation with the 'const' modifier on a relevant Kotlin property or inline it.", + "markdown": "Reports Kotlin properties that are not `const` and used as Java annotation arguments.\n\n\nFor example, a property with the `@JvmField` annotation has an initializer that can be evaluated at compile-time,\nand it has a primitive or `String` type.\n\n\nSuch properties have a `ConstantValue` attribute in bytecode in Kotlin 1.1-1.2.\nThis attribute allows javac to fold usages of the corresponding field and use that field in annotations.\nThis can lead to incorrect behavior in the case of separate or incremental compilation in mixed Java/Kotlin code.\nThis behavior is subject to change in Kotlin 1.3 (no `ConstantValue` attribute any more).\n\n**Example:**\n\nKotlin code in foo.kt file:\n\n\n annotation class Ann(val s: String)\n @JvmField val importantString = \"important\"\n\nJava code:\n\n\n public class JavaUser {\n // This is dangerous\n @Ann(s = FooKt.importantString)\n public void foo() {}\n }\n\nTo fix the problem replace the `@JvmField` annotation with the `const` modifier on a relevant Kotlin property or inline it." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Java interop issues", + "index": 66, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WhenWithOnlyElse", + "shortDescription": { + "text": "'when' has only 'else' branch and can be simplified" + }, + "fullDescription": { + "text": "Reports 'when' expressions with only an 'else' branch that can be simplified. Simplify expression quick-fix can be used to amend the code automatically. Example: 'fun redundant() {\n val x = when { // <== redundant, a quick-fix simplifies the when expression to \"val x = 1\"\n else -> 1\n }\n }'", + "markdown": "Reports `when` expressions with only an `else` branch that can be simplified.\n\n**Simplify expression** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n fun redundant() {\n val x = when { // <== redundant, a quick-fix simplifies the when expression to \"val x = 1\"\n else -> 1\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceRangeStartEndInclusiveWithFirstLast", + "shortDescription": { + "text": "Boxed properties should be replaced with unboxed" + }, + "fullDescription": { + "text": "Reports boxed 'Range.start' and 'Range.endInclusive' properties. These properties can be replaced with unboxed 'first' and 'last' properties to avoid redundant calls. The quick-fix replaces 'start' and 'endInclusive' properties with the corresponding 'first' and 'last'. Example: 'fun foo(range: CharRange) {\n val lastElement = range.endInclusive\n }' After the quick-fix is applied: 'fun foo(range: CharRange) {\n val lastElement = range.last\n }'", + "markdown": "Reports **boxed** `Range.start` and `Range.endInclusive` properties.\n\nThese properties can be replaced with **unboxed** `first` and `last` properties to avoid redundant calls.\n\nThe quick-fix replaces `start` and `endInclusive` properties with the corresponding `first` and `last`.\n\n**Example:**\n\n\n fun foo(range: CharRange) {\n val lastElement = range.endInclusive\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(range: CharRange) {\n val lastElement = range.last\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceSizeCheckWithIsNotEmpty", + "shortDescription": { + "text": "Size check can be replaced with 'isNotEmpty()'" + }, + "fullDescription": { + "text": "Reports size checks of 'Collections/Array/String' that should be replaced with 'isNotEmpty()'. Using 'isNotEmpty()' makes your code simpler. The quick-fix replaces the size check with 'isNotEmpty()'. Example: 'fun foo() {\n val arrayOf = arrayOf(1, 2, 3)\n arrayOf.size > 0\n }' After the quick-fix is applied: 'fun foo() {\n val arrayOf = arrayOf(1, 2, 3)\n arrayOf.isNotEmpty()\n }'", + "markdown": "Reports size checks of `Collections/Array/String` that should be replaced with `isNotEmpty()`.\n\nUsing `isNotEmpty()` makes your code simpler.\n\nThe quick-fix replaces the size check with `isNotEmpty()`.\n\n**Example:**\n\n\n fun foo() {\n val arrayOf = arrayOf(1, 2, 3)\n arrayOf.size > 0\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo() {\n val arrayOf = arrayOf(1, 2, 3)\n arrayOf.isNotEmpty()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantSemicolon", + "shortDescription": { + "text": "Redundant semicolon" + }, + "fullDescription": { + "text": "Reports redundant semicolons (';') that can be safely removed. Kotlin does not require a semicolon at the end of each statement or expression. A quick-fix is suggested to remove redundant semicolons. Example: 'val myMap = mapOf(\"one\" to 1, \"two\" to 2);\n myMap.forEach { (key, value) -> print(\"$key -> $value\")};' After the quick-fix is applied: 'val myMap = mapOf(\"one\" to 1, \"two\" to 2)\n myMap.forEach { (key, value) -> print(\"$key -> $value\")}' There are two cases though where a semicolon is required: Several statements placed on a single line need to be separated with semicolons: 'map.forEach { val (key, value) = it; println(\"$key -> $value\") }' 'enum' classes that also declare properties or functions, require a semicolon after the list of enum constants: 'enum class Mode {\n SILENT, VERBOSE;\n\n fun isSilent(): Boolean = this == SILENT\n }'", + "markdown": "Reports redundant semicolons (`;`) that can be safely removed.\n\n\nKotlin does not require a semicolon at the end of each statement or expression.\nA quick-fix is suggested to remove redundant semicolons.\n\n**Example:**\n\n\n val myMap = mapOf(\"one\" to 1, \"two\" to 2);\n myMap.forEach { (key, value) -> print(\"$key -> $value\")};\n\nAfter the quick-fix is applied:\n\n\n val myMap = mapOf(\"one\" to 1, \"two\" to 2)\n myMap.forEach { (key, value) -> print(\"$key -> $value\")}\n\nThere are two cases though where a semicolon is required:\n\n1. Several statements placed on a single line need to be separated with semicolons:\n\n\n map.forEach { val (key, value) = it; println(\"$key -> $value\") }\n\n2. `enum` classes that also declare properties or functions, require a semicolon after the list of enum constants:\n\n\n enum class Mode {\n SILENT, VERBOSE;\n\n fun isSilent(): Boolean = this == SILENT\n }\n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IntroduceWhenSubject", + "shortDescription": { + "text": "'when' that can be simplified by introducing an argument" + }, + "fullDescription": { + "text": "Reports a 'when' expression that can be simplified by introducing a subject argument. Example: 'fun test(obj: Any): String {\n return when {\n obj is String -> \"string\"\n obj is Int -> \"int\"\n else -> \"unknown\"\n }\n }' The quick fix introduces a subject argument: 'fun test(obj: Any): String {\n return when (obj) {\n is String -> \"string\"\n is Int -> \"int\"\n else -> \"unknown\"\n }\n }'", + "markdown": "Reports a `when` expression that can be simplified by introducing a subject argument.\n\n**Example:**\n\n\n fun test(obj: Any): String {\n return when {\n obj is String -> \"string\"\n obj is Int -> \"int\"\n else -> \"unknown\"\n }\n }\n\nThe quick fix introduces a subject argument:\n\n\n fun test(obj: Any): String {\n return when (obj) {\n is String -> \"string\"\n is Int -> \"int\"\n else -> \"unknown\"\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinTestJUnit", + "shortDescription": { + "text": "kotlin-test-junit could be used" + }, + "fullDescription": { + "text": "Reports usage of 'kotlin-test' and 'junit' dependency without 'kotlin-test-junit'. It is recommended to use 'kotlin-test-junit' dependency to work with Kotlin and JUnit.", + "markdown": "Reports usage of `kotlin-test` and `junit` dependency without `kotlin-test-junit`.\n\nIt is recommended to use `kotlin-test-junit` dependency to work with Kotlin and JUnit." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 2, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SafeCastWithReturn", + "shortDescription": { + "text": "Safe cast with 'return' should be replaced with 'if' type check" + }, + "fullDescription": { + "text": "Reports safe cast with 'return' that can be replaced with 'if' type check. Using corresponding functions makes your code simpler. The quick-fix replaces the safe cast with 'if' type check. Example: 'fun test(x: Any) {\n x as? String ?: return\n }' After the quick-fix is applied: 'fun test(x: Any) {\n if (x !is String) return\n }'", + "markdown": "Reports safe cast with `return` that can be replaced with `if` type check.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces the safe cast with `if` type check.\n\n**Example:**\n\n\n fun test(x: Any) {\n x as? String ?: return\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(x: Any) {\n if (x !is String) return\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DeprecatedCallableAddReplaceWith", + "shortDescription": { + "text": "@Deprecated annotation without 'replaceWith' argument" + }, + "fullDescription": { + "text": "Reports deprecated functions and properties that do not have the 'kotlin.ReplaceWith' argument in its 'kotlin.deprecated' annotation and suggests to add one based on their body. Kotlin provides the 'ReplaceWith' argument to replace deprecated declarations automatically. It is recommended to use the argument to fix deprecation issues in code. Example: '@Deprecated(\"Use refined() instead.\")\n fun deprecated() = refined()\n\n fun refined() = 42' A quick-fix adds the 'ReplaceWith()' argument: '@Deprecated(\"Use refined() instead.\", ReplaceWith(\"refined()\"))\n fun deprecated() = refined()\n\n fun refined() = 42'", + "markdown": "Reports deprecated functions and properties that do not have the `kotlin.ReplaceWith` argument in its `kotlin.deprecated` annotation and suggests to add one based on their body.\n\n\nKotlin provides the `ReplaceWith` argument to replace deprecated declarations automatically.\nIt is recommended to use the argument to fix deprecation issues in code.\n\n**Example:**\n\n\n @Deprecated(\"Use refined() instead.\")\n fun deprecated() = refined()\n\n fun refined() = 42\n\nA quick-fix adds the `ReplaceWith()` argument:\n\n\n @Deprecated(\"Use refined() instead.\", ReplaceWith(\"refined()\"))\n fun deprecated() = refined()\n\n fun refined() = 42\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Other problems", + "index": 53, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceAssertBooleanWithAssertEquality", + "shortDescription": { + "text": "Assert boolean could be replaced with assert equality" + }, + "fullDescription": { + "text": "Reports calls to 'assertTrue()' and 'assertFalse()' that can be replaced with assert equality functions. 'assertEquals()', 'assertSame()', and their negating counterparts (-Not-) provide more informative messages on failure. Example: 'assertTrue(a == b)' After the quick-fix is applied: 'assertEquals(a, b)'", + "markdown": "Reports calls to `assertTrue()` and `assertFalse()` that can be replaced with assert equality functions.\n\n\n`assertEquals()`, `assertSame()`, and their negating counterparts (-Not-) provide more informative messages on\nfailure.\n\n**Example:**\n\n assertTrue(a == b)\n\nAfter the quick-fix is applied:\n\n assertEquals(a, b)\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryOptInAnnotation", + "shortDescription": { + "text": "Unnecessary '@OptIn' annotation" + }, + "fullDescription": { + "text": "Reports unnecessary opt-in annotations that can be safely removed. '@OptIn' annotation is required for the code using experimental APIs that can change any time in the future. This annotation becomes useless and possibly misleading if no such API is used (e.g., when the experimental API becomes stable and does not require opting in its usage anymore). Remove annotation quick-fix can be used to remove the unnecessary '@OptIn' annotation. Example: '@OptIn(ExperimentalApi::class)\n fun foo(x: Bar) {\n x.baz()\n }' After the quick-fix is applied: 'fun foo(x: Bar) {\n x.baz()\n }'", + "markdown": "Reports unnecessary opt-in annotations that can be safely removed.\n\n`@OptIn` annotation is required for the code using experimental APIs that can change\nany time in the future. This annotation becomes useless and possibly misleading if no such API is used\n(e.g., when the experimental API becomes stable and does not require opting in its usage anymore).\n\n\n**Remove annotation** quick-fix can be used to remove the unnecessary `@OptIn` annotation.\n\nExample:\n\n\n @OptIn(ExperimentalApi::class)\n fun foo(x: Bar) {\n x.baz()\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(x: Bar) {\n x.baz()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ComplexRedundantLet", + "shortDescription": { + "text": "Redundant argument-based 'let' call" + }, + "fullDescription": { + "text": "Reports a redundant argument-based 'let' call. 'let' is redundant when the lambda parameter is only used as a qualifier in a call expression. If you need to give a name to the qualifying expression, declare a local variable. Example: 'fun splitNumbers() {\n \"1,2,3\".let { it.split(',') }\n }' A quick-fix removes the extra 'let()' call: 'fun example() {\n \"1,2,3\".split(',')\n }' Alternative: 'fun splitNumbers() {\n val numbers = \"1,2,3\"\n numbers.split(',')\n }'", + "markdown": "Reports a redundant argument-based `let` call.\n\n`let` is redundant when the lambda parameter is only used as a qualifier in a call expression.\n\nIf you need to give a name to the qualifying expression, declare a local variable.\n\n**Example:**\n\n\n fun splitNumbers() {\n \"1,2,3\".let { it.split(',') }\n }\n\nA quick-fix removes the extra `let()` call:\n\n\n fun example() {\n \"1,2,3\".split(',')\n }\n\nAlternative:\n\n\n fun splitNumbers() {\n val numbers = \"1,2,3\"\n numbers.split(',')\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveRedundantSpreadOperator", + "shortDescription": { + "text": "Redundant spread operator" + }, + "fullDescription": { + "text": "Reports the use of a redundant spread operator for a family of 'arrayOf' function calls. Use the 'Remove redundant spread operator' quick-fix to clean up the code. Examples: 'fun foo(vararg s: String) { }\n\n fun bar(ss: Array) {\n foo(*arrayOf(\"abc\")) // for the both calls of 'foo', array creation\n foo(*arrayOf(*ss, \"zzz\")) // and its subsequent \"spreading\" is redundant\n }' After the quick-fix is applied: 'fun foo(vararg s: String) { }\n\n fun bar(ss: Array) {\n foo(\"abc\")\n foo(*ss, \"zzz\")\n }'", + "markdown": "Reports the use of a redundant spread operator for a family of `arrayOf` function calls.\n\nUse the 'Remove redundant spread operator' quick-fix to clean up the code.\n\n**Examples:**\n\n\n fun foo(vararg s: String) { }\n\n fun bar(ss: Array) {\n foo(*arrayOf(\"abc\")) // for the both calls of 'foo', array creation\n foo(*arrayOf(*ss, \"zzz\")) // and its subsequent \"spreading\" is redundant\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(vararg s: String) { }\n\n fun bar(ss: Array) {\n foo(\"abc\")\n foo(*ss, \"zzz\")\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ProhibitJvmOverloadsOnConstructorsOfAnnotationClassesMigration", + "shortDescription": { + "text": "'@JvmOverloads' annotation cannot be used on constructors of annotation classes since 1.4" + }, + "fullDescription": { + "text": "Reports '@JvmOverloads' on constructors of annotation classes because it's meaningless. There is no footprint of '@JvmOverloads' in the generated bytecode and Kotlin metadata, so '@JvmOverloads' doesn't affect the generated bytecode and the code behavior. '@JvmOverloads' on constructors of annotation classes causes a compilation error since Kotlin 1.4. Example: 'annotation class A @JvmOverloads constructor(val x: Int = 1)' After the quick-fix is applied: 'annotation class A constructor(val x: Int = 1)'", + "markdown": "Reports `@JvmOverloads` on constructors of annotation classes because it's meaningless.\n\n\nThere is no footprint of `@JvmOverloads` in the generated bytecode and Kotlin metadata,\nso `@JvmOverloads` doesn't affect the generated bytecode and the code behavior.\n\n`@JvmOverloads` on constructors of annotation classes causes a compilation error since Kotlin 1.4.\n\n**Example:**\n\n\n annotation class A @JvmOverloads constructor(val x: Int = 1)\n\nAfter the quick-fix is applied:\n\n\n annotation class A constructor(val x: Int = 1)\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveSetterParameterType", + "shortDescription": { + "text": "Redundant setter parameter type" + }, + "fullDescription": { + "text": "Reports explicitly specified parameter types in property setters. Setter parameter type always matches the property type, so it's not required to be explicit. The 'Remove explicit type specification' quick-fix allows amending the code accordingly. Examples: 'fun process(x: Int) {}\n\n var x: Int = 0\n set(value: Int) = process(value) // <== 'Int' specification can be safely omitted' After the quick-fix is applied: 'fun process(x: Int) {}\n\n var x: Int = 0\n set(value) = process(value)'", + "markdown": "Reports explicitly specified parameter types in property setters.\n\n\nSetter parameter type always matches the property type, so it's not required to be explicit.\nThe 'Remove explicit type specification' quick-fix allows amending the code accordingly.\n\n**Examples:**\n\n\n fun process(x: Int) {}\n\n var x: Int = 0\n set(value: Int) = process(value) // <== 'Int' specification can be safely omitted\n\nAfter the quick-fix is applied:\n\n\n fun process(x: Int) {}\n\n var x: Int = 0\n set(value) = process(value)\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObjectPrivatePropertyName", + "shortDescription": { + "text": "Object private property naming convention" + }, + "fullDescription": { + "text": "Reports properties that do not follow the naming conventions. The following properties are reported: Private properties in objects and companion objects You can specify the required pattern in the inspection options. Recommended naming conventions: it has to start with an underscore or an uppercase letter, use camel case. Example: 'class Person {\n companion object {\n // property in companion object\n private val NO_NAME = Person()\n }\n }'", + "markdown": "Reports properties that do not follow the naming conventions.\n\nThe following properties are reported:\n\n* Private properties in objects and companion objects\n\nYou can specify the required pattern in the inspection options.\n\n[Recommended naming conventions](https://kotlinlang.org/docs/coding-conventions.html#naming-rules): it has to start with an underscore or an uppercase letter, use camel case.\n\n**Example:**\n\n\n class Person {\n companion object {\n // property in companion object\n private val NO_NAME = Person()\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Naming conventions", + "index": 48, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IfThenToElvis", + "shortDescription": { + "text": "If-Then foldable to '?:'" + }, + "fullDescription": { + "text": "Reports 'if-then' expressions that can be folded into elvis ('?:') expressions. Example: 'fun maybeFoo(): String? = \"foo\"\n\n var foo = maybeFoo()\n val bar = if (foo == null) \"hello\" else foo' The quick fix converts the 'if-then' expression into an elvis ('?:') expression: 'fun maybeFoo(): String? = \"foo\"\n\n var foo = maybeFoo()\n val bar = foo ?: \"hello\"'", + "markdown": "Reports `if-then` expressions that can be folded into elvis (`?:`) expressions.\n\n**Example:**\n\n\n fun maybeFoo(): String? = \"foo\"\n\n var foo = maybeFoo()\n val bar = if (foo == null) \"hello\" else foo\n\nThe quick fix converts the `if-then` expression into an elvis (`?:`) expression:\n\n\n fun maybeFoo(): String? = \"foo\"\n\n var foo = maybeFoo()\n val bar = foo ?: \"hello\"\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WrapUnaryOperator", + "shortDescription": { + "text": "Ambiguous unary operator use with number constant" + }, + "fullDescription": { + "text": "Reports an unary operator followed by a dot qualifier such as '-1.inc()'. Code like '-1.inc()' can be misleading because '-' has a lower precedence than '.inc()'. As a result, '-1.inc()' evaluates to '-2' and not '0' as it might be expected. Wrap unary operator and value with () quick-fix can be used to amend the code automatically.", + "markdown": "Reports an unary operator followed by a dot qualifier such as `-1.inc()`.\n\nCode like `-1.inc()` can be misleading because `-` has a lower precedence than `.inc()`.\nAs a result, `-1.inc()` evaluates to `-2` and not `0` as it might be expected.\n\n**Wrap unary operator and value with ()** quick-fix can be used to amend the code automatically." + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConflictingExtensionProperty", + "shortDescription": { + "text": "Extension property conflicting with synthetic one" + }, + "fullDescription": { + "text": "Reports extension properties that conflict with synthetic ones that have been automatically produced from Java 'get' or 'set' methods. Such properties should be either removed or renamed to avoid breaking code by future changes in the compiler. A quick-fix deletes an extention property. Example: 'val File.name: String\n get() = getName()' A quick-fix adds the '@Deprecated' annotation: '@Deprecated(\"Is replaced with automatic synthetic extension\", ReplaceWith(\"name\"), level = DeprecationLevel.HIDDEN)\n val File.name: String\n get() = getName()'", + "markdown": "Reports extension properties that conflict with synthetic ones that have been automatically produced from Java `get` or `set` methods.\n\nSuch properties should be either removed or renamed to avoid breaking code by future changes in the compiler.\n\nA quick-fix deletes an extention property.\n\n**Example:**\n\n\n val File.name: String\n get() = getName()\n\nA quick-fix adds the `@Deprecated` annotation:\n\n\n @Deprecated(\"Is replaced with automatic synthetic extension\", ReplaceWith(\"name\"), level = DeprecationLevel.HIDDEN)\n val File.name: String\n get() = getName()\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceNotNullAssertionWithElvisReturn", + "shortDescription": { + "text": "Not-null assertion can be replaced with 'return'" + }, + "fullDescription": { + "text": "Reports not-null assertion ('!!') calls that can be replaced with the elvis operator and return ('?: return'). A not-null assertion can lead to NPE (NullPointerException) that is not expected. Avoiding the use of '!!' is good practice. The quick-fix replaces the not-null assertion with 'return' or 'return null'. Example: 'fun test(number: Int?) {\n val x = number!!\n }' After the quick-fix is applied: 'fun test(number: Int?) {\n val x = number ?: return\n }'", + "markdown": "Reports not-null assertion (`!!`) calls that can be replaced with the elvis operator and return (`?: return`).\n\nA not-null assertion can lead to NPE (NullPointerException) that is not expected. Avoiding the use of `!!` is good practice.\n\nThe quick-fix replaces the not-null assertion with `return` or `return null`.\n\n**Example:**\n\n\n fun test(number: Int?) {\n val x = number!!\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(number: Int?) {\n val x = number ?: return\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceStringFormatWithLiteral", + "shortDescription": { + "text": "'String.format' call can be replaced with string templates" + }, + "fullDescription": { + "text": "Reports 'String.format' calls that can be replaced with string templates. Using string templates makes your code simpler. The quick-fix replaces the call with a string template. Example: 'fun main() {\n val id = \"abc\"\n val date = \"123\"\n val s = String.format(\"%s_%s_%s\", id, date, id)\n }' After the quick-fix is applied: 'fun main() {\n val id = \"abc\"\n val date = \"123\"\n val s = \"${id}_${date}_$id\"\n }'", + "markdown": "Reports `String.format` calls that can be replaced with string templates.\n\nUsing string templates makes your code simpler.\n\nThe quick-fix replaces the call with a string template.\n\n**Example:**\n\n\n fun main() {\n val id = \"abc\"\n val date = \"123\"\n val s = String.format(\"%s_%s_%s\", id, date, id)\n }\n\nAfter the quick-fix is applied:\n\n\n fun main() {\n val id = \"abc\"\n val date = \"123\"\n val s = \"${id}_${date}_$id\"\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceSubstringWithSubstringBefore", + "shortDescription": { + "text": "'substring' call should be replaced with 'substringBefore'" + }, + "fullDescription": { + "text": "Reports calls like 's.substring(0, s.indexOf(x))' that can be replaced with 's.substringBefore(x)'. Using 'substringBefore()' makes your code simpler. The quick-fix replaces the 'substring' call with 'substringBefore'. Example: 'fun foo(s: String) {\n s.substring(0, s.indexOf('x'))\n }' After the quick-fix is applied: 'fun foo(s: String) {\n s.substringBefore('x')\n }'", + "markdown": "Reports calls like `s.substring(0, s.indexOf(x))` that can be replaced with `s.substringBefore(x)`.\n\nUsing `substringBefore()` makes your code simpler.\n\nThe quick-fix replaces the `substring` call with `substringBefore`.\n\n**Example:**\n\n\n fun foo(s: String) {\n s.substring(0, s.indexOf('x'))\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(s: String) {\n s.substringBefore('x')\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceJavaStaticMethodWithKotlinAnalog", + "shortDescription": { + "text": "Java methods should be replaced with Kotlin analog" + }, + "fullDescription": { + "text": "Reports a Java method call that can be replaced with a Kotlin function, for example, 'System.out.println()'. Replacing the code gets rid of the dependency to Java and makes the idiomatic Kotlin code. The quick-fix replaces the Java method calls on the same Kotlin call. Example: 'import java.util.Arrays\n\n fun main() {\n val a = Arrays.asList(1, 3, null)\n }' After the quick-fix is applied: 'fun main() {\n val a = listOf(1, 3, null)\n }'", + "markdown": "Reports a Java method call that can be replaced with a Kotlin function, for example, `System.out.println()`.\n\nReplacing the code gets rid of the dependency to Java and makes the idiomatic Kotlin code.\n\nThe quick-fix replaces the Java method calls on the same Kotlin call.\n\n**Example:**\n\n\n import java.util.Arrays\n\n fun main() {\n val a = Arrays.asList(1, 3, null)\n }\n\nAfter the quick-fix is applied:\n\n\n fun main() {\n val a = listOf(1, 3, null)\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveEmptyParenthesesFromLambdaCall", + "shortDescription": { + "text": "Remove unnecessary parentheses from function call with lambda" + }, + "fullDescription": { + "text": "Reports redundant empty parentheses of function calls where the only parameter is a lambda that's outside the parentheses. Use the 'Remove unnecessary parentheses from function call with lambda' quick-fix to clean up the code. Examples: 'fun foo() {\n listOf(1).forEach() { }\n }' After the quick-fix is applied: 'fun foo() {\n listOf(1).forEach { }\n }'", + "markdown": "Reports redundant empty parentheses of function calls where the only parameter is a lambda that's outside the parentheses.\n\nUse the 'Remove unnecessary parentheses from function call with lambda' quick-fix to clean up the code.\n\n**Examples:**\n\n\n fun foo() {\n listOf(1).forEach() { }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo() {\n listOf(1).forEach { }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceWithOperatorAssignment", + "shortDescription": { + "text": "Assignment can be replaced with operator assignment" + }, + "fullDescription": { + "text": "Reports modifications of variables with a simple assignment (such as 'y = y + x') that can be replaced with an operator assignment. The quick-fix replaces the assignment with an assignment operator. Example: 'fun foo() {\n val list = mutableListOf(1, 2, 3)\n list = list + 4\n }' After the quick-fix is applied: 'fun foo() {\n val list = mutableListOf(1, 2, 3)\n list += 4\n }'", + "markdown": "Reports modifications of variables with a simple assignment (such as `y = y + x`) that can be replaced with an operator assignment.\n\nThe quick-fix replaces the assignment with an assignment operator.\n\n**Example:**\n\n\n fun foo() {\n val list = mutableListOf(1, 2, 3)\n list = list + 4\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo() {\n val list = mutableListOf(1, 2, 3)\n list += 4\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveExplicitSuperQualifier", + "shortDescription": { + "text": "Unnecessary supertype qualification" + }, + "fullDescription": { + "text": "Reports 'super' member calls with redundant supertype qualification. Code in a derived class can call its superclass functions and property accessors implementations using the 'super' keyword. To specify the supertype from which the inherited implementation is taken, 'super' can be qualified by the supertype name in angle brackets, e.g. 'super'. Sometimes this qualification is redundant and can be omitted. Use the 'Remove explicit supertype qualification' quick-fix to clean up the code. Examples: 'open class B {\n open fun foo(){}\n }\n\n class A : B() {\n override fun foo() {\n super.foo() // <== redundant because 'B' is the only supertype\n }\n }\n\n interface I {\n fun foo() {}\n }\n\n class C : B(), I {\n override fun foo() {\n super.foo() // <== here qualifier is needed to distinguish 'B.foo()' from 'I.foo()'\n }\n }' After the quick-fix is applied: 'open class B {\n open fun foo(){}\n }\n\n class A : B() {\n override fun foo() {\n super.foo() // <== Updated\n }\n }\n\n interface I {\n fun foo() {}\n }\n\n class C : B(), I {\n override fun foo() {\n super.foo()\n }\n }'", + "markdown": "Reports `super` member calls with redundant supertype qualification.\n\n\nCode in a derived class can call its superclass functions and property accessors implementations using the `super` keyword.\nTo specify the supertype from which the inherited implementation is taken, `super` can be qualified by the supertype name in\nangle brackets, e.g. `super`. Sometimes this qualification is redundant and can be omitted.\nUse the 'Remove explicit supertype qualification' quick-fix to clean up the code.\n\n**Examples:**\n\n\n open class B {\n open fun foo(){}\n }\n\n class A : B() {\n override fun foo() {\n super.foo() // <== redundant because 'B' is the only supertype\n }\n }\n\n interface I {\n fun foo() {}\n }\n\n class C : B(), I {\n override fun foo() {\n super.foo() // <== here qualifier is needed to distinguish 'B.foo()' from 'I.foo()'\n }\n }\n\nAfter the quick-fix is applied:\n\n\n open class B {\n open fun foo(){}\n }\n\n class A : B() {\n override fun foo() {\n super.foo() // <== Updated\n }\n }\n\n interface I {\n fun foo() {}\n }\n\n class C : B(), I {\n override fun foo() {\n super.foo()\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantExplicitType", + "shortDescription": { + "text": "Obvious explicit type" + }, + "fullDescription": { + "text": "Reports local variables' explicitly given types which are obvious and thus redundant, like 'val f: Foo = Foo()'. Example: 'class Point(val x: Int, val y: Int)\n\n fun foo() {\n val t: Boolean = true\n val p: Point = Point(1, 2)\n val i: Int = 42\n }' After the quick-fix is applied: 'class Point(val x: Int, val y: Int)\n\n fun foo() {\n val t = true\n val p = Point(1, 2)\n val i = 42\n }'", + "markdown": "Reports local variables' explicitly given types which are obvious and thus redundant, like `val f: Foo = Foo()`.\n\n**Example:**\n\n\n class Point(val x: Int, val y: Int)\n\n fun foo() {\n val t: Boolean = true\n val p: Point = Point(1, 2)\n val i: Int = 42\n }\n\nAfter the quick-fix is applied:\n\n\n class Point(val x: Int, val y: Int)\n\n fun foo() {\n val t = true\n val p = Point(1, 2)\n val i = 42\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousVarProperty", + "shortDescription": { + "text": "Suspicious 'var' property: its setter does not influence its getter result" + }, + "fullDescription": { + "text": "Reports 'var' properties with default setter and getter that do not reference backing field. Such properties do not affect calling its setter; therefore, it will be clearer to change such property to 'val' and delete the initializer. Change to val and delete initializer quick-fix can be used to amend the code automatically. Example: '// This property always returns '1' and it doesn't important that the property is a 'var'\n var foo: Int = 0\n get() = 1'", + "markdown": "Reports `var` properties with default setter and getter that do not reference backing field.\n\n\nSuch properties do not affect calling its setter; therefore, it will be clearer to change such property to `val` and delete the initializer.\n\n**Change to val and delete initializer** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n // This property always returns '1' and it doesn't important that the property is a 'var'\n var foo: Int = 0\n get() = 1\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedSymbol", + "shortDescription": { + "text": "Unused symbol" + }, + "fullDescription": { + "text": "Reports symbols that are not used or not reachable from entry points.", + "markdown": "Reports symbols that are not used or not reachable from entry points." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceCollectionCountWithSize", + "shortDescription": { + "text": "Collection count can be converted to size" + }, + "fullDescription": { + "text": "Reports calls to 'Collection.count()'. This function call can be replaced with '.size'. '.size' form ensures that the operation is O(1) and won't allocate extra objects, whereas 'count()' could be confused with 'Iterable.count()', which is O(n) and allocating. Example: 'fun foo() {\n var list = listOf(1,2,3)\n list.count() // replaceable 'count()'\n }' After the quick-fix is applied: 'fun foo() {\n var list = listOf(1,2,3)\n list.size\n }'", + "markdown": "Reports calls to `Collection.count()`.\n\n\nThis function call can be replaced with `.size`.\n\n\n`.size` form ensures that the operation is O(1) and won't allocate extra objects, whereas\n`count()` could be confused with `Iterable.count()`, which is O(n) and allocating.\n\n\n**Example:**\n\n fun foo() {\n var list = listOf(1,2,3)\n list.count() // replaceable 'count()'\n }\n\nAfter the quick-fix is applied:\n\n fun foo() {\n var list = listOf(1,2,3)\n list.size\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceArrayEqualityOpWithArraysEquals", + "shortDescription": { + "text": "Arrays comparison via '==' and '!='" + }, + "fullDescription": { + "text": "Reports usages of '==' or '!=' operator for arrays that should be replaced with 'contentEquals()'. The '==' and '!='operators compare array references instead of their content. Examples: 'fun test() {\n val a = arrayOf(1, 2, 3)\n val b = arrayOf(1, 2, 3)\n println(a == b) // references comparison\n }' After the quick-fix is applied: 'fun test() {\n val a = arrayOf(1, 2, 3)\n val b = arrayOf(1, 2, 3)\n println(a.contentEquals(b))\n }'", + "markdown": "Reports usages of `==` or `!=` operator for arrays that should be replaced with `contentEquals()`.\n\n\nThe `==` and `!=`operators compare array references instead of their content.\n\n**Examples:**\n\n fun test() {\n val a = arrayOf(1, 2, 3)\n val b = arrayOf(1, 2, 3)\n println(a == b) // references comparison\n }\n\nAfter the quick-fix is applied:\n\n fun test() {\n val a = arrayOf(1, 2, 3)\n val b = arrayOf(1, 2, 3)\n println(a.contentEquals(b))\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaCollectionsStaticMethod", + "shortDescription": { + "text": "Java Collections static method call can be replaced with Kotlin stdlib" + }, + "fullDescription": { + "text": "Reports a Java 'Collections' static method call that can be replaced with Kotlin stdlib. Example: 'import java.util.Collections\n\n fun test() {\n val mutableList = mutableListOf(1, 2)\n Collections.fill(mutableList, 3)\n }' The quick fix replaces Java 'Collections' static method call with the corresponding Kotlin stdlib method call: 'import java.util.Collections\n\n fun test() {\n val mutableList = mutableListOf(1, 2)\n mutableList.fill(3)\n }'", + "markdown": "Reports a Java `Collections` static method call that can be replaced with Kotlin stdlib.\n\n**Example:**\n\n\n import java.util.Collections\n\n fun test() {\n val mutableList = mutableListOf(1, 2)\n Collections.fill(mutableList, 3)\n }\n\nThe quick fix replaces Java `Collections` static method call with the corresponding Kotlin stdlib method call:\n\n\n import java.util.Collections\n\n fun test() {\n val mutableList = mutableListOf(1, 2)\n mutableList.fill(3)\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MoveVariableDeclarationIntoWhen", + "shortDescription": { + "text": "Variable declaration could be moved inside 'when'" + }, + "fullDescription": { + "text": "Reports variable declarations that can be moved inside a 'when' expression. Example: 'fun someCalc(x: Int) = x * 42\n\nfun foo(x: Int): Int {\n val a = someCalc(x)\n return when (a) {\n 1 -> a\n 2 -> 2 * a\n else -> 24\n }\n}' After the quick-fix is applied: 'fun foo(x: Int): Int {\n return when (val a = someCalc(x)) {\n 1 -> a\n 2 -> 2 * a\n else -> 24\n }\n}'", + "markdown": "Reports variable declarations that can be moved inside a `when` expression.\n\n**Example:**\n\n\n fun someCalc(x: Int) = x * 42\n\n fun foo(x: Int): Int {\n val a = someCalc(x)\n return when (a) {\n 1 -> a\n 2 -> 2 * a\n else -> 24\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(x: Int): Int {\n return when (val a = someCalc(x)) {\n 1 -> a\n 2 -> 2 * a\n else -> 24\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DeprecatedGradleDependency", + "shortDescription": { + "text": "Deprecated library is used in Gradle" + }, + "fullDescription": { + "text": "Reports deprecated dependencies in Gradle build scripts. Example: 'dependencies {\n compile \"org.jetbrains.kotlin:kotlin-stdlib-jre7:1.2.0\"\n }' After the quick-fix applied: 'dependencies {\n compile \"org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.0\"\n }'", + "markdown": "Reports deprecated dependencies in Gradle build scripts.\n\n**Example:**\n\n\n dependencies {\n compile \"org.jetbrains.kotlin:kotlin-stdlib-jre7:1.2.0\"\n }\n\nAfter the quick-fix applied:\n\n\n dependencies {\n compile \"org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.0\"\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 2, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CastDueToProgressionResolutionChangeMigration", + "shortDescription": { + "text": "Progression resolution change since 1.9" + }, + "fullDescription": { + "text": "Reports overloaded function calls where an argument requires an explicit cast to resolve to a proper declaration. The current compiler warning (available since Kotlin 1.6.20) will become an error in Kotlin 1.8. Progressions and ranges types ('kotlin.ranges') will start implementing the 'Collection' interface in Kotlin 1.9 and later. This update will cause a change in resolution for overloaded functions. For instance, in the example below, the 'test(1..5)' call will be resolved to 'test(t: Any)' in Kotlin 1.8 and earlier and to 'test(t: Collection<*>)' in Kotlin 1.9 and later. 'fun test(t: Any) { }\n fun test(t: Collection<*>) { }\n fun invoke() {\n test(1..5) // IntRange becomes Collection in 1.9\n }' The provided quick-fix captures the behaviour specific to the compiler of version 1.8 and earlier: 'fun test(t: Any) { }\n fun test(t: Collection<*>) { }\n\n fun invoke() {\n test(1..5) // resolved to 'test(t: T)' before Kotlin 1.9\n }' After the quick-fix is applied: 'fun test(t: Any) { }\n fun test(t: Collection<*>) { }\n\n fun invoke() {\n test((1..5) as Iterable) // resolved to 'test(t: T)' in Kotlin 1.9\n }' Inspection is available for the Kotlin language level starting from 1.6.", + "markdown": "Reports overloaded function calls where an argument requires an explicit cast to resolve to a proper declaration.\nThe current compiler warning (available since Kotlin 1.6.20) will become an error in Kotlin 1.8.\n\n\nProgressions and ranges types (`kotlin.ranges`) will start implementing the `Collection` interface in Kotlin\n1.9 and later. This update will cause a change in resolution for overloaded functions. For instance, in the example below, the\n`test(1..5)` call will be resolved to `test(t: Any)` in Kotlin 1.8 and earlier and to\n`test(t: Collection<*>)` in Kotlin 1.9 and later.\n\n\n fun test(t: Any) { }\n fun test(t: Collection<*>) { }\n fun invoke() {\n test(1..5) // IntRange becomes Collection in 1.9\n }\n\nThe provided quick-fix captures the behaviour specific to the compiler of version 1.8 and earlier:\n\n\n fun test(t: Any) { }\n fun test(t: Collection<*>) { }\n\n fun invoke() {\n test(1..5) // resolved to 'test(t: T)' before Kotlin 1.9\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(t: Any) { }\n fun test(t: Collection<*>) { }\n\n fun invoke() {\n test((1..5) as Iterable) // resolved to 'test(t: T)' in Kotlin 1.9\n }\n\nInspection is available for the Kotlin language level starting from 1.6." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveEmptyParenthesesFromAnnotationEntry", + "shortDescription": { + "text": "Remove unnecessary parentheses" + }, + "fullDescription": { + "text": "Reports redundant empty parentheses in annotation entries. Use the 'Remove unnecessary parentheses' quick-fix to clean up the code. Examples: 'annotation class MyAnnotationA\n annotation class MyAnnotationB(val x: Int)\n annotation class MyAnnotationC(val x: Int = 10) // default value is present\n\n @MyAnnotationA() // <== parentheses are redundant\n fun testA() {\n }\n\n @MyAnnotationB() // <== missing argument, parentheses are required\n fun testB() {\n }\n\n @MyAnnotationC() // <== parentheses are redundant\n fun testC() {\n }'", + "markdown": "Reports redundant empty parentheses in annotation entries.\n\nUse the 'Remove unnecessary parentheses' quick-fix to clean up the code.\n\n**Examples:**\n\n\n annotation class MyAnnotationA\n annotation class MyAnnotationB(val x: Int)\n annotation class MyAnnotationC(val x: Int = 10) // default value is present\n\n @MyAnnotationA() // <== parentheses are redundant\n fun testA() {\n }\n\n @MyAnnotationB() // <== missing argument, parentheses are required\n fun testB() {\n }\n\n @MyAnnotationC() // <== parentheses are redundant\n fun testC() {\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifiableCallChain", + "shortDescription": { + "text": "Call chain on collection type can be simplified" + }, + "fullDescription": { + "text": "Reports two-call chains replaceable by a single call. It can help you to avoid redundant code execution. The quick-fix replaces the call chain with a single call. Example: 'fun main() {\n listOf(1, 2, 3).filter { it > 1 }.count()\n }' After the quick-fix is applied: 'fun main() {\n listOf(1, 2, 3).count { it > 1 }\n }'", + "markdown": "Reports two-call chains replaceable by a single call.\n\nIt can help you to avoid redundant code execution.\n\nThe quick-fix replaces the call chain with a single call.\n\n**Example:**\n\n\n fun main() {\n listOf(1, 2, 3).filter { it > 1 }.count()\n }\n\nAfter the quick-fix is applied:\n\n\n fun main() {\n listOf(1, 2, 3).count { it > 1 }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConvertReferenceToLambda", + "shortDescription": { + "text": "Can be replaced with lambda" + }, + "fullDescription": { + "text": "Reports a function reference expression that can be replaced with a function literal (lambda). Sometimes, passing a lambda looks more straightforward and more consistent with the rest of the code. Also, the fix might be handy if you need to replace a simple call with something more complex. Example: 'fun Int.isEven() = this % 2 == 0\n\n fun example() {\n val numbers = listOf(1, 2, 4, 7, 9, 10)\n val evenNumbers = numbers.filter(Int::isEven)\n }' After the quick-fix is applied: 'fun Int.isEven() = this % 2 == 0\n\n fun example() {\n val numbers = listOf(1, 2, 4, 7, 9, 10)\n val evenNumbers = numbers.filter { it.isEven() }\n }'", + "markdown": "Reports a function reference expression that can be replaced with a function literal (lambda).\n\n\nSometimes, passing a lambda looks more straightforward and more consistent with the rest of the code.\nAlso, the fix might be handy if you need to replace a simple call with something more complex.\n\n**Example:**\n\n\n fun Int.isEven() = this % 2 == 0\n\n fun example() {\n val numbers = listOf(1, 2, 4, 7, 9, 10)\n val evenNumbers = numbers.filter(Int::isEven)\n }\n\nAfter the quick-fix is applied:\n\n\n fun Int.isEven() = this % 2 == 0\n\n fun example() {\n val numbers = listOf(1, 2, 4, 7, 9, 10)\n val evenNumbers = numbers.filter { it.isEven() }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceCallWithBinaryOperator", + "shortDescription": { + "text": "Can be replaced with binary operator" + }, + "fullDescription": { + "text": "Reports function calls that can be replaced with binary operators, in particular comparison-related ones. Example: 'fun test(): Boolean {\n return 2.compareTo(1) > 0 // replaceable 'compareTo()'\n }' After the quick-fix is applied: 'fun test(): Boolean {\n return 2 > 1\n }'", + "markdown": "Reports function calls that can be replaced with binary operators, in particular comparison-related ones.\n\n**Example:**\n\n fun test(): Boolean {\n return 2.compareTo(1) > 0 // replaceable 'compareTo()'\n }\n\nAfter the quick-fix is applied:\n\n fun test(): Boolean {\n return 2 > 1\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnlabeledReturnInsideLambda", + "shortDescription": { + "text": "Unlabeled return inside lambda" + }, + "fullDescription": { + "text": "Reports unlabeled 'return' expressions inside inline lambda. Such expressions can be confusing because it might be unclear which scope belongs to 'return'. Change to return@… quick-fix can be used to amend the code automatically. Example: 'fun test(list: List) {\n list.forEach {\n // This return expression returns from the function test\n // One can change it to return@forEach to change the scope\n if (it == 10) return\n }\n }' After the quick-fix is applied: 'fun test(list: List) {\n list.forEach {\n if (it == 10) return@test\n }\n }'", + "markdown": "Reports unlabeled `return` expressions inside inline lambda.\n\nSuch expressions can be confusing because it might be unclear which scope belongs to `return`.\n\n**Change to return@...** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n fun test(list: List) {\n list.forEach {\n // This return expression returns from the function test\n // One can change it to return@forEach to change the scope\n if (it == 10) return\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(list: List) {\n list.forEach {\n if (it == 10) return@test\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedUnaryOperator", + "shortDescription": { + "text": "Unused unary operator" + }, + "fullDescription": { + "text": "Reports unary operators for number types on unused expressions. Unary operators break previous expression if they are used without braces. As a result, mathematical expressions spanning multi lines can be misleading. Example: 'fun main() {\n val result = 1 + 2 * 3\n + 3 // <== note that '+ 3' doesn't belong to the 'result' variable, it is unused\n println(\"Result = $result\") // The result is '7' and not '10' as it might be expected\n }'", + "markdown": "Reports unary operators for number types on unused expressions.\n\nUnary operators break previous expression if they are used without braces.\nAs a result, mathematical expressions spanning multi lines can be misleading.\n\nExample:\n\n\n fun main() {\n val result = 1 + 2 * 3\n + 3 // <== note that '+ 3' doesn't belong to the 'result' variable, it is unused\n println(\"Result = $result\") // The result is '7' and not '10' as it might be expected\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AddConversionCallMigration", + "shortDescription": { + "text": "Explicit conversion from `Int` needed since 1.9" + }, + "fullDescription": { + "text": "Reports expressions that will be of type 'Int', thus causing compilation errors in Kotlin 1.9 and later. Example: 'fun takeByte(x: Byte) {}\n\n fun foo() {\n takeByte(1 + 1) // will be resolved to Int in 1.9\n }' After the quick-fix is applied: 'fun takeByte(x: Byte) {}\n\n fun foo() {\n takeByte((1 + 1).toByte()) // will be resolved to Int in 1.9\n }' Inspection is available for Kotlin language level starting from 1.7.", + "markdown": "Reports expressions that will be of type `Int`, thus causing compilation errors in Kotlin 1.9 and later.\n\nExample:\n\n\n fun takeByte(x: Byte) {}\n\n fun foo() {\n takeByte(1 + 1) // will be resolved to Int in 1.9\n }\n\nAfter the quick-fix is applied:\n\n\n fun takeByte(x: Byte) {}\n\n fun foo() {\n takeByte((1 + 1).toByte()) // will be resolved to Int in 1.9\n }\n\nInspection is available for Kotlin language level starting from 1.7." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LateinitVarOverridesLateinitVar", + "shortDescription": { + "text": "'lateinit var' property overrides 'lateinit var' property" + }, + "fullDescription": { + "text": "Reports 'lateinit var' properties that override other 'lateinit var' properties. A subclass instance will have two fields for a single property, and the one from the superclass will remain effectively unused. Example: 'open class BaseClass {\n open lateinit var name: String\n }\n\n class RealClass : BaseClass() {\n override lateinit var name: String\n }'", + "markdown": "Reports `lateinit var` properties that override other `lateinit var` properties.\n\nA subclass instance will have two fields for a single property, and the one from the superclass will remain effectively unused.\n\n**Example:**\n\n\n open class BaseClass {\n open lateinit var name: String\n }\n\n class RealClass : BaseClass() {\n override lateinit var name: String\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "VerboseNullabilityAndEmptiness", + "shortDescription": { + "text": "Verbose nullability and emptiness check" + }, + "fullDescription": { + "text": "Reports combination of 'null' and emptiness checks that can be simplified into a single check. The quick-fix replaces highlighted checks with a combined check call, such as 'isNullOrEmpty()'. Example: 'fun test(list: List?) {\n if (list == null || list.isEmpty()) {\n println(\"List is empty!\")\n } else {\n println(list.joinToString())\n }\n }' After the quick-fix is applied: 'fun test(list: List?) {\n if (list.isNullOrEmpty()) {\n println(\"List is empty!\")\n } else {\n println(list.joinToString())\n }\n }'", + "markdown": "Reports combination of `null` and emptiness checks that can be simplified into a single check.\n\nThe quick-fix replaces highlighted checks with a combined check call, such as `isNullOrEmpty()`.\n\n**Example:**\n\n\n fun test(list: List?) {\n if (list == null || list.isEmpty()) {\n println(\"List is empty!\")\n } else {\n println(list.joinToString())\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(list: List?) {\n if (list.isNullOrEmpty()) {\n println(\"List is empty!\")\n } else {\n println(list.joinToString())\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassName", + "shortDescription": { + "text": "Class naming convention" + }, + "fullDescription": { + "text": "Reports class names that do not follow the recommended naming conventions. Consistent naming allows for easier code reading and understanding. According to the Kotlin official style guide, class names should start with an uppercase letter and use camel case. It is possible to introduce other naming rules by changing the \"Pattern\" regular expression. Example: 'class user(val name: String)' A quick-fix renames the class according to the Kotlin naming conventions: 'class User(val name: String)'", + "markdown": "Reports class names that do not follow the recommended naming conventions.\n\n\nConsistent naming allows for easier code reading and understanding.\nAccording to the [Kotlin official style guide](https://kotlinlang.org/docs/coding-conventions.html#naming-rules),\nclass names should start with an uppercase letter and use camel case.\n\nIt is possible to introduce other naming rules by changing the \"Pattern\" regular expression.\n\n**Example:**\n\n\n class user(val name: String)\n\nA quick-fix renames the class according to the Kotlin naming conventions:\n\n\n class User(val name: String)\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Naming conventions", + "index": 48, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveEmptyPrimaryConstructor", + "shortDescription": { + "text": "Redundant empty primary constructor" + }, + "fullDescription": { + "text": "Reports empty primary constructors when they are implicitly available anyway. A primary constructor is redundant and can be safely omitted when it does not have any annotations or visibility modifiers. Use the 'Remove empty primary constructor' quick-fix to clean up the code. Examples: 'class MyClassA constructor() // redundant, can be replaced with 'class MyClassA'\n\n annotation class MyAnnotation\n class MyClassB @MyAnnotation constructor() // required because of annotation\n\n class MyClassC private constructor() // required because of visibility modifier'", + "markdown": "Reports empty primary constructors when they are implicitly available anyway.\n\n\nA primary constructor is redundant and can be safely omitted when it does not have any annotations or visibility modifiers.\nUse the 'Remove empty primary constructor' quick-fix to clean up the code.\n\n**Examples:**\n\n\n class MyClassA constructor() // redundant, can be replaced with 'class MyClassA'\n\n annotation class MyAnnotation\n class MyClassB @MyAnnotation constructor() // required because of annotation\n\n class MyClassC private constructor() // required because of visibility modifier\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveEmptySecondaryConstructorBody", + "shortDescription": { + "text": "Redundant constructor body" + }, + "fullDescription": { + "text": "Reports empty bodies of secondary constructors.", + "markdown": "Reports empty bodies of secondary constructors." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FloatingPointLiteralPrecision", + "shortDescription": { + "text": "Floating-point literal exceeds the available precision" + }, + "fullDescription": { + "text": "Reports floating-point literals that cannot be represented with the required precision using IEEE 754 'Float' and 'Double' types. For example, '1.9999999999999999999' has too many significant digits, so its representation as a 'Double' will be rounded to '2.0'. Specifying excess digits may be misleading as it hides the fact that computations use rounded values instead. The quick-fix replaces the literal with a rounded value that matches the actual representation of the constant. Example: 'val x: Float = 3.14159265359f' After the quick-fix is applied: 'val x: Float = 3.1415927f'", + "markdown": "Reports floating-point literals that cannot be represented with the required precision using [IEEE 754](https://en.wikipedia.org/wiki/IEEE_754) `Float` and `Double` types.\n\n\nFor example, `1.9999999999999999999` has too many significant digits,\nso its representation as a `Double` will be rounded to `2.0`.\nSpecifying excess digits may be misleading as it hides the fact that computations\nuse rounded values instead.\n\n\nThe quick-fix replaces the literal with a rounded value that matches the actual representation\nof the constant.\n\n**Example:**\n\n\n val x: Float = 3.14159265359f\n\nAfter the quick-fix is applied:\n\n\n val x: Float = 3.1415927f\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Other problems", + "index": 53, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DifferentKotlinGradleVersion", + "shortDescription": { + "text": "Kotlin Gradle and IDE plugins versions are different" + }, + "fullDescription": { + "text": "Reports that Gradle plugin version isn't properly supported in the current IDE plugin. This can cause inconsistencies between IDE and Gradle builds in error reporting or code behavior. Example: 'dependencies {\n classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:0.0.1\"\n }' To fix the problem change the kotlin gradle plugin version to match the version of kotlin that is bundled into the IDE plugin.", + "markdown": "Reports that Gradle plugin version isn't properly supported in the current IDE plugin.\n\nThis can cause inconsistencies between IDE and Gradle builds in error reporting or code behavior.\n\n**Example:**\n\n\n dependencies {\n classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:0.0.1\"\n }\n\nTo fix the problem change the kotlin gradle plugin version to match the version of kotlin that is bundled into the IDE plugin." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 2, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConvertPairConstructorToToFunction", + "shortDescription": { + "text": "Convert Pair constructor to 'to' function" + }, + "fullDescription": { + "text": "Reports a 'Pair' constructor invocation that can be replaced with a 'to()' infix function call. Explicit constructor invocations may add verbosity, especially if they are used multiple times. Replacing constructor calls with 'to()' makes code easier to read and maintain. Example: 'val countries = mapOf(\n Pair(\"France\", \"Paris\"),\n Pair(\"Spain\", \"Madrid\"),\n Pair(\"Germany\", \"Berlin\")\n )' After the quick-fix is applied: 'val countries = mapOf(\n \"France\" to \"Paris\",\n \"Spain\" to \"Madrid\",\n \"Germany\" to \"Berlin\"\n )'", + "markdown": "Reports a `Pair` constructor invocation that can be replaced with a `to()` infix function call.\n\n\nExplicit constructor invocations may add verbosity, especially if they are used multiple times.\nReplacing constructor calls with `to()` makes code easier to read and maintain.\n\n**Example:**\n\n\n val countries = mapOf(\n Pair(\"France\", \"Paris\"),\n Pair(\"Spain\", \"Madrid\"),\n Pair(\"Germany\", \"Berlin\")\n )\n\nAfter the quick-fix is applied:\n\n\n val countries = mapOf(\n \"France\" to \"Paris\",\n \"Spain\" to \"Madrid\",\n \"Germany\" to \"Berlin\"\n )\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantGetter", + "shortDescription": { + "text": "Redundant property getter" + }, + "fullDescription": { + "text": "Reports redundant property getters. Example: 'class Test {\n val a = 1\n get\n val b = 1\n get() = field\n }' After the quick-fix is applied: 'class Test {\n val a = 1\n val b = 1\n }'", + "markdown": "Reports redundant property getters.\n\n**Example:**\n\n\n class Test {\n val a = 1\n get\n val b = 1\n get() = field\n }\n\nAfter the quick-fix is applied:\n\n\n class Test {\n val a = 1\n val b = 1\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantIf", + "shortDescription": { + "text": "Redundant 'if' statement" + }, + "fullDescription": { + "text": "Reports 'if' statements which can be simplified to a single statement. Example: 'fun test() {\n if (foo()) {\n return true\n } else {\n return false\n }\n }' After the quick-fix is applied: 'fun test() {\n return foo()\n }'", + "markdown": "Reports `if` statements which can be simplified to a single statement.\n\n**Example:**\n\n\n fun test() {\n if (foo()) {\n return true\n } else {\n return false\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun test() {\n return foo()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KDocMissingDocumentation", + "shortDescription": { + "text": "Missing KDoc comments for public declarations" + }, + "fullDescription": { + "text": "Reports public declarations that do not have KDoc comments. Example: 'class A' The quick fix generates the comment block above the declaration: '/**\n *\n */\n class A'", + "markdown": "Reports public declarations that do not have KDoc comments.\n\n**Example:**\n\n\n class A\n\nThe quick fix generates the comment block above the declaration:\n\n\n /**\n *\n */\n class A\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Other problems", + "index": 53, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinEqualsBetweenInconvertibleTypes", + "shortDescription": { + "text": "'equals()' between objects of inconvertible types" + }, + "fullDescription": { + "text": "Reports calls to 'equals()' where the receiver and the argument are of incompatible primitive, enum, or string types. While such a call might theoretically be useful, most likely it represents a bug. Example: '5.equals(\"\");'", + "markdown": "Reports calls to `equals()` where the receiver and the argument are of incompatible primitive, enum, or string types.\n\nWhile such a call might theoretically be useful, most likely it represents a bug.\n\n**Example:**\n\n 5.equals(\"\");\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JoinDeclarationAndAssignment", + "shortDescription": { + "text": "Join declaration and assignment" + }, + "fullDescription": { + "text": "Reports property declarations that can be joined with the following assignment. Example: 'val x: String\n x = System.getProperty(\"\")' The quick fix joins the declaration with the assignment: 'val x = System.getProperty(\"\")'", + "markdown": "Reports property declarations that can be joined with the following assignment.\n\n**Example:**\n\n\n val x: String\n x = System.getProperty(\"\")\n\nThe quick fix joins the declaration with the assignment:\n\n\n val x = System.getProperty(\"\")\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveExplicitTypeArguments", + "shortDescription": { + "text": "Unnecessary type argument" + }, + "fullDescription": { + "text": "Reports function calls with type arguments that can be automatically inferred. Such type arguments are redundant and can be safely omitted. Use the 'Remove explicit type arguments' quick-fix to clean up the code. Examples: '// 'String' type can be inferred here\n fun foo(): MutableList = mutableListOf()\n\n // Here 'String' cannot be inferred, type argument is required.\n fun bar() = mutableListOf()' After the quick-fix is applied: 'fun foo(): MutableList = mutableListOf() <== Updated\n\n fun bar() = mutableListOf()'", + "markdown": "Reports function calls with type arguments that can be automatically inferred. Such type arguments are redundant and can be safely omitted.\n\nUse the 'Remove explicit type arguments' quick-fix to clean up the code.\n\n**Examples:**\n\n\n // 'String' type can be inferred here\n fun foo(): MutableList = mutableListOf()\n\n // Here 'String' cannot be inferred, type argument is required.\n fun bar() = mutableListOf()\n\nAfter the quick-fix is applied:\n\n\n fun foo(): MutableList = mutableListOf() <== Updated\n\n fun bar() = mutableListOf()\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HasPlatformType", + "shortDescription": { + "text": "Function or property has platform type" + }, + "fullDescription": { + "text": "Reports functions and properties that have a platform type. To prevent unexpected errors, the type should be declared explicitly. Example: 'fun foo() = java.lang.String.valueOf(1)' The quick fix allows you to specify the return type: 'fun foo(): String = java.lang.String.valueOf(1)'", + "markdown": "Reports functions and properties that have a platform type.\n\nTo prevent unexpected errors, the type should be declared explicitly.\n\n**Example:**\n\n\n fun foo() = java.lang.String.valueOf(1)\n\nThe quick fix allows you to specify the return type:\n\n\n fun foo(): String = java.lang.String.valueOf(1)\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Java interop issues", + "index": 66, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantVisibilityModifier", + "shortDescription": { + "text": "Redundant visibility modifier" + }, + "fullDescription": { + "text": "Reports visibility modifiers that match the default visibility of an element ('public' for most elements, 'protected' for members that override a protected member).", + "markdown": "Reports visibility modifiers that match the default visibility of an element (`public` for most elements, `protected` for members that override a protected member)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UsePropertyAccessSyntax", + "shortDescription": { + "text": "Accessor call that can be replaced with property access syntax" + }, + "fullDescription": { + "text": "Reports Java 'get' and 'set' method calls that can be replaced with the Kotlin synthetic properties. Use property access syntax quick-fix can be used to amend the code automatically. Example: '// Java:\n public class JavaClassWithGetter {\n private final String expr = \"result\";\n\n // ...\n\n public String getExpr() {\n return expr;\n }\n }' '// Kotlin:\n fun test(j: JavaClassWithGetter) {\n // ...\n j.getExpr() // <== A quick-fix simplifies the expression to 'j.expr'\n }'", + "markdown": "Reports Java `get` and `set` method calls that can be replaced with the Kotlin synthetic properties.\n\n**Use property access syntax** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n // Java:\n public class JavaClassWithGetter {\n private final String expr = \"result\";\n\n // ...\n\n public String getExpr() {\n return expr;\n }\n }\n\n\n // Kotlin:\n fun test(j: JavaClassWithGetter) {\n // ...\n j.getExpr() // <== A quick-fix simplifies the expression to 'j.expr'\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseExpressionBody", + "shortDescription": { + "text": "Expression body syntax is preferable here" + }, + "fullDescription": { + "text": "Reports 'return' expressions (one-liners or 'when') that can be replaced with expression body syntax. Expression body syntax is recommended by the style guide. Convert to expression body quick-fix can be used to amend the code automatically. Example: 'fun sign(x: Int): Int {\n return when { // <== can be simplified\n x < 0 -> -1\n x > 0 -> 1\n else -> 0\n }\n }' After the quick-fix is applied: 'fun sign(x: Int): Int = when {\n x < 0 -> -1\n x > 0 -> 1\n else -> 0\n }'", + "markdown": "Reports `return` expressions (one-liners or `when`) that can be replaced with expression body syntax.\n\nExpression body syntax is recommended by the [style guide](https://kotlinlang.org/docs/coding-conventions.html#functions).\n\n**Convert to expression body** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n fun sign(x: Int): Int {\n return when { // <== can be simplified\n x < 0 -> -1\n x > 0 -> 1\n else -> 0\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun sign(x: Int): Int = when {\n x < 0 -> -1\n x > 0 -> 1\n else -> 0\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DataClassPrivateConstructor", + "shortDescription": { + "text": "Private data class constructor is exposed via the 'copy' method" + }, + "fullDescription": { + "text": "Reports the 'private' primary constructor in data classes. 'data' classes have a 'copy()' factory method that can be used similarly to a constructor. A constructor should not be marked as 'private' to provide enough safety. Example: 'data class User private constructor(val name: String)' A quick-fix changes the constructor visibility modifier to 'public': 'data class User(val name: String)'", + "markdown": "Reports the `private` primary constructor in data classes.\n\n\n`data` classes have a `copy()` factory method that can be used similarly to a constructor.\nA constructor should not be marked as `private` to provide enough safety.\n\n**Example:**\n\n\n data class User private constructor(val name: String)\n\nA quick-fix changes the constructor visibility modifier to `public`:\n\n\n data class User(val name: String)\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantInnerClassModifier", + "shortDescription": { + "text": "Redundant 'inner' modifier" + }, + "fullDescription": { + "text": "Reports the 'inner' modifier on a class as redundant if it doesn't reference members of its outer class. Example: 'class Foo {\n inner class InnerClass { // redundant `inner` modifier\n fun hello() {\n println(\"Hi!\")\n }\n }\n }\n\n class List {\n val objects = Array(42) { Any() }\n\n inner class Iterator { // Not redundant `inner` modifier\n fun next(): Any {\n return objects[0]\n }\n }\n }' After the quick-fix is applied: 'class Foo {\n class InnerClass { // redundant `inner` modifier\n fun hello() {\n println(\"Hi!\")\n }\n }\n }\n\n class List {\n val objects = Array(42) { Any() }\n\n inner class Iterator { // Not redundant `inner` modifier\n fun next(): Any {\n return objects[0]\n }\n }\n }'", + "markdown": "Reports the `inner` modifier on a class as redundant if it doesn't reference members of its outer class.\n\n**Example:**\n\n\n class Foo {\n inner class InnerClass { // redundant `inner` modifier\n fun hello() {\n println(\"Hi!\")\n }\n }\n }\n\n class List {\n val objects = Array(42) { Any() }\n\n inner class Iterator { // Not redundant `inner` modifier\n fun next(): Any {\n return objects[0]\n }\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n class InnerClass { // redundant `inner` modifier\n fun hello() {\n println(\"Hi!\")\n }\n }\n }\n\n class List {\n val objects = Array(42) { Any() }\n\n inner class Iterator { // Not redundant `inner` modifier\n fun next(): Any {\n return objects[0]\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaCollectionsStaticMethodOnImmutableList", + "shortDescription": { + "text": "Call of Java mutator method on immutable Kotlin collection" + }, + "fullDescription": { + "text": "Reports Java mutator methods calls (like 'fill', 'reverse', 'shuffle', 'sort') on an immutable Kotlin collection. This can lead to 'UnsupportedOperationException' at runtime. Example: 'import java.util.Collections\n\n fun test() {\n val immutableList = listOf(1, 2)\n Collections.reverse(immutableList)\n }' To fix the problem make the list mutable.", + "markdown": "Reports Java mutator methods calls (like `fill`, `reverse`, `shuffle`, `sort`) on an immutable Kotlin collection.\n\nThis can lead to `UnsupportedOperationException` at runtime.\n\n**Example:**\n\n\n import java.util.Collections\n\n fun test() {\n val immutableList = listOf(1, 2)\n Collections.reverse(immutableList)\n }\n\nTo fix the problem make the list mutable." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Java interop issues", + "index": 66, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MapGetWithNotNullAssertionOperator", + "shortDescription": { + "text": "'map.get()' with not-null assertion operator (!!)" + }, + "fullDescription": { + "text": "Reports 'map.get()!!' that can be replaced with 'map.getValue()', 'map.getOrElse()', and so on. Example: 'fun test(map: Map): String = map.get(0)!!' After the quick-fix is applied: 'fun test(map: Map): String = map.getValue(0)'", + "markdown": "Reports `map.get()!!` that can be replaced with `map.getValue()`, `map.getOrElse()`, and so on.\n\n**Example:**\n\n\n fun test(map: Map): String = map.get(0)!!\n\nAfter the quick-fix is applied:\n\n\n fun test(map: Map): String = map.getValue(0)\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SortModifiers", + "shortDescription": { + "text": "Non-canonical modifier order" + }, + "fullDescription": { + "text": "Reports modifiers that do not follow the order recommended by the style guide. Sort modifiers quick-fix can be used to amend the code automatically. Examples: 'private inline fun correctOrder(f: () -> Unit) {} // <== Ok\n\n infix private fun Int.wrongOrder(expr: Int) {} // <== wrong order, quick-fix amends the modifiers to \"private infix\"'", + "markdown": "Reports modifiers that do not follow the order recommended by the [style guide](https://kotlinlang.org/docs/coding-conventions.html#modifiers-order).\n\n**Sort modifiers** quick-fix can be used to amend the code automatically.\n\nExamples:\n\n\n private inline fun correctOrder(f: () -> Unit) {} // <== Ok\n\n infix private fun Int.wrongOrder(expr: Int) {} // <== wrong order, quick-fix amends the modifiers to \"private infix\"\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MavenCoroutinesDeprecation", + "shortDescription": { + "text": "Incompatible kotlinx.coroutines dependency is used with Kotlin 1.3+ in Maven" + }, + "fullDescription": { + "text": "Reports kotlinx.coroutines library dependencies in Maven that should be updated in order to be compatible with Kotlin 1.3 and later.", + "markdown": "Reports **kotlinx.coroutines** library dependencies in Maven that should be updated in order to be compatible with Kotlin 1.3 and later." + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration/Maven", + "index": 108, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NullableBooleanElvis", + "shortDescription": { + "text": "Equality check can be used instead of elvis for nullable boolean check" + }, + "fullDescription": { + "text": "Reports cases when an equality check should be used instead of the elvis operator. Example: 'fun check(a: Boolean? == null) {\n if (a ?: false) throw IllegalStateException()\n}' After the quick-fix is applied: 'fun check(a: Boolean? == null) {\n if (a == true) throw IllegalStateException()\n}'", + "markdown": "Reports cases when an equality check should be used instead of the elvis operator.\n\n**Example:**\n\n\n fun check(a: Boolean? == null) {\n if (a ?: false) throw IllegalStateException()\n }\n\nAfter the quick-fix is applied:\n\n\n fun check(a: Boolean? == null) {\n if (a == true) throw IllegalStateException()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EnumEntryName", + "shortDescription": { + "text": "Enum entry naming convention" + }, + "fullDescription": { + "text": "Reports enum entry names that do not follow the recommended naming conventions. Example: 'enum class Foo {\n _Foo,\n foo\n }' To fix the problem rename enum entries to match the recommended naming conventions.", + "markdown": "Reports enum entry names that do not follow the recommended naming conventions.\n\n**Example:**\n\n\n enum class Foo {\n _Foo,\n foo\n }\n\nTo fix the problem rename enum entries to match the recommended naming conventions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Naming conventions", + "index": 48, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryVariable", + "shortDescription": { + "text": "Unnecessary local variable" + }, + "fullDescription": { + "text": "Reports local variables that used only in the very next 'return' statement or exact copies of other variables. Such variables can be safely inlined to make the code more clear.", + "markdown": "Reports local variables that used only in the very next `return` statement or exact copies of other variables.\n\nSuch variables can be safely inlined to make the code more clear." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DeprecatedMavenDependency", + "shortDescription": { + "text": "Deprecated library is used in Maven" + }, + "fullDescription": { + "text": "Reports deprecated maven dependency. Example: '\n \n org.jetbrains.kotlin\n kotlin-stdlib-jre7\n ${kotlin.version}\n \n ' The quick fix changes the deprecated dependency to a maintained one: '\n \n org.jetbrains.kotlin\n kotlin-stdlib-jdk7\n ${kotlin.version}\n \n '", + "markdown": "Reports deprecated maven dependency.\n\n**Example:**\n\n\n \n \n org.jetbrains.kotlin\n kotlin-stdlib-jre7\n ${kotlin.version}\n \n \n\nThe quick fix changes the deprecated dependency to a maintained one:\n\n\n \n \n org.jetbrains.kotlin\n kotlin-stdlib-jdk7\n ${kotlin.version}\n \n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 2, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceSubstringWithDropLast", + "shortDescription": { + "text": "'substring' call should be replaced with 'dropLast' call" + }, + "fullDescription": { + "text": "Reports calls like 's.substring(0, s.length - x)' that can be replaced with 's.dropLast(x)'. Using corresponding functions makes your code simpler. The quick-fix replaces the 'substring' call with 'dropLast'. Example: 'fun foo(s: String) {\n s.substring(0, s.length - 5)\n }' After the quick-fix is applied: 'fun foo(s: String) {\n s.dropLast(5)\n }'", + "markdown": "Reports calls like `s.substring(0, s.length - x)` that can be replaced with `s.dropLast(x)`.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces the `substring` call with `dropLast`.\n\n**Example:**\n\n\n fun foo(s: String) {\n s.substring(0, s.length - 5)\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(s: String) {\n s.dropLast(5)\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SetterBackingFieldAssignment", + "shortDescription": { + "text": "Existing backing field without assignment" + }, + "fullDescription": { + "text": "Reports property setters that don't update the backing field. The quick-fix adds an assignment to the backing field. Example: 'class Test {\n var foo: Int = 1\n set(value) {\n }\n }' After the quick-fix is applied: 'class Test {\n var foo: Int = 1\n set(value) {\n field = value\n }\n }'", + "markdown": "Reports property setters that don't update the backing field.\n\nThe quick-fix adds an assignment to the backing field.\n\n**Example:**\n\n\n class Test {\n var foo: Int = 1\n set(value) {\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Test {\n var foo: Int = 1\n set(value) {\n field = value\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CopyWithoutNamedArguments", + "shortDescription": { + "text": "'copy' method of data class is called without named arguments" + }, + "fullDescription": { + "text": "Reports calls to a data class' 'copy()' method without named arguments. As all arguments of the 'copy()' function are optional, it might be hard to understand what properties are modified. Providing parameter names explicitly makes code easy to understand without navigating to the 'data class' declaration. Example: 'data class User(val name: String, val age: Int)\n\n fun copyUser(user: User): User {\n return user.copy(\"John\")\n }' A quick-fix provides parameter names to all 'copy()' arguments: 'data class User(val name: String, val age: Int)\n\n fun copyUser(user: User): User {\n return user.copy(name = \"John\")\n }'", + "markdown": "Reports calls to a data class' `copy()` method without named arguments.\n\n\nAs all arguments of the `copy()` function are optional, it might be hard to understand what properties are modified.\nProviding parameter names explicitly makes code easy to understand without navigating to the `data class` declaration.\n\n**Example:**\n\n\n data class User(val name: String, val age: Int)\n\n fun copyUser(user: User): User {\n return user.copy(\"John\")\n }\n\nA quick-fix provides parameter names to all `copy()` arguments:\n\n\n data class User(val name: String, val age: Int)\n\n fun copyUser(user: User): User {\n return user.copy(name = \"John\")\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinDeprecation", + "shortDescription": { + "text": "Usage of redundant or deprecated syntax or deprecated symbols" + }, + "fullDescription": { + "text": "Reports obsolete language features and unnecessarily verbose code constructs during the code cleanup operation (Code | Code Cleanup). A quick-fix automatically replaces usages of obsolete language features or unnecessarily verbose code constructs with compact and up-to-date syntax. It also replaces deprecated symbols with their proposed substitutions.", + "markdown": "Reports obsolete language features and unnecessarily verbose code constructs during the code cleanup operation (**Code \\| Code Cleanup** ).\n\n\nA quick-fix automatically replaces usages of obsolete language features or unnecessarily verbose code constructs with compact and up-to-date syntax.\n\n\nIt also replaces deprecated symbols with their proposed substitutions." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantEmptyInitializerBlock", + "shortDescription": { + "text": "Redundant empty initializer block" + }, + "fullDescription": { + "text": "Reports redundant empty initializer blocks. Example: 'class Foo {\n init {\n // Empty init block\n }\n }' After the quick-fix is applied: 'class Foo {\n }'", + "markdown": "Reports redundant empty initializer blocks.\n\n**Example:**\n\n\n class Foo {\n init {\n // Empty init block\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Other problems", + "index": 53, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceSubstringWithTake", + "shortDescription": { + "text": "'substring' call should be replaced with 'take' call" + }, + "fullDescription": { + "text": "Reports calls like 's.substring(0, x)' that can be replaced with 's.take(x)'. Using 'take()' makes your code simpler. The quick-fix replaces the 'substring' call with 'take()'. Example: 'fun foo(s: String) {\n s.substring(0, 10)\n }' After the quick-fix is applied: 'fun foo(s: String) {\n s.take(10)\n }'", + "markdown": "Reports calls like `s.substring(0, x)` that can be replaced with `s.take(x)`.\n\nUsing `take()` makes your code simpler.\n\nThe quick-fix replaces the `substring` call with `take()`.\n\n**Example:**\n\n\n fun foo(s: String) {\n s.substring(0, 10)\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(s: String) {\n s.take(10)\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceRangeToWithRangeUntil", + "shortDescription": { + "text": "'rangeTo' or the '..' call should be replaced with '..<'" + }, + "fullDescription": { + "text": "Reports calls to 'rangeTo' or the '..' operator instead of calls to '..<'. Using corresponding functions makes your code simpler. The quick-fix replaces 'rangeTo' or the '..' call with '..<'. Example: 'fun foo(a: Int) {\n for (i in 0..a - 1) {\n\n }\n }' After the quick-fix is applied: 'fun foo(a: Int) {\n for (i in 0..) = lines\n .filter { it.isNotEmpty() }\n .map { it.split(',', limit = 2) }\n .filter { it.size == 2 }\n .map { Entity(it[0], it[1]) }' A quick-fix wraps call chain into 'asSequence()' and 'toList()': 'class Entity(val key: String, val value: String)\n\n fun getValues(lines: List) = lines\n .asSequence()\n .filter { it.isNotEmpty() }\n .map { it.split(',', limit = 2) }\n .filter { it.size == 2 }\n .map { Entity(it[0], it[1]) }\n .toList()'", + "markdown": "Reports call chain on a `Collection` that should be converted into **Sequence** .\n\nEach `Collection` transforming function (such as `map()` or `filter()`) creates a new\n`Collection` (typically `List` or `Set`) under the hood.\nIn case of multiple consequent calls, and a huge number of items in `Collection`, memory traffic might be significant.\nIn such a case, using `Sequence` is preferred.\n\n**Example:**\n\n\n class Entity(val key: String, val value: String)\n\n fun getValues(lines: List) = lines\n .filter { it.isNotEmpty() }\n .map { it.split(',', limit = 2) }\n .filter { it.size == 2 }\n .map { Entity(it[0], it[1]) }\n\nA quick-fix wraps call chain into `asSequence()` and `toList()`:\n\n\n class Entity(val key: String, val value: String)\n\n fun getValues(lines: List) = lines\n .asSequence()\n .filter { it.isNotEmpty() }\n .map { it.split(',', limit = 2) }\n .filter { it.size == 2 }\n .map { Entity(it[0], it[1]) }\n .toList()\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AddOperatorModifier", + "shortDescription": { + "text": "Function should have 'operator' modifier" + }, + "fullDescription": { + "text": "Reports a function that matches one of the operator conventions but lacks the 'operator' keyword. By adding the 'operator' modifier, you might allow function consumers to write idiomatic Kotlin code. Example: 'class Complex(val real: Double, val imaginary: Double) {\n fun plus(other: Complex) =\n Complex(real + other.real, imaginary + other.imaginary)\n }\n\n fun usage(a: Complex, b: Complex) {\n a.plus(b)\n }' A quick-fix adds the 'operator' modifier keyword: 'class Complex(val real: Double, val imaginary: Double) {\n operator fun plus(other: Complex) =\n Complex(real + other.real, imaginary + other.imaginary)\n }\n\n fun usage(a: Complex, b: Complex) {\n a + b\n }'", + "markdown": "Reports a function that matches one of the operator conventions but lacks the `operator` keyword.\n\nBy adding the `operator` modifier, you might allow function consumers to write idiomatic Kotlin code.\n\n**Example:**\n\n\n class Complex(val real: Double, val imaginary: Double) {\n fun plus(other: Complex) =\n Complex(real + other.real, imaginary + other.imaginary)\n }\n\n fun usage(a: Complex, b: Complex) {\n a.plus(b)\n }\n\nA quick-fix adds the `operator` modifier keyword:\n\n\n class Complex(val real: Double, val imaginary: Double) {\n operator fun plus(other: Complex) =\n Complex(real + other.real, imaginary + other.imaginary)\n }\n\n fun usage(a: Complex, b: Complex) {\n a + b\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MayBeConstant", + "shortDescription": { + "text": "Might be 'const'" + }, + "fullDescription": { + "text": "Reports top-level 'val' properties in objects that might be declared as 'const' for better performance and Java interoperability. Example: 'object A {\n val foo = 1\n }' After the quick-fix is applied: 'object A {\n const val foo = 1\n }'", + "markdown": "Reports top-level `val` properties in objects that might be declared as `const` for better performance and Java interoperability.\n\n**Example:**\n\n\n object A {\n val foo = 1\n }\n\nAfter the quick-fix is applied:\n\n\n object A {\n const val foo = 1\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GradleKotlinxCoroutinesDeprecation", + "shortDescription": { + "text": "Incompatible kotlinx.coroutines dependency is used with Kotlin 1.3+ in Gradle" + }, + "fullDescription": { + "text": "Reports 'kotlinx.coroutines' library dependencies in Gradle that should be updated to be compatible with Kotlin 1.3+. Example: 'dependencies {\n implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.0.1'\n }' The quick fix changes the 'kotlinx.coroutines' library version to a compatible with Kotlin 1.3: 'dependencies {\n implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.27.0-eap13'\n }'", + "markdown": "Reports `kotlinx.coroutines` library dependencies in Gradle that should be updated to be compatible with Kotlin 1.3+.\n\n**Example:**\n\n\n dependencies {\n implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.0.1'\n }\n\nThe quick fix changes the `kotlinx.coroutines` library version to a compatible with Kotlin 1.3:\n\n\n dependencies {\n implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.27.0-eap13'\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration/Gradle", + "index": 114, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantWith", + "shortDescription": { + "text": "Redundant 'with' call" + }, + "fullDescription": { + "text": "Reports redundant 'with' function calls that don't access anything from the receiver. Examples: 'class MyClass {\n fun f(): String = \"\"\n }\n\n fun testRedundant() {\n with(c) { // <== 'with' is redundant since 'c' isn't used\n println(\"1\")\n }\n }\n\n fun testOk() {\n val c = MyClass()\n with(c) { // <== OK because 'f()' is effectively 'c.f()'\n println(f())\n }\n }'", + "markdown": "Reports redundant `with` function calls that don't access anything from the receiver.\n\n**Examples:**\n\n\n class MyClass {\n fun f(): String = \"\"\n }\n\n fun testRedundant() {\n with(c) { // <== 'with' is redundant since 'c' isn't used\n println(\"1\")\n }\n }\n\n fun testOk() {\n val c = MyClass()\n with(c) { // <== OK because 'f()' is effectively 'c.f()'\n println(f())\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WarningOnMainUnusedParameterMigration", + "shortDescription": { + "text": "Unused 'args' on 'main' since 1.4" + }, + "fullDescription": { + "text": "Reports 'main' function with an unused single parameter. Since Kotlin 1.4, it is possible to use the 'main' function without parameter as the entry point to the Kotlin program. The compiler reports a warning for the 'main' function with an unused parameter.", + "markdown": "Reports `main` function with an unused single parameter.\n\nSince Kotlin 1.4, it is possible to use the `main` function without parameter as the entry point to the Kotlin program.\nThe compiler reports a warning for the `main` function with an unused parameter." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceIsEmptyWithIfEmpty", + "shortDescription": { + "text": "'if' condition can be replaced with lambda call" + }, + "fullDescription": { + "text": "Reports 'isEmpty', 'isBlank', 'isNotEmpty', or 'isNotBlank' calls in an 'if' statement to assign a default value. The quick-fix replaces the 'if' condition with 'ifEmpty' or 'ifBlank' calls. Example: 'fun test(list: List): List {\n return if (list.isEmpty()) {\n println()\n foo()\n } else {\n list\n }\n }' After the quick-fix is applied: 'fun test(list: List): List {\n return list.ifEmpty {\n println()\n foo()\n }\n }' This inspection only reports if the Kotlin language version of the project or module is 1.3 or higher.", + "markdown": "Reports `isEmpty`, `isBlank`, `isNotEmpty`, or `isNotBlank` calls in an `if` statement to assign a default value.\n\nThe quick-fix replaces the `if` condition with `ifEmpty` or `ifBlank` calls.\n\n**Example:**\n\n\n fun test(list: List): List {\n return if (list.isEmpty()) {\n println()\n foo()\n } else {\n list\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(list: List): List {\n return list.ifEmpty {\n println()\n foo()\n }\n }\n\nThis inspection only reports if the Kotlin language version of the project or module is 1.3 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantLabelMigration", + "shortDescription": { + "text": "Redundant label" + }, + "fullDescription": { + "text": "Reports redundant labels which cause compilation errors since Kotlin 1.4. Since Kotlin 1.0, one can mark any statement with a label: 'fun foo() {\n L1@ val x = L2@bar()\n }' However, these labels can be referenced only in a limited number of ways: break / continue from a loop non-local return from an inline lambda or inline anonymous function sssss Such labels are prohibited since Kotlin 1.4. This inspection only reports if the Kotlin language level of the project or module is 1.4 or higher.", + "markdown": "Reports redundant labels which cause compilation errors since Kotlin 1.4.\n\nSince Kotlin 1.0, one can mark any statement with a label:\n\n\n fun foo() {\n L1@ val x = L2@bar()\n }\n\nHowever, these labels can be referenced only in a limited number of ways:\n\n* break / continue from a loop\n* non-local return from an inline lambda or inline anonymous function\nsssss\n\nSuch labels are prohibited since Kotlin 1.4.\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.4 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinRedundantDiagnosticSuppress", + "shortDescription": { + "text": "Redundant diagnostic suppression" + }, + "fullDescription": { + "text": "Reports usages of '@Suppress' annotations that can be safely removed because the compiler diagnostic they affect is no longer applicable in this context. Example: 'fun doSmth(@Suppress(\"UNUSED_PARAMETER\") used: Int) {\n println(used)\n }' After the quick-fix is applied: 'fun doSmth(used: Int) {\n println(used)\n }'", + "markdown": "Reports usages of `@Suppress` annotations that can be safely removed because the compiler diagnostic they affect is no longer applicable in this context.\n\n**Example:**\n\n\n fun doSmth(@Suppress(\"UNUSED_PARAMETER\") used: Int) {\n println(used)\n }\n\nAfter the quick-fix is applied:\n\n\n fun doSmth(used: Int) {\n println(used)\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceWithImportAlias", + "shortDescription": { + "text": "Fully qualified name can be replaced with existing import alias" + }, + "fullDescription": { + "text": "Reports fully qualified names that can be replaced with an existing import alias. Example: 'import foo.Foo as Bar\nfun main() {\n foo.Foo()\n}' After the quick-fix is applied: 'import foo.Foo as Bar\nfun main() {\n Bar()\n}'", + "markdown": "Reports fully qualified names that can be replaced with an existing import alias.\n\n**Example:**\n\n\n import foo.Foo as Bar\n fun main() {\n foo.Foo()\n }\n\nAfter the quick-fix is applied:\n\n\n import foo.Foo as Bar\n fun main() {\n Bar()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceNegatedIsEmptyWithIsNotEmpty", + "shortDescription": { + "text": "Negated call can be simplified" + }, + "fullDescription": { + "text": "Reports negation 'isEmpty()' and 'isNotEmpty()' for collections and 'String', or 'isBlank()' and 'isNotBlank()' for 'String'. Using corresponding functions makes your code simpler. The quick-fix replaces the negation call with the corresponding call from the Standard Library. Example: 'fun main() {\n val list = listOf(1,2,3)\n if (!list.isEmpty()) {\n // do smth\n }\n }' After the quick-fix is applied: 'fun main() {\n val list = listOf(1,2,3)\n if (list.isNotEmpty()) {\n // do smth\n }\n }'", + "markdown": "Reports negation `isEmpty()` and `isNotEmpty()` for collections and `String`, or `isBlank()` and `isNotBlank()` for `String`.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces the negation call with the corresponding call from the Standard Library.\n\n**Example:**\n\n\n fun main() {\n val list = listOf(1,2,3)\n if (!list.isEmpty()) {\n // do smth\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun main() {\n val list = listOf(1,2,3)\n if (list.isNotEmpty()) {\n // do smth\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DelegationToVarProperty", + "shortDescription": { + "text": "Delegating to 'var' property" + }, + "fullDescription": { + "text": "Reports interface delegation to a 'var' property. Only initial value of a property is used for delegation, any later assignments do not affect it. Example: 'class Example(var text: CharSequence): CharSequence by text' A quick-fix replaces a property with immutable one: 'class Example(val text: CharSequence): CharSequence by text' Alternative way, if you rely on mutability for some reason: 'class Example(text: CharSequence): CharSequence by text {\n var text = text\n }'", + "markdown": "Reports interface delegation to a `var` property.\n\nOnly initial value of a property is used for delegation, any later assignments do not affect it.\n\n**Example:**\n\n\n class Example(var text: CharSequence): CharSequence by text\n\nA quick-fix replaces a property with immutable one:\n\n\n class Example(val text: CharSequence): CharSequence by text\n\nAlternative way, if you rely on mutability for some reason:\n\n\n class Example(text: CharSequence): CharSequence by text {\n var text = text\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstantConditionIf", + "shortDescription": { + "text": "Condition of 'if' expression is constant" + }, + "fullDescription": { + "text": "Reports 'if' expressions that have 'true' or 'false' constant literal condition and can be simplified. While occasionally intended, this construction is confusing and often the result of a typo or previous refactoring. Example: 'fun example() {\n if (true) {\n throw IllegalStateException(\"Unexpected state\")\n }\n }' A quick-fix removes the 'if' condition: 'fun example() {\n throw IllegalStateException(\"Unexpected state\")\n }'", + "markdown": "Reports `if` expressions that have `true` or `false` constant literal condition and can be simplified.\n\nWhile occasionally intended, this construction is confusing and often the result of a typo\nor previous refactoring.\n\n**Example:**\n\n\n fun example() {\n if (true) {\n throw IllegalStateException(\"Unexpected state\")\n }\n }\n\nA quick-fix removes the `if` condition:\n\n\n fun example() {\n throw IllegalStateException(\"Unexpected state\")\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantLambdaArrow", + "shortDescription": { + "text": "Redundant lambda arrow" + }, + "fullDescription": { + "text": "Reports redundant lambda arrows in lambdas without parameters. Example: 'fun foo(f: () -> Unit) = f()\n\n fun bar() {\n foo { -> println(\"Hi!\") }\n }' After the quick-fix is applied: 'fun foo(f: () -> Unit) = f()\n\n fun bar() {\n foo { println(\"Hi!\") }\n }'", + "markdown": "Reports redundant lambda arrows in lambdas without parameters.\n\n**Example:**\n\n\n fun foo(f: () -> Unit) = f()\n\n fun bar() {\n foo { -\\> println(\"Hi!\") }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(f: () -> Unit) = f()\n\n fun bar() {\n foo { println(\"Hi!\") }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinInternalInJava", + "shortDescription": { + "text": "Usage of Kotlin internal declarations from Java" + }, + "fullDescription": { + "text": "Reports usages of Kotlin 'internal' declarations in Java code that is located in a different module. The 'internal' keyword is designed to restrict access to a class, function, or property from other modules. Due to JVM limitations, 'internal' classes, functions, and properties can still be accessed from outside Kotlin, which may later lead to compatibility problems.", + "markdown": "Reports usages of Kotlin `internal` declarations in Java code that is located in a different module.\n\n\nThe `internal` keyword is designed to restrict access to a class, function, or property from other modules.\nDue to JVM limitations, `internal` classes, functions, and properties can still be\naccessed from outside Kotlin, which may later lead to compatibility problems." + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Java interop issues", + "index": 66, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifyBooleanWithConstants", + "shortDescription": { + "text": "Boolean expression can be simplified" + }, + "fullDescription": { + "text": "Reports boolean expression parts that can be reduced to constants. The quick-fix simplifies the condition. Example: 'fun use(arg: Boolean) {\n if (false == arg) {\n\n }\n }' After the quick-fix is applied: 'fun use(arg: Boolean) {\n if (!arg) {\n\n }\n }'", + "markdown": "Reports boolean expression parts that can be reduced to constants.\n\nThe quick-fix simplifies the condition.\n\n**Example:**\n\n\n fun use(arg: Boolean) {\n if (false == arg) {\n\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun use(arg: Boolean) {\n if (!arg) {\n\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverrideDeprecatedMigration", + "shortDescription": { + "text": "Do not propagate method deprecation through overrides since 1.9" + }, + "fullDescription": { + "text": "Reports a declarations that are propagated by '@Deprecated' annotation that will lead to compilation error since 1.9. Motivation types: Implementation changes are required for implementation design/architectural reasons Inconsistency in the design (things are done differently in different contexts) More details: KT-47902: Do not propagate method deprecation through overrides The quick-fix copies '@Deprecated' annotation from the parent declaration. Example: 'open class Base {\n @Deprecated(\"Don't use\")\n open fun foo() {}\n }\n\n class Derived : Base() {\n override fun foo() {}\n }' After the quick-fix is applied: 'open class Base {\n @Deprecated(\"Don't use\")\n open fun foo() {}\n }\n\n class Derived : Base() {\n @Deprecated(\"Don't use\")\n override fun foo() {}\n }' This inspection only reports if the Kotlin language level of the project or module is 1.6 or higher.", + "markdown": "Reports a declarations that are propagated by `@Deprecated` annotation that will lead to compilation error since 1.9.\n\nMotivation types:\n\n* Implementation changes are required for implementation design/architectural reasons\n* Inconsistency in the design (things are done differently in different contexts)\n\n**More details:** [KT-47902: Do not propagate method deprecation through overrides](https://youtrack.jetbrains.com/issue/KT-47902)\n\nThe quick-fix copies `@Deprecated` annotation from the parent declaration.\n\n**Example:**\n\n\n open class Base {\n @Deprecated(\"Don't use\")\n open fun foo() {}\n }\n\n class Derived : Base() {\n override fun foo() {}\n }\n\nAfter the quick-fix is applied:\n\n\n open class Base {\n @Deprecated(\"Don't use\")\n open fun foo() {}\n }\n\n class Derived : Base() {\n @Deprecated(\"Don't use\")\n override fun foo() {}\n }\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.6 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NoConstructorMigration", + "shortDescription": { + "text": "Forbidden constructor call" + }, + "fullDescription": { + "text": "Reports a constructor calls on functional supertypes that will lead to compilation error since 1.9. Motivation types: The implementation does not abide by a published spec or documentation More details: KT-46344: No error for a super class constructor call on a function interface in supertypes list The quick-fix removes a constructor call. Example: 'abstract class A : () -> Int()' After the quick-fix is applied: 'abstract class A : () -> Int' This inspection only reports if the Kotlin language level of the project or module is 1.7 or higher.", + "markdown": "Reports a constructor calls on functional supertypes that will lead to compilation error since 1.9.\n\nMotivation types:\n\n* The implementation does not abide by a published spec or documentation\n\n**More details:** [KT-46344: No error for a super class constructor call on a function interface in supertypes list](https://youtrack.jetbrains.com/issue/KT-46344)\n\nThe quick-fix removes a constructor call.\n\n**Example:**\n\n\n abstract class A : () -> Int()\n\nAfter the quick-fix is applied:\n\n\n abstract class A : () -> Int\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.7 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantModalityModifier", + "shortDescription": { + "text": "Redundant modality modifier" + }, + "fullDescription": { + "text": "Reports the modality modifiers that match the default modality of an element ('final' for most elements, 'open' for members with an 'override'). Example: 'final class Foo\n\n open class Bar : Comparable {\n open override fun compareTo(other: Bar): Int = 0\n }' After the quick-fix is applied: 'class Foo\n\n open class Bar : Comparable {\n override fun compareTo(other: Bar): Int = 0\n }'", + "markdown": "Reports the modality modifiers that match the default modality of an element (`final` for most elements, `open` for members with an `override`).\n\n**Example:**\n\n\n final class Foo\n\n open class Bar : Comparable {\n open override fun compareTo(other: Bar): Int = 0\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo\n\n open class Bar : Comparable {\n override fun compareTo(other: Bar): Int = 0\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseWithIndex", + "shortDescription": { + "text": "Manually incremented index variable can be replaced with use of 'withIndex()'" + }, + "fullDescription": { + "text": "Reports 'for' loops with a manually incremented index variable. 'for' loops with a manually incremented index variable can be simplified with the 'withIndex()' function. Use withIndex() instead of manual index increment quick-fix can be used to amend the code automatically. Example: 'fun foo(list: List): Int? {\n var index = 0\n for (s in list) { <== can be simplified\n val x = s.length * index\n index++\n if (x > 0) return x\n }\n return null\n }' After the quick-fix is applied: 'fun foo(list: List): Int? {\n for ((index, s) in list.withIndex()) {\n val x = s.length * index\n if (x > 0) return x\n }\n return null\n }'", + "markdown": "Reports `for` loops with a manually incremented index variable.\n\n`for` loops with a manually incremented index variable can be simplified with the `withIndex()` function.\n\n**Use withIndex() instead of manual index increment** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n fun foo(list: List): Int? {\n var index = 0\n for (s in list) { <== can be simplified\n val x = s.length * index\n index++\n if (x > 0) return x\n }\n return null\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(list: List): Int? {\n for ((index, s) in list.withIndex()) {\n val x = s.length * index\n if (x > 0) return x\n }\n return null\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifyAssertNotNull", + "shortDescription": { + "text": "'assert' call can be replaced with '!!' or '?:'" + }, + "fullDescription": { + "text": "Reports 'assert' calls that check a not null value of the declared variable. Using '!!' or '?:' makes your code simpler. The quick-fix replaces 'assert' with '!!' or '?:' operator in the variable initializer. Example: 'fun foo(p: Array) {\n val v = p[0]\n assert(v != null, { \"Should be not null\" })\n }' After the quick-fix is applied: 'fun foo(p: Array) {\n val v = p[0] ?: error(\"Should be not null\")\n }'", + "markdown": "Reports `assert` calls that check a not null value of the declared variable.\n\nUsing `!!` or `?:` makes your code simpler.\n\nThe quick-fix replaces `assert` with `!!` or `?:` operator in the variable initializer.\n\n**Example:**\n\n\n fun foo(p: Array) {\n val v = p[0]\n assert(v != null, { \"Should be not null\" })\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(p: Array) {\n val v = p[0] ?: error(\"Should be not null\")\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConvertNaNEquality", + "shortDescription": { + "text": "Convert equality check with 'NaN' to 'isNaN' call" + }, + "fullDescription": { + "text": "Reports an equality check with 'Float.NaN' or 'Double.NaN' that should be replaced with an 'isNaN()' check. According to IEEE 754, equality check against NaN always returns 'false', even for 'NaN == NaN'. Therefore, such a check is likely to be a mistake. A quick-fix replaces comparison with 'isNaN()' check that uses a different comparison technique and handles 'NaN' values correctly. Example: 'fun check(value: Double): Boolean {\n return Double.NaN == value\n }' After the fix is applied: 'fun check(value: Double): Boolean {\n return value.isNaN()\n }'", + "markdown": "Reports an equality check with `Float.NaN` or `Double.NaN` that should be replaced with an `isNaN()` check.\n\n\nAccording to IEEE 754, equality check against NaN always returns `false`, even for `NaN == NaN`.\nTherefore, such a check is likely to be a mistake.\n\nA quick-fix replaces comparison with `isNaN()` check that uses a different comparison technique and handles `NaN` values correctly.\n\n**Example:**\n\n\n fun check(value: Double): Boolean {\n return Double.NaN == value\n }\n\nAfter the fix is applied:\n\n\n fun check(value: Double): Boolean {\n return value.isNaN()\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinPlaceholderCountMatchesArgumentCount", + "shortDescription": { + "text": "Number of placeholders does not match number of arguments in logging call" + }, + "fullDescription": { + "text": "Reports SLF4J or Log4j 2 logging calls, such as 'logger.info(\"{}: {}\", key)' where the number of '{}' placeholders in the logger message doesn't match the number of other arguments to the logging call.", + "markdown": "Reports SLF4J or Log4j 2 logging calls, such as `logger.info(\"{}: {}\", key)` where the number of `{}` placeholders in the logger message doesn't match the number of other arguments to the logging call." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Logging", + "index": 116, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceManualRangeWithIndicesCalls", + "shortDescription": { + "text": "Range can be converted to indices or iteration" + }, + "fullDescription": { + "text": "Reports 'until' and 'rangeTo' operators that can be replaced with 'Collection.indices' or iteration over collection inside 'for' loop. Using syntactic sugar makes your code simpler. The quick-fix replaces the manual range with the corresponding construction. Example: 'fun main(args: Array) {\n for (index in 0..args.size - 1) {\n println(args[index])\n }\n }' After the quick-fix is applied: 'fun main(args: Array) {\n for (element in args) {\n println(element)\n }\n }'", + "markdown": "Reports `until` and `rangeTo` operators that can be replaced with `Collection.indices` or iteration over collection inside `for` loop.\n\nUsing syntactic sugar makes your code simpler.\n\nThe quick-fix replaces the manual range with the corresponding construction.\n\n**Example:**\n\n\n fun main(args: Array) {\n for (index in 0..args.size - 1) {\n println(args[index])\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun main(args: Array) {\n for (element in args) {\n println(element)\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinLoggerInitializedWithForeignClass", + "shortDescription": { + "text": "Logger initialized with foreign class" + }, + "fullDescription": { + "text": "Reports 'Logger' instances initialized with a class literal other than the class the 'Logger' resides in. This can happen when copy-pasting from another class. It may result in logging events under an unexpected category and incorrect filtering. Use the inspection options to specify the logger factory classes and methods recognized by this inspection. Example: 'class AnotherService\nclass MyService {\n private val logger = LoggerFactory.getLogger(AnotherService::class.java)\n}' After the quick-fix is applied: 'class MyService {\n private val logger = LoggerFactory.getLogger(MyService::class.java)\n}'", + "markdown": "Reports `Logger` instances initialized with a class literal other than the class the `Logger` resides in.\n\n\nThis can happen when copy-pasting from another class.\nIt may result in logging events under an unexpected category and incorrect filtering.\n\n\nUse the inspection options to specify the logger factory classes and methods recognized by this inspection.\n\n**Example:**\n\n\n class AnotherService\n class MyService {\n private val logger = LoggerFactory.getLogger(AnotherService::class.java)\n }\n\nAfter the quick-fix is applied:\n\n\n class MyService {\n private val logger = LoggerFactory.getLogger(MyService::class.java)\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Logging", + "index": 116, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ImplicitThis", + "shortDescription": { + "text": "Implicit 'this'" + }, + "fullDescription": { + "text": "Reports usages of implicit this. Example: 'class Foo {\n fun s() = \"\"\n\n fun test() {\n s()\n }\n }' The quick fix specifies this explicitly: 'class Foo {\n fun s() = \"\"\n\n fun test() {\n this.s()\n }\n }'", + "markdown": "Reports usages of implicit **this** .\n\n**Example:**\n\n\n class Foo {\n fun s() = \"\"\n\n fun test() {\n s()\n }\n }\n\nThe quick fix specifies **this** explicitly:\n\n\n class Foo {\n fun s() = \"\"\n\n fun test() {\n this.s()\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveToStringInStringTemplate", + "shortDescription": { + "text": "Redundant call to 'toString()' in string template" + }, + "fullDescription": { + "text": "Reports calls to 'toString()' in string templates that can be safely removed. Example: 'fun foo(a: Int, b: Int) = a + b\n\n fun test(): String {\n return \"Foo: ${foo(0, 4).toString()}\" // 'toString()' is redundant\n }' After the quick-fix is applied: 'fun foo(a: Int, b: Int) = a + b\n\n fun test(): String {\n return \"Foo: ${foo(0, 4)}\"\n }'", + "markdown": "Reports calls to `toString()` in string templates that can be safely removed.\n\n**Example:**\n\n fun foo(a: Int, b: Int) = a + b\n\n fun test(): String {\n return \"Foo: ${foo(0, 4).toString()}\" // 'toString()' is redundant\n }\n\nAfter the quick-fix is applied:\n\n fun foo(a: Int, b: Int) = a + b\n\n fun test(): String {\n return \"Foo: ${foo(0, 4)}\"\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantAsSequence", + "shortDescription": { + "text": "Redundant 'asSequence' call" + }, + "fullDescription": { + "text": "Reports redundant 'asSequence()' call that can never have a positive performance effect. 'asSequence()' speeds up collection processing that includes multiple operations because it performs operations lazily and doesn't create intermediate collections. However, if a terminal operation (such as 'toList()') is used right after 'asSequence()', this doesn't give you any positive performance effect. Example: 'fun test(list: List) {\n list.asSequence().last()\n }' After the quick-fix is applied: 'fun test(list: List) {\n list.last()\n }'", + "markdown": "Reports redundant `asSequence()` call that can never have a positive performance effect.\n\n\n`asSequence()` speeds up collection processing that includes multiple operations because it performs operations lazily\nand doesn't create intermediate collections.\n\n\nHowever, if a terminal operation (such as `toList()`) is used right after `asSequence()`, this doesn't give\nyou any positive performance effect.\n\n**Example:**\n\n\n fun test(list: List) {\n list.asSequence().last()\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(list: List) {\n list.last()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinCatchMayIgnoreException", + "shortDescription": { + "text": "'catch' block may ignore exception" + }, + "fullDescription": { + "text": "Reports 'catch' blocks that are empty or may ignore an exception. While occasionally intended, empty 'catch' blocks may complicate debugging. Also, ignoring a 'catch' parameter might be wrong. The inspection won't report any 'catch' parameters named 'ignore', 'ignored', or '_'. You can use a quick-fix to change the exception name to '_'. Example: 'try {\n throwingMethod()\n } catch (ex: IOException) {\n\n }' After the quick-fix is applied: 'try {\n throwingMethod()\n } catch (_: IOException) {\n\n }' Use the Do not warn when 'catch' block contains a comment option to ignore 'catch' blocks with comments.", + "markdown": "Reports `catch` blocks that are empty or may ignore an exception.\n\nWhile occasionally intended, empty `catch` blocks may complicate debugging.\nAlso, ignoring a `catch` parameter might be wrong.\n\n\nThe inspection won't report any `catch` parameters named `ignore`, `ignored`, or `_`.\n\n\nYou can use a quick-fix to change the exception name to `_`.\n\n**Example:**\n\n\n try {\n throwingMethod()\n } catch (ex: IOException) {\n\n }\n\nAfter the quick-fix is applied:\n\n\n try {\n throwingMethod()\n } catch (_: IOException) {\n\n }\n\nUse the **Do not warn when 'catch' block contains a comment** option to ignore `catch` blocks with comments." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DifferentStdlibGradleVersion", + "shortDescription": { + "text": "Kotlin library and Gradle plugin versions are different" + }, + "fullDescription": { + "text": "Reports different Kotlin stdlib and compiler versions. Example: 'dependencies {\n classpath \"org.jetbrains.kotlin:kotlin-stdlib:0.0.1\"\n }' To fix the problem change the kotlin stdlib version to match the kotlin compiler version.", + "markdown": "Reports different Kotlin stdlib and compiler versions.\n\n**Example:**\n\n\n dependencies {\n classpath \"org.jetbrains.kotlin:kotlin-stdlib:0.0.1\"\n }\n\nTo fix the problem change the kotlin stdlib version to match the kotlin compiler version." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 2, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinUnusedImport", + "shortDescription": { + "text": "Unused import directive" + }, + "fullDescription": { + "text": "Reports redundant 'import' statements. Default and unused imports can be safely removed. Example: 'import kotlin.*\n import kotlin.collections.*\n import kotlin.comparisons.*\n import kotlin.io.*\n import kotlin.ranges.*\n import kotlin.sequences.*\n import kotlin.text.*\n\n // jvm specific\n import java.lang.*\n import kotlin.jvm.*\n\n // js specific\n import kotlin.js.*\n\n import java.io.* // this import is unused and could be removed\n import java.util.*\n\n fun foo(list: ArrayList) {\n list.add(\"\")\n }'", + "markdown": "Reports redundant `import` statements.\n\nDefault and unused imports can be safely removed.\n\n**Example:**\n\n\n import kotlin.*\n import kotlin.collections.*\n import kotlin.comparisons.*\n import kotlin.io.*\n import kotlin.ranges.*\n import kotlin.sequences.*\n import kotlin.text.*\n\n // jvm specific\n import java.lang.*\n import kotlin.jvm.*\n\n // js specific\n import kotlin.js.*\n\n import java.io.* // this import is unused and could be removed\n import java.util.*\n\n fun foo(list: ArrayList) {\n list.add(\"\")\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CanBePrimaryConstructorProperty", + "shortDescription": { + "text": "Property is explicitly assigned to constructor parameter" + }, + "fullDescription": { + "text": "Reports properties that are explicitly assigned to primary constructor parameters. Properties can be declared directly in the primary constructor, reducing the amount of code and increasing code readability. Example: 'class User(name: String) {\n val name = name\n }' A quick-fix joins the parameter and property declaration into a primary constructor parameter: 'class User(val name: String) {\n }'", + "markdown": "Reports properties that are explicitly assigned to primary constructor parameters.\n\nProperties can be declared directly in the primary constructor, reducing the amount of code and increasing code readability.\n\n**Example:**\n\n\n class User(name: String) {\n val name = name\n }\n\nA quick-fix joins the parameter and property declaration into a primary constructor parameter:\n\n\n class User(val name: String) {\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CanBeVal", + "shortDescription": { + "text": "Local 'var' is never modified and can be declared as 'val'" + }, + "fullDescription": { + "text": "Reports local variables declared with the 'var' keyword that are never modified. Kotlin encourages to declare practically immutable variables using the 'val' keyword, ensuring that their value will never change. Example: 'fun example() {\n var primeNumbers = listOf(1, 2, 3, 5, 7, 11, 13)\n var fibonacciNumbers = listOf(1, 1, 2, 3, 5, 8, 13)\n print(\"Same numbers: \" + primeNumbers.intersect(fibonacciNumbers))\n }' A quick-fix replaces the 'var' keyword with 'val': 'fun example() {\n val primeNumbers = listOf(1, 2, 3, 5, 7, 11, 13)\n val fibonacciNumbers = listOf(1, 1, 2, 3, 5, 8, 13)\n print(\"Same numbers: \" + primeNumbers.intersect(fibonacciNumbers))\n }'", + "markdown": "Reports local variables declared with the `var` keyword that are never modified.\n\nKotlin encourages to declare practically immutable variables using the `val` keyword, ensuring that their value will never change.\n\n**Example:**\n\n\n fun example() {\n var primeNumbers = listOf(1, 2, 3, 5, 7, 11, 13)\n var fibonacciNumbers = listOf(1, 1, 2, 3, 5, 8, 13)\n print(\"Same numbers: \" + primeNumbers.intersect(fibonacciNumbers))\n }\n\nA quick-fix replaces the `var` keyword with `val`:\n\n\n fun example() {\n val primeNumbers = listOf(1, 2, 3, 5, 7, 11, 13)\n val fibonacciNumbers = listOf(1, 1, 2, 3, 5, 8, 13)\n print(\"Same numbers: \" + primeNumbers.intersect(fibonacciNumbers))\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaMapForEach", + "shortDescription": { + "text": "Java Map.forEach method call should be replaced with Kotlin's forEach" + }, + "fullDescription": { + "text": "Reports a Java Map.'forEach' method call that can be replaced with Kotlin's forEach. Example: 'fun test(map: HashMap) {\n map.forEach { (key, value) ->\n foo(key, value)\n }\n }\n\n fun foo(i: Int, s: String) {}' The quick fix removes parentheses: 'fun test(map: HashMap) {\n map.forEach { key, value ->\n foo(key, value)\n }\n }\n\n fun foo(i: Int, s: String) {}'", + "markdown": "Reports a Java Map.`forEach` method call that can be replaced with Kotlin's **forEach** .\n\n**Example:**\n\n\n fun test(map: HashMap) {\n map.forEach { (key, value) ->\n foo(key, value)\n }\n }\n\n fun foo(i: Int, s: String) {}\n\nThe quick fix removes parentheses:\n\n\n fun test(map: HashMap) {\n map.forEach { key, value ->\n foo(key, value)\n }\n }\n\n fun foo(i: Int, s: String) {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantObjectTypeCheck", + "shortDescription": { + "text": "Non-idiomatic 'is' type check for an object" + }, + "fullDescription": { + "text": "Reports non-idiomatic 'is' type checks for an object. It's recommended to replace such checks with reference comparison. Example: 'object Foo\n\n fun foo(arg: Any) = when {\n arg is Foo -> ...\n arg !is Foo -> ...\n }' After the quick-fix is applied: 'object Foo\n\n fun foo(arg: Any) = when {\n arg === Foo -> ...\n arg !== Foo -> ...\n }'", + "markdown": "Reports non-idiomatic `is` type checks for an object.\n\nIt's recommended to replace such checks with reference comparison.\n\n**Example:**\n\n\n object Foo\n\n fun foo(arg: Any) = when {\n arg is Foo -> ...\n arg !is Foo -> ...\n }\n\nAfter the quick-fix is applied:\n\n\n object Foo\n\n fun foo(arg: Any) = when {\n arg === Foo -> ...\n arg !== Foo -> ...\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspendFunctionOnCoroutineScope", + "shortDescription": { + "text": "Ambiguous coroutineContext due to CoroutineScope receiver of suspend function" + }, + "fullDescription": { + "text": "Reports calls and accesses of 'CoroutineScope' extensions or members inside suspend functions with 'CoroutineScope' receiver. When a function is 'suspend' and has 'CoroutineScope' receiver, it has ambiguous access to 'CoroutineContext' via 'kotlin.coroutines.coroutineContext' and via 'CoroutineScope.coroutineContext', and two these contexts are different in general. To improve this situation, one can wrap suspicious call inside 'coroutineScope { ... }' or get rid of 'CoroutineScope' function receiver.", + "markdown": "Reports calls and accesses of `CoroutineScope` extensions or members inside suspend functions with `CoroutineScope` receiver.\n\nWhen a function is `suspend` and has `CoroutineScope` receiver,\nit has ambiguous access to `CoroutineContext` via `kotlin.coroutines.coroutineContext` and via `CoroutineScope.coroutineContext`,\nand two these contexts are different in general.\n\n\nTo improve this situation, one can wrap suspicious call inside `coroutineScope { ... }` or\nget rid of `CoroutineScope` function receiver." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceWithIgnoreCaseEquals", + "shortDescription": { + "text": "Should be replaced with 'equals(..., ignoreCase = true)'" + }, + "fullDescription": { + "text": "Reports case-insensitive comparisons that can be replaced with 'equals(..., ignoreCase = true)'. By using 'equals()' you don't have to allocate extra strings with 'toLowerCase()' or 'toUpperCase()' to compare strings. The quick-fix replaces the case-insensitive comparison that uses 'toLowerCase()' or 'toUpperCase()' with 'equals(..., ignoreCase = true)'. Note: May change semantics for some locales. Example: 'fun main() {\n val a = \"KoTliN\"\n val b = \"KOTLIN\"\n println(a.toLowerCase() == b.toLowerCase())\n }' After the quick-fix is applied: 'fun main() {\n val a = \"KoTliN\"\n val b = \"KOTLIN\"\n println(a.equals(b, ignoreCase = true))\n }'", + "markdown": "Reports case-insensitive comparisons that can be replaced with `equals(..., ignoreCase = true)`.\n\nBy using `equals()` you don't have to allocate extra strings with `toLowerCase()` or `toUpperCase()` to compare strings.\n\nThe quick-fix replaces the case-insensitive comparison that uses `toLowerCase()` or `toUpperCase()` with `equals(..., ignoreCase = true)`.\n\n**Note:** May change semantics for some locales.\n\n**Example:**\n\n\n fun main() {\n val a = \"KoTliN\"\n val b = \"KOTLIN\"\n println(a.toLowerCase() == b.toLowerCase())\n }\n\nAfter the quick-fix is applied:\n\n\n fun main() {\n val a = \"KoTliN\"\n val b = \"KOTLIN\"\n println(a.equals(b, ignoreCase = true))\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DifferentMavenStdlibVersion", + "shortDescription": { + "text": "Library and maven plugin versions are different" + }, + "fullDescription": { + "text": "Reports different Kotlin stdlib and compiler versions. Using different versions of the Kotlin compiler and the standard library can lead to unpredictable runtime problems and should be avoided.", + "markdown": "Reports different Kotlin stdlib and compiler versions.\n\nUsing different versions of the Kotlin compiler and the standard library can lead to unpredictable\nruntime problems and should be avoided." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 2, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceSubstringWithSubstringAfter", + "shortDescription": { + "text": "'substring' call should be replaced with 'substringAfter'" + }, + "fullDescription": { + "text": "Reports calls like 's.substring(s.indexOf(x))' that can be replaced with 's.substringAfter(x)'. Using 's.substringAfter(x)' makes your code simpler. The quick-fix replaces the 'substring' call with 'substringAfter'. Example: 'fun foo(s: String) {\n s.substring(s.indexOf('x'))\n }' After the quick-fix is applied: 'fun foo(s: String) {\n s.substringAfter('x')\n }'", + "markdown": "Reports calls like `s.substring(s.indexOf(x))` that can be replaced with `s.substringAfter(x)`.\n\nUsing `s.substringAfter(x)` makes your code simpler.\n\nThe quick-fix replaces the `substring` call with `substringAfter`.\n\n**Example:**\n\n\n fun foo(s: String) {\n s.substring(s.indexOf('x'))\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(s: String) {\n s.substringAfter('x')\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ImplicitNullableNothingType", + "shortDescription": { + "text": "Implicit 'Nothing?' type" + }, + "fullDescription": { + "text": "Reports variables and functions with the implicit Nothing? type. Example: 'fun foo() = null' The quick fix specifies the return type explicitly: 'fun foo(): Nothing? = null'", + "markdown": "Reports variables and functions with the implicit **Nothing?** type.\n\n**Example:**\n\n\n fun foo() = null\n\nThe quick fix specifies the return type explicitly:\n\n\n fun foo(): Nothing? = null\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantCompanionReference", + "shortDescription": { + "text": "Redundant 'Companion' reference" + }, + "fullDescription": { + "text": "Reports redundant 'Companion' reference. Example: 'class A {\n companion object {\n fun create() = A()\n }\n }\n fun test() {\n val s = A.Companion.create()\n }' After the quick-fix is applied: 'class A {\n companion object {\n fun create() = A()\n }\n }\n fun test() {\n val s = A.create()\n }'", + "markdown": "Reports redundant `Companion` reference.\n\n**Example:**\n\n\n class A {\n companion object {\n fun create() = A()\n }\n }\n fun test() {\n val s = A.Companion.create()\n }\n\nAfter the quick-fix is applied:\n\n\n class A {\n companion object {\n fun create() = A()\n }\n }\n fun test() {\n val s = A.create()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceAssociateFunction", + "shortDescription": { + "text": "'associate' can be replaced with 'associateBy' or 'associateWith'" + }, + "fullDescription": { + "text": "Reports calls to 'associate()' and 'associateTo()' that can be replaced with 'associateBy()' or 'associateWith()'. Both functions accept a transformer function applied to elements of a given sequence or collection (as a receiver). The pairs are then used to build the resulting 'Map'. Given the transformer refers to 'it', the 'associate[To]()' call can be replaced with more performant 'associateBy()' or 'associateWith()'. Examples: 'fun getKey(i: Int) = 1L\n fun getValue(i: Int) = 1L\n\n fun test() {\n arrayOf(1).associate { getKey(it) to it } // replaceable 'associate()'\n listOf(1).associate { it to getValue(it) } // replaceable 'associate()'\n }' After the quick-fix is applied: 'fun getKey(i: Int) = 1L\n fun getValue(i: Int) = 1L\n\n fun test() {\n arrayOf(1).associateBy { getKey(it) }\n listOf(1).associateWith { getValue(it) }\n }'", + "markdown": "Reports calls to `associate()` and `associateTo()` that can be replaced with `associateBy()` or `associateWith()`.\n\n\nBoth functions accept a transformer function applied to elements of a given sequence or collection (as a receiver).\nThe pairs are then used to build the resulting `Map`.\n\n\nGiven the transformer refers to `it`, the `associate[To]()` call can be replaced with more performant `associateBy()`\nor `associateWith()`.\n\n**Examples:**\n\n fun getKey(i: Int) = 1L\n fun getValue(i: Int) = 1L\n\n fun test() {\n arrayOf(1).associate { getKey(it) to it } // replaceable 'associate()'\n listOf(1).associate { it to getValue(it) } // replaceable 'associate()'\n }\n\nAfter the quick-fix is applied:\n\n fun getKey(i: Int) = 1L\n fun getValue(i: Int) = 1L\n\n fun test() {\n arrayOf(1).associateBy { getKey(it) }\n listOf(1).associateWith { getValue(it) }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KDocUnresolvedReference", + "shortDescription": { + "text": "Unresolved reference in KDoc" + }, + "fullDescription": { + "text": "Reports unresolved references in KDoc comments. Example: '/**\n * [unresolvedLink]\n */\n fun foo() {}' To fix the problem make the link valid.", + "markdown": "Reports unresolved references in KDoc comments.\n\n**Example:**\n\n\n /**\n * [unresolvedLink]\n */\n fun foo() {}\n\nTo fix the problem make the link valid." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObsoleteExperimentalCoroutines", + "shortDescription": { + "text": "Experimental coroutines usages are deprecated since 1.3" + }, + "fullDescription": { + "text": "Reports code that uses experimental coroutines. Such usages are incompatible with Kotlin 1.3+ and should be updated.", + "markdown": "Reports code that uses experimental coroutines.\n\nSuch usages are incompatible with Kotlin 1.3+ and should be updated." + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LiftReturnOrAssignment", + "shortDescription": { + "text": "Return or assignment can be lifted out" + }, + "fullDescription": { + "text": "Reports 'if', 'when', and 'try' statements that can be converted to expressions by lifting the 'return' statement or an assignment out. Example: 'fun foo(arg: Int): String {\n when (arg) {\n 0 -> return \"Zero\"\n 1 -> return \"One\"\n else -> return \"Multiple\"\n }\n }' After the quick-fix is applied: 'fun foo(arg: Int): String {\n return when (arg) {\n 0 -> \"Zero\"\n 1 -> \"One\"\n else -> \"Multiple\"\n }\n }'", + "markdown": "Reports `if`, `when`, and `try` statements that can be converted to expressions by lifting the `return` statement or an assignment out.\n\n**Example:**\n\n\n fun foo(arg: Int): String {\n when (arg) {\n 0 -> return \"Zero\"\n 1 -> return \"One\"\n else -> return \"Multiple\"\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(arg: Int): String {\n return when (arg) {\n 0 -> \"Zero\"\n 1 -> \"One\"\n else -> \"Multiple\"\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NestedLambdaShadowedImplicitParameter", + "shortDescription": { + "text": "Nested lambda has shadowed implicit parameter" + }, + "fullDescription": { + "text": "Reports nested lambdas with shadowed implicit parameters. Example: 'fun foo(listOfLists: List>) {\n listOfLists.forEach {\n it.forEach {\n println(it)\n }\n }\n}' After the quick-fix is applied: 'fun foo(listOfLists: List>) {\n listOfLists.forEach {\n it.forEach { it1 ->\n println(it1)\n }\n }\n}'", + "markdown": "Reports nested lambdas with shadowed implicit parameters.\n\n**Example:**\n\n\n fun foo(listOfLists: List>) {\n listOfLists.forEach {\n it.forEach {\n println(it)\n }\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(listOfLists: List>) {\n listOfLists.forEach {\n it.forEach { it1 ->\n println(it1)\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifyWhenWithBooleanConstantCondition", + "shortDescription": { + "text": "Simplifiable 'when'" + }, + "fullDescription": { + "text": "Reports 'when' expressions with the constant 'true' or 'false' branches. Simplify \"when\" quick-fix can be used to amend the code automatically. Examples: 'fun redundant() {\n when { // <== redundant, quick-fix simplifies the when expression to \"println(\"true\")\"\n true -> println(\"true\")\n else -> println(\"false\")\n }\n }'", + "markdown": "Reports `when` expressions with the constant `true` or `false` branches.\n\n**Simplify \"when\"** quick-fix can be used to amend the code automatically.\n\nExamples:\n\n\n fun redundant() {\n when { // <== redundant, quick-fix simplifies the when expression to \"println(\"true\")\"\n true -> println(\"true\")\n else -> println(\"false\")\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantSamConstructor", + "shortDescription": { + "text": "Redundant SAM constructor" + }, + "fullDescription": { + "text": "Reports SAM (Single Abstract Method) constructor usages which can be replaced with lambdas. Example: 'fun main() {\n foo(Runnable { println(\"Hi!\") })\n }\n\n fun foo(other: Runnable) {}' After the quick-fix is applied: 'fun main() {\n foo( { println(\"Hi!\") })\n }\n\n fun foo(other: Runnable) {}'", + "markdown": "Reports SAM (Single Abstract Method) constructor usages which can be replaced with lambdas.\n\n**Example:**\n\n\n fun main() {\n foo(Runnable { println(\"Hi!\") })\n }\n\n fun foo(other: Runnable) {}\n\nAfter the quick-fix is applied:\n\n\n fun main() {\n foo( { println(\"Hi!\") })\n }\n\n fun foo(other: Runnable) {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinConstantConditions", + "shortDescription": { + "text": "Constant conditions" + }, + "fullDescription": { + "text": "Reports non-trivial conditions and values that are statically known to be always true, false, null or zero. While sometimes intended, often this is a sign of logical error in the program. Additionally, reports never reachable 'when' branches and some expressions that are statically known to fail always. Examples: 'fun process(x: Int?) {\n val isNull = x == null\n if (!isNull) {\n if (x != null) {} // condition is always true\n require(x!! < 0 && x > 10) // condition is always false\n } else {\n println(x!!) // !! operator will always fail\n }\n}\nfun process(v: Any) {\n when(v) {\n is CharSequence -> println(v as Int) // cast will always fail\n is String -> println(v) // branch is unreachable\n }\n}' New in 2021.3", + "markdown": "Reports non-trivial conditions and values that are statically known to be always true, false, null or zero. While sometimes intended, often this is a sign of logical error in the program. Additionally, reports never reachable `when` branches and some expressions that are statically known to fail always.\n\nExamples:\n\n\n fun process(x: Int?) {\n val isNull = x == null\n if (!isNull) {\n if (x != null) {} // condition is always true\n require(x!! < 0 && x > 10) // condition is always false\n } else {\n println(x!!) // !! operator will always fail\n }\n }\n fun process(v: Any) {\n when(v) {\n is CharSequence -> println(v as Int) // cast will always fail\n is String -> println(v) // branch is unreachable\n }\n }\n\nNew in 2021.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InconsistentCommentForJavaParameter", + "shortDescription": { + "text": "Inconsistent comment for Java parameter" + }, + "fullDescription": { + "text": "Reports inconsistent parameter names for Java method calls specified in a comment block. Examples: '// Java\n public class JavaService {\n public void invoke(String command) {}\n }' '// Kotlin\n fun main() {\n JavaService().invoke(/* name = */ \"fix\")\n }' The quick fix corrects the parameter name in the comment block: 'fun main() {\n JavaService().invoke(/* command = */ \"fix\")\n }'", + "markdown": "Reports inconsistent parameter names for **Java** method calls specified in a comment block.\n\n**Examples:**\n\n\n // Java\n public class JavaService {\n public void invoke(String command) {}\n }\n\n\n // Kotlin\n fun main() {\n JavaService().invoke(/* name = */ \"fix\")\n }\n\nThe quick fix corrects the parameter name in the comment block:\n\n\n fun main() {\n JavaService().invoke(/* command = */ \"fix\")\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Naming conventions", + "index": 48, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ForEachParameterNotUsed", + "shortDescription": { + "text": "Iterated elements are not used in forEach" + }, + "fullDescription": { + "text": "Reports 'forEach' loops that do not use iterable values. Example: 'listOf(1, 2, 3).forEach { }' The quick fix introduces anonymous parameter in the 'forEach' section: 'listOf(1, 2, 3).forEach { _ -> }'", + "markdown": "Reports `forEach` loops that do not use iterable values.\n\n**Example:**\n\n\n listOf(1, 2, 3).forEach { }\n\nThe quick fix introduces anonymous parameter in the `forEach` section:\n\n\n listOf(1, 2, 3).forEach { _ -> }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LeakingThis", + "shortDescription": { + "text": "Leaking 'this' in constructor" + }, + "fullDescription": { + "text": "Reports unsafe operations with 'this' during object construction including: Accessing a non-final property during class initialization: from a constructor or property initialization Calling a non-final function during class initialization Using 'this' as a function argument in a constructor of a non-final class If other classes inherit from the given class, they may not be fully initialized at the moment when an unsafe operation is carried out. Example: 'abstract class Base {\n val code = calculate()\n abstract fun calculate(): Int\n }\n\n class Derived(private val x: Int) : Base() {\n override fun calculate() = x\n }\n\n fun testIt() {\n println(Derived(42).code) // Expected: 42, actual: 0\n }'", + "markdown": "Reports unsafe operations with `this` during object construction including:\n\n* Accessing a non-final property during class initialization: from a constructor or property initialization\n* Calling a non-final function during class initialization\n* Using `this` as a function argument in a constructor of a non-final class\n\n\nIf other classes inherit from the given class,\nthey may not be fully initialized at the moment when an unsafe operation is carried out.\n\n**Example:**\n\n\n abstract class Base {\n val code = calculate()\n abstract fun calculate(): Int\n }\n\n class Derived(private val x: Int) : Base() {\n override fun calculate() = x\n }\n\n fun testIt() {\n println(Derived(42).code) // Expected: 42, actual: 0\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveRedundantCallsOfConversionMethods", + "shortDescription": { + "text": "Redundant call of conversion method" + }, + "fullDescription": { + "text": "Reports redundant calls to conversion methods (for example, 'toString()' on a 'String' or 'toDouble()' on a 'Double'). Use the 'Remove redundant calls of the conversion method' quick-fix to clean up the code.", + "markdown": "Reports redundant calls to conversion methods (for example, `toString()` on a `String` or `toDouble()` on a `Double`).\n\nUse the 'Remove redundant calls of the conversion method' quick-fix to clean up the code." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AddVarianceModifier", + "shortDescription": { + "text": "Type parameter can have 'in' or 'out' variance" + }, + "fullDescription": { + "text": "Reports type parameters that can have 'in' or 'out' variance. Using 'in' and 'out' variance provides more precise type inference in Kotlin and clearer code semantics. Example: 'class Box(val obj: T)\n\n fun consumeString(box: Box) {}\n fun consumeCharSequence(box: Box) {}\n\n fun usage(box: Box) {\n consumeString(box)\n consumeCharSequence(box) // Compilation error\n }' A quick-fix adds the matching variance modifier: 'class Box(val obj: T)\n\n fun consumeString(box: Box) {}\n fun consumeCharSequence(box: Box) {}\n\n fun usage(box: Box) ++{\n consumeString(box)\n consumeCharSequence(box) // OK\n }'", + "markdown": "Reports type parameters that can have `in` or `out` variance.\n\nUsing `in` and `out` variance provides more precise type inference in Kotlin and clearer code semantics.\n\n**Example:**\n\n\n class Box(val obj: T)\n\n fun consumeString(box: Box) {}\n fun consumeCharSequence(box: Box) {}\n\n fun usage(box: Box) {\n consumeString(box)\n consumeCharSequence(box) // Compilation error\n }\n\nA quick-fix adds the matching variance modifier:\n\n\n class Box(val obj: T)\n\n fun consumeString(box: Box) {}\n fun consumeCharSequence(box: Box) {}\n\n fun usage(box: Box) ++{\n consumeString(box)\n consumeCharSequence(box) // OK\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinThrowableNotThrown", + "shortDescription": { + "text": "Throwable not thrown" + }, + "fullDescription": { + "text": "Reports instantiations of 'Throwable' or its subclasses, when the created 'Throwable' is never actually thrown. The reported code indicates mistakes that are hard to catch in tests. Also, this inspection reports method calls that return instances of 'Throwable' or its subclasses, when the resulting 'Throwable' instance is not thrown. Example: 'fun check(condition: Boolean) {\n if (!condition) /* throw is missing here */ IllegalArgumentException(\"condition is not met\");\n }\n\n fun createError() = RuntimeException()\n\n fun foo() {\n /* throw is missing here */ createError()\n }'", + "markdown": "Reports instantiations of `Throwable` or its subclasses, when the created `Throwable` is never actually thrown.\n\nThe reported code indicates mistakes that are hard to catch in tests.\n\n\nAlso, this inspection reports method calls that return instances of `Throwable` or its subclasses,\nwhen the resulting `Throwable` instance is not thrown.\n\n**Example:**\n\n\n fun check(condition: Boolean) {\n if (!condition) /* throw is missing here */ IllegalArgumentException(\"condition is not met\");\n }\n\n fun createError() = RuntimeException()\n\n fun foo() {\n /* throw is missing here */ createError()\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinSealedInheritorsInJava", + "shortDescription": { + "text": "Inheritance of Kotlin sealed interface/class from Java" + }, + "fullDescription": { + "text": "Reports attempts to inherit from Kotlin sealed interfaces or classes in Java code. Example: '// Kotlin file: MathExpression.kt\n\nsealed class MathExpression\n\ndata class Const(val number: Double) : MathExpression()\ndata class Sum(val e1: MathExpression, val e2: MathExpression) : MathExpression()' '// Java file: NotANumber.java\n\npublic class NotANumber extends MathExpression {\n}'", + "markdown": "Reports attempts to inherit from Kotlin sealed interfaces or classes in Java code.\n\n**Example:**\n\n\n // Kotlin file: MathExpression.kt\n\n sealed class MathExpression\n\n data class Const(val number: Double) : MathExpression()\n data class Sum(val e1: MathExpression, val e2: MathExpression) : MathExpression()\n\n\n // Java file: NotANumber.java\n\n public class NotANumber extends MathExpression {\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Java interop issues", + "index": 66, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifyNegatedBinaryExpression", + "shortDescription": { + "text": "Negated boolean expression can be simplified" + }, + "fullDescription": { + "text": "Reports negated binary expressions that can be simplified. The quick-fix simplifies the binary expression. Example: 'fun test(n: Int) {\n !(0 == 1)\n }' After the quick-fix is applied: 'fun test(n: Int) {\n 0 != 1\n }'", + "markdown": "Reports negated binary expressions that can be simplified.\n\nThe quick-fix simplifies the binary expression.\n\n**Example:**\n\n\n fun test(n: Int) {\n !(0 == 1)\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(n: Int) {\n 0 != 1\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MemberVisibilityCanBePrivate", + "shortDescription": { + "text": "Class member can have 'private' visibility" + }, + "fullDescription": { + "text": "Reports declarations that can be made 'private' to follow the encapsulation principle. Example: 'class Service(val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n}' After the quick-fix is applied (considering there are no usages of 'url' outside of 'Service' class): 'class Service(private val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n}'", + "markdown": "Reports declarations that can be made `private` to follow the encapsulation principle.\n\n**Example:**\n\n\n class Service(val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n\nAfter the quick-fix is applied (considering there are no usages of `url` outside of `Service` class):\n\n\n class Service(private val url: String) {\n fun connect(): URLConnection = URL(url).openConnection()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveForLoopIndices", + "shortDescription": { + "text": "Unused loop index" + }, + "fullDescription": { + "text": "Reports 'for' loops iterating over a collection using the 'withIndex()' function and not using the index variable. Use the \"Remove indices in 'for' loop\" quick-fix to clean up the code. Examples: 'fun foo(bar: List) {\n for ((index : Int, value: String) in bar.withIndex()) { // <== 'index' is unused\n println(value)\n }\n }' After the quick-fix is applied: 'fun foo(bar: List) {\n for (value: String in bar) { // <== '.withIndex()' and 'index' are removed\n println(value)\n }\n }'", + "markdown": "Reports `for` loops iterating over a collection using the `withIndex()` function and not using the index variable.\n\nUse the \"Remove indices in 'for' loop\" quick-fix to clean up the code.\n\n**Examples:**\n\n\n fun foo(bar: List) {\n for ((index : Int, value: String) in bar.withIndex()) { // <== 'index' is unused\n println(value)\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(bar: List) {\n for (value: String in bar) { // <== '.withIndex()' and 'index' are removed\n println(value)\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantSuspendModifier", + "shortDescription": { + "text": "Redundant 'suspend' modifier" + }, + "fullDescription": { + "text": "Reports 'suspend' modifier as redundant if no other suspending functions are called inside.", + "markdown": "Reports `suspend` modifier as redundant if no other suspending functions are called inside." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousAsDynamic", + "shortDescription": { + "text": "Suspicious 'asDynamic' member invocation" + }, + "fullDescription": { + "text": "Reports usages of 'asDynamic' function on a receiver of dynamic type. 'asDynamic' function has no effect for expressions of dynamic type. 'asDynamic' function on a receiver of dynamic type can lead to runtime problems because 'asDynamic' will be executed in JavaScript environment, and such function may not be present at runtime. The intended way is to use this function on usual Kotlin type. Remove \"asDynamic\" invocation quick-fix can be used to amend the code automatically. Example: 'fun wrongUsage(d: Dynamic) {\n d.asDynamic().foo() // <== redundant, quick-fix simplifies the call expression to \"d.foo()\"\n }'", + "markdown": "Reports usages of `asDynamic` function on a receiver of dynamic type.\n\n`asDynamic` function has no effect for expressions of dynamic type.\n\n`asDynamic` function on a receiver of dynamic type can lead to runtime problems because `asDynamic`\nwill be executed in JavaScript environment, and such function may not be present at runtime.\nThe intended way is to use this function on usual Kotlin type.\n\n**Remove \"asDynamic\" invocation** quick-fix can be used to amend the code automatically.\n\nExample:\n\n\n fun wrongUsage(d: Dynamic) {\n d.asDynamic().foo() // <== redundant, quick-fix simplifies the call expression to \"d.foo()\"\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FromClosedRangeMigration", + "shortDescription": { + "text": "MIN_VALUE step in fromClosedRange() since 1.3" + }, + "fullDescription": { + "text": "Reports 'IntProgression.fromClosedRange()' and 'LongProgression.fromClosedRange()' with 'MIN_VALUE' step. It is prohibited to call 'IntProgression.fromClosedRange()' and 'LongProgression.fromClosedRange()' with 'MIN_VALUE' step. All such calls should be checked during migration to Kotlin 1.3+. Example: 'IntProgression.fromClosedRange(12, 143, Int.MIN_VALUE)' To fix the problem change the step of the progression.", + "markdown": "Reports `IntProgression.fromClosedRange()` and `LongProgression.fromClosedRange()` with `MIN_VALUE` step.\n\n\nIt is prohibited to call `IntProgression.fromClosedRange()` and `LongProgression.fromClosedRange()` with\n`MIN_VALUE` step. All such calls should be checked during migration to Kotlin 1.3+.\n\n**Example:**\n\n\n IntProgression.fromClosedRange(12, 143, Int.MIN_VALUE)\n\nTo fix the problem change the step of the progression." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveRedundantBackticks", + "shortDescription": { + "text": "Redundant backticks" + }, + "fullDescription": { + "text": "Reports redundant backticks in references. Some of the Kotlin keywords are valid identifiers in Java, for example: 'in', 'object', 'is'. If a Java library uses a Kotlin keyword for a method, you can still call the method escaping it with the backtick character ('`'), for example, 'foo.`is`(bar)'. Sometimes this escaping is redundant and can be safely omitted. The inspection discovers and reports such cases and is paired with the 'Remove redundant backticks' quick-fix, which allows you to amend the highlighted code. Examples: 'fun `is`(x: String) {}\n fun foo() {\n `is`(\"bar\") // 'is' is a keyword, backticks are required\n }\n\n fun `test that smth works as designed`() {} // OK, complex identifier for readability improvement\n\n val `a` = 1 // no need for backticks'", + "markdown": "Reports redundant backticks in references.\n\n\nSome of the Kotlin keywords are valid identifiers in Java, for example: `in`, `object`, `is`.\nIf a Java library uses a Kotlin keyword for a method, you can still call the method escaping it\nwith the backtick character (`````), for example, ``foo.`is`(bar)``.\nSometimes this escaping is redundant and can be safely omitted. The inspection discovers and reports such cases and is\npaired with the 'Remove redundant backticks' quick-fix, which allows you to amend the highlighted code.\n\n**Examples:**\n\n\n fun `is`(x: String) {}\n fun foo() {\n `is`(\"bar\") // 'is' is a keyword, backticks are required\n }\n\n fun `test that smth works as designed`() {} // OK, complex identifier for readability improvement\n\n val `a` = 1 // no need for backticks\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceReadLineWithReadln", + "shortDescription": { + "text": "'readLine' can be replaced with 'readln' or 'readlnOrNull'" + }, + "fullDescription": { + "text": "Reports calls to 'readLine()' that can be replaced with 'readln()' or 'readlnOrNull()'. Using corresponding functions makes your code simpler. The quick-fix replaces 'readLine()!!' with 'readln()' and 'readLine()' with 'readlnOrNull()'. Examples: 'val x = readLine()!!\n val y = readLine()?.length' After the quick-fix is applied: 'val x = readln()\n val y = readlnOrNull()?.length'", + "markdown": "Reports calls to `readLine()` that can be replaced with `readln()` or `readlnOrNull()`.\n\n\nUsing corresponding functions makes your code simpler.\n\n\nThe quick-fix replaces `readLine()!!` with `readln()` and `readLine()` with `readlnOrNull()`.\n\n**Examples:**\n\n\n val x = readLine()!!\n val y = readLine()?.length\n\nAfter the quick-fix is applied:\n\n\n val x = readln()\n val y = readlnOrNull()?.length\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SelfAssignment", + "shortDescription": { + "text": "Redundant assignment" + }, + "fullDescription": { + "text": "Reports assignments of a variable to itself. The quick-fix removes the redundant assignment. Example: 'fun test() {\n var bar = 1\n bar = bar\n }' After the quick-fix is applied: 'fun test() {\n var bar = 1\n }'", + "markdown": "Reports assignments of a variable to itself.\n\nThe quick-fix removes the redundant assignment.\n\n**Example:**\n\n\n fun test() {\n var bar = 1\n bar = bar\n }\n\nAfter the quick-fix is applied:\n\n\n fun test() {\n var bar = 1\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RecursiveEqualsCall", + "shortDescription": { + "text": "Recursive equals call" + }, + "fullDescription": { + "text": "Reports recursive 'equals'('==') calls. In Kotlin, '==' compares object values by calling 'equals' method under the hood. '===', on the other hand, compares objects by reference. '===' is commonly used in 'equals' method implementation. But '===' may be mistakenly mixed up with '==' leading to infinite recursion. Example: 'class X {\n override fun equals(other: Any?): Boolean {\n if (this == other) return true\n return false\n }\n }' After the quick-fix is applied: 'class X {\n override fun equals(other: Any?): Boolean {\n if (this === other) return true\n return false\n }\n }'", + "markdown": "Reports recursive `equals`(`==`) calls.\n\n\nIn Kotlin, `==` compares object values by calling `equals` method under the hood.\n`===`, on the other hand, compares objects by reference.\n\n\n`===` is commonly used in `equals` method implementation.\nBut `===` may be mistakenly mixed up with `==` leading to infinite recursion.\n\n**Example:**\n\n\n class X {\n override fun equals(other: Any?): Boolean {\n if (this == other) return true\n return false\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class X {\n override fun equals(other: Any?): Boolean {\n if (this === other) return true\n return false\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifyNestedEachInScopeFunction", + "shortDescription": { + "text": "Scope function with nested forEach can be simplified" + }, + "fullDescription": { + "text": "Reports 'forEach' functions in the scope functions such as 'also' or 'apply' that can be simplified. Convert forEach call to onEach quick-fix can be used to amend the code automatically. Examples: 'fun test(list: List) {\n val x = list.also { it.forEach { it + 4 } }.toString()\n val y = list.apply { forEach { println(it) } }\n }' After the quick-fix is applied: 'fun test(list: List) {\n val x = list.onEach { it + 4 }.toString()\n val y = list.onEach { println(it) }\n }'", + "markdown": "Reports `forEach` functions in the scope functions such as `also` or `apply` that can be simplified.\n\n**Convert forEach call to onEach** quick-fix can be used to amend the code automatically.\n\nExamples:\n\n\n fun test(list: List) {\n val x = list.also { it.forEach { it + 4 } }.toString()\n val y = list.apply { forEach { println(it) } }\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(list: List) {\n val x = list.onEach { it + 4 }.toString()\n val y = list.onEach { println(it) }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnsafeCastFromDynamic", + "shortDescription": { + "text": "Implicit (unsafe) cast from dynamic type" + }, + "fullDescription": { + "text": "Reports expressions with a dynamic type in the specified inspection scope that are implicitly cast to another type.", + "markdown": "Reports expressions with a dynamic type in the specified inspection scope that are implicitly cast to another type." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PublicApiImplicitType", + "shortDescription": { + "text": "Public API declaration with implicit return type" + }, + "fullDescription": { + "text": "Reports 'public' and 'protected' functions and properties that have an implicit return type. For API stability reasons, it's recommended to specify such types explicitly. Example: 'fun publicFunctionWhichAbusesTypeInference() =\n otherFunctionWithNotObviousReturnType() ?: yetAnotherFunctionWithNotObviousReturnType()' After the quick-fix is applied: 'fun publicFunctionWhichAbusesTypeInference(): Api =\n otherFunctionWithNotObviousReturnType() ?: yetAnotherFunctionWithNotObviousReturnType()'", + "markdown": "Reports `public` and `protected` functions and properties that have an implicit return type.\nFor API stability reasons, it's recommended to specify such types explicitly.\n\n**Example:**\n\n\n fun publicFunctionWhichAbusesTypeInference() =\n otherFunctionWithNotObviousReturnType() ?: yetAnotherFunctionWithNotObviousReturnType()\n\nAfter the quick-fix is applied:\n\n\n fun publicFunctionWhichAbusesTypeInference(): Api =\n otherFunctionWithNotObviousReturnType() ?: yetAnotherFunctionWithNotObviousReturnType()\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Other problems", + "index": 53, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DeclaringClassMigration", + "shortDescription": { + "text": "Deprecated 'Enum.declaringClass' property" + }, + "fullDescription": { + "text": "Reports 'declaringClass' property calls on Enum that will lead to compilation error since 1.9. 'Enum.getDeclaringClass' is among \"hidden\" Java functions which aren't normally visible by resolve. However, it's visible via synthetic property that is a front-end bug. More details: KT-49653 Deprecate and remove Enum.declaringClass synthetic property The quick-fix replaces a call with 'declaringJavaClass'. Example: 'fun > foo(values: Array) {\n EnumSet.noneOf(values.first().declaringClass)\n }' After the quick-fix is applied: 'fun > foo(values: Array) {\n EnumSet.noneOf(values.first().declaringJavaClass)\n }' This inspection only reports if the Kotlin language level of the project or module is 1.7 or higher.", + "markdown": "Reports 'declaringClass' property calls on Enum that will lead to compilation error since 1.9.\n\n'Enum.getDeclaringClass' is among \"hidden\" Java functions which aren't normally visible by resolve. However, it's visible via synthetic\nproperty that is a front-end bug.\n\n**More details:** [KT-49653 Deprecate and remove Enum.declaringClass synthetic\nproperty](https://youtrack.jetbrains.com/issue/KT-49653)\n\nThe quick-fix replaces a call with 'declaringJavaClass'.\n\n**Example:**\n\n\n fun > foo(values: Array) {\n EnumSet.noneOf(values.first().declaringClass)\n }\n\nAfter the quick-fix is applied:\n\n\n fun > foo(values: Array) {\n EnumSet.noneOf(values.first().declaringJavaClass)\n }\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.7 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceMapIndexedWithListGenerator", + "shortDescription": { + "text": "Replace 'mapIndexed' with List generator" + }, + "fullDescription": { + "text": "Reports a 'mapIndexed' call that can be replaced by 'List' generator. Example: 'val a = listOf(1, 2, 3).mapIndexed { i, _ ->\n i + 42\n }' After the quick-fix is applied: 'val a = List(listOf(1, 2, 3).size) { i ->\n i + 42\n }'", + "markdown": "Reports a `mapIndexed` call that can be replaced by `List` generator.\n\n**Example:**\n\n\n val a = listOf(1, 2, 3).mapIndexed { i, _ ->\n i + 42\n }\n\nAfter the quick-fix is applied:\n\n\n val a = List(listOf(1, 2, 3).size) { i ->\n i + 42\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ControlFlowWithEmptyBody", + "shortDescription": { + "text": "Control flow with empty body" + }, + "fullDescription": { + "text": "Reports 'if', 'while', 'do' or 'for' statements with empty bodies. While occasionally intended, this construction is confusing and often the result of a typo. A quick-fix removes a statement. Example: 'if (a > b) {}'", + "markdown": "Reports `if`, `while`, `do` or `for` statements with empty bodies.\n\nWhile occasionally intended, this construction is confusing and often the result of a typo.\n\nA quick-fix removes a statement.\n\n**Example:**\n\n\n if (a > b) {}\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExplicitThis", + "shortDescription": { + "text": "Redundant explicit 'this'" + }, + "fullDescription": { + "text": "Reports an explicit 'this' when it can be omitted. Example: 'class C {\n private val i = 1\n fun f() = this.i\n }' The quick-fix removes the redundant 'this': 'class C {\n private val i = 1\n fun f() = i\n }'", + "markdown": "Reports an explicit `this` when it can be omitted.\n\n**Example:**\n\n\n class C {\n private val i = 1\n fun f() = this.i\n }\n\nThe quick-fix removes the redundant `this`:\n\n\n class C {\n private val i = 1\n fun f() = i\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NullChecksToSafeCall", + "shortDescription": { + "text": "Null-checks can be replaced with safe-calls" + }, + "fullDescription": { + "text": "Reports chained null-checks that can be replaced with safe-calls. Example: 'fun test(my: My?) {\n if (my != null && my.foo() != null) {}\n }' After the quick-fix is applied: 'fun test(my: My?) {\n if (my?.foo() != null) {}\n }'", + "markdown": "Reports chained null-checks that can be replaced with safe-calls.\n\n**Example:**\n\n\n fun test(my: My?) {\n if (my != null && my.foo() != null) {}\n }\n\nAfter the quick-fix is applied:\n\n\n fun test(my: My?) {\n if (my?.foo() != null) {}\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LoopToCallChain", + "shortDescription": { + "text": "Loop can be replaced with stdlib operations" + }, + "fullDescription": { + "text": "Reports 'for' loops that can be replaced with a sequence of stdlib operations (like 'map', 'filter', and so on). Example: 'fun foo(list: List): List {\n val result = ArrayList()\n for (s in list) {\n if (s.length > 0)\n result.add(s.hashCode())\n }\n return result\n}' After the quick-fix is applied: 'fun foo(list: List): List {\n val result = list\n .filter { it.length > 0 }\n .map { it.hashCode() }\n return result\n}'", + "markdown": "Reports `for` loops that can be replaced with a sequence of stdlib operations (like `map`, `filter`, and so on).\n\n**Example:**\n\n\n fun foo(list: List): List {\n val result = ArrayList()\n for (s in list) {\n if (s.length > 0)\n result.add(s.hashCode())\n }\n return result\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(list: List): List {\n val result = list\n .filter { it.length > 0 }\n .map { it.hashCode() }\n return result\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveEmptyClassBody", + "shortDescription": { + "text": "Replace empty class body" + }, + "fullDescription": { + "text": "Reports declarations of classes and objects with an empty body. Use the 'Remove redundant empty class body' quick-fix to clean up the code. Examples: 'class EmptyA() {} // <== empty body\n\n class EmptyB {\n companion object {} // <== empty body\n }\n\n fun emptyC() {\n object {} // <== anonymous object, it's ok (not reported)\n }' After the quick fix is applied: 'class EmptyA()\n\n class EmptyB {\n companion object\n }\n\n fun emptyC() {\n object {}\n }'", + "markdown": "Reports declarations of classes and objects with an empty body.\n\nUse the 'Remove redundant empty class body' quick-fix to clean up the code.\n\n**Examples:**\n\n\n class EmptyA() {} // <== empty body\n\n class EmptyB {\n companion object {} // <== empty body\n }\n\n fun emptyC() {\n object {} // <== anonymous object, it's ok (not reported)\n }\n\nAfter the quick fix is applied:\n\n\n class EmptyA()\n\n class EmptyB {\n companion object\n }\n\n fun emptyC() {\n object {}\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CanBeParameter", + "shortDescription": { + "text": "Constructor parameter is never used as a property" + }, + "fullDescription": { + "text": "Reports primary constructor parameters that can have 'val' or 'var' removed. Class properties declared in the constructor increase memory consumption. If the parameter value is only used in the constructor, you can omit them. Note that the referenced object might be garbage-collected earlier. Example: 'class Task(val name: String) {\n init {\n print(\"Task created: $name\")\n }\n }' A quick-fix removes the extra 'val' or 'var' keyword: 'class Task(name: String) {\n init {\n print(\"Task created: $name\")\n }\n }'", + "markdown": "Reports primary constructor parameters that can have `val` or `var` removed.\n\n\nClass properties declared in the constructor increase memory consumption.\nIf the parameter value is only used in the constructor, you can omit them.\n\nNote that the referenced object might be garbage-collected earlier.\n\n**Example:**\n\n\n class Task(val name: String) {\n init {\n print(\"Task created: $name\")\n }\n }\n\nA quick-fix removes the extra `val` or `var` keyword:\n\n\n class Task(name: String) {\n init {\n print(\"Task created: $name\")\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantReturnLabel", + "shortDescription": { + "text": "Redundant 'return' label" + }, + "fullDescription": { + "text": "Reports redundant return labels outside of lambda expressions. Example: 'fun test() {\n return@test\n }' After the quick-fix is applied: 'fun test() {\n return\n }'", + "markdown": "Reports redundant return labels outside of lambda expressions.\n\n**Example:**\n\n\n fun test() {\n return@test\n }\n\nAfter the quick-fix is applied:\n\n\n fun test() {\n return\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedMainParameter", + "shortDescription": { + "text": "Main parameter is not necessary" + }, + "fullDescription": { + "text": "Reports 'main' function with an unused single parameter.", + "markdown": "Reports `main` function with an unused single parameter." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FunctionWithLambdaExpressionBody", + "shortDescription": { + "text": "Function with '= { ... }' and inferred return type" + }, + "fullDescription": { + "text": "Reports functions with '= { ... }' and inferred return type. Example: 'fun sum(a: Int, b: Int) = { a + b } // The return type of this function is '() -> Int'.' The quick fix removes braces: 'fun sum(a: Int, b: Int) = a + b'", + "markdown": "Reports functions with `= { ... }` and inferred return type.\n\n**Example:**\n\n\n fun sum(a: Int, b: Int) = { a + b } // The return type of this function is '() -> Int'.\n\nThe quick fix removes braces:\n\n\n fun sum(a: Int, b: Int) = a + b\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PackageName", + "shortDescription": { + "text": "Package naming convention" + }, + "fullDescription": { + "text": "Reports package names that do not follow the naming conventions. You can specify the required pattern in the inspection options. Recommended naming conventions: names of packages are always lowercase and should not contain underscores. Example: 'org.example.project' Using multi-word names is generally discouraged, but if you do need to use multiple words, you can either just concatenate them together or use camel case Example: 'org.example.myProject'", + "markdown": "Reports package names that do not follow the naming conventions.\n\nYou can specify the required pattern in the inspection options.\n\n[Recommended naming conventions](https://kotlinlang.org/docs/coding-conventions.html#naming-rules): names of packages are always lowercase and should not contain underscores.\n\n**Example:**\n`org.example.project`\n\nUsing multi-word names is generally discouraged, but if you do need to use multiple words, you can either just concatenate them together or use camel case\n\n**Example:**\n`org.example.myProject`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Naming conventions", + "index": 48, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ArrayInDataClass", + "shortDescription": { + "text": "Array property in data class" + }, + "fullDescription": { + "text": "Reports properties with an 'Array' type in a 'data' class without overridden 'equals()' or 'hashCode()'. Array parameters are compared by reference equality, which is likely an unexpected behavior. It is strongly recommended to override 'equals()' and 'hashCode()' in such cases. Example: 'data class Text(val lines: Array)' A quick-fix generates missing 'equals()' and 'hashCode()' implementations: 'data class Text(val lines: Array) {\n override fun equals(other: Any?): Boolean {\n if (this === other) return true\n if (javaClass != other?.javaClass) return false\n\n other as Text\n\n if (!lines.contentEquals(other.lines)) return false\n\n return true\n }\n\n override fun hashCode(): Int {\n return lines.contentHashCode()\n }\n }'", + "markdown": "Reports properties with an `Array` type in a `data` class without overridden `equals()` or `hashCode()`.\n\n\nArray parameters are compared by reference equality, which is likely an unexpected behavior.\nIt is strongly recommended to override `equals()` and `hashCode()` in such cases.\n\n**Example:**\n\n\n data class Text(val lines: Array)\n\nA quick-fix generates missing `equals()` and `hashCode()` implementations:\n\n\n data class Text(val lines: Array) {\n override fun equals(other: Any?): Boolean {\n if (this === other) return true\n if (javaClass != other?.javaClass) return false\n\n other as Text\n\n if (!lines.contentEquals(other.lines)) return false\n\n return true\n }\n\n override fun hashCode(): Int {\n return lines.contentHashCode()\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConvertTwoComparisonsToRangeCheck", + "shortDescription": { + "text": "Two comparisons should be converted to a range check" + }, + "fullDescription": { + "text": "Reports two consecutive comparisons that can be converted to a range check. Checking against a range makes code simpler by removing test subject duplication. Example: 'fun checkMonth(month: Int): Boolean {\n return month >= 1 && month <= 12\n }' A quick-fix replaces the comparison-based check with a range one: 'fun checkMonth(month: Int): Boolean {\n return month in 1..12\n }'", + "markdown": "Reports two consecutive comparisons that can be converted to a range check.\n\nChecking against a range makes code simpler by removing test subject duplication.\n\n**Example:**\n\n\n fun checkMonth(month: Int): Boolean {\n return month >= 1 && month <= 12\n }\n\nA quick-fix replaces the comparison-based check with a range one:\n\n\n fun checkMonth(month: Int): Boolean {\n return month in 1..12\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ProhibitUseSiteTargetAnnotationsOnSuperTypesMigration", + "shortDescription": { + "text": "Meaningless annotations targets on superclass" + }, + "fullDescription": { + "text": "Reports meaningless annotation targets on superclasses since Kotlin 1.4. Annotation targets such as '@get:' are meaningless on superclasses and are prohibited. Example: 'interface Foo\n\n annotation class Ann\n\n class E : @field:Ann @get:Ann @set:Ann @setparam:Ann Foo' After the quick-fix is applied: 'interface Foo\n\n annotation class Ann\n\n class E : Foo' This inspection only reports if the Kotlin language level of the project or module is 1.4 or higher.", + "markdown": "Reports meaningless annotation targets on superclasses since Kotlin 1.4.\n\nAnnotation targets such as `@get:` are meaningless on superclasses and are prohibited.\n\n**Example:**\n\n\n interface Foo\n\n annotation class Ann\n\n class E : @field:Ann @get:Ann @set:Ann @setparam:Ann Foo\n\nAfter the quick-fix is applied:\n\n\n interface Foo\n\n annotation class Ann\n\n class E : Foo\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.4 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceWithEnumMap", + "shortDescription": { + "text": "'HashMap' can be replaced with 'EnumMap'" + }, + "fullDescription": { + "text": "Reports 'hashMapOf' function or 'HashMap' constructor calls that can be replaced with an 'EnumMap' constructor call. Using 'EnumMap' constructor makes your code simpler. The quick-fix replaces the function call with the 'EnumMap' constructor call. Example: 'enum class E {\n A, B\n }\n\n fun getMap(): Map = hashMapOf()' After the quick-fix is applied: 'enum class E {\n A, B\n }\n\n fun getMap(): Map = EnumMap(E::class.java)'", + "markdown": "Reports `hashMapOf` function or `HashMap` constructor calls that can be replaced with an `EnumMap` constructor call.\n\nUsing `EnumMap` constructor makes your code simpler.\n\nThe quick-fix replaces the function call with the `EnumMap` constructor call.\n\n**Example:**\n\n\n enum class E {\n A, B\n }\n\n fun getMap(): Map = hashMapOf()\n\nAfter the quick-fix is applied:\n\n\n enum class E {\n A, B\n }\n\n fun getMap(): Map = EnumMap(E::class.java)\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Other problems", + "index": 53, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LocalVariableName", + "shortDescription": { + "text": "Local variable naming convention" + }, + "fullDescription": { + "text": "Reports local variables that do not follow the naming conventions. You can specify the required pattern in the inspection options. Recommended naming conventions: it has to start with a lowercase letter, use camel case and no underscores. Example: 'fun fibonacciNumber(index: Int): Long = when(index) {\n 0 -> 0\n else -> {\n // does not follow naming conventions: contains underscore symbol (`_`)\n var number_one: Long = 0\n // does not follow naming conventions: starts with an uppercase letter\n var NUMBER_TWO: Long = 1\n // follow naming conventions: starts with a lowercase letter, use camel case and no underscores.\n var numberThree: Long = number_one + NUMBER_TWO\n\n for(currentIndex in 2..index) {\n numberThree = number_one + NUMBER_TWO\n number_one = NUMBER_TWO\n NUMBER_TWO = numberThree\n }\n numberThree\n }\n }'", + "markdown": "Reports local variables that do not follow the naming conventions.\n\nYou can specify the required pattern in the inspection options.\n\n[Recommended naming conventions](https://kotlinlang.org/docs/coding-conventions.html#function-names): it has to start with a lowercase letter, use camel case and no underscores.\n\n**Example:**\n\n\n fun fibonacciNumber(index: Int): Long = when(index) {\n 0 -> 0\n else -> {\n // does not follow naming conventions: contains underscore symbol (`_`)\n var number_one: Long = 0\n // does not follow naming conventions: starts with an uppercase letter\n var NUMBER_TWO: Long = 1\n // follow naming conventions: starts with a lowercase letter, use camel case and no underscores.\n var numberThree: Long = number_one + NUMBER_TWO\n\n for(currentIndex in 2..index) {\n numberThree = number_one + NUMBER_TWO\n number_one = NUMBER_TWO\n NUMBER_TWO = numberThree\n }\n numberThree\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Naming conventions", + "index": 48, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceUntilWithRangeUntil", + "shortDescription": { + "text": "Replace 'until' with '..<' operator" + }, + "fullDescription": { + "text": "Reports 'until' that can be replaced with '..<' operator. Every 'until' to '..<' replacement doesn't change the semantic in any way. The UX research shows that developers make ~20-30% fewer errors when reading code containing '..<' compared to 'until'. Example: 'fun main(args: Array) {\n for (index in 0 until args.size) {\n println(index)\n }\n }' After the quick-fix is applied: 'fun main(args: Array) {\n for (index in 0..) {\n for (index in 0 until args.size) {\n println(index)\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun main(args: Array) {\n for (index in 0.. Int) {\n b(a * a)\n}\n\nfun foo() {\n square(2, { it })\n}' After the quick-fix is applied: 'fun foo() {\n square(2){ it }\n}'", + "markdown": "Reports lambda expressions in parentheses which can be moved outside.\n\n**Example:**\n\n\n fun square(a: Int, b: (Int) -> Int) {\n b(a * a)\n }\n\n fun foo() {\n square(2, { it })\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo() {\n square(2){ it }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantNotNullExtensionReceiverOfInline", + "shortDescription": { + "text": "'inline fun' extension receiver can be explicitly nullable until Kotlin 1.2" + }, + "fullDescription": { + "text": "Reports inline functions with non-nullable extension receivers which don't use the fact that extension receiver is not nullable. Before Kotlin 1.2, calls of 'inline fun' with flexible nullable extension receiver (a platform type with an unknown nullability) did not include nullability checks in bytecode. Since Kotlin 1.2, nullability checks are included into the bytecode (see KT-12899). Thus functions which do not use the fact that extension receiver is not nullable are dangerous in Kotlin until 1.2 and it's recommended to make such functions to have nullable receiver. Example: 'inline fun String.greet() {\n println(\"Hello, $this!\")\n }\n\n fun main() {\n // `System.getProperty` returns not denotable `String!` type\n val user = System.getProperty(\"user.name\")\n user.greet()\n }' After the quick-fix is applied: 'inline fun String.greet() {\n println(\"Hello, $this!\")\n }\n\n fun main() {\n // `System.getProperty` returns not denotable `String!` type\n val user = System.getProperty(\"user.name\")\n user.greet()\n }' This inspection only reports if the Kotlin language level of the project or module is lower than 1.2.", + "markdown": "Reports inline functions with non-nullable extension receivers which don't use the fact that extension receiver is not nullable.\n\n\nBefore Kotlin 1.2, calls of `inline fun` with flexible nullable extension receiver (a platform type with an unknown\nnullability) did not include nullability checks in bytecode. Since Kotlin 1.2, nullability checks are included into the bytecode\n(see [KT-12899](https://youtrack.jetbrains.com/issue/KT-12899)).\n\n\nThus functions which do not use the fact that extension receiver is not nullable are dangerous in Kotlin until 1.2 and it's\nrecommended to make such functions to have nullable receiver.\n\n**Example:**\n\n\n inline fun String.greet() {\n println(\"Hello, $this!\")\n }\n\n fun main() {\n // `System.getProperty` returns not denotable `String!` type\n val user = System.getProperty(\"user.name\")\n user.greet()\n }\n\nAfter the quick-fix is applied:\n\n\n inline fun String.greet() {\n println(\"Hello, $this!\")\n }\n\n fun main() {\n // `System.getProperty` returns not denotable `String!` type\n val user = System.getProperty(\"user.name\")\n user.greet()\n }\n\nThis inspection only reports if the Kotlin language level of the project or module is lower than 1.2." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Java interop issues", + "index": 66, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantElvisReturnNull", + "shortDescription": { + "text": "Redundant '?: return null'" + }, + "fullDescription": { + "text": "Reports redundant '?: return null' Example: 'fun foo(): Int? {\n ...\n }\n\n fun test() : Int? {\n return foo() ?: return null\n }' After the quick-fix is applied: 'fun foo(): Int? {\n ...\n }\n\n fun test() : Int? {\n return foo()\n }'", + "markdown": "Reports redundant `?: return null`\n\n**Example:**\n\n\n fun foo(): Int? {\n ...\n }\n\n fun test() : Int? {\n return foo() ?: return null\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(): Int? {\n ...\n }\n\n fun test() : Int? {\n return foo()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ProhibitTypeParametersForLocalVariablesMigration", + "shortDescription": { + "text": "Local variable with type parameters" + }, + "fullDescription": { + "text": "Reports local variables with type parameters. A type parameter for a local variable doesn't make sense because it can't be specialized. Example: 'fun main() {\n val x = \"\"\n }' After the quick-fix is applied: 'fun main() {\n val x = \"\"\n }' This inspection only reports if the Kotlin language level of the project or module is 1.4 or higher.", + "markdown": "Reports local variables with type parameters.\n\nA type parameter for a local variable doesn't make sense because it can't be specialized.\n\n**Example:**\n\n\n fun main() {\n val x = \"\"\n }\n\nAfter the quick-fix is applied:\n\n\n fun main() {\n val x = \"\"\n }\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.4 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PrivatePropertyName", + "shortDescription": { + "text": "Private property naming convention" + }, + "fullDescription": { + "text": "Reports private property names that do not follow the recommended naming conventions. Consistent naming allows for easier code reading and understanding. According to the Kotlin official style guide, private property names should start with a lowercase letter and use camel case. Optionally, underscore prefix is allowed but only for private properties. It is possible to introduce other naming rules by changing the \"Pattern\" regular expression. Example: 'val _My_Cool_Property = \"\"' A quick-fix renames the class according to the Kotlin naming conventions: 'val _myCoolProperty = \"\"'", + "markdown": "Reports private property names that do not follow the recommended naming conventions.\n\n\nConsistent naming allows for easier code reading and understanding.\nAccording to the [Kotlin official style guide](https://kotlinlang.org/docs/coding-conventions.html#naming-rules),\nprivate property names should start with a lowercase letter and use camel case.\nOptionally, underscore prefix is allowed but only for **private** properties.\n\nIt is possible to introduce other naming rules by changing the \"Pattern\" regular expression.\n\n**Example:**\n\n\n val _My_Cool_Property = \"\"\n\nA quick-fix renames the class according to the Kotlin naming conventions:\n\n\n val _myCoolProperty = \"\"\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Naming conventions", + "index": 48, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObsoleteKotlinJsPackages", + "shortDescription": { + "text": "'kotlin.browser' and 'kotlin.dom' packages are deprecated since 1.4" + }, + "fullDescription": { + "text": "Reports usages of 'kotlin.dom' and 'kotlin.browser' packages. These packages were moved to 'kotlinx.dom' and 'kotlinx.browser' respectively in Kotlin 1.4+.", + "markdown": "Reports usages of `kotlin.dom` and `kotlin.browser` packages.\n\nThese packages were moved to `kotlinx.dom` and `kotlinx.browser`\nrespectively in Kotlin 1.4+." + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinJvmAnnotationInJava", + "shortDescription": { + "text": "Kotlin JVM annotation in Java" + }, + "fullDescription": { + "text": "Reports useless Kotlin JVM annotations in Java code. Example: 'import kotlin.jvm.Volatile;\n\n public class Test {\n @Volatile\n public int i;\n }'", + "markdown": "Reports useless Kotlin JVM annotations in Java code.\n\n**Example:**\n\n\n import kotlin.jvm.Volatile;\n\n public class Test {\n @Volatile\n public int i;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Java interop issues", + "index": 66, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CascadeIf", + "shortDescription": { + "text": "Cascade if can be replaced with when" + }, + "fullDescription": { + "text": "Reports 'if' statements with three or more branches that can be replaced with the 'when' expression. Example: 'fun checkIdentifier(id: String) {\n fun Char.isIdentifierStart() = this in 'A'..'z'\n fun Char.isIdentifierPart() = isIdentifierStart() || this in '0'..'9'\n\n if (id.isEmpty()) {\n print(\"Identifier is empty\")\n } else if (!id.first().isIdentifierStart()) {\n print(\"Identifier should start with a letter\")\n } else if (!id.subSequence(1, id.length).all(Char::isIdentifierPart)) {\n print(\"Identifier should contain only letters and numbers\")\n }\n }' A quick-fix converts the 'if' expression to 'when': 'fun checkIdentifier(id: String) {\n fun Char.isIdentifierStart() = this in 'A'..'z'\n fun Char.isIdentifierPart() = isIdentifierStart() || this in '0'..'9'\n\n when {\n id.isEmpty() -> {\n print(\"Identifier is empty\")\n }\n !id.first().isIdentifierStart() -> {\n print(\"Identifier should start with a letter\")\n }\n !id.subSequence(1, id.length).all(Char::isIdentifierPart) -> {\n print(\"Identifier should contain only letters and numbers\")\n }\n }\n }'", + "markdown": "Reports `if` statements with three or more branches that can be replaced with the `when` expression.\n\n**Example:**\n\n\n fun checkIdentifier(id: String) {\n fun Char.isIdentifierStart() = this in 'A'..'z'\n fun Char.isIdentifierPart() = isIdentifierStart() || this in '0'..'9'\n\n if (id.isEmpty()) {\n print(\"Identifier is empty\")\n } else if (!id.first().isIdentifierStart()) {\n print(\"Identifier should start with a letter\")\n } else if (!id.subSequence(1, id.length).all(Char::isIdentifierPart)) {\n print(\"Identifier should contain only letters and numbers\")\n }\n }\n\nA quick-fix converts the `if` expression to `when`:\n\n\n fun checkIdentifier(id: String) {\n fun Char.isIdentifierStart() = this in 'A'..'z'\n fun Char.isIdentifierPart() = isIdentifierStart() || this in '0'..'9'\n\n when {\n id.isEmpty() -> {\n print(\"Identifier is empty\")\n }\n !id.first().isIdentifierStart() -> {\n print(\"Identifier should start with a letter\")\n }\n !id.subSequence(1, id.length).all(Char::isIdentifierPart) -> {\n print(\"Identifier should contain only letters and numbers\")\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EmptyRange", + "shortDescription": { + "text": "Range with start greater than endInclusive is empty" + }, + "fullDescription": { + "text": "Reports ranges that are empty because the 'start' value is greater than the 'endInclusive' value. Example: 'val range = 2..1' The quick-fix changes the '..' operator to 'downTo': 'val range = 2 downTo 1'", + "markdown": "Reports ranges that are empty because the `start` value is greater than the `endInclusive` value.\n\n**Example:**\n\n\n val range = 2..1\n\nThe quick-fix changes the `..` operator to `downTo`:\n\n\n val range = 2 downTo 1\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TestFunctionName", + "shortDescription": { + "text": "Test function naming convention" + }, + "fullDescription": { + "text": "Reports test function names that do not follow the recommended naming conventions.", + "markdown": "Reports test function names that do not follow the [recommended naming conventions](https://kotlinlang.org/docs/coding-conventions.html#names-for-test-methods)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Naming conventions", + "index": 48, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RecursivePropertyAccessor", + "shortDescription": { + "text": "Recursive property accessor" + }, + "fullDescription": { + "text": "Reports recursive property accessor calls which can end up with a 'StackOverflowError'. Such calls are usually confused with backing field access. Example: 'var counter: Int = 0\n set(value) {\n counter = if (value < 0) 0 else value\n }' After the quick-fix is applied: 'var counter: Int = 0\n set(value) {\n field = if (value < 0) 0 else value\n }'", + "markdown": "Reports recursive property accessor calls which can end up with a `StackOverflowError`.\nSuch calls are usually confused with backing field access.\n\n**Example:**\n\n\n var counter: Int = 0\n set(value) {\n counter = if (value < 0) 0 else value\n }\n\nAfter the quick-fix is applied:\n\n\n var counter: Int = 0\n set(value) {\n field = if (value < 0) 0 else value\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OptionalExpectation", + "shortDescription": { + "text": "Optionally expected annotation has no actual annotation" + }, + "fullDescription": { + "text": "Reports optionally expected annotations without actual annotation in some platform modules. Example: '// common code\n@OptionalExpectation\nexpect annotation class JvmName(val name: String)\n\n@JvmName(name = \"JvmFoo\")\nfun foo() { }\n\n// jvm code\nactual annotation class JvmName(val name: String)' The inspection also reports cases when 'actual annotation class JvmName' is omitted for non-JVM platforms (for example, Native).", + "markdown": "Reports optionally expected annotations without actual annotation in some platform modules.\n\n**Example:**\n\n // common code\n @OptionalExpectation\n expect annotation class JvmName(val name: String)\n\n @JvmName(name = \"JvmFoo\")\n fun foo() { }\n\n // jvm code\n actual annotation class JvmName(val name: String)\n\nThe inspection also reports cases when `actual annotation class JvmName` is omitted for non-JVM platforms (for example, Native)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DestructuringWrongName", + "shortDescription": { + "text": "Variable in destructuring declaration uses name of a wrong data class property" + }, + "fullDescription": { + "text": "Reports entries of destructuring declarations that match the name of a different property of the destructured data class. Example: 'data class Foo(val a: String, val b: Int, val c: String)\n\n fun bar(f: Foo) {\n val (a, c) = f\n }' The quick-fix changes variable's name to match the name of the corresponding class field: 'data class Foo(val a: String, val b: Int, val c: String)\n\n fun bar(f: Foo) {\n val (a, b) = f\n }'", + "markdown": "Reports entries of destructuring declarations that match the name of a different property of the destructured data class.\n\n**Example:**\n\n\n data class Foo(val a: String, val b: Int, val c: String)\n\n fun bar(f: Foo) {\n val (a, c) = f\n }\n\nThe quick-fix changes variable's name to match the name of the corresponding class field:\n\n\n data class Foo(val a: String, val b: Int, val c: String)\n\n fun bar(f: Foo) {\n val (a, b) = f\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IfThenToSafeAccess", + "shortDescription": { + "text": "If-Then foldable to '?.'" + }, + "fullDescription": { + "text": "Reports 'if-then' expressions that can be folded into safe-access ('?.') expressions. Example: 'fun bar(x: String) = \"\"\n\n fun foo(a: String?) {\n if (a != null) bar(a) else null\n }' The quick fix converts the 'if-then' expression into a safe-access ('?.') expression: 'fun bar(x: String) = \"\"\n\n fun foo(a: String?) {\n a?.let { bar(it) }\n }'", + "markdown": "Reports `if-then` expressions that can be folded into safe-access (`?.`) expressions.\n\n**Example:**\n\n\n fun bar(x: String) = \"\"\n\n fun foo(a: String?) {\n if (a != null) bar(a) else null\n }\n\nThe quick fix converts the `if-then` expression into a safe-access (`?.`) expression:\n\n\n fun bar(x: String) = \"\"\n\n fun foo(a: String?) {\n a?.let { bar(it) }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantUnitExpression", + "shortDescription": { + "text": "Redundant 'Unit'" + }, + "fullDescription": { + "text": "Reports redundant 'Unit' expressions. 'Unit' in Kotlin can be used as the return type of functions that do not return anything meaningful. The 'Unit' type has only one possible value, which is the 'Unit' object. Examples: 'fun redundantA(): Unit {\n return Unit // redundant, 'Unit' is returned by default and matches the expected return type\n }\n\n fun requiredA(condition: Boolean): Any {\n if (condition) return \"hello\"\n return Unit // explicit 'Unit' is required since the expected type is 'Any'\n }\n\n fun redundantB(condition: Boolean): Any = if (condition) {\n fun ancillary(): Int = 1\n println(\"${ancillary()}\")\n Unit // redundant since the last expression is already of type 'Unit'\n } else {\n println(\"else\")\n }\n\n fun requiredB(condition: Boolean): Any = if (condition) {\n 1024\n Unit // required, otherwise '1024' (Int) would be the return value\n } else {\n println(\"else\")\n }'", + "markdown": "Reports redundant `Unit` expressions.\n\n\n`Unit` in Kotlin can be used as the return type of functions that do not return anything meaningful.\nThe `Unit` type has only one possible value, which is the `Unit` object.\n\n**Examples:**\n\n\n fun redundantA(): Unit {\n return Unit // redundant, 'Unit' is returned by default and matches the expected return type\n }\n\n fun requiredA(condition: Boolean): Any {\n if (condition) return \"hello\"\n return Unit // explicit 'Unit' is required since the expected type is 'Any'\n }\n\n fun redundantB(condition: Boolean): Any = if (condition) {\n fun ancillary(): Int = 1\n println(\"${ancillary()}\")\n Unit // redundant since the last expression is already of type 'Unit'\n } else {\n println(\"else\")\n }\n\n fun requiredB(condition: Boolean): Any = if (condition) {\n 1024\n Unit // required, otherwise '1024' (Int) would be the return value\n } else {\n println(\"else\")\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RestrictReturnStatementTargetMigration", + "shortDescription": { + "text": "Target label does not denote a function since 1.4" + }, + "fullDescription": { + "text": "Reports labels that don't points to a functions. It's forbidden to declare a target label that does not denote a function. The quick-fix removes the label. Example: 'fun testValLabelInReturn() {\n L@ val fn = { return@L }\n fn()\n }' After the quick-fix is applied: 'fun testValLabelInReturn() {\n L@ val fn = { return }\n fn()\n }' This inspection only reports if the language level of the project or module is 1.4 or higher.", + "markdown": "Reports labels that don't points to a functions.\n\nIt's forbidden to declare a target label that does not denote a function.\n\nThe quick-fix removes the label.\n\n**Example:**\n\n\n fun testValLabelInReturn() {\n L@ val fn = { return@L }\n fn()\n }\n\nAfter the quick-fix is applied:\n\n\n fun testValLabelInReturn() {\n L@ val fn = { return }\n fn()\n }\n\nThis inspection only reports if the language level of the project or module is 1.4 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PlatformExtensionReceiverOfInline", + "shortDescription": { + "text": "'inline fun' with nullable receiver until Kotlin 1.2" + }, + "fullDescription": { + "text": "Reports potentially unsafe calls of inline functions with flexible nullable (platform type with unknown nullability) extension receivers. Before Kotlin 1.2, calls of 'inline fun' with flexible nullable extension receiver (a platform type with an unknown nullability) did not include nullability checks in bytecode. Since Kotlin 1.2, nullability checks are included into the bytecode (see KT-12899). It's recommended to add an explicit '!!' you want an exception to be thrown, or consider changing the function's receiver type to nullable if it should work without exceptions. Example: 'inline fun String.removePrefix(prefix: String): String {\n return this.substring(prefix.length)\n }\n\n fun main() {\n // `System.getProperty` returns not denotable `String!` type\n val property = System.getProperty(\"user.dir\")\n println(property.removePrefix(\"/home\"))\n }' After the quick-fix is applied: 'inline fun String.removePrefix(prefix: String): String {\n return this.substring(prefix.length)\n }\n\n fun main() {\n // `System.getProperty` returns not denotable `String!` type\n val property = System.getProperty(\"user.dir\")\n println(property!!.removePrefix(\"/home\"))\n }' This inspection only reports if the Kotlin language level of the project or module is lower than 1.2.", + "markdown": "Reports potentially unsafe calls of inline functions with flexible nullable (platform type with unknown nullability) extension receivers.\n\n\nBefore Kotlin 1.2, calls of `inline fun` with flexible nullable extension receiver (a platform type with an unknown\nnullability) did not include nullability checks in bytecode. Since Kotlin 1.2, nullability checks are included into the bytecode\n(see [KT-12899](https://youtrack.jetbrains.com/issue/KT-12899)).\n\n\nIt's recommended to add an explicit `!!` you want an exception to be thrown,\nor consider changing the function's receiver type to nullable if it should work without exceptions.\n\n**Example:**\n\n\n inline fun String.removePrefix(prefix: String): String {\n return this.substring(prefix.length)\n }\n\n fun main() {\n // `System.getProperty` returns not denotable `String!` type\n val property = System.getProperty(\"user.dir\")\n println(property.removePrefix(\"/home\"))\n }\n\nAfter the quick-fix is applied:\n\n\n inline fun String.removePrefix(prefix: String): String {\n return this.substring(prefix.length)\n }\n\n fun main() {\n // `System.getProperty` returns not denotable `String!` type\n val property = System.getProperty(\"user.dir\")\n println(property!!.removePrefix(\"/home\"))\n }\n\nThis inspection only reports if the Kotlin language level of the project or module is lower than 1.2." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Java interop issues", + "index": 66, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousEqualsCombination", + "shortDescription": { + "text": "Suspicious combination of == and ===" + }, + "fullDescription": { + "text": "Reports '==' and '===' comparisons that are both used on the same variable within a single expression. Due to similarities '==' and '===' could be mixed without notice, and it takes a close look to check that '==' used instead of '===' Example: 'if (type === FIELD || type == METHOD || type == ANNOTATION_METHOD || // Note that \"==\" is used incorrectly\n type === LAMBDA_EXPRESSION) return'", + "markdown": "Reports `==` and `===` comparisons that are both used on the same variable within a single expression.\n\nDue to similarities `==` and `===` could be mixed without notice, and\nit takes a close look to check that `==` used instead of `===`\n\nExample:\n\n\n if (type === FIELD || type == METHOD || type == ANNOTATION_METHOD || // Note that \"==\" is used incorrectly\n type === LAMBDA_EXPRESSION) return\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MigrateDiagnosticSuppression", + "shortDescription": { + "text": "Diagnostic name should be replaced" + }, + "fullDescription": { + "text": "Reports suppressions with old diagnostic names, for example '@Suppress(\"HEADER_WITHOUT_IMPLEMENTATION\")'. Some of diagnostics from Kotlin 1.2 and earlier are now obsolete, making such suppressions redundant. Example: '@Suppress(\"HEADER_DECLARATION_WITH_BODY\")\nexpect fun connection() {\n // ...\n}' After the quick-fix is applied: '@Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\nexpect fun connection() {\n // ...\n}'", + "markdown": "Reports suppressions with old diagnostic names, for example `@Suppress(\"HEADER_WITHOUT_IMPLEMENTATION\")`.\n\n\nSome of diagnostics from Kotlin 1.2 and earlier are now obsolete, making such suppressions redundant.\n\n**Example:**\n\n\n @Suppress(\"HEADER_DECLARATION_WITH_BODY\")\n expect fun connection() {\n // ...\n }\n\nAfter the quick-fix is applied:\n\n\n @Suppress(\"EXPECTED_DECLARATION_WITH_BODY\")\n expect fun connection() {\n // ...\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Other problems", + "index": 53, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedDataClassCopyResult", + "shortDescription": { + "text": "Unused result of data class copy" + }, + "fullDescription": { + "text": "Reports calls to data class 'copy' function without using its result.", + "markdown": "Reports calls to data class `copy` function without using its result." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DeferredResultUnused", + "shortDescription": { + "text": "'@Deferred' result is unused" + }, + "fullDescription": { + "text": "Reports function calls with the 'Deferred' result type if the return value is not used. If the 'Deferred' return value is not used, the call site would not wait to complete this function. Example: 'fun calcEverythingAsync() = CompletableDeferred(42)\n\n fun usage() {\n calcEverythingAsync()\n }' A quick-fix provides a variable with the 'Deferred' initializer: 'fun calcEverythingAsync() = CompletableDeferred(42)\n\n fun usage() {\n val answer = calcEverythingAsync()\n }'", + "markdown": "Reports function calls with the `Deferred` result type if the return value is not used.\n\nIf the `Deferred` return value is not used, the call site would not wait to complete this function.\n\n**Example:**\n\n\n fun calcEverythingAsync() = CompletableDeferred(42)\n\n fun usage() {\n calcEverythingAsync()\n }\n\nA quick-fix provides a variable with the `Deferred` initializer:\n\n\n fun calcEverythingAsync() = CompletableDeferred(42)\n\n fun usage() {\n val answer = calcEverythingAsync()\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantElseInIf", + "shortDescription": { + "text": "Redundant 'else' in 'if'" + }, + "fullDescription": { + "text": "Reports redundant 'else' in 'if' with 'return' Example: 'fun foo(arg: Boolean): Int {\n if (arg) return 0\n else { // This else is redundant, code in braces could be just shifted left\n someCode()\n }\n }' After the quick-fix is applied: 'fun foo(arg: Boolean): Int {\n if (arg) return 0\n someCode()\n }'", + "markdown": "Reports redundant `else` in `if` with `return`\n\n**Example:**\n\n\n fun foo(arg: Boolean): Int {\n if (arg) return 0\n else { // This else is redundant, code in braces could be just shifted left\n someCode()\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(arg: Boolean): Int {\n if (arg) return 0\n someCode()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SelfReferenceConstructorParameter", + "shortDescription": { + "text": "Constructor can never be complete" + }, + "fullDescription": { + "text": "Reports constructors with a non-null self-reference parameter. Such constructors never instantiate a class. The quick-fix converts the parameter type to nullable. Example: 'class SelfRef(val ref: SelfRef)' After the quick-fix is applied: 'class SelfRef(val ref: SelfRef?)'", + "markdown": "Reports constructors with a non-null self-reference parameter.\n\nSuch constructors never instantiate a class.\n\nThe quick-fix converts the parameter type to nullable.\n\n**Example:**\n\n\n class SelfRef(val ref: SelfRef)\n\nAfter the quick-fix is applied:\n\n\n class SelfRef(val ref: SelfRef?)\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplacePutWithAssignment", + "shortDescription": { + "text": "'map.put()' can be converted to assignment" + }, + "fullDescription": { + "text": "Reports 'map.put' function calls that can be replaced with indexing operator ('[]'). Using syntactic sugar makes your code simpler. The quick-fix replaces 'put' call with the assignment. Example: 'fun foo(map: MutableMap) {\n map.put(42, \"foo\")\n }' After the quick-fix is applied: 'fun foo(map: MutableMap) {\n map[42] = \"foo\"\n }'", + "markdown": "Reports `map.put` function calls that can be replaced with indexing operator (`[]`).\n\nUsing syntactic sugar makes your code simpler.\n\nThe quick-fix replaces `put` call with the assignment.\n\n**Example:**\n\n\n fun foo(map: MutableMap) {\n map.put(42, \"foo\")\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(map: MutableMap) {\n map[42] = \"foo\"\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MainFunctionReturnUnit", + "shortDescription": { + "text": "Main function should return 'Unit'" + }, + "fullDescription": { + "text": "Reports when a main function does not have a return type of 'Unit'. Example: 'fun main() = \"Hello world!\"'", + "markdown": "Reports when a main function does not have a return type of `Unit`.\n\n**Example:**\n`fun main() = \"Hello world!\"`" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousCallableReferenceInLambda", + "shortDescription": { + "text": "Suspicious callable reference used as lambda result" + }, + "fullDescription": { + "text": "Reports lambda expressions with one callable reference. It is a common error to replace a lambda with a callable reference without changing curly braces to parentheses. Example: 'listOf(1,2,3).map { it::toString }' After the quick-fix is applied: 'listOf(1,2,3).map(Int::toString)'", + "markdown": "Reports lambda expressions with one callable reference.\n\nIt is a common error to replace a lambda with a callable reference without changing curly braces to parentheses.\n\n**Example:**\n\n listOf(1,2,3).map { it::toString }\n\nAfter the quick-fix is applied:\n\n listOf(1,2,3).map(Int::toString)\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinDoubleNegation", + "shortDescription": { + "text": "Redundant double negation" + }, + "fullDescription": { + "text": "Reports redundant double negations. Example: 'val truth = !!true'", + "markdown": "Reports redundant double negations.\n\n**Example:**\n\n val truth = !!true\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FunctionName", + "shortDescription": { + "text": "Function naming convention" + }, + "fullDescription": { + "text": "Reports function names that do not follow the recommended naming conventions. Example: 'fun Foo() {}' To fix the problem change the name of the function to match the recommended naming conventions.", + "markdown": "Reports function names that do not follow the recommended naming conventions.\n\n**Example:**\n\n\n fun Foo() {}\n\nTo fix the problem change the name of the function to match the recommended naming conventions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Naming conventions", + "index": 48, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConvertSecondaryConstructorToPrimary", + "shortDescription": { + "text": "Convert to primary constructor" + }, + "fullDescription": { + "text": "Reports a secondary constructor that can be replaced with a more concise primary constructor. Example: 'class User {\n val name: String\n\n constructor(name: String) {\n this.name = name\n }\n }' A quick-fix converts code automatically: 'class User(val name: String) {\n }'", + "markdown": "Reports a secondary constructor that can be replaced with a more concise primary constructor.\n\n**Example:**\n\n\n class User {\n val name: String\n\n constructor(name: String) {\n this.name = name\n }\n }\n\nA quick-fix converts code automatically:\n\n\n class User(val name: String) {\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DifferentKotlinMavenVersion", + "shortDescription": { + "text": "Maven and IDE plugins versions are different" + }, + "fullDescription": { + "text": "Reports that Maven plugin version isn't properly supported in the current IDE plugin. This inconsistency may lead to different error reporting behavior in the IDE and the compiler", + "markdown": "Reports that Maven plugin version isn't properly supported in the current IDE plugin.\n\nThis inconsistency may lead to different error reporting behavior in the IDE and the compiler" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin", + "index": 2, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceGetOrSet", + "shortDescription": { + "text": "Explicit 'get' or 'set' call" + }, + "fullDescription": { + "text": "Reports explicit calls to 'get' or 'set' functions which can be replaced by an indexing operator '[]'. Kotlin allows custom implementations for the predefined set of operators on types. To overload an operator, you can mark the corresponding function with the 'operator' modifier: 'operator fun get(index: Int) {}\n operator fun set(index: Int, value: Int) {}' The functions above correspond to the indexing operator. Example: 'class Test {\n operator fun get(i: Int): Int = 0\n }\n\n fun test() {\n Test().get(0) // replaceable 'get()'\n }' After the quick-fix is applied: 'class Test {\n operator fun get(i: Int): Int = 0\n }\n\n fun test() {\n Test()[0]\n }'", + "markdown": "Reports explicit calls to `get` or `set` functions which can be replaced by an indexing operator `[]`.\n\n\nKotlin allows custom implementations for the predefined set of operators on types.\nTo overload an operator, you can mark the corresponding function with the `operator` modifier:\n\n\n operator fun get(index: Int) {}\n operator fun set(index: Int, value: Int) {}\n \nThe functions above correspond to the indexing operator.\n\n**Example:**\n\n class Test {\n operator fun get(i: Int): Int = 0\n }\n\n fun test() {\n Test().get(0) // replaceable 'get()'\n }\n\nAfter the quick-fix is applied:\n\n class Test {\n operator fun get(i: Int): Int = 0\n }\n\n fun test() {\n Test()[0]\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ProhibitRepeatedUseSiteTargetAnnotationsMigration", + "shortDescription": { + "text": "Repeated annotation which is not marked as '@Repeatable'" + }, + "fullDescription": { + "text": "Reports the repeated use of a non-'@Repeatable' annotation on property accessors. As a result of using non-'@Repeatable' annotation multiple times, both annotation usages will appear in the bytecode leading to an ambiguity in reflection calls. Since Kotlin 1.4 it's mandatory to either mark annotation as '@Repeatable' or not repeat the annotation, otherwise it will lead to compilation error. Example: 'annotation class Foo(val x: Int)\n\n @get:Foo(10)\n val a: String\n @Foo(20) get() = \"foo\" // annotation repeated twice but not marked as @Repeatable' This inspection only reports if the Kotlin language level of the project or module is 1.4 or higher.", + "markdown": "Reports the repeated use of a non-`@Repeatable` annotation on property accessors.\n\n\nAs a result of using non-`@Repeatable` annotation multiple times, both annotation usages\nwill appear in the bytecode leading to an ambiguity in reflection calls.\n\n\nSince Kotlin 1.4 it's mandatory to either mark annotation as `@Repeatable` or not\nrepeat the annotation, otherwise it will lead to compilation error.\n\n**Example:**\n\n\n annotation class Foo(val x: Int)\n\n @get:Foo(10)\n val a: String\n @Foo(20) get() = \"foo\" // annotation repeated twice but not marked as @Repeatable\n\nThis inspection only reports if the Kotlin language level of the project or module is 1.4 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Migration", + "index": 16, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantUnitReturnType", + "shortDescription": { + "text": "Redundant 'Unit' return type" + }, + "fullDescription": { + "text": "Reports a redundant 'Unit' return type which can be omitted.", + "markdown": "Reports a redundant `Unit` return type which can be omitted." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Destructure", + "shortDescription": { + "text": "Use destructuring declaration" + }, + "fullDescription": { + "text": "Reports declarations that can be destructured. Example: 'data class My(val first: String, val second: Int, val third: Boolean)\n\n fun foo(list: List) {\n list.forEach { my ->\n println(my.second)\n println(my.third)\n }\n }' The quick-fix destructures the declaration and introduces new variables with names from the corresponding class: 'data class My(val first: String, val second: Int, val third: Boolean)\n\n fun foo(list: List) {\n list.forEach { (_, second, third) ->\n println(second)\n println(third)\n }\n }'", + "markdown": "Reports declarations that can be destructured.\n\n**Example:**\n\n\n data class My(val first: String, val second: Int, val third: Boolean)\n\n fun foo(list: List) {\n list.forEach { my ->\n println(my.second)\n println(my.third)\n }\n }\n\nThe quick-fix destructures the declaration and introduces new variables with names from the corresponding class:\n\n\n data class My(val first: String, val second: Int, val third: Boolean)\n\n fun foo(list: List) {\n list.forEach { (_, second, third) ->\n println(second)\n println(third)\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedReceiverParameter", + "shortDescription": { + "text": "Unused receiver parameter" + }, + "fullDescription": { + "text": "Reports receiver parameter of extension functions and properties that is not used. Remove redundant receiver parameter can be used to amend the code automatically.", + "markdown": "Reports receiver parameter of extension functions and properties that is not used.\n\n**Remove redundant receiver parameter** can be used to amend the code automatically." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConvertTryFinallyToUseCall", + "shortDescription": { + "text": "Convert try / finally to use() call" + }, + "fullDescription": { + "text": "Reports a 'try-finally' block with 'resource.close()' in 'finally' which can be converted to a 'resource.use()' call. 'use()' is easier to read and less error-prone as there is no need in explicit 'close()' call. Example: 'fun example() {\n val reader = File(\"file.txt\").bufferedReader()\n try {\n reader.lineSequence().forEach(::print)\n } finally {\n reader.close()\n }\n }' After the quick-fix applied: 'fun example() {\n File(\"file.txt\").bufferedReader().use { reader ->\n reader.lineSequence().forEach(::print)\n }\n }'", + "markdown": "Reports a `try-finally` block with `resource.close()` in `finally` which can be converted to a `resource.use()` call.\n\n`use()` is easier to read and less error-prone as there is no need in explicit `close()` call.\n\n**Example:**\n\n\n fun example() {\n val reader = File(\"file.txt\").bufferedReader()\n try {\n reader.lineSequence().forEach(::print)\n } finally {\n reader.close()\n }\n }\n\nAfter the quick-fix applied:\n\n\n fun example() {\n File(\"file.txt\").bufferedReader().use { reader ->\n reader.lineSequence().forEach(::print)\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinRedundantOverride", + "shortDescription": { + "text": "Redundant overriding method" + }, + "fullDescription": { + "text": "Reports redundant overriding declarations. An override can be omitted if it does not modify the inherited signature semantics, for example, by changing visibility. Example: 'open class Foo {\n open fun singleExpression() {\n }\n }\n\n class Bar : Foo() {\n override fun singleExpression() = super.singleExpression()\n }' After the quick-fix is applied: 'class Bar : Foo() {\n }'", + "markdown": "Reports redundant overriding declarations.\n\n\nAn override can be omitted if it does not modify the inherited signature semantics, for example, by changing visibility.\n\n**Example:**\n\n\n open class Foo {\n open fun singleExpression() {\n }\n }\n\n class Bar : Foo() {\n override fun singleExpression() = super.singleExpression()\n }\n\nAfter the quick-fix is applied:\n\n\n class Bar : Foo() {\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceArrayOfWithLiteral", + "shortDescription": { + "text": "'arrayOf' call can be replaced with array literal [...]" + }, + "fullDescription": { + "text": "Reports 'arrayOf' calls that can be replaced with array literals '[...]'. Examples: 'annotation class MyAnnotation(val strings: Array)\n\n @MyAnnotation(arrayOf(\"alpha\", \"beta\", \"omega\")) // replaceable 'arrayOf()'\n class MyClass' After the quick-fix is applied: 'annotation class MyAnnotation(val strings: Array)\n\n @MyAnnotation([\"alpha\", \"beta\", \"omega\"])\n class MyClass'", + "markdown": "Reports `arrayOf` calls that can be replaced with array literals `[...]`.\n\n**Examples:**\n\n annotation class MyAnnotation(val strings: Array)\n\n @MyAnnotation(arrayOf(\"alpha\", \"beta\", \"omega\")) // replaceable 'arrayOf()'\n class MyClass\n\nAfter the quick-fix is applied:\n\n annotation class MyAnnotation(val strings: Array)\n\n @MyAnnotation([\"alpha\", \"beta\", \"omega\"])\n class MyClass\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceRangeToWithUntil", + "shortDescription": { + "text": "'rangeTo' or the '..' call should be replaced with 'until'" + }, + "fullDescription": { + "text": "Reports calls to 'rangeTo' or the '..' operator instead of calls to 'until'. Using corresponding functions makes your code simpler. The quick-fix replaces 'rangeTo' or the '..' call with 'until'. Example: 'fun foo(a: Int) {\n for (i in 0..a - 1) {\n\n }\n }' After the quick-fix is applied: 'fun foo(a: Int) {\n for (i in 0 until a) {\n\n }\n }'", + "markdown": "Reports calls to `rangeTo` or the `..` operator instead of calls to `until`.\n\nUsing corresponding functions makes your code simpler.\n\nThe quick-fix replaces `rangeTo` or the `..` call with `until`.\n\n**Example:**\n\n\n fun foo(a: Int) {\n for (i in 0..a - 1) {\n\n }\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(a: Int) {\n for (i in 0 until a) {\n\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceToWithInfixForm", + "shortDescription": { + "text": "'to' call should be replaced with infix form" + }, + "fullDescription": { + "text": "Reports 'to' function calls that can be replaced with the infix form. Using the infix form makes your code simpler. The quick-fix replaces 'to' with the infix form. Example: 'fun foo(a: Int, b: Int) {\n val pair = a.to(b)\n }' After the quick-fix is applied: 'fun foo(a: Int, b: Int) {\n val pair = a to b\n }'", + "markdown": "Reports `to` function calls that can be replaced with the infix form.\n\nUsing the infix form makes your code simpler.\n\nThe quick-fix replaces `to` with the infix form.\n\n**Example:**\n\n\n fun foo(a: Int, b: Int) {\n val pair = a.to(b)\n }\n\nAfter the quick-fix is applied:\n\n\n fun foo(a: Int, b: Int) {\n val pair = a to b\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedEquals", + "shortDescription": { + "text": "Unused equals expression" + }, + "fullDescription": { + "text": "Reports unused 'equals'('==') expressions.", + "markdown": "Reports unused `equals`(`==`) expressions." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstPropertyName", + "shortDescription": { + "text": "Const property naming convention" + }, + "fullDescription": { + "text": "Reports 'const' property names that do not follow the recommended naming conventions. Consistent naming allows for easier code reading and understanding. According to the Kotlin official style guide, 'const' properties should use uppercase underscore-separated names. Example: 'const val Planck: Double = 6.62607015E-34' A quick-fix renames the property: 'const val PLANCK: Double = 6.62607015E-34'", + "markdown": "Reports `const` property names that do not follow the recommended naming conventions.\n\n\nConsistent naming allows for easier code reading and understanding.\nAccording to the [Kotlin official style guide](https://kotlinlang.org/docs/coding-conventions.html#property-names),\n`const` properties should use uppercase underscore-separated names.\n\n**Example:**\n\n\n const val Planck: Double = 6.62607015E-34\n\nA quick-fix renames the property:\n\n\n const val PLANCK: Double = 6.62607015E-34\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Naming conventions", + "index": 48, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantNullableReturnType", + "shortDescription": { + "text": "Redundant nullable return type" + }, + "fullDescription": { + "text": "Reports functions and variables with nullable return type which never return or become 'null'. Example: 'fun greeting(user: String): String? = \"Hello, $user!\"' After the quick-fix is applied: 'fun greeting(user: String): String = \"Hello, $user!\"'", + "markdown": "Reports functions and variables with nullable return type which never return or become `null`.\n\n**Example:**\n\n\n fun greeting(user: String): String? = \"Hello, $user!\"\n\nAfter the quick-fix is applied:\n\n\n fun greeting(user: String): String = \"Hello, $user!\"\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Redundant constructs", + "index": 5, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnclearPrecedenceOfBinaryExpression", + "shortDescription": { + "text": "Multiple operators with different precedence" + }, + "fullDescription": { + "text": "Reports binary expressions that consist of different operators without parentheses. Such expressions can be less readable due to different precedence rules of operators. Example: fun foo(b: Boolean?, i: Int?) {\n val x = b ?: i == null // evaluated as `(b ?: i) == null`\n val y = i ?: 0 + 1 // evaluated as `i ?: (0 + 1)`\n }", + "markdown": "Reports binary expressions that consist of different operators without parentheses.\n\nSuch expressions can be less readable due to different [precedence rules](https://kotlinlang.org/docs/reference/grammar.html#expressions) of operators.\n\nExample:\n\n```\n fun foo(b: Boolean?, i: Int?) {\n val x = b ?: i == null // evaluated as `(b ?: i) == null`\n val y = i ?: 0 + 1 // evaluated as `i ?: (0 + 1)`\n }\n```" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Style issues", + "index": 3, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UselessCallOnNotNull", + "shortDescription": { + "text": "Useless call on not-null type" + }, + "fullDescription": { + "text": "Reports calls on not-null receiver that make sense only for nullable receiver. Several functions from the standard library such as 'orEmpty()' or 'isNullOrEmpty' have sense only when they are called on receivers of nullable types. Otherwise, they can be omitted or simplified as the result will be the same. Remove redundant call and Change call to … quick-fixes can be used to amend the code automatically. Examples: 'fun test(s: String) {\n val x = s.orEmpty() // quick-fix simplifies to 's'\n val y = s.isNullOrEmpty() // quick-fix simplifies to 's.isEmpty()'\n }'", + "markdown": "Reports calls on not-null receiver that make sense only for nullable receiver.\n\nSeveral functions from the standard library such as `orEmpty()` or `isNullOrEmpty`\nhave sense only when they are called on receivers of nullable types. Otherwise, they can be omitted or simplified as the result will be the same.\n\n**Remove redundant call** and **Change call to ...** quick-fixes can be used to amend the code automatically.\n\nExamples:\n\n\n fun test(s: String) {\n val x = s.orEmpty() // quick-fix simplifies to 's'\n val y = s.isNullOrEmpty() // quick-fix simplifies to 's.isEmpty()'\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedLambdaExpressionBody", + "shortDescription": { + "text": "Unused return value of a function with lambda expression body" + }, + "fullDescription": { + "text": "Reports calls with an unused return value when the called function returns a lambda from an expression body. If there is '=' between function header and body block, code from the function will not be evaluated which can lead to incorrect behavior. Remove = token from function declaration can be used to amend the code automatically. Example: 'fun printHello() = { println(\"Hello\") }\n\n fun main() {\n printHello() // This function doesn't print anything\n }' After the quick-fix is applied: 'fun printHello() { println(\"Hello\") }\n\n fun main() {\n printHello()\n }'", + "markdown": "Reports calls with an unused return value when the called function returns a lambda from an expression body.\n\n\nIf there is `=` between function header and body block,\ncode from the function will not be evaluated which can lead to incorrect behavior.\n\n**Remove = token from function declaration** can be used to amend the code automatically.\n\nExample:\n\n\n fun printHello() = { println(\"Hello\") }\n\n fun main() {\n printHello() // This function doesn't print anything\n }\n\nAfter the quick-fix is applied:\n\n\n fun printHello() { println(\"Hello\") }\n\n fun main() {\n printHello()\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EqualsOrHashCode", + "shortDescription": { + "text": "'equals()' and 'hashCode()' not paired" + }, + "fullDescription": { + "text": "Reports classes that override 'equals()' but do not override 'hashCode()', or vice versa. It also reports object declarations that override either 'equals()' or 'hashCode()'. This can lead to undesired behavior when a class is added to a 'Collection' Example: 'class C1 {\n override fun equals(other: Any?) = true\n }\n\n class C2 {\n override fun hashCode() = 0\n }\n\n object O1 {\n override fun equals(other: Any?) = true\n }\n\n object O2 {\n override fun hashCode() = 0\n }' The quick-fix overrides 'equals()' or 'hashCode()' for classes and deletes these methods for objects: 'class C1 {\n override fun equals(other: Any?) = true\n override fun hashCode(): Int {\n return javaClass.hashCode()\n }\n }\n\n class C2 {\n override fun hashCode() = 0\n override fun equals(other: Any?): Boolean {\n if (this === other) return true\n if (javaClass != other?.javaClass) return false\n return true\n }\n }\n\n object O1 {\n }\n\n object O2 {\n }'", + "markdown": "Reports classes that override `equals()` but do not override `hashCode()`, or vice versa. It also reports object declarations that override either `equals()` or `hashCode()`.\n\nThis can lead to undesired behavior when a class is added to a `Collection`\n\n**Example:**\n\n\n class C1 {\n override fun equals(other: Any?) = true\n }\n\n class C2 {\n override fun hashCode() = 0\n }\n\n object O1 {\n override fun equals(other: Any?) = true\n }\n\n object O2 {\n override fun hashCode() = 0\n }\n\nThe quick-fix overrides `equals()` or `hashCode()` for classes and deletes these methods for objects:\n\n\n class C1 {\n override fun equals(other: Any?) = true\n override fun hashCode(): Int {\n return javaClass.hashCode()\n }\n }\n\n class C2 {\n override fun hashCode() = 0\n override fun equals(other: Any?): Boolean {\n if (this === other) return true\n if (javaClass != other?.javaClass) return false\n return true\n }\n }\n\n object O1 {\n }\n\n object O2 {\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Kotlin/Probable bugs", + "index": 24, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.java", + "version": "223.8787", + "rules": [ + { + "id": "OverrideOnly", + "shortDescription": { + "text": "Method can only be overridden" + }, + "fullDescription": { + "text": "Reports calls to API methods marked with '@ApiStatus.OverrideOnly'. The '@ApiStatus.OverrideOnly' annotation indicates that the method is part of SPI (Service Provider Interface). Clients of the declaring library should implement or override such methods, not call them directly. Marking a class or interface with this annotation is the same as marking every method with it.", + "markdown": "Reports calls to API methods marked with `@ApiStatus.OverrideOnly`.\n\n\nThe `@ApiStatus.OverrideOnly` annotation indicates that the method is part of SPI (Service Provider Interface).\nClients of the declaring library should implement or override such methods, not call them directly.\nMarking a class or interface with this annotation is the same as marking every method with it." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 4, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RuntimeExec", + "shortDescription": { + "text": "Call to 'Runtime.exec()'" + }, + "fullDescription": { + "text": "Reports calls to 'Runtime.exec()' or any of its variants. Calls to 'Runtime.exec()' are inherently unportable.", + "markdown": "Reports calls to `Runtime.exec()` or any of its variants. Calls to `Runtime.exec()` are inherently unportable." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Portability", + "index": 7, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StaticInitializerReferencesSubClass", + "shortDescription": { + "text": "Static initializer references subclass" + }, + "fullDescription": { + "text": "Reports classes that refer to their subclasses in static initializers or static fields. Such references can cause JVM-level deadlocks in multithreaded environment, when one thread tries to load the superclass and another thread tries to load the subclass at the same time. Example: 'class Parent {\n static final Child field = new Child();\n }\n class Child extends Parent { }'", + "markdown": "Reports classes that refer to their subclasses in static initializers or static fields.\n\nSuch references can cause JVM-level deadlocks in multithreaded environment, when one thread tries to load the superclass\nand another thread tries to load the subclass at the same time.\n\n**Example:**\n\n\n class Parent {\n static final Child field = new Child();\n }\n class Child extends Parent { }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MissingDeprecatedAnnotationOnScheduledForRemovalApi", + "shortDescription": { + "text": "Missing '@Deprecated' annotation on scheduled for removal API" + }, + "fullDescription": { + "text": "Reports declarations marked with '@ApiStatus.ScheduledForRemoval' without '@Deprecated'. Example: @ApiStatus.ScheduledForRemoval(inVersion = \"2017.3\")\n public void myLegacyMethod() { }\n After the quick-fix is applied the result looks like: @Deprecated\n @ApiStatus.ScheduledForRemoval(inVersion = \"2017.3\")\n public void myLegacyMethod() { }", + "markdown": "Reports declarations marked with `@ApiStatus.ScheduledForRemoval` without `@Deprecated`.\n\nExample:\n\n```\n @ApiStatus.ScheduledForRemoval(inVersion = \"2017.3\")\n public void myLegacyMethod() { }\n```\n\nAfter the quick-fix is applied the result looks like:\n\n```\n @Deprecated\n @ApiStatus.ScheduledForRemoval(inVersion = \"2017.3\")\n public void myLegacyMethod() { }\n```" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 4, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CallToSuspiciousStringMethod", + "shortDescription": { + "text": "Call to suspicious 'String' method" + }, + "fullDescription": { + "text": "Reports calls of: 'equals()' 'equalsIgnoreCase()' 'compareTo()' 'compareToIgnoreCase()' and 'trim()' on 'String' objects. Comparison of internationalized strings should probably use a 'java.text.Collator' instead. 'String.trim()' only removes control characters between 0x00 and 0x20. The 'String.strip()' method introduced in Java 11 is more Unicode aware and can be used as a replacement.", + "markdown": "Reports calls of:\n\n* `equals()`\n* `equalsIgnoreCase()`\n* `compareTo()`\n* `compareToIgnoreCase()` and\n* `trim()`\n\n\non `String` objects.\nComparison of internationalized strings should probably use a `java.text.Collator` instead.\n`String.trim()` only removes control characters between 0x00 and 0x20.\nThe `String.strip()` method introduced in Java 11 is more Unicode aware and can be used as a replacement." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 9, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KeySetIterationMayUseEntrySet", + "shortDescription": { + "text": "Iteration over 'keySet()' can be optimized" + }, + "fullDescription": { + "text": "Reports iterations over the 'keySet()' of a 'java.util.Map' instance, where the iterated keys are used to retrieve the values from the map. Such iteration may be more efficient when replaced with an iteration over the 'entrySet()' or 'values()' (if the key is not actually used). Similarly, 'keySet().forEach(key -> ...)' can be replaced with 'forEach((key, value) -> ...)' if values are retrieved inside a lambda. Example: 'for (Object key : map.keySet()) {\n Object val = map.get(key);\n }' After the quick-fix is applied: 'for (Object val : map.values()) {}'", + "markdown": "Reports iterations over the `keySet()` of a `java.util.Map` instance, where the iterated keys are used to retrieve the values from the map.\n\n\nSuch iteration may be more efficient when replaced with an iteration over the\n`entrySet()` or `values()` (if the key is not actually used).\n\n\nSimilarly, `keySet().forEach(key -> ...)`\ncan be replaced with `forEach((key, value) -> ...)` if values are retrieved\ninside a lambda.\n\n**Example:**\n\n\n for (Object key : map.keySet()) {\n Object val = map.get(key);\n }\n\nAfter the quick-fix is applied:\n\n\n for (Object val : map.values()) {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstantDeclaredInAbstractClass", + "shortDescription": { + "text": "Constant declared in 'abstract' class" + }, + "fullDescription": { + "text": "Reports constants ('public static final' fields) declared in abstract classes. Some coding standards require declaring constants in interfaces instead.", + "markdown": "Reports constants (`public static final` fields) declared in abstract classes.\n\nSome coding standards require declaring constants in interfaces instead." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryQualifierForThis", + "shortDescription": { + "text": "Unnecessary qualifier for 'this' or 'super'" + }, + "fullDescription": { + "text": "Reports unnecessary qualification of 'this' or 'super'. Using a qualifier on 'this' or 'super' to disambiguate a code reference may easily become unnecessary via automatic refactorings and should be deleted for clarity. Example: 'class Foo {\n void foo() {}\n }\n\n class Bar extends Foo {\n void bar() {\n Bar.super.foo();\n }\n }' After the quick-fix is applied: 'class Foo {\n void foo() {}\n }\n\n class Bar extends Foo {\n void bar() {\n super.foo();\n }\n }'", + "markdown": "Reports unnecessary qualification of `this` or `super`.\n\n\nUsing a qualifier on `this` or `super` to\ndisambiguate a code reference may easily become unnecessary via automatic refactorings and should be deleted for clarity.\n\n**Example:**\n\n\n class Foo {\n void foo() {}\n }\n\n class Bar extends Foo {\n void bar() {\n Bar.super.foo();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n void foo() {}\n }\n\n class Bar extends Foo {\n void bar() {\n super.foo();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SubtractionInCompareTo", + "shortDescription": { + "text": "Subtraction in 'compareTo()'" + }, + "fullDescription": { + "text": "Reports subtraction in 'compareTo()' methods and methods implementing 'java.util.Comparator.compare()'. While it is a common idiom to use the results of integer subtraction as the result of a 'compareTo()' method, this construct may cause subtle and difficult bugs in cases of integer overflow. Comparing the integer values directly and returning '-1', '0', or '1' is a better practice in most cases. Subtraction on floating point values that is immediately cast to integral type is also reported because precision loss is possible due to rounding. The inspection doesn't report when it's statically determined that value ranges are limited, and overflow never occurs. Additionally, subtraction on 'int' numbers greater than or equal to '0' will never overflow. Therefore, this inspection tries not to warn in those cases. Methods that always return zero or greater can be marked with the 'javax.annotation.Nonnegative' annotation or specified in this inspection's options. Example: 'class DoubleHolder implements Comparable {\n double d;\n public int compareTo(DoubleHolder that) {\n return (int)(this.d - that.d);\n }\n }' A no-warning example because 'String.length()' is known to be non-negative: 'class A implements Comparable {\n final String s = \"\";\n public int compareTo(A a) {\n return s.length() - a.s.length();\n }\n }' Use the options to list methods that are safe to use inside a subtraction. Methods are safe when they return an 'int' value that is always greater than or equal to '0'.", + "markdown": "Reports subtraction in `compareTo()` methods and methods implementing `java.util.Comparator.compare()`.\n\n\nWhile it is a common idiom to\nuse the results of integer subtraction as the result of a `compareTo()`\nmethod, this construct may cause subtle and difficult bugs in cases of integer overflow.\nComparing the integer values directly and returning `-1`, `0`, or `1` is a better practice in most cases.\n\n\nSubtraction on floating point values that is immediately cast to integral type is also reported because precision loss is possible due to\nrounding.\n\n\nThe inspection doesn't report when it's statically determined that value ranges are limited, and overflow never occurs.\nAdditionally, subtraction on `int` numbers greater than or equal to `0` will never overflow.\nTherefore, this inspection tries not to warn in those cases.\n\n\nMethods that always return zero or greater can be marked with the\n`javax.annotation.Nonnegative` annotation or specified in this inspection's options.\n\n**Example:**\n\n\n class DoubleHolder implements Comparable {\n double d;\n public int compareTo(DoubleHolder that) {\n return (int)(this.d - that.d);\n }\n }\n\nA no-warning example because `String.length()` is known to be non-negative:\n\n\n class A implements Comparable {\n final String s = \"\";\n public int compareTo(A a) {\n return s.length() - a.s.length();\n }\n }\n\n\nUse the options to list methods that are safe to use inside a subtraction.\nMethods are safe when they return an `int` value that is always greater than or equal to `0`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UncheckedExceptionClass", + "shortDescription": { + "text": "Unchecked 'Exception' class" + }, + "fullDescription": { + "text": "Reports subclasses of 'java.lang.RuntimeException'. Some coding standards require that all user-defined exception classes are checked. Example: 'class EnigmaException extends RuntimeException {} // warning: Unchecked exception class 'EnigmaException''", + "markdown": "Reports subclasses of `java.lang.RuntimeException`.\n\nSome coding standards require that all user-defined exception classes are checked.\n\n**Example:**\n\n\n class EnigmaException extends RuntimeException {} // warning: Unchecked exception class 'EnigmaException'\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedReturnValue", + "shortDescription": { + "text": "Method can be made 'void'" + }, + "fullDescription": { + "text": "Reports methods whose return values are never used when called. The return type of such methods can be made 'void'. Methods annotated with Error Prone's or AssertJ's '@CanIgnoreReturnValue' annotation will not be reported. The quick-fix updates the method signature and removes 'return' statements from inside the method. Example: '// reported if visibility setting is Protected or Public\n protected String myToUpperCase(String s) {\n return s.toUpperCase();\n }\n\n // simple setter, reporting depends on setting\n public String setStr(String str) {\n myStr = str;\n return myStr;\n }\n\n void test() {\n setStr(\"value\"); // return value is unused\n myToUpperCase(\"result\"); // return value is unused\n }' After the quick-fix is applied to both methods: 'protected void myToUpperCase(String s) {\n // 'return' removed completely\n // as 's.toUpperCase()' has no side effect\n }\n\n public void setStr(String str) {\n myStr = str;\n // 'return' removed\n }\n ...' NOTE: Some methods might not be reported during in-editor highlighting due to performance reasons. To see all results, run the inspection using Code | Inspect Code or Code | Analyze Code | Run Inspection by Name> Use the Ignore simple setters option to ignore unused return values from simple setter calls. Use the Maximal reported method visibility option to control the maximum visibility of methods to be reported.", + "markdown": "Reports methods whose return values are never used when called. The return type of such methods can be made `void`.\n\nMethods annotated with Error Prone's or AssertJ's `@CanIgnoreReturnValue` annotation will not be reported.\nThe quick-fix updates the method signature and removes `return` statements from inside the method.\n\n**Example:**\n\n\n // reported if visibility setting is Protected or Public\n protected String myToUpperCase(String s) {\n return s.toUpperCase();\n }\n\n // simple setter, reporting depends on setting\n public String setStr(String str) {\n myStr = str;\n return myStr;\n }\n\n void test() {\n setStr(\"value\"); // return value is unused\n myToUpperCase(\"result\"); // return value is unused\n }\n\nAfter the quick-fix is applied to both methods:\n\n\n protected void myToUpperCase(String s) {\n // 'return' removed completely\n // as 's.toUpperCase()' has no side effect\n }\n\n public void setStr(String str) {\n myStr = str;\n // 'return' removed\n }\n ...\n\n\n**NOTE:** Some methods might not be reported during in-editor highlighting due to performance reasons.\nTo see all results, run the inspection using **Code \\| Inspect Code** or **Code \\| Analyze Code \\| Run Inspection by Name**\\>\n\nUse the **Ignore simple setters** option to ignore unused return values from simple setter calls.\n\nUse the **Maximal reported method visibility** option to control the maximum visibility of methods to be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 15, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SizeReplaceableByIsEmpty", + "shortDescription": { + "text": "'size() == 0' can be replaced with 'isEmpty()'" + }, + "fullDescription": { + "text": "Reports '.size()' or '.length()' comparisons with a '0' literal that can be replaced with a call to '.isEmpty()'. Example: 'boolean emptyList = list.size() == 0;' After the quick-fix is applied: 'boolean emptyList = list.isEmpty();' Use the Ignored classes table to add classes for which any '.size()' or '.length()' comparisons should not be replaced. Use the Ignore expressions which would be replaced with '!isEmpty()' option to ignore any expressions which would be replaced with '!isEmpty()'.", + "markdown": "Reports `.size()` or `.length()` comparisons with a `0` literal that can be replaced with a call to `.isEmpty()`.\n\n**Example:**\n\n\n boolean emptyList = list.size() == 0;\n\nAfter the quick-fix is applied:\n\n\n boolean emptyList = list.isEmpty();\n \n\nUse the **Ignored classes** table to add classes for which any `.size()` or `.length()` comparisons should not be replaced.\n\nUse the **Ignore expressions which would be replaced with `!isEmpty()`** option to ignore any expressions which would be replaced with `!isEmpty()`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NumberEquality", + "shortDescription": { + "text": "Number comparison using '==', instead of 'equals()'" + }, + "fullDescription": { + "text": "Reports code that uses == or != instead of 'equals()' to test for 'Number' equality. With auto-boxing, it is easy to make the mistake of comparing two instances of a wrapper type instead of two primitives, for example 'Integer' instead of 'int'. Example: 'void foo(Integer a, Integer b) {\n final boolean bool = a == b;\n }' If 'a' is known to be non-null, then it's safe to apply the \"unsafe\" quick-fix and get the result similar to the following: 'void foo(Integer a, Integer b) {\n final boolean bool = a.equals(b);\n }'", + "markdown": "Reports code that uses **==** or **!=** instead of `equals()` to test for `Number` equality.\n\n\nWith auto-boxing, it is easy\nto make the mistake of comparing two instances of a wrapper type instead of two primitives, for example `Integer` instead of\n`int`.\n\n**Example:**\n\n void foo(Integer a, Integer b) {\n final boolean bool = a == b;\n }\n\nIf `a` is known to be non-null, then it's safe to apply the \"unsafe\" quick-fix and get the result similar to the following:\n\n void foo(Integer a, Integer b) {\n final boolean bool = a.equals(b);\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ComparatorNotSerializable", + "shortDescription": { + "text": "'Comparator' class not declared 'Serializable'" + }, + "fullDescription": { + "text": "Reports classes that implement 'java.lang.Comparator', but do not implement 'java.io.Serializable'. If a non-serializable comparator is used to construct an ordered collection such as a 'java.util.TreeMap' or 'java.util.TreeSet', then the collection will also be non-serializable. This can result in unexpected and difficult-to-diagnose bugs. Since subclasses of 'java.lang.Comparator' are often stateless, simply marking them serializable is a small cost to avoid such issues. Example: 'class Foo implements Comparator { // warning\n @Override\n public int compare(Object o1, Object o2) {\n /* ... */\n }\n }' After the quick-fix is applied: 'class Foo implements Comparator, Serializable { // no warning here\n @Override\n public int compare(Object o1, Object o2) {\n /* ... */\n }\n }'", + "markdown": "Reports classes that implement `java.lang.Comparator`, but do not implement `java.io.Serializable`.\n\n\nIf a non-serializable comparator is used to construct an ordered collection such\nas a `java.util.TreeMap` or `java.util.TreeSet`, then the\ncollection will also be non-serializable. This can result in unexpected and\ndifficult-to-diagnose bugs.\n\n\nSince subclasses of `java.lang.Comparator` are often stateless,\nsimply marking them serializable is a small cost to avoid such issues.\n\n**Example:**\n\n\n class Foo implements Comparator { // warning\n @Override\n public int compare(Object o1, Object o2) {\n /* ... */\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo implements Comparator, Serializable { // no warning here\n @Override\n public int compare(Object o1, Object o2) {\n /* ... */\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 18, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassWithOnlyPrivateConstructors", + "shortDescription": { + "text": "Class with only 'private' constructors should be declared 'final'" + }, + "fullDescription": { + "text": "Reports classes with only 'private' constructors. A class that only has 'private' constructors cannot be extended outside a file and should be declared as 'final'.", + "markdown": "Reports classes with only `private` constructors.\n\nA class that only has `private` constructors cannot be extended outside a file and should be declared as `final`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConnectionResource", + "shortDescription": { + "text": "Connection opened but not safely closed" + }, + "fullDescription": { + "text": "Reports Java ME 'javax.microedition.io.Connection' resources that are not opened in front of a 'try' block and closed in the corresponding 'finally' block. Such resources may be inadvertently leaked if an exception is thrown before the resource is closed. Example: 'void example() throws IOException {\n Connection c = Connector.open(\"foo\");\n }'", + "markdown": "Reports Java ME `javax.microedition.io.Connection` resources that are not opened in front of a `try` block and closed in the corresponding `finally` block. Such resources may be inadvertently leaked if an exception is thrown before the resource is closed.\n\n**Example:**\n\n\n void example() throws IOException {\n Connection c = Connector.open(\"foo\");\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance/Embedded", + "index": 21, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UNUSED_IMPORT", + "shortDescription": { + "text": "Unused import" + }, + "fullDescription": { + "text": "Reports redundant 'import' statements. Regular 'import' statements are unnecessary when not using imported classes and packages in the source file. The same applies to imported 'static' fields and methods that aren't used in the source file. Example: 'import java.util.ArrayList;\n public class Example {\n public static void main(String[] args) {\n System.out.println(\"Hello World!\");\n }\n }' After the quick fix is applied: 'public class Example {\n public static void main(String[] args) {\n System.out.println(\"Hello World!\");\n }\n }'", + "markdown": "Reports redundant `import` statements.\n\nRegular `import` statements are unnecessary when not using imported classes and packages in the source file.\nThe same applies to imported `static` fields and methods that aren't used in the source file.\n\n**Example:**\n\n\n import java.util.ArrayList;\n public class Example {\n public static void main(String[] args) {\n System.out.println(\"Hello World!\");\n }\n }\n\nAfter the quick fix is applied:\n\n\n public class Example {\n public static void main(String[] args) {\n System.out.println(\"Hello World!\");\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Imports", + "index": 22, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BooleanVariableAlwaysNegated", + "shortDescription": { + "text": "Boolean variable is always inverted" + }, + "fullDescription": { + "text": "Reports boolean variables or fields which are always negated when their value is used. Example: 'void m() {\n boolean b = true; //boolean variable 'b' is always inverted\n System.out.println(!b);\n }'", + "markdown": "Reports boolean variables or fields which are always negated when their value is used.\n\nExample:\n\n\n void m() {\n boolean b = true; //boolean variable 'b' is always inverted\n System.out.println(!b);\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Data flow", + "index": 23, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FieldAccessedSynchronizedAndUnsynchronized", + "shortDescription": { + "text": "Field accessed in both 'synchronized' and unsynchronized contexts" + }, + "fullDescription": { + "text": "Reports non-final fields that are accessed in both 'synchronized' and non-'synchronized' contexts. 'volatile' fields as well as accesses in constructors and initializers are ignored by this inspection. Such \"partially synchronized\" access is often the result of a coding oversight and may lead to unexpectedly inconsistent data structures. Example: 'public class Program {\n Console console; // warning: Field 'console' is accessed in both synchronized and unsynchronized contexts\n\n public synchronized void execute() {\n console.print(\"running\");\n }\n\n public void check() {\n console.check();\n }\n }'\n Use the option to specify if simple getters and setters are counted as accesses too.", + "markdown": "Reports non-final fields that are accessed in both `synchronized` and non-`synchronized` contexts. `volatile` fields as well as accesses in constructors and initializers are ignored by this inspection.\n\n\nSuch \"partially synchronized\" access is often the result of a coding oversight\nand may lead to unexpectedly inconsistent data structures.\n\n**Example:**\n\n\n public class Program {\n Console console; // warning: Field 'console' is accessed in both synchronized and unsynchronized contexts\n\n public synchronized void execute() {\n console.print(\"running\");\n }\n\n public void check() {\n console.check();\n }\n }\n\n\nUse the option to specify if simple getters and setters are counted as accesses too." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExtendsAnnotation", + "shortDescription": { + "text": "Class extends annotation interface" + }, + "fullDescription": { + "text": "Reports classes declared as an implementation or extension of an annotation interface. While it is legal to extend an annotation interface, it is often done by accident, and the result can't be used as an annotation.", + "markdown": "Reports classes declared as an implementation or extension of an annotation interface.\n\nWhile it is legal to extend an annotation interface, it is often done by accident,\nand the result can't be used as an annotation." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 25, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NegatedEqualityExpression", + "shortDescription": { + "text": "Negated equality expression" + }, + "fullDescription": { + "text": "Reports equality expressions which are negated by a prefix expression. Such expressions can be simplified using the '!=' operator. Example: '!(i == 1)' After the quick-fix is applied: 'i != 1'", + "markdown": "Reports equality expressions which are negated by a prefix expression.\n\nSuch expressions can be simplified using the `!=` operator.\n\nExample:\n\n\n !(i == 1)\n\nAfter the quick-fix is applied:\n\n\n i != 1\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RemoveLiteralUnderscores", + "shortDescription": { + "text": "Underscores in numeric literal" + }, + "fullDescription": { + "text": "Reports numeric literals with underscores and suggests removing them with a quick-fix. This may be useful if you need to lower the language level. The quick-fix removes underscores from numeric literals. For example '1_000_000' will be converted to '1000000'. Numeric literals with underscores appeared in Java 7. This inspection can help to downgrade for backward compatibility with earlier Java versions. New in 2020.2", + "markdown": "Reports numeric literals with underscores and suggests removing them with a quick-fix. This may be useful if you need to lower the language level.\n\nThe quick-fix removes underscores from numeric literals. For example `1_000_000` will be converted to `1000000`.\n\n\n*Numeric literals with underscores* appeared in Java 7.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions.\n\nNew in 2020.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MathRandomCastToInt", + "shortDescription": { + "text": "'Math.random()' cast to 'int'" + }, + "fullDescription": { + "text": "Reports calls to 'Math.random()' which are immediately cast to 'int'. Casting a 'double' between '0.0' (inclusive) and '1.0' (exclusive) to 'int' will always round down to zero. The value should first be multiplied by some factor before casting it to an 'int' to get a value between zero (inclusive) and the multiplication factor (exclusive). Another possible solution is to use the 'nextInt()' method of 'java.util.Random'. Example: 'int r = (int)Math.random() * 10;' After the quick fix is applied: 'int r = (int)(Math.random() * 10);'", + "markdown": "Reports calls to `Math.random()` which are immediately cast to `int`.\n\nCasting a `double` between `0.0` (inclusive) and\n`1.0` (exclusive) to `int` will always round down to zero. The value\nshould first be multiplied by some factor before casting it to an `int` to\nget a value between zero (inclusive) and the multiplication factor (exclusive).\nAnother possible solution is to use the `nextInt()` method of\n`java.util.Random`.\n\n**Example:**\n\n int r = (int)Math.random() * 10;\n\nAfter the quick fix is applied:\n\n int r = (int)(Math.random() * 10);\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DoubleBraceInitialization", + "shortDescription": { + "text": "Double brace initialization" + }, + "fullDescription": { + "text": "Reports Double Brace Initialization. Double brace initialization may cause memory leaks when used in a non-static context because it creates an anonymous class that will reference the surrounding object. Compared to regular initialization, double brace initialization provides worse performance since it requires loading an additional class. It may also cause failure of 'equals()' comparisons if the 'equals()' method doesn't accept subclasses as parameters. In addition, before Java 9, double brace initialization couldn't be combined with the diamond operator since it was incompatible with anonymous classes. Example: 'List list = new ArrayList<>() {{\n add(1);\n add(2);\n }};' After the quick-fix is applied: 'List list = new ArrayList<>();\n list.add(1);\n list.add(2);'", + "markdown": "Reports [Double Brace Initialization](https://www.c2.com/cgi/wiki?DoubleBraceInitialization).\n\nDouble brace initialization may cause memory leaks when used in a non-static context because it creates an anonymous class\nthat will reference the surrounding object.\n\nCompared to regular initialization, double brace initialization provides worse performance since it requires loading an\nadditional class.\n\nIt may also cause failure of `equals()` comparisons if the `equals()` method doesn't accept subclasses as\nparameters.\n\nIn addition, before Java 9, double brace initialization couldn't be combined with the diamond operator since it was incompatible\nwith anonymous classes.\n\n**Example:**\n\n\n List list = new ArrayList<>() {{\n add(1);\n add(2);\n }};\n\nAfter the quick-fix is applied:\n\n\n List list = new ArrayList<>();\n list.add(1);\n list.add(2);\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Initialization", + "index": 28, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringConcatenationInLoops", + "shortDescription": { + "text": "String concatenation in loop" + }, + "fullDescription": { + "text": "Reports String concatenation in loops. As every String concatenation copies the whole string, usually it is preferable to replace it with explicit calls to 'StringBuilder.append()' or 'StringBuffer.append()'. Example: 'String str = \"\";\n for(int i=0; i<10; i++) {\n str += i;\n }' After the quick-fix is applied: 'String str = \"\";\n StringBuilder strBuilder = new StringBuilder(str);\n for(int i = 0; i<10; i++) {\n strBuilder.append(i);\n }\n str = strBuilder.toString();' Sometimes, the quick-fixes allow you to convert a 'String' variable to a 'StringBuilder' or introduce a new 'StringBuilder'. Be careful if the original code specially handles the 'null' value, as the replacement may change semantics. If 'null' is possible, null-safe fixes that generate necessary null-checks are suggested. Also, it's not guaranteed that the automatic replacement will always be more performant.", + "markdown": "Reports String concatenation in loops.\n\n\nAs every String concatenation copies the whole\nstring, usually it is preferable to replace it with explicit calls to `StringBuilder.append()` or\n`StringBuffer.append()`.\n\n**Example:**\n\n\n String str = \"\";\n for(int i=0; i<10; i++) {\n str += i;\n }\n\nAfter the quick-fix is applied:\n\n\n String str = \"\";\n StringBuilder strBuilder = new StringBuilder(str);\n for(int i = 0; i<10; i++) {\n strBuilder.append(i);\n }\n str = strBuilder.toString();\n\n\nSometimes, the quick-fixes allow you to convert a `String` variable to a `StringBuilder` or\nintroduce a new `StringBuilder`. Be careful if the original code specially handles the `null` value, as the\nreplacement may change semantics. If `null` is possible, null-safe fixes that generate\nnecessary null-checks are suggested. Also, it's not guaranteed that the automatic replacement will always be more performant." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "unused", + "shortDescription": { + "text": "Unused declaration" + }, + "fullDescription": { + "text": "Reports classes, methods, or fields that are not used or unreachable from the entry points. An entry point can be a main method, tests, classes from outside the specified scope, classes accessible from 'module-info.java', and so on. It is possible to configure custom entry points by using name patterns or annotations. Example: 'public class Department {\n private Organization myOrganization;\n }' In this example, 'Department' explicitly references 'Organization' but if 'Department' class itself is unused, then inspection will report both classes. The inspection also reports parameters that are not used by their methods and all method implementations and overriders, as well as local variables that are declared but not used. Note: Some unused members may not be reported during in-editor code highlighting. For performance reasons, a non-private member is checked only when its name rarely occurs in the project. To see all results, run the inspection by selecting Code | Inspect Code or Code | Analyze Code | Run Inspection by Name from the main menu. Use the visibility settings below to configure members to be reported. For example, configuring report 'private' methods only means that 'public' methods of 'private' inner class will be reported but 'protected' methods of top level class will be ignored. Use the entry points tab to configure entry points to be considered during the inspection run. You can add entry points manually when inspection results are ready. If your code uses unsupported frameworks, there are several options: If the framework relies on annotations, use the Annotations... button to configure the framework's annotations. If the framework doesn't rely on annotations, try to configure class name patterns that are expected by the framework. This way the annotated code accessible by the framework internals will be treated as used.", + "markdown": "Reports classes, methods, or fields that are not used or unreachable from the entry points.\n\nAn entry point can be a main method, tests, classes from outside the specified scope, classes accessible from\n`module-info.java`, and so on. It is possible to configure custom entry points by using name patterns or annotations.\n\n**Example:**\n\n\n public class Department {\n private Organization myOrganization;\n }\n\nIn this example, `Department` explicitly references `Organization` but if `Department` class itself is unused, then inspection will report both classes.\n\n\nThe inspection also reports parameters that are not used by their methods and all method implementations and overriders, as well as local\nvariables that are declared but not used.\n\n\n**Note:** Some unused members may not be reported during in-editor code highlighting. For performance reasons, a non-private member is\nchecked only when its name rarely occurs in the project.\nTo see all results, run the inspection by selecting **Code \\| Inspect Code** or **Code \\| Analyze Code \\| Run Inspection by Name** from the main menu.\n\nUse the visibility settings below to configure members to be reported. For example, configuring report `private` methods only means\nthat `public` methods of `private` inner class will be reported but `protected` methods of top level class\nwill be ignored.\n\n\nUse the **entry points** tab to configure entry points to be considered during the inspection run.\n\nYou can add entry points manually when inspection results are ready.\n\nIf your code uses unsupported frameworks, there are several options:\n\n* If the framework relies on annotations, use the **Annotations...** button to configure the framework's annotations.\n* If the framework doesn't rely on annotations, try to configure class name patterns that are expected by the framework.\n\nThis way the annotated code accessible by the framework internals will be treated as used." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 15, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CloneableClassInSecureContext", + "shortDescription": { + "text": "Cloneable class in secure context" + }, + "fullDescription": { + "text": "Reports classes which may be cloned. A class may be cloned if it supports the 'Cloneable' interface, and its 'clone()' method is not defined to immediately throw an error. Cloneable classes may be dangerous in code intended for secure use. Example: 'class SecureBean implements Cloneable {}' After the quick-fix is applied: 'class SecureBean {}' When the class extends an existing cloneable class or implements a cloneable interface, then after the quick-fix is applied, the code may look like: 'class SecureBean extends ParentBean {\n @Override\n protected SecureBean clone() throws CloneNotSupportedException {\n throw new CloneNotSupportedException();\n }\n}'", + "markdown": "Reports classes which may be cloned.\n\n\nA class\nmay be cloned if it supports the `Cloneable` interface,\nand its `clone()` method is not defined to immediately\nthrow an error. Cloneable classes may be dangerous in code intended for secure use.\n\n**Example:**\n`class SecureBean implements Cloneable {}`\n\nAfter the quick-fix is applied:\n`class SecureBean {}`\n\n\nWhen the class extends an existing cloneable class or implements a cloneable interface,\nthen after the quick-fix is applied, the code may look like:\n\n class SecureBean extends ParentBean {\n @Override\n protected SecureBean clone() throws CloneNotSupportedException {\n throw new CloneNotSupportedException();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 30, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InconsistentTextBlockIndent", + "shortDescription": { + "text": "Inconsistent whitespace indentation in text block" + }, + "fullDescription": { + "text": "Reports text blocks that are indented using both spaces and tabs. Such cases produce unexpected results since spaces and tabs are treated equally by the text block processing. In the following example, spaces and tabs are visualized as '·' and '␉' respectively, and a tab is equal to 4 spaces in the editor. Example: 'String colors = \"\"\"\n········red\n␉ ␉ green\n········blue\"\"\";' After printing such a string, the result will be: '······red\ngreen\n······blue' After the compiler removes an equal amount of spaces or tabs from the beginning of each line, some lines remain with leading spaces. This inspection only reports if the configured language level is 15 or higher. New in 2021.1", + "markdown": "Reports text blocks that are indented using both spaces and tabs. Such cases produce unexpected results since spaces and tabs are treated equally by the text block processing.\n\nIn the following example, spaces and tabs are visualized as `·` and `␉` respectively,\nand a tab is equal to 4 spaces in the editor.\n\n**Example:**\n\n\n String colors = \"\"\"\n ········red\n ␉ ␉ green\n ········blue\"\"\";\n\nAfter printing such a string, the result will be:\n\n\n ······red\n green\n ······blue\n\nAfter the compiler removes an equal amount of spaces or tabs from the beginning of each line,\nsome lines remain with leading spaces.\n\nThis inspection only reports if the configured language level is 15 or higher.\n\nNew in 2021.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Probable bugs", + "index": 34, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MismatchedStringCase", + "shortDescription": { + "text": "Mismatched case in 'String' operation" + }, + "fullDescription": { + "text": "Reports 'String' method calls that always return the same value ('-1' or 'false') because a lowercase character is searched in an uppercase-only string or vice versa. Reported methods include 'equals', 'startsWith', 'endsWith', 'contains', 'indexOf', and 'lastIndexOf'. Example: if (columnName.toLowerCase().equals(\"ID\")) {...}\n New in 2019.3", + "markdown": "Reports `String` method calls that always return the same value (`-1` or `false`) because a lowercase character is searched in an uppercase-only string or vice versa.\n\nReported methods include `equals`, `startsWith`, `endsWith`, `contains`,\n`indexOf`, and `lastIndexOf`.\n\n**Example:**\n\n```\n if (columnName.toLowerCase().equals(\"ID\")) {...}\n```\n\nNew in 2019.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousGetterSetter", + "shortDescription": { + "text": "Suspicious getter/setter" + }, + "fullDescription": { + "text": "Reports getter or setter methods that access a field that is not expected by its name. For example, when 'getY()' returns the 'x' field. Usually, it might be a copy-paste error. Example: 'class Point {\n private int x;\n private int y;\n\n public void setX(int x) { // Warning: setter 'setX()' assigns field 'y'\n this.y = x;\n }\n\n public int getY() { // Warning: getter 'getY()' returns field 'x'\n return x;\n }\n }' Use the checkbox below to report situations when a field in the class has a name that matches a name of a getter or a setter.", + "markdown": "Reports getter or setter methods that access a field that is not expected by its name. For example, when `getY()` returns the `x` field. Usually, it might be a copy-paste error.\n\n**Example:**\n\n class Point {\n private int x;\n private int y;\n\n public void setX(int x) { // Warning: setter 'setX()' assigns field 'y'\n this.y = x;\n }\n\n public int getY() { // Warning: getter 'getY()' returns field 'x'\n return x;\n }\n }\n\n\nUse the checkbox below to report situations when a field in the class has a name that matches a name of a getter or a setter." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/JavaBeans issues", + "index": 35, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssertionCanBeIf", + "shortDescription": { + "text": "Assertion can be replaced with 'if' statement" + }, + "fullDescription": { + "text": "Reports 'assert' statements and suggests replacing them with 'if' statements that throw 'java.lang.AssertionError'. Example: 'assert param != null;' After the quick-fix is applied: 'if (param == null) throw new AssertionError();'", + "markdown": "Reports `assert` statements and suggests replacing them with `if` statements that throw `java.lang.AssertionError`.\n\nExample:\n\n\n assert param != null;\n\nAfter the quick-fix is applied:\n\n\n if (param == null) throw new AssertionError();\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DoubleNegation", + "shortDescription": { + "text": "Double negation" + }, + "fullDescription": { + "text": "Reports double negations that can be simplified. Example: 'if (!!functionCall()) {}' After the quick-fix is applied: 'if (functionCall()) {}' Example: 'if (!(a != b)) {}' After the quick-fix is applied: 'if (a == b) {}'", + "markdown": "Reports double negations that can be simplified.\n\nExample:\n\n\n if (!!functionCall()) {}\n\nAfter the quick-fix is applied:\n\n\n if (functionCall()) {}\n\nExample:\n\n\n if (!(a != b)) {}\n\nAfter the quick-fix is applied:\n\n\n if (a == b) {}\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssignmentToNull", + "shortDescription": { + "text": "'null' assignment" + }, + "fullDescription": { + "text": "Reports variables that are assigned to 'null' outside a declaration. The main purpose of 'null' in Java is to denote uninitialized reference variables. In rare cases, assigning a variable explicitly to 'null' is useful to aid garbage collection. However, using 'null' to denote a missing, not specified, or invalid value or a not found element is considered bad practice and may make your code more prone to 'NullPointerExceptions'. Instead, consider defining a sentinel object with the intended semantics or use library types like 'Optional' to denote the absence of a value. Example: 'Integer convert(String s) {\n Integer value;\n try {\n value = Integer.parseInt(s);\n } catch (NumberFormatException e) {\n // Warning: null is used to denote an 'invalid value'\n value = null;\n }\n return value;\n }' Use the Ignore assignments to fields option to ignore assignments to fields.", + "markdown": "Reports variables that are assigned to `null` outside a declaration.\n\nThe main purpose of `null` in Java is to denote uninitialized\nreference variables. In rare cases, assigning a variable explicitly to `null`\nis useful to aid garbage collection. However, using `null` to denote a missing, not specified, or invalid value or a not\nfound element is considered bad practice and may make your code more prone to `NullPointerExceptions`.\nInstead, consider defining a sentinel object with the intended semantics\nor use library types like `Optional` to denote the absence of a value.\n\n**Example:**\n\n\n Integer convert(String s) {\n Integer value;\n try {\n value = Integer.parseInt(s);\n } catch (NumberFormatException e) {\n // Warning: null is used to denote an 'invalid value'\n value = null;\n }\n return value;\n }\n\n\nUse the **Ignore assignments to fields** option to ignore assignments to fields." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Assignment issues", + "index": 36, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PackageWithTooFewClasses", + "shortDescription": { + "text": "Package with too few classes" + }, + "fullDescription": { + "text": "Reports packages that contain fewer classes than the specified minimum. Packages which contain subpackages are not reported. Overly small packages may indicate a fragmented design. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor. Use the Minimum number of classes field to specify the minimum allowed number of classes in a package.", + "markdown": "Reports packages that contain fewer classes than the specified minimum.\n\nPackages which contain subpackages are not reported. Overly small packages may indicate a fragmented design.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor.\n\nUse the **Minimum number of classes** field to specify the minimum allowed number of classes in a package." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Packaging issues", + "index": 38, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceOnLiteralHasNoEffect", + "shortDescription": { + "text": "Replacement operation has no effect" + }, + "fullDescription": { + "text": "Reports calls to the 'String' methods 'replace()', 'replaceAll()' or 'replaceFirst()' that have no effect. Such calls can be guaranteed to have no effect when the qualifier and search string are compile-time constants and the search string is not found in the qualifier. This is redundant and may indicate an error. Example: '// replacement does nothing\n \"hello\".replace(\"$value$\", value);' New in 2022.1", + "markdown": "Reports calls to the `String` methods `replace()`, `replaceAll()` or `replaceFirst()` that have no effect. Such calls can be guaranteed to have no effect when the qualifier and search string are compile-time constants and the search string is not found in the qualifier. This is redundant and may indicate an error.\n\n**Example:**\n\n\n // replacement does nothing\n \"hello\".replace(\"$value$\", value);\n\nNew in 2022.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonSynchronizedMethodOverridesSynchronizedMethod", + "shortDescription": { + "text": "Unsynchronized method overrides 'synchronized' method" + }, + "fullDescription": { + "text": "Reports non-'synchronized' methods overriding 'synchronized' methods. The overridden method will not be automatically synchronized if the superclass method is declared as 'synchronized'. This may result in unexpected race conditions when using the subclass. Example: 'class Super {\n synchronized void process() {}\n }\n class Sub extends Super {\n // Unsynchronized method 'process()' overrides synchronized method\n void process() {}\n }'", + "markdown": "Reports non-`synchronized` methods overriding `synchronized` methods.\n\n\nThe overridden method will not be automatically synchronized if the superclass method\nis declared as `synchronized`. This may result in unexpected race conditions when using the subclass.\n\n**Example:**\n\n\n class Super {\n synchronized void process() {}\n }\n class Sub extends Super {\n // Unsynchronized method 'process()' overrides synchronized method\n void process() {}\n } \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SingleClassImport", + "shortDescription": { + "text": "Single class import" + }, + "fullDescription": { + "text": "Reports 'import' statements that import single classes (as opposed to entire packages). Some coding standards prohibit such 'import' statements. You can configure IntelliJ IDEA to detect and fix such statements with its Optimize Imports command. Go to Settings | Editor | Code Style | Java | Imports and clear the Use single class import checkbox. Thus this inspection is mostly useful for offline reporting on code bases that you don't intend to change.", + "markdown": "Reports `import` statements that import single classes (as opposed to entire packages).\n\nSome coding standards prohibit such `import` statements.\n\n\nYou can configure IntelliJ IDEA to detect and fix such statements with its **Optimize Imports** command. Go to\n[Settings \\| Editor \\| Code Style \\| Java \\| Imports](settings://preferences.sourceCode.Java?Use%20single%20class%20import)\nand clear the **Use single class import** checkbox. Thus this inspection is mostly useful for\noffline reporting on code bases that you don't intend to change." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Imports", + "index": 22, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WaitCalledOnCondition", + "shortDescription": { + "text": "'wait()' called on 'java.util.concurrent.locks.Condition' object" + }, + "fullDescription": { + "text": "Reports calls to 'wait()' made on a 'java.util.concurrent.locks.Condition' object. This is probably a programming error, and some variant of the 'await()' method was intended instead. Example: 'void acquire(Condition released) throws InterruptedException {\n while (acquired) {\n released.wait();\n }\n }' Good code would look like this: 'void acquire(Condition released) throws InterruptedException {\n while (acquired) {\n released.await();\n }\n }'", + "markdown": "Reports calls to `wait()` made on a `java.util.concurrent.locks.Condition` object. This is probably a programming error, and some variant of the `await()` method was intended instead.\n\n**Example:**\n\n\n void acquire(Condition released) throws InterruptedException {\n while (acquired) {\n released.wait();\n }\n }\n\nGood code would look like this:\n\n\n void acquire(Condition released) throws InterruptedException {\n while (acquired) {\n released.await();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TooBroadCatch", + "shortDescription": { + "text": "Overly broad 'catch' block" + }, + "fullDescription": { + "text": "Reports 'catch' blocks with parameters that are more generic than the exception thrown by the corresponding 'try' block. Example: 'try {\n File file = new File(pathToFile);\n return file.getAbsolutePath();\n } catch (Exception ex) { // warning: 'catch' of 'Exception' is too broad, masking exceptions 'RuntimeException'\n return defaultFilePath;\n }' After the quick-fix is applied: 'try {\n File file = new File(pathToFile);\n return file.getAbsolutePath();\n } catch (RuntimeException ex) {\n return defaultFilePath;\n }' Configure the inspection: Use the Only warn on RuntimeException, Exception, Error or Throwable option to have this inspection warn only on the most generic exceptions. Use the Ignore exceptions which hide others but are themselves thrown option to ignore any exceptions that hide other exceptions but still may be thrown and thus are technically not overly broad.", + "markdown": "Reports `catch` blocks with parameters that are more generic than the exception thrown by the corresponding `try` block.\n\n**Example:**\n\n\n try {\n File file = new File(pathToFile);\n return file.getAbsolutePath();\n } catch (Exception ex) { // warning: 'catch' of 'Exception' is too broad, masking exceptions 'RuntimeException'\n return defaultFilePath;\n }\n\nAfter the quick-fix is applied:\n\n\n try {\n File file = new File(pathToFile);\n return file.getAbsolutePath();\n } catch (RuntimeException ex) {\n return defaultFilePath;\n }\n\nConfigure the inspection:\n\n* Use the **Only warn on RuntimeException, Exception, Error or Throwable** option to have this inspection warn only on the most generic exceptions.\n* Use the **Ignore exceptions which hide others but are themselves thrown** option to ignore any exceptions that hide other exceptions but still may be thrown and thus are technically not overly broad." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ProtectedMemberInFinalClass", + "shortDescription": { + "text": "'protected' member in 'final' class" + }, + "fullDescription": { + "text": "Reports 'protected' members in 'final'classes. Since 'final' classes cannot be inherited, marking the method as 'protected' may be confusing. It is better to declare such members as 'private' or package-visible instead. Example: 'record Bar(int a, int b) {\n protected int sum() { \n return a + b;\n }\n}'\n After the quick-fix is applied: 'record Bar(int a, int b) {\n int sum() { \n return a + b;\n }\n}' As shown in the example, a class can be marked as 'final' explicitly or implicitly.", + "markdown": "Reports `protected` members in `final`classes.\n\nSince `final` classes cannot be inherited, marking the method as `protected`\nmay be confusing. It is better to declare such members as `private` or package-visible instead.\n\n**Example:**\n\n record Bar(int a, int b) {\n protected int sum() { \n return a + b;\n }\n }\n\nAfter the quick-fix is applied:\n\n record Bar(int a, int b) {\n int sum() { \n return a + b;\n }\n }\n\nAs shown in the example, a class can be marked as `final` explicitly or implicitly." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 15, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DanglingJavadoc", + "shortDescription": { + "text": "Dangling Javadoc comment" + }, + "fullDescription": { + "text": "Reports Javadoc comments that don't belong to any class, method or field. The Javadoc tool ignores dangling Javadoc comments and doesn't include them in the HTML documentation it generates. Example: 'class A {\n /**\n * Dangling comment\n */\n /**\n * Method javadoc\n */\n public void m(){}\n }' A quick-fix is available to delete such comments completely or convert them into a block comment. After the quick-fix is applied: 'class A {\n /*\n Dangling comment\n */\n /**\n * Method javadoc\n */\n public void m(){}\n }' Use the Ignore file header comment in JavaDoc format option to ignore comments at the beginning of Java files. These are usually copyright messages.", + "markdown": "Reports Javadoc comments that don't belong to any class, method or field. The Javadoc tool ignores dangling Javadoc comments and doesn't include them in the HTML documentation it generates.\n\n**Example:**\n\n\n class A {\n /**\n * Dangling comment\n */\n /**\n * Method javadoc\n */\n public void m(){}\n }\n\nA quick-fix is available to delete such comments completely or convert them into a block comment. After the quick-fix is applied:\n\n\n class A {\n /*\n Dangling comment\n */\n /**\n * Method javadoc\n */\n public void m(){}\n }\n\nUse the **Ignore file header comment in JavaDoc format** option to ignore comments at the beginning of Java files.\nThese are usually copyright messages." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 45, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BadOddness", + "shortDescription": { + "text": "Suspicious oddness check" + }, + "fullDescription": { + "text": "Reports odd-even checks of the following form: 'x % 2 == 1'. Such checks fail when used with negative odd values. Consider using 'x % 2 != 0' or '(x & 1) == 1' instead.", + "markdown": "Reports odd-even checks of the following form: `x % 2 == 1`. Such checks fail when used with negative odd values. Consider using `x % 2 != 0` or `(x & 1) == 1` instead." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HibernateResource", + "shortDescription": { + "text": "Hibernate resource opened but not safely closed" + }, + "fullDescription": { + "text": "Reports calls to the 'openSession()' method if the returned 'org.hibernate.Session' resource is not safely closed. By default, the inspection assumes that the resources can be closed by any method with 'close' or 'cleanup' in its name. Example: 'void doHibernateQuery(SessionFactory factory) {\n Session session = factory.openSession(); //warning\n session.createQuery(\"...\");\n }' Use the following options to configure the inspection: Whether a 'org.hibernate.Session' resource is allowed to be opened inside a 'try' block. This style is less desirable because it is more verbose than opening a resource in front of a 'try' block. Whether the resource can be closed by any method call with the resource passed as argument.", + "markdown": "Reports calls to the `openSession()` method if the returned `org.hibernate.Session` resource is not safely closed.\n\n\nBy default, the inspection assumes that the resources can be closed by any method with\n'close' or 'cleanup' in its name.\n\n**Example:**\n\n\n void doHibernateQuery(SessionFactory factory) {\n Session session = factory.openSession(); //warning\n session.createQuery(\"...\");\n }\n\n\nUse the following options to configure the inspection:\n\n* Whether a `org.hibernate.Session` resource is allowed to be opened inside a `try` block. This style is less desirable because it is more verbose than opening a resource in front of a `try` block.\n* Whether the resource can be closed by any method call with the resource passed as argument." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Resource management", + "index": 46, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryInitCause", + "shortDescription": { + "text": "Unnecessary call to 'Throwable.initCause()'" + }, + "fullDescription": { + "text": "Reports calls to 'Throwable.initCause()' where an exception constructor also takes a 'Throwable cause' argument. In this case, the 'initCause()' call can be removed and its argument can be added to the call to the exception's constructor. Example: 'try {\n process();\n }\n catch (RuntimeException ex) {\n RuntimeException wrapper = new RuntimeException(\"Error while processing\");\n wrapper.initCause(ex); // Unnecessary call to 'Throwable.initCause()'\n throw wrapper;\n }' A quick-fix is available to pass the cause argument to the constructor. After the quick-fix is applied: 'try {\n process();\n }\n catch (RuntimeException ex) {\n RuntimeException wrapper = new RuntimeException(\"Error while processing\", ex);\n throw wrapper;\n }'", + "markdown": "Reports calls to `Throwable.initCause()` where an exception constructor also takes a `Throwable cause` argument.\n\nIn this case, the `initCause()` call can be removed and its argument can be added to the call to the exception's constructor.\n\n**Example:**\n\n\n try {\n process();\n }\n catch (RuntimeException ex) {\n RuntimeException wrapper = new RuntimeException(\"Error while processing\");\n wrapper.initCause(ex); // Unnecessary call to 'Throwable.initCause()'\n throw wrapper;\n }\n\nA quick-fix is available to pass the cause argument to the constructor. After the quick-fix is applied:\n\n\n try {\n process();\n }\n catch (RuntimeException ex) {\n RuntimeException wrapper = new RuntimeException(\"Error while processing\", ex);\n throw wrapper;\n }\n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ComparisonOfShortAndChar", + "shortDescription": { + "text": "Comparison of 'short' and 'char' values" + }, + "fullDescription": { + "text": "Reports equality comparisons between 'short' and 'char' values. Such comparisons may cause subtle bugs because while both values are 2-byte long, 'short' values are signed, and 'char' values are unsigned. Example: 'if (Character.MAX_VALUE == shortValue()) {} //never can be true'", + "markdown": "Reports equality comparisons between `short` and `char` values.\n\nSuch comparisons may cause subtle bugs because while both values are 2-byte long, `short` values are\nsigned, and `char` values are unsigned.\n\n**Example:**\n\n\n if (Character.MAX_VALUE == shortValue()) {} //never can be true\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ArrayCanBeReplacedWithEnumValues", + "shortDescription": { + "text": "Array can be replaced with enum values" + }, + "fullDescription": { + "text": "Reports arrays of enum constants that can be replaced with a call to 'EnumType.values()'. Usually, when updating such an enum, you have to update the array as well. However, if you use 'EnumType.values()' instead, no modifications are required. Example: 'enum States {\n NOT_RUN, IN_PROGRESS, FINISHED;\n }\n \n handleStates(new States[] {NOT_RUN, IN_PROGRESS, FINISHED});' After the quick-fix is applied: 'handleStates(States.values());' New in 2019.1", + "markdown": "Reports arrays of enum constants that can be replaced with a call to `EnumType.values()`.\n\nUsually, when updating such an enum, you have to update the array as well. However, if you use `EnumType.values()`\ninstead, no modifications are required.\n\nExample:\n\n\n enum States {\n NOT_RUN, IN_PROGRESS, FINISHED;\n }\n \n handleStates(new States[] {NOT_RUN, IN_PROGRESS, FINISHED});\n\nAfter the quick-fix is applied:\n\n\n handleStates(States.values());\n\nNew in 2019.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SystemOutErr", + "shortDescription": { + "text": "Use of 'System.out' or 'System.err'" + }, + "fullDescription": { + "text": "Reports usages of 'System.out' or 'System.err'. Such statements are often used for temporary debugging and should be either removed from the production code, or replaced by a more robust logging facility.", + "markdown": "Reports usages of `System.out` or `System.err`.\n\nSuch statements are often used for temporary debugging and should be either removed from the production code, or replaced by a more robust\nlogging facility." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code maturity", + "index": 49, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WaitNotifyNotInSynchronizedContext", + "shortDescription": { + "text": "'wait()' or 'notify()' is not in synchronized context" + }, + "fullDescription": { + "text": "Reports calls to 'wait()', 'notify()', and 'notifyAll()' that are not made inside a corresponding synchronized statement or synchronized method. Calling these methods on an object without holding a lock on that object causes 'IllegalMonitorStateException'. Such a construct is not necessarily an error, as the necessary lock may be acquired before the containing method is called, but it's worth looking at. Example: 'class Sync {\n private final Object lock = new Object();\n\n void test() throws InterruptedException {\n synchronized (this) {\n lock.wait(); // 'lock.wait()' is not synchronized on 'lock'\n }\n }\n }'", + "markdown": "Reports calls to `wait()`, `notify()`, and `notifyAll()` that are not made inside a corresponding synchronized statement or synchronized method.\n\n\nCalling these methods on an object\nwithout holding a lock on that object causes `IllegalMonitorStateException`.\nSuch a construct is not necessarily an error, as the necessary lock may be acquired before\nthe containing method is called, but it's worth looking at.\n\n**Example:**\n\n\n class Sync {\n private final Object lock = new Object();\n\n void test() throws InterruptedException {\n synchronized (this) {\n lock.wait(); // 'lock.wait()' is not synchronized on 'lock'\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DollarSignInName", + "shortDescription": { + "text": "Use of '$' in identifier" + }, + "fullDescription": { + "text": "Reports variables, methods, and classes with dollar signs ('$') in their names. While such names are legal Java, their use outside of generated java code is strongly discouraged. Example: 'class SalaryIn${}' Rename quick-fix is suggested only in the editor.", + "markdown": "Reports variables, methods, and classes with dollar signs (`$`) in their names. While such names are legal Java, their use outside of generated java code is strongly discouraged.\n\n**Example:**\n\n\n class SalaryIn${}\n\nRename quick-fix is suggested only in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions", + "index": 50, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CheckedExceptionClass", + "shortDescription": { + "text": "Checked exception class" + }, + "fullDescription": { + "text": "Reports checked exception classes (that is, subclasses of 'java.lang.Exception' that are not subclasses of 'java.lang.RuntimeException'). Some coding standards suppress checked user-defined exception classes. Example: 'class IllegalMoveException extends Exception {}'", + "markdown": "Reports checked exception classes (that is, subclasses of `java.lang.Exception` that are not subclasses of `java.lang.RuntimeException`).\n\nSome coding standards suppress checked user-defined exception classes.\n\n**Example:**\n\n\n class IllegalMoveException extends Exception {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DynamicRegexReplaceableByCompiledPattern", + "shortDescription": { + "text": "Dynamic regular expression could be replaced by compiled 'Pattern'" + }, + "fullDescription": { + "text": "Reports calls to the regular expression methods (such as 'matches()' or 'split()') of 'java.lang.String' using constant arguments. Such calls may be profitably replaced with a 'private static final Pattern' field so that the regular expression does not have to be compiled each time it is used. Example: 'text.replaceAll(\"abc\", replacement);' After the quick-fix is applied: 'private static final Pattern ABC = Pattern.compile(\"abc\", Pattern.LITERAL);\n ABC.matcher(text).replaceAll(Matcher.quoteReplacement(replacement));'", + "markdown": "Reports calls to the regular expression methods (such as `matches()` or `split()`) of `java.lang.String` using constant arguments.\n\n\nSuch calls may be profitably replaced with a `private static final Pattern` field\nso that the regular expression does not have to be compiled each time it is used.\n\n**Example:**\n\n\n text.replaceAll(\"abc\", replacement);\n\nAfter the quick-fix is applied:\n\n\n private static final Pattern ABC = Pattern.compile(\"abc\", Pattern.LITERAL);\n ABC.matcher(text).replaceAll(Matcher.quoteReplacement(replacement));\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EmptyInitializer", + "shortDescription": { + "text": "Empty class initializer" + }, + "fullDescription": { + "text": "Reports empty class initializer blocks.", + "markdown": "Reports empty class initializer blocks." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 15, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SerializableStoresNonSerializable", + "shortDescription": { + "text": "'Serializable' object implicitly stores non-'Serializable' object" + }, + "fullDescription": { + "text": "Reports any references to local non-'Serializable' variables outside 'Serializable' lambdas, local and anonymous classes. When a local variable is referenced from an anonymous class, its value is stored in an implicit field of that class. The same happens for local classes and lambdas. If the variable is of a non-'Serializable' type, serialization will fail. Example: 'interface A extends Serializable {\n abstract void foo();\n }\n class B {}\n class C {\n void foo() {\n B b = new B();\n A a = new A() {\n @Override\n public void foo() {\n System.out.println(b); // warning\n }\n };\n }\n }'", + "markdown": "Reports any references to local non-`Serializable` variables outside `Serializable` lambdas, local and anonymous classes.\n\n\nWhen a local variable is referenced from an anonymous class, its value\nis stored in an implicit field of that class. The same happens\nfor local classes and lambdas. If the variable is of a\nnon-`Serializable` type, serialization will fail.\n\n**Example:**\n\n\n interface A extends Serializable {\n abstract void foo();\n }\n class B {}\n class C {\n void foo() {\n B b = new B();\n A a = new A() {\n @Override\n public void foo() {\n System.out.println(b); // warning\n }\n };\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 18, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryBreak", + "shortDescription": { + "text": "Unnecessary 'break' statement" + }, + "fullDescription": { + "text": "Reports any unnecessary 'break' statements. An 'break' statement is unnecessary if no other statements are executed after it has been removed. Example: 'switch (e) {\n case A -> {\n System.out.println(\"A\");\n break; // reports 'break' statement is unnecessary\n }\n default -> {\n System.out.println(\"Default\");\n break; // reports 'break' statement is unnecessary\n }\n }'", + "markdown": "Reports any unnecessary `break` statements.\n\nAn `break` statement is unnecessary if no other statements are executed after it has been removed.\n\n**Example:**\n\n\n switch (e) {\n case A -> {\n System.out.println(\"A\");\n break; // reports 'break' statement is unnecessary\n }\n default -> {\n System.out.println(\"Default\");\n break; // reports 'break' statement is unnecessary\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InsertLiteralUnderscores", + "shortDescription": { + "text": "Unreadable numeric literal" + }, + "fullDescription": { + "text": "Reports long numeric literals without underscores and suggests adding them. Underscores make such literals easier to read. Example: '1000000' After the quick-fix is applied: '1_000_000' This inspection only reports if the language level of the project of module is 7 or higher. New in 2020.2", + "markdown": "Reports long numeric literals without underscores and suggests adding them. Underscores make such literals easier to read.\n\nExample:\n\n\n 1000000\n\nAfter the quick-fix is applied:\n\n\n 1_000_000\n\nThis inspection only reports if the language level of the project of module is 7 or higher.\n\nNew in 2020.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BreakStatement", + "shortDescription": { + "text": "'break' statement" + }, + "fullDescription": { + "text": "Reports 'break' statements that are used in places other than at the end of a 'switch' statement branch. 'break' statements complicate refactoring and can be confusing. Example: 'void foo(List strs) {\n for (String str : strs) {\n if (str.contains(\"stop\")) break;\n handleStr(str);\n }\n}'", + "markdown": "Reports `break` statements that are used in places other than at the end of a `switch` statement branch.\n\n`break` statements complicate refactoring and can be confusing.\n\nExample:\n\n\n void foo(List strs) {\n for (String str : strs) {\n if (str.contains(\"stop\")) break;\n handleStr(str);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RawUseOfParameterizedType", + "shortDescription": { + "text": "Raw use of parameterized class" + }, + "fullDescription": { + "text": "Reports generic classes with omitted type parameters. Such raw use of generic types is valid in Java, but it defeats the purpose of type parameters and may mask bugs. This inspection mirrors the 'rawtypes' warning of 'javac'. Examples: '//warning: Raw use of parameterized class 'List'\nList list = new ArrayList();\n//list of strings was created but integer is accepted as well\nlist.add(1);' '//no warning as it's impossible to provide type arguments during array creation\nIntFunction[]> fun = List[]::new;' Configure the inspection: Use the Ignore construction of new objects option to ignore raw types used in object construction. Use the Ignore type casts option to ignore raw types used in type casts. Use the Ignore where a type parameter would not compile option to ignore the cases when a type parameter fails to compile (for example, when creating an array or overriding a library method). Use the Ignore parameter types of overriding methods option to ignore type parameters used in parameters of overridden methods. Use the Ignore when automatic quick-fix is not available option to ignore the cases when a quick-fix is not available. This inspection only reports if the language level of the project or module is 5 or higher.", + "markdown": "Reports generic classes with omitted type parameters. Such *raw* use of generic types is valid in Java, but it defeats the purpose of type parameters and may mask bugs. This inspection mirrors the `rawtypes` warning of `javac`.\n\n**Examples:**\n\n\n //warning: Raw use of parameterized class 'List'\n List list = new ArrayList();\n //list of strings was created but integer is accepted as well\n list.add(1);\n\n\n //no warning as it's impossible to provide type arguments during array creation\n IntFunction[]> fun = List[]::new;\n\nConfigure the inspection:\n\n* Use the **Ignore construction of new objects** option to ignore raw types used in object construction.\n* Use the **Ignore type casts** option to ignore raw types used in type casts.\n* Use the **Ignore where a type parameter would not compile** option to ignore the cases when a type parameter fails to compile (for example, when creating an array or overriding a library method).\n* Use the **Ignore parameter types of overriding methods** option to ignore type parameters used in parameters of overridden methods.\n* Use the **Ignore when automatic quick-fix is not available** option to ignore the cases when a quick-fix is not available.\nThis inspection only reports if the language level of the project or module is 5 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 5", + "index": 51, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JDBCExecuteWithNonConstantString", + "shortDescription": { + "text": "Call to 'Statement.execute()' with non-constant string" + }, + "fullDescription": { + "text": "Reports calls to 'java.sql.Statement.execute()' or any of its variants which take a dynamically-constructed string as the query to execute. Constructed SQL statements are a common source of security breaches. By default, this inspection ignores compile-time constants. Example: 'ResultSet execute(Statement statement, String name) throws SQLException {\n return statement.executeQuery(\"select * from \" + name); // reports warning\n }' Use the inspection options to consider any 'static' 'final' fields as constant. Be careful, because strings like the following will be ignored when the option is enabled: 'private static final String SQL = \"SELECT * FROM user WHERE name='\" + getUserInput() + \"'\";'", + "markdown": "Reports calls to `java.sql.Statement.execute()` or any of its variants which take a dynamically-constructed string as the query to execute.\n\nConstructed SQL statements are a common source of security breaches.\nBy default, this inspection ignores compile-time constants.\n\n**Example:**\n\n\n ResultSet execute(Statement statement, String name) throws SQLException {\n return statement.executeQuery(\"select * from \" + name); // reports warning\n }\n\n\nUse the inspection options to consider any `static` `final` fields as constant.\nBe careful, because strings like the following will be ignored when the option is enabled:\n\n\n private static final String SQL = \"SELECT * FROM user WHERE name='\" + getUserInput() + \"'\";\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 30, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PublicConstructorInNonPublicClass", + "shortDescription": { + "text": "'public' constructor in non-public class" + }, + "fullDescription": { + "text": "Reports 'public' constructors in non-'public' classes. Usually, there is no reason for creating a 'public' constructor in a class with a lower access level. Please note, however, that this inspection changes the behavior of some reflection calls. In particular, 'Class.getConstructor()' won't be able to find the updated constructor ('Class.getDeclaredConstructor()' should be used instead). Do not use the inspection if your code or code of some used frameworks relies on constructor accessibility via 'getConstructor()'. Example: 'class House {\n public House() {}\n }' After the quick-fix is applied: 'class House {\n House() {}\n }'", + "markdown": "Reports `public` constructors in non-`public` classes.\n\nUsually, there is no reason for creating a `public` constructor in a class with a lower access level.\nPlease note, however, that this inspection changes the behavior of some reflection calls. In particular,\n`Class.getConstructor()` won't be able to find the updated constructor\n(`Class.getDeclaredConstructor()` should be used instead). Do not use the inspection if your code\nor code of some used frameworks relies on constructor accessibility via `getConstructor()`.\n\n**Example:**\n\n\n class House {\n public House() {}\n }\n\nAfter the quick-fix is applied:\n\n\n class House {\n House() {}\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 54, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstantValueVariableUse", + "shortDescription": { + "text": "Use of variable whose value is known to be constant" + }, + "fullDescription": { + "text": "Reports any usages of variables which are known to be constant. This is the case if the (read) use of the variable is surrounded by an 'if', 'while', or 'for' statement with an '==' condition which compares the variable with a constant. In this case, the use of a variable which is known to be constant can be replaced with an actual constant. Example: 'private static void foo(double number) {\n if (number == 1.0) {\n f(number);\n }\n }\n private static void f(double number) {}' After the quick-fix is applied: 'private static void foo(double number) {\n if (number == 1.0) {\n f(1.0);\n }\n }\n private static void f(double number) {}'", + "markdown": "Reports any usages of variables which are known to be constant.\n\nThis is the case if the (read) use of the variable is surrounded by an\n`if`, `while`, or `for`\nstatement with an `==` condition which compares the variable with a constant.\nIn this case, the use of a variable which is known to be constant can be replaced with\nan actual constant.\n\nExample:\n\n\n private static void foo(double number) {\n if (number == 1.0) {\n f(number);\n }\n }\n private static void f(double number) {}\n\nAfter the quick-fix is applied:\n\n\n private static void foo(double number) {\n if (number == 1.0) {\n f(1.0);\n }\n }\n private static void f(double number) {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Data flow", + "index": 23, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NewStringBufferWithCharArgument", + "shortDescription": { + "text": "StringBuilder constructor call with 'char' argument" + }, + "fullDescription": { + "text": "Reports calls to 'StringBuffer' and 'StringBuilder' constructors with 'char' as the argument. In this case, 'char' is silently cast to an integer and interpreted as the initial capacity of the buffer. Example: 'new StringBuilder('(').append(\"1\").append(')');' After the quick-fix is applied: 'new StringBuilder(\"(\").append(\"1\").append(')');'", + "markdown": "Reports calls to `StringBuffer` and `StringBuilder` constructors with `char` as the argument. In this case, `char` is silently cast to an integer and interpreted as the initial capacity of the buffer.\n\n**Example:**\n\n\n new StringBuilder('(').append(\"1\").append(')');\n\nAfter the quick-fix is applied:\n\n\n new StringBuilder(\"(\").append(\"1\").append(')');\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ProtectedInnerClass", + "shortDescription": { + "text": "Protected nested class" + }, + "fullDescription": { + "text": "Reports 'protected' nested classes. Example: 'public class Outer {\n protected static class Nested {} // warning\n protected class Inner {} // warning\n protected enum Mode {} // warning depends on the setting\n protected interface I {} // warning depends on the setting\n }' Configure the inspection: Use the Ignore 'protected' inner enums option to ignore 'protected' inner enums. Use the Ignore 'protected' inner interfaces option to ignore 'protected' inner interfaces.", + "markdown": "Reports `protected` nested classes.\n\n**Example:**\n\n\n public class Outer {\n protected static class Nested {} // warning\n protected class Inner {} // warning\n protected enum Mode {} // warning depends on the setting\n protected interface I {} // warning depends on the setting\n }\n\nConfigure the inspection:\n\n* Use the **Ignore 'protected' inner enums** option to ignore `protected` inner enums.\n* Use the **Ignore 'protected' inner interfaces** option to ignore `protected` inner interfaces." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Encapsulation", + "index": 57, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnqualifiedStaticUsage", + "shortDescription": { + "text": "Unqualified static access" + }, + "fullDescription": { + "text": "Reports usage of static members that is not qualified with the class name. This is legal if the static member is in the same class, but may be confusing. Example: 'class Foo {\n static void foo() {}\n static int x;\n\n void bar() {\n foo();\n System.out.println(x);\n }\n\n static void baz() { foo(); }\n }' After the quick-fix is applied: 'class Foo {\n static void foo() {}\n static int x;\n\n void bar() {\n Foo.foo();\n System.out.println(Foo.x);\n }\n\n static void baz() { Foo.foo(); }\n }' Use the inspection settings to toggle the reporting for the following items: static fields access 'void bar() { System.out.println(x); }' calls to static methods 'void bar() { foo(); }' 'static void baz() { foo(); }' You can also configure the inspection to only report static member usage from a non-static context. In the above example, 'static void baz() { foo(); }' will not be reported.", + "markdown": "Reports usage of static members that is not qualified with the class name.\n\n\nThis is legal if the static member is in\nthe same class, but may be confusing.\n\n**Example:**\n\n\n class Foo {\n static void foo() {}\n static int x;\n\n void bar() {\n foo();\n System.out.println(x);\n }\n\n static void baz() { foo(); }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n static void foo() {}\n static int x;\n\n void bar() {\n Foo.foo();\n System.out.println(Foo.x);\n }\n\n static void baz() { Foo.foo(); }\n }\n\nUse the inspection settings to toggle the reporting for the following items:\n\n*\n static fields access \n\n `void bar() { System.out.println(x); }`\n\n*\n calls to static methods \n\n `void bar() { foo(); }` \n\n `static void baz() { foo(); }`\n\n\nYou can also configure the inspection to only report static member usage from a non-static context.\nIn the above example, `static void baz() { foo(); }` will not be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExternalizableWithoutPublicNoArgConstructor", + "shortDescription": { + "text": "'Externalizable' class without 'public' no-arg constructor" + }, + "fullDescription": { + "text": "Reports 'Externalizable' classes without a public no-argument constructor. When an 'Externalizable' object is reconstructed, an instance is created using the public no-arg constructor before the 'readExternal' method called. If a public no-arg constructor is not available, a 'java.io.InvalidClassException' will be thrown at runtime.", + "markdown": "Reports `Externalizable` classes without a public no-argument constructor.\n\nWhen an `Externalizable` object is reconstructed, an instance is created using the public\nno-arg constructor before the `readExternal` method called. If a public\nno-arg constructor is not available, a `java.io.InvalidClassException` will be\nthrown at runtime." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 18, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StaticGuardedByInstance", + "shortDescription": { + "text": "Static member guarded by instance field or this" + }, + "fullDescription": { + "text": "Reports '@GuardedBy' annotations on 'static' fields or methods in which the guard is either a non-static field or 'this'. Guarding a static element with a non-static element may result in excessive concurrency, multiple threads may be able to access the guarded field simultaneously by locking in different object contexts. Example: 'private ReadWriteLock lock = new ReentrantReadWriteLock();\n\n @GuardedBy(\"lock\")\n public static void bar() {\n // ...\n }' Supported '@GuardedBy' annotations are: 'net.jcip.annotations.GuardedBy' 'javax.annotation.concurrent.GuardedBy' 'org.apache.http.annotation.GuardedBy' 'com.android.annotations.concurrency.GuardedBy' 'androidx.annotation.GuardedBy' 'com.google.errorprone.annotations.concurrent.GuardedBy'", + "markdown": "Reports `@GuardedBy` annotations on `static` fields or methods in which the guard is either a non-static field or `this`.\n\nGuarding a static element with a non-static element may result in\nexcessive concurrency, multiple threads may be able to access the guarded field simultaneously by locking in different object contexts.\n\nExample:\n\n\n private ReadWriteLock lock = new ReentrantReadWriteLock();\n\n @GuardedBy(\"lock\")\n public static void bar() {\n // ...\n }\n\nSupported `@GuardedBy` annotations are:\n\n* `net.jcip.annotations.GuardedBy`\n* `javax.annotation.concurrent.GuardedBy`\n* `org.apache.http.annotation.GuardedBy`\n* `com.android.annotations.concurrency.GuardedBy`\n* `androidx.annotation.GuardedBy`\n* `com.google.errorprone.annotations.concurrent.GuardedBy`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Concurrency annotation issues", + "index": 58, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassGetClass", + "shortDescription": { + "text": "Suspicious 'Class.getClass()' call" + }, + "fullDescription": { + "text": "Reports 'getClass()' methods that are called on a 'java.lang.Class' instance. This is usually a mistake as the result is always equivalent to 'Class.class'. If it's a mistake, then it's better to remove the 'getClass()' call and use the qualifier directly. If the behavior is intended, then it's better to write 'Class.class' explicitly to avoid confusion. Example: 'void test(Class clazz) {\n String name = clazz.getClass().getName();\n }' After one of the possible quick-fixes is applied: 'void test(Class clazz) {\n String name = clazz.getName();\n }' New in 2018.2", + "markdown": "Reports `getClass()` methods that are called on a `java.lang.Class` instance.\n\nThis is usually a mistake as the result is always equivalent to `Class.class`.\nIf it's a mistake, then it's better to remove the `getClass()` call and use the qualifier directly.\nIf the behavior is intended, then it's better to write `Class.class` explicitly to avoid confusion.\n\nExample:\n\n\n void test(Class clazz) {\n String name = clazz.getClass().getName();\n }\n\nAfter one of the possible quick-fixes is applied:\n\n\n void test(Class clazz) {\n String name = clazz.getName();\n }\n\nNew in 2018.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ResultOfObjectAllocationIgnored", + "shortDescription": { + "text": "Result of object allocation ignored" + }, + "fullDescription": { + "text": "Reports object allocations where the allocated object is ignored and neither assigned to a variable nor used in another way. Such allocation expressions are legal in Java, but are usually either unintended, or evidence of a very odd object initialization strategy. Use the options to list classes whose allocations should be ignored by this inspection.", + "markdown": "Reports object allocations where the allocated object is ignored and neither assigned to a variable nor used in another way.\n\n\nSuch allocation expressions are legal in Java, but are usually either unintended, or\nevidence of a very odd object initialization strategy.\n\n\nUse the options to list classes whose allocations should be ignored by this inspection." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedLibrary", + "shortDescription": { + "text": "Unused library" + }, + "fullDescription": { + "text": "Reports libraries attached to the specified inspection scope that are not used directly in code.", + "markdown": "Reports libraries attached to the specified inspection scope that are not used directly in code." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 15, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ManualArrayCopy", + "shortDescription": { + "text": "Manual array copy" + }, + "fullDescription": { + "text": "Reports manual copying of array contents that can be replaced with a call to 'System.arraycopy()'. Example: 'for (int i = 0; i < array.length; i++) {\n newArray[i] = array[i];\n }' After the quick-fix is applied: 'System.arraycopy(array, 0, newArray, 0, array.length);'", + "markdown": "Reports manual copying of array contents that can be replaced with a call to `System.arraycopy()`.\n\n**Example:**\n\n\n for (int i = 0; i < array.length; i++) {\n newArray[i] = array[i];\n }\n\nAfter the quick-fix is applied:\n\n\n System.arraycopy(array, 0, newArray, 0, array.length);\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObsoleteCollection", + "shortDescription": { + "text": "Use of obsolete collection type" + }, + "fullDescription": { + "text": "Reports usages of 'java.util.Vector', 'java.util.Hashtable' and 'java.util.Stack'. Usages of these classes can often be replaced with usages of 'java.util.ArrayList', 'java.util.HashMap' and 'java.util.ArrayDeque' respectively. While still supported, the former classes were made obsolete by the JDK1.2 collection classes, and should probably not be used in new development. Use the Ignore obsolete collection types where they are required option to ignore any cases where the obsolete collections are used as method arguments or assigned to a variable that requires the obsolete type. Enabling this option may consume significant processor resources.", + "markdown": "Reports usages of `java.util.Vector`, `java.util.Hashtable` and `java.util.Stack`.\n\nUsages of these classes can often be replaced with usages of\n`java.util.ArrayList`, `java.util.HashMap` and `java.util.ArrayDeque` respectively.\nWhile still supported,\nthe former classes were made obsolete by the JDK1.2 collection classes, and should probably\nnot be used in new development.\n\n\nUse the **Ignore obsolete collection types where they are required** option to ignore any cases where the obsolete collections are used\nas method arguments or assigned to a variable that requires the obsolete type.\nEnabling this option may consume significant processor resources." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code maturity", + "index": 49, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StaticPseudoFunctionalStyleMethod", + "shortDescription": { + "text": "Pseudo-functional expression using static class" + }, + "fullDescription": { + "text": "Reports usages of pseudo-functional code if 'Java Stream API' is available. Though 'guava Iterable API' provides functionality similar to 'Java Streams API', it's slightly different and may miss some features. Especially, primitive-specialized stream variants like 'IntStream' are more performant than generic variants. Example: 'List transformedIterable = Iterables.transform(someList, someTransformFunction);//warning: Pseudo functional style code' After the quick-fix is applied: 'List transformedIterable = someList.stream().map(someTransformFunction).collect(Collectors.toList());' Note: Code semantics can be changed; for example, guava's 'Iterable.transform' produces a lazy-evaluated iterable, but the replacement is eager-evaluated. Use the Static method calls translated to the 'Stream' API option to configure static method calls that should be translated to the 'stream' API. This inspection only reports if the language level of the project or module is 8 or higher.", + "markdown": "Reports usages of pseudo-functional code if `Java Stream API` is available.\n\nThough `guava Iterable API` provides functionality similar to `Java Streams API`, it's slightly different and\nmay miss some features.\nEspecially, primitive-specialized stream variants like `IntStream` are more performant than generic variants.\n\n**Example:**\n\n\n List transformedIterable = Iterables.transform(someList, someTransformFunction);//warning: Pseudo functional style code\n\nAfter the quick-fix is applied:\n\n List transformedIterable = someList.stream().map(someTransformFunction).collect(Collectors.toList());\n\n\n**Note:** Code semantics can be changed; for example, guava's `Iterable.transform` produces a lazy-evaluated iterable,\nbut the replacement is eager-evaluated.\n\n\nUse the **Static method calls translated to the 'Stream' API** option\nto configure static method calls that should be translated to the `stream` API.\n\nThis inspection only reports if the language level of the project or module is 8 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 59, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ControlFlowStatementWithoutBraces", + "shortDescription": { + "text": "Control flow statement without braces" + }, + "fullDescription": { + "text": "Reports any 'if', 'while', 'do', or 'for' statements without braces. Some code styles, e.g. the Google Java Style guide, require braces for all control statements. When adding further statements to control statements without braces, it is important not to forget adding braces. When commenting out a line of code, it is also necessary to be more careful when not using braces, to not inadvertently make the next statement part of the control flow statement. Always using braces makes inserting or commenting out a line of code safer. It's likely the goto fail vulnerability would not have happened, if an always use braces code style was used. Control statements with braces make the control flow easier to see, without relying on, possibly incorrect, indentation. Example: 'class Strange {\n void x(boolean one, boolean two) {\n if(one)\n if(two)\n foo();\n else\n bar();\n }\n\n void foo() {}\n void bar() {}\n }' The quick-fix wraps the statement body with braces: 'class Strange {\n void x(boolean one, boolean two) {\n if(one) {\n if(two) {\n foo();\n } else {\n bar();\n }\n }\n }\n\n void foo() {}\n void bar() {}\n }'", + "markdown": "Reports any `if`, `while`, `do`, or `for` statements without braces. Some code styles, e.g. the [Google Java Style guide](https://google.github.io/styleguide/javaguide.html), require braces for all control statements.\n\n\nWhen adding further statements to control statements without braces, it is important not to forget adding braces.\nWhen commenting out a line of code, it is also necessary to be more careful when not using braces,\nto not inadvertently make the next statement part of the control flow statement.\nAlways using braces makes inserting or commenting out a line of code safer.\n\n\nIt's likely the [goto fail vulnerability](https://www.imperialviolet.org/2014/02/22/applebug.html) would not have happened,\nif an always use braces code style was used.\nControl statements with braces make the control flow easier to see, without relying on, possibly incorrect, indentation.\n\nExample:\n\n\n class Strange {\n void x(boolean one, boolean two) {\n if(one)\n if(two)\n foo();\n else\n bar();\n }\n\n void foo() {}\n void bar() {}\n }\n\nThe quick-fix wraps the statement body with braces:\n\n\n class Strange {\n void x(boolean one, boolean two) {\n if(one) {\n if(two) {\n foo();\n } else {\n bar();\n }\n }\n }\n\n void foo() {}\n void bar() {}\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LengthOneStringInIndexOf", + "shortDescription": { + "text": "Single character string argument in 'String.indexOf()' call" + }, + "fullDescription": { + "text": "Reports single character strings being used as an argument in 'String.indexOf()' and 'String.lastIndexOf()' calls. A quick-fix is suggested to replace such string literals with equivalent character literals, gaining some performance enhancement. Example: 'return s.indexOf(\"x\");' After the quick-fix is applied: 'return s.indexOf('x');'", + "markdown": "Reports single character strings being used as an argument in `String.indexOf()` and `String.lastIndexOf()` calls.\n\nA quick-fix is suggested to replace such string literals with equivalent character literals, gaining some performance enhancement.\n\n**Example:**\n\n\n return s.indexOf(\"x\");\n\nAfter the quick-fix is applied:\n\n\n return s.indexOf('x');\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MisspelledEquals", + "shortDescription": { + "text": "'equal()' instead of 'equals()'" + }, + "fullDescription": { + "text": "Reports declarations of 'equal()' with a single parameter. Normally, this is a typo and 'equals()' is actually intended. A quick-fix is suggested to rename the method to 'equals'. Example: 'class Main {\n public boolean equal(Object obj) {\n return true;\n }\n }' After the quick-fix is applied: 'class Main {\n public boolean equals(Object obj) {\n return true;\n }\n }'", + "markdown": "Reports declarations of `equal()` with a single parameter. Normally, this is a typo and `equals()` is actually intended.\n\nA quick-fix is suggested to rename the method to `equals`.\n\n**Example:**\n\n\n class Main {\n public boolean equal(Object obj) {\n return true;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Main {\n public boolean equals(Object obj) {\n return true;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonFinalFieldInEnum", + "shortDescription": { + "text": "Non-final field in 'enum'" + }, + "fullDescription": { + "text": "Reports non-final fields in enumeration types as they are rarely needed and provide a global mutable state. Example: 'enum Enum {\n FIRST(\"first\"),\n SECOND(\"second\");\n\n public String str;\n\n Enum(String str) {\n this.str = str;\n }\n }' After the quick-fix is applied: 'enum Enum {\n FIRST(\"first\"),\n SECOND(\"second\");\n\n public final String str;\n\n Enum(String str) {\n this.str = str;\n }\n }' Configure the `Ignore field if quick-fix is not available` checkbox to only highlight fields that can be made final by the quick-fix.", + "markdown": "Reports non-final fields in enumeration types as they are rarely needed and provide a global mutable state.\n\n**Example:**\n\n\n enum Enum {\n FIRST(\"first\"),\n SECOND(\"second\");\n\n public String str;\n\n Enum(String str) {\n this.str = str;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n enum Enum {\n FIRST(\"first\"),\n SECOND(\"second\");\n\n public final String str;\n\n Enum(String str) {\n this.str = str;\n }\n }\n\nConfigure the \\`Ignore field if quick-fix is not available\\` checkbox to only highlight fields that can be made final by the quick-fix." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TrivialFunctionalExpressionUsage", + "shortDescription": { + "text": "Trivial usage of functional expression" + }, + "fullDescription": { + "text": "Reports functional interface methods calls that are directly invoked on the definition of the lambda, method reference, or anonymous class. Such method calls can be replaced with the body of the functional interface implementation. Example: 'boolean contains(List names, String name) {\n return ((Predicate)x -> {\n return names.contains(x);\n }).test(name);\n }' When the quick-fix is applied, the method call changes to: 'boolean contains(List names, String name) {\n return names.contains(name);\n }'", + "markdown": "Reports functional interface methods calls that are directly invoked on the definition of the lambda, method reference, or anonymous class. Such method calls can be replaced with the body of the functional interface implementation.\n\n**Example:**\n\n\n boolean contains(List names, String name) {\n return ((Predicate)x -> {\n return names.contains(x);\n }).test(name);\n }\n\nWhen the quick-fix is applied, the method call changes to:\n\n\n boolean contains(List names, String name) {\n return names.contains(name);\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 15, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EnumClass", + "shortDescription": { + "text": "Enumerated class" + }, + "fullDescription": { + "text": "Reports enum classes. Such statements are not supported in Java 1.4 and earlier JVM.", + "markdown": "Reports **enum** classes. Such statements are not supported in Java 1.4 and earlier JVM." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level issues", + "index": 60, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MismatchedStringBuilderQueryUpdate", + "shortDescription": { + "text": "Mismatched query and update of 'StringBuilder'" + }, + "fullDescription": { + "text": "Reports 'StringBuilder' or 'StringBuffer' objects whose contents are read but not written to, or written to but not read. Such inconsistent reads and writes are pointless and probably indicate dead, incomplete, or erroneous code. Example: 'public void m1() {\n StringBuilder sb = new StringBuilder();\n sb.append(\"a\");\n }'", + "markdown": "Reports `StringBuilder` or `StringBuffer` objects whose contents are read but not written to, or written to but not read.\n\nSuch inconsistent reads and writes are pointless and probably indicate\ndead, incomplete, or erroneous code.\n\n**Example:**\n\n\n public void m1() {\n StringBuilder sb = new StringBuilder();\n sb.append(\"a\");\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AnonymousHasLambdaAlternative", + "shortDescription": { + "text": "Anonymous type has shorter lambda alternative" + }, + "fullDescription": { + "text": "Reports anonymous classes which could be transformed to a constructor or a factory method call with a lambda expression argument. The following classes are reported by this inspection: Anonymous classes extending 'ThreadLocal' which have an 'initialValue()' method (can be replaced with 'ThreadLocal.withInitial') Anonymous classes extending 'Thread' which have a 'run()' method (can be replaced with 'new Thread(Runnable)' Example: 'new Thread() {\n @Override\n public void run() {\n System.out.println(\"Hello from thread!\");\n }\n }.start();' After the quick-fix is applied: 'new Thread(() -> {\n System.out.println(\"Hello from thread!\");\n }).start();'", + "markdown": "Reports anonymous classes which could be transformed to a constructor or a factory method call with a lambda expression argument.\n\nThe following classes are reported by this inspection:\n\n* Anonymous classes extending `ThreadLocal` which have an `initialValue()` method (can be replaced with `ThreadLocal.withInitial`)\n* Anonymous classes extending `Thread` which have a `run()` method (can be replaced with `new Thread(Runnable)`\n\nExample:\n\n\n new Thread() {\n @Override\n public void run() {\n System.out.println(\"Hello from thread!\");\n }\n }.start();\n\nAfter the quick-fix is applied:\n\n\n new Thread(() -> {\n System.out.println(\"Hello from thread!\");\n }).start();\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 59, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FinalizeNotProtected", + "shortDescription": { + "text": "'finalize()' should be protected, not public" + }, + "fullDescription": { + "text": "Reports any implementations of the 'Object.finalize()' method that are declared 'public'. According to the contract of the 'Object.finalize()', only the garbage collector calls this method. Making this method public may be confusing, because it means that the method can be used from other code. A quick-fix is provided to make the method 'protected', to prevent it from being invoked from other classes. Example: 'class X {\n public void finalize() {\n /* ... */\n }\n }' After the quick-fix is applied: 'class X {\n protected void finalize() {\n /* ... */\n }\n }'", + "markdown": "Reports any implementations of the `Object.finalize()` method that are declared `public`.\n\n\nAccording to the contract of the `Object.finalize()`, only the garbage\ncollector calls this method. Making this method public may be confusing, because it\nmeans that the method can be used from other code.\n\n\nA quick-fix is provided to make the method `protected`, to prevent it from being invoked\nfrom other classes.\n\n**Example:**\n\n\n class X {\n public void finalize() {\n /* ... */\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class X {\n protected void finalize() {\n /* ... */\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Finalization", + "index": 62, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExtendsThread", + "shortDescription": { + "text": "Class directly extends 'Thread'" + }, + "fullDescription": { + "text": "Reports classes that directly extend 'java.lang.Thread'. It is usually recommended to prefer composition over inheritance to create more reusable code that is easier to modify later. Example: 'class MainThread extends Thread {\n }'", + "markdown": "Reports classes that directly extend `java.lang.Thread`. It is usually recommended to prefer composition over inheritance to create more reusable code that is easier to modify later.\n\n**Example:**\n\n\n class MainThread extends Thread {\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LogStatementGuardedByLogCondition", + "shortDescription": { + "text": "Logging call not guarded by log condition" + }, + "fullDescription": { + "text": "Reports logging calls with non-constant arguments that are not surrounded by a guard condition. The evaluation of the arguments of a logging call can be expensive. Surrounding a logging call with a guard clause prevents that cost when logging is disabled for the level used by the logging statement. This is especially useful for the least serious level (trace, debug, finest) of logging calls, because those are most often disabled in a production environment. Example: 'public class Principal {\n void bad(Object object) {\n if (true) {\n LOG.debug(\"log log log \" + expensiveCalculation(object));\n }\n LOG.debug(\"some more logging \" + expensiveCalculation(1));\n }\n\n void good(Object) {\n if (LOG.isDebug()) {\n LOG.debug(\"value: \" + expensiveCalculation(object));\n }\n }\n }' Configure the inspection: Use the Logger class name field to specify the logger class name used. Use the table to specify the logging methods this inspection should warn on, with the corresponding log condition text. Use the Flag all unguarded logging calls option to have the inspection flag all unguarded log calls, not only those with non-constant arguments.", + "markdown": "Reports logging calls with non-constant arguments that are not surrounded by a guard condition. The evaluation of the arguments of a logging call can be expensive. Surrounding a logging call with a guard clause prevents that cost when logging is disabled for the level used by the logging statement. This is especially useful for the least serious level (trace, debug, finest) of logging calls, because those are most often disabled in a production environment.\n\n**Example:**\n\n\n public class Principal {\n void bad(Object object) {\n if (true) {\n LOG.debug(\"log log log \" + expensiveCalculation(object));\n }\n LOG.debug(\"some more logging \" + expensiveCalculation(1));\n }\n\n void good(Object) {\n if (LOG.isDebug()) {\n LOG.debug(\"value: \" + expensiveCalculation(object));\n }\n }\n }\n\n\nConfigure the inspection:\n\n* Use the **Logger class name** field to specify the logger class name used.\n*\n Use the table to specify the logging methods this inspection should warn on, with the corresponding log condition text.\n\n* Use the **Flag all unguarded logging calls** option to have the inspection flag all unguarded log calls, not only those with non-constant arguments." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Logging", + "index": 64, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ModuleWithTooManyClasses", + "shortDescription": { + "text": "Module with too many classes" + }, + "fullDescription": { + "text": "Reports modules that contain too many classes. Overly large modules may indicate a lack of design clarity. Java, Kotlin and Groovy classes are counted. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor. Use the Maximum number of classes field to specify the maximum number of classes a module may have.", + "markdown": "Reports modules that contain too many classes. Overly large modules may indicate a lack of design clarity. Java, Kotlin and Groovy classes are counted.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor.\n\nUse the **Maximum number of classes** field to specify the maximum number of classes a module may have." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Modularization issues", + "index": 65, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifyOptionalCallChains", + "shortDescription": { + "text": "Optional call chain can be simplified" + }, + "fullDescription": { + "text": "Reports Optional call chains that can be simplified. Here are several examples of possible simplifications: 'optional.map(x -> true).orElse(false)' → 'optional.isPresent()' 'optional.map(x -> Optional.of(x.trim())).orElseGet(Optional::empty)' → 'optional.map(String::trim)' 'optional.map(x -> (String)x).orElse(null)' → '(String) optional.orElse(null)' 'Optional.ofNullable(optional.orElse(null))' → 'optional' 'val = optional.orElse(null); val != null ? val : defaultExpr' → 'optional.orElse(defaultExpr)' 'val = optional.orElse(null); if(val != null) expr(val)' → 'optional.ifPresent(val -> expr(val))' New in 2017.2", + "markdown": "Reports **Optional** call chains that can be simplified. Here are several examples of possible simplifications:\n\n* `optional.map(x -> true).orElse(false)` → `optional.isPresent()`\n* `optional.map(x -> Optional.of(x.trim())).orElseGet(Optional::empty)` → `optional.map(String::trim)`\n* `optional.map(x -> (String)x).orElse(null)` → `(String) optional.orElse(null)`\n* `Optional.ofNullable(optional.orElse(null))` → `optional`\n* `val = optional.orElse(null); val != null ? val : defaultExpr ` → `optional.orElse(defaultExpr)`\n* `val = optional.orElse(null); if(val != null) expr(val) ` → `optional.ifPresent(val -> expr(val))`\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InfiniteLoopStatement", + "shortDescription": { + "text": "Infinite loop statement" + }, + "fullDescription": { + "text": "Reports 'for', 'while', or 'do' statements that can only exit by throwing an exception. While such statements may be correct, they often happen due to coding errors. Example: 'for (;;) {\n }' Use the Ignore when placed in Thread.run option to ignore the infinite loop statements inside 'Thread.run'. It may be useful for the daemon threads. Example: 'new Thread(() -> {\n while (true) {\n }\n }).start();'", + "markdown": "Reports `for`, `while`, or `do` statements that can only exit by throwing an exception. While such statements may be correct, they often happen due to coding errors.\n\nExample:\n\n\n for (;;) {\n }\n\n\nUse the **Ignore when placed in Thread.run** option to ignore the\ninfinite loop statements inside `Thread.run`.\nIt may be useful for the daemon threads.\n\nExample:\n\n\n new Thread(() -> {\n while (true) {\n }\n }).start();\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavadocHtmlLint", + "shortDescription": { + "text": "HTML problems in Javadoc (DocLint)" + }, + "fullDescription": { + "text": "Reports the same HTML issues in the Javadoc comments that have been reported by DocLint since Java 8. The inspection detects the following issues: Self-closed, unclosed, unknown, misplaced, or empty tag Unknown or wrong attribute Misplaced text Example: '/**\n * Unknown tag: List\n * Unclosed tag: error\n * Misplaced text or tag:
    • one
    • ,
    • two
    \n * Wrong or empty attribute:
    \n * Self-closed tag:
    \n * ...\n */\nvoid sample(){ }'", + "markdown": "Reports the same HTML issues in the Javadoc comments that have been reported by DocLint since Java 8.\n\nThe inspection detects the following issues:\n\n* Self-closed, unclosed, unknown, misplaced, or empty tag\n* Unknown or wrong attribute\n* Misplaced text\n\nExample:\n\n\n /**\n * Unknown tag: List\n * Unclosed tag: error
    \n * Misplaced text or tag:
    • one
    • ,
    • two
    \n * Wrong or empty attribute: \n * Self-closed tag:
    \n * ...\n */\n void sample(){ }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 45, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RandomDoubleForRandomInteger", + "shortDescription": { + "text": "Using 'Random.nextDouble()' to get random integer" + }, + "fullDescription": { + "text": "Reports calls to 'java.util.Random.nextDouble()' that are used to create a positive integer number by multiplying the call by a factor and casting to an integer. For generating a random positive integer in a range, 'java.util.Random.nextInt(int)' is simpler and more efficient. Example: 'int getRandomInt() {\n return (int) ((new Random()).nextDouble() * SIZE);\n }'\n After the quick-fix is applied: 'int getRandomInt() {\n return (new Random()).nextInt(SIZE);\n }'", + "markdown": "Reports calls to `java.util.Random.nextDouble()` that are used to create a positive integer number by multiplying the call by a factor and casting to an integer.\n\n\nFor generating a random positive integer in a range,\n`java.util.Random.nextInt(int)` is simpler and more efficient.\n\n**Example:**\n\n\n int getRandomInt() {\n return (int) ((new Random()).nextDouble() * SIZE);\n }\n \nAfter the quick-fix is applied:\n\n\n int getRandomInt() {\n return (new Random()).nextInt(SIZE);\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousArrayCast", + "shortDescription": { + "text": "Suspicious array cast" + }, + "fullDescription": { + "text": "Reports suspicious array casts. An array cast is considered suspicious when it casts to a more specific array type. Such a cast is legal at compile time but may fail with a 'ClassCastException' at runtime. Example: 'Number[] numbers = new Number[]{1L, 2L, 4L};\n Long[] longs = (Long[])numbers;'", + "markdown": "Reports suspicious array casts. An array cast is considered suspicious when it casts to a more specific array type. Such a cast is legal at compile time but may fail with a `ClassCastException` at runtime.\n\n**Example:**\n\n\n Number[] numbers = new Number[]{1L, 2L, 4L};\n Long[] longs = (Long[])numbers;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassUnconnectedToPackage", + "shortDescription": { + "text": "Class independent of its package" + }, + "fullDescription": { + "text": "Reports classes that don't depend on any other class in their package and are not a dependency for any other class in their package. Such classes indicate ad-hoc or incoherent packaging strategies and often may be profitably moved. Classes that are the only class in their package are not reported. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports classes that don't depend on any other class in their package and are not a dependency for any other class in their package. Such classes indicate ad-hoc or incoherent packaging strategies and often may be profitably moved. Classes that are the only class in their package are not reported.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Packaging issues", + "index": 38, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExceptionNameDoesntEndWithException", + "shortDescription": { + "text": "Exception class name does not end with 'Exception'" + }, + "fullDescription": { + "text": "Reports exception classes whose names don't end with 'Exception'. Example: 'class NotStartedEx extends Exception {}' A quick-fix that renames such classes is available only in the editor.", + "markdown": "Reports exception classes whose names don't end with `Exception`.\n\n**Example:** `class NotStartedEx extends Exception {}`\n\nA quick-fix that renames such classes is available only in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Class", + "index": 67, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ZeroLengthArrayInitialization", + "shortDescription": { + "text": "Zero-length array allocation" + }, + "fullDescription": { + "text": "Reports allocations of arrays with known lengths of zero. Since array lengths in Java are non-modifiable, it is almost always possible to share zero-length arrays, rather than repeatedly allocate new ones. Such sharing may provide useful optimizations in the program runtime or footprint. Note that the inspection does not report zero-length arrays allocated as static final fields, since those arrays are assumed to be used for implementing array sharing.", + "markdown": "Reports allocations of arrays with known lengths of zero.\n\n\nSince array lengths in Java are non-modifiable, it is almost always possible to share zero-length arrays, rather than repeatedly\nallocate new ones. Such sharing may provide useful optimizations in the program runtime or footprint.\n\n\nNote that the inspection does not report zero-length arrays allocated as static final fields,\nsince those arrays are assumed to be used for implementing array sharing." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Memory", + "index": 69, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonFinalStaticVariableUsedInClassInitialization", + "shortDescription": { + "text": "Non-final static field is used during class initialization" + }, + "fullDescription": { + "text": "Reports the use of non-'final' 'static' variables during class initialization. In such cases, the code semantics may become dependent on the class creation order. Additionally, such cases may lead to the use of variables before their initialization, and generally cause difficult and confusing bugs. Example: 'class Foo {\n public static int bar = 0;\n\n static {\n System.out.println(bar);\n }\n }'", + "markdown": "Reports the use of non-`final` `static` variables during class initialization.\n\nIn such cases, the code semantics may become dependent on the class creation order. Additionally, such cases may lead to the use of\nvariables before their initialization, and generally cause difficult and confusing bugs.\n\n**Example:**\n\n\n class Foo {\n public static int bar = 0;\n\n static {\n System.out.println(bar);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Initialization", + "index": 28, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DivideByZero", + "shortDescription": { + "text": "Division by zero" + }, + "fullDescription": { + "text": "Reports division by zero or remainder by zero. Such expressions will produce an 'Infinity', '-Infinity' or 'NaN' result for doubles or floats, and will throw an 'ArithmeticException' for integers. When the expression has a 'NaN' result, the fix suggests replacing the division expression with the 'NaN' constant.", + "markdown": "Reports division by zero or remainder by zero. Such expressions will produce an `Infinity`, `-Infinity` or `NaN` result for doubles or floats, and will throw an `ArithmeticException` for integers.\n\nWhen the expression has a `NaN` result, the fix suggests replacing the division expression with the `NaN` constant." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThreadStopSuspendResume", + "shortDescription": { + "text": "Call to 'Thread.stop()', 'suspend()' or 'resume()'" + }, + "fullDescription": { + "text": "Reports calls to 'Thread.stop()', 'Thread.suspend()', and 'Thread.resume()'. These calls are inherently prone to data corruption and deadlocks, and their use is strongly discouraged. It is better to use cooperative cancellation instead of 'stop', and interruption instead of direct calls to 'suspend' and 'resume'.", + "markdown": "Reports calls to `Thread.stop()`, `Thread.suspend()`, and `Thread.resume()`.\n\n\nThese calls are inherently prone to data corruption and deadlocks, and their use is strongly discouraged.\nIt is better to use cooperative cancellation instead of `stop`, and\ninterruption instead of direct calls to `suspend` and `resume`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryTemporaryOnConversionFromString", + "shortDescription": { + "text": "Unnecessary temporary object in conversion from 'String'" + }, + "fullDescription": { + "text": "Reports unnecessary creation of temporary objects when converting from 'String' to primitive types. Example: 'new Integer(\"3\").intValue()' After the quick-fix is applied: 'Integer.valueOf(\"3\")'", + "markdown": "Reports unnecessary creation of temporary objects when converting from `String` to primitive types.\n\n**Example:**\n\n\n new Integer(\"3\").intValue()\n\nAfter the quick-fix is applied:\n\n\n Integer.valueOf(\"3\")\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MissingSerialAnnotation", + "shortDescription": { + "text": "'@Serial' annotation could be used" + }, + "fullDescription": { + "text": "Reports methods and fields in the 'Serializable' and 'Externalizable' classes that are suitable to be annotated with the 'java.io.Serial' annotation. The quick-fix adds the annotation. Example: 'class Main implements Serializable {\n private static final long serialVersionUID = 7874493593505141603L;\n\n private void writeObject(ObjectOutputStream out) throws IOException {\n }\n}' After the quick-fix is applied: 'class Main implements Serializable {\n @Serial\n private static final long serialVersionUID = 7874493593505141603L;\n\n @Serial\n private void writeObject(ObjectOutputStream out) throws IOException {\n }\n}' Example: 'class Main implements Externalizable {\n protected Object readResolve() throws ObjectStreamException {\n return \"SomeObject\";\n }\n }' After the quick-fix is applied: 'class Main implements Externalizable {\n @Serial\n protected Object readResolve() throws ObjectStreamException {\n return \"SomeObject\";\n }\n }' For more information about all possible cases, refer the documentation for 'java.io.Serial'. This inspection only reports if the language level of the project or module is 14 or higher. New in 2020.3", + "markdown": "Reports methods and fields in the `Serializable` and `Externalizable` classes that are suitable to be annotated with the `java.io.Serial` annotation. The quick-fix adds the annotation.\n\n**Example:**\n\n\n class Main implements Serializable {\n private static final long serialVersionUID = 7874493593505141603L;\n\n private void writeObject(ObjectOutputStream out) throws IOException {\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Main implements Serializable {\n @Serial\n private static final long serialVersionUID = 7874493593505141603L;\n\n @Serial\n private void writeObject(ObjectOutputStream out) throws IOException {\n }\n }\n\n**Example:**\n\n\n class Main implements Externalizable {\n protected Object readResolve() throws ObjectStreamException {\n return \"SomeObject\";\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Main implements Externalizable {\n @Serial\n protected Object readResolve() throws ObjectStreamException {\n return \"SomeObject\";\n }\n }\n\nFor more information about all possible cases, refer the documentation for `java.io.Serial`.\n\nThis inspection only reports if the language level of the project or module is 14 or higher.\n\nNew in 2020.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 18, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MultipleExceptionsDeclaredOnTestMethod", + "shortDescription": { + "text": "Multiple exceptions declared on test method" + }, + "fullDescription": { + "text": "Reports JUnit test method 'throws' clauses with more than one exception. Such clauses are unnecessarily verbose. Test methods will not be called from other project code, so there is no need to handle these exceptions separately. For example: '@Test\n public void testReflection() throws NoSuchMethodException,\n InvocationTargetException, IllegalAccessException {\n String result = (String) String.class.getMethod(\"trim\")\n .invoke(\" hello \");\n assertEquals(\"hello\", result);\n }' A quick fix is provided to replace the exception declarations with a single exception: '@Test\n public void testReflection() throws Exception {\n String result = (String) String.class.getMethod(\"trim\")\n .invoke(\" hello \");\n assertEquals(\"hello\", result);\n }'", + "markdown": "Reports JUnit test method `throws` clauses with more than one exception. Such clauses are unnecessarily verbose. Test methods will not be called from other project code, so there is no need to handle these exceptions separately.\n\nFor example:\n\n\n @Test\n public void testReflection() throws NoSuchMethodException,\n InvocationTargetException, IllegalAccessException {\n String result = (String) String.class.getMethod(\"trim\")\n .invoke(\" hello \");\n assertEquals(\"hello\", result);\n }\n\nA quick fix is provided to replace the exception declarations with a single exception:\n\n\n @Test\n public void testReflection() throws Exception {\n String result = (String) String.class.getMethod(\"trim\")\n .invoke(\" hello \");\n assertEquals(\"hello\", result);\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/JUnit", + "index": 74, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringConcatenationMissingWhitespace", + "shortDescription": { + "text": "Whitespace may be missing in string concatenation" + }, + "fullDescription": { + "text": "Reports string concatenations with missing whitespaces, that is where the left-hand side ends with a Unicode letter or digit and the right-hand side starts with a Unicode letter or digit. Example: 'String sql = \"SELECT column\" +\n \"FROM table\";' Use the Ignore concatenations with variable strings option to only report when both the left and right side of the concatenation are literals.", + "markdown": "Reports string concatenations with missing whitespaces, that is where the left-hand side ends with a Unicode letter or digit and the right-hand side starts with a Unicode letter or digit.\n\n**Example:**\n\n\n String sql = \"SELECT column\" +\n \"FROM table\";\n\n\nUse the **Ignore concatenations with variable strings** option to only report\nwhen both the left and right side of the concatenation are literals." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StandardVariableNames", + "shortDescription": { + "text": "Standard variable names" + }, + "fullDescription": { + "text": "Reports variables with 'standard' names that do not correspond to their types. Such names may be confusing. There are the following standard names for specific types: i, j, k, m, n - 'int' f - 'float' d - 'double' b - 'byte' c, ch - 'char' l - 'long' s, str - 'String' Rename quick-fix is suggested only in the editor. Use the option to ignore parameter names which are identical to the parameter name from a direct super method.", + "markdown": "Reports variables with 'standard' names that do not correspond to their types. Such names may be confusing. There are the following standard names for specific types:\n\n* i, j, k, m, n - `int`\n* f - `float`\n* d - `double`\n* b - `byte`\n* c, ch - `char`\n* l - `long`\n* s, str - `String`\n\nRename quick-fix is suggested only in the editor.\n\n\nUse the option to ignore parameter names which are identical to the parameter name from a direct super method." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions", + "index": 50, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseOfConcreteClass", + "shortDescription": { + "text": "Use of concrete class" + }, + "fullDescription": { + "text": "Reports usages of concrete classes, rather than interfaces. Such declarations may represent a failure of abstraction and may make testing more difficult. Declarations whose classes come from system or third-party libraries will not be reported by this inspection. Casts, instanceofs, and local variables are not reported in 'equals()' method implementations. Also, casts are not reported in 'clone()' method implementations. Example: 'interface Entity {}\n class EntityImpl implements Entity {}\n\n void processObject(Object obj) {\n // warning: instanceof of the concrete class\n if (obj instanceof EntityImpl) {\n // warning: cast to the concrete class,\n // rather than the interface\n processEntity((EntityImpl)obj);\n }\n }\n // warning: parameter of concrete class\n void processEntity(EntityImpl obj) {\n }' Use the Ignore abstract class type option to ignore casts to abstract classes. Use the subsequent options to control contexts where the problem is reported.", + "markdown": "Reports usages of concrete classes, rather than interfaces. Such declarations may represent a failure of abstraction and may make testing more difficult.\n\n\nDeclarations whose classes come from system or third-party libraries will not be reported by this inspection.\nCasts, instanceofs, and local variables are not reported in `equals()` method implementations.\nAlso, casts are not reported in `clone()` method implementations.\n\nExample:\n\n\n interface Entity {}\n class EntityImpl implements Entity {}\n\n void processObject(Object obj) {\n // warning: instanceof of the concrete class\n if (obj instanceof EntityImpl) {\n // warning: cast to the concrete class,\n // rather than the interface\n processEntity((EntityImpl)obj);\n }\n }\n // warning: parameter of concrete class\n void processEntity(EntityImpl obj) {\n }\n\n\nUse the **Ignore abstract class type** option to ignore casts to abstract classes.\n\nUse the subsequent options to control contexts where the problem is reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 75, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantLabeledSwitchRuleCodeBlock", + "shortDescription": { + "text": "Labeled switch rule has redundant code block" + }, + "fullDescription": { + "text": "Reports labeled rules of 'switch' statements or 'switch' expressions that have a redundant code block. Example: 'String s = switch (n) {\n case 1 -> { yield Integer.toString(n); }\n default -> \"default\";\n };' After the quick-fix is applied: 'String s = switch (n) {\n case 1 -> Integer.toString(n);\n default -> \"default\";\n };' This inspection only reports if the language level of the project or module is 14 or higher. New in 2019.1", + "markdown": "Reports labeled rules of `switch` statements or `switch` expressions that have a redundant code block.\n\nExample:\n\n\n String s = switch (n) {\n case 1 -> { yield Integer.toString(n); }\n default -> \"default\";\n };\n\nAfter the quick-fix is applied:\n\n\n String s = switch (n) {\n case 1 -> Integer.toString(n);\n default -> \"default\";\n };\n\nThis inspection only reports if the language level of the project or module is 14 or higher.\n\nNew in 2019.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IOStreamConstructor", + "shortDescription": { + "text": "'InputStream' and 'OutputStream' can be constructed using 'Files' methods" + }, + "fullDescription": { + "text": "Reports 'new FileInputStream()' or 'new FileOutputStream()' expressions that can be replaced with 'Files.newInputStream()' or 'Files.newOutputStream()' calls respectively. The streams created using 'Files' methods are usually more efficient than those created by stream constructors. Example: 'InputStream is = new BufferedInputStream(new FileInputStream(file));' After the quick-fix is applied: 'InputStream is = new BufferedInputStream(Files.newInputStream(file.toPath()));' This inspection does not show warning if the language level 10 or higher, but the quick-fix is still available. This inspection only reports if the language level of the project or module is 7 or higher. New in 2022.1", + "markdown": "Reports `new FileInputStream()` or `new FileOutputStream()` expressions that can be replaced with `Files.newInputStream()` or `Files.newOutputStream()` calls respectively. \nThe streams created using `Files` methods are usually more efficient than those created by stream constructors.\n\nExample:\n\n\n InputStream is = new BufferedInputStream(new FileInputStream(file));\n\nAfter the quick-fix is applied:\n\n\n InputStream is = new BufferedInputStream(Files.newInputStream(file.toPath()));\n\nThis inspection does not show warning if the language level 10 or higher, but the quick-fix is still available.\n\nThis inspection only reports if the language level of the project or module is 7 or higher.\n\nNew in 2022.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssignmentToForLoopParameter", + "shortDescription": { + "text": "Assignment to 'for' loop parameter" + }, + "fullDescription": { + "text": "Reports assignment to, or modification of a 'for' loop parameter inside the body of the loop. Although occasionally intended, this construct may be confusing and is often the result of a typo or a wrong variable being used. The quick-fix adds a declaration of a new variable. Example: 'for (String s : list) {\n // Warning: s is changed inside the loop\n s = s.trim();\n System.out.println(\"String: \" + s);\n }' After the quick-fix is applied: 'for (String s : list) {\n String trimmed = s.trim();\n System.out.println(\"String: \" + trimmed);\n }' Assignments in basic 'for' loops without an update statement are not reported. In such cases the assignment is probably intended and can't be easily moved to the update part of the 'for' loop. Example: 'for (int i = 0; i < list.size(); ) {\n if (element.equals(list.get(i))) {\n list.remove(i);\n } else {\n // modification of for loop parameter is not reported\n // as there's no update statement\n i++;\n }\n }' Use the Check enhanced 'for' loop parameters option to specify whether modifications of enhanced 'for' loop parameters should be also reported.", + "markdown": "Reports assignment to, or modification of a `for` loop parameter inside the body of the loop.\n\nAlthough occasionally intended, this construct may be confusing and is often the result of a typo or a wrong variable being used.\n\nThe quick-fix adds a declaration of a new variable.\n\n**Example:**\n\n\n for (String s : list) {\n // Warning: s is changed inside the loop\n s = s.trim();\n System.out.println(\"String: \" + s);\n }\n\nAfter the quick-fix is applied:\n\n\n for (String s : list) {\n String trimmed = s.trim();\n System.out.println(\"String: \" + trimmed);\n }\n\nAssignments in basic `for` loops without an update statement are not reported.\nIn such cases the assignment is probably intended and can't be easily moved to the update part of the `for` loop.\n\n**Example:**\n\n\n for (int i = 0; i < list.size(); ) {\n if (element.equals(list.get(i))) {\n list.remove(i);\n } else {\n // modification of for loop parameter is not reported\n // as there's no update statement\n i++;\n }\n }\n\nUse the **Check enhanced 'for' loop parameters** option to specify whether modifications of enhanced `for` loop parameters\nshould be also reported." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Assignment issues", + "index": 36, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java9CollectionFactory", + "shortDescription": { + "text": "Immutable collection creation can be replaced with collection factory call" + }, + "fullDescription": { + "text": "Reports 'java.util.Collections' unmodifiable collection calls that can be converted to newer collection factory methods. These can be replaced with e.g. 'List.of()' or 'Set.of()' introduced in Java 9 or 'List.copyOf()' introduced in Java 10. Note that in contrast to 'java.util.Collections' methods, Java 9 collection factory methods: Do not accept 'null' values. Require unique set elements and map keys. Do not accept 'null' arguments to query methods like 'List.contains()' or 'Map.get()' of the collections returned. When these cases are violated, exceptions are thrown. This can change the semantics of the code after the migration. Example: 'List even = Collections.unmodifiableList(\n Arrays.asList(2, 4, 6, 8, 10, 2));\n List evenCopy = Collections.unmodifiableList(\n new ArrayList<>(list1));' After the quick-fix is applied: 'List even = List.of(2, 4, 6, 8, 10, 2);\n List evenCopy = List.copyOf(list);' This inspection only reports if the language level of the project or module is 9 or higher. Use the Do not warn when content is non-constant option to report only in cases when the supplied arguments are compile-time constants. This reduces the chances that the behavior changes, because it's not always possible to statically check whether original elements are unique and not 'null'. Use the Suggest 'Map.ofEntries' option to suggest replacing unmodifiable maps with more than 10 entries with 'Map.ofEntries()'. New in 2017.2", + "markdown": "Reports `java.util.Collections` unmodifiable collection calls that can be converted to newer collection factory methods. These can be replaced with e.g. `List.of()` or `Set.of()` introduced in Java 9 or `List.copyOf()` introduced in Java 10.\n\nNote that in contrast to `java.util.Collections` methods, Java 9 collection factory methods:\n\n* Do not accept `null` values.\n* Require unique set elements and map keys.\n* Do not accept `null` arguments to query methods like `List.contains()` or `Map.get()` of the collections returned.\n\nWhen these cases are violated, exceptions are thrown.\nThis can change the semantics of the code after the migration.\n\nExample:\n\n\n List even = Collections.unmodifiableList(\n Arrays.asList(2, 4, 6, 8, 10, 2));\n List evenCopy = Collections.unmodifiableList(\n new ArrayList<>(list1));\n\nAfter the quick-fix is applied:\n\n\n List even = List.of(2, 4, 6, 8, 10, 2);\n List evenCopy = List.copyOf(list);\n\nThis inspection only reports if the language level of the project or module is 9 or higher.\n\n\nUse the **Do not warn when content is non-constant** option to report only in cases when the supplied arguments are compile-time constants.\nThis reduces the chances that the behavior changes,\nbecause it's not always possible to statically check whether original elements are unique and not `null`.\n\n\nUse the **Suggest 'Map.ofEntries'** option to suggest replacing unmodifiable maps with more than 10 entries with `Map.ofEntries()`.\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 9", + "index": 76, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExceptionFromCatchWhichDoesntWrap", + "shortDescription": { + "text": "'throw' inside 'catch' block which ignores the caught exception" + }, + "fullDescription": { + "text": "Reports exceptions that are thrown from inside 'catch' blocks but do not \"wrap\" the caught exception. When an exception is thrown in response to an exception, wrapping the initial exception prevents losing valuable context information, such as stack frames and line numbers. Example: '...\n catch (IOException e) {\n closeAllConnections();\n throw new ConnectException(\"Connection problem.\"); // warning: 'throw' inside 'catch' block ignores the caught exception 'e'\n }' Configure the inspection: Use the Ignore if result of exception method call is used option to indicate whether the inspection should ignore exceptions whose argument is the result of a method call on the original exception, such as 'getMessage()'. Use the Ignore if thrown exception cannot wrap an exception option to ignore 'throw' statements that throw exceptions without a constructor that accepts a 'Throwable' cause.", + "markdown": "Reports exceptions that are thrown from inside `catch` blocks but do not \"wrap\" the caught exception.\n\nWhen an exception is thrown in response to an exception, wrapping the initial exception prevents losing valuable context information,\nsuch as stack frames and line numbers.\n\n**Example:**\n\n\n ...\n catch (IOException e) {\n closeAllConnections();\n throw new ConnectException(\"Connection problem.\"); // warning: 'throw' inside 'catch' block ignores the caught exception 'e'\n }\n\nConfigure the inspection:\n\n* Use the **Ignore if result of exception method call is used** option to indicate whether the inspection should ignore exceptions whose argument is the result of a method call on the original exception, such as `getMessage()`.\n* Use the **Ignore if thrown exception cannot wrap an exception** option to ignore `throw` statements that throw exceptions without a constructor that accepts a `Throwable` cause." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodOnlyUsedFromInnerClass", + "shortDescription": { + "text": "Private method only used from inner class" + }, + "fullDescription": { + "text": "Reports 'private' methods which are only called from an inner class of the class containing the method. Such methods can be safely moved into that inner class. Example: 'public class Outer {\n public static void main(String[] args) {\n new Inner().run(args[0]);\n }\n\n static class Inner {\n void run(String arg) {\n // Method isEmpty() is used from Inner class only\n // consider moving it to the Inner class\n if (!isEmpty(arg)) {\n System.out.println(\"Argument is supplied\");\n }\n }\n }\n\n private static boolean isEmpty(String s) {\n return s != null && s.trim().isEmpty();\n }\n}' Use the first checkbox below to ignore 'private' methods which are called from an anonymous or local class. Use the third checkbox to only report 'static' methods.", + "markdown": "Reports `private` methods which are only called from an inner class of the class containing the method. Such methods can be safely moved into that inner class.\n\nExample:\n\n\n public class Outer {\n public static void main(String[] args) {\n new Inner().run(args[0]);\n }\n\n static class Inner {\n void run(String arg) {\n // Method isEmpty() is used from Inner class only\n // consider moving it to the Inner class\n if (!isEmpty(arg)) {\n System.out.println(\"Argument is supplied\");\n }\n }\n }\n\n private static boolean isEmpty(String s) {\n return s != null && s.trim().isEmpty();\n }\n }\n\n\nUse the first checkbox below to ignore `private`\nmethods which are called from an anonymous or local class.\n\n\nUse the third checkbox to only report `static` methods." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 75, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ComparisonToNaN", + "shortDescription": { + "text": "Comparison to 'Double.NaN' or 'Float.NaN'" + }, + "fullDescription": { + "text": "Reports any comparisons to 'Double.NaN' or 'Float.NaN'. Such comparisons are never meaningful, as NaN is not equal to anything, including itself. Use the 'Double.isNaN()' or 'Float.isNaN()' methods instead. Example: 'if (x == Double.NaN) {...}' After the quick-fix is applied: 'if (Double.isNaN(x)) {...}'", + "markdown": "Reports any comparisons to `Double.NaN` or `Float.NaN`. Such comparisons are never meaningful, as NaN is not equal to anything, including itself. Use the `Double.isNaN()` or `Float.isNaN()` methods instead.\n\n**Example:**\n\n\n if (x == Double.NaN) {...}\n\nAfter the quick-fix is applied:\n\n\n if (Double.isNaN(x)) {...}\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MultiCatchCanBeSplit", + "shortDescription": { + "text": "Multi-catch can be split into separate catch blocks" + }, + "fullDescription": { + "text": "Reports multi-'catch' sections and suggests splitting them into separate 'catch' blocks. Example: 'try {\n int i = getIndex();\n } catch (NullPointerException|IndexOutOfBoundsException e) {\n e.printStackTrace();\n }' After the quick-fix is applied: 'try {\n int i = getIndex();\n } catch (NullPointerException e) {\n e.printStackTrace();\n } catch (IndexOutOfBoundsException e) {\n e.printStackTrace();\n }' Multi-'catch' appeared in Java 7. This inspection can help to downgrade for backward compatibility with earlier Java versions.", + "markdown": "Reports multi-`catch` sections and suggests splitting them into separate `catch` blocks.\n\nExample:\n\n\n try {\n int i = getIndex();\n } catch (NullPointerException|IndexOutOfBoundsException e) {\n e.printStackTrace();\n }\n\nAfter the quick-fix is applied:\n\n\n try {\n int i = getIndex();\n } catch (NullPointerException e) {\n e.printStackTrace();\n } catch (IndexOutOfBoundsException e) {\n e.printStackTrace();\n }\n\n\n*Multi-* `catch` appeared in Java 7.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ResultSetIndexZero", + "shortDescription": { + "text": "Use of index 0 in JDBC ResultSet" + }, + "fullDescription": { + "text": "Reports attempts to access column 0 of 'java.sql.ResultSet' or 'java.sql.PreparedStatement'. For historical reasons, columns of 'java.sql.ResultSet' and 'java.sql.PreparedStatement' are numbered starting with 1, rather than with 0, and accessing column 0 is a common error in JDBC programming. Example: 'String getName(ResultSet rs) {\n return rs.getString(0);\n }'", + "markdown": "Reports attempts to access column 0 of `java.sql.ResultSet` or `java.sql.PreparedStatement`. For historical reasons, columns of `java.sql.ResultSet` and `java.sql.PreparedStatement` are numbered starting with **1** , rather than with **0** , and accessing column 0 is a common error in JDBC programming.\n\n**Example:**\n\n\n String getName(ResultSet rs) {\n return rs.getString(0);\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConditionCoveredByFurtherCondition", + "shortDescription": { + "text": "Condition is covered by further condition" + }, + "fullDescription": { + "text": "Reports conditions that become redundant as they are completely covered by a subsequent condition. For example, in the 'value != -1 && value > 0' condition, the first part is redundant: if it's false, then the second part is also false. Or in a condition like 'obj != null && obj instanceof String', the null-check is redundant as 'instanceof' operator implies non-nullity. New in 2018.3", + "markdown": "Reports conditions that become redundant as they are completely covered by a subsequent condition.\n\nFor example, in the `value != -1 && value > 0` condition, the first part is redundant:\nif it's false, then the second part is also false.\nOr in a condition like `obj != null && obj instanceof String`,\nthe null-check is redundant as `instanceof` operator implies non-nullity.\n\nNew in 2018.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MetaAnnotationWithoutRuntimeRetention", + "shortDescription": { + "text": "Test annotation without '@Retention(RUNTIME)' annotation" + }, + "fullDescription": { + "text": "Reports annotations with a 'SOURCE' or 'CLASS' retention policy that are supposed to be used by JUnit 5. Such annotations are not available at runtime and most probably their retention policy should be fixed to be accessible through reflection. Note that if the retention policy is not specified, then the default retention policy 'CLASS' is used. Example: '@Testable\n public @interface UnitTest {}' After the quick-fix is applied: '@Retention(RetentionPolicy.RUNTIME)\n @Testable\n public @interface UnitTest {}'", + "markdown": "Reports annotations with a `SOURCE` or `CLASS` retention policy that are supposed to be used by JUnit 5. Such annotations are not available at runtime and most probably their retention policy should be fixed to be accessible through reflection.\n\nNote that if the retention policy is not specified, then the default retention policy `CLASS` is used.\n\n**Example:**\n\n\n @Testable\n public @interface UnitTest {}\n\nAfter the quick-fix is applied:\n\n\n @Retention(RetentionPolicy.RUNTIME)\n @Testable\n public @interface UnitTest {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/JUnit", + "index": 74, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PatternVariableHidesField", + "shortDescription": { + "text": "Pattern variable hides field" + }, + "fullDescription": { + "text": "Reports pattern variables named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the pattern variable when using the identically named field is intended. A quick-fix is suggested to rename the variable. Example: 'class Pointless {\n Point p = new Point();\n\n public void test(Object a) {\n if (a instanceof Point p) {\n System.out.print(\"a is a point (\" + p.x + \", \" + p.y + ')');\n } else {\n System.out.print(\"p is a point (\" + p.x + \", \" + p.y + ')');\n }\n }\n }' New in 2022.2", + "markdown": "Reports pattern variables named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the pattern variable when using the identically named field is intended.\n\n\nA quick-fix is suggested to rename the variable.\n\n**Example:**\n\n\n class Pointless {\n Point p = new Point();\n\n public void test(Object a) {\n if (a instanceof Point p) {\n System.out.print(\"a is a point (\" + p.x + \", \" + p.y + ')');\n } else {\n System.out.print(\"p is a point (\" + p.x + \", \" + p.y + ')');\n }\n }\n }\n\nNew in 2022.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 54, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JoinDeclarationAndAssignmentJava", + "shortDescription": { + "text": "Assignment can be joined with declaration" + }, + "fullDescription": { + "text": "Reports variable assignments that can be joined with a variable declaration. Example: 'int x;\n x = 1;' The quick-fix converts the assignment into an initializer: 'int x = 1;' New in 2018.3", + "markdown": "Reports variable assignments that can be joined with a variable declaration.\n\nExample:\n\n\n int x;\n x = 1;\n\nThe quick-fix converts the assignment into an initializer:\n\n\n int x = 1;\n\nNew in 2018.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryContinue", + "shortDescription": { + "text": "Unnecessary 'continue' statement" + }, + "fullDescription": { + "text": "Reports 'continue' statements if they are the last reachable statements in the loop. These 'continue' statements are unnecessary and can be safely removed. Example: 'for (String element: elements) {\n System.out.println();\n continue;\n }' After the quick-fix is applied: 'for (String element: elements) {\n System.out.println();\n }' The inspection doesn't analyze JSP files. Use the Ignore in then branch of 'if' statement with 'else' branch option to ignore 'continue' statements when they are placed in a 'then' branch of a complete 'if'-'else' statement. Example: 'for (String element: elements) {\n if(element.isEmpty()) {\n continue;\n } else {\n //...\n }\n }'", + "markdown": "Reports `continue` statements if they are the last reachable statements in the loop. These `continue` statements are unnecessary and can be safely removed.\n\nExample:\n\n\n for (String element: elements) {\n System.out.println();\n continue;\n }\n\nAfter the quick-fix is applied:\n\n\n for (String element: elements) {\n System.out.println();\n }\n\nThe inspection doesn't analyze JSP files.\n\n\nUse the **Ignore in then branch of 'if' statement with 'else' branch** option to ignore\n`continue` statements when they are placed in a `then` branch of a complete\n`if`-`else` statement.\n\nExample:\n\n\n for (String element: elements) {\n if(element.isEmpty()) {\n continue;\n } else {\n //...\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InnerClassVariableHidesOuterClassVariable", + "shortDescription": { + "text": "Inner class field hides outer class field" + }, + "fullDescription": { + "text": "Reports inner class fields named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the field from the inner class when using the identically named field of a surrounding class is intended. A quick-fix is suggested to rename the inner class field. Example: 'class Outer {\n private String name;\n\n class Inner {\n private String name;\n }\n }' Use the option to choose whether this inspection should report all name clashes, or only clashes with fields that are visible from the inner class.", + "markdown": "Reports inner class fields named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the field from the inner class when using the identically named field of a surrounding class is intended.\n\nA quick-fix is suggested to rename the inner class field.\n\n**Example:**\n\n\n class Outer {\n private String name;\n\n class Inner {\n private String name;\n }\n }\n\n\nUse the option to choose whether this inspection should report all name clashes,\nor only clashes with fields that are visible from the inner class." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 54, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonThreadSafeLazyInitialization", + "shortDescription": { + "text": "Unsafe lazy initialization of 'static' field" + }, + "fullDescription": { + "text": "Reports 'static' variables that are lazily initialized in a non-thread-safe manner. Lazy initialization of 'static' variables should be done with an appropriate synchronization construct to prevent different threads from performing conflicting initialization. When applicable, a quick-fix, which introduces the lazy initialization holder class idiom, is suggested. This idiom makes use of the fact that the JVM guarantees that a class will not be initialized until it is used. Example: 'class X {\n private static List list;\n\n public List getList() {\n if (list == null) {\n list = List.of(\"one\", \"two\", \"tree\");\n }\n return list;\n }\n }' After the quick-fix is applied: 'class X {\n private static final class ListHolder {\n static final List list = List.of(\"one\", \"two\", \"tree\");\n }\n\n public List getList() {\n return ListHolder.list;\n }\n }'", + "markdown": "Reports `static` variables that are lazily initialized in a non-thread-safe manner.\n\nLazy initialization of `static` variables should be done with an appropriate synchronization construct\nto prevent different threads from performing conflicting initialization.\n\nWhen applicable, a quick-fix, which introduces the\n[lazy initialization holder class idiom](https://en.wikipedia.org/wiki/Initialization_on_demand_holder_idiom), is suggested.\nThis idiom makes use of the fact that the JVM guarantees that a class will not be initialized until it is used.\n\n**Example:**\n\n\n class X {\n private static List list;\n\n public List getList() {\n if (list == null) {\n list = List.of(\"one\", \"two\", \"tree\");\n }\n return list;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class X {\n private static final class ListHolder {\n static final List list = List.of(\"one\", \"two\", \"tree\");\n }\n\n public List getList() {\n return ListHolder.list;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Initialization", + "index": 28, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryModifier", + "shortDescription": { + "text": "Unnecessary modifier" + }, + "fullDescription": { + "text": "Reports redundant modifiers and suggests to remove them. The resulting code will be shorter, but the behaviour and meaning will remain the same. Example 1: '// all code is implicitly strictfp under Java 17 and higher\n strictfp class X {\n\n // inner enums are implicitly static\n static enum Inner {\n A, B, C\n }\n\n // inner records are implicitly static\n static record R() {\n }\n }' Example 2: 'final record R() {\n // all records are implicitly final\n }' Example 3: '// all interfaces are implicitly abstract\n abstract interface Printer {\n\n // all interface members are implicitly public\n public int size();\n\n // all inner classes of interfaces are implicitly static\n static class Inner {}\n }'", + "markdown": "Reports redundant modifiers and suggests to remove them. The resulting code will be shorter, but the behaviour and meaning will remain the same.\n\n**Example 1:**\n\n\n // all code is implicitly strictfp under Java 17 and higher\n strictfp class X {\n\n // inner enums are implicitly static\n static enum Inner {\n A, B, C\n }\n\n // inner records are implicitly static\n static record R() {\n }\n }\n\n**Example 2:**\n\n\n final record R() {\n // all records are implicitly final\n }\n\n**Example 3:**\n\n\n // all interfaces are implicitly abstract\n abstract interface Printer {\n\n // all interface members are implicitly public\n public int size();\n\n // all inner classes of interfaces are implicitly static\n static class Inner {}\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConditionalCanBePushedInsideExpression", + "shortDescription": { + "text": "Conditional can be pushed inside branch expression" + }, + "fullDescription": { + "text": "Reports conditional expressions with 'then' and else branches that are similar enough so that the expression can be moved inside. This action shortens the code. Example: 'double g(int a, int b) {\n return a == b ? Math.cos(0) : Math.cos(1);\n }' After the quick-fix is applied: 'double g(int a, int b) {\n return Math.cos(a == b ? 0 : 1);\n }' New in 2017.2", + "markdown": "Reports conditional expressions with `then` and else branches that are similar enough so that the expression can be moved inside. This action shortens the code.\n\nExample:\n\n\n double g(int a, int b) {\n return a == b ? Math.cos(0) : Math.cos(1);\n }\n\nAfter the quick-fix is applied:\n\n\n double g(int a, int b) {\n return Math.cos(a == b ? 0 : 1);\n }\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CStyleArrayDeclaration", + "shortDescription": { + "text": "C-style array declaration" + }, + "fullDescription": { + "text": "Reports array declarations written in C-style syntax in which the array indicator brackets are placed after the variable name or after the method parameter list. Example: 'public String process(String value[])[] {\n return value;\n }' Most code styles prefer Java-style array declarations in which the array indicator brackets are attached to the type name, for example: 'public String[] process(String[] value) {\n return value;\n }' Configure the inspection: Use the Ignore C-style declarations in variables option to report C-style array declaration of method return types only.", + "markdown": "Reports array declarations written in C-style syntax in which the array indicator brackets are placed after the variable name or after the method parameter list.\n\nExample:\n\n\n public String process(String value[])[] {\n return value;\n }\n\nMost code styles prefer Java-style array declarations in which the array indicator brackets are attached to the type name, for example:\n\n\n public String[] process(String[] value) {\n return value;\n }\n\nConfigure the inspection:\n\n\nUse the **Ignore C-style declarations in variables** option to report C-style array declaration of method return types only." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CloneInNonCloneableClass", + "shortDescription": { + "text": "'clone()' method in non-Cloneable class" + }, + "fullDescription": { + "text": "Reports classes that override the 'clone()' method but don't implement the 'Cloneable' interface. This usually represents a programming error. Use the Only warn on 'public' clone methods option to ignore methods that aren't 'public'. For classes designed to be inherited, you may choose to override 'clone()' and declare it as 'protected' without implementing the 'Cloneable' interface and decide whether to implement the 'Cloneable' interface in subclasses.", + "markdown": "Reports classes that override the `clone()` method but don't implement the `Cloneable` interface. This usually represents a programming error.\n\n\nUse the **Only warn on 'public' clone methods** option to ignore methods that aren't `public`.\n\nFor classes designed to be inherited, you may choose to override `clone()` and declare it as `protected`\nwithout implementing the `Cloneable` interface and decide whether to implement the `Cloneable` interface in subclasses." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Cloning issues", + "index": 80, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java8ListReplaceAll", + "shortDescription": { + "text": "Loop can be replaced with 'List.replaceAll()'" + }, + "fullDescription": { + "text": "Reports loops which can be collapsed into a single 'List.replaceAll()' call. Example: 'for (int i = 0; i < strings.size(); i++) {\n String str = strings.get(i).toLowerCase();\n strings.set(i, str);\n }' After the quick-fix is applied: 'strings.replaceAll(String::toLowerCase);' This inspection only reports if the language level of the project or module is 8 or higher. New in 2022.1", + "markdown": "Reports loops which can be collapsed into a single `List.replaceAll()` call.\n\n**Example:**\n\n\n for (int i = 0; i < strings.size(); i++) {\n String str = strings.get(i).toLowerCase();\n strings.set(i, str);\n }\n\nAfter the quick-fix is applied:\n\n\n strings.replaceAll(String::toLowerCase);\n\n\nThis inspection only reports if the language level of the project or module is 8 or higher.\n\nNew in 2022.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 59, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SystemExit", + "shortDescription": { + "text": "Call to 'System.exit()' or related methods" + }, + "fullDescription": { + "text": "Reports calls to 'System.exit()', 'Runtime.exit()', and 'Runtime.halt()'. Invoking 'System.exit()' or 'Runtime.exit()' calls the shutdown hooks and terminates the currently running Java virtual machine. Invoking 'Runtime.halt()' forcibly terminates the JVM without causing shutdown hooks to be started. Each of these methods should be used with extreme caution. Calls to these methods make the calling code unportable to most application servers. Use the option to ignore calls in main methods.", + "markdown": "Reports calls to `System.exit()`, `Runtime.exit()`, and `Runtime.halt()`.\n\n\nInvoking `System.exit()` or `Runtime.exit()`\ncalls the shutdown hooks and terminates the currently running Java\nvirtual machine. Invoking `Runtime.halt()` forcibly\nterminates the JVM without causing shutdown hooks to be started.\nEach of these methods should be used with extreme caution. Calls\nto these methods make the calling code unportable to most\napplication servers.\n\n\nUse the option to ignore calls in main methods." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Portability", + "index": 7, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BigDecimalLegacyMethod", + "shortDescription": { + "text": "'BigDecimal' legacy method called" + }, + "fullDescription": { + "text": "Reports calls to 'BigDecimal.divide()' or 'BigDecimal.setScale()' that use integer constants to specify the rounding mode. Since JDK 1.5, consider using methods that take the 'RoundingMode' 'enum' parameter instead. Example: 'new BigDecimal(\"42\").setScale(2, BigDecimal.ROUND_FLOOR);' After the quick-fix is applied: 'new BigDecimal(\"42\").setScale(2, RoundingMode.FLOOR);'", + "markdown": "Reports calls to `BigDecimal.divide()` or `BigDecimal.setScale()` that use integer constants to specify the rounding mode. Since JDK 1.5, consider using methods that take the `RoundingMode` `enum` parameter instead.\n\n**Example:**\n\n new BigDecimal(\"42\").setScale(2, BigDecimal.ROUND_FLOOR);\n\nAfter the quick-fix is applied:\n\n new BigDecimal(\"42\").setScale(2, RoundingMode.FLOOR);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 5", + "index": 51, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DeclareCollectionAsInterface", + "shortDescription": { + "text": "Collection declared by class, not interface" + }, + "fullDescription": { + "text": "Reports declarations of 'Collection' variables made by using the collection class as a type, rather than an appropriate interface. The warning is not issued if weakening the variable type will cause a compilation error. Example: '// Warning: concrete collection class ArrayList used.\n int getTotalLength(ArrayList list) {\n return list.stream().mapToInt(String::length).sum();\n }\n\n // No warning, as trimToSize() method is not\n // available in the List interface\n void addData(ArrayList data) {\n data.add(\"Hello\");\n data.add(\"World\");\n data.trimToSize();\n }' A quick-fix is suggested to use the appropriate collection interface (e.g. 'Collection', 'Set', or 'List').", + "markdown": "Reports declarations of `Collection` variables made by using the collection class as a type, rather than an appropriate interface. The warning is not issued if weakening the variable type will cause a compilation error.\n\nExample:\n\n\n // Warning: concrete collection class ArrayList used.\n int getTotalLength(ArrayList list) {\n return list.stream().mapToInt(String::length).sum();\n }\n\n // No warning, as trimToSize() method is not\n // available in the List interface\n void addData(ArrayList data) {\n data.add(\"Hello\");\n data.add(\"World\");\n data.trimToSize();\n }\n\nA quick-fix is suggested to use the appropriate collection interface (e.g. `Collection`, `Set`, or `List`)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 75, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TrivialStringConcatenation", + "shortDescription": { + "text": "Concatenation with empty string" + }, + "fullDescription": { + "text": "Reports string concatenations where one of the arguments is the empty string. Such a concatenation is unnecessary and inefficient, particularly when used as an idiom for formatting non-'String' objects or primitives into 'String's. A quick-fix is suggested to simplify the concatenation. Example: 'void foo(int x, int y) {\n String s = \"\" + x + \" ; \" + y;\n }' After the quick-fix is applied: 'void foo(int x, int y) {\n String s = x + \" ; \" + y;\n }'", + "markdown": "Reports string concatenations where one of the arguments is the empty string. Such a concatenation is unnecessary and inefficient, particularly when used as an idiom for formatting non-`String` objects or primitives into `String`s.\n\n\nA quick-fix is suggested to simplify the concatenation.\n\n**Example:**\n\n\n void foo(int x, int y) {\n String s = \"\" + x + \" ; \" + y;\n }\n\nAfter the quick-fix is applied:\n\n\n void foo(int x, int y) {\n String s = x + \" ; \" + y;\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MissingPackageInfo", + "shortDescription": { + "text": "Missing 'package-info.java'" + }, + "fullDescription": { + "text": "Reports packages that contain classes but do not contain the 'package-info.java' or 'package.html' files and are, thus, missing the package documentation. The quick-fix creates an initial 'package-info.java' file.", + "markdown": "Reports packages that contain classes but do not contain the `package-info.java` or `package.html` files and are, thus, missing the package documentation.\n\nThe quick-fix creates an initial `package-info.java` file." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 45, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousInvocationHandlerImplementation", + "shortDescription": { + "text": "Suspicious 'InvocationHandler' implementation" + }, + "fullDescription": { + "text": "Reports implementations of 'InvocationHandler' that do not proxy standard 'Object' methods like 'hashCode()', 'equals()', and 'toString()'. Failing to handle these methods might cause unexpected problems upon calling them on a proxy instance. Example: 'InvocationHandler myHandler = (proxy, method, params) -> {\n System.out.println(\"Hello World!\");\n return null;\n };\n Runnable myProxy = (Runnable) Proxy.newProxyInstance(\n Thread.currentThread().getContextClassLoader(),\n new Class[] {Runnable.class}, myHandler\n );' This code snippet is designed to only proxy the 'Runnable.run()' method. However, calls to any 'Object' methods, like 'hashCode()', are proxied as well. This can lead to problems like a 'NullPointerException', for example, when adding 'myProxy' to a 'HashSet'. New in 2020.2", + "markdown": "Reports implementations of `InvocationHandler` that do not proxy standard `Object` methods like `hashCode()`, `equals()`, and `toString()`.\n\nFailing to handle these methods might cause unexpected problems upon calling them on a proxy instance.\n\n**Example:**\n\n\n InvocationHandler myHandler = (proxy, method, params) -> {\n System.out.println(\"Hello World!\");\n return null;\n };\n Runnable myProxy = (Runnable) Proxy.newProxyInstance(\n Thread.currentThread().getContextClassLoader(),\n new Class[] {Runnable.class}, myHandler\n );\n\n\nThis code snippet is designed to only proxy the `Runnable.run()` method.\nHowever, calls to any `Object` methods, like `hashCode()`, are proxied as well.\nThis can lead to problems like a `NullPointerException`, for example, when adding `myProxy` to a `HashSet`.\n\nNew in 2020.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryConstructor", + "shortDescription": { + "text": "Redundant no-arg constructor" + }, + "fullDescription": { + "text": "Reports unnecessary constructors. A constructor is unnecessary if it is the only constructor of a class, has no parameters, has the same access modifier as its containing class, and does not perform any initialization except explicitly or implicitly calling the superclass constructor without arguments. Such a constructor can be safely removed as it will be generated by the compiler even if not specified. Example: 'public class Foo {\n public Foo() {}\n }' After the quick-fix is applied: 'public class Foo {}' Use the inspection settings to ignore unnecessary constructors that have an annotation.", + "markdown": "Reports unnecessary constructors.\n\n\nA constructor is unnecessary if it is the only constructor of a class, has no parameters,\nhas the same access modifier as its containing class,\nand does not perform any initialization except explicitly or implicitly calling the superclass constructor without arguments.\nSuch a constructor can be safely removed as it will be generated by the compiler even if not specified.\n\n**Example:**\n\n\n public class Foo {\n public Foo() {}\n }\n\nAfter the quick-fix is applied:\n\n\n public class Foo {}\n\n\nUse the inspection settings to ignore unnecessary constructors that have an annotation." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlTagCanBeJavadocTag", + "shortDescription": { + "text": "'...' can be replaced with '{@code ...}'" + }, + "fullDescription": { + "text": "Reports usages of '' tags in Javadoc comments. Since Java 5, these tags can be replaced with '{@code ...}' constructs. This allows using angle brackets '<' and '>' inside the comment instead of HTML character entities. Example: '/**\n * @return empty ArrayList<Integer>\n */\n List getList(){ ... }' After the quick-fix is applied: '/**\n * @return empty {@code ArrayList}\n */\n List getList(){ ... }'", + "markdown": "Reports usages of `` tags in Javadoc comments. Since Java 5, these tags can be replaced with `{@code ...}` constructs. This allows using angle brackets `<` and `>` inside the comment instead of HTML character entities.\n\n**Example:**\n\n\n /**\n * @return empty ArrayList<Integer>\n */\n List getList(){ ... }\n\nAfter the quick-fix is applied:\n\n\n /**\n * @return empty {@code ArrayList}\n */\n List getList(){ ... }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 45, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringBufferField", + "shortDescription": { + "text": "'StringBuilder' field" + }, + "fullDescription": { + "text": "Reports fields of type 'java.lang.StringBuffer' or 'java.lang.StringBuilder'. Such fields can grow without limit and are often the cause of memory leaks. Example: 'public class Example {\n private StringBuilder builder = new StringBuilder();\n\n }'", + "markdown": "Reports fields of type `java.lang.StringBuffer` or `java.lang.StringBuilder`. Such fields can grow without limit and are often the cause of memory leaks.\n\n**Example:**\n\n\n public class Example {\n private StringBuilder builder = new StringBuilder();\n\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Memory", + "index": 69, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassEscapesItsScope", + "shortDescription": { + "text": "Non-accessible class is exposed" + }, + "fullDescription": { + "text": "Reports usages of classes in a field or method signature when a class in a signature is less visible than the member itself. While legal Java, such members are useless outside of the visibility scope. Example: 'public' method which returns a 'private' inner 'class'. 'protected' field whose type is a package-local 'class'. In Java 9, a module may hide some of its classes by excluding their packages from export. So, if the signature of exported API contains a non-exported class, such an API is useless outside of the module. Configure the inspection: Use the Module's API exposes not exported classes (Java 9+) option to report about the module API that exposes unexported classes. Note that the option works if the language level of the project or module is 9 or higher. Use the Public API exposes non-accessible classes option to report about a public API that exposes non-accessible classes. Use the Package-local API exposes private classes option to report about package-local API that exposes 'private' classes.", + "markdown": "Reports usages of classes in a field or method signature when a class in a signature is less visible than the member itself. While legal Java, such members are useless outside of the visibility scope.\n\nExample:\n\n* `public` method which returns a `private` inner `class`.\n* `protected` field whose type is a package-local `class`.\n\n\nIn Java 9, a module may hide some of its classes by excluding their packages from export.\nSo, if the signature of exported API contains a non-exported class, such an API is useless outside of the module.\n\nConfigure the inspection:\n\n* Use the **Module's API exposes not exported classes (Java 9+)** option to report about the module API that exposes unexported classes. \n Note that the option works if the language level of the project or module is 9 or higher.\n* Use the **Public API exposes non-accessible classes** option to report about a public API that exposes non-accessible classes.\n* Use the **Package-local API exposes private classes** option to report about package-local API that exposes `private` classes." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 54, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassNameSameAsAncestorName", + "shortDescription": { + "text": "Class name same as ancestor name" + }, + "fullDescription": { + "text": "Reports classes that have the same name as one of their superclasses, while their fully qualified names remain different. Such class names may be very confusing. Example: 'package util;\n abstract class Iterable implements java.lang.Iterable {}' A quick-fix that renames such classes is available only in the editor.", + "markdown": "Reports classes that have the same name as one of their superclasses, while their fully qualified names remain different. Such class names may be very confusing.\n\n**Example:**\n\n\n package util;\n abstract class Iterable implements java.lang.Iterable {}\n\nA quick-fix that renames such classes is available only in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Class", + "index": 67, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantMethodOverride", + "shortDescription": { + "text": "Method is identical to its super method" + }, + "fullDescription": { + "text": "Reports methods that are identical to their super methods. Such methods have the same signature as their super method and either have an identical body or only their body consists only of a call to the super method. These methods are redundant and can be removed. Use the checkbox below to run the inspection for the methods that override library methods. Checking library methods may slow down the inspection.", + "markdown": "Reports methods that are identical to their super methods. Such methods have the same signature as their super method and either have an identical body or only their body consists only of a call to the super method. These methods are redundant and can be removed.\n\n\nUse the checkbox below to run the inspection for the methods that override library methods.\nChecking library methods may slow down the inspection." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 25, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EqualsUsesNonFinalVariable", + "shortDescription": { + "text": "Non-final field referenced in 'equals()'" + }, + "fullDescription": { + "text": "Reports implementations of 'equals()' that access non-'final' variables. Such access may result in 'equals()' returning different results at different points in the object's lifecycle, which may in turn cause problems when using the standard collections classes. Example: 'public class Person {\n private String lastName;\n\n @Override\n public boolean equals(Object obj) {\n ...\n Person other = (Person) obj;\n if (lastName == null) {\n if (!lastName.equals(other.lastName)) {\n return false;\n ...\n }\n }\n }'", + "markdown": "Reports implementations of `equals()` that access non-`final` variables. Such access may result in `equals()` returning different results at different points in the object's lifecycle, which may in turn cause problems when using the standard collections classes.\n\n**Example:**\n\n\n public class Person {\n private String lastName;\n\n @Override\n public boolean equals(Object obj) {\n ...\n Person other = (Person) obj;\n if (lastName == null) {\n if (!lastName.equals(other.lastName)) {\n return false;\n ...\n }\n }\n }\n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ContinueStatementWithLabel", + "shortDescription": { + "text": "'continue' statement with label" + }, + "fullDescription": { + "text": "Reports 'continue' statements with labels. Labeled 'continue' statements complicate refactoring and can be confusing. Example: 'void handle(List strs) {\n outer:\n for (String s: strs) {\n for (char ch : s.toCharArray()) {\n if ('s' == ch) continue outer;\n handleChar(ch);\n }\n }\n }'", + "markdown": "Reports `continue` statements with labels.\n\nLabeled `continue` statements complicate refactoring and can be confusing.\n\nExample:\n\n\n void handle(List strs) {\n outer:\n for (String s: strs) {\n for (char ch : s.toCharArray()) {\n if ('s' == ch) continue outer;\n handleChar(ch);\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NestedAssignment", + "shortDescription": { + "text": "Nested assignment" + }, + "fullDescription": { + "text": "Reports assignment expressions that are nested inside other expressions. Such expressions may be confusing and violate the general design principle, which states that any construct should do precisely one thing. Example: 'String userName;\n // Warning: result of assignment to 'userName' is used\n String message = \"Hello \" + (userName = \"Alice\") + \"!\"\n System.out.println(message);\n System.out.println(\"Goodbye \" + userName);'", + "markdown": "Reports assignment expressions that are nested inside other expressions.\n\nSuch expressions may be confusing and violate the general design principle, which states that any construct should do precisely one thing.\n\n**Example:**\n\n\n String userName;\n // Warning: result of assignment to 'userName' is used\n String message = \"Hello \" + (userName = \"Alice\") + \"!\"\n System.out.println(message);\n System.out.println(\"Goodbye \" + userName);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Assignment issues", + "index": 36, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifiableBooleanExpression", + "shortDescription": { + "text": "Simplifiable boolean expression" + }, + "fullDescription": { + "text": "Reports boolean expressions that can be simplified. Example: 'void f(boolean foo, boolean bar) {\n boolean b = !(foo ^ bar);\n }' After the quick-fix is applied: 'void f(boolean foo, boolean bar) {\n boolean b = foo == bar;\n }' Example: 'void f(boolean foo, boolean bar) {\n boolean b = (foo && bar) || !foo;\n }' After the quick-fix is applied: 'void f(boolean foo, boolean bar) {\n boolean b = !foo || bar;\n }'", + "markdown": "Reports boolean expressions that can be simplified.\n\nExample:\n\n\n void f(boolean foo, boolean bar) {\n boolean b = !(foo ^ bar);\n }\n\nAfter the quick-fix is applied:\n\n\n void f(boolean foo, boolean bar) {\n boolean b = foo == bar;\n }\n\nExample:\n\n\n void f(boolean foo, boolean bar) {\n boolean b = (foo && bar) || !foo;\n }\n \nAfter the quick-fix is applied:\n\n\n void f(boolean foo, boolean bar) {\n boolean b = !foo || bar;\n }\n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AutoUnboxing", + "shortDescription": { + "text": "Auto-unboxing" + }, + "fullDescription": { + "text": "Reports expressions that are affected by unboxing conversion (automatic unwrapping of objects into primitive values). Try not to use objects instead of primitives. It might significantly affect the performance. Example: 'int x = new Integer(42);' The quick-fix makes the conversion explicit: 'int x = new Integer(42).intValue();' AutoUnboxing appeared in Java 5. This inspection can help to downgrade for backward compatibility with earlier Java versions.", + "markdown": "Reports expressions that are affected by unboxing conversion (automatic unwrapping of objects into primitive values). Try not to use objects instead of primitives. It might significantly affect the performance.\n\n**Example:**\n\n int x = new Integer(42);\n\nThe quick-fix makes the conversion explicit:\n\n int x = new Integer(42).intValue();\n\n\n*AutoUnboxing* appeared in Java 5.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonFinalFieldInImmutable", + "shortDescription": { + "text": "Non-final field in '@Immutable' class" + }, + "fullDescription": { + "text": "Reports any non-final field in a class with the '@Immutable' annotation. This violates the contract of the '@Immutable' annotation. Example: 'import javax.annotation.concurrent.Immutable;\n @Immutable\n class Foo {\n String bar = \"foo\";\n }' Supported '@GuardedBy' annotations are: 'net.jcip.annotations.GuardedBy' 'javax.annotation.concurrent.GuardedBy' 'org.apache.http.annotation.GuardedBy' 'com.android.annotations.concurrency.GuardedBy' 'androidx.annotation.GuardedBy' 'com.google.errorprone.annotations.concurrent.GuardedBy'", + "markdown": "Reports any non-final field in a class with the `@Immutable` annotation. This violates the contract of the `@Immutable` annotation.\n\nExample:\n\n\n import javax.annotation.concurrent.Immutable;\n @Immutable\n class Foo {\n String bar = \"foo\";\n }\n\nSupported `@GuardedBy` annotations are:\n\n* `net.jcip.annotations.GuardedBy`\n* `javax.annotation.concurrent.GuardedBy`\n* `org.apache.http.annotation.GuardedBy`\n* `com.android.annotations.concurrency.GuardedBy`\n* `androidx.annotation.GuardedBy`\n* `com.google.errorprone.annotations.concurrent.GuardedBy`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Concurrency annotation issues", + "index": 58, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringConcatenationInMessageFormatCall", + "shortDescription": { + "text": "String concatenation as argument to 'MessageFormat.format()' call" + }, + "fullDescription": { + "text": "Reports non-constant string concatenations used as an argument to a call to 'MessageFormat.format()'. While occasionally intended, this is usually a misuse of the formatting method and may even cause unexpected exceptions if the variables used in the concatenated string contain special characters like '{'. Also, sometimes this could be the result of mistakenly concatenating a string format argument by typing a '+' when a ',' was meant. Example: 'String formatGreeting(String userName, int balance) {\n return MessageFormat.format(\"Hello, \" + userName + \"! Your balance is {0}.\", balance);\n }' Here, the 'userName' will be interpreted as a part of the format string, which may result in 'IllegalArgumentException' (for example, if 'userName' is '\"{\"'). This call should be probably replaced with 'MessageFormat.format(\"Hello, {0}! Your balance is {1}.\", userName, balance)'.", + "markdown": "Reports non-constant string concatenations used as an argument to a call to `MessageFormat.format()`.\n\n\nWhile occasionally intended, this is usually a misuse of the formatting method\nand may even cause unexpected exceptions if the variables used in the concatenated string contain\nspecial characters like `{`.\n\n\nAlso, sometimes this could be the result\nof mistakenly concatenating a string format argument by typing a `+` when a `,` was meant.\n\n**Example:**\n\n\n String formatGreeting(String userName, int balance) {\n return MessageFormat.format(\"Hello, \" + userName + \"! Your balance is {0}.\", balance);\n }\n\n\nHere, the `userName` will be interpreted as a part of the format string, which may result\nin `IllegalArgumentException` (for example, if `userName` is `\"{\"`).\nThis call should be probably replaced with `MessageFormat.format(\"Hello, {0}! Your balance is {1}.\", userName, balance)`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnconstructableTestCase", + "shortDescription": { + "text": "JUnit unconstructable test case" + }, + "fullDescription": { + "text": "Reports JUnit test classes that can't be constructed by a standard JUnit test runner. JUnit 4 test classes need to be 'public' and have a 'public' no-arg constructor or no constructor at all (implicit default constructor) and no other 'public' constructors. JUnit 3 test classes need to be 'public' and need either a 'public' no-arg constructor or a 'public' constructor with a single parameter of 'String' type, which calls the matching super constructor. Otherwise the test classes cannot be run by standard JUnit test runners. Example: 'public class MyTest {\n\n private MyTest() {} // no-arg constructor is private\n\n @Test\n public void testSomething() {\n assertEquals(1, 1);\n }\n}'", + "markdown": "Reports JUnit test classes that can't be constructed by a standard JUnit test runner.\n\n\nJUnit 4 test classes need to be `public` and have a `public` no-arg constructor or no constructor at all\n(implicit default constructor) and no other `public` constructors.\nJUnit 3 test classes need to be `public` and need either a `public` no-arg constructor\nor a `public` constructor with a single parameter of `String` type, which calls the matching super constructor.\nOtherwise the test classes cannot be run by standard JUnit test runners.\n\n**Example:**\n\n\n public class MyTest {\n\n private MyTest() {} // no-arg constructor is private\n\n @Test\n public void testSomething() {\n assertEquals(1, 1);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages/Test frameworks", + "index": 85, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CallToStringConcatCanBeReplacedByOperator", + "shortDescription": { + "text": "Call to 'String.concat()' can be replaced with '+'" + }, + "fullDescription": { + "text": "Reports calls to 'java.lang.String.concat()'. Such calls can be replaced with the '+' operator for clarity and possible increased performance if the method was invoked on a constant with a constant argument. Example: 'String foo(String name) {\n return name.concat(\"foo\");\n }' After the quick-fix is applied: 'String foo(String name) {\n return name + \"foo\";\n }'", + "markdown": "Reports calls to `java.lang.String.concat()`.\n\n\nSuch calls can be replaced with the `+` operator for clarity and possible increased\nperformance if the method was invoked on a constant with a constant argument.\n\n**Example:**\n\n\n String foo(String name) {\n return name.concat(\"foo\");\n }\n\nAfter the quick-fix is applied:\n\n\n String foo(String name) {\n return name + \"foo\";\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExpectedExceptionNeverThrown", + "shortDescription": { + "text": "Expected exception never thrown in test method body" + }, + "fullDescription": { + "text": "Reports checked exceptions expected by a JUnit 4 test-method that are never thrown inside the method body. Such test methods will never succeed. Example: '@Test(expected = CloneNotSupportedException.class)\n public void testIt() {\n }'", + "markdown": "Reports checked exceptions expected by a JUnit 4 test-method that are never thrown inside the method body. Such test methods will never succeed.\n\n**Example:**\n\n\n @Test(expected = CloneNotSupportedException.class)\n public void testIt() {\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/JUnit", + "index": 74, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SignalWithoutCorrespondingAwait", + "shortDescription": { + "text": "'signal()' without corresponding 'await()'" + }, + "fullDescription": { + "text": "Reports calls to 'Condition.signal()' or 'Condition.signalAll()' for which no call to a corresponding 'Condition.await()' can be found. Only calls that target fields of the current class are reported by this inspection. Example: 'class Queue {\n private final Condition isEmpty = ...;\n\n void add(Object elem) {\n // ...\n isEmpty.signal(); // warning: Call to 'signal()' without corresponding 'await()'\n // ...\n }\n\n void remove(Object elem) throws InterruptedException {\n // ...\n // isEmpty.await();\n // ...\n }\n }'", + "markdown": "Reports calls to `Condition.signal()` or `Condition.signalAll()` for which no call to a corresponding `Condition.await()` can be found.\n\nOnly calls that target fields of the current class are reported by this inspection.\n\n**Example:**\n\n\n class Queue {\n private final Condition isEmpty = ...;\n\n void add(Object elem) {\n // ...\n isEmpty.signal(); // warning: Call to 'signal()' without corresponding 'await()'\n // ...\n }\n\n void remove(Object elem) throws InterruptedException {\n // ...\n // isEmpty.await();\n // ...\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FoldExpressionIntoStream", + "shortDescription": { + "text": "Expression can be folded into Stream chain" + }, + "fullDescription": { + "text": "Reports expressions with a repeating pattern which could be replaced with Stream API or 'String.join()'. Example: 'boolean allStartWith(String a, String b, String c, String d, String prefix) {\n return a.startsWith(prefix) && b.startsWith(prefix) && c.startsWith(prefix) && d.startsWith(prefix);\n }' After the quick-fix is applied: 'boolean foo(String a, String b, String c, String d, String prefix) {\n return Stream.of(a, b, c, d).allMatch(s -> s.startsWith(prefix));\n }' Example: 'String joinAll(String a, String b, String c, String d) {\n return a + \",\" + b + \",\" + c + \",\" + d;\n }' After the quick-fix is applied: 'String joinAll(String a, String b, String c, String d) {\n return String.join(\",\", a, b, c, d);\n }' This inspection only reports if the language level of the project or module is 8 or higher. New in 2018.2", + "markdown": "Reports expressions with a repeating pattern which could be replaced with *Stream API* or `String.join()`.\n\nExample:\n\n\n boolean allStartWith(String a, String b, String c, String d, String prefix) {\n return a.startsWith(prefix) && b.startsWith(prefix) && c.startsWith(prefix) && d.startsWith(prefix);\n }\n\nAfter the quick-fix is applied:\n\n\n boolean foo(String a, String b, String c, String d, String prefix) {\n return Stream.of(a, b, c, d).allMatch(s -> s.startsWith(prefix));\n }\n\nExample:\n\n\n String joinAll(String a, String b, String c, String d) {\n return a + \",\" + b + \",\" + c + \",\" + d;\n }\n\nAfter the quick-fix is applied:\n\n\n String joinAll(String a, String b, String c, String d) {\n return String.join(\",\", a, b, c, d);\n }\n\nThis inspection only reports if the language level of the project or module is 8 or higher.\n\nNew in 2018.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 59, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HardcodedFileSeparators", + "shortDescription": { + "text": "Hardcoded file separator" + }, + "fullDescription": { + "text": "Reports the forward ('/') or backward ('\\') slash in a string or character literal. These characters are commonly used as file separators, and portability may suffer if they are hardcoded. The inspection will not report backward slashes inside escape sequences and forward slashes immediately following the '<' character or immediately preceding the '>' character, as those often indicate XML or HTML tags rather than file names. Strings representing a 'java.util.TimeZone' ID, strings that are valid regular expressions, or strings that equal IANA-registered MIME media types will not be reported either. Example: 'new File(\"C:\\\\Users\\\\Name\");' Use the option to include 'example/*' in the set of recognized media types. Normally, usage of the 'example/*' MIME media type outside of an example (e.g. in a 'Content-Type' header) is an error.", + "markdown": "Reports the forward (`/`) or backward (`\\`) slash in a string or character literal. These characters are commonly used as file separators, and portability may suffer if they are hardcoded.\n\n\nThe inspection will not report backward slashes inside escape sequences and forward slashes immediately following the '\\<' character\nor immediately preceding the '\\>' character, as those often indicate XML or HTML tags rather than file names.\nStrings representing a `java.util.TimeZone` ID, strings that are valid regular expressions,\nor strings that equal IANA-registered MIME media types will not be reported either.\n\n**Example:**\n\n\n new File(\"C:\\\\Users\\\\Name\");\n\n\nUse the option to include `example/*` in the set of recognized media types.\nNormally, usage of the `example/*` MIME media type outside of an example (e.g. in a `Content-Type`\nheader) is an error." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Portability", + "index": 7, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SerializableDeserializableClassInSecureContext", + "shortDescription": { + "text": "Serializable class in secure context" + }, + "fullDescription": { + "text": "Reports classes that may be serialized or deserialized. A class may be serialized if it supports the 'Serializable' interface, and its 'readObject()' and 'writeObject()' methods are not defined to always throw an exception. Serializable classes may be dangerous in code intended for secure use. Example: 'class DeserializableClass implements Serializable { // the class doesn't contain 'writeObject()' method throwing an exception\n private int sensitive = 736326;\n\n private void readObject(ObjectInputStream in) {\n throw new Error();\n }\n}' After the quick-fix is applied: 'class DeserializableClass implements Serializable {\n private int sensitive = 736326;\n\n private void readObject(ObjectInputStream in) {\n throw new Error();\n }\n\n private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {\n throw new java.io.NotSerializableException(\"DeserializableClass\");\n }\n }' Use the following options to configure the inspection: List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit 'Serializable' from a superclass but are not intended for serialization. Note that it still may be more secure to add 'readObject()' and 'writeObject()' methods which always throw an exception, instead of ignoring those classes. Whether to ignore serializable anonymous classes.", + "markdown": "Reports classes that may be serialized or deserialized.\n\n\nA class may be serialized if it supports the `Serializable` interface,\nand its `readObject()` and `writeObject()` methods are not defined to always\nthrow an exception. Serializable classes may be dangerous in code intended for secure use.\n\n**Example:**\n\n\n class DeserializableClass implements Serializable { // the class doesn't contain 'writeObject()' method throwing an exception\n private int sensitive = 736326;\n\n private void readObject(ObjectInputStream in) {\n throw new Error();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class DeserializableClass implements Serializable {\n private int sensitive = 736326;\n\n private void readObject(ObjectInputStream in) {\n throw new Error();\n }\n\n private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {\n throw new java.io.NotSerializableException(\"DeserializableClass\");\n }\n }\n\n\nUse the following options to configure the inspection:\n\n* List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit `Serializable` from a superclass but are not intended for serialization. Note that it still may be more secure to add `readObject()` and `writeObject()` methods which always throw an exception, instead of ignoring those classes.\n* Whether to ignore serializable anonymous classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 30, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConfusingFloatingPointLiteral", + "shortDescription": { + "text": "Confusing floating-point literal" + }, + "fullDescription": { + "text": "Reports any floating point numbers that don't have a decimal point, numbers before the decimal point, or numbers after the decimal point. Such literals may be confusing, and violate several coding standards. Example: 'double d = .03;' After the quick-fix is applied: 'double d = 0.03;' Use the Ignore floating point literals in scientific notation option to ignore floating point numbers in scientific notation.", + "markdown": "Reports any floating point numbers that don't have a decimal point, numbers before the decimal point, or numbers after the decimal point.\n\nSuch literals may be confusing, and violate several coding standards.\n\n**Example:**\n\n double d = .03;\n\nAfter the quick-fix is applied:\n\n double d = 0.03;\n\n\nUse the **Ignore floating point literals in scientific notation** option to ignore floating point numbers in scientific notation." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaModuleNaming", + "shortDescription": { + "text": "Java module name contradicts the convention" + }, + "fullDescription": { + "text": "Reports cases when a module name contradicts Java Platform Module System recommendations. One of the recommendations is to avoid using digits at the end of module names. Example: 'module foo1.bar2 {}'", + "markdown": "Reports cases when a module name contradicts Java Platform Module System recommendations.\n\nOne of the [recommendations](http://mail.openjdk.org/pipermail/jpms-spec-experts/2017-March/000659.html)\nis to avoid using digits at the end of module names.\n\n**Example:**\n\n\n module foo1.bar2 {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions", + "index": 50, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavadocReference", + "shortDescription": { + "text": "Declaration has problems in Javadoc references" + }, + "fullDescription": { + "text": "Reports unresolved references inside Javadoc comments. In the following example, the 'someParam' parameter is missing, so it will be highlighted: 'class A {\n /**\n * @param someParam description\n **/\n void foo() {\n }\n}' Disable the Report inaccessible symbols option to ignore the tags that reference missing method parameters, classes, fields and methods.", + "markdown": "Reports unresolved references inside Javadoc comments.\n\nIn the following example, the `someParam` parameter is missing, so it will be highlighted:\n\n\n class A {\n /**\n * @param someParam description\n **/\n void foo() {\n }\n }\n\n\nDisable the **Report inaccessible symbols** option to ignore the tags that reference missing method parameters,\nclasses, fields and methods." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 45, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnaryPlus", + "shortDescription": { + "text": "Unary plus" + }, + "fullDescription": { + "text": "Reports usages of the '+' unary operator. The unary plus is usually a null operation, and its presence might represent a coding error. For example, in a combination with the increment operator (like in '+++') or with the equal operator (like in '=+'). Example: 'void unaryPlus(int i) {\n int x = + +i;\n }' The following quick fixes are suggested: Remove '+' operators before the 'i' variable: 'void unaryPlus(int i) {\n int x = i;\n }' Replace '+' operators with the prefix increment operator: 'void unaryPlus(int i) {\n int x = ++i;\n }' Use the checkbox below to report unary pluses that are used together with a binary or another unary expression. It means the inspection will not report situations when a unary plus expression is used in array initializer expressions or as a method argument.", + "markdown": "Reports usages of the `+` unary operator. The unary plus is usually a null operation, and its presence might represent a coding error. For example, in a combination with the increment operator (like in `+++`) or with the equal operator (like in `=+`).\n\n**Example:**\n\n\n void unaryPlus(int i) {\n int x = + +i;\n }\n\nThe following quick fixes are suggested:\n\n* Remove `+` operators before the `i` variable:\n\n\n void unaryPlus(int i) {\n int x = i;\n }\n\n* Replace `+` operators with the prefix increment operator:\n\n\n void unaryPlus(int i) {\n int x = ++i;\n }\n\n\nUse the checkbox below to report unary pluses that are used together with a binary or another unary expression.\nIt means the inspection will not report situations when a unary plus expression is used in array\ninitializer expressions or as a method argument." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstructorCount", + "shortDescription": { + "text": "Class with too many constructors" + }, + "fullDescription": { + "text": "Reports classes whose number of constructors exceeds the specified maximum. Classes with too many constructors are prone to initialization errors, and often modeling such a class as multiple subclasses is preferable. Configure the inspection: Use the Constructor count limit field to specify the maximum allowed number of constructors in a class. Use the Ignore deprecated constructors option to avoid adding deprecated constructors to the total count.", + "markdown": "Reports classes whose number of constructors exceeds the specified maximum.\n\nClasses with too many constructors are prone to initialization errors, and often modeling such a class as multiple subclasses is preferable.\n\nConfigure the inspection:\n\n* Use the **Constructor count limit** field to specify the maximum allowed number of constructors in a class.\n* Use the **Ignore deprecated constructors** option to avoid adding deprecated constructors to the total count." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class metrics", + "index": 87, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IncrementDecrementUsedAsExpression", + "shortDescription": { + "text": "Result of '++' or '--' used" + }, + "fullDescription": { + "text": "Reports increment or decrement expressions that are nested inside other expressions. Such expressions may be confusing and violate the general design principle, which states that any construct should do precisely one thing. The quick-fix extracts the increment or decrement operation to a separate expression statement. Example: 'int i = 10;\n while (i-- > 0) {\n System.out.println(i);\n }' After the quick-fix is applied: 'int i = 10;\n while (i > 0) {\n i--;\n System.out.println(i);\n }\n i--;'", + "markdown": "Reports increment or decrement expressions that are nested inside other expressions. Such expressions may be confusing and violate the general design principle, which states that any construct should do precisely one thing.\n\nThe quick-fix extracts the increment or decrement operation to a separate expression statement.\n\n**Example:**\n\n\n int i = 10;\n while (i-- > 0) {\n System.out.println(i);\n }\n\nAfter the quick-fix is applied:\n\n\n int i = 10;\n while (i > 0) {\n i--;\n System.out.println(i);\n }\n i--;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Assignment issues", + "index": 36, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DisjointPackage", + "shortDescription": { + "text": "Package with disjoint dependency graph" + }, + "fullDescription": { + "text": "Reports packages whose classes can be separated into mutually independent subsets. Such disjoint packages indicate ad-hoc packaging or a lack of conceptual cohesion. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports packages whose classes can be separated into mutually independent subsets.\n\nSuch disjoint packages indicate ad-hoc packaging or a lack of conceptual cohesion.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Packaging issues", + "index": 38, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodOverloadsParentMethod", + "shortDescription": { + "text": "Possibly unintended overload of method from superclass" + }, + "fullDescription": { + "text": "Reports instance methods with the same name and the same number of parameters as a method in a superclass, but where at least one of the parameters is of a different incompatible type. In this case, the method in a subclass will be overloading the method from the superclass instead of overriding it. If it is unintended, it may result in latent bugs. Example: 'public class Foo {\n void foo(int x) {}\n }\n\n public class Bar extends Foo {\n void foo(Number x) {} // Method 'foo()' overloads a compatible method of a superclass,\n // when overriding might have been intended\n }' Use the option to choose whether the inspection should also report cases where parameter types are not compatible.", + "markdown": "Reports instance methods with the same name and the same number of parameters as a method in a superclass, but where at least one of the parameters is of a different incompatible type.\n\n\nIn this case, the method in a subclass will be overloading the method from the superclass\ninstead of overriding it. If it is unintended, it may result in latent bugs.\n\n**Example:**\n\n\n public class Foo {\n void foo(int x) {}\n }\n\n public class Bar extends Foo {\n void foo(Number x) {} // Method 'foo()' overloads a compatible method of a superclass,\n // when overriding might have been intended\n }\n\n\nUse the option to choose whether the inspection should also report cases where parameter types are not compatible." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 54, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodMayBeSynchronized", + "shortDescription": { + "text": "Method with single 'synchronized' block can be replaced with 'synchronized' method" + }, + "fullDescription": { + "text": "Reports methods whose body contains a single 'synchronized' statement. A lock expression for this 'synchronized' statement must be equal to 'this' for instance methods or '[ClassName].class' for static methods. To improve readability of such methods, you can remove the 'synchronized' wrapper and mark the method as 'synchronized'. Example: 'public int generateInt(int x) {\n synchronized (this) {\n return 1;\n }\n }' After the quick-fix is applied: 'public synchronized int generateInt(int x) {\n return 1;\n }'", + "markdown": "Reports methods whose body contains a single `synchronized` statement. A lock expression for this `synchronized` statement must be equal to `this` for instance methods or `[ClassName].class` for static methods.\n\n\nTo improve readability of such methods,\nyou can remove the `synchronized` wrapper and mark the method as `synchronized`.\n\n**Example:**\n\n\n public int generateInt(int x) {\n synchronized (this) {\n return 1;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public synchronized int generateInt(int x) {\n return 1;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UpperCaseFieldNameNotConstant", + "shortDescription": { + "text": "Non-constant field with upper-case name" + }, + "fullDescription": { + "text": "Reports non-'static' non-'final' fields whose names are all in upper case. Such fields may cause confusion by breaking a common naming convention and are often used by mistake. Example: 'public static int THE_ANSWER = 42; //a warning here: final modifier is missing' A quick-fix that renames such fields is available only in the editor.", + "markdown": "Reports non-`static` non-`final` fields whose names are all in upper case.\n\nSuch fields may cause confusion by breaking a common naming convention and\nare often used by mistake.\n\n**Example:**\n\n\n public static int THE_ANSWER = 42; //a warning here: final modifier is missing\n\nA quick-fix that renames such fields is available only in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions", + "index": 50, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Convert2streamapi", + "shortDescription": { + "text": "Loop can be collapsed with Stream API" + }, + "fullDescription": { + "text": "Reports loops which can be replaced with stream API calls using lambda expressions. Such a replacement changes the style from imperative to more functional and makes the code more compact. Example: 'boolean check(List data) {\n for (String e : data) {\n String trimmed = e.trim();\n if (!trimmed.startsWith(\"xyz\")) {\n return false;\n }\n }\n return true;\n }' After the quick-fix is applied: 'boolean check(List data) {\n return data.stream().map(String::trim).allMatch(trimmed -> trimmed.startsWith(\"xyz\"));\n }' This inspection only reports if the language level of the project or module is 8 or higher.", + "markdown": "Reports loops which can be replaced with stream API calls using lambda expressions.\n\nSuch a replacement changes the style from imperative to more functional and makes the code more compact.\n\nExample:\n\n\n boolean check(List data) {\n for (String e : data) {\n String trimmed = e.trim();\n if (!trimmed.startsWith(\"xyz\")) {\n return false;\n }\n }\n return true;\n }\n\nAfter the quick-fix is applied:\n\n\n boolean check(List data) {\n return data.stream().map(String::trim).allMatch(trimmed -> trimmed.startsWith(\"xyz\"));\n }\n\nThis inspection only reports if the language level of the project or module is 8 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 59, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SerialPersistentFieldsWithWrongSignature", + "shortDescription": { + "text": "'serialPersistentFields' field not declared 'private static final ObjectStreamField[]'" + }, + "fullDescription": { + "text": "Reports 'Serializable' classes whose 'serialPersistentFields' field is not declared as 'private static final ObjectStreamField[]'. If a 'serialPersistentFields' field is not declared with those modifiers, the serialization behavior will be as if the field was not declared at all. Example: 'class List implements Serializable {\n private List next;\n\n ObjectStreamField[] serialPersistentFields = {new ObjectStreamField(\"next\", List.class)};\n\n }'", + "markdown": "Reports `Serializable` classes whose `serialPersistentFields` field is not declared as `private static final ObjectStreamField[]`.\n\n\nIf a `serialPersistentFields` field is not declared with those modifiers,\nthe serialization behavior will be as if the field was not declared at all.\n\n**Example:**\n\n\n class List implements Serializable {\n private List next;\n\n ObjectStreamField[] serialPersistentFields = {new ObjectStreamField(\"next\", List.class)};\n\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 18, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ComparatorResultComparison", + "shortDescription": { + "text": "Suspicious usage of compare method" + }, + "fullDescription": { + "text": "Reports comparisons of the result of 'Comparator.compare()' or 'Comparable.compareTo()' calls with non-zero constants. By contract, these methods can return any integer (not just -1, 0 or 1), so comparing against particular numbers is bad practice. Some widely used comparison methods (e.g. 'String.compareTo()') actually return values outside the [-1..1] range, and such a comparison may cause incorrect program behavior. Example: 'void validate(String s1, String s2) {\n // Comparing to 1 is incorrect\n if (s1.compareTo(s2) == 1) {\n throw new IllegalArgumentException(\"Incorrect order\");\n }\n }' After the quick-fix is applied: 'void validate(String s1, String s2) {\n if (s1.compareTo(s2) > 0) {\n throw new IllegalArgumentException(\"Incorrect order\");\n }\n }' New in 2017.2", + "markdown": "Reports comparisons of the result of `Comparator.compare()` or `Comparable.compareTo()` calls with non-zero constants. By contract, these methods can return any integer (not just -1, 0 or 1), so comparing against particular numbers is bad practice. Some widely used comparison methods (e.g. `String.compareTo()`) actually return values outside the \\[-1..1\\] range, and such a comparison may cause incorrect program behavior.\n\nExample:\n\n\n void validate(String s1, String s2) {\n // Comparing to 1 is incorrect\n if (s1.compareTo(s2) == 1) {\n throw new IllegalArgumentException(\"Incorrect order\");\n }\n }\n\nAfter the quick-fix is applied:\n\n\n void validate(String s1, String s2) {\n if (s1.compareTo(s2) > 0) {\n throw new IllegalArgumentException(\"Incorrect order\");\n }\n }\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ListIndexOfReplaceableByContains", + "shortDescription": { + "text": "'List.indexOf()' expression can be replaced with 'contains()'" + }, + "fullDescription": { + "text": "Reports any 'List.indexOf()' expressions that can be replaced with the 'List.contains()' method. Example: 'boolean hasEmptyString(List list) {\n // Warning: can be simplified\n return list.indexOf(\"\") >= 0;\n }' The provided quick-fix replaces the 'indexOf' call with the 'contains' call: 'boolean hasEmptyString(List list) {\n // Quick-fix is applied\n return list.contains(\"\");\n }'", + "markdown": "Reports any `List.indexOf()` expressions that can be replaced with the `List.contains()` method.\n\nExample:\n\n\n boolean hasEmptyString(List list) {\n // Warning: can be simplified\n return list.indexOf(\"\") >= 0;\n }\n\nThe provided quick-fix replaces the `indexOf` call with the `contains` call:\n\n\n boolean hasEmptyString(List list) {\n // Quick-fix is applied\n return list.contains(\"\");\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonStrictComparisonCanBeEquality", + "shortDescription": { + "text": "Non-strict inequality '>=' or '<=' can be replaced with '=='" + }, + "fullDescription": { + "text": "Reports inequality conditions that, according to data flow analysis, can be satisfied only for a single operand value. Such conditions could be replaced with equality conditions to make the code clearer. Example: if (x >= 10) {\n ...\n if (x <= 10) { // can be replaced with 'x == 10'\n }\n }\n New in 2022.2", + "markdown": "Reports inequality conditions that, according to data flow analysis, can be satisfied only for a single operand value. Such conditions could be replaced with equality conditions to make the code clearer.\n\nExample:\n\n```\n if (x >= 10) {\n ...\n if (x <= 10) { // can be replaced with 'x == 10'\n }\n }\n```\n\nNew in 2022.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EqualsHashCodeCalledOnUrl", + "shortDescription": { + "text": "'equals()' or 'hashCode()' called on 'URL' object" + }, + "fullDescription": { + "text": "Reports 'hashCode()' and 'equals()' calls on 'java.net.URL' objects. 'URL''s 'equals()' and 'hashCode()' methods can perform a DNS lookup to resolve the host name. This may cause significant delays, depending on the availability and speed of the network and the DNS server. Using 'java.net.URI' instead of 'java.net.URL' will avoid the DNS lookup. Example: 'int equalsHashCode(URL url1, URL url2) {\n return url1.hashCode() == url2.hashCode();\n }'", + "markdown": "Reports `hashCode()` and `equals()` calls on `java.net.URL` objects.\n\n\n`URL`'s `equals()` and `hashCode()` methods can perform a DNS lookup to resolve the host name.\nThis may cause significant delays, depending on the availability and speed of the network and the DNS server.\nUsing `java.net.URI` instead of `java.net.URL` will avoid the DNS lookup.\n\n**Example:**\n\n\n int equalsHashCode(URL url1, URL url2) {\n return url1.hashCode() == url2.hashCode();\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryParentheses", + "shortDescription": { + "text": "Unnecessary parentheses" + }, + "fullDescription": { + "text": "Reports any instance of unnecessary parentheses. Parentheses are considered unnecessary if the evaluation order of an expression remains unchanged after you remove the parentheses. Example: 'int n = 3 + (9 * 8);' After quick-fix is applied: 'int n = 3 + 9 * 8;' Configure the inspection: Use the Ignore clarifying parentheses option to ignore parentheses that help clarify a binary expression. Parentheses are clarifying if the parenthesized expression is an 'instanceof' expression that is a part of a larger expression or has a different operator than the parent expression. Use the Ignore parentheses around the condition of conditional expressions option to ignore any parentheses around the condition of conditional expressions. Some coding standards specify that all such conditions must be surrounded by parentheses. Use the Ignore parentheses around single no formal type lambda parameter option to ignore parentheses around a single lambda parameter within a lambda expression.", + "markdown": "Reports any instance of unnecessary parentheses.\n\nParentheses are considered unnecessary if the evaluation order of an expression remains\nunchanged after you remove the parentheses.\n\nExample:\n\n\n int n = 3 + (9 * 8);\n\nAfter quick-fix is applied:\n\n\n int n = 3 + 9 * 8;\n\nConfigure the inspection:\n\n* Use the **Ignore clarifying parentheses** option to ignore parentheses that help clarify a binary expression. Parentheses are clarifying if the parenthesized expression is an `instanceof` expression that is a part of a larger expression or has a different operator than the parent expression.\n* Use the **Ignore parentheses around the condition of conditional expressions** option to ignore any parentheses around the condition of conditional expressions. Some coding standards specify that all such conditions must be surrounded by parentheses.\n* Use the **Ignore parentheses around single no formal type lambda parameter** option to ignore parentheses around a single lambda parameter within a lambda expression." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ImplicitArrayToString", + "shortDescription": { + "text": "Call to 'toString()' on array" + }, + "fullDescription": { + "text": "Reports arrays used in 'String' concatenations or passed as parameters to 'java.io.PrintStream' methods, such as 'System.out.println()'. Usually, the content of the array is meant to be used and not the array object itself. Example: 'void print(Object[] objects) {\n System.out.println(objects);\n }' After the quick-fix is applied: 'void print(Object[] objects) {\n System.out.println(Arrays.toString(objects));\n }'", + "markdown": "Reports arrays used in `String` concatenations or passed as parameters to `java.io.PrintStream` methods, such as `System.out.println()`.\n\n\nUsually, the content of the array is meant to be used and not the array object itself.\n\n**Example:**\n\n\n void print(Object[] objects) {\n System.out.println(objects);\n }\n\nAfter the quick-fix is applied:\n\n\n void print(Object[] objects) {\n System.out.println(Arrays.toString(objects));\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReuseOfLocalVariable", + "shortDescription": { + "text": "Reuse of local variable" + }, + "fullDescription": { + "text": "Reports local variables that are \"reused\" overwriting their values with new values unrelated to their original use. Such a local variable reuse may be confusing, as the intended semantics of the local variable may vary with each use. It may also be prone to bugs if due to the code changes, the values that have been considered overwritten actually appear to be alive. It is a good practice to keep variable lifetimes as short as possible, and not to reuse local variables for the sake of brevity. Example: 'void x() {\n String s = \"one\";\n System.out.println(\"s = \" + s);\n s = \"two\"; //reuse of local variable 's'\n System.out.println(\"s = \" + s);\n }'", + "markdown": "Reports local variables that are \"reused\" overwriting their values with new values unrelated to their original use.\n\nSuch a local variable reuse may be confusing,\nas the intended semantics of the local variable may vary with each use. It may also be\nprone to bugs if due to the code changes, the values that have been considered overwritten actually\nappear to be alive. It is a good practice to keep variable lifetimes as short as possible, and not\nto reuse local variables for the sake of brevity.\n\nExample:\n\n\n void x() {\n String s = \"one\";\n System.out.println(\"s = \" + s);\n s = \"two\"; //reuse of local variable 's'\n System.out.println(\"s = \" + s);\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Data flow", + "index": 23, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BooleanMethodNameMustStartWithQuestion", + "shortDescription": { + "text": "Boolean method name must start with question word" + }, + "fullDescription": { + "text": "Reports boolean methods whose names do not start with a question word. Boolean methods that override library methods are ignored by this inspection. Example: 'boolean empty(List list) {\n return list.isEmpty();\n}' A quick-fix that renames such methods is available only in the editor. Configure the inspection: Use the Boolean method name prefixes list to specify acceptable question words to start boolean method names with. Use the Ignore methods with 'java.lang.Boolean' return type option to ignore methods with the 'java.lang.Boolean' return type. Use the Ignore boolean methods in an @interface option to ignore boolean methods in annotation types ('@interface'). Use the Ignore methods overriding/implementing a super method to ignore methods the have supers.", + "markdown": "Reports boolean methods whose names do not start with a question word.\n\nBoolean methods that override library methods are ignored by this inspection.\n\n**Example:**\n\n boolean empty(List list) {\n return list.isEmpty();\n }\n\nA quick-fix that renames such methods is available only in the editor.\n\nConfigure the inspection:\n\n* Use the **Boolean method name prefixes** list to specify acceptable question words to start boolean method names with.\n* Use the **Ignore methods with 'java.lang.Boolean' return type** option to ignore methods with the `java.lang.Boolean` return type.\n* Use the **Ignore boolean methods in an @interface** option to ignore boolean methods in annotation types (`@interface`).\n* Use the **Ignore methods overriding/implementing a super method** to ignore methods the have supers." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Method", + "index": 88, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousToArrayCall", + "shortDescription": { + "text": "Suspicious 'Collection.toArray()' call" + }, + "fullDescription": { + "text": "Reports suspicious calls to 'Collection.toArray()'. The following types of calls are considered suspicious: when the type of the array argument is not the same as the array type to which the result is casted. when the type of the array argument does not match the type parameter in the collection declaration. Example: 'void m1(List list) {\n Number[] ns = (Number[]) list.toArray(new String[0]);\n}\n\nvoid m2(List list) {\n Number[] ns = list.toArray(new String[0]);\n}'", + "markdown": "Reports suspicious calls to `Collection.toArray()`.\n\nThe following types of calls are considered suspicious:\n\n* when the type of the array argument is not the same as the array type to which the result is casted.\n* when the type of the array argument does not match the type parameter in the collection declaration.\n\n**Example:**\n\n\n void m1(List list) {\n Number[] ns = (Number[]) list.toArray(new String[0]);\n }\n\n void m2(List list) {\n Number[] ns = list.toArray(new String[0]);\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringToUpperWithoutLocale", + "shortDescription": { + "text": "Call to 'String.toUpperCase()' or 'toLowerCase()' without locale" + }, + "fullDescription": { + "text": "Reports 'toUpperCase()' or 'toLowerCase()' calls on 'String' objects that do not specify a 'java.util.Locale'. In these cases the default system locale is used, which can cause problems in an internationalized environment. For example the code '\"i\".toUpperCase().equals(\"I\")' returns 'false' in the Turkish and Azerbaijani locales, where the dotted and dotless 'i' are separate letters. Calling 'toUpperCase()' on an English string containing an 'i', when running in a Turkish locale, will return incorrect results. Alternatively, when dealing with strings that should be treated as locale-independent, like HTML tags, this can lead to errors.", + "markdown": "Reports `toUpperCase()` or `toLowerCase()` calls on `String` objects that do not specify a `java.util.Locale`. In these cases the default system locale is used, which can cause problems in an internationalized environment.\n\n\nFor example the code `\"i\".toUpperCase().equals(\"I\")` returns `false` in the Turkish and Azerbaijani locales, where\nthe dotted and dotless 'i' are separate letters. Calling `toUpperCase()` on an English string containing an 'i', when running\nin a Turkish locale, will return incorrect results. Alternatively, when dealing with strings that should be treated as locale-independent,\nlike HTML tags, this can lead to errors." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 9, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SynchronizationOnLocalVariableOrMethodParameter", + "shortDescription": { + "text": "Synchronization on local variable or method parameter" + }, + "fullDescription": { + "text": "Reports synchronization on a local variable or parameter. It is very difficult to guarantee correct operation when such synchronization is used. It may be possible to improve such code, for example, by controlling access using a synchronized wrapper class or by synchronizing on a field. Example: 'void bar() {\n final Object lock = new Object();\n synchronized (lock) { }\n }'", + "markdown": "Reports synchronization on a local variable or parameter.\n\n\nIt is very difficult to guarantee correct operation when such synchronization is used.\nIt may be possible to improve such code, for example, by controlling access using a synchronized wrapper class or by synchronizing on a\nfield.\n\n**Example:**\n\n\n void bar() {\n final Object lock = new Object();\n synchronized (lock) { }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NestedMethodCall", + "shortDescription": { + "text": "Nested method call" + }, + "fullDescription": { + "text": "Reports method calls used as parameters to another method call. The quick-fix introduces a variable to make the code simpler and easier to debug. Example: 'public int y() { return 1; }\n public int f(int x) { return 2 * x; }\n\n public void foo() {\n int x = f(y());\n }' After the quick-fix is applied: 'public int y() { return 1; }\n public int f(int x) { return 2 * x; }\n\n public void foo() {\n int y = y();\n int x = f(y);\n }' Use the inspection options to toggle the reporting of: method calls in field initializers calls to static methods calls to simple getters", + "markdown": "Reports method calls used as parameters to another method call.\n\nThe quick-fix introduces a variable to make the code simpler and easier to debug.\n\n**Example:**\n\n\n public int y() { return 1; }\n public int f(int x) { return 2 * x; }\n\n public void foo() {\n int x = f(y());\n }\n\nAfter the quick-fix is applied:\n\n\n public int y() { return 1; }\n public int f(int x) { return 2 * x; }\n\n public void foo() {\n int y = y();\n int x = f(y);\n }\n\n\nUse the inspection options to toggle the reporting of:\n\n* method calls in field initializers\n* calls to static methods\n* calls to simple getters" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FinalMethod", + "shortDescription": { + "text": "Method can't be overridden" + }, + "fullDescription": { + "text": "Reports methods that are declared 'final'. Such methods can't be overridden and may indicate a lack of object-oriented design. Some coding standards discourage 'final' methods.", + "markdown": "Reports methods that are declared `final`. Such methods can't be overridden and may indicate a lack of object-oriented design. Some coding standards discourage `final` methods." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NegatedConditionalExpression", + "shortDescription": { + "text": "Negated conditional expression" + }, + "fullDescription": { + "text": "Reports conditional expressions which are negated with a prefix expression, as such constructions may be confusing. There is a fix that propagates the outer negation to both branches. Example: '!(i == 1 ? a : b)' After the quick-fix is applied: 'i == 1 ? !a : !b'", + "markdown": "Reports conditional expressions which are negated with a prefix expression, as such constructions may be confusing.\n\nThere is a fix that propagates the outer negation to both branches.\n\nExample:\n\n\n !(i == 1 ? a : b)\n\nAfter the quick-fix is applied:\n\n\n i == 1 ? !a : !b\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassWithTooManyTransitiveDependents", + "shortDescription": { + "text": "Class with too many transitive dependents" + }, + "fullDescription": { + "text": "Reports a class on which too many other classes are directly or indirectly dependent. Any modification to such a class may require changing many other classes, which may be expensive. Only top-level classes are reported. Use the Maximum number of transitive dependents field to specify the maximum allowed number of direct or indirect dependents for a class. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports a class on which too many other classes are directly or indirectly dependent.\n\nAny modification to such a class may require changing many other classes, which may be expensive.\n\nOnly top-level classes are reported.\n\nUse the **Maximum number of transitive dependents** field to specify the maximum allowed number of direct or indirect dependents\nfor a class.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Dependency issues", + "index": 89, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CompareToUsesNonFinalVariable", + "shortDescription": { + "text": "Non-final field referenced in 'compareTo()'" + }, + "fullDescription": { + "text": "Reports access to a non-'final' field inside a 'compareTo()' implementation. Such access may result in 'compareTo()' returning different results at different points in the object's lifecycle, which may in turn cause problems when using the standard collections classes, for example 'java.util.TreeSet'. A quick-fix to make the field 'final' is available only when there is no write access to the field, otherwise no fixes are suggested. Example: 'class Foo implements Comparable{\n private int index;\n Foo(int idx) {\n index = idx;\n }\n @Override\n public int compareTo(Foo foo) {\n return Integer.compare(this.index, foo.index);\n }\n }' After the quick-fix is applied: 'class Foo implements Comparable{\n private final int index;\n Foo(int idx) {\n index = idx;\n }\n @Override\n public int compareTo(Foo foo) {\n return Integer.compare(this.index, foo.index);\n }\n }'", + "markdown": "Reports access to a non-`final` field inside a `compareTo()` implementation.\n\n\nSuch access may result in `compareTo()`\nreturning different results at different points in the object's lifecycle, which may in turn cause problems when\nusing the standard collections classes, for example `java.util.TreeSet`.\n\n\nA quick-fix to make the field `final` is available\nonly when there is no write access to the field, otherwise no fixes are suggested.\n\n**Example:**\n\n\n class Foo implements Comparable{\n private int index;\n Foo(int idx) {\n index = idx;\n }\n @Override\n public int compareTo(Foo foo) {\n return Integer.compare(this.index, foo.index);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo implements Comparable{\n private final int index;\n Foo(int idx) {\n index = idx;\n }\n @Override\n public int compareTo(Foo foo) {\n return Integer.compare(this.index, foo.index);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousSystemArraycopy", + "shortDescription": { + "text": "Suspicious 'System.arraycopy()' call" + }, + "fullDescription": { + "text": "Reports suspicious calls to 'System.arraycopy()'. Such calls are suspicious when: the source or destination is not of an array type the source and destination are of different types the copied chunk length is greater than 'src.length - srcPos' the copied chunk length is greater than 'dest.length - destPos' the ranges always intersect when the source and destination are the same array Example: 'void foo() {\n int[] src = new int[] { 1, 2, 3, 4 };\n System.arraycopy(src, 0, src, 1, 2); // warning: Copying to the same array with intersecting ranges\n }'", + "markdown": "Reports suspicious calls to `System.arraycopy()`.\n\nSuch calls are suspicious when:\n\n* the source or destination is not of an array type\n* the source and destination are of different types\n* the copied chunk length is greater than `src.length - srcPos`\n* the copied chunk length is greater than `dest.length - destPos`\n* the ranges always intersect when the source and destination are the same array\n\n**Example:**\n\n\n void foo() {\n int[] src = new int[] { 1, 2, 3, 4 };\n System.arraycopy(src, 0, src, 1, 2); // warning: Copying to the same array with intersecting ranges\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavacQuirks", + "shortDescription": { + "text": "Javac quirks" + }, + "fullDescription": { + "text": "Reports known Javac issues, performance problems, and incompatibilities. For example, type inference may be slow when it has to process many nested calls. The following code triggers a warning, as the vararg method call has 50+ poly arguments: 'Arrays.asList(\n Arrays.asList(\"a1\", \"b1\"),\n Arrays.asList(\"a2\", \"b2\"),\n ...\n Arrays.asList(\"a100\", \"b100\"));' The quick-fix adds explicit type arguments, which makes compilation and IDE processing much faster: '//noinspection RedundantTypeArguments\n Arrays.>asList(\n Arrays.asList(\"a1\", \"b1\"),\n Arrays.asList(\"a2\", \"b2\"),\n ...\n Arrays.asList(\"a100\", \"b100\"));'", + "markdown": "Reports known Javac issues, performance problems, and incompatibilities. For example, type inference may be slow when it has to process many nested calls.\n\nThe following code triggers a warning, as the vararg method call has 50+ poly arguments:\n\n\n Arrays.asList(\n Arrays.asList(\"a1\", \"b1\"),\n Arrays.asList(\"a2\", \"b2\"),\n ...\n Arrays.asList(\"a100\", \"b100\"));\n\nThe quick-fix adds explicit type arguments, which makes compilation and IDE processing much faster:\n\n\n //noinspection RedundantTypeArguments\n Arrays.>asList(\n Arrays.asList(\"a1\", \"b1\"),\n Arrays.asList(\"a2\", \"b2\"),\n ...\n Arrays.asList(\"a100\", \"b100\"));\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Compiler issues", + "index": 90, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SwitchStatement", + "shortDescription": { + "text": "'switch' statement" + }, + "fullDescription": { + "text": "Reports 'switch' statements. 'switch' statements often (but not always) indicate a poor object-oriented design. Example: 'switch (i) {\n // code\n }'", + "markdown": "Reports `switch` statements.\n\n`switch` statements often (but not always) indicate a poor object-oriented design.\n\nExample:\n\n\n switch (i) {\n // code\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AbsoluteAlignmentInUserInterface", + "shortDescription": { + "text": "Absolute alignment in AWT/Swing code" + }, + "fullDescription": { + "text": "Reports usages of absolute alignment constants from AWT and Swing. Internationalized applications use relative alignment because it respects the locale component orientation settings. Example: 'JPanel panel = new JPanel(new BorderLayout(2, 2));\n JLabel label = new JLabel(\"Hello World\");\n panel.add(label, BorderLayout.NORTH);' After the quick-fix is applied: 'JPanel panel = new JPanel(new BorderLayout(2, 2));\n JLabel label = new JLabel(\"Hello World\");\n panel.add(label, BorderLayout.PAGE_START);'", + "markdown": "Reports usages of absolute alignment constants from AWT and Swing. Internationalized applications use relative alignment because it respects the locale component orientation settings.\n\n**Example:**\n\n\n JPanel panel = new JPanel(new BorderLayout(2, 2));\n JLabel label = new JLabel(\"Hello World\");\n panel.add(label, BorderLayout.NORTH);\n\nAfter the quick-fix is applied:\n\n\n JPanel panel = new JPanel(new BorderLayout(2, 2));\n JLabel label = new JLabel(\"Hello World\");\n panel.add(label, BorderLayout.PAGE_START);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 9, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringBufferReplaceableByString", + "shortDescription": { + "text": "'StringBuilder' can be replaced with 'String'" + }, + "fullDescription": { + "text": "Reports usages of 'StringBuffer', 'StringBuilder', or 'StringJoiner' which can be replaced with a single 'String' concatenation. Using 'String' concatenation makes the code shorter and simpler. This inspection only reports when the suggested replacement does not result in significant performance drawback on modern JVMs. In many cases, 'String' concatenation may perform better. Example: 'StringBuilder result = new StringBuilder();\n result.append(\"i = \");\n result.append(i);\n result.append(\";\");\n return result.toString();' After the quick-fix is applied: 'String result = \"i = \" + i + \";\";\n return result;'", + "markdown": "Reports usages of `StringBuffer`, `StringBuilder`, or `StringJoiner` which can be replaced with a single `String` concatenation.\n\nUsing `String` concatenation\nmakes the code shorter and simpler.\n\n\nThis inspection only reports when the suggested replacement does not result in significant\nperformance drawback on modern JVMs. In many cases, `String` concatenation may perform better.\n\n**Example:**\n\n\n StringBuilder result = new StringBuilder();\n result.append(\"i = \");\n result.append(i);\n result.append(\";\");\n return result.toString();\n\nAfter the quick-fix is applied:\n\n\n String result = \"i = \" + i + \";\";\n return result;\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SourceToSinkFlow", + "shortDescription": { + "text": "Non-safe string is passed to safe method" + }, + "fullDescription": { + "text": "Reports cases when non-safe string is passed to a method with parameter marked with annotation 'org.checkerframework.checker.tainting.qual.Untainted'. Safe string is: call of method that is marked as '@Untainted' local variable or method parameter that does not call non-safe methods field, local variable or parameter that is marked as '@Untainted' and does not have non-safe methods calls assigned Example: 'void doSmth(boolean b) {\n String s = safe();\n String s1 = \"other\";\n if (b) s1 = s;\n sink(s);\n }\n \n String sink(@Untainted String s) {}'\n Here we do not have non-safe string assignments to 's' so warning is not produced. On the other hand: 'void doSmth(boolean b) {\n String s = safe();\n String s1 = \"other\";\n s1 = foo();\n if (b) s = s1;\n sink(s); // warning here\n }\n \n String foo();\n\n String sink(@Untainted String s) {}'\n Here we have a warning since 's1' has an unknown state after 'foo' call result assignment. New in 2021.2", + "markdown": "Reports cases when non-safe string is passed to a method with parameter marked with annotation `org.checkerframework.checker.tainting.qual.Untainted`.\n\n\nSafe string is:\n\n* call of method that is marked as `@Untainted`\n* local variable or method parameter that does not call non-safe methods\n* field, local variable or parameter that is marked as `@Untainted` and does not have non-safe methods calls assigned\n\n\nExample:\n\n\n void doSmth(boolean b) {\n String s = safe();\n String s1 = \"other\";\n if (b) s1 = s;\n sink(s);\n }\n \n String sink(@Untainted String s) {}\n\n\nHere we do not have non-safe string assignments to `s` so warning is not produced. On the other hand:\n\n\n void doSmth(boolean b) {\n String s = safe();\n String s1 = \"other\";\n s1 = foo();\n if (b) s = s1;\n sink(s); // warning here\n }\n \n String foo();\n\n String sink(@Untainted String s) {}\n\n\nHere we have a warning since `s1` has an unknown state after `foo` call result assignment.\n\nNew in 2021.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 4, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RecordCanBeClass", + "shortDescription": { + "text": "Record can be converted to class" + }, + "fullDescription": { + "text": "Reports record classes and suggests converting them to ordinary classes. This inspection makes it possible to move a Java record to a codebase using an earlier Java version by applying the quick-fix to this record. Note that the resulting class is not completely equivalent to the original record: The resulting class no longer extends 'java.lang.Record', so 'instanceof Record' returns 'false'. Reflection methods like 'Class.isRecord()' and 'Class.getRecordComponents()' produce different results. The generated 'hashCode()' implementation may produce a different result because the formula to calculate record 'hashCode' is deliberately not specified. Record serialization mechanism differs from that of an ordinary class. Refer to Java Object Serialization Specification for details. Example: 'record Point(int x, int y) {}' After the quick-fix is applied: 'final class Point {\n private final int x;\n private final int y;\n\n Point(int x, int y) {\n this.x = x;\n this.y = y;\n }\n\n public int x() { return x; }\n\n public int y() { return y; }\n\n @Override\n public boolean equals(Object obj) {\n if (obj == this) return true;\n if (obj == null || obj.getClass() != this.getClass()) return false;\n var that = (Point)obj;\n return this.x == that.x &&\n this.y == that.y;\n }\n\n @Override\n public int hashCode() {\n return Objects.hash(x, y);\n }\n\n @Override\n public String toString() {\n return \"Point[\" +\n \"x=\" + x + \", \" +\n \"y=\" + y + ']';\n }\n }' This inspection only reports if the language level of the project or module is 16 higher. New in 2020.3", + "markdown": "Reports record classes and suggests converting them to ordinary classes.\n\nThis inspection makes it possible to move a Java record to a codebase using an earlier Java version\nby applying the quick-fix to this record.\n\n\nNote that the resulting class is not completely equivalent to the original record:\n\n* The resulting class no longer extends `java.lang.Record`, so `instanceof Record` returns `false`.\n* Reflection methods like `Class.isRecord()` and `Class.getRecordComponents()` produce different results.\n* The generated `hashCode()` implementation may produce a different result because the formula to calculate record `hashCode` is deliberately not specified.\n* Record serialization mechanism differs from that of an ordinary class. Refer to *Java Object Serialization Specification* for details.\n\nExample:\n\n\n record Point(int x, int y) {}\n\nAfter the quick-fix is applied:\n\n\n final class Point {\n private final int x;\n private final int y;\n\n Point(int x, int y) {\n this.x = x;\n this.y = y;\n }\n\n public int x() { return x; }\n\n public int y() { return y; }\n\n @Override\n public boolean equals(Object obj) {\n if (obj == this) return true;\n if (obj == null || obj.getClass() != this.getClass()) return false;\n var that = (Point)obj;\n return this.x == that.x &&\n this.y == that.y;\n }\n\n @Override\n public int hashCode() {\n return Objects.hash(x, y);\n }\n\n @Override\n public String toString() {\n return \"Point[\" +\n \"x=\" + x + \", \" +\n \"y=\" + y + ']';\n }\n }\n\nThis inspection only reports if the language level of the project or module is 16 higher.\n\nNew in 2020.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantLambdaParameterType", + "shortDescription": { + "text": "Redundant lambda parameter types" + }, + "fullDescription": { + "text": "Reports lambda formal parameter types that are redundant because they can be inferred from the context. Example: 'Map map = ...\n map.forEach((String s, Integer i) -> log.info(s + \"=\" + i));' The quick-fix removes the parameter types from the lambda. 'Map map = ...\n map.forEach((s, i) -> log.info(s + \"=\" + i));'", + "markdown": "Reports lambda formal parameter types that are redundant because they can be inferred from the context.\n\n**Example:**\n\n\n Map map = ...\n map.forEach((String s, Integer i) -> log.info(s + \"=\" + i));\n\nThe quick-fix removes the parameter types from the lambda.\n\n\n Map map = ...\n map.forEach((s, i) -> log.info(s + \"=\" + i));\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 15, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LoggingConditionDisagreesWithLogStatement", + "shortDescription": { + "text": "Log condition does not match logging call" + }, + "fullDescription": { + "text": "Reports is log enabled for conditions of 'if' statements that do not match the log level of the contained logging call. For example: 'if (LOG.isTraceEnabled()) {\n // debug level logged, but checked for trace level\n LOG.debug(\"some log message\");\n }' This inspection understands the java.util.logging, log4j, Log4j 2, Apache Commons Logging and the SLF4J logging frameworks.", + "markdown": "Reports *is log enabled for* conditions of `if` statements that do not match the log level of the contained logging call.\n\n\nFor example:\n\n\n if (LOG.isTraceEnabled()) {\n // debug level logged, but checked for trace level\n LOG.debug(\"some log message\");\n }\n\nThis inspection understands the *java.util.logging* , *log4j* , *Log4j 2* , *Apache Commons Logging*\nand the *SLF4J* logging frameworks." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Logging", + "index": 64, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MalformedFormatString", + "shortDescription": { + "text": "Malformed format string" + }, + "fullDescription": { + "text": "Reports format strings that don't comply with the standard Java syntax. By default, the inspection considers a compile-time constant a format string if it's used as an argument to the corresponding methods on 'java.util.Formatter', 'java.lang.String', 'java.io.PrintWriter' or 'java.io.PrintStream'. Example: 'String.format(\"x = %d, y = %d\", 42);' Use the inspection settings to mark additional classes and methods as related to string formatting. As an alternative, you can use the 'org.intellij.lang.annotations.PrintFormat' annotation to mark the format string method parameter. In this case, the format arguments parameter must immediately follow the format string and be the last method parameter. Example: 'void myFormatMethod(int mode, @PrintFormat String formatString, Object... args) {...}' Methods annotated in this way will also be recognized by this inspection.", + "markdown": "Reports format strings that don't comply with the standard Java syntax.\n\nBy default, the inspection considers a compile-time constant a format string if it's used as an argument to the corresponding methods on\n`java.util.Formatter`, `java.lang.String`, `java.io.PrintWriter` or `java.io.PrintStream`.\n\n**Example:**\n\n\n String.format(\"x = %d, y = %d\", 42);\n\nUse the inspection settings to mark additional classes and methods as related to string formatting.\n\nAs an alternative, you can use the `org.intellij.lang.annotations.PrintFormat` annotation\nto mark the format string method parameter. In this case,\nthe format arguments parameter must immediately follow the format string and be the last method parameter. Example:\n\n\n void myFormatMethod(int mode, @PrintFormat String formatString, Object... args) {...}\n\n\nMethods annotated in this way will also be recognized by this inspection." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConditionalExpression", + "shortDescription": { + "text": "Conditional expression" + }, + "fullDescription": { + "text": "Reports usages of the ternary condition operator and suggests converting them to 'if'/'else' statements. Some code standards prohibit the use of the condition operator. Example: 'Object result = (condition) ? foo() : bar();' After the quick-fix is applied: 'Object result;\n if (condition) {\n comp = foo();\n }\n else {\n comp = bar();\n }' Configure the inspection: Use the Ignore for simple assignments and returns option to ignore simple assignments and returns and allow the following constructs: 'String s = (foo == null) ? \"\" : foo.toString();' Use the Ignore places where an if statement is not possible option to ignore conditional expressions in contexts in which automatic replacement with an if statement is not possible (for example, when the conditional expression is used as an argument to a 'super()' constructor call).", + "markdown": "Reports usages of the ternary condition operator and suggests converting them to `if`/`else` statements.\n\nSome code standards prohibit the use of the condition operator.\n\nExample:\n\n\n Object result = (condition) ? foo() : bar();\n\nAfter the quick-fix is applied:\n\n\n Object result;\n if (condition) {\n comp = foo();\n }\n else {\n comp = bar();\n }\n\nConfigure the inspection:\n\nUse the **Ignore for simple assignments and returns** option to ignore simple assignments and returns and allow the following constructs:\n\n\n String s = (foo == null) ? \"\" : foo.toString();\n\n\nUse the **Ignore places where an if statement is not possible** option to ignore conditional expressions in contexts in which automatic\nreplacement with an if statement is not possible (for example, when the conditional expression is used as an argument to a\n`super()` constructor call)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThreadYield", + "shortDescription": { + "text": "Call to 'Thread.yield()'" + }, + "fullDescription": { + "text": "Reports calls to 'Thread.yield()'. The behavior of 'yield()' is non-deterministic and platform-dependent, and it is rarely appropriate to use this method. Its use should be combined with detailed profiling and benchmarking to ensure that it actually has the desired effect. Example: 'public static void main(String[] args) {\n Runnable r = () -> {\n for (int i = 0; i < 10; i++) {\n System.out.println(i);\n Thread.yield();\n }\n };\n new Thread(r).start();\n new Thread(r).start();\n }'", + "markdown": "Reports calls to `Thread.yield()`.\n\n\nThe behavior of `yield()` is non-deterministic and platform-dependent, and it is rarely appropriate to use this method.\nIts use should be combined with detailed profiling and benchmarking to ensure that it actually has the desired effect.\n\n**Example:**\n\n\n public static void main(String[] args) {\n Runnable r = () -> {\n for (int i = 0; i < 10; i++) {\n System.out.println(i);\n Thread.yield();\n }\n };\n new Thread(r).start();\n new Thread(r).start();\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseOfClone", + "shortDescription": { + "text": "Use of 'clone()' or 'Cloneable'" + }, + "fullDescription": { + "text": "Reports implementations of and calls to the 'clone()' method and uses of 'java.lang.Cloneable'. Some coding standards prohibit the use of 'clone()' and recommend using a copy constructor or the 'static' factory method instead. The inspection ignores calls to 'clone()' on arrays because it's a correct and compact way to copy an array.", + "markdown": "Reports implementations of and calls to the `clone()` method and uses of `java.lang.Cloneable`.\n\nSome coding standards prohibit the use of `clone()` and recommend using a copy constructor or\nthe `static` factory method instead.\n\nThe inspection ignores calls to `clone()` on arrays because it's a correct and compact way to copy an array." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Cloning issues", + "index": 80, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MissingFinalNewline", + "shortDescription": { + "text": "Missing final new line" + }, + "fullDescription": { + "text": "Reports if manifest files do not end with a final newline as required by the JAR file specification.", + "markdown": "Reports if manifest files do not end with a final newline as required by the JAR file specification." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Manifest", + "index": 93, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NestedTryStatement", + "shortDescription": { + "text": "Nested 'try' statement" + }, + "fullDescription": { + "text": "Reports nested 'try' statements. Nested 'try' statements may result in unclear code and should probably have their 'catch' and 'finally' sections merged.", + "markdown": "Reports nested `try` statements.\n\nNested `try` statements\nmay result in unclear code and should probably have their `catch` and `finally` sections\nmerged." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LambdaCanBeMethodCall", + "shortDescription": { + "text": "Lambda can be replaced with method call" + }, + "fullDescription": { + "text": "Reports lambda expressions which can be replaced with a call to a JDK method. For example, an expression 'x -> x' of type 'Function' can be replaced with a 'Function.identity()' call. New in 2017.1", + "markdown": "Reports lambda expressions which can be replaced with a call to a JDK method.\n\nFor example, an expression `x -> x` of type `Function`\ncan be replaced with a `Function.identity()` call.\n\nNew in 2017.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 59, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EndlessStream", + "shortDescription": { + "text": "Non-short-circuit operation consumes infinite stream" + }, + "fullDescription": { + "text": "Reports non-short-circuit operations consuming an infinite stream. Such operations can be completed only by throwing an exception. Example: 'Stream.iterate(0, i -> i + 1).collect(Collectors.toList())'", + "markdown": "Reports non-short-circuit operations consuming an infinite stream. Such operations can be completed only by throwing an exception.\n\nExample:\n\n\n Stream.iterate(0, i -> i + 1).collect(Collectors.toList())\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonFinalUtilityClass", + "shortDescription": { + "text": "Utility class is not 'final'" + }, + "fullDescription": { + "text": "Reports utility classes that aren't 'final'. Utility classes have all fields and methods declared as 'static'. Making them 'final' prevents them from being accidentally subclassed.", + "markdown": "Reports utility classes that aren't `final`.\n\nUtility classes have all fields and methods declared as `static`.\nMaking them `final` prevents them from being accidentally subclassed." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Singleton", + "shortDescription": { + "text": "Singleton" + }, + "fullDescription": { + "text": "Reports singleton classes. Singleton classes are declared in a way that only one instance of the class can ever be instantiated. Singleton classes complicate testing, and their presence may indicate a lack of object-oriented design. Example: 'class Singleton {\n private static final Singleton ourInstance = new Singleton();\n\n private Singleton() {\n }\n\n public Singleton getInstance() {\n return ourInstance;\n }\n }'", + "markdown": "Reports singleton classes.\n\nSingleton classes are declared in a way that only one instance of the class can ever be instantiated. Singleton classes complicate testing,\nand their presence may indicate a lack of object-oriented design.\n\n**Example:**\n\n\n class Singleton {\n private static final Singleton ourInstance = new Singleton();\n\n private Singleton() {\n }\n\n public Singleton getInstance() {\n return ourInstance;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonStaticFinalLogger", + "shortDescription": { + "text": "Non-constant logger" + }, + "fullDescription": { + "text": "Reports logger fields that are not declared 'static' and/or 'final'. Ensuring that every class logger is effectively constant and bound to that class simplifies the task of providing a unified logging implementation for an application. A quick-fix is provided to change the logger modifiers to 'static final'. Example: 'public class Significant {\n private Logger LOG = Logger.getLogger(Critical.class);\n }' After the quick-fix is applied: 'public class Significant {\n private static final Logger LOG = Logger.getLogger(Critical.class);\n }' Configure the inspection: Use the Logger class name table to specify logger class names. The inspection will report the fields that are not 'static' and 'final' and are of the type equal to one of the specified class names.", + "markdown": "Reports logger fields that are not declared `static` and/or `final`. Ensuring that every class logger is effectively constant and bound to that class simplifies the task of providing a unified logging implementation for an application.\n\nA quick-fix is provided to change the logger modifiers to `static final`.\n\n**Example:**\n\n\n public class Significant {\n private Logger LOG = Logger.getLogger(Critical.class);\n }\n\nAfter the quick-fix is applied:\n\n\n public class Significant {\n private static final Logger LOG = Logger.getLogger(Critical.class);\n }\n\n\nConfigure the inspection:\n\n* Use the **Logger class name** table to specify logger class names. The inspection will report the fields that are not `static` and `final` and are of the type equal to one of the specified class names." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Logging", + "index": 64, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FuseStreamOperations", + "shortDescription": { + "text": "Subsequent steps can be fused into Stream API chain" + }, + "fullDescription": { + "text": "Detects transformations outside a Stream API chain that could be incorporated into it. Example: 'List list = stream.collect(Collectors.toList());\n list.sort(null);\n return list.toArray(new String[list.size()]);' After the conversion: 'return stream.sorted().toArray(String[]::new);' Note that sometimes the converted stream chain may replace explicit 'ArrayList' with 'Collectors.toList()' or explicit 'HashSet' with 'Collectors.toSet()'. The current library implementation uses these collections internally. However, this approach is not very reliable and might change in the future altering the semantics of your code. If you are concerned about it, use the Do not suggest 'toList()' or 'toSet()' collectors option to suggest 'Collectors.toCollection()' instead of 'toList' and 'toSet' collectors. This inspection only reports if the language level of the project or module is 8 or higher.", + "markdown": "Detects transformations outside a Stream API chain that could be incorporated into it.\n\nExample:\n\n\n List list = stream.collect(Collectors.toList());\n list.sort(null);\n return list.toArray(new String[list.size()]);\n\nAfter the conversion:\n\n\n return stream.sorted().toArray(String[]::new);\n\n\nNote that sometimes the converted stream chain may replace explicit `ArrayList` with `Collectors.toList()` or explicit\n`HashSet` with `Collectors.toSet()`. The current library implementation uses these collections internally. However,\nthis approach is not very reliable and might change in the future altering the semantics of your code.\n\nIf you are concerned about it, use the **Do not suggest 'toList()' or 'toSet()' collectors** option to suggest\n`Collectors.toCollection()` instead of `toList` and `toSet` collectors.\n\nThis inspection only reports if the language level of the project or module is 8 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConditionalExpressionWithIdenticalBranches", + "shortDescription": { + "text": "Conditional expression with identical branches" + }, + "fullDescription": { + "text": "Reports conditional expressions with identical 'then' and 'else' branches. Such expressions almost certainly indicate bugs. The inspection provides a fix that collapses conditional expressions. Example: 'int y = x == 10 ? 4 : 4;' After the quick-fix is applied: 'int y = 4;'", + "markdown": "Reports conditional expressions with identical `then` and `else` branches.\n\nSuch expressions almost certainly indicate bugs. The inspection provides a fix that collapses conditional expressions.\n\nExample:\n\n\n int y = x == 10 ? 4 : 4;\n\nAfter the quick-fix is applied:\n\n\n int y = 4;\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DefaultNotLastCaseInSwitch", + "shortDescription": { + "text": "'default' not last case in 'switch'" + }, + "fullDescription": { + "text": "Reports 'switch' statements or expressions in which the 'default' branch is positioned before another case. Such a construct is unnecessarily confusing. A quick-fix is provided to move the 'default' branch to the last position, if possible. Example: 'switch (n) {\n default:\n System.out.println();\n break;\n case 1:\n break;\n }' After the quick-fix is applied: 'switch (n) {\n case 1:\n break;\n default:\n System.out.println();\n break;\n }'", + "markdown": "Reports `switch` statements or expressions in which the `default` branch is positioned before another case. Such a construct is unnecessarily confusing. A quick-fix is provided to move the `default` branch to the last position, if possible.\n\n**Example:**\n\n\n switch (n) {\n default:\n System.out.println();\n break;\n case 1:\n break;\n }\n\nAfter the quick-fix is applied:\n\n\n switch (n) {\n case 1:\n break;\n default:\n System.out.println();\n break;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NullThrown", + "shortDescription": { + "text": "'null' thrown" + }, + "fullDescription": { + "text": "Reports 'null' literals that are used as the argument of a 'throw' statement. Such constructs produce a 'java.lang.NullPointerException' that usually should not be thrown programmatically.", + "markdown": "Reports `null` literals that are used as the argument of a `throw` statement.\n\nSuch constructs produce a `java.lang.NullPointerException` that usually should not be thrown programmatically." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LocalCanBeFinal", + "shortDescription": { + "text": "Local variable or parameter can be 'final'" + }, + "fullDescription": { + "text": "Reports parameters or local variables that may have the 'final' modifier added to their declaration. Example: 'ArrayList list = new ArrayList();\n fill(list);\n return list;' After the quick-fix is applied: 'final ArrayList list = new ArrayList();\n fill(list);\n return list;' Use the inspection's options to define whether parameters or local variables should be reported.", + "markdown": "Reports parameters or local variables that may have the `final` modifier added to their declaration.\n\nExample:\n\n\n ArrayList list = new ArrayList();\n fill(list);\n return list;\n\nAfter the quick-fix is applied:\n\n\n final ArrayList list = new ArrayList();\n fill(list);\n return list;\n\n\nUse the inspection's options to define whether parameters or local variables should be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FieldMayBeStatic", + "shortDescription": { + "text": "Field can be made 'static'" + }, + "fullDescription": { + "text": "Reports instance variables that can safely be made 'static'. A field can be static if it is declared 'final' and initialized with a constant. Example: 'public final String str = \"sample\";'", + "markdown": "Reports instance variables that can safely be made `static`. A field can be static if it is declared `final` and initialized with a constant.\n\n**Example:**\n\n\n public final String str = \"sample\";\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ArrayEquals", + "shortDescription": { + "text": "'equals()' called on array" + }, + "fullDescription": { + "text": "Reports 'equals()' calls that compare two arrays. Calling 'equals()' on an array compares identity and is equivalent to using '=='. Use 'Arrays.equals()' to compare the contents of two arrays, or 'Arrays.deepEquals()' for multi-dimensional arrays. Example: 'void sample(int[] first, int[] second){\n if (first.equals(second)) return;\n }' After the quick-fix is applied: 'void sample(int[] first, int[] second){\n if (Arrays.equals(first, second)) return;\n }'", + "markdown": "Reports `equals()` calls that compare two arrays.\n\nCalling `equals()` on an array compares identity and is equivalent to using `==`.\nUse `Arrays.equals()` to compare the contents of two arrays, or `Arrays.deepEquals()` for\nmulti-dimensional arrays.\n\n**Example:**\n\n\n void sample(int[] first, int[] second){\n if (first.equals(second)) return;\n }\n\nAfter the quick-fix is applied:\n\n\n void sample(int[] first, int[] second){\n if (Arrays.equals(first, second)) return;\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ProblematicVarargsMethodOverride", + "shortDescription": { + "text": "Non-varargs method overrides varargs method" + }, + "fullDescription": { + "text": "Reports methods that override a variable arity (a.k.a. varargs) method but replace the variable arity parameter with an array parameter. Though this code is valid, it may be confusing and should be avoided.", + "markdown": "Reports methods that override a variable arity (a.k.a. varargs) method but replace the variable arity parameter with an array parameter. Though this code is valid, it may be confusing and should be avoided." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 25, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MisspelledHeader", + "shortDescription": { + "text": "Unknown or misspelled header name" + }, + "fullDescription": { + "text": "Reports any unknown and probably misspelled header names and provides possible variants.", + "markdown": "Reports any unknown and probably misspelled header names and provides possible variants." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Manifest", + "index": 93, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OnlyOneElementUsed", + "shortDescription": { + "text": "Only one element is used" + }, + "fullDescription": { + "text": "Reports lists, arrays, and strings where exactly one element is queried right upon the creation. Such expressions may appear after refactoring and usually could be replaced with an accessed element. Example: 'System.out.println(new int[] {1,2,3,4,5}[2]);' After the quick-fix is applied: 'System.out.println(3);' New in 2022.3", + "markdown": "Reports lists, arrays, and strings where exactly one element is queried right upon the creation. Such expressions may appear after refactoring and usually could be replaced with an accessed element.\n\nExample:\n\n\n System.out.println(new int[] {1,2,3,4,5}[2]);\n\nAfter the quick-fix is applied:\n\n\n System.out.println(3);\n\nNew in 2022.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AtomicFieldUpdaterIssues", + "shortDescription": { + "text": "Inconsistent 'AtomicFieldUpdater' declaration" + }, + "fullDescription": { + "text": "Reports issues with 'AtomicLongFieldUpdater', 'AtomicIntegerFieldUpdater', or 'AtomicReferenceFieldUpdater' fields (the 'java.util.concurrent.atomic' package). The reported issues are identical to the runtime problems that can happen with atomic field updaters: specified field not found, specified field not accessible, specified field has a wrong type, and so on. Examples: 'class A {\n private static volatile int value = 0;\n private static final AtomicIntegerFieldUpdater updater =\n AtomicIntegerFieldUpdater.newUpdater((A.class), \"value\"); // warning: Field 'value' has 'static' modifier\n }' 'class B {\n private static final AtomicIntegerFieldUpdater updater =\n AtomicIntegerFieldUpdater.newUpdater(B.class, \"value\"); // warning: No field named 'value' found in class 'B'\n }'", + "markdown": "Reports issues with `AtomicLongFieldUpdater`, `AtomicIntegerFieldUpdater`, or `AtomicReferenceFieldUpdater` fields (the `java.util.concurrent.atomic` package).\n\nThe reported issues are identical to the runtime problems that can happen with atomic field updaters:\nspecified field not found, specified field not accessible, specified field has a wrong type, and so on.\n\n**Examples:**\n\n*\n\n\n class A {\n private static volatile int value = 0;\n private static final AtomicIntegerFieldUpdater updater =\n AtomicIntegerFieldUpdater.newUpdater((A.class), \"value\"); // warning: Field 'value' has 'static' modifier\n }\n \n*\n\n\n class B {\n private static final AtomicIntegerFieldUpdater updater =\n AtomicIntegerFieldUpdater.newUpdater(B.class, \"value\"); // warning: No field named 'value' found in class 'B'\n }\n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BadExceptionThrown", + "shortDescription": { + "text": "Prohibited exception thrown" + }, + "fullDescription": { + "text": "Reports 'throw' statements that throw an inappropriate exception. For example an exception can be inappropriate because it is overly generic, such as 'java.lang.Exception' or 'java.io.IOException'. Example: 'void setup(Mode mode) {\n if (mode == null)\n throw new RuntimeException(\"Problem during setup\"); // warning: Prohibited exception 'RuntimeException' thrown\n ...\n }' Use the Prohibited exceptions list to specify which exceptions should be reported.", + "markdown": "Reports `throw` statements that throw an inappropriate exception. For example an exception can be inappropriate because it is overly generic, such as `java.lang.Exception` or `java.io.IOException`.\n\n**Example:**\n\n\n void setup(Mode mode) {\n if (mode == null)\n throw new RuntimeException(\"Problem during setup\"); // warning: Prohibited exception 'RuntimeException' thrown\n ...\n }\n\nUse the **Prohibited exceptions** list to specify which exceptions should be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryBoxing", + "shortDescription": { + "text": "Unnecessary boxing" + }, + "fullDescription": { + "text": "Reports explicit boxing, that is wrapping of primitive values in objects. Explicit manual boxing is unnecessary as of Java 5 and later, and can safely be removed. Examples: 'Integer i = new Integer(1);' → 'Integer i = Integer.valueOf(1);' 'int i = Integer.valueOf(1);' → 'int i = 1;' Use the Only report truly superfluously boxed expressions option to report only truly superfluous boxing, where a boxed value is immediately unboxed either implicitly or explicitly. In this case, the entire boxing-unboxing step can be removed. The inspection doesn't report simple explicit boxing. This inspection only reports if the language level of the project or module is 5 or higher.", + "markdown": "Reports explicit boxing, that is wrapping of primitive values in objects.\n\nExplicit manual boxing is unnecessary as of Java 5 and later, and can safely be removed.\n\n**Examples:**\n\n* `Integer i = new Integer(1);` → `Integer i = Integer.valueOf(1);`\n* `int i = Integer.valueOf(1);` → `int i = 1;`\n\n\nUse the **Only report truly superfluously boxed expressions** option to report only truly superfluous boxing,\nwhere a boxed value is immediately unboxed either implicitly or explicitly.\nIn this case, the entire boxing-unboxing step can be removed. The inspection doesn't report simple explicit boxing.\n\nThis inspection only reports if the language level of the project or module is 5 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 5", + "index": 51, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PackageNamingConvention", + "shortDescription": { + "text": "Package naming convention" + }, + "fullDescription": { + "text": "Reports packages whose names are either too short, too long, or do not follow the specified regular expression pattern. Example: 'package io;' Use the options to specify the minimum and maximum length of the package name as well as a regular expression that matches valid package names (regular expressions are in standard 'java.util.regex' format).", + "markdown": "Reports packages whose names are either too short, too long, or do not follow the specified regular expression pattern.\n\n**Example:**\n\n\n package io;\n\n\nUse the options to specify the minimum and maximum length of the package name\nas well as a regular expression that matches valid package names\n(regular expressions are in standard `java.util.regex` format)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions", + "index": 50, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Anonymous2MethodRef", + "shortDescription": { + "text": "Anonymous type can be replaced with method reference" + }, + "fullDescription": { + "text": "Reports anonymous classes which can be replaced with method references. Note that if an anonymous class is converted into an unbound method reference, the same method reference object can be reused by the Java runtime during subsequent invocations. On the other hand, when an anonymous class is used, separate objects are created every time. Thus, applying the quick-fix can cause the semantics change in rare cases, e.g. when anonymous class instances are used as 'HashMap' keys. Example: 'Runnable r = new Runnable() {\n @Override\n public void run() {\n System.out.println();\n }\n };' The quick-fix changes this code to the compact form: 'Runnable r = System.out::println;'. Use the Report when interface is not annotated with @FunctionalInterface option to enable this inspection for interfaces which are not annotated with @FunctionalInterface. This inspection only reports if the language level of the project or module is 8 or higher.", + "markdown": "Reports anonymous classes which can be replaced with method references.\n\n\nNote that if an anonymous class is converted into an unbound method reference, the same method reference object\ncan be reused by the Java runtime during subsequent invocations. On the other hand, when an anonymous class is used,\nseparate objects are created every time. Thus, applying the quick-fix can cause the semantics change in rare cases,\ne.g. when anonymous class instances are used as `HashMap` keys.\n\n**Example:**\n\n\n Runnable r = new Runnable() {\n @Override\n public void run() {\n System.out.println();\n }\n };\n\nThe quick-fix changes this code to the compact form: `Runnable r = System.out::println;`.\n\nUse the **Report when interface is not annotated with @FunctionalInterface** option to enable this inspection for\ninterfaces which are not annotated with @FunctionalInterface.\n\nThis inspection only reports if the language level of the project or module is 8 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 59, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PublicMethodNotExposedInInterface", + "shortDescription": { + "text": "'public' method not exposed in interface" + }, + "fullDescription": { + "text": "Reports 'public' methods in classes which are not exposed in an interface. Exposing all 'public' methods via an interface is important for maintaining loose coupling, and may be necessary for certain component-based programming styles. Example: 'interface Person {\n String getName();\n}\n\nclass PersonImpl implements Person {\n private String name;\n\n // ok: method is exposed in interface\n @Override\n public String getName() {\n return name;\n }\n\n // warning: method is public\n // but not exposed in interface\n public void setName() {\n this.name = name;\n }\n}' Use the Ignore if annotated by list to specify special annotations. Methods annotated with one of these annotations will be ignored by this inspection. Use the Ignore if the containing class does not implement a non-library interface option to ignore methods from classes which do not implement any interface from the project.", + "markdown": "Reports `public` methods in classes which are not exposed in an interface.\n\nExposing all `public` methods via an interface is important for\nmaintaining loose coupling, and may be necessary for certain component-based programming styles.\n\nExample:\n\n\n interface Person {\n String getName();\n }\n\n class PersonImpl implements Person {\n private String name;\n\n // ok: method is exposed in interface\n @Override\n public String getName() {\n return name;\n }\n\n // warning: method is public\n // but not exposed in interface\n public void setName() {\n this.name = name;\n }\n }\n\n\nUse the **Ignore if annotated by** list to specify special annotations. Methods annotated with one of\nthese annotations will be ignored by this inspection.\n\n\nUse the **Ignore if the containing class does not implement a non-library interface** option to ignore methods from classes which do not\nimplement any interface from the project." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 75, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SerializableHasSerialVersionUIDField", + "shortDescription": { + "text": "Serializable class without 'serialVersionUID'" + }, + "fullDescription": { + "text": "Reports classes that implement 'Serializable' and do not declare a 'serialVersionUID' field. Without a 'serialVersionUID' field, any change to the class will make previously serialized versions unreadable. Example: 'class Main implements Serializable {\n }' After the quick-fix is applied: 'class Main implements Serializable {\n private static final long serialVersionUID = -1446398935944895849L;\n }' When using a language level of JDK 14 or higher, the quickfix will also add the 'java.io.Serial' annotation. Use the following options to configure the inspection: List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit 'Serializable' from a superclass but are not intended for serialization. Whether to ignore 'Serializable' anonymous classes.", + "markdown": "Reports classes that implement `Serializable` and do not declare a `serialVersionUID` field.\n\n\nWithout a `serialVersionUID` field, any change to the class will make previously serialized versions unreadable.\n\n**Example:**\n\n\n class Main implements Serializable {\n }\n\nAfter the quick-fix is applied:\n\n\n class Main implements Serializable {\n private static final long serialVersionUID = -1446398935944895849L;\n }\n\nWhen using a language level of JDK 14 or higher, the quickfix will also add the `java.io.Serial` annotation.\n\nUse the following options to configure the inspection:\n\n* List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit `Serializable` from a superclass but are not intended for serialization.\n* Whether to ignore `Serializable` anonymous classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 4, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThrowableNotThrown", + "shortDescription": { + "text": "'Throwable' not thrown" + }, + "fullDescription": { + "text": "Reports instantiations of 'Throwable' or its subclasses, where the created 'Throwable' is never actually thrown. Additionally, this inspection reports method calls that return instances of 'Throwable' or its subclasses, when the result of the method call is not thrown. Calls to methods annotated with the Error Prone's or AssertJ's '@CanIgnoreReturnValue' annotation will not be reported. Example: 'void check(String s) {\n if (s == null) {\n new NullPointerException(\"s\");\n }\n // ...\n }'", + "markdown": "Reports instantiations of `Throwable` or its subclasses, where the created `Throwable` is never actually thrown. Additionally, this inspection reports method calls that return instances of `Throwable` or its subclasses, when the result of the method call is not thrown.\n\nCalls to methods annotated with the Error Prone's or AssertJ's `@CanIgnoreReturnValue` annotation will not be reported.\n\n**Example:**\n\n\n void check(String s) {\n if (s == null) {\n new NullPointerException(\"s\");\n }\n // ...\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CapturingCleaner", + "shortDescription": { + "text": "Cleaner captures object reference" + }, + "fullDescription": { + "text": "Reports 'Runnable' passed to a 'Cleaner.register()' capturing reference being registered. If the reference is captured, it will never be phantom reachable and the cleaning action will never be invoked. Possible sources of this problem: Lambda using non-static methods, fields, or 'this' itself Non-static inner class (anonymous or not) always captures this reference in java up to 18 version Instance method reference Access to outer class non-static members from non-static inner class Sample of code that will be reported: 'int fileDescriptor;\n Cleaner.Cleanable cleanable = Cleaner.create().register(this, () -> {\n System.out.println(\"adsad\");\n //this is captured via fileDescriptor\n fileDescriptor = 0;\n });' This inspection only reports if the language level of the project or module is 9 or higher. New in 2018.1", + "markdown": "Reports `Runnable` passed to a `Cleaner.register()` capturing reference being registered. If the reference is captured, it will never be phantom reachable and the cleaning action will never be invoked.\n\nPossible sources of this problem:\n\n* Lambda using non-static methods, fields, or `this` itself\n* Non-static inner class (anonymous or not) always captures this reference in java up to 18 version\n* Instance method reference\n* Access to outer class non-static members from non-static inner class\n\nSample of code that will be reported:\n\n\n int fileDescriptor;\n Cleaner.Cleanable cleanable = Cleaner.create().register(this, () -> {\n System.out.println(\"adsad\");\n //this is captured via fileDescriptor\n fileDescriptor = 0;\n });\n\nThis inspection only reports if the language level of the project or module is 9 or higher.\n\nNew in 2018.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThreadStartInConstruction", + "shortDescription": { + "text": "Call to 'Thread.start()' during object construction" + }, + "fullDescription": { + "text": "Reports calls to 'start()' on 'java.lang.Thread' or any of its subclasses during object construction. While occasionally useful, such constructs should be avoided due to inheritance issues. Subclasses of a class that launches a thread during the object construction will not have finished any initialization logic of their own before the thread has launched. This inspection does not report if the class that starts a thread is declared 'final'. Example: 'class MyThread extends Thread {\n MyThread() {\n start();\n }\n }'", + "markdown": "Reports calls to `start()` on `java.lang.Thread` or any of its subclasses during object construction.\n\n\nWhile occasionally useful, such constructs should be avoided due to inheritance issues.\nSubclasses of a class that launches a thread during the object construction will not have finished\nany initialization logic of their own before the thread has launched.\n\nThis inspection does not report if the class that starts a thread is declared `final`.\n\n**Example:**\n\n\n class MyThread extends Thread {\n MyThread() {\n start();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TestCaseWithNoTestMethods", + "shortDescription": { + "text": "Test class with no tests" + }, + "fullDescription": { + "text": "Reports non-'abstract' test cases without any test methods. Such test cases usually indicate unfinished code or could be a refactoring leftover that should be removed. Example: 'public class CrucialTest {\n @Before\n public void setUp() {\n System.out.println(\"setting up\");\n }\n }' Use the Ignore test cases which have superclasses with test methods option to ignore test cases which have super classes with test methods.", + "markdown": "Reports non-`abstract` test cases without any test methods.\n\nSuch test cases usually indicate unfinished code\nor could be a refactoring leftover that should be removed.\n\nExample:\n\n\n public class CrucialTest {\n @Before\n public void setUp() {\n System.out.println(\"setting up\");\n }\n }\n\nUse the **Ignore test cases which have superclasses with test methods** option to ignore test cases which have super classes\nwith test methods." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/JUnit", + "index": 74, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SwitchStatementWithTooManyBranches", + "shortDescription": { + "text": "Maximum 'switch' branches" + }, + "fullDescription": { + "text": "Reports 'switch' statements or expressions with too many 'case' labels. Such a long switch statement may be confusing and should probably be refactored. Sometimes, it is not a problem (for example, a domain is very complicated and has enums with a lot of constants). Example: 'switch (x) {\n case 1 -> {}\n case 2 -> {}\n case 3 -> {}\n case 4 -> {}\n case 5 -> {}\n case 6 -> {}\n case 7 -> {}\n case 8 -> {}\n case 9 -> {}\n case 10 -> {}\n case 11,12,13 -> {}\n default -> {}\n }' Use the Maximum number of branches field to specify the maximum number of 'case' labels expected.", + "markdown": "Reports `switch` statements or expressions with too many `case` labels.\n\nSuch a long switch statement may be confusing and should probably be refactored.\nSometimes, it is not a problem (for example, a domain is very complicated and has enums with a lot of constants).\n\nExample:\n\n\n switch (x) {\n case 1 -> {}\n case 2 -> {}\n case 3 -> {}\n case 4 -> {}\n case 5 -> {}\n case 6 -> {}\n case 7 -> {}\n case 8 -> {}\n case 9 -> {}\n case 10 -> {}\n case 11,12,13 -> {}\n default -> {}\n }\n\nUse the **Maximum number of branches** field to specify the maximum number of `case` labels expected." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MismatchedArrayReadWrite", + "shortDescription": { + "text": "Mismatched read and write of array" + }, + "fullDescription": { + "text": "Reports arrays whose contents are read but not updated, or updated but not read. Such inconsistent reads and writes are pointless and probably indicate dead, incomplete or erroneous code. Example: 'final int[] bar = new int[3];\n bar[2] = 3;'", + "markdown": "Reports arrays whose contents are read but not updated, or updated but not read. Such inconsistent reads and writes are pointless and probably indicate dead, incomplete or erroneous code.\n\n**Example:**\n\n\n final int[] bar = new int[3];\n bar[2] = 3;\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessarilyQualifiedStaticUsage", + "shortDescription": { + "text": "Unnecessarily qualified static access" + }, + "fullDescription": { + "text": "Reports usages of static members qualified with the class name. Such qualification is unnecessary and may be safely removed. Example: 'class Foo {\n static void foo() {}\n static int x;\n\n void bar() {\n Foo.foo();\n System.out.println(Foo.x);\n }\n\n static void baz() { Foo.foo(); }\n }' After the quick-fix is applied: 'class Foo {\n static void foo() {}\n static int x;\n\n void bar() {\n foo();\n System.out.println(x);\n }\n\n static void baz() { foo(); }\n }' Use the inspection options to toggle the reporting for: Static fields access: 'void bar() { System.out.println(Foo.x); }' Calls to static methods: 'void bar() { Foo.foo(); }' Also, you can configure the inspection to only report static member usage in a static context. In this case, only 'static void baz() { Foo.foo(); }' will be reported.", + "markdown": "Reports usages of static members qualified with the class name.\n\n\nSuch qualification is unnecessary and may be safely removed.\n\n**Example:**\n\n\n class Foo {\n static void foo() {}\n static int x;\n\n void bar() {\n Foo.foo();\n System.out.println(Foo.x);\n }\n\n static void baz() { Foo.foo(); }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n static void foo() {}\n static int x;\n\n void bar() {\n foo();\n System.out.println(x);\n }\n\n static void baz() { foo(); }\n }\n\n\nUse the inspection options to toggle the reporting for:\n\n* Static fields access: \n `void bar() { System.out.println(Foo.x); }`\n\n* Calls to static methods: \n `void bar() { Foo.foo(); }`\n\n\nAlso, you can configure the inspection to only report static member usage\nin a static context. In this case, only `static void baz() { Foo.foo(); }` will be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LoopConditionNotUpdatedInsideLoop", + "shortDescription": { + "text": "Loop variable not updated inside loop" + }, + "fullDescription": { + "text": "Reports any variables and parameters that are used in a loop condition and are not updated inside the loop. Such variables and parameters are usually used by mistake as they may cause an infinite loop if they are executed. Example: 'void loopDoesNotLoop(boolean b) {\n while (b) {\n System.out.println();\n break;\n }\n }' Configure the inspection: Use the Ignore possible non-local changes option to disable this inspection if the condition can be updated indirectly (e.g. via the called method or concurrently from another thread).", + "markdown": "Reports any variables and parameters that are used in a loop condition and are not updated inside the loop.\n\nSuch variables and parameters are usually used by mistake as they\nmay cause an infinite loop if they are executed.\n\nExample:\n\n\n void loopDoesNotLoop(boolean b) {\n while (b) {\n System.out.println();\n break;\n }\n }\n\nConfigure the inspection:\n\n\nUse the **Ignore possible non-local changes** option to disable this inspection\nif the condition can be updated indirectly (e.g. via the called method or concurrently from another thread)." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CollectionsMustHaveInitialCapacity", + "shortDescription": { + "text": "Collection without initial capacity" + }, + "fullDescription": { + "text": "Reports attempts to instantiate a new 'Collection' object without specifying an initial capacity. If no initial capacity is specified, a default capacity is used, which will rarely be optimal. Failing to specify initial capacities for collections may result in performance issues if space needs to be reallocated and memory copied when the initial capacity is exceeded. This inspection checks allocations of classes listed in the inspection's settings. Example: 'new HashMap();' Use the following options to configure the inspection: List collection classes that should be checked. Whether to ignore field initializers.", + "markdown": "Reports attempts to instantiate a new `Collection` object without specifying an initial capacity.\n\n\nIf no initial capacity is specified, a default capacity is used, which will rarely be optimal. Failing\nto specify initial capacities for collections may result in performance issues if space needs to be reallocated and\nmemory copied when the initial capacity is exceeded.\nThis inspection checks allocations of classes listed in the inspection's settings.\n\n**Example:**\n\n\n new HashMap();\n\nUse the following options to configure the inspection:\n\n* List collection classes that should be checked.\n* Whether to ignore field initializers." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DoubleCheckedLocking", + "shortDescription": { + "text": "Double-checked locking" + }, + "fullDescription": { + "text": "Reports double-checked locking. Double-checked locking tries to initialize a field on demand and in a thread-safe manner, while avoiding the cost of synchronization. Unfortunately it is not thread-safe when used on a field that is not declared 'volatile'. When using Java 1.4 or earlier, double-checked locking doesn't work even with a 'volatile' field. Read the article linked above for a detailed explanation of the problem. Example of incorrect double-checked locking: 'class Foo {\n private Helper helper = null;\n public Helper getHelper() {\n if (helper == null)\n synchronized(this) {\n if (helper == null) helper = new Helper();\n }\n return helper;\n }\n }\n // other functions and members...\n }'", + "markdown": "Reports [double-checked locking](https://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html).\n\n\nDouble-checked locking tries to initialize a field on demand and in a thread-safe manner, while avoiding the cost of synchronization.\nUnfortunately it is not thread-safe when used on a field that is not declared `volatile`.\nWhen using Java 1.4 or earlier, double-checked locking doesn't work even with a `volatile` field.\nRead the article linked above for a detailed explanation of the problem.\n\nExample of incorrect double-checked locking:\n\n\n class Foo {\n private Helper helper = null;\n public Helper getHelper() {\n if (helper == null)\n synchronized(this) {\n if (helper == null) helper = new Helper();\n }\n return helper;\n }\n }\n // other functions and members...\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassOnlyUsedInOneModule", + "shortDescription": { + "text": "Class only used from one other module" + }, + "fullDescription": { + "text": "Reports classes that: do not depend on any other class in their module depend on classes from a different module are a dependency only for classes from this other module Such classes could be moved into the module on which they depend. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports classes that:\n\n* do not depend on any other class in their module\n* depend on classes from a different module\n* are a dependency only for classes from this other module\n\nSuch classes could be moved into the module on which they depend.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Modularization issues", + "index": 65, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TryStatementWithMultipleResources", + "shortDescription": { + "text": "'try' statement with multiple resources can be split" + }, + "fullDescription": { + "text": "Reports 'try' statements with multiple resources that can be automatically split into multiple try-with-resources statements. This conversion can be useful for further refactoring (for example, for extracting the nested 'try' statement into a separate method). Example: 'try (FileInputStream in = new FileInputStream(\"in.txt\");\n FileOutputStream out = new FileOutputStream(\"out.txt\")) {\n /*read and write*/\n }' After the quick-fix is applied: 'try (FileInputStream in = new FileInputStream(\"in.txt\")) {\n try (FileOutputStream out = new FileOutputStream(\"out.txt\")) {\n /*read and write*/\n }\n }'", + "markdown": "Reports `try` statements with multiple resources that can be automatically split into multiple try-with-resources statements.\n\nThis conversion can be useful for further refactoring\n(for example, for extracting the nested `try` statement into a separate method).\n\nExample:\n\n\n try (FileInputStream in = new FileInputStream(\"in.txt\");\n FileOutputStream out = new FileOutputStream(\"out.txt\")) {\n /*read and write*/\n }\n\nAfter the quick-fix is applied:\n\n\n try (FileInputStream in = new FileInputStream(\"in.txt\")) {\n try (FileOutputStream out = new FileOutputStream(\"out.txt\")) {\n /*read and write*/\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CloneableImplementsClone", + "shortDescription": { + "text": "Cloneable class without 'clone()' method" + }, + "fullDescription": { + "text": "Reports classes implementing the 'Cloneable' interface that don't override the 'clone()' method. Such classes use the default implementation of 'clone()', which isn't 'public' but 'protected', and which does not copy the mutable state of the class. A quick-fix is available to generate a basic 'clone()' method, which can be used as a basis for a properly functioning 'clone()' method expected from a 'Cloneable' class. Example: 'public class Data implements Cloneable {\n private String[] names;\n }' After the quick-fix is applied: 'public class Data implements Cloneable {\n private String[] names;\n\n @Override\n public Data clone() {\n try {\n Data clone = (Data) super.clone();\n // TODO: copy mutable state here, so the clone can't change the internals of the original\n return clone;\n } catch (CloneNotSupportedException e) {\n throw new AssertionError();\n }\n }\n }' Use the Ignore classes cloneable due to inheritance option to ignore classes that are 'Cloneable' because they inherit from the 'Cloneable' class. Use the Ignore when Cloneable is necessary to call clone() method of super class option to ignore classes that require implementing 'Cloneable' because they call the 'clone()' method from a superclass.", + "markdown": "Reports classes implementing the `Cloneable` interface that don't override the `clone()` method.\n\nSuch classes use the default implementation of `clone()`,\nwhich isn't `public` but `protected`, and which does not copy the mutable state of the class.\n\nA quick-fix is available to generate a basic `clone()` method,\nwhich can be used as a basis for a properly functioning `clone()` method\nexpected from a `Cloneable` class.\n\n**Example:**\n\n\n public class Data implements Cloneable {\n private String[] names;\n }\n\nAfter the quick-fix is applied:\n\n\n public class Data implements Cloneable {\n private String[] names;\n\n @Override\n public Data clone() {\n try {\n Data clone = (Data) super.clone();\n // TODO: copy mutable state here, so the clone can't change the internals of the original\n return clone;\n } catch (CloneNotSupportedException e) {\n throw new AssertionError();\n }\n }\n }\n\nUse the **Ignore classes cloneable due to inheritance** option to ignore classes that are\n`Cloneable` because they inherit from the `Cloneable` class.\n\nUse the **Ignore when Cloneable is necessary to call clone() method of super class**\noption to ignore classes that require implementing `Cloneable` because they call the `clone()` method from a superclass." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Cloning issues", + "index": 80, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeMayBeWeakened", + "shortDescription": { + "text": "Type may be weakened" + }, + "fullDescription": { + "text": "Reports variable and method return types that can be changed to a more abstract (weaker) type. This allows making the code more abstract, hence more reusable. Example: '// Type of parameter can be weakened to java.util.List\n void processList(ArrayList list) {\n if (list.isEmpty()) return;\n System.out.println(\"Processing\");\n for (String s : list) {\n System.out.println(\"String: \" + s);\n }\n }' Enable the Use righthand type checkbox below to prevent weakening the left side of assignments when the right side is not a type cast or a new expression. When storing the result of a method call in a variable, it is useful to retain the type of the method call result instead of unnecessarily weakening it. Enable the Use parameterized type checkbox below to use the parameterized type of the collection as the weakest type when the object evaluated is used as an argument to a collection method with a parameter type of 'java.lang.Object'. Use this option to prevent weakening to 'Object' when passing an object to the following collection methods: 'get()', 'remove()', 'contains()', 'indexOf()', 'lastIndexOf()', 'containsKey()' and 'containsValue()'. Enable the Do not weaken to Object checkbox below to specify whether a type should be weakened to 'java.lang.Object'. Weakening to 'java.lang.Object' is rarely very useful. Enable the Only weaken to an interface checkbox below to only report a problem when the type can be weakened to an interface type. Enable the Do not weaken return type checkbox below to prevent reporting a problem when the return type may be weakened. Only variables will be analyzed. Enable the Do not suggest weakening variable declared as 'var' checkbox below to prevent reporting on local variables declared using the 'var' keyword (Java 10+) Stop classes are intended to prevent weakening to classes lower than stop classes, even if it is possible. In some cases, this may improve readability.", + "markdown": "Reports variable and method return types that can be changed to a more abstract (weaker) type. This allows making the code more abstract, hence more reusable.\n\nExample:\n\n\n // Type of parameter can be weakened to java.util.List\n void processList(ArrayList list) {\n if (list.isEmpty()) return;\n System.out.println(\"Processing\");\n for (String s : list) {\n System.out.println(\"String: \" + s);\n }\n }\n\n\nEnable the **Use righthand type** checkbox below\nto prevent weakening the left side of assignments when the right side is not\na type cast or a new expression. When storing the result of a method call in a variable, it is\nuseful to retain the type of the method call result instead of unnecessarily weakening it.\n\n\nEnable the **Use parameterized type** checkbox below\nto use the parameterized type of the collection as the weakest type when\nthe object evaluated is used as an argument to a collection method with a parameter type of\n`java.lang.Object`.\nUse this option to prevent weakening to `Object` when passing an object to the following collection methods:\n`get()`, `remove()`,\n`contains()`, `indexOf()`,\n`lastIndexOf()`, `containsKey()` and `containsValue()`.\n\n\nEnable the **Do not weaken to Object** checkbox below\nto specify whether a type should be weakened to `java.lang.Object`.\nWeakening to `java.lang.Object` is rarely very useful.\n\n\nEnable the **Only weaken to an interface** checkbox below\nto only report a problem when the type can be weakened to an interface type.\n\n\nEnable the **Do not weaken return type** checkbox below\nto prevent reporting a problem when the return type may be weakened.\nOnly variables will be analyzed.\n\n\nEnable the **Do not suggest weakening variable declared as 'var'** checkbox below\nto prevent reporting on local variables declared using the 'var' keyword (Java 10+)\n\n\n**Stop classes** are intended to prevent weakening to classes\nlower than stop classes, even if it is possible.\nIn some cases, this may improve readability." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 75, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OctalAndDecimalIntegersMixed", + "shortDescription": { + "text": "Octal and decimal integers in same array" + }, + "fullDescription": { + "text": "Reports mixed octal and decimal integer literals in a single array initializer. This situation might happen when you copy a list of numbers into an array initializer. Some numbers in the array might be zero-padded and the compiler will interpret them as octal. Example: 'int[] elapsed = {1, 13, 052};' After the quick-fix that removes a leading zero is applied: 'int[] elapsed = {1, 13, 52};' If it is an octal number (for example, after a variable inline), then you can use another quick-fix that converts octal to decimal: 'int[] elapsed = {1, 13, 42};'", + "markdown": "Reports mixed octal and decimal integer literals in a single array initializer. This situation might happen when you copy a list of numbers into an array initializer. Some numbers in the array might be zero-padded and the compiler will interpret them as octal.\n\n**Example:**\n\n int[] elapsed = {1, 13, 052};\n\nAfter the quick-fix that removes a leading zero is applied:\n\n int[] elapsed = {1, 13, 52};\n\nIf it is an octal number (for example, after a variable inline), then you can use another quick-fix that converts octal to decimal:\n`int[] elapsed = {1, 13, 42};`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseOfObsoleteAssert", + "shortDescription": { + "text": "Usage of obsolete 'junit.framework.Assert' method" + }, + "fullDescription": { + "text": "Reports any calls to methods from the 'junit.framework.Assert' class. This class is obsolete and the calls can be replaced by calls to methods from the 'org.junit.Assert' class. For example: 'import org.junit.*;\n public class NecessaryTest {\n @Test\n public void testIt() {\n junit.framework.Assert.assertEquals(\"expected\", \"actual\");\n }\n }' After the quick fix is applied, the result looks like the following: 'import org.junit;\n public class NecessaryTest {\n\n public void testIt() {\n Assert.assertEquals(\"expected\", \"actual\");\n }\n }'", + "markdown": "Reports any calls to methods from the `junit.framework.Assert` class. This class is obsolete and the calls can be replaced by calls to methods from the `org.junit.Assert` class.\n\nFor example:\n\n\n import org.junit.*;\n public class NecessaryTest {\n @Test\n public void testIt() {\n junit.framework.Assert.assertEquals(\"expected\", \"actual\");\n }\n }\n\nAfter the quick fix is applied, the result looks like the following:\n\n\n import org.junit;\n public class NecessaryTest {\n\n public void testIt() {\n Assert.assertEquals(\"expected\", \"actual\");\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/JUnit", + "index": 74, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Deprecation", + "shortDescription": { + "text": "Deprecated API usage" + }, + "fullDescription": { + "text": "Reports usages of deprecated APIs (classes, fields, and methods), for example: 'new Thread().stop();'. By default, the inspection doesn't produce a warning if it's impossible or hard to avoid it. For example, the following code won't be reported: 'abstract class A { //library code\n @Deprecated\n abstract void m();\n }\n class B extends A { //project code\n @Override\n void m() {\n //doSmth;\n }\n }' Configure the inspection: Use the inspection's options to disable this inspection inside deprecated members, overrides of abstract deprecated methods, non-static import statements, methods of deprecated classes, or same top-level classes.", + "markdown": "Reports usages of deprecated APIs (classes, fields, and methods), for example: `new Thread().stop();`.\n\nBy default, the inspection doesn't produce a warning if it's impossible or hard to avoid it. For example,\nthe following code won't be reported:\n\n\n abstract class A { //library code\n @Deprecated\n abstract void m();\n }\n class B extends A { //project code\n @Override\n void m() {\n //doSmth;\n }\n }\n\nConfigure the inspection:\n\n\nUse the inspection's options to disable this inspection inside deprecated members,\noverrides of abstract deprecated methods, non-static import statements, methods of deprecated classes, or same top-level classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code maturity", + "index": 49, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MisspelledMethodName", + "shortDescription": { + "text": "Method names differing only by case" + }, + "fullDescription": { + "text": "Reports cases in which multiple methods of a class have the names that differ only by case. Such names may be very confusing. Example: 'public int hashcode() { // reported, should be hashCode probably?\n return 0;\n }' A quick-fix that renames such methods is available only in the editor. Use the Ignore methods overriding/implementing a super method option to ignore methods overriding or implementing a method from the superclass.", + "markdown": "Reports cases in which multiple methods of a class have the names that differ only by case. Such names may be very confusing.\n\n**Example:**\n\n\n public int hashcode() { // reported, should be hashCode probably?\n return 0;\n }\n\nA quick-fix that renames such methods is available only in the editor.\n\nUse the **Ignore methods overriding/implementing a super method** option to ignore methods overriding or implementing a method from\nthe superclass." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Method", + "index": 88, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonSerializableObjectBoundToHttpSession", + "shortDescription": { + "text": "Non-serializable object bound to 'HttpSession'" + }, + "fullDescription": { + "text": "Reports objects of classes not implementing 'java.io.Serializable' used as arguments to 'javax.servlet.http.HttpSession.setAttribute()' or 'javax.servlet.http.HttpSession.putValue()'. Such objects will not be serialized if the 'HttpSession' is passivated or migrated, and may result in difficult-to-diagnose bugs. This inspection assumes objects of the types 'java.util.Collection' and 'java.util.Map' to be 'Serializable', unless type parameters are non-'Serializable'. Example: 'void foo(HttpSession session) {\n session.setAttribute(\"foo\", new NonSerializable());\n }\n static class NonSerializable {}'", + "markdown": "Reports objects of classes not implementing `java.io.Serializable` used as arguments to `javax.servlet.http.HttpSession.setAttribute()` or `javax.servlet.http.HttpSession.putValue()`.\n\n\nSuch objects will not be serialized if the `HttpSession` is passivated or migrated,\nand may result in difficult-to-diagnose bugs.\n\n\nThis inspection assumes objects of the types `java.util.Collection` and\n`java.util.Map` to be `Serializable`,\nunless type parameters are non-`Serializable`.\n\n**Example:**\n\n\n void foo(HttpSession session) {\n session.setAttribute(\"foo\", new NonSerializable());\n }\n static class NonSerializable {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 18, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConditionSignal", + "shortDescription": { + "text": "Call to 'signal()' instead of 'signalAll()'" + }, + "fullDescription": { + "text": "Reports calls to 'java.util.concurrent.locks.Condition.signal()'. While occasionally useful, in almost all cases 'signalAll()' is a better and safer choice.", + "markdown": "Reports calls to `java.util.concurrent.locks.Condition.signal()`. While occasionally useful, in almost all cases `signalAll()` is a better and safer choice." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThreadLocalNotStaticFinal", + "shortDescription": { + "text": "'ThreadLocal' field not declared 'static final'" + }, + "fullDescription": { + "text": "Reports fields of type 'java.lang.ThreadLocal' that are not declared 'static final'. In the most common case, a 'java.lang.ThreadLocal' instance associates state with a thread. A non-static non-final 'java.lang.ThreadLocal' field associates state with an instance-thread combination. This is usually unnecessary and quite often is a bug that can cause memory leaks and incorrect behavior. A quick-fix is suggested to make the field 'static final'. Example: 'private ThreadLocal tl = ThreadLocal.withInitial(() -> Boolean.TRUE);'", + "markdown": "Reports fields of type `java.lang.ThreadLocal` that are not declared `static final`.\n\n\nIn the most common case, a `java.lang.ThreadLocal` instance associates state with a thread.\nA non-static non-final `java.lang.ThreadLocal` field associates state with an instance-thread combination.\nThis is usually unnecessary and quite often is a bug that can cause memory leaks and incorrect behavior.\n\n\nA quick-fix is suggested to make the field `static final`.\n\n\n**Example:**\n\n\n private ThreadLocal tl = ThreadLocal.withInitial(() -> Boolean.TRUE);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AccessStaticViaInstance", + "shortDescription": { + "text": "Access static member via instance reference" + }, + "fullDescription": { + "text": "Reports references to 'static' methods and fields via a class instance rather than the class itself. Even though referring to static members via instance variables is allowed by The Java Language Specification, this makes the code confusing as the reader may think that the result of the method depends on the instance. The quick-fix replaces the instance variable with the class name. Example: 'String s1 = s.valueOf(0);' After the quick-fix is applied: 'String s = String.valueOf(0);'", + "markdown": "Reports references to `static` methods and fields via a class instance rather than the class itself.\n\nEven though referring to static members via instance variables is allowed by The Java Language Specification,\nthis makes the code confusing as the reader may think that the result of the method depends on the instance.\n\nThe quick-fix replaces the instance variable with the class name.\n\nExample:\n\n\n String s1 = s.valueOf(0);\n\nAfter the quick-fix is applied:\n\n\n String s = String.valueOf(0);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 15, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PublicMethodWithoutLogging", + "shortDescription": { + "text": "'public' method without logging" + }, + "fullDescription": { + "text": "Reports any public methods that do not contain a logging statement. This inspection does not report simple getters and setters. For example: 'public class Crucial {\n private static final Logger LOG = LoggerFactory.getLogger(Crucial.class);\n public void doImportantStuff() {\n // warning on this method\n }\n\n public void doOtherStuff() {\n LOG.info(\"do other stuff\");\n }\n }' Use the table below to specify Logger class names. Public methods that do not use instance methods of the specified classes will be reported by this inspection.", + "markdown": "Reports any public methods that do not contain a logging statement. This inspection does not report simple getters and setters.\n\nFor example:\n\n\n public class Crucial {\n private static finalLogger LOG = LoggerFactory.getLogger(Crucial.class);\n public void doImportantStuff() {\n // warning on this method\n }\n\n public void doOtherStuff() {\n LOG.info(\"do other stuff\");\n }\n }\n\n\nUse the table below to specify Logger class names.\nPublic methods that do not use instance methods of the specified classes will be reported by this inspection." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Logging", + "index": 64, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassNestingDepth", + "shortDescription": { + "text": "Inner class too deeply nested" + }, + "fullDescription": { + "text": "Reports classes whose number of nested inner classes exceeds the specified maximum. Nesting inner classes inside other inner classes is confusing and indicates that a refactoring may be necessary. Use the Nesting limit field to specify the maximum allowed nesting depth for a class.", + "markdown": "Reports classes whose number of nested inner classes exceeds the specified maximum.\n\nNesting inner classes inside other inner classes is confusing and indicates that a refactoring may be necessary.\n\nUse the **Nesting limit** field to specify the maximum allowed nesting depth for a class." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class metrics", + "index": 87, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CallToNativeMethodWhileLocked", + "shortDescription": { + "text": "Call to a 'native' method while locked" + }, + "fullDescription": { + "text": "Reports calls 'native' methods within a 'synchronized' block or method. When possible, it's better to keep calls to 'native' methods out of the synchronized context because such calls cause an expensive context switch and may lead to performance issues. Example: 'native void nativeMethod();\n\n void example(){\n synchronized (lock){\n nativeMethod();//warning\n }\n }'", + "markdown": "Reports calls `native` methods within a `synchronized` block or method.\n\n\nWhen possible, it's better to keep calls to `native` methods out of the synchronized context\nbecause such calls cause an expensive context switch and may lead to performance issues.\n\n**Example:**\n\n\n native void nativeMethod();\n\n void example(){\n synchronized (lock){\n nativeMethod();//warning\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Dependency", + "shortDescription": { + "text": "Illegal package dependencies" + }, + "fullDescription": { + "text": "Reports illegal dependencies between scopes according to the dependency rules given. Dependency rules can be used to prohibit usage from a scope to another scope. Use the Configure dependency rules button below to customize validation rules.", + "markdown": "Reports illegal dependencies between scopes according to the dependency rules given. Dependency rules can be used to prohibit usage from a scope to another scope.\n\nUse the **Configure dependency rules** button below to customize validation rules." + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 4, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NestingDepth", + "shortDescription": { + "text": "Overly nested method" + }, + "fullDescription": { + "text": "Reports methods whose body contain too deeply nested statements. Methods with too deep statement nesting may be confusing and are a good sign that refactoring may be necessary. Use the Nesting depth limit field to specify the maximum allowed nesting depth for a method.", + "markdown": "Reports methods whose body contain too deeply nested statements.\n\nMethods with too deep statement\nnesting may be confusing and are a good sign that refactoring may be necessary.\n\nUse the **Nesting depth limit** field to specify the maximum allowed nesting depth for a method." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Method metrics", + "index": 95, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LambdaParameterTypeCanBeSpecified", + "shortDescription": { + "text": "Lambda parameter type can be specified" + }, + "fullDescription": { + "text": "Reports lambda parameters that do not have their type specified and suggests adding the missing type declarations. Example: 'Function length = a -> a.length();' After the quick-fix is applied: 'Function length = (String a) -> a.length();' This inspection only reports if the language level of the project or module is 8 or higher.", + "markdown": "Reports lambda parameters that do not have their type specified and suggests adding the missing type declarations.\n\nExample:\n\n\n Function length = a -> a.length();\n\nAfter the quick-fix is applied:\n\n\n Function length = (String a) -> a.length();\n\nThis inspection only reports if the language level of the project or module is 8 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TextLabelInSwitchStatement", + "shortDescription": { + "text": "Text label in 'switch' statement" + }, + "fullDescription": { + "text": "Reports labeled statements inside of 'switch' statements. While occasionally intended, this construction is often the result of a typo. Example: 'switch (x) {\n case 1:\n case2: //warning: Text label 'case2:' in 'switch' statement\n case 3:\n break;\n }'", + "markdown": "Reports labeled statements inside of `switch` statements. While occasionally intended, this construction is often the result of a typo.\n\n**Example:**\n\n\n switch (x) {\n case 1:\n case2: //warning: Text label 'case2:' in 'switch' statement\n case 3:\n break;\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PackageVisibleInnerClass", + "shortDescription": { + "text": "Package-visible nested class" + }, + "fullDescription": { + "text": "Reports nested classes that are declared without any access modifier (also known as package-private). Example: 'public class Outer {\n static class Nested {} // warning\n class Inner {} // warning\n enum Mode {} // warning depends on the setting\n interface I {} // warning depends on the setting\n }' Configure the inspection: Use the Ignore package-visible inner enums option to ignore package-private inner enums. Use the Ignore package-visible inner interfaces option to ignore package-private inner interfaces.", + "markdown": "Reports nested classes that are declared without any access modifier (also known as package-private).\n\n**Example:**\n\n\n public class Outer {\n static class Nested {} // warning\n class Inner {} // warning\n enum Mode {} // warning depends on the setting\n interface I {} // warning depends on the setting\n }\n\nConfigure the inspection:\n\n* Use the **Ignore package-visible inner enums** option to ignore package-private inner enums.\n* Use the **Ignore package-visible inner interfaces** option to ignore package-private inner interfaces." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Encapsulation", + "index": 57, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryUnaryMinus", + "shortDescription": { + "text": "Unnecessary unary minus" + }, + "fullDescription": { + "text": "Reports unnecessary unary minuses. Such expressions might be hard to understand and might contain errors. For example: 'void unaryMinus(int i) {\n int x = - -i;\n }' The following quick fixes are suggested here: Remove '-' operators before the 'i' variable: 'void unaryMinus(int i) {\n int x = i;\n }' Replace '-' operators with the prefix decrement operator: 'void unaryMinus(int i) {\n int x = --i;\n }' Another example: 'void unaryMinus(int i) {\n i += - 8;\n }' After the quick-fix is applied: 'void unaryMinus(int i) {\n i -= 8;\n }'", + "markdown": "Reports unnecessary unary minuses. Such expressions might be hard to understand and might contain errors.\n\n**For example:**\n\n void unaryMinus(int i) {\n int x = - -i;\n }\n\nThe following quick fixes are suggested here:\n\n* Remove `-` operators before the `i` variable:\n\n void unaryMinus(int i) {\n int x = i;\n }\n\n* Replace `-` operators with the prefix decrement operator:\n\n void unaryMinus(int i) {\n int x = --i;\n }\n\n**Another example:**\n\n void unaryMinus(int i) {\n i += - 8;\n }\n\nAfter the quick-fix is applied:\n\n void unaryMinus(int i) {\n i -= 8;\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WriteOnlyObject", + "shortDescription": { + "text": "Write-only object" + }, + "fullDescription": { + "text": "Reports objects that are modified but never queried. The inspection relies on the method mutation contract, which could be inferred or pre-annotated for some library methods. This inspection does not report collections, maps, and string builders, as these types are reported by other more precise inspections. Example: 'AtomicReference ref = new AtomicReference<>();\n ref.set(\"hello\"); // ref is never used again' Use the Ignore impure constructors option to control whether to process objects created by constructor or method whose purity is not known. Unchecking the option may introduce some false-positives if the object reference is intentionally leaked during the construction. New in 2021.2", + "markdown": "Reports objects that are modified but never queried.\n\nThe inspection relies on the method mutation contract, which could be inferred\nor pre-annotated for some library methods. This inspection does not report collections, maps, and string builders, as these types\nare reported by other more precise inspections.\n\nExample:\n\n\n AtomicReference ref = new AtomicReference<>();\n ref.set(\"hello\"); // ref is never used again\n\n\nUse the **Ignore impure constructors** option to control whether to process objects created by constructor or method whose purity is not known.\nUnchecking the option may introduce some false-positives if the object reference is intentionally leaked during the construction.\n**New in 2021.2**" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodMayBeStatic", + "shortDescription": { + "text": "Method can be made 'static'" + }, + "fullDescription": { + "text": "Reports methods that can safely be made 'static'. Making methods static when possible can reduce memory consumption and improve your code quality. A method can be 'static' if: it is not 'synchronized', 'native' or 'abstract', does not reference any of non-static methods and non-static fields from the containing class, is not an override and is not overridden in a subclass. Use the following options to configure the inspection: Whether to report only 'private' and 'final' methods, which increases the performance of this inspection. Whether to ignore empty methods. Whether to ignore default methods in interface when using Java 8 or higher. Whether to let the quick-fix replace instance qualifiers with class references in calls to methods which are made 'static', that is, call 'myClass.m()' would be replaced with 'MyClass.m()'.", + "markdown": "Reports methods that can safely be made `static`. Making methods static when possible can reduce memory consumption and improve your code quality.\n\nA method can be `static` if:\n\n* it is not `synchronized`, `native` or `abstract`,\n* does not reference any of non-static methods and non-static fields from the containing class,\n* is not an override and is not overridden in a subclass.\n\nUse the following options to configure the inspection:\n\n* Whether to report only `private` and `final` methods, which increases the performance of this inspection.\n* Whether to ignore empty methods.\n* Whether to ignore default methods in interface when using Java 8 or higher.\n* Whether to let the quick-fix replace instance qualifiers with class references in calls to methods which are made `static`, that is, call `myClass.m()` would be replaced with `MyClass.m()`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TestMethodWithoutAssertion", + "shortDescription": { + "text": "Test method without assertions" + }, + "fullDescription": { + "text": "Reports test methods that do not contain any assertions. Such methods may indicate either incomplete or weak test cases. Example: 'public class ExtensiveTest {\n\n @Test\n public void testAlive() {\n System.out.println(\"nothing\");\n }\n }' Configure the inspection: Use the table to specify the combinations of fully qualified class name and method name regular expression that should qualify as assertions. Class names also match subclasses. Use the 'assert' keyword is considered an assertion option to specify if the Java 'assert' statements using the 'assert' keyword should be considered an assertion. Use the Ignore test methods which declare exceptions option to ignore the test methods that declare exceptions. This can be useful when you have tests that will throw an exception on failure and thus don't need any assertions.", + "markdown": "Reports test methods that do not contain any assertions. Such methods may indicate either incomplete or weak test cases.\n\n**Example:**\n\n\n public class ExtensiveTest {\n\n @Test\n public void testAlive() {\n System.out.println(\"nothing\");\n }\n }\n\n\nConfigure the inspection:\n\n* Use the table to specify the combinations of fully qualified class name and method name regular expression that should qualify as assertions. Class names also match subclasses.\n* Use the **'assert' keyword is considered an assertion** option to specify if the Java `assert` statements using the `assert` keyword should be considered an assertion.\n* Use the **Ignore test methods which declare exceptions** option to ignore the test methods that declare exceptions. This can be useful when you have tests that will throw an exception on failure and thus don't need any assertions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages/Test frameworks", + "index": 85, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SocketResource", + "shortDescription": { + "text": "Socket opened but not safely closed" + }, + "fullDescription": { + "text": "Reports socket resources that are not safely closed. Socket resources reported by this inspection include 'java.net.Socket', 'java.net.DatagramSocket', and 'java.net.ServerSocket'. By default, the inspection assumes that the resources can be closed by any method with 'close' or 'cleanup' in its name. Example: 'byte[] getMessage(ServerSocket socket) throws IOException {\n Socket client = socket.accept(); //socket is not closed\n return client.getInputStream().readAllBytes();\n }' Use the following options to configure the inspection: Whether a socket is allowed to be opened inside a 'try' block. This style is less desirable because it is more verbose than opening a resource in front of a 'try' block. Whether the resource can be closed by any method call with the resource passed as argument.", + "markdown": "Reports socket resources that are not safely closed. Socket resources reported by this inspection include `java.net.Socket`, `java.net.DatagramSocket`, and `java.net.ServerSocket`.\n\n\nBy default, the inspection assumes that the resources can be closed by any method with\n'close' or 'cleanup' in its name.\n\n**Example:**\n\n\n byte[] getMessage(ServerSocket socket) throws IOException {\n Socket client = socket.accept(); //socket is not closed\n return client.getInputStream().readAllBytes();\n }\n\n\nUse the following options to configure the inspection:\n\n* Whether a socket is allowed to be opened inside a `try` block. This style is less desirable because it is more verbose than opening a resource in front of a `try` block.\n* Whether the resource can be closed by any method call with the resource passed as argument." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Resource management", + "index": 46, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeParameterHidesVisibleType", + "shortDescription": { + "text": "Type parameter hides visible type" + }, + "fullDescription": { + "text": "Reports type parameters that have the same names as the visible types in the current scope. Such parameter names may be confusing. Example: 'abstract class MyList extends AbstractList {\n private List elements;\n // type parameter 'T' hides type parameter 'T'\n public T[] toArray(T[] array) {\n return elements.toArray(array);\n }\n}'", + "markdown": "Reports type parameters that have the same names as the visible types in the current scope. Such parameter names may be confusing.\n\nExample:\n\n\n abstract class MyList extends AbstractList {\n private List elements;\n // type parameter 'T' hides type parameter 'T'\n public T[] toArray(T[] array) {\n return elements.toArray(array);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 54, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PlaceholderCountMatchesArgumentCount", + "shortDescription": { + "text": "Number of placeholders does not match number of arguments in logging call" + }, + "fullDescription": { + "text": "Reports SLF4J or Log4j 2 logging calls, such as 'logger.info(\"{}: {}\", key)' where the number of '{}' placeholders in the logger message doesn't match the number of other arguments to the logging call.", + "markdown": "Reports SLF4J or Log4j 2 logging calls, such as `logger.info(\"{}: {}\", key)` where the number of `{}` placeholders in the logger message doesn't match the number of other arguments to the logging call." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Logging", + "index": 64, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MaskedAssertion", + "shortDescription": { + "text": "Assertion is suppressed by 'catch'" + }, + "fullDescription": { + "text": "Reports 'assert' statements and test framework assertions that are suppressed by a surrounding catch block. Such assertions will never fail, as the thrown 'AssertionError' will be caught and silently ignored. Example 1: 'void javaAssertion() {\n try {\n ...\n assert 1 == 2;\n } catch (AssertionError e) {\n // the assertion is silently ignored\n }\n }' Example 2: '@Test\n void testWithAssertJ() {\n try {\n ...\n assertThat(1).as(\"test\").isEqualTo(2);\n } catch (AssertionError e) {\n // the assertion is silently ignored\n }\n }' Example 3: '@Test\n void testWithJunit() {\n try {\n ...\n assertEquals(1, 2);\n } catch (AssertionError e) {\n // the assertion is silently ignored\n }\n }' New in 2020.3", + "markdown": "Reports `assert` statements and test framework assertions that are suppressed by a surrounding catch block. Such assertions will never fail, as the thrown `AssertionError` will be caught and silently ignored.\n\n**Example 1:**\n\n\n void javaAssertion() {\n try {\n ...\n assert 1 == 2;\n } catch (AssertionError e) {\n // the assertion is silently ignored\n }\n }\n\n**Example 2:**\n\n\n @Test\n void testWithAssertJ() {\n try {\n ...\n assertThat(1).as(\"test\").isEqualTo(2);\n } catch (AssertionError e) {\n // the assertion is silently ignored\n }\n }\n\n**Example 3:**\n\n\n @Test\n void testWithJunit() {\n try {\n ...\n assertEquals(1, 2);\n } catch (AssertionError e) {\n // the assertion is silently ignored\n }\n }\n\nNew in 2020.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Test frameworks", + "index": 96, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringTokenizerDelimiter", + "shortDescription": { + "text": "Duplicated delimiters in 'StringTokenizer'" + }, + "fullDescription": { + "text": "Reports 'StringTokenizer()' constructor calls or 'nextToken()' method calls that contain duplicate characters in the delimiter argument. Example: 'void printTokens(String text) {\n StringTokenizer tokenizer = new StringTokenizer(text, \"\\n\\n\");\n while (tokenizer.hasMoreTokens()) {\n System.out.println(tokenizer.nextToken());\n }\n }' After the quick-fix is applied: 'void printTokens(String text) {\n StringTokenizer tokenizer = new StringTokenizer(text, \"\\n\");\n while (tokenizer.hasMoreTokens()) {\n System.out.println(tokenizer.nextToken());\n }\n }'", + "markdown": "Reports `StringTokenizer()` constructor calls or `nextToken()` method calls that contain duplicate characters in the delimiter argument.\n\n**Example:**\n\n\n void printTokens(String text) {\n StringTokenizer tokenizer = new StringTokenizer(text, \"\\n\\n\");\n while (tokenizer.hasMoreTokens()) {\n System.out.println(tokenizer.nextToken());\n }\n }\n\nAfter the quick-fix is applied:\n\n\n void printTokens(String text) {\n StringTokenizer tokenizer = new StringTokenizer(text, \"\\n\");\n while (tokenizer.hasMoreTokens()) {\n System.out.println(tokenizer.nextToken());\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReflectionForUnavailableAnnotation", + "shortDescription": { + "text": "Reflective access to a source-only annotation" + }, + "fullDescription": { + "text": "Reports attempts to reflectively check for the presence of a non-runtime annotation. Using 'Class.isAnnotationPresent()' to test for an annotation whose retention policy is set to 'SOURCE' or 'CLASS' (the default) will always have a negative result. This mistake is easy to overlook. Example: '{\n getClass().isAnnotationPresent(SourceAnnotation.class); //always false\n }\n\n @Retention(RetentionPolicy.SOURCE)\n @interface SourceAnnotation {}'", + "markdown": "Reports attempts to reflectively check for the presence of a non-runtime annotation.\n\nUsing `Class.isAnnotationPresent()` to test for an annotation\nwhose retention policy is set to `SOURCE` or `CLASS`\n(the default) will always have a negative result. This mistake is easy to overlook.\n\n**Example:**\n\n\n {\n getClass().isAnnotationPresent(SourceAnnotation.class); //always false\n }\n\n @Retention(RetentionPolicy.SOURCE)\n @interface SourceAnnotation {}\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InstantiatingObjectToGetClassObject", + "shortDescription": { + "text": "Instantiating object to get 'Class' object" + }, + "fullDescription": { + "text": "Reports code that instantiates a class to get its class object. It is more performant to access the class object directly by name. Example: 'Class c = new Sample().getClass();' After the quick-fix is applied: 'Class c = Sample.class;'", + "markdown": "Reports code that instantiates a class to get its class object.\n\nIt is more performant to access the class object\ndirectly by name.\n\n**Example:**\n\n\n Class c = new Sample().getClass();\n\nAfter the quick-fix is applied:\n\n\n Class c = Sample.class;\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassWithMultipleLoggers", + "shortDescription": { + "text": "Class with multiple loggers" + }, + "fullDescription": { + "text": "Reports classes that have multiple loggers declared. Ensuring that every class has a single dedicated logger is an important step in providing a unified logging implementation for an application. For example: 'public class Critical {\n protected static final Logger LOG = Logger.getLogger(Critical.class);\n\n protected static final Logger myLogger = Logger.getLogger(getClass());\n }' Use the table below to specify Logger class names. Classes which declare multiple fields that have the type of one of the specified classes will be reported by this inspection.", + "markdown": "Reports classes that have multiple loggers declared. Ensuring that every class has a single dedicated logger is an important step in providing a unified logging implementation for an application.\n\nFor example:\n\n\n public class Critical {\n protected static final Logger LOG = Logger.getLogger(Critical.class);\n\n protected static final Logger myLogger = Logger.getLogger(getClass());\n }\n\n\nUse the table below to specify Logger class names.\nClasses which declare multiple fields that have the type of one of the specified classes will be reported by this inspection." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Logging", + "index": 64, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ShiftOutOfRange", + "shortDescription": { + "text": "Shift operation by inappropriate constant" + }, + "fullDescription": { + "text": "Reports shift operations where the shift value is a constant outside the reasonable range. Integer shift operations outside the range '0..31' and long shift operations outside the range '0..63' are reported. Shifting by negative or overly large values is almost certainly a coding error. Example: 'int shiftSize = 32;\n // Warning: shift by 32 bits is equivalent to shift by 0 bits, so there's no shift at all.\n int mask = (1 << shiftSize) - 1;'", + "markdown": "Reports shift operations where the shift value is a constant outside the reasonable range.\n\nInteger shift operations outside the range `0..31` and long shift operations outside the\nrange `0..63` are reported. Shifting by negative or overly large values is almost certainly\na coding error.\n\n**Example:**\n\n\n int shiftSize = 32;\n // Warning: shift by 32 bits is equivalent to shift by 0 bits, so there's no shift at all.\n int mask = (1 << shiftSize) - 1;\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Bitwise operation issues", + "index": 97, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThreadRun", + "shortDescription": { + "text": "Call to 'Thread.run()'" + }, + "fullDescription": { + "text": "Reports calls to 'run()' on 'java.lang.Thread' or any of its subclasses. While occasionally intended, this is usually a mistake, because 'run()' doesn't start a new thread. To execute the code in a separate thread, 'start()' should be used.", + "markdown": "Reports calls to `run()` on `java.lang.Thread` or any of its subclasses.\n\n\nWhile occasionally intended, this is usually a mistake, because `run()` doesn't start a new thread.\nTo execute the code in a separate thread, `start()` should be used." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 4, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EscapedSpace", + "shortDescription": { + "text": "Non-terminal use of '\\s' escape sequence" + }, + "fullDescription": { + "text": "Reports uses of '\"\\s\"' escape sequence anywhere except text-block line endings or within series of several spaces. The '\"\\s\"' escape sequence is intended to encode a space at the end of text-block lines where normal spaces are trimmed. In other locations, as well as in regular string literals, '\"\\s\"' is identical to an ordinary space character ('\" \"'). Use of '\"\\s\"' is confusing and can be a mistake, especially if the string is interpreted as a regular expression. Example: 'if (str.matches(\"\\s+\")) {...}' Here it's likely that '\"\\\\s+\"' was intended (to match any whitespace character). If not, using 'str.matches(\" +\")' would be less confusing. The quick-fix is provided that simply replaces '\\s' with a space character. This inspection reports only if the language level of the project or module is 15 or higher. New in 2022.3", + "markdown": "Reports uses of `\"\\s\"` escape sequence anywhere except text-block line endings or within series of several spaces. The `\"\\s\"` escape sequence is intended to encode a space at the end of text-block lines where normal spaces are trimmed. In other locations, as well as in regular string literals, `\"\\s\"` is identical to an ordinary space character (`\" \"`). Use of `\"\\s\"` is confusing and can be a mistake, especially if the string is interpreted as a regular expression.\n\n**Example:**\n\n\n if (str.matches(\"\\s+\")) {...}\n\nHere it's likely that `\"\\\\s+\"` was intended (to match any whitespace character). If not, using `str.matches(\" +\")` would be less confusing.\n\n\nThe quick-fix is provided that simply replaces `\\s` with a space character.\n\nThis inspection reports only if the language level of the project or module is 15 or higher.\n\nNew in 2022.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExtendsThrowable", + "shortDescription": { + "text": "Class directly extends 'Throwable'" + }, + "fullDescription": { + "text": "Reports classes that directly extend 'java.lang.Throwable'. Extending 'java.lang.Throwable' directly is generally considered bad practice. It is usually enough to extend 'java.lang.RuntimeException', 'java.lang.Exception', or - in special cases - 'java.lang.Error'. Example: 'class EnigmaThrowable extends Throwable {} // warning: Class 'EnigmaThrowable' directly extends 'java.lang.Throwable''", + "markdown": "Reports classes that directly extend `java.lang.Throwable`.\n\nExtending `java.lang.Throwable` directly is generally considered bad practice.\nIt is usually enough to extend `java.lang.RuntimeException`, `java.lang.Exception`, or - in special\ncases - `java.lang.Error`.\n\n**Example:**\n\n\n class EnigmaThrowable extends Throwable {} // warning: Class 'EnigmaThrowable' directly extends 'java.lang.Throwable'\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AutoBoxing", + "shortDescription": { + "text": "Auto-boxing" + }, + "fullDescription": { + "text": "Reports expressions that are affected by autoboxing conversion (automatic wrapping of primitive values as objects). Try not to use objects instead of primitives. It might significantly affect performance. Example: 'Integer x = 42;' The quick-fix makes the conversion explicit: 'Integer x = Integer.valueOf(42);' AutoBoxing appeared in Java 5. This inspection can help to downgrade for backward compatibility with earlier Java versions.", + "markdown": "Reports expressions that are affected by autoboxing conversion (automatic wrapping of primitive values as objects). Try not to use objects instead of primitives. It might significantly affect performance.\n\n**Example:**\n\n Integer x = 42;\n\nThe quick-fix makes the conversion explicit:\n\n Integer x = Integer.valueOf(42);\n\n\n*AutoBoxing* appeared in Java 5.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InterfaceNeverImplemented", + "shortDescription": { + "text": "Interface which has no concrete subclass" + }, + "fullDescription": { + "text": "Reports interfaces that have no concrete subclasses. Configure the inspection: Use the list below to add annotations. Interfaces declared with one of these annotations will be ignored by the inspection. Use the checkbox below to ignore interfaces that only declare constant fields. Such interfaces may still be usable even without implementations.", + "markdown": "Reports interfaces that have no concrete subclasses.\n\nConfigure the inspection:\n\n* Use the list below to add annotations. Interfaces declared with one of these annotations will be ignored by the inspection.\n* Use the checkbox below to ignore interfaces that only declare constant fields. Such interfaces may still be usable even without implementations." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 25, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ContinueStatement", + "shortDescription": { + "text": "'continue' statement" + }, + "fullDescription": { + "text": "Reports 'continue' statements. 'continue' statements complicate refactoring and can be confusing. Example: 'void foo(List strs) {\n for (String str : strs) {\n if (str.contains(\"skip\")) continue;\n handleStr(str);\n }\n }'", + "markdown": "Reports `continue` statements.\n\n`continue` statements complicate refactoring and can be confusing.\n\nExample:\n\n\n void foo(List strs) {\n for (String str : strs) {\n if (str.contains(\"skip\")) continue;\n handleStr(str);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThreadDeathRethrown", + "shortDescription": { + "text": "'ThreadDeath' not rethrown" + }, + "fullDescription": { + "text": "Reports 'try' statements that catch 'java.lang.ThreadDeath' and do not rethrow the exception. Example: 'try {\n executeInParallel(request);\n } catch (ThreadDeath ex) { // warning: ThreadDeath 'ex' not rethrown\n return false;\n }'", + "markdown": "Reports `try` statements that catch `java.lang.ThreadDeath` and do not rethrow the exception.\n\n**Example:**\n\n\n try {\n executeInParallel(request);\n } catch (ThreadDeath ex) { // warning: ThreadDeath 'ex' not rethrown\n return false;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MisorderedAssertEqualsArguments", + "shortDescription": { + "text": "Misordered 'assertEquals()' arguments" + }, + "fullDescription": { + "text": "Reports calls to 'assertEquals()' that have the expected argument and the actual argument in the wrong order. For JUnit 3, 4, and 5 the correct order is '(expected, actual)'. For TestNG the correct order is '(actual, expected)'. Such calls will behave fine for assertions that pass, but may give confusing error reports on failure. Use the quick-fix to flip the order of the arguments. Example (JUnit): 'assertEquals(actual, expected)' After the quick-fix is applied: 'assertEquals(expected, actual)'", + "markdown": "Reports calls to `assertEquals()` that have the expected argument and the actual argument in the wrong order.\n\n\nFor JUnit 3, 4, and 5 the correct order is `(expected, actual)`.\nFor TestNG the correct order is `(actual, expected)`.\n\n\nSuch calls will behave fine for assertions that pass, but may give confusing error reports on failure.\nUse the quick-fix to flip the order of the arguments.\n\n**Example (JUnit):**\n\n\n assertEquals(actual, expected)\n\nAfter the quick-fix is applied:\n\n\n assertEquals(expected, actual)\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Test frameworks", + "index": 96, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StaticVariableInitialization", + "shortDescription": { + "text": "Static field may not be initialized" + }, + "fullDescription": { + "text": "Reports 'static' variables that may be uninitialized upon class initialization. Example: 'class Foo {\n public static int bar;\n\n static { }\n }' Note that this inspection uses a very conservative dataflow algorithm and may incorrectly report 'static' variables as uninitialized. Variables reported as initialized will always be initialized. Use the Ignore primitive fields option to ignore uninitialized primitive fields.", + "markdown": "Reports `static` variables that may be uninitialized upon class initialization.\n\n**Example:**\n\n\n class Foo {\n public static int bar;\n\n static { }\n }\n\nNote that this inspection uses a very conservative dataflow algorithm and may incorrectly report `static` variables as uninitialized. Variables\nreported as initialized will always be initialized.\n\nUse the **Ignore primitive fields** option to ignore uninitialized primitive fields." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Initialization", + "index": 28, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstantAssertCondition", + "shortDescription": { + "text": "Constant condition in 'assert' statement" + }, + "fullDescription": { + "text": "Reports 'assert' statement conditions that are constants. 'assert' statements with constant conditions will either always fail or always succeed. Such statements might be left over after a refactoring and are probably not intended. Example: 'void foo() {\n assert true;\n }'", + "markdown": "Reports `assert` statement conditions that are constants. `assert` statements with constant conditions will either always fail or always succeed. Such statements might be left over after a refactoring and are probably not intended.\n\n**Example:**\n\n\n void foo() {\n assert true;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaReflectionInvocation", + "shortDescription": { + "text": "Reflective invocation arguments mismatch" + }, + "fullDescription": { + "text": "Reports cases in which the arguments provided to 'Method.invoke()' and 'Constructor.newInstance()' do not match the signature specified in 'Class.getMethod()' and 'Class.getConstructor()'. Example: 'Method m = myObj.getClass().getMethod(\"myMethod\", int.class);\n // the argument should be an int value\n m.invoke(myObj, \"abc\");' New in 2017.2", + "markdown": "Reports cases in which the arguments provided to `Method.invoke()` and `Constructor.newInstance()` do not match the signature specified in `Class.getMethod()` and `Class.getConstructor()`.\n\nExample:\n\n\n Method m = myObj.getClass().getMethod(\"myMethod\", int.class);\n // the argument should be an **int** value\n m.invoke(myObj, \"abc\");\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Reflective access", + "index": 98, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CaughtExceptionImmediatelyRethrown", + "shortDescription": { + "text": "Caught exception is immediately rethrown" + }, + "fullDescription": { + "text": "Reports 'catch' blocks that immediately rethrow the caught exception without performing any action on it. Such 'catch' blocks are unnecessary and have no error handling. Example: 'try {\n new FileInputStream(\"\");\n } catch (FileNotFoundException e) {\n throw e;\n }'", + "markdown": "Reports `catch` blocks that immediately rethrow the caught exception without performing any action on it. Such `catch` blocks are unnecessary and have no error handling.\n\n**Example:**\n\n\n try {\n new FileInputStream(\"\");\n } catch (FileNotFoundException e) {\n throw e;\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryModuleDependencyInspection", + "shortDescription": { + "text": "Unnecessary module dependency" + }, + "fullDescription": { + "text": "Reports dependencies on modules that are not used. The quick-fix safely removes such unused dependencies.", + "markdown": "Reports dependencies on modules that are not used. The quick-fix safely removes such unused dependencies." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 15, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CloneCallsConstructors", + "shortDescription": { + "text": "'clone()' instantiates objects with constructor" + }, + "fullDescription": { + "text": "Reports calls to object constructors inside 'clone()' methods. It is considered good practice to call 'clone()' to instantiate objects inside of a 'clone()' method instead of creating them directly to support later subclassing. This inspection will not report 'clone()' methods declared as 'final' or 'clone()' methods on 'final' classes.", + "markdown": "Reports calls to object constructors inside `clone()` methods.\n\nIt is considered good practice to call `clone()` to instantiate objects inside of a `clone()` method\ninstead of creating them directly to support later subclassing.\nThis inspection will not report\n`clone()` methods declared as `final`\nor `clone()` methods on `final` classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Cloning issues", + "index": 80, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ArrayHashCode", + "shortDescription": { + "text": "'hashCode()' called on array" + }, + "fullDescription": { + "text": "Reports incorrect hash code calculation for arrays. In order to correctly calculate the hash code for an array, use: 'Arrays.hashcode()' for linear arrays 'Arrays.deepHashcode()' for multidimensional arrays These methods should also be used with 'Objects.hash()' when the sequence of input values includes arrays, for example: 'Objects.hash(string, Arrays.hashcode(array))'", + "markdown": "Reports incorrect hash code calculation for arrays.\n\nIn order to\ncorrectly calculate the hash code for an array, use:\n\n* `Arrays.hashcode()` for linear arrays\n* `Arrays.deepHashcode()` for multidimensional arrays\n\nThese methods should also be used with `Objects.hash()` when the sequence of input values includes arrays, for example: `Objects.hash(string, Arrays.hashcode(array))`" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WaitNotInLoop", + "shortDescription": { + "text": "'wait()' not called in loop" + }, + "fullDescription": { + "text": "Reports calls to 'wait()' that are not made inside a loop. 'wait()' is normally used to suspend a thread until some condition becomes true. As the thread could have been waken up for a different reason, the condition should be checked after the 'wait()' call returns. A loop is a simple way to achieve this. Example: 'class BoundedCounter {\n private int count;\n synchronized void inc() throws InterruptedException {\n if (count >= 10) wait();\n ++count;\n }\n }' Good code should look like this: 'class BoundedCounter {\n private int count;\n synchronized void inc() throws InterruptedException {\n while (count >= 10) wait();\n ++count;\n }\n }'", + "markdown": "Reports calls to `wait()` that are not made inside a loop.\n\n\n`wait()` is normally used to suspend a thread until some condition becomes true.\nAs the thread could have been waken up for a different reason,\nthe condition should be checked after the `wait()` call returns.\nA loop is a simple way to achieve this.\n\n**Example:**\n\n\n class BoundedCounter {\n private int count;\n synchronized void inc() throws InterruptedException {\n if (count >= 10) wait();\n ++count;\n }\n }\n\nGood code should look like this:\n\n\n class BoundedCounter {\n private int count;\n synchronized void inc() throws InterruptedException {\n while (count >= 10) wait();\n ++count;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ArraysAsListWithZeroOrOneArgument", + "shortDescription": { + "text": "Call to 'Arrays.asList()' with too few arguments" + }, + "fullDescription": { + "text": "Reports calls to 'Arrays.asList()' with at most one argument. Such calls could be replaced with 'Collections.singletonList()', 'Collections.emptyList()', or 'List.of()' on JDK 9 and later, which will save some memory. In particular, 'Collections.emptyList()' and 'List.of()' with no arguments always return a shared instance, while 'Arrays.asList()' with no arguments creates a new object every time it's called. Note: the lists returned by 'Collections.singletonList()' and 'List.of()' are immutable, while the list returned 'Arrays.asList()' allows calling the 'set()' method. This may break the code in rare cases. Example: 'List empty = Arrays.asList();\n List one = Arrays.asList(\"one\");' After the quick-fix is applied: 'List empty = Collections.emptyList();\n List one = Collections.singletonList(\"one\");'", + "markdown": "Reports calls to `Arrays.asList()` with at most one argument.\n\n\nSuch calls could be replaced\nwith `Collections.singletonList()`, `Collections.emptyList()`,\nor `List.of()` on JDK 9 and later, which will save some memory.\n\nIn particular, `Collections.emptyList()` and `List.of()` with no arguments\nalways return a shared instance,\nwhile `Arrays.asList()` with no arguments creates a new object every time it's called.\n\nNote: the lists returned by `Collections.singletonList()` and `List.of()` are immutable,\nwhile the list returned `Arrays.asList()` allows calling the `set()` method.\nThis may break the code in rare cases.\n\n**Example:**\n\n\n List empty = Arrays.asList();\n List one = Arrays.asList(\"one\");\n\nAfter the quick-fix is applied:\n\n\n List empty = Collections.emptyList();\n List one = Collections.singletonList(\"one\");\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExternalizableWithSerializationMethods", + "shortDescription": { + "text": "Externalizable class with 'readObject()' or 'writeObject()'" + }, + "fullDescription": { + "text": "Reports 'Externalizable' classes that define 'readObject()' or 'writeObject()' methods. These methods are not called for serialization of 'Externalizable' objects. Example: 'abstract class Crucial implements Externalizable {\n int value;\n private void readObject(ObjectInputStream in) {\n value = in.readInt();\n }\n }'", + "markdown": "Reports `Externalizable` classes that define `readObject()` or `writeObject()` methods. These methods are not called for serialization of `Externalizable` objects.\n\n**Example:**\n\n\n abstract class Crucial implements Externalizable {\n int value;\n private void readObject(ObjectInputStream in) {\n value = in.readInt();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 18, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnstableApiUsage", + "shortDescription": { + "text": "Unstable API Usage" + }, + "fullDescription": { + "text": "Reports usages of an API marked with one of the annotations as unstable. Such an API may be changed or removed in future versions, breaking the code that uses it. The annotations which are used to mark unstable APIs are shown in the list below. By default, the inspection ignores usages of unstable APIs if their declarations are located in sources of the same project. In such cases it'll be possible to update the usages when you change APIs. However, it may be inconvenient if the project is big, so one can switch off the Ignore API declared in this project option to report the usages of unstable APIs declared in both the project sources and libraries.", + "markdown": "Reports usages of an API marked with one of the annotations as unstable. Such an API may be changed or removed in future versions, breaking the code that uses it.\n\nThe annotations which are used to mark unstable APIs are shown in the list below.\n\nBy default, the inspection ignores usages of unstable APIs\nif their declarations are located in sources of the same project. In such cases it'll be possible to update the usages when you change APIs.\nHowever, it may be inconvenient if the project is big, so one can switch off the **Ignore API declared in this project** option to report\nthe usages of unstable APIs declared in both the project sources and libraries." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 4, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SafeLock", + "shortDescription": { + "text": "Lock acquired but not safely unlocked" + }, + "fullDescription": { + "text": "Reports 'java.util.concurrent.locks.Lock' resources that are not acquired in front of a 'try' block or not unlocked in the corresponding 'finally' block. Such resources may be inadvertently leaked if an exception is thrown before the resource is closed. Example: 'lock.lock(); // will be reported since the 'finally' block is missing\n try {\n doSmthWithLock();\n } catch (IOException e) {\n throw new UncheckedIOException(e);\n }\n lock.unlock();'", + "markdown": "Reports `java.util.concurrent.locks.Lock` resources that are not acquired in front of a `try` block or not unlocked in the corresponding `finally` block. Such resources may be inadvertently leaked if an exception is thrown before the resource is closed.\n\n**Example:**\n\n\n lock.lock(); // will be reported since the 'finally' block is missing\n try {\n doSmthWithLock();\n } catch (IOException e) {\n throw new UncheckedIOException(e);\n }\n lock.unlock();\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaLangInvokeHandleSignature", + "shortDescription": { + "text": "MethodHandle/VarHandle type mismatch" + }, + "fullDescription": { + "text": "Reports 'MethodHandle' and 'VarHandle' factory method calls that don't match any method or field. Also reports arguments to 'MethodHandle.invoke()' and similar methods, that don't match the 'MethodHandle' signature and arguments to 'VarHandle.set()' that don't match the 'VarHandle' type. Examples: MethodHandle mh = MethodHandles.lookup().findVirtual(\n MyClass.class, \"foo\", MethodType.methodType(void.class, int.class));\n // the argument should be an int value\n mh.invoke(myObj, \"abc\");\n // the argument should be String.class\n VarHandle vh = MethodHandles.lookup().findVarHandle(\n MyClass.class, \"text\", int.class);\n VarHandle vh = MethodHandles.lookup().findVarHandle(\n MyClass.class, \"text\", String.class);\n // the argument should be a String value\n vh.set(myObj, 42);\n New in 2017.2", + "markdown": "Reports `MethodHandle` and `VarHandle` factory method calls that don't match any method or field.\n\nAlso reports arguments to `MethodHandle.invoke()` and similar methods, that don't match the `MethodHandle` signature\nand arguments to `VarHandle.set()` that don't match the `VarHandle` type.\n\n\nExamples:\n\n```\n MethodHandle mh = MethodHandles.lookup().findVirtual(\n MyClass.class, \"foo\", MethodType.methodType(void.class, int.class));\n // the argument should be an int value\n mh.invoke(myObj, \"abc\");\n```\n\n
    \n\n```\n // the argument should be String.class\n VarHandle vh = MethodHandles.lookup().findVarHandle(\n MyClass.class, \"text\", int.class);\n```\n\n
    \n\n```\n VarHandle vh = MethodHandles.lookup().findVarHandle(\n MyClass.class, \"text\", String.class);\n // the argument should be a String value\n vh.set(myObj, 42);\n```\n\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Reflective access", + "index": 98, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LambdaUnfriendlyMethodOverload", + "shortDescription": { + "text": "Lambda-unfriendly method overload" + }, + "fullDescription": { + "text": "Reports overloaded methods that take functional interfaces with conflicting abstract method signatures. Such overloads introduce ambiguity and require callers to cast lambdas to a specific type or specify lambda parameter types explicitly. It is preferable to give the overloaded methods different names to eliminate ambiguity. Example: 'interface MyExecutor {\n void execute(Supplier supplier);\n void execute(Callable callable);\n }' Here, 'Supplier' and 'Callable' are functional interfaces whose single abstract methods do not take any parameters and return a non-void value. As a result, the type of the lambda cannot be inferred at the call site unless an explicit cast is used.", + "markdown": "Reports overloaded methods that take functional interfaces with conflicting abstract method signatures.\n\nSuch overloads introduce ambiguity and require callers to cast lambdas to a specific type or specify lambda parameter types explicitly.\nIt is preferable to give the overloaded methods different names to eliminate ambiguity.\n\nExample:\n\n\n interface MyExecutor {\n void execute(Supplier supplier);\n void execute(Callable callable);\n }\n\n\nHere, `Supplier` and `Callable` are functional interfaces\nwhose single abstract methods do not take any parameters and return a non-void value.\nAs a result, the type of the lambda cannot be inferred at the call site unless an explicit cast is used." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Method", + "index": 88, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReturnThis", + "shortDescription": { + "text": "Return of 'this'" + }, + "fullDescription": { + "text": "Reports methods returning 'this'. While such a return is valid, it is rarely necessary, and usually indicates that the method is intended to be used as part of a chain of similar method calls (for example, 'buffer.append(\"foo\").append(\"bar\").append(\"baz\")'). Such chains are frowned upon by many coding standards. Example: 'public Builder append(String str) {\n // [...]\n return this;\n }'", + "markdown": "Reports methods returning `this`.\n\n\nWhile such a return is valid, it is rarely necessary, and usually indicates that the method is intended to be used\nas part of a chain of similar method calls (for example, `buffer.append(\"foo\").append(\"bar\").append(\"baz\")`).\nSuch chains are frowned upon by many coding standards.\n\n**Example:**\n\n\n public Builder append(String str) {\n // [...]\n return this;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CanBeFinal", + "shortDescription": { + "text": "Declaration can have 'final' modifier" + }, + "fullDescription": { + "text": "Reports fields, methods, or classes that may have the 'final' modifier added to their declarations. Final classes can't be extended, final methods can't be overridden, and final fields can't be reassigned. Example: 'public class Person {\n private String name;\n\n Person(String name) {\n this.name = name;\n }\n\n public String getName() {\n return name;\n }\n\n public String toString() {\n return getName();\n }\n }' After the quick-fix is applied: 'public final class Person {\n private final String name;\n\n Person(String name) {\n this.name = name;\n }\n\n public final String getName() {\n return name;\n }\n\n public final String toString() {\n return getName();\n }\n }' Use the Report classes and Report methods options to define which declarations are to be reported.", + "markdown": "Reports fields, methods, or classes that may have the `final` modifier added to their declarations.\n\nFinal classes can't be extended, final methods can't be overridden, and final fields can't be reassigned.\n\n**Example:**\n\n\n public class Person {\n private String name;\n\n Person(String name) {\n this.name = name;\n }\n\n public String getName() {\n return name;\n }\n\n public String toString() {\n return getName();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public final class Person {\n private final String name;\n\n Person(String name) {\n this.name = name;\n }\n\n public final String getName() {\n return name;\n }\n\n public final String toString() {\n return getName();\n }\n }\n\nUse the **Report classes** and **Report methods** options to define which declarations are to be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 15, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SerializableRecordContainsIgnoredMembers", + "shortDescription": { + "text": "'record' contains ignored members" + }, + "fullDescription": { + "text": "Reports serialization methods or fields defined in a 'record' class. Serialization methods include 'writeObject()', 'readObject()', 'readObjectNoData()', 'writeExternal()', and 'readExternal()' and the field 'serialPersistentFields'. These members are not used for the serialization or deserialization of records and therefore unnecessary. Examples: 'record R1() implements Serializable {\n // The field is ignored during record serialization\n @Serial\n private static final ObjectStreamField[] serialPersistentFields = new ObjectStreamField[0];\n\n // The method is ignored during record serialization\n @Serial\n private void writeObject(ObjectOutputStream out) throws IOException {\n }\n }' 'record R2() implements Externalizable {\n // The method is ignored during record serialization\n @Override\n public void writeExternal(ObjectOutput out) throws IOException {\n }\n\n // The method is ignored during record serialization\n @Override\n public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {\n }\n }' This inspection only reports if the language level of the project or module is 14 or higher. New in 2020.3", + "markdown": "Reports serialization methods or fields defined in a `record` class. Serialization methods include `writeObject()`, `readObject()`, `readObjectNoData()`, `writeExternal()`, and `readExternal()` and the field `serialPersistentFields`. These members are not used for the serialization or deserialization of records and therefore unnecessary.\n\n**Examples:**\n\n\n record R1() implements Serializable {\n // The field is ignored during record serialization\n @Serial\n private static final ObjectStreamField[] serialPersistentFields = new ObjectStreamField[0];\n\n // The method is ignored during record serialization\n @Serial\n private void writeObject(ObjectOutputStream out) throws IOException {\n }\n }\n\n\n record R2() implements Externalizable {\n // The method is ignored during record serialization\n @Override\n public void writeExternal(ObjectOutput out) throws IOException {\n }\n\n // The method is ignored during record serialization\n @Override\n public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {\n }\n }\n\nThis inspection only reports if the language level of the project or module is 14 or higher.\n\nNew in 2020.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 18, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryLabelOnBreakStatement", + "shortDescription": { + "text": "Unnecessary label on 'break' statement" + }, + "fullDescription": { + "text": "Reports 'break' statements with unnecessary labels. Such labels do not change the control flow but make the code difficult to follow. Example: 'label:\n for(int i = 0; i < 10; i++) {\n if (shouldBreak()) break label;\n //doSmth\n }' After the quick-fix is applied: 'label:\n for(int i = 0; i < 10; i++) {\n if (shouldBreak()) break;\n //doSmth\n }'", + "markdown": "Reports `break` statements with unnecessary labels. Such labels do not change the control flow but make the code difficult to follow.\n\n**Example:**\n\n\n label:\n for(int i = 0; i < 10; i++) {\n if (shouldBreak()) break label;\n //doSmth\n }\n\nAfter the quick-fix is applied:\n\n\n label:\n for(int i = 0; i < 10; i++) {\n if (shouldBreak()) break;\n //doSmth\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NakedNotify", + "shortDescription": { + "text": "'notify()' or 'notifyAll()' without corresponding state change" + }, + "fullDescription": { + "text": "Reports 'Object.notify()' or 'Object.notifyAll()' being called without any detectable state change occurring. Normally, 'Object.notify()' and 'Object.notifyAll()' are used to inform other threads that a state change has occurred. That state change should occur in a synchronized context that contains the 'Object.notify()' or 'Object.notifyAll()' call, and prior to the call. While not having such a state change isn't necessarily incorrect, it is certainly worth examining. Example: 'synchronized (this) {\n notify();\n }\n // no state change\n synchronized (this) {\n notify(); // this notify might be redundant\n }'", + "markdown": "Reports `Object.notify()` or `Object.notifyAll()` being called without any detectable state change occurring.\n\n\nNormally, `Object.notify()` and `Object.notifyAll()` are used to inform other threads that a state change has\noccurred. That state change should occur in a synchronized context that contains the `Object.notify()` or\n`Object.notifyAll()` call, and prior to the call. While not having such a state change isn't necessarily incorrect, it is\ncertainly worth examining.\n\n**Example:**\n\n\n synchronized (this) {\n notify();\n }\n // no state change\n synchronized (this) {\n notify(); // this notify might be redundant\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassCoupling", + "shortDescription": { + "text": "Overly coupled class" + }, + "fullDescription": { + "text": "Reports classes that reference too many other classes. Classes with too high coupling can be very fragile, and should probably be split into smaller classes. Configure the inspection: Use the Class coupling limit field to specify the maximum allowed coupling for a class. Use the Include couplings to java system classes option to specify whether references to system classes (those in the 'java.'or 'javax.' packages) should be counted. Use the Include couplings to library classes option to specify whether references to any library classes should be counted.", + "markdown": "Reports classes that reference too many other classes.\n\nClasses with too high coupling can be very fragile, and should probably be split into smaller classes.\n\nConfigure the inspection:\n\n* Use the **Class coupling limit** field to specify the maximum allowed coupling for a class.\n* Use the **Include couplings to java system classes** option to specify whether references to system classes (those in the `java.`or `javax.` packages) should be counted.\n* Use the **Include couplings to library classes** option to specify whether references to any library classes should be counted." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class metrics", + "index": 87, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessarilyQualifiedInnerClassAccess", + "shortDescription": { + "text": "Unnecessarily qualified inner class access" + }, + "fullDescription": { + "text": "Reports any references to inner classes that are unnecessarily qualified with the name of the enclosing class. Such a qualification can be safely removed, which sometimes adds an import for the inner class. Example: 'class X {\n X.Y foo;\n class Y{}\n }' After the quick-fix is applied: 'class X {\n Y foo;\n class Y{}\n }' Use the Ignore references for which an import is needed option to ignore references to inner classes, where removing the qualification adds an import.", + "markdown": "Reports any references to inner classes that are unnecessarily qualified with the name of the enclosing class.\n\nSuch a qualification can be safely removed, which sometimes adds an import for the inner class.\n\nExample:\n\n\n class X {\n X.Y foo;\n class Y{}\n }\n\nAfter the quick-fix is applied:\n\n\n class X {\n Y foo;\n class Y{}\n }\n\nUse the **Ignore references for which an import is needed** option to ignore references to inner classes, where\nremoving the qualification adds an import." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EmptySynchronizedStatement", + "shortDescription": { + "text": "Empty 'synchronized' statement" + }, + "fullDescription": { + "text": "Reports 'synchronized' statements with empty bodies. Empty 'synchronized' statements are sometimes used to wait for other threads to release a particular resource. However, there is no guarantee that the same resource won't be acquired again right after the empty 'synchronized' statement finishes. For proper synchronization, the resource should be utilized inside the 'synchronized' block. Also, an empty 'synchronized' block may appear after a refactoring when redundant code was removed. In this case, the 'synchronized' block itself will be redundant and should be removed as well. Example: 'synchronized(lock) {}' A quick-fix is suggested to remove the empty synchronized statement. This inspection is disabled in JSP files.", + "markdown": "Reports `synchronized` statements with empty bodies.\n\n\nEmpty `synchronized` statements are sometimes used to wait for other threads to\nrelease a particular resource. However, there is no guarantee that the same resource\nwon't be acquired again right after the empty `synchronized` statement finishes.\nFor proper synchronization, the resource should be utilized inside the `synchronized` block.\n\n\nAlso, an empty `synchronized` block may appear after a refactoring\nwhen redundant code was removed. In this case, the `synchronized` block\nitself will be redundant and should be removed as well.\n\nExample:\n\n\n synchronized(lock) {}\n\n\nA quick-fix is suggested to remove the empty synchronized statement.\n\n\nThis inspection is disabled in JSP files." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TextBlockMigration", + "shortDescription": { + "text": "Text block can be used" + }, + "fullDescription": { + "text": "Reports 'String' concatenations that can be simplified by replacing them with text blocks. Requirements: '\\n' occurs two or more times. Text blocks are not concatenated. Use the Apply to single string literals option to suggest the fix for single literals containing line breaks. Example: 'String html = \"\\n\" +\n \" \\n\" +\n \"

    Hello, world

    \\n\" +\n \" \\n\" +\n \"\\n\";' After the quick-fix is applied: 'String html = \"\"\"\n \n \n

    Hello, world

    \n \n \n \"\"\";' This inspection only reports if the language level of the project or module is 15 or higher. New in 2019.3", + "markdown": "Reports `String` concatenations that can be simplified by replacing them with text blocks.\n\nRequirements:\n\n* `\\n` occurs two or more times.\n* Text blocks are not concatenated.\n\n\nUse the **Apply to single string literals** option to suggest the fix for single literals containing line breaks.\n\n\n**Example:**\n\n\n String html = \"\\n\" +\n \" \\n\" +\n \"

    Hello, world

    \\n\" +\n \" \\n\" +\n \"\\n\";\n\nAfter the quick-fix is applied:\n\n\n String html = \"\"\"\n \n \n

    Hello, world

    \n \n \n \"\"\";\n\nThis inspection only reports if the language level of the project or module is 15 or higher.\n\nNew in 2019.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 15", + "index": 99, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObjectAllocationInLoop", + "shortDescription": { + "text": "Object allocation in loop" + }, + "fullDescription": { + "text": "Reports object or array allocations inside loops. While not necessarily a problem, an object allocation inside a loop is a great place to look for memory leaks and performance issues. The inspection reports the following constructs: Explicit allocations via 'new' operator Methods known to return new object Instance-bound method references Lambdas that capture variables or 'this' reference Example: '// Explicit allocation\n for (Status status : Status.values()) {\n declarationsMap.put(status, new ArrayList<>());\n }\n\n // Lambda captures variable\n String message = \"Engine running.\";\n for (Engine engine : engines) {\n if (!isRunning(engine)) {\n logger.warn(() -> {\n return String.format(message);\n });\n }\n }\n\n // Instance-bound method reference\n for(Node node : nodes) {\n descriptor = node.getDescription();\n descriptor.ifPresent(dynamicTestExecutor::execute);\n }'", + "markdown": "Reports object or array allocations inside loops. While not necessarily a problem, an object allocation inside a loop is a great place to look for memory leaks and performance issues.\n\n\nThe inspection reports the following constructs:\n\n* Explicit allocations via `new` operator\n* Methods known to return new object\n* Instance-bound method references\n* Lambdas that capture variables or `this` reference\n\n**Example:**\n\n\n // Explicit allocation\n for (Status status : Status.values()) {\n declarationsMap.put(status, new ArrayList<>());\n }\n\n // Lambda captures variable\n String message = \"Engine running.\";\n for (Engine engine : engines) {\n if (!isRunning(engine)) {\n logger.warn(() -> {\n return String.format(message);\n });\n }\n }\n\n // Instance-bound method reference\n for(Node node : nodes) {\n descriptor = node.getDescription();\n descriptor.ifPresent(dynamicTestExecutor::execute);\n }\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavadocLinkAsPlainText", + "shortDescription": { + "text": "Link specified as plain text" + }, + "fullDescription": { + "text": "Reports links specified as plain text in Javadoc comments. The quick-fix suggests to wrap the link in tag. Example: 'class Main {\n /**\n * https://en.wikipedia.org/\n */\n void foo() {}\n }' After the quick-fix is applied: 'class Main {\n /**\n * https://en.wikipedia.org/\n */\n void foo() {}\n }' New in 2022.1", + "markdown": "Reports links specified as plain text in Javadoc comments.\n\n\nThe quick-fix suggests to wrap the link in \\ tag.\n\n**Example:**\n\n\n class Main {\n /**\n * https://en.wikipedia.org/\n */\n void foo() {}\n }\n\nAfter the quick-fix is applied:\n\n\n class Main {\n /**\n * https://en.wikipedia.org/\n */\n void foo() {}\n }\n\nNew in 2022.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 45, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SharedThreadLocalRandom", + "shortDescription": { + "text": "'ThreadLocalRandom' instance might be shared" + }, + "fullDescription": { + "text": "Reports 'java.util.concurrent.ThreadLocalRandom' instances which might be shared between threads. A 'ThreadLocalRandom' should not be shared between threads because that is not thread-safe. The inspection reports instances that are assigned to a field used as a method argument, or assigned to a local variable and used in anonymous or nested classes as they might get shared between threads. Usages of 'ThreadLocalRandom' should typically look like 'ThreadLocalRandom.current().nextInt(...)' (or 'nextDouble(...)' etc.). When all usages are in this form, 'ThreadLocalRandom' instances cannot be used accidentally by multiple threads. Example: 'class Main {\n void printRandomNumbersAsync() {\n ThreadLocalRandom random = ThreadLocalRandom.current();\n CompletableFuture.supplyAsync(() -> generateNumbers(random))\n .thenAccept(numbers -> System.out.println(Arrays.toString(numbers)));\n }\n\n private int[] generateNumbers(Random random) {\n return random.ints(1000, 0, 100).toArray();\n }\n }' Use the options to list methods that are safe to be passed to 'ThreadLocalRandom' instances as an argument. It's possible to use regular expressions for method names.", + "markdown": "Reports `java.util.concurrent.ThreadLocalRandom` instances which might be shared between threads.\n\n\nA `ThreadLocalRandom` should not be shared between threads because that is not thread-safe.\nThe inspection reports instances that are assigned to a field used as a method argument,\nor assigned to a local variable and used in anonymous or nested classes as they might get shared between threads.\n\n\nUsages of `ThreadLocalRandom` should typically look like `ThreadLocalRandom.current().nextInt(...)`\n(or `nextDouble(...)` etc.).\nWhen all usages are in this form, `ThreadLocalRandom` instances cannot be used accidentally by multiple threads.\n\n**Example:**\n\n\n class Main {\n void printRandomNumbersAsync() {\n ThreadLocalRandom random = ThreadLocalRandom.current();\n CompletableFuture.supplyAsync(() -> generateNumbers(random))\n .thenAccept(numbers -> System.out.println(Arrays.toString(numbers)));\n }\n\n private int[] generateNumbers(Random random) {\n return random.ints(1000, 0, 100).toArray();\n }\n }\n \n\nUse the options to list methods that are safe to be passed to `ThreadLocalRandom` instances as an argument.\nIt's possible to use regular expressions for method names." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonFinalClone", + "shortDescription": { + "text": "Non-final 'clone()' in secure context" + }, + "fullDescription": { + "text": "Reports 'clone()' methods without the 'final' modifier. Since 'clone()' can be used to instantiate objects without using a constructor, allowing the 'clone()' method to be overridden may result in corrupted objects, and even in security exploits. This may be prevented by making the 'clone()' method or the enclosing class itself 'final'. Example: 'class Main implements Cloneable {\n @Override\n protected Object clone() throws CloneNotSupportedException {\n return super.clone();\n }\n }'", + "markdown": "Reports `clone()` methods without the `final` modifier.\n\n\nSince `clone()` can be used to instantiate objects without using a constructor, allowing the `clone()`\nmethod to be overridden may result in corrupted objects, and even in security exploits. This may be prevented by making the\n`clone()` method or the enclosing class itself `final`.\n\n**Example:**\n\n\n class Main implements Cloneable {\n @Override\n protected Object clone() throws CloneNotSupportedException {\n return super.clone();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 30, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ChainedEquality", + "shortDescription": { + "text": "Chained equality comparisons" + }, + "fullDescription": { + "text": "Reports chained equality comparisons. Such comparisons may be confusing: 'a == b == c' means '(a == b) == c', but possibly 'a == b && a == c' is intended. Example: 'boolean chainedEquality(boolean a, boolean b, boolean c) {\n return a == b == c;\n }' You can use parentheses to make the comparison less confusing: 'boolean chainedEquality(boolean a, boolean b, boolean c) {\n return (a == b) == c;\n }'", + "markdown": "Reports chained equality comparisons.\n\nSuch comparisons may be confusing: `a == b == c` means `(a == b) == c`,\nbut possibly `a == b && a == c` is intended.\n\n**Example:**\n\n\n boolean chainedEquality(boolean a, boolean b, boolean c) {\n return a == b == c;\n }\n\nYou can use parentheses to make the comparison less confusing:\n\n\n boolean chainedEquality(boolean a, boolean b, boolean c) {\n return (a == b) == c;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AbstractMethodOverridesConcreteMethod", + "shortDescription": { + "text": "Abstract method overrides concrete method" + }, + "fullDescription": { + "text": "Reports 'abstract' methods that override concrete super methods. Methods overridden from 'java.lang.Object' are not reported by this inspection.", + "markdown": "Reports `abstract` methods that override concrete super methods.\n\nMethods overridden from `java.lang.Object` are not reported by this inspection." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 25, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThrowFromFinallyBlock", + "shortDescription": { + "text": "'throw' inside 'finally' block" + }, + "fullDescription": { + "text": "Reports 'throw' statements inside 'finally' blocks. While occasionally intended, such 'throw' statements may conceal exceptions thrown from 'try'-'catch' and thus tremendously complicate the debugging process.", + "markdown": "Reports `throw` statements inside `finally` blocks.\n\nWhile occasionally intended, such `throw` statements may conceal exceptions thrown from `try`-`catch` and thus\ntremendously complicate the debugging process." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StaticNonFinalField", + "shortDescription": { + "text": "'static', non-'final' field" + }, + "fullDescription": { + "text": "Reports non-'final' 'static' fields. A quick-fix is available to add the 'final' modifier to a non-'final' 'static' field. This inspection doesn't check fields' mutability. For example, adding the 'final' modifier to a field that has a value being set somewhere will cause a compilation error. Use the Only report 'public' fields option so that the inspection reported only 'public' fields.", + "markdown": "Reports non-`final` `static` fields.\n\nA quick-fix is available to add the `final` modifier to a non-`final` `static` field.\n\nThis inspection doesn't check fields' mutability. For example, adding the `final` modifier to a field that has a value\nbeing set somewhere will cause a compilation error.\n\n\nUse the **Only report 'public' fields** option so that the inspection reported only `public` fields." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CodeBlock2Expr", + "shortDescription": { + "text": "Statement lambda can be replaced with expression lambda" + }, + "fullDescription": { + "text": "Reports lambda expressions with code block bodies when expression-style bodies can be used instead. The result of the conversion is shorter and more clear. Example: 'Comparable c = o -> {return 0;};' After the quick-fix is applied: 'Comparable c = o -> 0;'", + "markdown": "Reports lambda expressions with code block bodies when expression-style bodies can be used instead. The result of the conversion is shorter and more clear.\n\nExample:\n\n\n Comparable c = o -> {return 0;};\n\nAfter the quick-fix is applied:\n\n\n Comparable c = o -> 0;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 59, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifyForEach", + "shortDescription": { + "text": "Simplifiable forEach() call" + }, + "fullDescription": { + "text": "Reports 'forEach()' calls that can be replaced with a more concise method or from which intermediate steps can be extracted. Example: 'List findNStrings(List list, int n) {\n List other = new ArrayList<>();\n list.forEach(s -> {\n if(s.length() > n) other.add(s);\n });\n return other;\n }' After the quick-fix is applied: 'List findNStrings(List list, int n) {\n List other = list.stream()\n .filter(s -> s.length() > n)\n .collect(Collectors.toList());\n return other;\n }' This inspection only reports if the language level of the project or module is 8 or higher. New in 2017.3", + "markdown": "Reports `forEach()` calls that can be replaced with a more concise method or from which intermediate steps can be extracted.\n\n**Example:**\n\n\n List findNStrings(List list, int n) {\n List other = new ArrayList<>();\n list.forEach(s -> {\n if(s.length() > n) other.add(s);\n });\n return other;\n }\n\nAfter the quick-fix is applied:\n\n\n List findNStrings(List list, int n) {\n List other = list.stream()\n .filter(s -> s.length() > n)\n .collect(Collectors.toList());\n return other;\n }\n\nThis inspection only reports if the language level of the project or module is 8 or higher.\n\nNew in 2017.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 59, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EmptyMethod", + "shortDescription": { + "text": "Empty method" + }, + "fullDescription": { + "text": "Reports empty methods that can be removed. Methods are considered empty if they are empty themselves and if they are overridden or implemented by empty methods only. Note that methods containing only comments and the 'super()' call with own parameters are also considered empty. The inspection ignores methods with special annotations, for example, the 'javax.ejb.Init' and 'javax.ejb.Remove' EJB annotations . The quick-fix safely removes unnecessary methods. Configure the inspection: Use the Comments and javadoc count as content option to select whether methods with comments should be treated as non-empty. Use the Additional special annotations option to configure additional annotations that should be ignored by this inspection.", + "markdown": "Reports empty methods that can be removed.\n\nMethods are considered empty if they are empty themselves and if they are overridden or\nimplemented by empty methods only. Note that methods containing only comments and the `super()` call with own parameters are\nalso considered empty.\n\nThe inspection ignores methods with special annotations, for example, the `javax.ejb.Init` and `javax.ejb.Remove` EJB annotations .\n\nThe quick-fix safely removes unnecessary methods.\n\nConfigure the inspection:\n\n* Use the **Comments and javadoc count as content** option to select whether methods with comments should be treated as non-empty.\n* Use the **Additional special annotations** option to configure additional annotations that should be ignored by this inspection." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 15, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantFieldInitialization", + "shortDescription": { + "text": "Redundant field initialization" + }, + "fullDescription": { + "text": "Reports fields explicitly initialized to their default values. Example: 'class Foo {\n int foo = 0;\n List bar = null;\n }' After the quick-fix is applied: 'class Foo {\n int foo;\n List bar;\n }' Use the inspection settings to only report explicit 'null' initialization, for example: 'class Foo {\n int foo = 0; // no warning\n List bar = null; // redundant field initialization warning\n }'", + "markdown": "Reports fields explicitly initialized to their default values.\n\n**Example:**\n\n\n class Foo {\n int foo = 0;\n List bar = null;\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n int foo;\n List bar;\n }\n\n\nUse the inspection settings to only report explicit `null` initialization, for example:\n\n\n class Foo {\n int foo = 0; // no warning\n List bar = null; // redundant field initialization warning\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Since15", + "shortDescription": { + "text": "Usages of API which isn't available at the configured language level" + }, + "fullDescription": { + "text": "Reports usages of the API that is unavailable at the configured language level. This inspection does 3 things: Highlight usage of generified classes when the language level is below Java 7. Highlight when default methods are not overridden and the language level is below Java 8. Highlight usage of API when the language level is lower than marked using the '@since' tag in the documentation. Use the Forbid API usages option to forbid usages of the API in respect to the project or custom language level.", + "markdown": "Reports usages of the API that is unavailable at the configured language level. This inspection does 3 things:\n\n* Highlight usage of generified classes when the language level is below Java 7.\n* Highlight when default methods are not overridden and the language level is below Java 8.\n* Highlight usage of API when the language level is lower than marked using the `@since` tag in the documentation.\n\n\nUse the **Forbid API usages** option to forbid usages of the API in respect to the project or custom language level." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 4, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifiableEqualsExpression", + "shortDescription": { + "text": "Unnecessary 'null' check before 'equals()' call" + }, + "fullDescription": { + "text": "Reports comparisons to 'null' that are followed by a call to 'equals()' with a constant argument. Example: 'if (s != null && s.equals(\"literal\")) {}' After the quick-fix is applied: 'if (\"literal\".equals(s)) {}' Use the inspection settings to report 'equals()' calls with a non-constant argument when the argument to 'equals()' is proven not to be 'null'.", + "markdown": "Reports comparisons to `null` that are followed by a call to `equals()` with a constant argument.\n\n**Example:**\n\n\n if (s != null && s.equals(\"literal\")) {}\n\nAfter the quick-fix is applied:\n\n\n if (\"literal\".equals(s)) {}\n\n\nUse the inspection settings to report `equals()` calls with a non-constant argument\nwhen the argument to `equals()` is proven not to be `null`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonCommentSourceStatements", + "shortDescription": { + "text": "Overly long method" + }, + "fullDescription": { + "text": "Reports methods whose number of statements exceeds the specified maximum. Methods with too many statements may be confusing and are a good sign that refactoring is necessary. The following statements are not counted: empty statements (semicolons) block statements 'for' loop initialization statements, that is, 'int i = ...' within a 'for(int i = ...;...)' statement 'for' loop update statements, that is, 'i += 2' within a 'for(int i = ...;...; i += 2)' statement Use the Maximum statements per method field to specify the maximum allowed number of statements in a method.", + "markdown": "Reports methods whose number of statements exceeds the specified maximum.\n\nMethods with too many statements may be confusing and are a good sign that refactoring is necessary.\n\nThe following statements are not counted:\n\n* empty statements (semicolons)\n* block statements\n* `for` loop initialization statements, that is, `int i = ...` within a `for(int i = ...;...)` statement\n* `for` loop update statements, that is, `i += 2` within a `for(int i = ...;...; i += 2)` statement\n\nUse the **Maximum statements per method** field to specify the maximum allowed number of statements in a method." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Method metrics", + "index": 95, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConfusingMainMethod", + "shortDescription": { + "text": "Confusing 'main()' method" + }, + "fullDescription": { + "text": "Reports methods that are named \"main\", but do not have the 'public static void main(String[])' signature. Such methods may be confusing, as methods named \"main\" are expected to be application entry points. Example: 'class Main {\n void main(String[] args) {} //a warning here because there are no \"public static\" modifiers\n }' A quick-fix that renames such methods is available only in the editor.", + "markdown": "Reports methods that are named \"main\", but do not have the `public static void main(String[])` signature.\n\nSuch methods may be confusing, as methods named \"main\"\nare expected to be application entry points.\n\n**Example:**\n\n\n class Main {\n void main(String[] args) {} //a warning here because there are no \"public static\" modifiers\n }\n\nA quick-fix that renames such methods is available only in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReadObjectInitialization", + "shortDescription": { + "text": "Instance field may not be initialized by 'readObject()'" + }, + "fullDescription": { + "text": "Reports fields that are not guaranteed to be initialized after the object is deserialized by the 'readObject()' method. The inspection doesn't report transient fields. Note: This inspection uses a very conservative control flow algorithm, and may incorrectly report fields as uninitialized. Example: 'class DataObject implements Serializable {\n String s; // s is not initialized in readObject\n int i;\n\n private void readObject(ObjectInputStream stream) throws IOException {\n i = stream.readInt();\n }\n}'", + "markdown": "Reports fields that are not guaranteed to be initialized after the object is deserialized by the `readObject()` method.\n\nThe inspection doesn't report transient fields.\n\n\nNote: This inspection uses a very conservative control flow algorithm, and may incorrectly report fields\nas uninitialized.\n\n**Example:**\n\n\n class DataObject implements Serializable {\n String s; // s is not initialized in readObject\n int i;\n\n private void readObject(ObjectInputStream stream) throws IOException {\n i = stream.readInt();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 18, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonAtomicOperationOnVolatileField", + "shortDescription": { + "text": "Non-atomic operation on 'volatile' field" + }, + "fullDescription": { + "text": "Reports non-atomic operations on volatile fields. An example of a non-atomic operation is updating the field using the increment operator. As the operation involves read and write, and other modifications may happen in between, data may become corrupted. The operation can be made atomic by surrounding it with a 'synchronized' block or using one of the classes from the 'java.util.concurrent.atomic' package. Example: 'private volatile int v = 1;\n\n void foo() {\n v = 2 * v;\n }'", + "markdown": "Reports non-atomic operations on volatile fields.\n\n\nAn example of a non-atomic operation is updating the field using the increment operator.\nAs the operation involves read and write, and other modifications may happen in between, data may become corrupted.\nThe operation can be made atomic by surrounding it with a `synchronized` block or\nusing one of the classes from the `java.util.concurrent.atomic` package.\n\n**Example:**\n\n\n private volatile int v = 1;\n\n void foo() {\n v = 2 * v;\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "QuestionableName", + "shortDescription": { + "text": "Questionable name" + }, + "fullDescription": { + "text": "Reports variables, methods, or classes with questionable, not really descriptive names. Such names do not help to understand the code, and most probably were created as a temporary thing but were forgotten afterwards. Example: 'int aa = 42;' Rename quick-fix is suggested only in the editor. Use the option to list names that should be reported.", + "markdown": "Reports variables, methods, or classes with questionable, not really descriptive names. Such names do not help to understand the code, and most probably were created as a temporary thing but were forgotten afterwards.\n\n**Example:**\n\n\n int aa = 42;\n\nRename quick-fix is suggested only in the editor.\n\n\nUse the option to list names that should be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions", + "index": 50, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MultipleVariablesInDeclaration", + "shortDescription": { + "text": "Multiple variables in one declaration" + }, + "fullDescription": { + "text": "Reports multiple variables that are declared in a single declaration and suggest creating a separate declaration for each variable. Some coding standards prohibit such declarations. Example: 'int x = 1, y = 2;' After the quick-fix is applied: 'int x = 1;\n int y = 2;' Configure the inspection: Use the Ignore 'for' loop declarations option to ignore multiple variables declared in the initialization of a 'for' loop statement, for example: 'for (int i = 0, max = list.size(); i > max; i++) {}' Use the Only warn on different array dimensions in a single declaration option to only warn when variables with different array dimensions are declared in a single declaration, for example: 'String s = \"\", array[];' New in 2019.2", + "markdown": "Reports multiple variables that are declared in a single declaration and suggest creating a separate declaration for each variable.\n\nSome coding standards prohibit such declarations.\n\nExample:\n\n\n int x = 1, y = 2;\n\nAfter the quick-fix is applied:\n\n\n int x = 1;\n int y = 2;\n\nConfigure the inspection:\n\n* Use the **Ignore 'for' loop declarations** option to ignore multiple variables declared in the initialization of a 'for' loop statement, for example:\n\n\n for (int i = 0, max = list.size(); i > max; i++) {}\n\n* Use the **Only warn on different array dimensions in a single declaration** option to only warn when variables with different array dimensions are declared in a single declaration, for example:\n\n\n String s = \"\", array[];\n\nNew in 2019.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IOResource", + "shortDescription": { + "text": "I/O resource opened but not safely closed" + }, + "fullDescription": { + "text": "Reports I/O resources that are not safely closed. I/O resources checked by this inspection include 'java.io.InputStream', 'java.io.OutputStream', 'java.io.Reader', 'java.io.Writer', 'java.util.zip.ZipFile', 'java.io.Closeable' and 'java.io.RandomAccessFile'. I/O resources wrapped by other I/O resources are not reported, as the wrapped resource will be closed by the wrapping resource. By default, the inspection assumes that the resources can be closed by any method with 'close' or 'cleanup' in its name. Example: 'void save() throws IOException {\n FileWriter writer = new FileWriter(\"filename.txt\"); //warning\n writer.write(\"sample\");\n }' Use the following options to configure the inspection: List I/O resource classes that do not need to be closed and should be ignored by this inspection. Whether an I/O resource is allowed to be opened inside a 'try'block. This style is less desirable because it is more verbose than opening a resource in front of a 'try' block. Whether the resource can be closed by any method call with the resource passed as argument.", + "markdown": "Reports I/O resources that are not safely closed. I/O resources checked by this inspection include `java.io.InputStream`, `java.io.OutputStream`, `java.io.Reader`, `java.io.Writer`, `java.util.zip.ZipFile`, `java.io.Closeable` and `java.io.RandomAccessFile`.\n\n\nI/O resources wrapped by other I/O resources are not reported, as the wrapped resource will be closed by the wrapping resource.\n\n\nBy default, the inspection assumes that the resources can be closed by any method with\n'close' or 'cleanup' in its name.\n\n**Example:**\n\n\n void save() throws IOException {\n FileWriter writer = new FileWriter(\"filename.txt\"); //warning\n writer.write(\"sample\");\n }\n\n\nUse the following options to configure the inspection:\n\n* List I/O resource classes that do not need to be closed and should be ignored by this inspection.\n* Whether an I/O resource is allowed to be opened inside a `try`block. This style is less desirable because it is more verbose than opening a resource in front of a `try` block.\n* Whether the resource can be closed by any method call with the resource passed as argument." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Resource management", + "index": 46, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantLengthCheck", + "shortDescription": { + "text": "Redundant array length check" + }, + "fullDescription": { + "text": "Reports unnecessary array length checks followed by array iteration. When array length is zero, the iteration will be skipped anyway, so there's no need to check length explicitly. Example: 'void f(String[] array) {\n if (array.length != 0) { // unnecessary check\n for (String str : array) {\n System.out.println(str);\n }\n }\n }' A quick-fix is suggested to unwrap or remove the length check: 'void f(String[] array) {\n for (String str : array) {\n System.out.println(str);\n }\n }' New in 2022.3", + "markdown": "Reports unnecessary array length checks followed by array iteration. When array length is zero, the iteration will be skipped anyway, so there's no need to check length explicitly.\n\nExample:\n\n\n void f(String[] array) {\n if (array.length != 0) { // unnecessary check\n for (String str : array) {\n System.out.println(str);\n }\n }\n }\n\nA quick-fix is suggested to unwrap or remove the length check:\n\n\n void f(String[] array) {\n for (String str : array) {\n System.out.println(str);\n }\n }\n\nNew in 2022.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UNCHECKED_WARNING", + "shortDescription": { + "text": "Unchecked warning" + }, + "fullDescription": { + "text": "Reports code on which an unchecked warning will be issued by the javac compiler. Every unchecked warning may potentially trigger 'ClassCastException' at runtime. Example: 'List items = Arrays.asList(\"string\", \"string\");\n List numbers = Collections.unmodifiableList(items); // unchecked assignment' The quick-fix tries to generify the containing file, which may expose any problems in the editor and during compilation that previously only appeared at runtime: 'List items = Arrays.asList(\"string\", \"string\");\n List numbers = Collections.unmodifiableList(items); // incompatible types'", + "markdown": "Reports code on which an unchecked warning will be issued by the javac compiler. Every unchecked warning may potentially trigger `ClassCastException` at runtime.\n\nExample:\n\n\n List items = Arrays.asList(\"string\", \"string\");\n List numbers = Collections.unmodifiableList(items); // unchecked assignment\n\nThe quick-fix tries to generify the containing file,\nwhich may expose any problems in the editor and during compilation that previously only appeared at runtime:\n\n\n List items = Arrays.asList(\"string\", \"string\");\n List numbers = Collections.unmodifiableList(items); // incompatible types\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Compiler issues", + "index": 90, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DataFlowIssue", + "shortDescription": { + "text": "Nullability and data flow problems" + }, + "fullDescription": { + "text": "Reports code constructs that always violate nullability contracts, may throw exceptions, or are just redundant, based on data flow analysis. Examples: 'if (array.length < index) {\n System.out.println(array[index]);\n} // Array index is always out of bounds\n\nif (str == null) System.out.println(\"str is null\");\nSystem.out.println(str.trim());\n// the last statement may throw an NPE\n\n@NotNull\nInteger square(@Nullable Integer input) {\n // the method contract is violated\n return input == null ? null : input * input;\n}' The inspection behavior may be controlled by a number of annotations, such as nullability annotations, '@Contract' annotation, '@Range' annotation and so on. Configure the inspection: Use the Suggest @Nullable annotation for methods/fields/parameters where nullable values are used option to warn when a nullable value is passed as an argument to a method with a non-annotated parameter, stored into non-annotated field, or returned from a non-annotated method. In this case, the inspection will suggest propagating the '@Nullable' annotation. You can also configure nullability annotations using the Configure Annotations button. Use the Treat non-annotated members and parameters as @Nullable option to assume that non-annotated members can be null, so they must not be used in non-null context. Use the Report not-null required parameter with null-literal argument usages option to report method parameters that cannot be null (e.g. immediately dereferenced in the method body), but there are call sites where a 'null' literal is passed. Use the Report nullable methods that always return a non-null value option to report methods that are annotated as '@Nullable', but always return non-null value. In this case, it's suggested that you change the annotation to '@NotNull'. Use the Ignore assert statements option to control how the inspection treats 'assert' statements. By default, the option is disabled, which means that the assertions are assumed to be executed (-ea mode). If the option is enabled, the assertions will be completely ignored (-da mode). Use the Report problems that happen only on some code paths option to control whether to report problems that may happen only on some code path. If this option is disabled, warnings like exception is possible will not be reported. The inspection will report only warnings like exception will definitely occur. This mode may greatly reduce the number of false-positives, especially if the code is not consistently annotated with nullability and contract annotations. That is why it can be useful for finding the most important problems in legacy code bases. Before IntelliJ IDEA 2022.3, this inspection was part of the \"Constant Conditions & Exceptions\" inspection. Now, it is split into two inspections: \"Constant Values\" and \"Nullability and data flow problems\".", + "markdown": "Reports code constructs that always violate nullability contracts, may throw exceptions, or are just redundant, based on data flow analysis.\n\nExamples:\n\n if (array.length < index) {\n System.out.println(array[index]);\n } // Array index is always out of bounds\n\n if (str == null) System.out.println(\"str is null\");\n System.out.println(str.trim());\n // the last statement may throw an NPE\n\n @NotNull\n Integer square(@Nullable Integer input) {\n // the method contract is violated\n return input == null ? null : input * input;\n }\n\n\nThe inspection behavior may be controlled by a number of annotations, such as\n[nullability](https://www.jetbrains.com/help/idea/nullable-and-notnull-annotations.html) annotations,\n[@Contract](https://www.jetbrains.com/help/idea/contract-annotations.html) annotation,\n`@Range` annotation and so on.\n\nConfigure the inspection:\n\n* Use the **Suggest @Nullable annotation for methods/fields/parameters where nullable values are used** option to warn when a nullable value is passed as an argument to a method with a non-annotated parameter, stored into non-annotated field, or returned from a non-annotated method. In this case, the inspection will suggest propagating the `@Nullable` annotation. You can also configure nullability annotations using the **Configure Annotations** button.\n* Use the **Treat non-annotated members and parameters as @Nullable** option to assume that non-annotated members can be null, so they must not be used in non-null context.\n* Use the **Report not-null required parameter with null-literal argument usages** option to report method parameters that cannot be null (e.g. immediately dereferenced in the method body), but there are call sites where a `null` literal is passed.\n* Use the **Report nullable methods that always return a non-null value** option to report methods that are annotated as `@Nullable`, but always return non-null value. In this case, it's suggested that you change the annotation to `@NotNull`.\n* Use the **Ignore assert statements** option to control how the inspection treats `assert` statements. By default, the option is disabled, which means that the assertions are assumed to be executed (-ea mode). If the option is enabled, the assertions will be completely ignored (-da mode).\n* Use the **Report problems that happen only on some code paths** option to control whether to report problems that may happen only on some code path. If this option is disabled, warnings like *exception is possible* will not be reported. The inspection will report only warnings like *exception will definitely occur*. This mode may greatly reduce the number of false-positives, especially if the code is not consistently annotated with nullability and contract annotations. That is why it can be useful for finding the most important problems in legacy code bases.\n\n\nBefore IntelliJ IDEA 2022.3, this inspection was part of the \"Constant Conditions \\& Exceptions\" inspection.\nNow, it is split into two inspections:\n\"Constant Values\" and \"Nullability and data flow problems\"." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ParameterCanBeLocal", + "shortDescription": { + "text": "Value passed as parameter never read" + }, + "fullDescription": { + "text": "Reports redundant method parameters that can be replaced with local variables. If all local usages of a parameter are preceded by assignments to that parameter, the parameter can be removed and its usages replaced with local variables. It makes no sense to have such a parameter, as values that are passed to it are overwritten. Usually, the problem appears as a result of refactoring. Example: 'void test(int p) {\n p = 1;\n System.out.print(p);\n }' After the quick-fix is applied: 'void test() {\n int p = 1;\n System.out.print(p);\n }'", + "markdown": "Reports redundant method parameters that can be replaced with local variables.\n\nIf all local usages of a parameter are preceded by assignments to that parameter, the\nparameter can be removed and its usages replaced with local variables.\nIt makes no sense to have such a parameter, as values that are passed to it are overwritten.\nUsually, the problem appears as a result of refactoring.\n\nExample:\n\n\n void test(int p) {\n p = 1;\n System.out.print(p);\n }\n\nAfter the quick-fix is applied:\n\n\n void test() {\n int p = 1;\n System.out.print(p);\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CallToSimpleGetterInClass", + "shortDescription": { + "text": "Call to simple getter from within class" + }, + "fullDescription": { + "text": "Reports calls to a simple property getter from within the property's class. A simple property getter is defined as one which simply returns the value of a field, and does no other calculations. Such simple getter calls can be safely inlined using the quick-fix. Some coding standards also suggest against the use of simple getters for code clarity reasons. Example: 'public class Salient {\n private String name;\n\n public String getName() {\n return name;\n }\n\n @Override\n public String toString() {\n return getName();\n }\n }' After the quick-fix is applied: 'public class Salient {\n private String name;\n\n public String getName() {\n return name;\n }\n\n @Override\n public String toString() {\n return name;\n }\n }' Use the following options to configure the inspection: Whether to only report getter calls on 'this', not on objects of the same type passed in as a parameter. Whether to ignore non-'private' getters.", + "markdown": "Reports calls to a simple property getter from within the property's class.\n\n\nA simple property getter is defined as one which simply returns the value of a field,\nand does no other calculations. Such simple getter calls can be safely inlined using the quick-fix.\nSome coding standards also suggest against the use of simple getters for code clarity reasons.\n\n**Example:**\n\n\n public class Salient {\n private String name;\n\n public String getName() {\n return name;\n }\n\n @Override\n public String toString() {\n return getName();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class Salient {\n private String name;\n\n public String getName() {\n return name;\n }\n\n @Override\n public String toString() {\n return name;\n }\n }\n\nUse the following options to configure the inspection:\n\n* Whether to only report getter calls on `this`, not on objects of the same type passed in as a parameter.\n* Whether to ignore non-`private` getters." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SwitchStatementDensity", + "shortDescription": { + "text": "'switch' statement with too low of a branch density" + }, + "fullDescription": { + "text": "Reports 'switch' statements or expressions with a too low ratio of switch labels to executable statements. Such 'switch' statements may be confusing and should probably be refactored. Example: 'switch (i) { // one case and 5 executable statements -> 20% density\n case 1:\n System.out.println(\"1\");\n System.out.println(\"2\");\n System.out.println(\"3\");\n System.out.println(\"4\");\n System.out.println(\"5\");\n break;\n }' Use the Minimum density of branches field to specify the allowed ratio of the switch labels to executable statements.", + "markdown": "Reports `switch` statements or expressions with a too low ratio of switch labels to executable statements.\n\nSuch `switch` statements\nmay be confusing and should probably be refactored.\n\nExample:\n\n\n switch (i) { // one case and 5 executable statements -> 20% density\n case 1:\n System.out.println(\"1\");\n System.out.println(\"2\");\n System.out.println(\"3\");\n System.out.println(\"4\");\n System.out.println(\"5\");\n break;\n }\n\n\nUse the **Minimum density of branches** field to specify the allowed ratio of the switch labels to executable statements." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonSerializableFieldInSerializableClass", + "shortDescription": { + "text": "Non-serializable field in a 'Serializable' class" + }, + "fullDescription": { + "text": "Reports non-serializable fields in classes that implement 'java.io.Serializable'. Such fields will result in runtime exceptions if the object is serialized. Fields declared 'transient' or 'static' are not reported, nor are fields of classes that have a 'writeObject' method defined. This inspection assumes fields of the types 'java.util.Collection' and 'java.util.Map' to be 'Serializable', unless the types they are declared in are non-'Serializable'. Example: 'class NonSerializableClass {}\n\n public class SerializableClass implements Serializable {\n NonSerializableClass clazz; // warning: Non-serializable field 'clazz' in a Serializable class\n static NonSerializableClass staticClazz; // no warnings\n }'\n Use the following options to configure the inspection: List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit 'Serializable' from a superclass but are not intended for serialization. List annotations that will make the inspection ignore the annotated fields. Whether to ignore fields initialized with an anonymous class.", + "markdown": "Reports non-serializable fields in classes that implement `java.io.Serializable`. Such fields will result in runtime exceptions if the object is serialized.\n\n\nFields declared\n`transient` or `static`\nare not reported, nor are fields of classes that have a `writeObject` method defined.\n\n\nThis inspection assumes fields of the types\n`java.util.Collection` and\n`java.util.Map` to be\n`Serializable`, unless the types\nthey are declared in are non-`Serializable`.\n\n**Example:**\n\n\n class NonSerializableClass {}\n\n public class SerializableClass implements Serializable {\n NonSerializableClass clazz; // warning: Non-serializable field 'clazz' in a Serializable class\n static NonSerializableClass staticClazz; // no warnings\n }\n \n\nUse the following options to configure the inspection:\n\n* List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit `Serializable` from a superclass but are not intended for serialization.\n* List annotations that will make the inspection ignore the annotated fields.\n* Whether to ignore fields initialized with an anonymous class." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 18, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MismatchedJavadocCode", + "shortDescription": { + "text": "Mismatch between Javadoc and code" + }, + "fullDescription": { + "text": "Reports parts of method specification written in English that contradict with the method declaration. This includes: Method specified to return 'true' or 'false' but its return type is not boolean. Method specified to return 'null' but it's annotated as '@NotNull' or its return type is primitive. Method specified to return list but its return type is set or array. And so on. Example: '/**\n * @return true if user is found, false otherwise\n */\n User findUser(String name);' Note that false-positives are possible, as this inspection tries to interpret a human language. However, if the inspection reports incorrectly, it's still possible that the description is confusing and should be rewritten. New in 2022.3", + "markdown": "Reports parts of method specification written in English that contradict with the method declaration. This includes:\n\n* Method specified to return `true` or `false` but its return type is not boolean.\n* Method specified to return `null` but it's annotated as `@NotNull` or its return type is primitive.\n* Method specified to return list but its return type is set or array.\n* And so on.\n\n**Example:**\n\n\n /**\n * @return true if user is found, false otherwise\n */\n User findUser(String name);\n\n\nNote that false-positives are possible, as this inspection tries to interpret a human language. However, if the inspection reports\nincorrectly, it's still possible that the description is confusing and should be rewritten.\n\n\nNew in 2022.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 45, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EnhancedSwitchMigration", + "shortDescription": { + "text": "Statement can be replaced with enhanced 'switch'" + }, + "fullDescription": { + "text": "Reports 'switch' statements that can be automatically replaced with enhanced 'switch' statements or expressions. Example: 'double getPrice(String fruit) {\n // Switch statement can be replaced with enhanced 'switch'\n switch (fruit) {\n case \"Apple\":\n return 1.0;\n case \"Orange\":\n return 1.5;\n case \"Mango\":\n return 2.0;\n default:\n throw new IllegalArgumentException();\n }\n }' After the quick-fix is applied: 'double getPrice(String fruit) {\n return switch (fruit) {\n case \"Apple\" -> 1.0;\n case \"Orange\" -> 1.5;\n case \"Mango\" -> 2.0;\n default -> throw new IllegalArgumentException();\n };\n }' This inspection only reports if the language level of the project or module is 14 or higher New in 2019.1", + "markdown": "Reports `switch` statements that can be automatically replaced with enhanced `switch` statements or expressions.\n\n**Example:**\n\n\n double getPrice(String fruit) {\n // Switch statement can be replaced with enhanced 'switch'\n switch (fruit) {\n case \"Apple\":\n return 1.0;\n case \"Orange\":\n return 1.5;\n case \"Mango\":\n return 2.0;\n default:\n throw new IllegalArgumentException();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n double getPrice(String fruit) {\n return switch (fruit) {\n case \"Apple\" -> 1.0;\n case \"Orange\" -> 1.5;\n case \"Mango\" -> 2.0;\n default -> throw new IllegalArgumentException();\n };\n }\n \nThis inspection only reports if the language level of the project or module is 14 or higher\n\nNew in 2019.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 14", + "index": 100, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifiableAnnotation", + "shortDescription": { + "text": "Simplifiable annotation" + }, + "fullDescription": { + "text": "Reports annotations that can be simplified to their 'single element' or 'marker' shorthand form. Annotations that contain whitespace between the @-sign and the name of the annotation are also reported. Example: '@interface Foo { String[] value(); }\n\n @ Foo({\"foo\"})\n public String name;' After the quick-fix is applied: '@interface Foo { String[] value(); }\n\n @Foo(\"foo\")\n public String name;'", + "markdown": "Reports annotations that can be simplified to their 'single element' or 'marker' shorthand form.\n\nAnnotations that contain whitespace between the @-sign and the name\nof the annotation are also reported.\n\n**Example:**\n\n\n @interface Foo { String[] value(); }\n\n @ Foo({\"foo\"})\n public String name;\n\nAfter the quick-fix is applied:\n\n\n @interface Foo { String[] value(); }\n\n @Foo(\"foo\")\n public String name;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DoubleLiteralMayBeFloatLiteral", + "shortDescription": { + "text": "Cast to 'float' can be 'float' literal" + }, + "fullDescription": { + "text": "Reports 'double' literal expressions that are immediately cast to 'float'. Such literal expressions can be replaced with equivalent 'float' literals. Example: 'float f = (float)1.1;' After the quick-fix is applied: 'float f = 1.1f;'", + "markdown": "Reports `double` literal expressions that are immediately cast to `float`.\n\nSuch literal expressions can be replaced with equivalent `float` literals.\n\n**Example:**\n\n float f = (float)1.1;\n\nAfter the quick-fix is applied:\n\n float f = 1.1f;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues/Cast", + "index": 102, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Guava", + "shortDescription": { + "text": "Guava's functional primitives can be replaced with Java" + }, + "fullDescription": { + "text": "Reports usages of Guava's functional primitives that can be migrated to standard Java API calls. For example, the inspection reports usages of classes and interfaces like 'FluentIterable', 'Optional', 'Function', 'Predicate', or 'Supplier'. Example: 'ImmutableList results = FluentIterable.from(List.of(1, 2, 3)).transform(Object::toString).toList();' After the quick-fix is applied: 'List results = List.of(1, 2, 3).stream().map(Object::toString).collect(Collectors.toList());' The quick-fix may change the semantics. Some lazy-evaluated Guava's iterables can be transformed to eager-evaluated. This inspection only reports if the language level of the project or module is 8 or higher.", + "markdown": "Reports usages of Guava's functional primitives that can be migrated to standard Java API calls.\n\nFor example, the inspection reports usages of classes and interfaces like `FluentIterable`, `Optional`, `Function`,\n`Predicate`, or `Supplier`.\n\nExample:\n\n\n ImmutableList results = FluentIterable.from(List.of(1, 2, 3)).transform(Object::toString).toList();\n\nAfter the quick-fix is applied:\n\n\n List results = List.of(1, 2, 3).stream().map(Object::toString).collect(Collectors.toList());\n\n\nThe quick-fix may change the semantics. Some lazy-evaluated Guava's iterables can be transformed to eager-evaluated.\n\nThis inspection only reports if the language level of the project or module is 8 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 59, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NoopMethodInAbstractClass", + "shortDescription": { + "text": "No-op method in 'abstract' class" + }, + "fullDescription": { + "text": "Reports no-op (for \"no operation\") methods in 'abstract' classes. It is usually a better design to make such methods 'abstract' themselves so that classes inheriting these methods provide their implementations. Example: 'abstract class Test {\n protected void doTest() {\n }\n }'", + "markdown": "Reports no-op (for \"no operation\") methods in `abstract` classes.\n\nIt is usually a better\ndesign to make such methods `abstract` themselves so that classes inheriting these\nmethods provide their implementations.\n\n**Example:**\n\n\n abstract class Test {\n protected void doTest() {\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverridableMethodCallDuringObjectConstruction", + "shortDescription": { + "text": "Overridable method called during object construction" + }, + "fullDescription": { + "text": "Reports calls to overridable methods of the current class during object construction. A method is called during object construction if it is inside a: Constructor Non-static instance initializer Non-static field initializer 'clone()' method 'readObject()' method 'readObjectNoData()' method Methods are overridable if they are not declared as 'final', 'static', or 'private'. Package-local methods are considered safe, even though they are overridable. Such calls may result in subtle bugs, as object initialization may happen before the method call. Example: 'class Parent {\n void someMethod() { }\n }\n\n class Child extends Parent {\n Child() {\n someMethod();\n }\n }' This inspection shares the functionality with the following inspections: Abstract method called during object construction Overridden method called during object construction Only one inspection should be enabled at once to prevent warning duplication.", + "markdown": "Reports calls to overridable methods of the current class during object construction.\n\nA method is called during object construction if it is inside a:\n\n* Constructor\n* Non-static instance initializer\n* Non-static field initializer\n* `clone()` method\n* `readObject()` method\n* `readObjectNoData()` method\n* Methods are overridable if they are not declared as `final`, `static`, or `private`. Package-local methods are considered safe, even though they are overridable. Such calls may result in subtle bugs, as object initialization may happen before the method call.\n* **Example:**\n\n\n class Parent {\n void someMethod() { }\n }\n\n class Child extends Parent {\n Child() {\n someMethod();\n }\n }\n\n* This inspection shares the functionality with the following inspections:\n * Abstract method called during object construction\n * Overridden method called during object construction\n* Only one inspection should be enabled at once to prevent warning duplication." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Initialization", + "index": 28, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverloadedMethodsWithSameNumberOfParameters", + "shortDescription": { + "text": "Overloaded methods with same number of parameters" + }, + "fullDescription": { + "text": "Reports methods that are declared in the same class, have the same name, and the same number of parameters. Such overloads cam be very confusing because it can be unclear which overload gets called. Example: 'class Main {\n public static void execute(Runnable r) {}\n public static void execute(RunnableFuture c) {}\n }' Use the option to ignore overloaded methods whose parameter types are definitely incompatible.", + "markdown": "Reports methods that are declared in the same class, have the same name, and the same number of parameters. Such overloads cam be very confusing because it can be unclear which overload gets called.\n\n**Example:**\n\n\n class Main {\n public static void execute(Runnable r) {}\n public static void execute(RunnableFuture c) {}\n }\n\n\nUse the option to ignore overloaded methods whose parameter types are definitely incompatible." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Method", + "index": 88, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverlyLongLambda", + "shortDescription": { + "text": "Overly long lambda expression" + }, + "fullDescription": { + "text": "Reports lambda expressions whose number of statements exceeds the specified maximum. Lambda expressions that are too long may be confusing, and it is often better to extract the statements into a separate method. The following statements are not counted: empty statements (semicolons) block statements 'for' loop initialization statements, that is, 'int i = ...' within a 'for(int i = ...;...)' statement 'for' loop update statements, that is, 'i += 2' within a 'for(int i = ...;...; i += 2)' statement Use the Non-comment source statements limit field to specify the maximum allowed number of statements in a lambda expression.", + "markdown": "Reports lambda expressions whose number of statements exceeds the specified maximum.\n\nLambda expressions that are too long may be confusing, and it is often better to extract the statements into a separate method.\n\n\nThe following statements are not counted:\n\n* empty statements (semicolons)\n* block statements\n* `for` loop initialization statements, that is, `int i = ...` within a `for(int i = ...;...)` statement\n* `for` loop update statements, that is, `i += 2` within a `for(int i = ...;...; i += 2)` statement\n\nUse the **Non-comment source statements limit** field to specify the maximum allowed number of statements in a lambda expression." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Method metrics", + "index": 95, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ImplicitCallToSuper", + "shortDescription": { + "text": "Implicit call to 'super()'" + }, + "fullDescription": { + "text": "Reports constructors that do not begin with a call to \"super\" constructor or another constructor of the same class. Such constructors can be thought of as implicitly beginning with a call to 'super()'. Some coding standards prefer that such calls to 'super()' be made explicitly. Example: 'class Foo {\n Foo() {}\n }' After the quick-fix is applied: 'class Foo {\n Foo() {\n super();\n }\n }' Use the inspection settings to ignore classes extending directly from 'Object'. For instance: 'class Foo {\n Foo() {} // Not reported\n }\n\n class Bar extends Foo {\n Bar() {} // Implicit call to 'super()'\n }'", + "markdown": "Reports constructors that do not begin with a call to \"super\" constructor or another constructor of the same class.\n\nSuch constructors can be thought of as implicitly beginning with a\ncall to `super()`. Some coding standards prefer that such calls to\n`super()` be made explicitly.\n\n**Example:**\n\n\n class Foo {\n Foo() {}\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n Foo() {\n super();\n }\n }\n\n\nUse the inspection settings to ignore classes extending directly from `Object`.\nFor instance:\n\n\n class Foo {\n Foo() {} // Not reported\n }\n\n class Bar extends Foo {\n Bar() {} // Implicit call to 'super()'\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ParametersPerMethod", + "shortDescription": { + "text": "Method with too many parameters" + }, + "fullDescription": { + "text": "Reports methods whose number of parameters exceeds the specified maximum. Methods with too many parameters can be a good sign that a refactoring is necessary. Methods that have super methods are not reported. Use the Parameter limit field to specify the maximum allowed number of parameters for a method.", + "markdown": "Reports methods whose number of parameters exceeds the specified maximum. Methods with too many parameters can be a good sign that a refactoring is necessary.\n\nMethods that have super methods are not reported.\n\nUse the **Parameter limit** field to specify the maximum allowed number of parameters for a method." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Method metrics", + "index": 95, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MissingDeprecatedAnnotation", + "shortDescription": { + "text": "Missing '@Deprecated' annotation" + }, + "fullDescription": { + "text": "Reports module declarations, classes, fields, or methods that have the '@deprecated' Javadoc tag but do not have the '@java.lang.Deprecated' annotation. Example: '/**\n * @deprecated use {@code example()} instead\n */\n void sample(){ }' After the quick-fix is applied: '/**\n * @deprecated use {@code example()} instead\n */\n @Deprecated\n void sample(){ }' This inspection reports only if the language level of the project or module is 5 or higher. Use the checkbox below to be warned on the symbols annotated with '@Deprecated' without an explanation in the '@deprecated' Javadoc tag.", + "markdown": "Reports module declarations, classes, fields, or methods that have the `@deprecated` Javadoc tag but do not have the `@java.lang.Deprecated` annotation.\n\n**Example:**\n\n\n /**\n * @deprecated use {@code example()} instead\n */\n void sample(){ }\n\nAfter the quick-fix is applied:\n\n\n /**\n * @deprecated use {@code example()} instead\n */\n @Deprecated\n void sample(){ }\n\nThis inspection reports only if the language level of the project or module is 5 or higher.\n\n\nUse the checkbox below to be warned on the symbols annotated with `@Deprecated` without\nan explanation in the `@deprecated` Javadoc tag." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 45, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CachedNumberConstructorCall", + "shortDescription": { + "text": "Number constructor call with primitive argument" + }, + "fullDescription": { + "text": "Reports instantiations of new 'Long', 'Integer', 'Short', or 'Byte' objects that have a primitive 'long', 'integer', 'short', or 'byte' argument. It is recommended that you use the static method 'valueOf()' introduced in Java 5. By default, this method caches objects for values between -128 and 127 inclusive. Example: 'Integer i = new Integer(1);\n Long l = new Long(1L);' After the quick-fix is applied, the code changes to: 'Integer i = Integer.valueOf(1);\n Long l = Long.valueOf(1L);' This inspection only reports if the language level of the project or module is 5 or higher Use the Ignore new number expressions with a String argument option to ignore calls to number constructors with a 'String' argument. Use the Report only when constructor is @Deprecated option to only report calls to deprecated constructors. 'Long', 'Integer', 'Short' and 'Byte' constructors are deprecated since JDK 9.", + "markdown": "Reports instantiations of new `Long`, `Integer`, `Short`, or `Byte` objects that have a primitive `long`, `integer`, `short`, or `byte` argument.\n\nIt is recommended that you use the static method `valueOf()`\nintroduced in Java 5. By default, this method caches objects for values between -128 and\n127 inclusive.\n\n**Example:**\n\n\n Integer i = new Integer(1);\n Long l = new Long(1L);\n\nAfter the quick-fix is applied, the code changes to:\n\n\n Integer i = Integer.valueOf(1);\n Long l = Long.valueOf(1L);\n\nThis inspection only reports if the language level of the project or module is 5 or higher\n\n\nUse the **Ignore new number expressions with a String argument** option to ignore calls to number constructors with a `String` argument.\n\n\nUse the **Report only when constructor is @Deprecated** option to only report calls to deprecated constructors.\n`Long`, `Integer`, `Short` and `Byte` constructors are deprecated since JDK 9." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MustAlreadyBeRemovedApi", + "shortDescription": { + "text": "API must already be removed" + }, + "fullDescription": { + "text": "Reports declarations marked with '@ApiStatus.ScheduledForRemoval' that should have been removed in the current version of the declaring library. It compares the specified scheduled removal version with the version that you can set below. Specify the version as a string separated with dots and optionally postfixed with 'alpha', 'beta', 'snapshot', or 'eap'. Examples of valid versions: '1.0', '2.3.1', '2018.1', '7.5-snapshot', '3.0-eap'. Version comparison is intuitive: '1.0 < 2.0', '1.0-eap < 1.0', '2.3-snapshot < 2.3' and so on. For detailed comparison logic, refer to the implementation of VersionComparatorUtil.", + "markdown": "Reports declarations marked with `@ApiStatus.ScheduledForRemoval` that should have been removed in the current version of the declaring library.\n\nIt compares the specified scheduled removal version with the version that you can set below.\n\n\nSpecify the version as a string separated with dots and optionally postfixed with\n`alpha`, `beta`, `snapshot`, or `eap`.\n\nExamples of valid versions: `1.0`, `2.3.1`, `2018.1`, `7.5-snapshot`, `3.0-eap`.\n\n\nVersion comparison is intuitive: `1.0 < 2.0`, `1.0-eap < 1.0`, `2.3-snapshot < 2.3` and so on.\nFor detailed comparison logic, refer to the implementation of [VersionComparatorUtil](https://github.com/JetBrains/intellij-community/blob/master/platform/util-rt/src/com/intellij/util/text/VersionComparatorUtil.java)." + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 4, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CloneDeclaresCloneNotSupported", + "shortDescription": { + "text": "'clone()' does not declare 'CloneNotSupportedException'" + }, + "fullDescription": { + "text": "Reports 'clone()' methods that do not declare 'throws CloneNotSupportedException'. If 'throws CloneNotSupportedException' is not declared, the method's subclasses will not be able to prohibit cloning in the standard way. This inspection does not report 'clone()' methods declared 'final' and 'clone()' methods on 'final' classes. Configure the inspection: Use the Only warn on 'protected' clone methods option to indicate that this inspection should only warn on 'protected clone()' methods. The Effective Java book (second and third edition) recommends omitting the 'CloneNotSupportedException' declaration on 'public' methods, because the methods that do not throw checked exceptions are easier to use. Example: 'public class Example implements Cloneable {\n // method doesn't declare 'throws CloneNotSupportedException'\n protected Object clone() {\n try {\n return super.clone();\n } catch (CloneNotSupportedException e) {\n return null;\n }\n }\n }'", + "markdown": "Reports `clone()` methods that do not declare `throws CloneNotSupportedException`.\n\nIf `throws CloneNotSupportedException` is not declared, the method's subclasses will not be able to prohibit cloning\nin the standard way. This inspection does not report `clone()` methods declared `final`\nand `clone()` methods on `final` classes.\n\nConfigure the inspection:\n\nUse the **Only warn on 'protected' clone methods** option to indicate that this inspection should only warn on `protected clone()` methods.\nThe *Effective Java* book (second and third edition) recommends omitting the `CloneNotSupportedException`\ndeclaration on `public` methods, because the methods that do not throw checked exceptions are easier to use.\n\nExample:\n\n\n public class Example implements Cloneable {\n // method doesn't declare 'throws CloneNotSupportedException'\n protected Object clone() {\n try {\n return super.clone();\n } catch (CloneNotSupportedException e) {\n return null;\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Cloning issues", + "index": 80, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BooleanExpressionMayBeConditional", + "shortDescription": { + "text": "Boolean expression could be replaced with conditional expression" + }, + "fullDescription": { + "text": "Reports any 'boolean' expressions which can be formulated in a more compact and, arguably, clear way than by using a conditional expression. Use the quick-fix to replace the 'boolean' expression by a conditional expression. Example: 'a && b || !a && c;' After the quick-fix is applied: 'a ? b : c;'", + "markdown": "Reports any `boolean` expressions which can be formulated in a more compact and, arguably, clear way than by using a conditional expression.\n\nUse the quick-fix to replace the `boolean` expression by a conditional expression.\n\n**Example:**\n\n\n a && b || !a && c;\n\nAfter the quick-fix is applied:\n\n\n a ? b : c;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FieldHidesSuperclassField", + "shortDescription": { + "text": "Subclass field hides superclass field" + }, + "fullDescription": { + "text": "Reports fields in a derived class that are named identically a field of a superclass. Java fields cannot be overridden in derived classes, so the field in the derived class will hide the field from the superclass. As a result of such naming, you may accidentally use the field of the derived class where the identically named field of a base class is intended. A quick-fix is suggested to rename the field in the derived class. Example: 'class Parent {\n Parent parent;\n}\nclass Child extends Parent {\n Child parent;\n}' You can configure the following options for this inspection: Ignore non-accessible fields - indicates whether this inspection should report all name clashes, or only clashes with fields which are visible from the subclass. Ignore static fields hiding static fields - ignore 'static' fields which hide 'static' fields in base classes.", + "markdown": "Reports fields in a derived class that are named identically a field of a superclass. Java fields cannot be overridden in derived classes, so the field in the derived class will hide the field from the superclass.\n\n\nAs a result of such naming, you may accidentally use the field of the derived class\nwhere the identically named field of a base class is intended.\n\nA quick-fix is suggested to rename the field in the derived class.\n\n**Example:**\n\n class Parent {\n Parent parent;\n }\n class Child extends Parent {\n Child parent;\n }\n\n\nYou can configure the following options for this inspection:\n\n1. **Ignore non-accessible fields** - indicates whether this inspection should report all name clashes, or only clashes with fields which are visible from the subclass.\n2. **Ignore static fields hiding static fields** - ignore `static` fields which hide `static` fields in base classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 54, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimpleDateFormatWithoutLocale", + "shortDescription": { + "text": "'SimpleDateFormat' without locale" + }, + "fullDescription": { + "text": "Reports instantiations of 'java.util.SimpleDateFormat' or 'java.time.format.DateTimeFormatter' that do not specify a 'java.util.Locale'. These calls will use the platform default locale, which depends on the OS settings. This can lead to surprising behaviour when the code is run on a different platform or the OS settings are changed. 'Example:' 'new SimpleDateFormat(\"yyyy\");\n DateTimeFormatter.ofPattern(\"d/M/y\");'", + "markdown": "Reports instantiations of `java.util.SimpleDateFormat` or `java.time.format.DateTimeFormatter` that do not specify a `java.util.Locale`. These calls will use the platform default locale, which depends on the OS settings. This can lead to surprising behaviour when the code is run on a different platform or the OS settings are changed.\n\n`Example:`\n\n\n new SimpleDateFormat(\"yyyy\");\n DateTimeFormatter.ofPattern(\"d/M/y\");\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 9, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryExplicitNumericCast", + "shortDescription": { + "text": "Unnecessary explicit numeric cast" + }, + "fullDescription": { + "text": "Reports primitive numeric casts that would be inserted implicitly by the compiler. Also, reports any primitive numeric casts that the compiler will remove. Example: 'int x = (short)5; // The cast will be removed by the javac tool' After the quick-fix is applied: 'int x = 5;'", + "markdown": "Reports primitive numeric casts that would be inserted implicitly by the compiler. Also, reports any primitive numeric casts that the compiler will remove.\n\n**Example:**\n\n int x = (short)5; // The cast will be removed by the javac tool\n\nAfter the quick-fix is applied:\n`int x = 5;`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues/Cast", + "index": 102, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AnnotationClass", + "shortDescription": { + "text": "Annotation interface" + }, + "fullDescription": { + "text": "Reports annotation interfaces. Such interfaces are not supported under Java 1.4 and earlier.", + "markdown": "Reports annotation interfaces. Such interfaces are not supported under Java 1.4 and earlier." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level issues", + "index": 60, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TransientFieldNotInitialized", + "shortDescription": { + "text": "Transient field is not initialized on deserialization" + }, + "fullDescription": { + "text": "Reports 'transient' fields that are initialized during normal object construction, but whose class does not have a 'readObject' method. As 'transient' fields are not serialized they need to be initialized separately in a 'readObject()' method during deserialization. Any 'transient' fields that are not initialized during normal object construction are considered to use the default initialization and are not reported by this inspection. Example: 'class Person implements Serializable {\n transient String name = \"Default\"; //warning, can actually be a null after deserialization\n transient String surname; //null is considered the default value and not reported\n }'", + "markdown": "Reports `transient` fields that are initialized during normal object construction, but whose class does not have a `readObject` method.\n\n\nAs `transient` fields are not serialized they need\nto be initialized separately in a `readObject()` method\nduring deserialization.\n\n\nAny `transient` fields that\nare not initialized during normal object construction are considered to use the default\ninitialization and are not reported by this inspection.\n\n**Example:**\n\n\n class Person implements Serializable {\n transient String name = \"Default\"; //warning, can actually be a null after deserialization\n transient String surname; //null is considered the default value and not reported\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 18, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PropertyValueSetToItself", + "shortDescription": { + "text": "Property value set to itself" + }, + "fullDescription": { + "text": "Reports calls of setter methods with the same object getter as a value. Usually, this code does nothing and probably was not intended. For example: 'bean.setPayerId(bean.getPayerId());'", + "markdown": "Reports calls of setter methods with the same object getter as a value. Usually, this code does nothing and probably was not intended.\n\n**For example:**\n\n bean.setPayerId(bean.getPayerId());\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/JavaBeans issues", + "index": 35, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Finalize", + "shortDescription": { + "text": "'finalize()' should not be overridden" + }, + "fullDescription": { + "text": "Reports overriding the 'Object.finalize()' method. According to the 'Object.finalize()' documentation: The finalization mechanism is inherently problematic. Finalization can lead to performance issues, deadlocks, and hangs. Errors in finalizers can lead to resource leaks; there is no way to cancel finalization if it is no longer necessary; and no ordering is specified among calls to 'finalize' methods of different objects. Furthermore, there are no guarantees regarding the timing of finalization. The 'finalize' method might be called on a finalizable object only after an indefinite delay, if at all. Configure the inspection: Use the Ignore for trivial 'finalize()' implementations option to ignore 'finalize()' implementations with an empty method body or a body containing only 'if' statements that have a condition which evaluates to 'false' and is a compile-time constant. For performance reasons it can be beneficial to override a non-trivial 'finalize()' with an empty implementation in a subclass. An empty final 'finalize()' implementation can also be used to prevent subclasses from overriding.", + "markdown": "Reports overriding the `Object.finalize()` method.\n\nAccording to the `Object.finalize()` documentation:\n>\n> The finalization mechanism is inherently problematic. Finalization can lead\n> to performance issues, deadlocks, and hangs. Errors in finalizers can lead\n> to resource leaks; there is no way to cancel finalization if it is no longer\n> necessary; and no ordering is specified among calls to `finalize`\n> methods of different objects. Furthermore, there are no guarantees regarding\n> the timing of finalization. The `finalize` method might be called\n> on a finalizable object only after an indefinite delay, if at all.\n\nConfigure the inspection:\n\n* Use the **Ignore for trivial 'finalize()' implementations** option to ignore `finalize()` implementations with an empty method body or a body containing only `if` statements that have a condition which evaluates to `false` and is a compile-time constant. For performance reasons it can be beneficial to override a non-trivial `finalize()` with an empty implementation in a subclass. An empty final `finalize()` implementation can also be used to prevent subclasses from overriding." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Finalization", + "index": 62, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JUnit3StyleTestMethodInJUnit4Class", + "shortDescription": { + "text": "Old style JUnit test method in JUnit 4 class" + }, + "fullDescription": { + "text": "Reports JUnit 3 style test methods that are located inside a class that does not extend the JUnit 3 'TestCase' class and contains JUnit 4 or JUnit 5 '@Test' annotated methods. Such test methods cannot be run.", + "markdown": "Reports JUnit 3 style test methods that are located inside a class that does not extend the JUnit 3 `TestCase` class and contains JUnit 4 or JUnit 5 `@Test` annotated methods. Such test methods cannot be run." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/JUnit", + "index": 74, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PointlessArithmeticExpression", + "shortDescription": { + "text": "Pointless arithmetic expression" + }, + "fullDescription": { + "text": "Reports pointless arithmetic expressions. Such expressions include adding or subtracting zero, multiplying by zero or one, and division by one. Such expressions may be the result of automated refactorings and they are unlikely to be what the developer intended to do. The quick-fix simplifies such expressions. Example: 'void f(int a) {\n int x = a - a;\n int y = a + 0;\n int res = x / x;\n }' After the quick-fix is applied: 'void f(int a) {\n int x = 0;\n int y = a;\n int res = 1;\n }' Note that in rare cases, the suggested replacement might not be completely equivalent to the original code for all possible inputs. For example, the inspection suggests replacing 'x / x' with '1'. However, if 'x' is zero, the original code throws 'ArithmeticException' or results in 'NaN'. Also, if 'x' is 'NaN', then the result is also 'NaN'. It's very unlikely that such behavior is intended.", + "markdown": "Reports pointless arithmetic expressions. Such expressions include adding or subtracting zero, multiplying by zero or one, and division by one.\n\nSuch expressions may be the result of automated refactorings and they are unlikely to be what the developer intended to do.\n\nThe quick-fix simplifies such expressions.\n\n**Example:**\n\n\n void f(int a) {\n int x = a - a;\n int y = a + 0;\n int res = x / x;\n }\n\nAfter the quick-fix is applied:\n\n\n void f(int a) {\n int x = 0;\n int y = a;\n int res = 1;\n }\n\n\nNote that in rare cases, the suggested replacement might not be completely equivalent to the original code\nfor all possible inputs. For example, the inspection suggests replacing `x / x` with `1`.\nHowever, if `x` is zero, the original code throws `ArithmeticException` or results in `NaN`.\nAlso, if `x` is `NaN`, then the result is also `NaN`. It's very unlikely that such behavior is intended." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverlyLargePrimitiveArrayInitializer", + "shortDescription": { + "text": "Overly large initializer for array of primitive type" + }, + "fullDescription": { + "text": "Reports array initializer expressions for primitive arrays that contain too many elements. Such initializers may result in overly large class files because code must be generated to initialize each array element. In memory or bandwidth constrained environments, it may be more efficient to load large arrays of primitives from resource files. This inspection is intended for Java ME and other highly resource constrained environments. Applying the results of this inspection without consideration might have negative effects on code clarity and design. Use the option to specify the maximum number of elements to allow in primitive array initializers.", + "markdown": "Reports array initializer expressions for primitive arrays that contain too many elements. Such initializers may result in overly large class files because code must be generated to initialize each array element. In memory or bandwidth constrained environments, it may be more efficient to load large arrays of primitives from resource files.\n\n\nThis inspection is intended for Java ME and other highly resource constrained environments.\nApplying the results of this inspection without consideration might have negative effects on code clarity and design.\n\n\nUse the option to specify the maximum number of elements to allow in primitive array initializers." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance/Embedded", + "index": 21, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassInitializer", + "shortDescription": { + "text": "Non-'static' initializer" + }, + "fullDescription": { + "text": "Reports non-'static' initializers in classes. Some coding standards prohibit instance initializers and recommend using constructors or field initializers for initialization. Also, deleting the 'static' keyword may accidentally create non-'static' initializers and result in obscure bugs. This inspection doesn't report instance initializers in anonymous classes. Use the Only warn when the class has one or more constructors option to ignore instance initializers in classes that don't have any constructors.", + "markdown": "Reports non-`static` initializers in classes.\n\nSome coding standards prohibit instance initializers and recommend using constructors or field initializers for initialization.\nAlso, deleting the `static` keyword may accidentally create non-`static` initializers and result in obscure bugs.\n\nThis inspection doesn't report instance initializers in anonymous classes.\n\n\nUse the **Only warn when the class has one or more constructors** option to ignore instance initializers in classes that don't have any constructors." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObjectNotify", + "shortDescription": { + "text": "Call to 'notify()' instead of 'notifyAll()'" + }, + "fullDescription": { + "text": "Reports calls to 'Object.notify()'. While occasionally useful, in almost all cases 'Object.notifyAll()' is a better choice because calling 'Object.notify()' may lead to deadlocks. See Doug Lea's Concurrent Programming in Java for a discussion.", + "markdown": "Reports calls to `Object.notify()`. While occasionally useful, in almost all cases `Object.notifyAll()` is a better choice because calling `Object.notify()` may lead to deadlocks. See Doug Lea's *Concurrent Programming in Java* for a discussion." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JUnit4AnnotatedMethodInJUnit3TestCase", + "shortDescription": { + "text": "JUnit 4 test method in class extending JUnit 3 TestCase" + }, + "fullDescription": { + "text": "Reports JUnit 4 '@Test' annotated methods inside the inheritor of 'junit.framework.TestCase'. Mixing API of JUnit can lead to problems running the tests. Example: 'public class MyTest extends TestCase {\n @Test //name doesn't start from \"test\", thus would be ignored\n public void wouldBeIgnored() {}\n \n @Test //name starts from \"test\"\n @Ignore //thus would be executed despite @Ignore annotation\n public void testWouldBeExecuted() {}\n }' Provided fixes: Remove the '@Ignore' annotation and rename the test method, so the name doesn't start with \"test\". Convert a JUnit 3 test class to JUnit 4.", + "markdown": "Reports JUnit 4 `@Test` annotated methods inside the inheritor of `junit.framework.TestCase`. Mixing API of JUnit can lead to problems running the tests.\n\n**Example:**\n\n\n public class MyTest extends TestCase {\n @Test //name doesn't start from \"test\", thus would be ignored\n public void wouldBeIgnored() {}\n \n @Test //name starts from \"test\"\n @Ignore //thus would be executed despite @Ignore annotation\n public void testWouldBeExecuted() {}\n }\n\n**Provided fixes:**\n\n* Remove the `@Ignore` annotation and rename the test method, so the name doesn't start with \"test\".\n* Convert a JUnit 3 test class to JUnit 4." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/JUnit", + "index": 74, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ContinueOrBreakFromFinallyBlock", + "shortDescription": { + "text": "'continue' or 'break' inside 'finally' block" + }, + "fullDescription": { + "text": "Reports 'break' or 'continue' statements inside of 'finally' blocks. While occasionally intended, such statements are very confusing, may mask thrown exceptions, and complicate debugging. Example: 'while (true) {\n try {\n throwingMethod();\n } finally {\n continue;\n }\n }'", + "markdown": "Reports `break` or `continue` statements inside of `finally` blocks.\n\nWhile occasionally intended, such statements are very confusing, may mask thrown exceptions, and complicate debugging.\n\n**Example:**\n\n\n while (true) {\n try {\n throwingMethod();\n } finally {\n continue;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LengthOneStringsInConcatenation", + "shortDescription": { + "text": "Single character string concatenation" + }, + "fullDescription": { + "text": "Reports concatenation with string literals that consist of one character. These literals may be replaced with equivalent character literals, gaining some performance enhancement. Example: 'String hello = hell + \"o\";' After the quick-fix is applied: 'String hello = hell + 'o';'", + "markdown": "Reports concatenation with string literals that consist of one character.\n\nThese literals may be replaced with equivalent character literals, gaining some performance enhancement.\n\n**Example:**\n\n\n String hello = hell + \"o\";\n\nAfter the quick-fix is applied:\n\n\n String hello = hell + 'o';\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InstanceVariableUninitializedUse", + "shortDescription": { + "text": "Instance field used before initialization" + }, + "fullDescription": { + "text": "Reports instance variables that are read before initialization. The inspection ignores equality checks with 'null'. Example: 'class Foo {\n int bar;\n\n Foo() {\n System.out.println(bar);\n }\n }' Note that this inspection uses a very conservative dataflow algorithm and may incorrectly report instance variables as uninitialized. Variables reported as initialized will always be initialized. Use the Ignore if annotated by option to specify special annotations. The inspection will ignore fields annotated with one of these annotations. Use the Ignore primitive fields option to ignore uninitialized primitive fields.", + "markdown": "Reports instance variables that are read before initialization.\n\nThe inspection ignores equality checks with `null`.\n\n**Example:**\n\n\n class Foo {\n int bar;\n\n Foo() {\n System.out.println(bar);\n }\n }\n\nNote that this inspection uses a very conservative dataflow algorithm and may incorrectly report instance variables as uninitialized. Variables\nreported as initialized will always be initialized.\n\nUse the **Ignore if annotated by** option to specify special annotations. The inspection will ignore fields\nannotated with one of these annotations.\n\nUse the **Ignore primitive fields** option to ignore uninitialized primitive fields." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Initialization", + "index": 28, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryThis", + "shortDescription": { + "text": "Unnecessary 'this' qualifier" + }, + "fullDescription": { + "text": "Reports unnecessary 'this' qualifier. Using 'this' to disambiguate a code reference is discouraged by many coding styles and may easily become unnecessary via automatic refactorings. Example: 'class Foo {\n int x;\n void foo() {\n this.x = 2;\n }\n }' After the quick-fix is applied: 'class Foo {\n int x;\n void foo() {\n x = 2;\n }\n }' Use the inspection settings to ignore assignments to fields. For instance, 'this.x = 2;' won't be reported, but 'int y = this.x;' will be.", + "markdown": "Reports unnecessary `this` qualifier.\n\n\nUsing `this` to disambiguate a code reference is discouraged by many coding styles\nand may easily become unnecessary\nvia automatic refactorings.\n\n**Example:**\n\n\n class Foo {\n int x;\n void foo() {\n this.x = 2;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n int x;\n void foo() {\n x = 2;\n }\n }\n\n\nUse the inspection settings to ignore assignments to fields.\nFor instance, `this.x = 2;` won't be reported, but `int y = this.x;` will be." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassWithTooManyTransitiveDependencies", + "shortDescription": { + "text": "Class with too many transitive dependencies" + }, + "fullDescription": { + "text": "Reports classes that are directly or indirectly dependent on too many other classes. Modifications to any dependency of such a class may require changing the class thus making it prone to instability. Only top-level classes are reported. Use the Maximum number of transitive dependencies field to specify the maximum allowed number of direct or indirect dependencies for a class. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports classes that are directly or indirectly dependent on too many other classes.\n\nModifications to any dependency of such a class may require changing the class thus making it prone to instability.\n\nOnly top-level classes are reported.\n\nUse the **Maximum number of transitive dependencies** field to specify the maximum allowed number of direct or indirect dependencies\nfor a class.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Dependency issues", + "index": 89, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LoopWithImplicitTerminationCondition", + "shortDescription": { + "text": "Loop with implicit termination condition" + }, + "fullDescription": { + "text": "Reports any 'while', 'do-while', and 'for' loops that have the 'true' constant as their only condition. At the same time, such loops can be still terminated by a containing 'if' statement which can break out of the loop. Such an 'if' statement must be the first or the only statement in a 'while' or 'for' loop and the last or the only statement in a 'do-while' loop. Removing the 'if' statement and making its condition an explicit loop condition simplifies the loop.", + "markdown": "Reports any `while`, `do-while`, and `for` loops that have the `true` constant as their only condition. At the same time, such loops can be still terminated by a containing `if` statement which can break out of the loop.\n\nSuch an `if` statement must be the first or the only statement\nin a `while` or `for`\nloop and the last or the only statement in a `do-while` loop.\n\nRemoving the `if` statement and making its condition an explicit\nloop condition simplifies the loop." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExplicitArrayFilling", + "shortDescription": { + "text": "Explicit array filling" + }, + "fullDescription": { + "text": "Reports loops that can be replaced with 'Arrays.setAll()' or 'Arrays.fill()' calls. This inspection suggests replacing loops with 'Arrays.setAll()' if the language level of the project or module is 8 or higher. Replacing loops with 'Arrays.fill()' is possible with any language level. Example: 'for (int i=0; i list, int from, int to) {\n for (int i = from; i < to; i++) {\n list.remove(from);\n }\n }' After the quick-fix is applied: 'void removeRange(List list, int from, int to) {\n if (to > from) {\n list.subList(from, to).clear();\n }\n }' The quick-fix adds a range check automatically to prevent a possible 'IndexOutOfBoundsException' when the minimal value is bigger than the maximal value. It can be removed if such a situation is impossible in your code. New in 2018.2", + "markdown": "Reports `List.remove(index)` called in a loop that can be replaced with `List.subList().clear()`.\n\nThe replacement\nis more efficient for most `List` implementations when many elements are deleted.\n\nExample:\n\n\n void removeRange(List list, int from, int to) {\n for (int i = from; i < to; i++) {\n list.remove(from);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n void removeRange(List list, int from, int to) {\n if (to > from) {\n list.subList(from, to).clear();\n }\n }\n\n\nThe quick-fix adds a range check automatically to prevent a possible `IndexOutOfBoundsException` when the minimal value is bigger\nthan the maximal value. It can be removed if such a situation is impossible in your code.\n\nNew in 2018.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReturnFromFinallyBlock", + "shortDescription": { + "text": "'return' inside 'finally' block" + }, + "fullDescription": { + "text": "Reports 'return' statements inside of 'finally' blocks. While occasionally intended, such 'return' statements may mask thrown exceptions and complicate debugging. Example: 'try {\n foo();\n } finally {\n if (bar()) return;\n }'", + "markdown": "Reports `return` statements inside of `finally` blocks.\n\nWhile occasionally intended, such `return` statements may mask thrown exceptions\nand complicate debugging.\n\n**Example:**\n\n\n try {\n foo();\n } finally {\n if (bar()) return;\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MissingOverrideAnnotation", + "shortDescription": { + "text": "Missing '@Override' annotation" + }, + "fullDescription": { + "text": "Reports methods overriding superclass methods but are not annotated with '@java.lang.Override'. Annotating methods with '@java.lang.Override' improves code readability since it shows the intent. In addition, the compiler emits an error when a signature of the overridden method doesn't match the superclass method. Example: 'class X {\n public String toString() {\n return \"hello world\";\n }\n }' After the quick-fix is applied: 'class X {\n @Override\n public String toString() {\n return \"hello world\";\n }\n }' Configure the inspection: Use the Ignore 'equals()', 'hashCode()' and 'toString()' option to ignore these 'java.lang.Object' methods: 'equals()', 'hashCode()', and 'toString()'. The risk that these methods will disappear and your code won't be compiling anymore due to the '@Override' annotation is relatively small. Use the Ignore methods in anonymous classes option to ignore methods in anonymous classes. Disable the Highlight method when its overriding methods do not all have the '@Override' annotation option to only warn on the methods missing an '@Override' annotation, and not on overridden methods where one or more descendants are missing an '@Override' annotation. This inspection only reports if the language level of the project or module is 5 or higher.", + "markdown": "Reports methods overriding superclass methods but are not annotated with `@java.lang.Override`.\n\n\nAnnotating methods with `@java.lang.Override` improves code readability since it shows the intent.\nIn addition, the compiler emits an error when a signature of the overridden method doesn't match the superclass method.\n\n**Example:**\n\n\n class X {\n public String toString() {\n return \"hello world\";\n }\n }\n \nAfter the quick-fix is applied:\n\n\n class X {\n @Override\n public String toString() {\n return \"hello world\";\n }\n }\n \nConfigure the inspection:\n\n* Use the **Ignore 'equals()', 'hashCode()' and 'toString()'** option to ignore these `java.lang.Object` methods: `equals()`, `hashCode()`, and `toString()`. The risk that these methods will disappear and your code won't be compiling anymore due to the `@Override` annotation is relatively small.\n* Use the **Ignore methods in anonymous classes** option to ignore methods in anonymous classes.\n* Disable the **Highlight method when its overriding methods do not all have the '@Override' annotation** option to only warn on the methods missing an `@Override` annotation, and not on overridden methods where one or more descendants are missing an `@Override` annotation.\n\nThis inspection only reports if the language level of the project or module is 5 or higher." + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 25, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantExplicitClose", + "shortDescription": { + "text": "Redundant 'close()'" + }, + "fullDescription": { + "text": "Reports unnecessary calls to 'close()' at the end of a try-with-resources block and suggests removing them. Example: 'try(MyAutoCloseable ac = new MyAutoCloseable()) {\n foo();\n ac.close();\n }' After the quick-fix is applied: 'try(MyAutoCloseable ac = new MyAutoCloseable()) {\n foo();\n }' New in 2018.1", + "markdown": "Reports unnecessary calls to `close()` at the end of a try-with-resources block and suggests removing them.\n\n**Example**:\n\n\n try(MyAutoCloseable ac = new MyAutoCloseable()) {\n foo();\n ac.close();\n }\n\nAfter the quick-fix is applied:\n\n\n try(MyAutoCloseable ac = new MyAutoCloseable()) {\n foo();\n }\n\nNew in 2018.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 15, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssertStatement", + "shortDescription": { + "text": "'assert' statement" + }, + "fullDescription": { + "text": "Reports 'assert' statements. By default, 'assert' statements are disabled during execution in the production environment. Consider using logger or exceptions instead. The 'assert' statements are not supported in Java 1.3 and earlier JVM.", + "markdown": "Reports `assert` statements. By default, `assert` statements are disabled during execution in the production environment. Consider using logger or exceptions instead.\n\nThe `assert` statements are not supported in Java 1.3 and earlier JVM." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level issues", + "index": 60, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CharUsedInArithmeticContext", + "shortDescription": { + "text": "'char' expression used in arithmetic context" + }, + "fullDescription": { + "text": "Reports expressions of the 'char' type used in addition or subtraction expressions. Such code is not necessarily an issue but may result in bugs (for example, if a string is expected). Example: 'int a = 'a' + 42;' After the quick-fix is applied: 'int a = (int) 'a' + 42;' For the 'String' context: 'int i1 = 1;\nint i2 = 2;\nSystem.out.println(i2 + '-' + i1 + \" = \" + (i2 - i1));' After the quick-fix is applied: 'System.out.println(i2 + \"-\" + i1 + \" = \" + (i2 - i1));'", + "markdown": "Reports expressions of the `char` type used in addition or subtraction expressions.\n\nSuch code is not necessarily an issue but may result in bugs (for example,\nif a string is expected).\n\n**Example:** `int a = 'a' + 42;`\n\nAfter the quick-fix is applied: `int a = (int) 'a' + 42;`\n\nFor the `String` context:\n\n int i1 = 1;\n int i2 = 2;\n System.out.println(i2 + '-' + i1 + \" = \" + (i2 - i1));\n\nAfter the quick-fix is applied:\n`System.out.println(i2 + \"-\" + i1 + \" = \" + (i2 - i1));`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringEqualsCharSequence", + "shortDescription": { + "text": "'String.equals()' called with 'CharSequence' argument" + }, + "fullDescription": { + "text": "Reports calls to 'String.equals()' with a 'CharSequence' as the argument. 'String.equals()' can only return 'true' for 'String' arguments. To compare the contents of a 'String' with a non-'String' 'CharSequence' argument, use the 'contentEquals()' method. Example: 'boolean equals(String s, CharSequence ch) {\n return s.equals(ch);\n }' After quick-fix is applied: 'boolean equals(String s, CharSequence ch) {\n return s.contentEquals(ch);\n }' New in 2017.3", + "markdown": "Reports calls to `String.equals()` with a `CharSequence` as the argument.\n\n\n`String.equals()` can only return `true` for `String` arguments.\nTo compare the contents of a `String` with a non-`String` `CharSequence` argument,\nuse the `contentEquals()` method.\n\n**Example:**\n\n\n boolean equals(String s, CharSequence ch) {\n return s.equals(ch);\n }\n\nAfter quick-fix is applied:\n\n\n boolean equals(String s, CharSequence ch) {\n return s.contentEquals(ch);\n }\n\n\nNew in 2017.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessarySemicolon", + "shortDescription": { + "text": "Unnecessary semicolon" + }, + "fullDescription": { + "text": "Reports any unnecessary semicolons, including semicolons that are used between class members, inside block statements, or after class definitions. Even though these semicolons are valid in Java, they are redundant and may be removed. Example: 'class C {\n ;\n void m() throws Exception {\n try (AutoCloseable r1 = createAutoCloseable();) {\n ;\n }\n }\n ;\n }' After the quick-fix is applied: 'class C {\n void m() throws Exception {\n try (AutoCloseable r1 = createAutoCloseable()) {\n }\n }\n }'", + "markdown": "Reports any unnecessary semicolons, including semicolons that are used between class members, inside block statements, or after class definitions.\n\nEven though these semicolons are valid in Java, they are redundant and may be removed.\n\nExample:\n\n\n class C {\n ;\n void m() throws Exception {\n try (AutoCloseable r1 = createAutoCloseable();) {\n ;\n }\n }\n ;\n }\n\nAfter the quick-fix is applied:\n\n\n class C {\n void m() throws Exception {\n try (AutoCloseable r1 = createAutoCloseable()) {\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TestFailedLine", + "shortDescription": { + "text": "Failed line in test" + }, + "fullDescription": { + "text": "Reports failed method calls or assertions in tests. It helps detect the failed line in code faster and start debugging it immediately. Example: '@Test\n fun foo() {\n assertEquals(1, 0) // highlighted\n }'", + "markdown": "Reports failed method calls or assertions in tests. It helps detect the failed line in code faster and start debugging it immediately.\n\n**Example:**\n\n\n @Test\n fun foo() {\n assertEquals(1, 0) // highlighted\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages/Test frameworks", + "index": 85, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssertEqualsMayBeAssertSame", + "shortDescription": { + "text": "'assertEquals()' may be 'assertSame()'" + }, + "fullDescription": { + "text": "Reports JUnit 'assertEquals()' calls that can be replaced with an equivalent 'assertSame()' call. This is possible when the arguments are instances of a 'final' class that does not override the 'Object.equals()' method and makes it explicit that the object identity is compared. Suggests replacing 'assertEquals()' with 'assertSame()'. Example: '@Test\n public void testObjectType() {\n Object o = getObject();\n Assert.assertEquals(String.class, o.getClass());\n }' After the quick fix is applied: '@Test\n public void testSort() {\n Object o = getObject();\n Assert.assertSame(String.class, o.getClass());\n }'", + "markdown": "Reports JUnit `assertEquals()` calls that can be replaced with an equivalent `assertSame()` call. This is possible when the arguments are instances of a `final` class that does not override the `Object.equals()` method and makes it explicit that the object identity is compared.\n\nSuggests replacing `assertEquals()` with `assertSame()`.\n\n**Example:**\n\n\n @Test\n public void testObjectType() {\n Object o = getObject();\n Assert.assertEquals(String.class, o.getClass());\n }\n\nAfter the quick fix is applied:\n\n\n @Test\n public void testSort() {\n Object o = getObject();\n Assert.assertSame(String.class, o.getClass());\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages/Test frameworks", + "index": 85, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PublicStaticCollectionField", + "shortDescription": { + "text": "'public static' collection field" + }, + "fullDescription": { + "text": "Reports modifiable 'public' 'static' Collection fields. Even though they are often used to store collections of constant values, these fields nonetheless represent a security hazard, as their contents may be modified even if the field is declared as 'final'. Example: 'public static final List EVENTS = new ArrayList<>();'\n Use the table in the Options section to specify methods returning unmodifiable collections. 'public' 'static' collection fields initialized with these methods will not be reported.", + "markdown": "Reports modifiable `public` `static` Collection fields.\n\nEven though they are often used to store collections of constant values, these fields nonetheless represent a security\nhazard, as their contents may be modified even if the field is declared as `final`.\n\n**Example:**\n\n\n public static final List EVENTS = new ArrayList<>();\n \n\nUse the table in the **Options** section to specify methods returning unmodifiable collections.\n`public` `static` collection fields initialized with these methods will not be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 30, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExtendsConcreteCollection", + "shortDescription": { + "text": "Class explicitly extends a 'Collection' class" + }, + "fullDescription": { + "text": "Reports classes that extend concrete subclasses of the 'java.util.Collection' or 'java.util.Map' classes. Subclassing concrete collection types is a common yet poor practice. It is considerably more brittle than delegating collection calls.", + "markdown": "Reports classes that extend concrete subclasses of the `java.util.Collection` or `java.util.Map` classes.\n\n\nSubclassing concrete collection types is a common yet poor practice. It is considerably more brittle than delegating collection calls." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 25, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavadocBlankLines", + "shortDescription": { + "text": "Blank line should be replaced with

    to break lines" + }, + "fullDescription": { + "text": "Reports blank lines in Javadoc comments. Blank lines in Javadoc may signal an intention split the text to different paragraphs. However, the Javadoc tool and IntelliJ IDEA will ignore them when rendering documentation comments. The quick-fix suggests to replace the blank line with a paragraph tag (

    ). Example: 'class Main {\n /**\n * Doesn't do anything.\n *\n * Does absolutely nothing\n */\n void foo() {}\n }' After the quick-fix is applied: 'class Main {\n /**\n * Doesn't do anything.\n *

    \n * Does absolutely nothing\n */\n void foo() {}\n }' New in 2022.1", + "markdown": "Reports blank lines in Javadoc comments.\n\n\nBlank lines in Javadoc may signal an intention split the text to different paragraphs. However, the Javadoc tool and IntelliJ IDEA will\nignore them when rendering documentation comments.\n\n\nThe quick-fix suggests to replace the blank line with a paragraph tag (\\).\n\n**Example:**\n\n\n class Main {\n /**\n * Doesn't do anything.\n *\n * Does absolutely nothing\n */\n void foo() {}\n }\n\nAfter the quick-fix is applied:\n\n\n class Main {\n /**\n * Doesn't do anything.\n *

    \n * Does absolutely nothing\n */\n void foo() {}\n }\n\nNew in 2022.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 45, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObjectInstantiationInEqualsHashCode", + "shortDescription": { + "text": "Object instantiation inside 'equals()' or 'hashCode()'" + }, + "fullDescription": { + "text": "Reports construction of (temporary) new objects inside 'equals()', 'hashCode()', 'compareTo()', and 'Comparator.compare()' methods. Besides constructor invocations, new objects can also be created by autoboxing or iterator creation inside a 'foreach' statement. This can cause performance problems, for example, when objects are added to a 'Set' or 'Map', where these methods will be called often. The inspection will not report when the objects are created in a 'throw' or 'assert' statement. Example: 'class Person {\n private String name;\n private int age;\n\n public boolean equals(Object o) {\n return Arrays.equals(new Object[] {name, age}, new Object[] {((Foo)o).name, ((Foo)o).age});\n }\n\n public int hashCode() {\n return (name + age).hashCode();\n }\n }' In this example, two additional arrays are created inside 'equals()', usages of 'age' field require boxing, and 'name + age' implicitly creates a new string.", + "markdown": "Reports construction of (temporary) new objects inside `equals()`, `hashCode()`, `compareTo()`, and `Comparator.compare()` methods.\n\n\nBesides constructor invocations, new objects can also be created by autoboxing or iterator creation inside a\n`foreach` statement.\nThis can cause performance problems, for example, when objects are added to a `Set` or `Map`,\nwhere these methods will be called often.\n\n\nThe inspection will not report when the objects are created in a `throw` or `assert` statement.\n\n**Example:**\n\n\n class Person {\n private String name;\n private int age;\n\n public boolean equals(Object o) {\n return Arrays.equals(new Object[] {name, age}, new Object[] {((Foo)o).name, ((Foo)o).age});\n }\n\n public int hashCode() {\n return (name + age).hashCode();\n }\n }\n\n\nIn this example, two additional arrays are created inside `equals()`, usages of `age` field require boxing,\nand `name + age` implicitly creates a new string." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeParameterExtendsFinalClass", + "shortDescription": { + "text": "Type parameter extends 'final' class" + }, + "fullDescription": { + "text": "Reports type parameters declared to extend a 'final' class. Suggests replacing the type parameter with the type of the specified'final' class since 'final' classes cannot be extended. Example: 'void foo() {\n List list; // Warning: the Integer class is a final class\n }' After the quick-fix is applied: 'void foo() {\n List list;\n }'", + "markdown": "Reports type parameters declared to extend a `final` class.\n\nSuggests replacing the type parameter with the type of the specified`final` class since\n`final` classes cannot be extended.\n\n**Example:**\n\n\n void foo() {\n List list; // Warning: the Integer class is a final class\n }\n\nAfter the quick-fix is applied:\n\n\n void foo() {\n List list;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 25, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UtilityClassWithPublicConstructor", + "shortDescription": { + "text": "Utility class with 'public' constructor" + }, + "fullDescription": { + "text": "Reports utility classes with 'public' constructors. Utility classes have all fields and methods declared as 'static'. Creating a 'public' constructor in such classes is confusing and may cause accidental class instantiation.", + "markdown": "Reports utility classes with `public` constructors.\n\nUtility classes have all fields and methods declared as `static`. Creating a `public`\nconstructor in such classes is confusing and may cause accidental class instantiation." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TrivialIf", + "shortDescription": { + "text": "Redundant 'if' statement" + }, + "fullDescription": { + "text": "Reports 'if' statements that can be simplified to a single assignment, 'return', or 'assert' statement. Example: 'if (foo()) {\n return true;\n } else {\n return false;\n }' After the quick-fix is applied: 'return foo();' Configure the inspection: Use the Ignore chained 'if' statements option if want to hide a warning for chained 'if' statements. For example, in the following code the warning will be hidden, but the quick-fix will still be available: 'if (condition1) return true;\n if (condition2) return false;\n return true;' Note that replacing 'if (isTrue()) assert false;' with 'assert isTrue();' may change the program semantics when asserts are disabled if condition has side effects. Use the Ignore 'if' statements with trivial 'assert' option if you want to hide a warning for 'if' statements containing only 'assert' statement in their bodies.", + "markdown": "Reports `if` statements that can be simplified to a single assignment, `return`, or `assert` statement.\n\nExample:\n\n\n if (foo()) {\n return true;\n } else {\n return false;\n }\n\nAfter the quick-fix is applied:\n\n\n return foo();\n\nConfigure the inspection:\n\nUse the **Ignore chained 'if' statements** option if want to hide a warning for chained `if` statements.\n\nFor example, in the following code the warning will be hidden, but the quick-fix will still be available:\n\n\n if (condition1) return true;\n if (condition2) return false;\n return true;\n\nNote that replacing `if (isTrue()) assert false;` with `assert isTrue();` may change the program semantics\nwhen asserts are disabled if condition has side effects.\nUse the **Ignore 'if' statements with trivial 'assert'** option if you want to hide a warning for `if` statements\ncontaining only `assert` statement in their bodies." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnconditionalWait", + "shortDescription": { + "text": "Unconditional 'wait()' call" + }, + "fullDescription": { + "text": "Reports 'wait()' being called unconditionally within a synchronized context. Normally, 'wait()' is used to block a thread until some condition is true. If 'wait()' is called unconditionally, it often indicates that the condition was checked before a lock was acquired. In that case a data race may occur, with the condition becoming true between the time it was checked and the time the lock was acquired. While constructs found by this inspection are not necessarily incorrect, they are certainly worth examining. Example: 'class Bar {\n void foo() throws InterruptedException {\n synchronized (this) {\n wait(); // warning\n }\n }\n }'", + "markdown": "Reports `wait()` being called unconditionally within a synchronized context.\n\n\nNormally, `wait()` is used to block a thread until some condition is true. If\n`wait()` is called unconditionally, it often indicates that the condition was\nchecked before a lock was acquired. In that case a data race may occur, with the condition\nbecoming true between the time it was checked and the time the lock was acquired.\n\n\nWhile constructs found by this inspection are not necessarily incorrect, they are certainly worth examining.\n\n**Example:**\n\n\n class Bar {\n void foo() throws InterruptedException {\n synchronized (this) {\n wait(); // warning\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InstanceGuardedByStatic", + "shortDescription": { + "text": "Instance member guarded by static field" + }, + "fullDescription": { + "text": "Reports '@GuardedBy' annotations on instance fields or methods in which the guard is a 'static' field. Guarding a non-static by a static may result in excessive lock contention, as access to each locked field in any object instance will prevent simultaneous access to that field in every object instance. Example: 'private static ReadWriteLock lock = new ReentrantReadWriteLock(); //static guarding field\n private Object state;\n\n @GuardedBy(\"lock\")\n public void bar() {\n state = new Object();\n }' Supported '@GuardedBy' annotations are: 'net.jcip.annotations.GuardedBy' 'javax.annotation.concurrent.GuardedBy' 'org.apache.http.annotation.GuardedBy' 'com.android.annotations.concurrency.GuardedBy' 'androidx.annotation.GuardedBy' 'com.google.errorprone.annotations.concurrent.GuardedBy'", + "markdown": "Reports `@GuardedBy` annotations on instance fields or methods in which the guard is a `static` field. Guarding a non-static by a static may result in excessive lock contention, as access to each locked field in any object instance will prevent simultaneous access to that field in every object instance.\n\nExample:\n\n\n private static ReadWriteLock lock = new ReentrantReadWriteLock(); //static guarding field\n private Object state;\n\n @GuardedBy(\"lock\")\n public void bar() {\n state = new Object();\n }\n\nSupported `@GuardedBy` annotations are:\n\n* `net.jcip.annotations.GuardedBy`\n* `javax.annotation.concurrent.GuardedBy`\n* `org.apache.http.annotation.GuardedBy`\n* `com.android.annotations.concurrency.GuardedBy`\n* `androidx.annotation.GuardedBy`\n* `com.google.errorprone.annotations.concurrent.GuardedBy`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Concurrency annotation issues", + "index": 58, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BooleanMethodIsAlwaysInverted", + "shortDescription": { + "text": "Boolean method is always inverted" + }, + "fullDescription": { + "text": "Reports methods with a 'boolean' return type that are used only in a negated context. The quick-fix makes it possible to rename and invert the method. Due to performance reasons, some methods might not be highlighted in the editor. Example: 'class C {\n boolean alwaysTrue() {\n return true;\n }\n\n void f() {\n if (!alwaysTrue()) {\n return;\n }\n }\n boolean member = !alwaysTrue();\n }' After the quick-fix is applied: 'class C {\n boolean alwaysFalse() {\n return false;\n }\n\n void f() {\n if (alwaysFalse()) {\n return;\n }\n }\n boolean member = alwaysFalse();\n }'", + "markdown": "Reports methods with a `boolean` return type that are used only in a negated context.\n\nThe quick-fix makes it possible to rename and invert the method.\nDue to performance reasons, some methods might not be highlighted in the editor.\n\nExample:\n\n\n class C {\n boolean alwaysTrue() {\n return true;\n }\n\n void f() {\n if (!alwaysTrue()) {\n return;\n }\n }\n boolean member = !alwaysTrue();\n }\n\nAfter the quick-fix is applied:\n\n\n class C {\n boolean alwaysFalse() {\n return false;\n }\n\n void f() {\n if (alwaysFalse()) {\n return;\n }\n }\n boolean member = alwaysFalse();\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Data flow", + "index": 23, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AutoCloseableResource", + "shortDescription": { + "text": "AutoCloseable used without 'try'-with-resources" + }, + "fullDescription": { + "text": "Reports 'AutoCloseable' instances which are not used in a try-with-resources statement, also known as Automatic Resource Management. This means that the \"open resource before/in 'try', close in 'finally'\" style that had been used before try-with-resources became available, is also reported. This inspection is meant to replace all opened but not safely closed inspections when developing in Java 7 and higher. Example: 'private static void foo() throws IOException {\n InputStream profile = Thread.currentThread().getContextClassLoader().getResourceAsStream(\"/someFile\");\n System.out.println(profile.read());\n }' Use the following options to configure the inspection: List subclasses of 'AutoCloseable' that do not need to be closed and should be ignored by this inspection. Note: The inspection will still report streams returned from the 'java.nio.file.Files' methods 'lines()', 'walk()', 'list()' and 'find()', even when 'java.util.stream.Stream' is listed to be ignored. These streams contain an associated I/O resource that needs to be closed. List methods returning 'AutoCloseable' that should be ignored when called. Whether to ignore an 'AutoCloseable' if it is the result of a method call. When this option is enabled, the results of factory methods will also be ignored. Whether the inspection should report if an 'AutoCloseable' instance is passed as a method call argument. If this option is enabled, the inspection assumes the resource is closed in the called method. Method calls inside a 'finally' block with 'close' in the name and an 'AutoCloseable' argument will not be ignored. Whether to ignore method references to constructors of resource classes. Whether to ignore methods that return a resource and whose name starts with 'get'. This can reduce false positives because most of the getters do not transfer the ownership of the resource, and their call sites are not responsible for closing the resource.", + "markdown": "Reports `AutoCloseable` instances which are not used in a try-with-resources statement, also known as *Automatic Resource Management* .\n\n\nThis means that the \"open resource before/in `try`, close in `finally`\" style that had been used before\ntry-with-resources became available, is also reported.\nThis inspection is meant to replace all *opened but not safely closed* inspections when developing in Java 7 and higher.\n\n**Example:**\n\n\n private static void foo() throws IOException {\n InputStream profile = Thread.currentThread().getContextClassLoader().getResourceAsStream(\"/someFile\");\n System.out.println(profile.read());\n }\n\n\nUse the following options to configure the inspection:\n\n* List subclasses of `AutoCloseable` that do not need to be closed and should be ignored by this inspection. \n **Note** : The inspection will still report streams returned from the `java.nio.file.Files` methods `lines()`, `walk()`, `list()` and `find()`, even when `java.util.stream.Stream` is listed to be ignored. These streams contain an associated I/O resource that needs to be closed.\n* List methods returning `AutoCloseable` that should be ignored when called.\n* Whether to ignore an `AutoCloseable` if it is the result of a method call. When this option is enabled, the results of factory methods will also be ignored.\n* Whether the inspection should report if an `AutoCloseable` instance is passed as a method call argument. If this option is enabled, the inspection assumes the resource is closed in the called method. Method calls inside a `finally` block with 'close' in the name and an `AutoCloseable` argument will not be ignored.\n* Whether to ignore method references to constructors of resource classes.\n* Whether to ignore methods that return a resource and whose name starts with 'get'. This can reduce false positives because most of the getters do not transfer the ownership of the resource, and their call sites are not responsible for closing the resource." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Resource management", + "index": 46, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodOverridesInaccessibleMethodOfSuper", + "shortDescription": { + "text": "Method overrides inaccessible method of superclass" + }, + "fullDescription": { + "text": "Reports methods with the same signature as an inaccessible method of a superclass, for example, a private method, or a package-private method of a superclass in another package. Such method names may be confusing because the method in the subclass may look like an override when in fact it hides the inaccessible method of the superclass. Moreover, if the visibility of the method in the superclass changes later, it may either silently change the semantics of the subclass or cause a compilation error. A quick-fix is suggested to rename the method. Example: 'public class Super {\n private void test() {\n }\n }\n\n public class Sub extends Super {\n void test() { // making 'Super.test()' public causes a compilation error\n // making 'Super.test()' package-private makes 'Sub.test()' an override\n }\n }'", + "markdown": "Reports methods with the same signature as an inaccessible method of a superclass, for example, a private method, or a package-private method of a superclass in another package.\n\n\nSuch method names may be confusing because the method in the subclass may look like an override when in fact\nit hides the inaccessible method of the superclass.\nMoreover, if the visibility of the method in the superclass changes later,\nit may either silently change the semantics of the subclass or cause a compilation error.\n\nA quick-fix is suggested to rename the method.\n\n**Example:**\n\n\n public class Super {\n private void test() {\n }\n }\n\n public class Sub extends Super {\n void test() { // making 'Super.test()' public causes a compilation error\n // making 'Super.test()' package-private makes 'Sub.test()' an override\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 54, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IntLiteralMayBeLongLiteral", + "shortDescription": { + "text": "Cast to 'long' can be 'long' literal" + }, + "fullDescription": { + "text": "Reports 'int' literal expressions that are immediately cast to 'long'. Such literal expressions can be replaced with equivalent 'long' literals. Example: 'Long l = (long)42;' After the quick-fix is applied: 'Long l = 42L;'", + "markdown": "Reports `int` literal expressions that are immediately cast to `long`.\n\nSuch literal expressions can be replaced with equivalent `long` literals.\n\n**Example:**\n\n Long l = (long)42;\n\nAfter the quick-fix is applied:\n\n Long l = 42L;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues/Cast", + "index": 102, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SingleStatementInBlock", + "shortDescription": { + "text": "Code block contains single statement" + }, + "fullDescription": { + "text": "Reports control flow statements with a single statement in their code block and suggests removing the braces from the control flow statement body. Example: 'if (x > 0) {\n System.out.println(\"x is positive\");\n }' After the quick-fix is applied: 'if (x > 0) System.out.println(\"x is positive\");'", + "markdown": "Reports control flow statements with a single statement in their code block and suggests removing the braces from the control flow statement body.\n\nExample:\n\n\n if (x > 0) {\n System.out.println(\"x is positive\");\n }\n\nAfter the quick-fix is applied:\n\n\n if (x > 0) System.out.println(\"x is positive\");\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TestCaseWithConstructor", + "shortDescription": { + "text": "TestCase with non-trivial constructors" + }, + "fullDescription": { + "text": "Reports test cases with initialization logic in their constructors. If a constructor fails, the '@After' annotated or 'tearDown()' method won't be called. This can leave the test environment partially initialized, which can adversely affect other tests. Instead, initialization of test cases should be done in a 'setUp()' or '@Before' annotated method. Bad example: 'public class ImportantTest {\n private File file;\n\n public ImportantTest() throws IOException {\n file = File.createTempFile(\"xyz\", \".tmp\");\n }\n\n // ... tests go here\n }'", + "markdown": "Reports test cases with initialization logic in their constructors. If a constructor fails, the `@After` annotated or `tearDown()` method won't be called. This can leave the test environment partially initialized, which can adversely affect other tests. Instead, initialization of test cases should be done in a `setUp()` or `@Before` annotated method.\n\nBad example:\n\n\n public class ImportantTest {\n private File file;\n\n public ImportantTest() throws IOException {\n file = File.createTempFile(\"xyz\", \".tmp\");\n }\n\n // ... tests go here\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages/Test frameworks", + "index": 85, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SingleCharacterStartsWith", + "shortDescription": { + "text": "Single character 'startsWith()' or 'endsWith()'" + }, + "fullDescription": { + "text": "Reports calls to 'String.startsWith()' and 'String.endsWith()' where single character string literals are passed as an argument. A quick-fix is suggested to replace such calls with more efficiently implemented 'String.charAt()'. However, the performance gain of such change is minimal and the code becomes less readable because of the extra non-zero length check, so it is recommended to apply the quick-fix only inside tight loops. This inspection is intended for Java ME and other highly resource constrained environments. Applying the results of this inspection without consideration might have negative effects on code clarity and design. Example: 'boolean startsWithX(String s) {\n return s.startsWith(\"x\");\n }' After the quick-fix is applied: 'boolean startsWithX(String s) {\n return !s.isEmpty() && s.charAt(0) == 'x';\n }'", + "markdown": "Reports calls to `String.startsWith()` and `String.endsWith()` where single character string literals are passed as an argument.\n\n\nA quick-fix is suggested to replace such calls with more efficiently implemented `String.charAt()`.\n\n\nHowever, the performance gain of such change is minimal and the code becomes less readable because of the extra non-zero length check,\nso it is recommended to apply the quick-fix only inside tight loops.\n\n\nThis inspection is intended for Java ME and other highly resource constrained environments.\nApplying the results of this inspection without consideration might have negative effects on code clarity and design.\n\n**Example:**\n\n\n boolean startsWithX(String s) {\n return s.startsWith(\"x\");\n }\n\nAfter the quick-fix is applied:\n\n\n boolean startsWithX(String s) {\n return !s.isEmpty() && s.charAt(0) == 'x';\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance/Embedded", + "index": 21, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UtilityClassCanBeEnum", + "shortDescription": { + "text": "Utility class can be 'enum'" + }, + "fullDescription": { + "text": "Reports utility classes that can be converted to enums. Some coding style guidelines require implementing utility classes as enums to avoid code coverage issues in 'private' constructors. Example: 'class StringUtils {\n public static final String EMPTY = \"\";\n }' After the quick-fix is applied: 'enum StringUtils {\n ;\n public static final String EMPTY = \"\";\n }'", + "markdown": "Reports utility classes that can be converted to enums.\n\nSome coding style guidelines require implementing utility classes as enums\nto avoid code coverage issues in `private` constructors.\n\n**Example:**\n\n\n class StringUtils {\n public static final String EMPTY = \"\";\n }\n\nAfter the quick-fix is applied:\n\n\n enum StringUtils {\n ;\n public static final String EMPTY = \"\";\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReadObjectAndWriteObjectPrivate", + "shortDescription": { + "text": "'readObject()' or 'writeObject()' not declared 'private'" + }, + "fullDescription": { + "text": "Reports 'Serializable' classes where the 'readObject' or 'writeObject' methods are not declared private. There is no reason these methods should ever have a higher visibility than 'private'. A quick-fix is suggested to make the corresponding method 'private'. Example: 'public class Test implements Serializable {\n public void readObject(ObjectInputStream stream) {\n /* ... */\n }\n }' After the quick-fix is applied: 'public class Test implements Serializable {\n private void readObject(ObjectInputStream stream) {\n /* ... */\n }\n }'", + "markdown": "Reports `Serializable` classes where the `readObject` or `writeObject` methods are not declared private. There is no reason these methods should ever have a higher visibility than `private`.\n\n\nA quick-fix is suggested to make the corresponding method `private`.\n\n**Example:**\n\n\n public class Test implements Serializable {\n public void readObject(ObjectInputStream stream) {\n /* ... */\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class Test implements Serializable {\n private void readObject(ObjectInputStream stream) {\n /* ... */\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 18, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExtendsObject", + "shortDescription": { + "text": "Class explicitly extends 'Object'" + }, + "fullDescription": { + "text": "Reports any classes that are explicitly declared to extend 'java.lang.Object'. Such declaration is redundant and can be safely removed. Example: 'class MyClass extends Object {\n }' The quick-fix removes the redundant 'extends Object' clause: 'class MyClass {\n }'", + "markdown": "Reports any classes that are explicitly declared to extend `java.lang.Object`.\n\nSuch declaration is redundant and can be safely removed.\n\nExample:\n\n\n class MyClass extends Object {\n }\n\nThe quick-fix removes the redundant `extends Object` clause:\n\n\n class MyClass {\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantFileCreation", + "shortDescription": { + "text": "Redundant 'File' instance creation" + }, + "fullDescription": { + "text": "Reports redundant 'File' creation in one of the following constructors when only 'String' path can be used: 'FileInputStream', 'FileOutputStream', 'FileReader', 'FileWriter', 'PrintStream', 'PrintWriter', 'Formatter'. Example: 'InputStream is = new FileInputStream(new File(\"in.txt\"));' After quick-fix is applied: 'InputStream is = new FileInputStream(\"in.txt\");' New in 2020.3", + "markdown": "Reports redundant `File` creation in one of the following constructors when only `String` path can be used: `FileInputStream`, `FileOutputStream`, `FileReader`, `FileWriter`, `PrintStream`, `PrintWriter`, `Formatter`.\n\nExample:\n\n\n InputStream is = new FileInputStream(new File(\"in.txt\"));\n\nAfter quick-fix is applied:\n\n\n InputStream is = new FileInputStream(\"in.txt\");\n\nNew in 2020.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PointlessBooleanExpression", + "shortDescription": { + "text": "Pointless boolean expression" + }, + "fullDescription": { + "text": "Reports unnecessary or overly complicated boolean expressions. Such expressions include '&&'-ing with 'true', '||'-ing with 'false', equality comparison with a boolean literal, or negation of a boolean literal. Such expressions can be simplified. Example: 'boolean a = !(x && false);\n boolean b = false || x;\n boolean c = x != true;' After the quick-fix is applied: 'boolean a = true;\n boolean b = x;\n boolean c = !x;' Configure the inspection: Use the Ignore named constants in determining pointless expressions option to ignore named constants when determining if an expression is pointless.", + "markdown": "Reports unnecessary or overly complicated boolean expressions.\n\nSuch expressions include `&&`-ing with `true`,\n`||`-ing with `false`,\nequality comparison with a boolean literal, or negation of a boolean literal. Such expressions can be simplified.\n\nExample:\n\n\n boolean a = !(x && false);\n boolean b = false || x;\n boolean c = x != true;\n\nAfter the quick-fix is applied:\n\n\n boolean a = true;\n boolean b = x;\n boolean c = !x;\n\n\nConfigure the inspection:\nUse the **Ignore named constants in determining pointless expressions** option to ignore named constants when determining if an expression is pointless." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuperTearDownInFinally", + "shortDescription": { + "text": "JUnit 3 'super.tearDown()' is not called from 'finally' block" + }, + "fullDescription": { + "text": "Reports calls of the JUnit 3's 'super.tearDown()' method that are not performed inside a 'finally' block. If an exception is thrown before 'super.tearDown()' is called it could lead to inconsistencies and leaks. Example: 'public class AnotherTest extends CompanyTestCase {\n private Path path;\n\n @Override\n protected void setUp() throws Exception {\n super.setUp();\n path = Files.createTempFile(\"File\", \".tmp\");\n }\n\n @Override\n protected void tearDown() throws Exception {\n Files.delete(path);\n super.tearDown();\n }\n }' Improved code: 'public class AnotherTest extends CompanyTestCase {\n private Path path;\n\n @Override\n protected void setUp() throws Exception {\n super.setUp();\n path = Files.createTempFile(\"File\", \".tmp\");\n }\n\n @Override\n protected void tearDown() throws Exception {\n try {\n Files.delete(path);\n } finally {\n super.tearDown();\n }\n }\n }'", + "markdown": "Reports calls of the JUnit 3's `super.tearDown()` method that are not performed inside a `finally` block. If an exception is thrown before `super.tearDown()` is called it could lead to inconsistencies and leaks.\n\n**Example:**\n\n\n public class AnotherTest extends CompanyTestCase {\n private Path path;\n\n @Override\n protected void setUp() throws Exception {\n super.setUp();\n path = Files.createTempFile(\"File\", \".tmp\");\n }\n\n @Override\n protected void tearDown() throws Exception {\n Files.delete(path);\n super.tearDown();\n }\n }\n\nImproved code:\n\n\n public class AnotherTest extends CompanyTestCase {\n private Path path;\n\n @Override\n protected void setUp() throws Exception {\n super.setUp();\n path = Files.createTempFile(\"File\", \".tmp\");\n }\n\n @Override\n protected void tearDown() throws Exception {\n try {\n Files.delete(path);\n } finally {\n super.tearDown();\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages/Test frameworks", + "index": 85, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReassignedVariable", + "shortDescription": { + "text": "Reassigned variable" + }, + "fullDescription": { + "text": "Reports reassigned variables, which complicate reading and understanding the code. Example: 'int value = 2 * (height + width);\n System.out.println(\"perimeter: \" + value);\n\n value = height * width;\n System.out.println(\"area: \" + value);'", + "markdown": "Reports reassigned variables, which complicate reading and understanding the code.\n\nExample:\n\n\n int value = 2 * (height + width);\n System.out.println(\"perimeter: \" + value);\n\n value = height * width;\n System.out.println(\"area: \" + value);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ListenerMayUseAdapter", + "shortDescription": { + "text": "Class may extend adapter instead of implementing listener" + }, + "fullDescription": { + "text": "Reports classes implementing listeners instead of extending corresponding adapters. A quick-fix is available to remove any redundant empty methods left after replacing a listener implementation with an adapter extension. Use the Only warn when empty implementing methods are found option to configure the inspection to warn even if no empty methods are found.", + "markdown": "Reports classes implementing listeners instead of extending corresponding adapters.\n\nA quick-fix is available to\nremove any redundant empty methods left after replacing a listener implementation with an adapter extension.\n\n\nUse the **Only warn when empty implementing methods are found** option to configure the inspection to warn even if no empty methods are found." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodNameSameAsClassName", + "shortDescription": { + "text": "Method name same as class name" + }, + "fullDescription": { + "text": "Reports methods that are named identically to their class. While such naming is allowed by the Java language, by convention it is reserved for defining constructors. Using it for methods is probably a mistake or bad practice. Example: 'class MyClass {\n int val;\n\n // Method MyClass named identically to its containing class.\n // Likely, 'void' was added by mistake.\n void MyClass(int val) {\n this.val = val;\n }\n }' When appropriate, a quick-fix converts the method to a constructor: 'class MyClass {\n int val;\n\n MyClass(int val) {\n this.val = val;\n }\n }' Another quick-fix renames the method.", + "markdown": "Reports methods that are named identically to their class. While such naming is allowed by the Java language, by convention it is reserved for defining constructors. Using it for methods is probably a mistake or bad practice.\n\n**Example:**\n\n\n class MyClass {\n int val;\n\n // Method MyClass named identically to its containing class.\n // Likely, 'void' was added by mistake.\n void MyClass(int val) {\n this.val = val;\n }\n }\n\nWhen appropriate, a quick-fix converts the method to a constructor:\n\n\n class MyClass {\n int val;\n\n MyClass(int val) {\n this.val = val;\n }\n }\n\nAnother quick-fix renames the method." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Method", + "index": 88, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LocalVariableNamingConvention", + "shortDescription": { + "text": "Local variable naming convention" + }, + "fullDescription": { + "text": "Reports local variables whose names are too short, too long, or do not follow the specified regular expression pattern. Example: 'int X = 42;' should be reported if the inspection is enabled with the default settings in which a variable name should start with a lowercase letter. Configure the inspection: Use the fields in the Options section to specify the minimum length, maximum length, and a regular expression expected for local variable names. Specify 0 in order not to check the length of names. Regular expressions should be specified in the standard java.util.regex format. Use checkboxes to ignore 'for'-loop and 'catch' section parameters.", + "markdown": "Reports local variables whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n**Example:** `int X = 42;`\nshould be reported if the inspection is enabled with the default settings in which a variable name should start with a lowercase letter.\n\nConfigure the inspection:\n\n\nUse the fields in the **Options** section to specify the minimum length, maximum length, and a regular expression expected for local variable names.\nSpecify **0** in order not to check the length of names. Regular expressions should be specified in the standard **java.util.regex** format.\n\nUse checkboxes to ignore `for`-loop and `catch` section parameters." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions", + "index": 50, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryJavaDocLink", + "shortDescription": { + "text": "Unnecessary Javadoc link" + }, + "fullDescription": { + "text": "Reports Javadoc '@see', '{@link}', and '{@linkplain}' tags that refer to the method owning the comment, the super method of the method owning the comment, or the class containing the comment. Such links are unnecessary and can be safely removed with this inspection's quick-fix. The quick-fix will remove the entire Javadoc comment if the tag is its only content. Example: 'class Example {\n /**\n * @see Example#method\n */\n public void method() { }\n }' After the quick-fix is applied: 'class Example {\n public void method() { }\n}' Use the checkbox below to ignore inline links ('{@link}' and '{@linkplain}') to super methods. Although a link to all super methods is automatically added by the Javadoc tool, an inline link to the super method may sometimes be needed in texts of the Javadoc comments.", + "markdown": "Reports Javadoc `@see`, `{@link}`, and `{@linkplain}` tags that refer to the method owning the comment, the super method of the method owning the comment, or the class containing the comment.\n\nSuch links are unnecessary and can be safely removed with this inspection's quick-fix. The\nquick-fix will remove the entire Javadoc comment if the tag is its only content.\n\n**Example:**\n\n\n class Example {\n /**\n * @see Example#method\n */\n public void method() { }\n }\n\nAfter the quick-fix is applied:\n\n\n class Example {\n public void method() { }\n }\n\n\nUse the checkbox below to ignore inline links (`{@link}` and `{@linkplain}`)\nto super methods. Although a link to all super methods is automatically added by the\nJavadoc tool, an inline link to the super method may sometimes be needed in texts of the Javadoc comments." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 45, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NestedSwitchStatement", + "shortDescription": { + "text": "Nested 'switch' statement" + }, + "fullDescription": { + "text": "Reports nested 'switch' statements or expressions. Nested 'switch' statements may result in extremely confusing code. These statements may be extracted to a separate method. Example: 'int res = switch (i) {\n case 0 -> 0;\n default -> switch (i) {\n case 100 -> 0;\n default -> i;\n };\n };'", + "markdown": "Reports nested `switch` statements or expressions.\n\nNested `switch` statements\nmay result in extremely confusing code. These statements may be extracted to a separate method.\n\nExample:\n\n\n int res = switch (i) {\n case 0 -> 0;\n default -> switch (i) {\n case 100 -> 0;\n default -> i;\n };\n };\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EmptyTryBlock", + "shortDescription": { + "text": "Empty 'try' block" + }, + "fullDescription": { + "text": "Reports empty 'try' blocks, including try-with-resources statements. 'try' blocks with comments are considered empty. This inspection doesn't report empty 'try' blocks found in JSP files.", + "markdown": "Reports empty `try` blocks, including try-with-resources statements.\n\n`try` blocks with comments are considered empty.\n\n\nThis inspection doesn't report empty `try` blocks found in JSP files." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CollectionsFieldAccessReplaceableByMethodCall", + "shortDescription": { + "text": "Reference to empty collection field can be replaced with method call" + }, + "fullDescription": { + "text": "Reports usages of 'java.util.Collections' fields: 'EMPTY_LIST', 'EMPTY_MAP' or 'EMPTY_SET'. These field usages may be replaced with the following method calls: 'emptyList()', 'emptyMap()', or 'emptySet()'. Such method calls prevent unchecked warnings by the compiler because the type parameters can be inferred. Example: 'List emptyList = Collections.EMPTY_LIST;' After the quick-fix is applied: 'List emptyList = Collections.emptyList();' This inspection only reports if the language level of the project or module is 5 or higher.", + "markdown": "Reports usages of `java.util.Collections` fields: `EMPTY_LIST`, `EMPTY_MAP` or `EMPTY_SET`. These field usages may be replaced with the following method calls: `emptyList()`, `emptyMap()`, or `emptySet()`. Such method calls prevent unchecked warnings by the compiler because the type parameters can be inferred.\n\n**Example:**\n\n\n List emptyList = Collections.EMPTY_LIST;\n\nAfter the quick-fix is applied:\n\n\n List emptyList = Collections.emptyList();\n\nThis inspection only reports if the language level of the project or module is 5 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 5", + "index": 51, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WaitOrAwaitWithoutTimeout", + "shortDescription": { + "text": "'wait()' or 'await()' without timeout" + }, + "fullDescription": { + "text": "Reports calls to 'Object.wait()' or 'Condition.await()' without specifying a timeout. Such calls may be dangerous in high-availability programs, as failures in one component may result in blockages of the waiting component if 'notify()'/'notifyAll()' or 'signal()'/'signalAll()' never get called. Example: 'void foo(Object bar) throws InterruptedException {\n bar.wait();\n }'", + "markdown": "Reports calls to `Object.wait()` or `Condition.await()` without specifying a timeout.\n\n\nSuch calls may be dangerous in high-availability programs, as failures in one\ncomponent may result in blockages of the waiting component\nif `notify()`/`notifyAll()`\nor `signal()`/`signalAll()` never get called.\n\n**Example:**\n\n\n void foo(Object bar) throws InterruptedException {\n bar.wait();\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssertWithSideEffects", + "shortDescription": { + "text": "'assert' statement with side effects" + }, + "fullDescription": { + "text": "Reports 'assert' statements that cause side effects. Since assertions can be switched off, these side effects are not guaranteed, which can cause subtle bugs. Common unwanted side effects detected by this inspection are modifications of variables and fields. When methods calls are involved, they are analyzed one level deep. Example: 'assert i++ < 10;'", + "markdown": "Reports `assert` statements that cause side effects.\n\n\nSince assertions can be switched off,\nthese side effects are not guaranteed, which can cause subtle bugs. Common unwanted side effects detected by this inspection are\nmodifications of variables and fields. When methods calls are involved, they are analyzed one level deep.\n\n**Example:**\n\n\n assert i++ < 10;\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RefusedBequest", + "shortDescription": { + "text": "Method does not call super method" + }, + "fullDescription": { + "text": "Reports methods that override a particular method without calling 'super'. This is also known as a refused bequest. Such methods may represent a failure of abstraction and cause hard-to-trace bugs. The inspection doesn't report default methods and methods overridden from 'java.lang.Object', except for 'clone()'. The 'clone()' method is expected to call its 'super', which will automatically return an object of the correct type. Examples: 'class A {\n @Override\n public Object clone() { // reported, because it does not call 'super.clone()'\n return new A();\n }\n }' 'interface I {\n default void foo() {}\n }\n\n class A implements I {\n // warning on method when 'Ignore 'default' super methods' and 'Ignore annotated' options are disabled\n @Override\n public void foo(){}\n }' Configure the inspection: Use the Only report when super method is annotated by option to ignore 'super' methods marked with the annotations from the provided list. You can manually add annotations to the list. Use the Ignore empty super methods option to ignore 'super' methods that are either empty or only throw an exception. Use the Ignore 'default' super methods option to ignore 'super' methods with the 'default' keyword.", + "markdown": "Reports methods that override a particular method without calling `super`.\n\nThis is also known as a *refused bequest*. Such methods\nmay represent a failure of abstraction and cause hard-to-trace bugs.\n\nThe inspection doesn't report default methods and methods overridden\nfrom `java.lang.Object`, except for `clone()`.\nThe `clone()` method is expected to call its `super`, which will automatically return an object of the correct type.\n\n**Examples:**\n\n*\n\n\n class A {\n @Override\n public Object clone() { // reported, because it does not call 'super.clone()'\n return new A();\n }\n }\n \n*\n\n\n interface I {\n default void foo() {}\n }\n\n class A implements I {\n // warning on method when 'Ignore 'default' super methods' and 'Ignore annotated' options are disabled\n @Override\n public void foo(){}\n }\n \nConfigure the inspection:\n\n* Use the **Only report when super method is annotated by** option to ignore `super` methods marked with the annotations from the provided list. You can manually add annotations to the list.\n* Use the **Ignore empty super methods** option to ignore `super` methods that are either empty or only throw an exception.\n* Use the **Ignore 'default' super methods** option to ignore `super` methods with the `default` keyword." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 25, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FinalClass", + "shortDescription": { + "text": "Class is closed to inheritance" + }, + "fullDescription": { + "text": "Reports classes that are declared 'final'. Final classes that extend a 'sealed' class or interface are not reported. Such classes can't be inherited and may indicate a lack of object-oriented design. Some coding standards discourage 'final' classes. Example: 'public final class Main {\n }' After the quick-fix is applied: 'public class Main {\n }'", + "markdown": "Reports classes that are declared `final`. Final classes that extend a `sealed` class or interface are not reported. Such classes can't be inherited and may indicate a lack of object-oriented design. Some coding standards discourage `final` classes.\n\n**Example:**\n\n\n public final class Main {\n }\n\nAfter the quick-fix is applied:\n\n\n public class Main {\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryEmptyArrayUsage", + "shortDescription": { + "text": "Unnecessary zero length array usage" + }, + "fullDescription": { + "text": "Reports allocations of arrays with known lengths of zero when there is a constant for that in the class of the array's element type. As zero-length arrays are immutable, you can save memory reusing the same array instance. Example: 'class Item {\n // Public zero-length array constant that can be reused \n public static final Item[] EMPTY_ARRAY = new Item[0];\n }\n class EmptyNode {\n Item[] getChildren() {\n // Unnecessary zero-length array creation\n return new Item[0];\n }\n }' After the quick-fix is applied: 'class EmptyNode {\n Item[] getChildren() {\n return Item.EMPTY_ARRAY;\n }\n }'", + "markdown": "Reports allocations of arrays with known lengths of zero when there is a constant for that in the class of the array's element type. As zero-length arrays are immutable, you can save memory reusing the same array instance.\n\n**Example:**\n\n\n class Item {\n // Public zero-length array constant that can be reused \n public static final Item[] EMPTY_ARRAY = new Item[0];\n }\n class EmptyNode {\n Item[] getChildren() {\n // Unnecessary zero-length array creation\n return new Item[0];\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class EmptyNode {\n Item[] getChildren() {\n return Item.EMPTY_ARRAY;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Memory", + "index": 69, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LiteralAsArgToStringEquals", + "shortDescription": { + "text": "String literal may be 'equals()' qualifier" + }, + "fullDescription": { + "text": "Reports 'String.equals()' or 'String.equalsIgnoreCase()' calls with a string literal argument. Some coding standards specify that string literals should be the qualifier of 'equals()', rather than argument, thus minimizing 'NullPointerException'-s. A quick-fix is available to exchange the literal and the expression. Example: 'boolean isFoo(String value) {\n return value.equals(\"foo\");\n }' After the quick-fix is applied: 'boolean isFoo(String value) {\n return \"foo\".equals(value);\n }'", + "markdown": "Reports `String.equals()` or `String.equalsIgnoreCase()` calls with a string literal argument.\n\nSome coding standards specify that string literals should be the qualifier of `equals()`, rather than\nargument, thus minimizing `NullPointerException`-s.\n\nA quick-fix is available to exchange the literal and the expression.\n\n**Example:**\n\n\n boolean isFoo(String value) {\n return value.equals(\"foo\");\n }\n\nAfter the quick-fix is applied:\n\n\n boolean isFoo(String value) {\n return \"foo\".equals(value);\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DuplicateExpressions", + "shortDescription": { + "text": "Multiple occurrences of the same expression" + }, + "fullDescription": { + "text": "Reports multiple equivalent occurrences of the same expression within a method (or constructor, or class initializer) if the result of the expression can be reused. The expression is reported if it's free of side effects and its result is always the same (in terms of 'Object.equals()'). The examples of such expressions are 'a + b', 'Math.max(a, b)', 'a.equals(b)', 's.substring(a,b)'. To make sure the result is always the same, it's verified that the variables used in the expression don't change their values between the occurrences of the expression. Such expressions may contain methods of immutable classes like 'String', 'BigDecimal', and so on, and of utility classes like 'Objects', 'Math' (except 'random()'). The well-known methods, such as 'Object.equals()', 'Object.hashCode()', 'Object.toString()', 'Comparable.compareTo()', and 'Comparator.compare()' are OK as well because they normally don't have any observable side effects. Use the Expression complexity threshold option to specify the minimal expression complexity threshold. Specifying bigger numbers will remove reports on short expressions. 'Path.of' and 'Paths.get' calls are treated as equivalent calls if they have the same arguments. These calls are always reported no matter how complex their arguments are. This behaviour can be tweaked using different complexity threshold. New in 2018.3", + "markdown": "Reports multiple equivalent occurrences of the same expression within a method (or constructor, or class initializer) if the result of the expression can be reused.\n\n\nThe expression is reported if it's free of side effects and its result is always the same (in terms of `Object.equals()`).\nThe examples of such expressions are `a + b`, `Math.max(a, b)`, `a.equals(b)`,\n`s.substring(a,b)`. To make sure the result is always the same, it's verified that the variables used in the expression don't\nchange their values between the occurrences of the expression.\n\n\nSuch expressions may contain methods of immutable classes like `String`, `BigDecimal`, and so on,\nand of utility classes like `Objects`, `Math` (except `random()`).\nThe well-known methods, such as `Object.equals()`, `Object.hashCode()`, `Object.toString()`,\n`Comparable.compareTo()`, and `Comparator.compare()` are OK as well because they normally don't have\nany observable side effects.\n\n\nUse the **Expression complexity threshold** option to specify the minimal expression complexity threshold. Specifying bigger\nnumbers will remove reports on short expressions.\n\n\n`Path.of` and `Paths.get` calls are treated as equivalent calls if they have the same arguments. These calls\nare always reported no matter how complex their arguments are. This behaviour can be tweaked using different complexity threshold.\n\nNew in 2018.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryReturn", + "shortDescription": { + "text": "Unnecessary 'return' statement" + }, + "fullDescription": { + "text": "Reports 'return' statements at the end of constructors and methods returning 'void'. These statements are redundant and may be safely removed. This inspection does not report in JSP files. Example: 'void message() {\n System.out.println(\"Hello World\");\n return;\n }' After the quick-fix is applied: 'void message() {\n System.out.println(\"Hello World\");\n }' Use the Ignore in then branch of 'if' statement with 'else' branch option to ignore 'return' statements in the then branch of 'if' statements which also have an 'else' branch.", + "markdown": "Reports `return` statements at the end of constructors and methods returning `void`. These statements are redundant and may be safely removed.\n\nThis inspection does not report in JSP files.\n\nExample:\n\n\n void message() {\n System.out.println(\"Hello World\");\n return;\n }\n\nAfter the quick-fix is applied:\n\n\n void message() {\n System.out.println(\"Hello World\");\n }\n\n\nUse the **Ignore in then branch of 'if' statement with 'else' branch** option to ignore `return` statements in the then branch of `if` statements\nwhich also have an `else` branch." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PublicInnerClass", + "shortDescription": { + "text": "'public' nested class" + }, + "fullDescription": { + "text": "Reports 'public' nested classes. Example: 'public class Outer {\n public static class Nested {} // warning\n public class Inner {} // warning\n public enum Mode {} // warning depends on the setting\n public interface I {} // warning depends on the setting\n }' Configure the inspection: Use the Ignore 'public' inner enums option to ignore 'public' inner enums. Use the Ignore 'public' inner interfaces option to ignore 'public' inner interfaces.", + "markdown": "Reports `public` nested classes.\n\n**Example:**\n\n\n public class Outer {\n public static class Nested {} // warning\n public class Inner {} // warning\n public enum Mode {} // warning depends on the setting\n public interface I {} // warning depends on the setting\n }\n\nConfigure the inspection:\n\n* Use the **Ignore 'public' inner enums** option to ignore `public` inner enums.\n* Use the **Ignore 'public' inner interfaces** option to ignore `public` inner interfaces." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Encapsulation", + "index": 57, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BooleanConstructor", + "shortDescription": { + "text": "Boolean constructor call" + }, + "fullDescription": { + "text": "Reports creation of 'Boolean' objects. Constructing new 'Boolean' objects is rarely necessary, and may cause performance problems if done often enough. Also, 'Boolean' constructors are deprecated since Java 9 and could be removed or made inaccessible in future Java versions. Example: 'Boolean b1 = new Boolean(true);\n Boolean b2 = new Boolean(str);' After the quick-fix is applied: 'Boolean b1 = Boolean.TRUE;\n Boolean b2 = Boolean.valueOf(str);'", + "markdown": "Reports creation of `Boolean` objects.\n\n\nConstructing new `Boolean` objects is rarely necessary,\nand may cause performance problems if done often enough. Also, `Boolean`\nconstructors are deprecated since Java 9 and could be removed or made\ninaccessible in future Java versions.\n\n**Example:**\n\n\n Boolean b1 = new Boolean(true);\n Boolean b2 = new Boolean(str);\n\nAfter the quick-fix is applied:\n\n\n Boolean b1 = Boolean.TRUE;\n Boolean b2 = Boolean.valueOf(str);\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonFinalGuard", + "shortDescription": { + "text": "Non-final '@GuardedBy' field" + }, + "fullDescription": { + "text": "Reports '@GuardedBy' annotations in which the guarding field is not 'final'. Guarding on a non-final field may result in unexpected race conditions, as locks will be held on the value of the field (which may change), rather than the field itself. Example: 'private ReadWriteLock lock = new ReentrantReadWriteLock(); //not final guarding field\n private Object state;\n\n @GuardedBy(\"lock\")\n public void bar() {\n state = new Object();\n }' Supported '@GuardedBy' annotations are: 'net.jcip.annotations.GuardedBy' 'javax.annotation.concurrent.GuardedBy' 'org.apache.http.annotation.GuardedBy' 'com.android.annotations.concurrency.GuardedBy' 'androidx.annotation.GuardedBy' 'com.google.errorprone.annotations.concurrent.GuardedBy'", + "markdown": "Reports `@GuardedBy` annotations in which the guarding field is not `final`.\n\nGuarding on a non-final field may result in unexpected race conditions, as locks will\nbe held on the value of the field (which may change), rather than the field itself.\n\nExample:\n\n\n private ReadWriteLock lock = new ReentrantReadWriteLock(); //not final guarding field\n private Object state;\n\n @GuardedBy(\"lock\")\n public void bar() {\n state = new Object();\n }\n\nSupported `@GuardedBy` annotations are:\n\n* `net.jcip.annotations.GuardedBy`\n* `javax.annotation.concurrent.GuardedBy`\n* `org.apache.http.annotation.GuardedBy`\n* `com.android.annotations.concurrency.GuardedBy`\n* `androidx.annotation.GuardedBy`\n* `com.google.errorprone.annotations.concurrent.GuardedBy`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Concurrency annotation issues", + "index": 58, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TooBroadScope", + "shortDescription": { + "text": "Scope of variable is too broad" + }, + "fullDescription": { + "text": "Reports any variable declarations that can be moved to a smaller scope. This inspection is especially useful for Pascal style declarations at the beginning of a method. Additionally variables with too broad a scope are also often left behind after refactorings. Example: 'StringBuilder sb = new StringBuilder();\n System.out.println();\n sb.append(1);' After the quick-fix is applied: 'System.out.println();\n StringBuilder sb = new StringBuilder();\n sb.append(1);' Configure the inspection: Use the Only report variables that can be moved into inner blocks option to report only those variables that can be moved inside deeper code blocks. For example, when the option is enabled, the movement will not be suggested for the 'sb' variable above. However, it will be suggested for the following code: 'StringBuilder sb = new StringBuilder(a);\n if (flag) {\n sb.append(1);\n }' Use the Report variables with a new expression as initializer (potentially unsafe) option to report variables that are initialized with a new expression. This makes the inspection potentially unsafe when the constructor has non-local side effects. For example, when the option is enabled, the movement will be suggested for the 'foo' variable: 'class Foo {\n static List fooList = new ArrayList<>();\n String bar;\n\n Foo(String bar) {\n this.bar = bar;\n fooList.add(this);\n }\n\n public static void main(String[] args) {\n // movement is possible even though is unsafe\n Foo foo = new Foo(\"bar\");\n System.out.println(fooList.size());\n System.out.println(foo.bar);\n }\n }'", + "markdown": "Reports any variable declarations that can be moved to a smaller scope.\n\nThis inspection is especially\nuseful for *Pascal style* declarations at the beginning of a method. Additionally variables with too broad a\nscope are also often left behind after refactorings.\n\n**Example:**\n\n\n StringBuilder sb = new StringBuilder();\n System.out.println();\n sb.append(1);\n\nAfter the quick-fix is applied:\n\n\n System.out.println();\n StringBuilder sb = new StringBuilder();\n sb.append(1);\n\nConfigure the inspection:\n\n* Use the **Only report variables that can be moved into inner blocks** option to report only those variables that can be moved inside deeper code blocks. For example, when the option is enabled, the movement will not be suggested for the `sb` variable above. However, it will be suggested for the following code:\n\n\n StringBuilder sb = new StringBuilder(a);\n if (flag) {\n sb.append(1);\n }\n\n* Use the **Report variables with a new expression as initializer\n (potentially unsafe)** option to report variables that are initialized with a new expression. This makes the inspection potentially unsafe when the constructor has non-local side effects. For example, when the option is enabled, the movement will be suggested for the `foo` variable:\n\n\n class Foo {\n static List fooList = new ArrayList<>();\n String bar;\n\n Foo(String bar) {\n this.bar = bar;\n fooList.add(this);\n }\n\n public static void main(String[] args) {\n // movement is possible even though is unsafe\n Foo foo = new Foo(\"bar\");\n System.out.println(fooList.size());\n System.out.println(foo.bar);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Data flow", + "index": 23, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CollectionAddedToSelf", + "shortDescription": { + "text": "Collection added to itself" + }, + "fullDescription": { + "text": "Reports cases where the argument of a method call on a 'java.util.Collection' or 'java.util.Map' is the collection or map itself. Such situations may occur as a result of copy-paste in code with raw types. Example: 'ArrayList list = new ArrayList<>();\n list.add(list); // warning here\n return list.hashCode(); // throws StackOverflowError'", + "markdown": "Reports cases where the argument of a method call on a `java.util.Collection` or `java.util.Map` is the collection or map itself. Such situations may occur as a result of copy-paste in code with raw types.\n\n**Example:**\n\n\n ArrayList list = new ArrayList<>();\n list.add(list); // warning here\n return list.hashCode(); // throws StackOverflowError\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IfStatementMissingBreakInLoop", + "shortDescription": { + "text": "Early loop exit in 'if' condition" + }, + "fullDescription": { + "text": "Reports loops with an 'if' statement that can end with 'break' without changing the semantics. This prevents redundant loop iterations. Example: 'boolean found = false;\n for (int i = 0; i < arr.length; i++) {\n if (Objects.equals(value, arr[i])) {\n found = true;\n }\n }' After the quick-fix is applied: 'boolean found = false;\n for (int i = 0; i < arr.length; i++) {\n if (Objects.equals(value, arr[i])) {\n found = true;\n break;\n }\n }' New in 2019.2", + "markdown": "Reports loops with an `if` statement that can end with `break` without changing the semantics. This prevents redundant loop iterations.\n\n**Example:**\n\n\n boolean found = false;\n for (int i = 0; i < arr.length; i++) {\n if (Objects.equals(value, arr[i])) {\n found = true;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n boolean found = false;\n for (int i = 0; i < arr.length; i++) {\n if (Objects.equals(value, arr[i])) {\n found = true;\n break;\n }\n }\n\nNew in 2019.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantStreamOptionalCall", + "shortDescription": { + "text": "Redundant step in 'Stream' or 'Optional' call chain" + }, + "fullDescription": { + "text": "Reports redundant 'Stream' or 'Optional' calls like 'map(x -> x)', 'filter(x -> true)' or redundant 'sorted()' or 'distinct()' calls. Note that a mapping operation in code like 'streamOfIntegers.map(Integer::valueOf)' works as 'requireNonNull()' check: if the stream contains 'null', it throws a 'NullPointerException', thus it's not absolutely redundant. Disable the Report redundant boxing in Stream.map() option if you do not want such cases to be reported. This inspection only reports if the language level of the project or module is 8 or higher.", + "markdown": "Reports redundant `Stream` or `Optional` calls like `map(x -> x)`, `filter(x -> true)` or redundant `sorted()` or `distinct()` calls.\n\nNote that a mapping operation in code like `streamOfIntegers.map(Integer::valueOf)`\nworks as `requireNonNull()` check:\nif the stream contains `null`, it throws a `NullPointerException`, thus it's not absolutely redundant.\nDisable the **Report redundant boxing in Stream.map()** option if you do not want such cases to be reported.\n\nThis inspection only reports if the language level of the project or module is 8 or higher." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessarySuperQualifier", + "shortDescription": { + "text": "Unnecessary 'super' qualifier" + }, + "fullDescription": { + "text": "Reports unnecessary 'super' qualifiers in method calls and field references. A 'super' qualifier is unnecessary when the field or method of the superclass is not hidden/overridden in the calling class. Example: 'class Foo {\n void foo() {}\n }\n\n class Bar extends Foo {\n void bar() {\n super.foo();\n }\n }' After the quick-fix is applied: 'class Foo {\n void foo() {}\n }\n\n class Bar extends Foo {\n void bar() {\n foo();\n }\n }' Use the inspection settings to ignore qualifiers that help to distinguish superclass members access from the identically named members of the outer class. See also the following inspections: Java | Visibility | Access to inherited field looks like access to element from surrounding code Java | Visibility | Call to inherited method looks like call to local method", + "markdown": "Reports unnecessary `super` qualifiers in method calls and field references.\n\n\nA `super` qualifier is unnecessary\nwhen the field or method of the superclass is not hidden/overridden in the calling class.\n\n**Example:**\n\n\n class Foo {\n void foo() {}\n }\n\n class Bar extends Foo {\n void bar() {\n super.foo();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n void foo() {}\n }\n\n class Bar extends Foo {\n void bar() {\n foo();\n }\n }\n\n\nUse the inspection settings to ignore qualifiers that help to distinguish superclass members access\nfrom the identically named members of the outer class.\n\n\nSee also the following inspections:\n\n* *Java \\| Visibility \\| Access to inherited field looks like access to element from surrounding code*\n* *Java \\| Visibility \\| Call to inherited method looks like call to local method*" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThreadPriority", + "shortDescription": { + "text": "Call to 'Thread.setPriority()'" + }, + "fullDescription": { + "text": "Reports calls to 'Thread.setPriority()'. Modifying priorities of threads is an inherently non-portable operation, as no guarantees are given in the Java specification of how priorities are used in scheduling threads, or even whether they are used at all.", + "markdown": "Reports calls to `Thread.setPriority()`. Modifying priorities of threads is an inherently non-portable operation, as no guarantees are given in the Java specification of how priorities are used in scheduling threads, or even whether they are used at all." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EqualsOnSuspiciousObject", + "shortDescription": { + "text": "'equals()' called on 'StringBuilder'" + }, + "fullDescription": { + "text": "Reports 'equals()' calls on 'StringBuilder' or 'StringBuffer' instances. The 'equals()' method is not overridden in these classes, so it may return 'false' even when the contents of the two objects are the same. If the reference equality is intended, it's better to use '==' to avoid confusion. Example: 'public void test(StringBuilder sb1, StringBuilder sb2) {\n boolean result = sb1.equals(sb2); // Suspicious\n }' New in 2017.2", + "markdown": "Reports `equals()` calls on `StringBuilder` or `StringBuffer` instances.\n\nThe `equals()` method is not overridden in these classes, so it may return `false` even when the contents of the two objects are the same.\nIf the reference equality is intended, it's better to use `==` to avoid confusion.\n\nExample:\n\n\n public void test(StringBuilder sb1, StringBuilder sb2) {\n boolean result = sb1.equals(sb2); // Suspicious\n }\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JUnitMalformedDeclaration", + "shortDescription": { + "text": "JUnit malformed declaration" + }, + "fullDescription": { + "text": "Reports JUnit test member declarations that are malformed and are likely not recognized by the JUnit test framework. The following problems are reported by this inspection: Fields annotated by '@RegisterExtension' that have the wrong type or are not declared as static when it is required Static or private inner classes annotated with '@Nested' Parameterized tests that are defined without a source Parameterized tests with a '@MethodSource' that has an unknown, non-static or no-arg target Mismatched types between parameterized test method parameter and the specified '@ValueSource' or '@EnumSource' values Tests that are annotated by more than one of '@Test', '@ParameterizedTest' or '@RepeatedTest' 'setup()' or 'tearDown()' methods that are not public, whose return type is not void or take arguments 'suite()' methods that are private, take arguments or are not static Methods annotated by '@BeforeClass', '@AfterClass', '@BeforeAll' or '@AfterAll' that are not public, not static, whose return type is not void or do not have a valid parameter list Methods annotated by '@Before', '@After', '@BeforeEach' or '@AfterEach' that are not public, whose return type is not void or take arguments Injected 'RepetitionInfo' in '@BeforeAll' or '@AfterAll' methods Injected 'RepetitionInfo' in '@BeforeEach' or '@AfterEach' methods that are used by '@Test' annotated tests Fields and methods annotated by '@DataPoint' or '@DataPoints' that are not public or not static Fields and methods annotated by '@Rule' that are not public or not a subtype of 'TestRule' or 'MethodRule' Fields and methods annotated by '@ClassRule' that are not public, not static or not a subtype of 'TestRule' Methods inside a subclass of 'TestCase' with a 'test' prefix that are not public, whose return type is not void, take arguments or are static Methods annotated by '@Test' that are not public, whose return type is not void, take arguments or are static Note that in Kotlin, suspending functions do have arguments and a non-void return type. Therefore, they also will not be executed by the JUnit test runner. This inspection will also report about this problem. Malformed '@Before' method example (Java): '@Before private int foo(int arg) { ... }' After the quick-fix is applied: '@Before public void foo() { ... }' Missing method source example (Kotlin): 'class Example {\n @MethodSource(\"parameters\")\n @ParameterizedTest\n fun foo(param: String) { ... }\n }' After the quick-fix is applied: 'class Example {\n @MethodSource(\"parameters\")\n @ParameterizedTest\n fun foo(param: String) { ... }\n\n companion object {\n @JvmStatic\n fun parameters(): Stream {\n TODO(\"Not yet implemented\")\n }\n }\n }' Use the inspection options to specify annotations. Any parameter annotated with one of these annotations will not be reported.", + "markdown": "Reports JUnit test member declarations that are malformed and are likely not recognized by the JUnit test framework. The following problems are reported by this inspection:\n\n* Fields annotated by `@RegisterExtension` that have the wrong type or are not declared as static when it is required\n* Static or private inner classes annotated with `@Nested`\n* Parameterized tests that are defined without a source\n* Parameterized tests with a `@MethodSource` that has an unknown, non-static or no-arg target\n* Mismatched types between parameterized test method parameter and the specified `@ValueSource` or `@EnumSource` values\n* Tests that are annotated by more than one of `@Test`, `@ParameterizedTest` or `@RepeatedTest`\n* `setup()` or `tearDown()` methods that are not public, whose return type is not void or take arguments\n* `suite()` methods that are private, take arguments or are not static\n* Methods annotated by `@BeforeClass`, `@AfterClass`, `@BeforeAll` or `@AfterAll` that are not public, not static, whose return type is not void or do not have a valid parameter list\n* Methods annotated by `@Before`, `@After`, `@BeforeEach` or `@AfterEach` that are not public, whose return type is not void or take arguments\n* Injected `RepetitionInfo` in `@BeforeAll` or `@AfterAll` methods\n* Injected `RepetitionInfo` in `@BeforeEach` or `@AfterEach` methods that are used by `@Test` annotated tests\n* Fields and methods annotated by `@DataPoint` or `@DataPoints` that are not public or not static\n* Fields and methods annotated by `@Rule` that are not public or not a subtype of `TestRule` or `MethodRule`\n* Fields and methods annotated by `@ClassRule` that are not public, not static or not a subtype of `TestRule`\n* Methods inside a subclass of `TestCase` with a `test` prefix that are not public, whose return type is not void, take arguments or are static\n* Methods annotated by `@Test` that are not public, whose return type is not void, take arguments or are static\n\nNote that in Kotlin, suspending functions do have arguments and a non-void return type. Therefore, they also will not be executed by the JUnit test runner. This inspection will also report about this problem.\n\n**Malformed `@Before` method example (Java):**\n\n @Before private int foo(int arg) { ... } \n\nAfter the quick-fix is applied:\n\n @Before public void foo() { ... } \n\n**Missing method source example (Kotlin):**\n\n\n class Example {\n @MethodSource(\"parameters\")\n @ParameterizedTest\n fun foo(param: String) { ... }\n }\n\nAfter the quick-fix is applied:\n\n\n class Example {\n @MethodSource(\"parameters\")\n @ParameterizedTest\n fun foo(param: String) { ... }\n\n companion object {\n @JvmStatic\n fun parameters(): Stream {\n TODO(\"Not yet implemented\")\n }\n }\n }\n\nUse the inspection options to specify annotations. Any parameter annotated with one of these annotations will not be reported." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages/Test frameworks", + "index": 85, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseOfPropertiesAsHashtable", + "shortDescription": { + "text": "Use of 'Properties' object as a 'Hashtable'" + }, + "fullDescription": { + "text": "Reports calls to the following methods on 'java.util.Properties' objects: 'put()' 'putIfAbsent()' 'putAll()' 'get()' For historical reasons, 'java.util.Properties' inherits from 'java.util.Hashtable', but using these methods is discouraged to prevent pollution of properties with values of types other than 'String'. Calls to 'java.util.Properties.putAll()' won't get reported when both the key and the value parameters in the map are of the 'String' type. Such a call is safe and no better alternative exists. Example: 'Object f(Properties props) {\n props.put(\"hello\", \"world\");\n props.putIfAbsent(\"hello\", \"world\");\n props.putAll(new HashMap<>());\n return props.get(\"Hello\");\n }' After the quick-fix is applied: 'Object f(Properties props) {\n props.setProperty(\"hello\", \"world\");\n props.putIfAbsent(\"hello\", \"world\");\n props.putAll(new HashMap<>());\n return props.getProperty(\"hello\");\n }'", + "markdown": "Reports calls to the following methods on `java.util.Properties` objects:\n\n* `put()`\n* `putIfAbsent()`\n* `putAll()`\n* `get()`\n\n\nFor historical reasons, `java.util.Properties` inherits from `java.util.Hashtable`,\nbut using these methods is discouraged to prevent pollution of properties with values of types other than `String`.\n\n\nCalls to `java.util.Properties.putAll()` won't get reported when\nboth the key and the value parameters in the map are of the `String` type.\nSuch a call is safe and no better alternative exists.\n\n**Example:**\n\n\n Object f(Properties props) {\n props.put(\"hello\", \"world\");\n props.putIfAbsent(\"hello\", \"world\");\n props.putAll(new HashMap<>());\n return props.get(\"Hello\");\n }\n\nAfter the quick-fix is applied:\n\n\n Object f(Properties props) {\n props.setProperty(\"hello\", \"world\");\n props.putIfAbsent(\"hello\", \"world\");\n props.putAll(new HashMap<>());\n return props.getProperty(\"hello\");\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodCoupling", + "shortDescription": { + "text": "Overly coupled method" + }, + "fullDescription": { + "text": "Reports methods that reference too many other classes. Methods with too high coupling can be very fragile and should be probably split into smaller methods. Each referenced class is counted only once no matter how many times it is referenced. Configure the inspection: Use the Method coupling limit field to specify the maximum allowed coupling for a method. Use the Include couplings to java system classes option to count references to classes from 'java'or 'javax' packages. Use the Include couplings to library classes option to count references to third-party library classes.", + "markdown": "Reports methods that reference too many other classes. Methods with too high coupling can be very fragile and should be probably split into smaller methods.\n\nEach referenced class is counted only once no matter how many times it is referenced.\n\nConfigure the inspection:\n\n* Use the **Method coupling limit** field to specify the maximum allowed coupling for a method.\n* Use the **Include couplings to java system classes** option to count references to classes from `java`or `javax` packages.\n* Use the **Include couplings to library classes** option to count references to third-party library classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Method metrics", + "index": 95, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantStringFormatCall", + "shortDescription": { + "text": "Redundant call to 'String.format()'" + }, + "fullDescription": { + "text": "Reports calls to methods like 'format()' and 'printf()' that can be safely removed or simplified. Example: 'System.out.println(String.format(\"Total count: %d\", 42));' After the quick-fix is applied: 'System.out.printf(\"Total count: %d%n\", 42);'", + "markdown": "Reports calls to methods like `format()` and `printf()` that can be safely removed or simplified.\n\n**Example:**\n\n\n System.out.println(String.format(\"Total count: %d\", 42));\n\nAfter the quick-fix is applied:\n\n\n System.out.printf(\"Total count: %d%n\", 42);\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonFinalFieldOfException", + "shortDescription": { + "text": "Non-final field of 'Exception' class" + }, + "fullDescription": { + "text": "Reports fields in subclasses of 'java.lang.Exception' that are not declared 'final'. Data on exception objects should not be modified because this may result in losing the error context for later debugging and logging. Example: 'public class EditorException extends Exception {\n private String message; // warning: Non-final field 'message' of exception class\n }'", + "markdown": "Reports fields in subclasses of `java.lang.Exception` that are not declared `final`.\n\nData on exception objects should not be modified\nbecause this may result in losing the error context for later debugging and logging.\n\n**Example:**\n\n\n public class EditorException extends Exception {\n private String message; // warning: Non-final field 'message' of exception class\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PointlessNullCheck", + "shortDescription": { + "text": "Unnecessary 'null' check before method call" + }, + "fullDescription": { + "text": "Reports 'null' checks followed by a method call that will definitely return 'false' when 'null' is passed (e.g. 'Class.isInstance'). Such a check seems excessive as the method call will always return 'false' in this case. Example: 'if (x != null && myClass.isInstance(x)) { ... }' After the quick-fix is applied: 'if (myClass.isInstance(x)) { ... }'", + "markdown": "Reports `null` checks followed by a method call that will definitely return `false` when `null` is passed (e.g. `Class.isInstance`).\n\nSuch a check seems excessive as the method call will always return `false` in this case.\n\n**Example:**\n\n\n if (x != null && myClass.isInstance(x)) { ... }\n\nAfter the quick-fix is applied:\n\n\n if (myClass.isInstance(x)) { ... }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AccessToStaticFieldLockedOnInstance", + "shortDescription": { + "text": "Access to 'static' field locked on instance data" + }, + "fullDescription": { + "text": "Reports access to non-constant static fields that are locked on either 'this' or an instance field of 'this'. Locking a static field on instance data does not prevent the field from being modified by other instances, and thus may result in unexpected race conditions. Example: 'static String test;\n public void foo() {\n synchronized (this) {\n System.out.println(test); // warning\n }\n }' There is a quick-fix that allows ignoring static fields of specific types. You can manage those ignored types in the inspection options. Use the inspection options to specify which classes used for static fields should be ignored.", + "markdown": "Reports access to non-constant static fields that are locked on either `this` or an instance field of `this`.\n\n\nLocking a static field on instance data does not prevent the field from being\nmodified by other instances, and thus may result in unexpected race conditions.\n\n**Example:**\n\n\n static String test;\n public void foo() {\n synchronized (this) {\n System.out.println(test); // warning\n }\n }\n\n\nThere is a quick-fix that allows ignoring static fields of specific types.\nYou can manage those ignored types in the inspection options.\n\n\nUse the inspection options to specify which classes used for static fields should be ignored." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodOverridesStaticMethod", + "shortDescription": { + "text": "Method tries to override 'static' method of superclass" + }, + "fullDescription": { + "text": "Reports 'static' methods with a signature identical to a 'static' method of a superclass. Such a method may look like an override when in fact it hides the method from the superclass because 'static' methods in Java cannot be overridden. Example: 'class Parent {\n static void method(){}\n }\n\n class Example extends Parent {\n static void method(){} //warning\n }'", + "markdown": "Reports `static` methods with a signature identical to a `static` method of a superclass. Such a method may look like an override when in fact it hides the method from the superclass because `static` methods in Java cannot be overridden.\n\n**Example:**\n\n\n class Parent {\n static void method(){}\n }\n\n class Example extends Parent {\n static void method(){} //warning\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 54, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnclearBinaryExpression", + "shortDescription": { + "text": "Multiple operators with different precedence" + }, + "fullDescription": { + "text": "Reports binary, conditional, or 'instanceof' expressions that consist of different operators without parentheses. Such expressions can be less readable due to different precedence rules of operators. Example: 'int n = 3 + 9 * 8 + 1;' After quick-fix is applied: 'int n = 3 + (9 * 8) + 1;'", + "markdown": "Reports binary, conditional, or `instanceof` expressions that consist of different operators without parentheses. Such expressions can be less readable due to different precedence rules of operators.\n\nExample:\n\n\n int n = 3 + 9 * 8 + 1;\n\nAfter quick-fix is applied:\n\n\n int n = 3 + (9 * 8) + 1;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantCompareToJavaTime", + "shortDescription": { + "text": "Expression with 'java.time' 'compareTo()' call can be simplified" + }, + "fullDescription": { + "text": "Reports 'java.time' comparisons with 'compareTo()' calls that can be replaced with 'isAfter()', 'isBefore()' or 'isEqual()' calls. Example: 'LocalDate date1 = LocalDate.now();\n LocalDate date2 = LocalDate.now();\n boolean t = date1.compareTo(date2) > 0;' After the quick-fix is applied: 'LocalDate date1 = LocalDate.now();\n LocalDate date2 = LocalDate.now();\n boolean t = date1.isAfter(date2);' New in 2022.3", + "markdown": "Reports `java.time` comparisons with `compareTo()` calls that can be replaced with `isAfter()`, `isBefore()` or `isEqual()` calls.\n\nExample:\n\n\n LocalDate date1 = LocalDate.now();\n LocalDate date2 = LocalDate.now();\n boolean t = date1.compareTo(date2) > 0;\n\nAfter the quick-fix is applied:\n\n\n LocalDate date1 = LocalDate.now();\n LocalDate date2 = LocalDate.now();\n boolean t = date1.isAfter(date2);\n\nNew in 2022.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ChainedMethodCall", + "shortDescription": { + "text": "Chained method calls" + }, + "fullDescription": { + "text": "Reports method calls whose target is another method call. The quick-fix suggests to introduce a local variable. Example: 'class X {\n int foo(File f) {\n return f.getName().length();\n }\n }' After the quick-fix is applied: 'class X {\n int foo(File f) {\n final String name = f.getName();\n return name.length();\n }\n }' Use the inspection options to toggle warnings for the following cases: chained method calls in field initializers, for instance, 'private final int i = new Random().nextInt();' chained method calls operating on the same type, for instance, 'new StringBuilder().append(\"x: \").append(new X()).append(\"y: \").append(new Y()).toString();'.", + "markdown": "Reports method calls whose target is another method call. The quick-fix suggests to introduce a local variable.\n\n**Example:**\n\n\n class X {\n int foo(File f) {\n return f.getName().length();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class X {\n int foo(File f) {\n final String name = f.getName();\n return name.length();\n }\n }\n\nUse the inspection options to toggle warnings for the following cases:\n\n*\n chained method calls in field initializers,\n for instance, `private final int i = new Random().nextInt();`\n\n*\n chained method calls operating on the same type,\n for instance, `new StringBuilder().append(\"x: \").append(new X()).append(\"y: \").append(new Y()).toString();`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "VariableTypeCanBeExplicit", + "shortDescription": { + "text": "Variable type can be explicit" + }, + "fullDescription": { + "text": "Reports local variables of the 'var' type that can be replaced with an explicit type. Example: 'var str = \"Hello\";' After the quick-fix is applied: 'String str = \"Hello\";' 'var' keyword appeared in Java 10. This inspection can help to downgrade for backward compatibility with earlier Java versions.", + "markdown": "Reports local variables of the `var` type that can be replaced with an explicit type.\n\n**Example:**\n\n\n var str = \"Hello\";\n\nAfter the quick-fix is applied:\n\n\n String str = \"Hello\";\n\n\n`var` *keyword* appeared in Java 10.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 10", + "index": 110, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExtendsUtilityClass", + "shortDescription": { + "text": "Class extends utility class" + }, + "fullDescription": { + "text": "Reports classes that extend a utility class. A utility class is a non-empty class in which all fields and methods are static. Extending a utility class also allows for inadvertent object instantiation of the utility class, because the constructor cannot be made private in order to allow extension. Configure the inspection: Use the Ignore if overriding class is a utility class option to ignore any classes that override a utility class but are also utility classes themselves.", + "markdown": "Reports classes that extend a utility class.\n\n\nA utility class is a non-empty class in which all fields and methods are static.\nExtending a utility class also allows for inadvertent object instantiation of the\nutility class, because the constructor cannot be made private in order to allow extension.\n\n\nConfigure the inspection:\n\n* Use the **Ignore if overriding class is a utility class** option to ignore any classes that override a utility class but are also utility classes themselves." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 25, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UtilityClassWithoutPrivateConstructor", + "shortDescription": { + "text": "Utility class without 'private' constructor" + }, + "fullDescription": { + "text": "Reports utility classes without 'private' constructors. Utility classes have all fields and methods declared as 'static'. Creating 'private' constructors in utility classes prevents them from being accidentally instantiated. Use the Ignore if annotated by option to specify special annotations. The inspection ignores classes marked with one of these annotations. Use the Ignore classes with only a main method option to ignore classes with no methods other than the main one.", + "markdown": "Reports utility classes without `private` constructors.\n\nUtility classes have all fields and methods declared as `static`. Creating `private`\nconstructors in utility classes prevents them from being accidentally instantiated.\n\n\nUse the **Ignore if annotated by** option to specify special annotations. The inspection ignores classes marked with one of\nthese annotations.\n\n\nUse the **Ignore classes with only a main method** option to ignore classes with no methods other than the main one." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java8ListSort", + "shortDescription": { + "text": "'Collections.sort()' can be replaced with 'List.sort()'" + }, + "fullDescription": { + "text": "Reports calls of 'Collections.sort(list, comparator)' which can be replaced with 'list.sort(comparator)'. 'Collections.sort' is just a wrapper, so it is better to use an instance method directly. This inspection only reports if the language level of the project or module is 8 or higher.", + "markdown": "Reports calls of `Collections.sort(list, comparator)` which can be replaced with `list.sort(comparator)`.\n\n`Collections.sort` is just a wrapper, so it is better to use an instance method directly.\n\nThis inspection only reports if the language level of the project or module is 8 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 59, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssertEqualsCalledOnArray", + "shortDescription": { + "text": "'assertEquals()' called on array" + }, + "fullDescription": { + "text": "Reports JUnit 'assertEquals()' calls with arguments of an array type. Such methods compare the arrays' identities instead of the arrays' contents. Array contents should be checked with the 'assertArrayEquals()' method. Example: '@Test\n public void testSort() {\n int[] actual = {248, 496, 0, 56};\n Arrays.sort(actual);\n Assert.assertEquals(new int[] {0, 56, 248, 496}, actual);\n }' After the quick-fix is applied: '@Test\n public void testSort() {\n int[] actual = {248, 496, 0, 56};\n Arrays.sort(actual);\n Assert.assertArrayEquals(new int[] {0, 56, 248, 496}, actual);\n }'", + "markdown": "Reports JUnit `assertEquals()` calls with arguments of an array type. Such methods compare the arrays' identities instead of the arrays' contents. Array contents should be checked with the `assertArrayEquals()` method.\n\n**Example:**\n\n\n @Test\n public void testSort() {\n int[] actual = {248, 496, 0, 56};\n Arrays.sort(actual);\n Assert.assertEquals(new int[] {0, 56, 248, 496}, actual);\n }\n\nAfter the quick-fix is applied:\n\n\n @Test\n public void testSort() {\n int[] actual = {248, 496, 0, 56};\n Arrays.sort(actual);\n Assert.assertArrayEquals(new int[] {0, 56, 248, 496}, actual);\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages/Test frameworks", + "index": 85, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssertMessageNotString", + "shortDescription": { + "text": "'assert' message is not a string" + }, + "fullDescription": { + "text": "Reports 'assert' messages that are not of the 'java.lang.String' type. Using a string provides more information to help diagnose the failure or the assertion reason. Example: 'void foo(List myList) {\n assert myList.isEmpty() : false;\n }' Use the Only warn when the 'assert' message type is 'boolean' or 'java.lang.Boolean' option to only warn when the 'assert' message type is 'boolean' or 'java.lang.Boolean'. A 'boolean' detail message is unlikely to provide additional information about an assertion failure and could result from a mistakenly entered ':' instead of '&'.", + "markdown": "Reports `assert` messages that are not of the `java.lang.String` type.\n\nUsing a string provides more information to help diagnose the failure\nor the assertion reason.\n\n**Example:**\n\n\n void foo(List myList) {\n assert myList.isEmpty() : false;\n }\n\n\nUse the **Only warn when the `assert` message type is 'boolean' or 'java.lang.Boolean'** option to only warn when the `assert` message type is `boolean` or `java.lang.Boolean`.\nA `boolean` detail message is unlikely to provide additional information about an assertion failure\nand could result from a mistakenly entered `:` instead of `&`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ComparatorCombinators", + "shortDescription": { + "text": "'Comparator' combinator can be used" + }, + "fullDescription": { + "text": "Reports 'Comparator' instances defined as lambda expressions that could be expressed using 'Comparator.comparing()' calls. Chained comparisons which can be replaced by 'Comparator.thenComparing()' expression are also reported. Example: 'myList.sort((person1, person2) -> person1.getName().compareTo(person2.getName()));\n\n myList2.sort((person1, person2) -> {\n int res = person1.first().compareTo(person2.first());\n if(res == 0) res = person1.second().compareTo(person2.second());\n if(res == 0) res = person1.third() - person2.third();\n return res;\n });' After the quick-fixes are applied: 'myList.sort(Comparator.comparing(Person::getName));\n\n myList2.sort(Comparator.comparing(Person::first)\n .thenComparing(Person::second)\n .thenComparingInt(Person::third));'", + "markdown": "Reports `Comparator` instances defined as lambda expressions that could be expressed using `Comparator.comparing()` calls. Chained comparisons which can be replaced by `Comparator.thenComparing()` expression are also reported.\n\nExample:\n\n\n myList.sort((person1, person2) -> person1.getName().compareTo(person2.getName()));\n\n myList2.sort((person1, person2) -> {\n int res = person1.first().compareTo(person2.first());\n if(res == 0) res = person1.second().compareTo(person2.second());\n if(res == 0) res = person1.third() - person2.third();\n return res;\n });\n\nAfter the quick-fixes are applied:\n\n\n myList.sort(Comparator.comparing(Person::getName));\n\n myList2.sort(Comparator.comparing(Person::first)\n .thenComparing(Person::second)\n .thenComparingInt(Person::third));\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 59, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PatternVariableCanBeUsed", + "shortDescription": { + "text": "Pattern variable can be used" + }, + "fullDescription": { + "text": "Reports local variable declarations that can be replaced with pattern variables, which are usually more compact. Example: 'if (obj instanceof String) {\n String str = (String) obj;\n System.out.println(str);\n }' Can be replaced with: 'if (obj instanceof String str) {\n System.out.println(str);\n }' This inspection only reports if the language level of the project or module is 16 or higher New in 2020.1", + "markdown": "Reports local variable declarations that can be replaced with pattern variables, which are usually more compact.\n\n**Example:**\n\n\n if (obj instanceof String) {\n String str = (String) obj;\n System.out.println(str);\n }\n\nCan be replaced with:\n\n\n if (obj instanceof String str) {\n System.out.println(str);\n }\n\nThis inspection only reports if the language level of the project or module is 16 or higher\n\nNew in 2020.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 16", + "index": 111, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AbstractMethodCallInConstructor", + "shortDescription": { + "text": "Abstract method called during object construction" + }, + "fullDescription": { + "text": "Reports calls to 'abstract' methods of the current class during object construction. A method is called during object construction if it is inside a: Constructor Non-static instance initializer Non-static field initializer 'clone()' method 'readObject()' method 'readObjectNoData()' method Such calls may result in subtle bugs, as object initialization may happen before the method call. Example: 'abstract class Parent {\n abstract void abstractMethod();\n }\n\n class Child extends Parent {\n Child() {\n abstractMethod();\n }\n }' This inspection shares the functionality with the following inspections: Overridable method called during object construction Overridden method called during object construction Only one inspection should be enabled at once to prevent warning duplication.", + "markdown": "Reports calls to `abstract` methods of the current class during object construction.\n\nA method is called during object construction if it is inside a:\n\n* Constructor\n* Non-static instance initializer\n* Non-static field initializer\n* `clone()` method\n* `readObject()` method\n* `readObjectNoData()` method\n\nSuch calls may result in subtle bugs, as object initialization may happen before the method call.\n\n**Example:**\n\n\n abstract class Parent {\n abstract void abstractMethod();\n }\n\n class Child extends Parent {\n Child() {\n abstractMethod();\n }\n }\n\nThis inspection shares the functionality with the following inspections:\n\n* Overridable method called during object construction\n* Overridden method called during object construction\n\nOnly one inspection should be enabled at once to prevent warning duplication." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Initialization", + "index": 28, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EqualsReplaceableByObjectsCall", + "shortDescription": { + "text": "'equals()' expression replaceable by 'Objects.equals()' expression" + }, + "fullDescription": { + "text": "Reports expressions that can be replaced with a call to 'java.util.Objects#equals'. Example: 'void f(Object a, Object b) {\n boolean result = a != null && a.equals(b);\n }' After the quick-fix is applied: 'void f(Object a, Object b) {\n boolean result = Objects.equals(a, b);\n }' Replacing expressions like 'a != null && a.equals(b)' with 'Objects.equals(a, b)' slightly changes the semantics. Use the Highlight expressions like 'a != null && a.equals(b)' option to enable or disable this behavior. This inspection only reports if the language level of the project or module is 7 or higher.", + "markdown": "Reports expressions that can be replaced with a call to `java.util.Objects#equals`.\n\n**Example:**\n\n\n void f(Object a, Object b) {\n boolean result = a != null && a.equals(b);\n }\n\nAfter the quick-fix is applied:\n\n\n void f(Object a, Object b) {\n boolean result = Objects.equals(a, b);\n }\n\n\nReplacing expressions like `a != null && a.equals(b)` with `Objects.equals(a, b)`\nslightly changes the semantics. Use the **Highlight expressions like 'a != null \\&\\& a.equals(b)'** option to enable or disable this behavior.\n\nThis inspection only reports if the language level of the project or module is 7 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 7", + "index": 112, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AnonymousClassVariableHidesContainingMethodVariable", + "shortDescription": { + "text": "Anonymous class variable hides variable in containing method" + }, + "fullDescription": { + "text": "Reports fields in an anonymous class that are named identically to local variables or parameters of the containing method or lambda expression. As a result of such naming, you may accidentally use the anonymous class field where the identically named variable or parameter from the containing method is intended. A quick-fix is suggested to rename the field. Example: 'class Test {\n public Test(String value) {\n Object foo = new Object() {\n private String value = \"TEST\";\n public void foo() {\n System.out.println(value); //the field is accessed, not the parameter\n }\n };\n }\n }'", + "markdown": "Reports fields in an anonymous class that are named identically to local variables or parameters of the containing method or lambda expression.\n\n\nAs a result of such naming, you may accidentally use the anonymous class field where\nthe identically named variable or parameter from the containing method is intended.\n\nA quick-fix is suggested to rename the field.\n\n**Example:**\n\n\n class Test {\n public Test(String value) {\n Object foo = new Object() {\n private String value = \"TEST\";\n public void foo() {\n System.out.println(value); //the field is accessed, not the parameter\n }\n };\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 54, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodRefCanBeReplacedWithLambda", + "shortDescription": { + "text": "Method reference can be replaced with lambda" + }, + "fullDescription": { + "text": "Reports method references, like 'MyClass::myMethod' and 'myObject::myMethod', and suggests replacing them with an equivalent lambda expression. Lambda expressions can be easier to modify than method references. Example: 'System.out::println' After the quick-fix is applied: 's -> System.out.println(s)' By default, this inspection does not highlight the code in the editor, but only provides a quick-fix.", + "markdown": "Reports method references, like `MyClass::myMethod` and `myObject::myMethod`, and suggests replacing them with an equivalent lambda expression.\n\nLambda expressions can be easier to modify than method references.\n\nExample:\n\n\n System.out::println\n\nAfter the quick-fix is applied:\n\n\n s -> System.out.println(s)\n\nBy default, this inspection does not highlight the code in the editor, but only provides a quick-fix." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TailRecursion", + "shortDescription": { + "text": "Tail recursion" + }, + "fullDescription": { + "text": "Reports tail recursion, that is, when a method calls itself as its last action before returning. Tail recursion can always be replaced by looping, which will be considerably faster. Some JVMs perform tail-call optimization, while others do not. Thus, tail-recursive solutions may have considerably different performance characteristics on different virtual machines. Example: 'int factorial(int val, int runningVal) {\n if (val == 1) {\n return runningVal;\n } else {\n return factorial(val - 1, runningVal * val);\n }\n }' After the quick-fix is applied: 'int factorial(int val, int runningVal) {\n while (true) {\n if (val == 1) {\n return runningVal;\n } else {\n runningVal = runningVal * val;\n val = val - 1;\n }\n }\n }'", + "markdown": "Reports tail recursion, that is, when a method calls itself as its last action before returning.\n\n\nTail recursion can always be replaced by looping, which will be considerably faster.\nSome JVMs perform tail-call optimization, while others do not. Thus, tail-recursive solutions may have considerably different\nperformance characteristics on different virtual machines.\n\nExample:\n\n\n int factorial(int val, int runningVal) {\n if (val == 1) {\n return runningVal;\n } else {\n return factorial(val - 1, runningVal * val);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n int factorial(int val, int runningVal) {\n while (true) {\n if (val == 1) {\n return runningVal;\n } else {\n runningVal = runningVal * val;\n val = val - 1;\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NestedSynchronizedStatement", + "shortDescription": { + "text": "Nested 'synchronized' statement" + }, + "fullDescription": { + "text": "Reports nested 'synchronized' statements. It is recommended to avoid nested synchronization if possible, because in some cases it may lead to a deadlock. Example: 'synchronized (lockA){\n //thread 1 is waiting for lockB\n synchronized (lockB){ //warning\n }\n }\n ...\n synchronized (lockB) {\n //thread 2 is waiting for lockA\n synchronized (lockA) { //warning\n }\n }'", + "markdown": "Reports nested `synchronized` statements. It is recommended to avoid nested synchronization if possible, because in some cases it may lead to a deadlock.\n\n**Example:**\n\n\n synchronized (lockA){\n //thread 1 is waiting for lockB\n synchronized (lockB){ //warning\n }\n }\n ...\n synchronized (lockB) {\n //thread 2 is waiting for lockA\n synchronized (lockA) { //warning\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringEqualsEmptyString", + "shortDescription": { + "text": "'String.equals()' can be replaced with 'String.isEmpty()'" + }, + "fullDescription": { + "text": "Reports 'equals()' being called to compare a 'String' with an empty string. In this case, using '.isEmpty()' is better as it shows you exactly what you're checking. Example: 'void checkString(String s){\n if (\"\".equals(s)) throw new IllegalArgumentException();\n }' After the quick-fix is applied: 'void checkString(String s){\n if (s != null && s.isEmpty()) throw new IllegalArgumentException();\n }' '\"\".equals(str)' returns false when 'str' is null. For safety, this inspection's quick-fix inserts an explicit null-check when the 'equals()' argument is nullable. Use the option to make the inspection ignore such cases.", + "markdown": "Reports `equals()` being called to compare a `String` with an empty string. In this case, using `.isEmpty()` is better as it shows you exactly what you're checking.\n\n**Example:**\n\n\n void checkString(String s){\n if (\"\".equals(s)) throw new IllegalArgumentException();\n }\n\nAfter the quick-fix is applied:\n\n\n void checkString(String s){\n if (s != null && s.isEmpty()) throw new IllegalArgumentException();\n }\n\n\n`\"\".equals(str)` returns false when `str` is null. For safety, this inspection's quick-fix inserts an explicit\nnull-check when\nthe `equals()` argument is nullable. Use the option to make the inspection ignore such cases." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IncorrectDateTimeFormat", + "shortDescription": { + "text": "Incorrect 'DateTimeFormat' pattern" + }, + "fullDescription": { + "text": "Reports incorrect date time format patterns. The following errors are reported: Unsupported pattern letters, like \"TT\" Using reserved characters, like \"#\" Incorrect use of padding Unbalanced brackets Incorrect amount of consecutive pattern letters Examples: 'DateTimeFormatter.ofPattern(\"[][]]\"); // Closing ']' without previous opening '['\n DateTimeFormatter.ofPattern(\"TT\"); // Illegal pattern letter 'T'\n DateTimeFormatter.ofPattern(\"{\"); // Use of reserved character '{'\n DateTimeFormatter.ofPattern(\"MMMMMM\"); // Too many consecutive pattern letters 'M'' New in 2022.3", + "markdown": "Reports incorrect date time format patterns.\n\nThe following errors are reported:\n\n* Unsupported pattern letters, like \"TT\"\n* Using reserved characters, like \"#\"\n* Incorrect use of padding\n* Unbalanced brackets\n* Incorrect amount of consecutive pattern letters\n\nExamples:\n\n\n DateTimeFormatter.ofPattern(\"[][]]\"); // Closing ']' without previous opening '['\n DateTimeFormatter.ofPattern(\"TT\"); // Illegal pattern letter 'T'\n DateTimeFormatter.ofPattern(\"{\"); // Use of reserved character '{'\n DateTimeFormatter.ofPattern(\"MMMMMM\"); // Too many consecutive pattern letters 'M'\n\nNew in 2022.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PreviewFeature", + "shortDescription": { + "text": "Preview Feature warning" + }, + "fullDescription": { + "text": "Reports usages of Preview Feature APIs, i.e. of a module, package, class, interface, method, constructor, field, or enum constant in the 'java.*' or 'javax.*' namespace annotated with '@PreviewFeature'. A preview feature is a new feature of the Java language, Java Virtual Machine, or Java SE API that is fully specified, fully implemented, and is yet impermanent. The notion of a preview feature is defined in JEP 12. If some piece of code depends on a preview API, it may stop compiling in future JDK versions if the feature is changed or removed. The inspection only reports if the language level of the project or module is Preview. New in 2021.1", + "markdown": "Reports usages of Preview Feature APIs, i.e. of a module, package, class, interface, method, constructor, field, or enum constant in the `java.*` or `javax.*` namespace annotated with `@PreviewFeature`.\n\n\nA preview feature is a new feature of the Java language, Java Virtual Machine, or Java SE API that is fully specified, fully implemented,\nand is yet impermanent. The notion of a preview feature is defined in [JEP 12](https://openjdk.org/jeps/12).\n\n\nIf some piece of code depends on a preview API, it may stop compiling in future JDK versions if the feature is changed or removed.\n\nThe inspection only reports if the language level of the project or module is **Preview**.\n\nNew in 2021.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Compiler issues", + "index": 90, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TooBroadThrows", + "shortDescription": { + "text": "Overly broad 'throws' clause" + }, + "fullDescription": { + "text": "Reports 'throws' clauses with exceptions that are more generic than the exceptions that the method actually throws. Example: 'public void createFile() throws Exception { // warning: 'throws Exception' is too broad, masking exception 'IOException'\n File file = new File(\"pathToFile\");\n file.createNewFile();\n }' After the quick-fix is applied: 'public void createFile() throws IOException {\n File file = new File(\"pathToFile\");\n file.createNewFile();\n }' Configure the inspection: Use the Only warn on RuntimeException, Exception, Error or Throwable option to have this inspection warn only on the most generic exceptions. Use the Ignore exceptions declared on methods overriding a library method option to ignore overly broad 'throws' clauses in methods that override a library method. Use the Ignore exceptions which hide others but are themselves thrown option to ignore any exceptions that hide other exceptions but still may be thrown from the method body and thus are technically not overly broad.", + "markdown": "Reports `throws` clauses with exceptions that are more generic than the exceptions that the method actually throws.\n\n**Example:**\n\n\n public void createFile() throws Exception { // warning: 'throws Exception' is too broad, masking exception 'IOException'\n File file = new File(\"pathToFile\");\n file.createNewFile();\n }\n\nAfter the quick-fix is applied:\n\n\n public void createFile() throws IOException {\n File file = new File(\"pathToFile\");\n file.createNewFile();\n }\n\nConfigure the inspection:\n\n* Use the **Only warn on RuntimeException, Exception, Error or Throwable** option to have this inspection warn only on the most generic exceptions.\n* Use the **Ignore exceptions declared on methods overriding a library method** option to ignore overly broad `throws` clauses in methods that override a library method.\n* Use the **Ignore exceptions which hide others but are themselves thrown** option to ignore any exceptions that hide other exceptions but still may be thrown from the method body and thus are technically not overly broad." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ImplicitSubclassInspection", + "shortDescription": { + "text": "Final declaration can't be overridden at runtime" + }, + "fullDescription": { + "text": "Reports cases when your code prevents a class from being subclassed by some framework (for example, Spring or Hibernate) at runtime. Typical examples of necessary but impossible subclassing: 'final' classes marked with framework-specific annotations (for example, Spring '@Configuration') 'final', 'static' or 'private' methods marked with framework-specific annotations (for example, Spring '@Transactional') methods marked with framework-specific annotations inside 'final' classes The list of reported cases depends on the frameworks used.", + "markdown": "Reports cases when your code prevents a class from being subclassed by some framework (for example, Spring or Hibernate) at runtime.\n\nTypical examples of necessary but impossible subclassing:\n\n* `final` classes marked with framework-specific annotations (for example, Spring `@Configuration`)\n* `final`, `static` or `private` methods marked with framework-specific annotations (for example, Spring `@Transactional`)\n* methods marked with framework-specific annotations inside `final` classes\n\nThe list of reported cases depends on the frameworks used." + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 25, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryFullyQualifiedName", + "shortDescription": { + "text": "Unnecessary fully qualified name" + }, + "fullDescription": { + "text": "Reports fully qualified class names that can be shortened. The quick-fix shortens fully qualified names and adds import statements if necessary. Example: 'class ListWrapper {\n java.util.List l;\n }' After the quick-fix is applied: 'import java.util.List;\n class ListWrapper {\n List l;\n }' Configure the inspection: Use the Ignore in Java 9 module statements option to ignore fully qualified names inside the Java 9 'provides' and 'uses' module statements. In Settings | Editor | Code Style | Java | Imports, use the following options to configure the inspection: Use the Insert imports for inner classes option if references to inner classes should be qualified with the outer class. Use the Use fully qualified class names in JavaDoc option to allow fully qualified names in Javadocs.", + "markdown": "Reports fully qualified class names that can be shortened.\n\nThe quick-fix shortens fully qualified names and adds import statements if necessary.\n\nExample:\n\n\n class ListWrapper {\n java.util.List l;\n }\n\nAfter the quick-fix is applied:\n\n\n import java.util.List;\n class ListWrapper {\n List l;\n }\n\nConfigure the inspection:\n\n\nUse the **Ignore in Java 9 module statements** option to ignore fully qualified names inside the Java 9\n`provides` and `uses` module statements.\n\n\nIn [Settings \\| Editor \\| Code Style \\| Java \\| Imports](settings://preferences.sourceCode.Java?JavaDoc%20Inner),\nuse the following options to configure the inspection:\n\n* Use the **Insert imports for inner classes** option if references to inner classes should be qualified with the outer class.\n* Use the **Use fully qualified class names in JavaDoc** option to allow fully qualified names in Javadocs." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NegatedConditional", + "shortDescription": { + "text": "Conditional expression with negated condition" + }, + "fullDescription": { + "text": "Reports conditional expressions whose conditions are negated. Flipping the order of the conditional expression branches usually increases the clarity of such statements. Use the Ignore '!= null' comparisons and Ignore '!= 0' comparisons options to ignore comparisons of the form 'obj != null' or 'num != 0'. Since 'obj != null' effectively means \"obj exists\", the meaning of the whole expression does not involve any negation and is therefore easy to understand. The same reasoning applies to 'num != 0' expressions, especially when using bit masks. These forms have the added benefit of mentioning the interesting case first. In most cases, the value for the '== null' branch is 'null' itself, like in the following examples: 'static String getName(Person p) {\n return p != null ? p.getName() : null;\n }\n\n static String getExecutableString(int fileMode) {\n return (fileMode & 0b001001001) != 0 ? \"executable\" : \"non-executable\";\n }'", + "markdown": "Reports conditional expressions whose conditions are negated.\n\nFlipping the order of the conditional expression branches usually increases the clarity of such statements.\n\n\nUse the **Ignore '!= null' comparisons** and **Ignore '!= 0' comparisons** options to ignore comparisons of the form\n`obj != null` or `num != 0`.\nSince `obj != null` effectively means \"obj exists\",\nthe meaning of the whole expression does not involve any negation\nand is therefore easy to understand.\n\n\nThe same reasoning applies to `num != 0` expressions, especially when using bit masks.\n\n\nThese forms have the added benefit of mentioning the interesting case first.\nIn most cases, the value for the `== null` branch is `null` itself,\nlike in the following examples:\n\n\n static String getName(Person p) {\n return p != null ? p.getName() : null;\n }\n\n static String getExecutableString(int fileMode) {\n return (fileMode & 0b001001001) != 0 ? \"executable\" : \"non-executable\";\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObjectEqualsCanBeEquality", + "shortDescription": { + "text": "'equals()' call can be replaced with '=='" + }, + "fullDescription": { + "text": "Reports calls to 'equals()' that can be replaced by '==' or '!=' expressions without a change in semantics. These calls can be replaced when they are used to compare 'final' classes that don't have their own 'equals()' implementation but use the default 'Object.equals()'. This replacement may result in better performance. There is a separate inspection for 'equals()' calls on 'enum' values: 'equals()' called on Enum value.", + "markdown": "Reports calls to `equals()` that can be replaced by `==` or `!=` expressions without a change in semantics.\n\nThese calls can be replaced when they are used to compare `final` classes that don't have their own `equals()` implementation but use the default `Object.equals()`.\nThis replacement may result in better performance.\n\nThere is a separate inspection for `equals()` calls on `enum` values: 'equals()' called on Enum value." + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JDBCPrepareStatementWithNonConstantString", + "shortDescription": { + "text": "Call to 'Connection.prepare*()' with non-constant string" + }, + "fullDescription": { + "text": "Reports calls to 'java.sql.Connection.prepareStatement()', 'java.sql.Connection.prepareCall()', or any of their variants which take a dynamically-constructed string as the statement to prepare. Constructed SQL statements are a common source of security breaches. By default, this inspection ignores compile-time constants. Example: 'String bar() { return \"bar\"; }\n\n Connection connection = DriverManager.getConnection(\"\", \"\", \"\");\n connection.(\"SELECT * FROM user WHERE name='\" + bar() + \"'\");' Use the inspection settings to consider any 'static' 'final' fields as constants. Be careful, because strings like the following will be ignored when the option is enabled: 'static final String SQL = \"SELECT * FROM user WHERE name='\" + getUserInput() + \"'\";'", + "markdown": "Reports calls to `java.sql.Connection.prepareStatement()`, `java.sql.Connection.prepareCall()`, or any of their variants which take a dynamically-constructed string as the statement to prepare.\n\n\nConstructed SQL statements are a common source of\nsecurity breaches. By default, this inspection ignores compile-time constants.\n\n**Example:**\n\n\n String bar() { return \"bar\"; }\n\n Connection connection = DriverManager.getConnection(\"\", \"\", \"\");\n connection.(\"SELECT * FROM user WHERE name='\" + bar() + \"'\");\n\nUse the inspection settings to consider any `static` `final` fields as constants. Be careful, because strings like the following will be ignored when the option is enabled:\n\n\n static final String SQL = \"SELECT * FROM user WHERE name='\" + getUserInput() + \"'\";\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 30, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BooleanParameter", + "shortDescription": { + "text": "'public' method with 'boolean' parameter" + }, + "fullDescription": { + "text": "Reports public methods that accept a 'boolean' parameter. It's almost always bad practice to add a 'boolean' parameter to a public method (part of an API) if that method is not a setter. When reading code using such a method, it can be difficult to decipher what the 'boolean' stands for without looking at the source or documentation. This problem is also known as the boolean trap. The 'boolean' parameter can often be replaced with an 'enum'. Example: '// Warning: it's hard to understand what the\n // boolean parameters mean when looking at\n // a call to this method\n public boolean setPermission(File f,\n int access,\n boolean enable,\n boolean ownerOnly) {\n // ...\n }' Use the Only report methods with multiple boolean parameters option to warn only when a method contains more than one boolean parameter.", + "markdown": "Reports public methods that accept a `boolean` parameter.\n\nIt's almost always bad practice to add a `boolean` parameter to a public method (part of an API) if that method is not a setter.\nWhen reading code using such a method, it can be difficult to decipher what the `boolean` stands for without looking at\nthe source or documentation.\n\nThis problem is also known as [the boolean trap](https://ariya.io/2011/08/hall-of-api-shame-boolean-trap).\nThe `boolean` parameter can often be replaced with an `enum`.\n\nExample:\n\n\n // Warning: it's hard to understand what the\n // boolean parameters mean when looking at\n // a call to this method\n public boolean setPermission(File f,\n int access,\n boolean enable,\n boolean ownerOnly) {\n // ...\n }\n\n\nUse the **Only report methods with multiple boolean parameters** option to warn only when a method contains more than one boolean parameter." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 75, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SystemProperties", + "shortDescription": { + "text": "Access of system properties" + }, + "fullDescription": { + "text": "Reports code that accesses system properties using one of the following methods: 'System.getProperties()', 'System.setProperty()', 'System.setProperties()', 'System.clearProperties()' 'Integer.getInteger()' 'Boolean.getBoolean()' While accessing the system properties is not a security risk in itself, it is often found in malicious code. Code that accesses system properties should be closely examined in any security audit.", + "markdown": "Reports code that accesses system properties using one of the following methods:\n\n* `System.getProperties()`, `System.setProperty()`, `System.setProperties()`, `System.clearProperties()`\n* `Integer.getInteger()`\n* `Boolean.getBoolean()`\n\n\nWhile accessing the system properties is not a security risk in itself, it is often found in malicious code.\nCode that accesses system properties should be closely examined in any security audit." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 30, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TestInProductSource", + "shortDescription": { + "text": "Test in product source" + }, + "fullDescription": { + "text": "Reports test classes and test methods that are located in production source trees. This most likely a mistake and can result in test code being shipped into production.", + "markdown": "Reports test classes and test methods that are located in production source trees. This most likely a mistake and can result in test code being shipped into production." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages/Test frameworks", + "index": 85, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CopyConstructorMissesField", + "shortDescription": { + "text": "Copy constructor misses field" + }, + "fullDescription": { + "text": "Reports copy constructors that don't copy all the fields of the class. 'final' fields with initializers and 'transient' fields are considered unnecessary to copy. Example: 'class Point {\n\n private int x;\n private int y;\n\n Point(int x, int y) {\n this.x = x;\n this.y = y;\n }\n\n Point(Point other) {\n // fields x and y are not initialized\n }\n }' New in 2018.1", + "markdown": "Reports copy constructors that don't copy all the fields of the class.\n\n\n`final` fields with initializers and `transient` fields are considered unnecessary to copy.\n\n**Example:**\n\n\n class Point {\n\n private int x;\n private int y;\n\n Point(int x, int y) {\n this.x = x;\n this.y = y;\n }\n\n Point(Point other) {\n // fields x and y are not initialized\n }\n }\n\nNew in 2018.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InvalidComparatorMethodReference", + "shortDescription": { + "text": "Invalid method reference used for 'Comparator'" + }, + "fullDescription": { + "text": "Reports method references mapped to the 'Comparator' interface that don't fulfill its contract. Some method references, like 'Integer::max', can be mapped to the 'Comparator' interface. However, using them as 'Comparator' is meaningless and the result might be unpredictable. Example: 'ArrayList ints = foo();\n ints.sort(Math::min);' After the quick-fix is applied: 'ArrayList ints = foo();\n ints.sort(Comparator.reverseOrder());'", + "markdown": "Reports method references mapped to the `Comparator` interface that don't fulfill its contract.\n\n\nSome method references, like `Integer::max`, can be mapped to the `Comparator` interface.\nHowever, using them as `Comparator` is meaningless and the result might be unpredictable.\n\nExample:\n\n\n ArrayList ints = foo();\n ints.sort(Math::min);\n\nAfter the quick-fix is applied:\n\n\n ArrayList ints = foo();\n ints.sort(Comparator.reverseOrder());\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CastCanBeRemovedNarrowingVariableType", + "shortDescription": { + "text": "Too weak variable type leads to unnecessary cast" + }, + "fullDescription": { + "text": "Reports type casts that can be removed if the variable type is narrowed to the cast type. Example: 'Object x = \" string \";\n System.out.println(((String)x).trim());' Here, changing the type of 'x' to 'String' makes the cast redundant. The suggested quick-fix updates the variable type and removes all redundant casts on that variable: 'String x = \" string \";\n System.out.println(x.trim());' New in 2018.2", + "markdown": "Reports type casts that can be removed if the variable type is narrowed to the cast type.\n\nExample:\n\n\n Object x = \" string \";\n System.out.println(((String)x).trim());\n\n\nHere, changing the type of `x` to `String` makes the cast redundant. The suggested quick-fix updates the variable type and\nremoves all redundant casts on that variable:\n\n\n String x = \" string \";\n System.out.println(x.trim());\n\nNew in 2018.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java9ModuleExportsPackageToItself", + "shortDescription": { + "text": "Module exports/opens package to itself" + }, + "fullDescription": { + "text": "Reports packages that are exported to, or opened in the same Java 9 module in which they are defined. The quick-fix removes such directives from 'module-info.java'. Example: 'module com.mycomp {\n exports com.mycomp.main to com.mycomp;\n }' After the quick-fix is applied: 'module main {\n }' This inspection only reports if the language level of the project or module is 9 or higher.", + "markdown": "Reports packages that are exported to, or opened in the same Java 9 module in which they are defined. The quick-fix removes such directives from `module-info.java`.\n\nExample:\n\n\n module com.mycomp {\n exports com.mycomp.main to com.mycomp;\n }\n\nAfter the quick-fix is applied:\n\n\n module main {\n }\n\nThis inspection only reports if the language level of the project or module is 9 or higher." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 54, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ToArrayCallWithZeroLengthArrayArgument", + "shortDescription": { + "text": "'Collection.toArray()' call style" + }, + "fullDescription": { + "text": "Reports 'Collection.toArray()' calls that are not in the preferred style, and suggests applying the preferred style. There are two styles to convert a collection to an array: A pre-sized array, for example, 'c.toArray(new String[c.size()])' An empty array, for example, 'c.toArray(new String[0])' In older Java versions, using a pre-sized array was recommended, as the reflection call necessary to create an array of proper size was quite slow. However, since late updates of OpenJDK 6, this call was intrinsified, making the performance of the empty array version the same, and sometimes even better, compared to the pre-sized version. Also, passing a pre-sized array is dangerous for a concurrent or synchronized collection as a data race is possible between the 'size' and 'toArray' calls. This may result in extra 'null's at the end of the array if the collection was concurrently shrunk during the operation. Use the inspection options to select the preferred style.", + "markdown": "Reports `Collection.toArray()` calls that are not in the preferred style, and suggests applying the preferred style.\n\nThere are two styles to convert a collection to an array:\n\n* A pre-sized array, for example, `c.toArray(new String[c.size()])`\n* An empty array, for example, `c.toArray(new String[0])`\n\nIn older Java versions, using a pre-sized array was recommended, as the reflection\ncall necessary to create an array of proper size was quite slow.\n\nHowever, since late updates of OpenJDK 6, this call was intrinsified, making\nthe performance of the empty array version the same, and sometimes even better, compared\nto the pre-sized version. Also, passing a pre-sized array is dangerous for a concurrent or\nsynchronized collection as a data race is possible between the `size` and `toArray`\ncalls. This may result in extra `null`s at the end of the array if the collection was concurrently\nshrunk during the operation.\n\nUse the inspection options to select the preferred style." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LoggerInitializedWithForeignClass", + "shortDescription": { + "text": "Logger initialized with foreign class" + }, + "fullDescription": { + "text": "Reports 'Logger' instances that are initialized with a 'class' literal from a different class than the 'Logger' is contained in. This can easily happen when copy-pasting some code from another class and may result in logging events under an unexpected category and cause filters to be applied incorrectly. A quick-fix is provided to replace the foreign class literal with one from the surrounding class. Example: 'public class Paramount {\n protected static final Logger LOG = Logger.getLogger(Critical.class);\n\n // ... other fields and methods\n }' After the quick-fix is applied: 'public class Paramount {\n protected static final Logger LOG = Logger.getLogger(Paramount.class);\n\n // ... other fields and methods\n }' Configure the inspection: Use the table to specify the logger factory classes and logger factory methods recognized by this inspection. Use the Ignore loggers initialized with a superclass option to ignore loggers that are initialized with a superclass of the class containing the logger. Use the Ignore loggers in non-public classes to only warn on loggers in 'public' classes.", + "markdown": "Reports `Logger` instances that are initialized with a `class` literal from a different class than the `Logger` is contained in. This can easily happen when copy-pasting some code from another class and may result in logging events under an unexpected category and cause filters to be applied incorrectly.\n\nA quick-fix is provided to replace the foreign class literal with one from the surrounding class.\n\n**Example:**\n\n\n public class Paramount {\n protected static final Logger LOG = Logger.getLogger(Critical.class);\n\n // ... other fields and methods\n }\n\nAfter the quick-fix is applied:\n\n\n public class Paramount {\n protected static final Logger LOG = Logger.getLogger(Paramount.class);\n\n // ... other fields and methods\n }\n\n\nConfigure the inspection:\n\n* Use the table to specify the logger factory classes and logger factory methods recognized by this inspection.\n* Use the **Ignore loggers initialized with a superclass** option to ignore loggers that are initialized with a superclass of the class containing the logger.\n* Use the **Ignore loggers in non-public classes** to only warn on loggers in `public` classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Logging", + "index": 64, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MarkerInterface", + "shortDescription": { + "text": "Marker interface" + }, + "fullDescription": { + "text": "Reports marker interfaces without any methods or fields. Such interfaces may be confusing and typically indicate a design failure. The inspection ignores interfaces that extend two or more interfaces and interfaces that specify the generic type of their superinterface.", + "markdown": "Reports marker interfaces without any methods or fields.\n\nSuch interfaces may be confusing and typically indicate a design failure.\n\nThe inspection ignores interfaces that extend two or more interfaces and interfaces\nthat specify the generic type of their superinterface." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CommentedOutCode", + "shortDescription": { + "text": "Commented out code" + }, + "fullDescription": { + "text": "Reports comments that contain Java code. Usually, code that is commented out gets outdated very quickly and becomes misleading. As most projects use some kind of version control system, it is better to delete commented out code completely and use the VCS history instead. New in 2020.3", + "markdown": "Reports comments that contain Java code.\n\nUsually, code that is commented out gets outdated very quickly and becomes misleading.\nAs most projects use some kind of version control system,\nit is better to delete commented out code completely and use the VCS history instead.\n\nNew in 2020.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code maturity", + "index": 49, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SortedCollectionWithNonComparableKeys", + "shortDescription": { + "text": "Sorted collection with non-comparable elements" + }, + "fullDescription": { + "text": "Reports construction of sorted collections, for example 'TreeSet', that rely on natural ordering, whose element type doesn't implement the 'Comparable' interface. It's unlikely that such a collection will work properly. A false positive is possible if the collection element type is a non-comparable super-type, but the collection is intended to only hold comparable sub-types. Even if this is the case, it's better to narrow the collection element type or declare the super-type as 'Comparable' because the mentioned approach is error-prone. The inspection also reports cases when the collection element is a type parameter which is not declared as 'extends Comparable'. You can suppress the warnings on type parameters using the provided option (for example, to keep the API compatibility). New in 2018.3", + "markdown": "Reports construction of sorted collections, for example `TreeSet`, that rely on natural ordering, whose element type doesn't implement the `Comparable` interface.\n\nIt's unlikely that such a collection will work properly.\n\n\nA false positive is possible if the collection element type is a non-comparable super-type,\nbut the collection is intended to only hold comparable sub-types. Even if this is the case,\nit's better to narrow the collection element type or declare the super-type as `Comparable` because the mentioned approach is error-prone.\n\n\nThe inspection also reports cases when the collection element is a type parameter which is not declared as `extends Comparable`.\nYou can suppress the warnings on type parameters using the provided option (for example, to keep the API compatibility).\n\n\nNew in 2018.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssignmentToStaticFieldFromInstanceMethod", + "shortDescription": { + "text": "Assignment to static field from instance context" + }, + "fullDescription": { + "text": "Reports assignment to, or modification of 'static' fields from within an instance method. Although legal, such assignments are tricky to do safely and are often a result of marking fields 'static' inadvertently. Example: 'class Counter {\n private static int count = 0;\n\n void increment() {\n // Warning: updating a static field\n // from an instance method\n count++;\n }\n }'", + "markdown": "Reports assignment to, or modification of `static` fields from within an instance method.\n\nAlthough legal, such assignments are tricky to do\nsafely and are often a result of marking fields `static` inadvertently.\n\n**Example:**\n\n\n class Counter {\n private static int count = 0;\n\n void increment() {\n // Warning: updating a static field\n // from an instance method\n count++;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Assignment issues", + "index": 36, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassWithoutLogger", + "shortDescription": { + "text": "Class without logger" + }, + "fullDescription": { + "text": "Reports classes which do not have a declared logger. Ensuring that every class has a dedicated logger is an important step in providing a unified logging implementation for an application. Interfaces, enumerations, annotations, inner classes, and abstract classes are not reported by this inspection. For example: 'public class NoLoggerDeclared {\n\n int calculateNthDigitOfPi(int n) {\n // todo\n return 1;\n }\n }' Use the table in the Options section to specify logger class names. Classes which do not declare a field with the type of one of the specified classes will be reported by this inspection.", + "markdown": "Reports classes which do not have a declared logger.\n\nEnsuring that every class has a dedicated logger is an important step in providing a unified logging\nimplementation for an application. Interfaces, enumerations, annotations, inner classes, and abstract classes are not reported by this inspection.\n\nFor example:\n\n\n public class NoLoggerDeclared {\n\n int calculateNthDigitOfPi(int n) {\n // todo\n return 1;\n }\n }\n\n\nUse the table in the **Options** section to specify logger class names.\nClasses which do not declare a field with the type of one of the specified classes will be reported by this inspection." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Logging", + "index": 64, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReturnOfInnerClass", + "shortDescription": { + "text": "Return of instance of anonymous, local or inner class" + }, + "fullDescription": { + "text": "Reports 'return' statements that return an instance of an anonymous, local, or inner class. Such instances keep an implicit reference to the outer instance, which can prevent the outer instance from being garbage-collected. Any caller of a method returning such an instance might cause a memory leak by holding on to the instance returned. Configure the inspection: Use the Ignore returns from non-public methods option to ignore returns from 'protected' or package-private methods. Returns from 'private' methods are always ignored.", + "markdown": "Reports `return` statements that return an instance of an anonymous, local, or inner class. Such instances keep an implicit reference to the outer instance, which can prevent the outer instance from being garbage-collected. Any caller of a method returning such an instance might cause a memory leak by holding on to the instance returned.\n\n\nConfigure the inspection:\n\n* Use the **Ignore returns from non-public methods** option to ignore returns from `protected` or package-private methods. Returns from `private` methods are always ignored." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Memory", + "index": 69, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AbstractClassWithOnlyOneDirectInheritor", + "shortDescription": { + "text": "Abstract class with a single direct inheritor" + }, + "fullDescription": { + "text": "Reports abstract classes that have precisely one direct inheritor. While such classes may offer admirable clarity of design, in memory-constrained or bandwidth-limited environments, they needlessly increase the total footprint of the application. Consider merging the abstract class with its inheritor. This inspection is intended for Java ME and other highly resource constrained environments. Applying the results of this inspection without consideration might have negative effects on code clarity and design. Example: 'abstract class Base {} // will be reported\n\n class Inheritor extends Base {}'", + "markdown": "Reports abstract classes that have precisely one direct inheritor. While such classes may offer admirable clarity of design, in memory-constrained or bandwidth-limited environments, they needlessly increase the total footprint of the application. Consider merging the abstract class with its inheritor.\n\n\nThis inspection is intended for Java ME and other highly resource constrained environments.\nApplying the results of this inspection without consideration might have negative effects on code clarity and design.\n\n**Example:**\n\n\n abstract class Base {} // will be reported\n\n class Inheritor extends Base {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance/Embedded", + "index": 21, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AnonymousClassComplexity", + "shortDescription": { + "text": "Overly complex anonymous class" + }, + "fullDescription": { + "text": "Reports anonymous inner classes whose total complexity exceeds the specified maximum. The total complexity of a class is the sum of cyclomatic complexities of all the methods and initializers the class declares. Inherited methods and initializers are not counted toward the total complexity. Anonymous classes should have very low complexity otherwise they are hard to understand and should be promoted to become named inner classes. Use the Cyclomatic complexity limit field to specify the maximum allowed complexity for a class.", + "markdown": "Reports anonymous inner classes whose total complexity exceeds the specified maximum.\n\nThe total complexity of a class is the sum of cyclomatic complexities of all the methods\nand initializers the class declares. Inherited methods and initializers are not counted\ntoward the total complexity.\n\nAnonymous classes should have very low complexity otherwise they are hard to understand and should be promoted to become named inner classes.\n\nUse the **Cyclomatic complexity limit** field to specify the maximum allowed complexity for a class." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class metrics", + "index": 87, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WaitWithoutCorrespondingNotify", + "shortDescription": { + "text": "'wait()' without corresponding 'notify()'" + }, + "fullDescription": { + "text": "Reports calls to 'Object.wait()', for which no call to the corresponding 'Object.notify()' or 'Object.notifyAll()' can be found. This inspection only reports calls with qualifiers referencing fields of the current class. Example: 'public class Foo {\n public Object foo = new Object();\n\n void bar() throws InterruptedException {\n this.foo.wait();\n }\n }'", + "markdown": "Reports calls to `Object.wait()`, for which no call to the corresponding `Object.notify()` or `Object.notifyAll()` can be found.\n\nThis inspection only reports calls with qualifiers referencing fields of the current class.\n\n**Example:**\n\n\n public class Foo {\n public Object foo = new Object();\n\n void bar() throws InterruptedException {\n this.foo.wait();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnsecureRandomNumberGeneration", + "shortDescription": { + "text": "Insecure random number generation" + }, + "fullDescription": { + "text": "Reports any uses of 'java.lang.Random' or 'java.lang.Math.random()'. In secure environments, 'java.secure.SecureRandom' is a better choice, since is offers cryptographically secure random number generation. Example: 'long token = new Random().nextLong();'", + "markdown": "Reports any uses of `java.lang.Random` or `java.lang.Math.random()`.\n\n\nIn secure environments,\n`java.secure.SecureRandom` is a better choice, since is offers cryptographically secure\nrandom number generation.\n\n**Example:**\n\n\n long token = new Random().nextLong();\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 30, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NullableProblems", + "shortDescription": { + "text": "@NotNull/@Nullable problems" + }, + "fullDescription": { + "text": "Reports problems related to nullability annotations. Examples: Overriding methods are not annotated: 'abstract class A {\n @NotNull abstract String m();\n}\nclass B extends A {\n String m() { return \"empty string\"; }\n}' Annotated primitive types: '@NotNull int myFoo;' Both '@Nullable' and '@NotNull' are present on the same member: '@Nullable @NotNull String myFooString;' Collection of nullable elements is assigned into a collection of non-null elements: 'void testList(List<@Nullable String> nullableList) {\n List<@NotNull String> list2 = nullableList;\n}' Use the Configure Annotations button to specify nullability annotations and the checkboxes to fine-tune where the inspection should provide warnings. This inspection only reports if the language level of the project or module is 5 or higher, and nullability annotations are available on the classpath.", + "markdown": "Reports problems related to nullability annotations.\n\n**Examples:**\n\n* Overriding methods are not annotated:\n\n\n abstract class A {\n @NotNull abstract String m();\n }\n class B extends A {\n String m() { return \"empty string\"; }\n }\n \n* Annotated primitive types: `@NotNull int myFoo;`\n* Both `@Nullable` and `@NotNull` are present on the same member: `@Nullable @NotNull String myFooString;`\n* Collection of nullable elements is assigned into a collection of non-null elements:\n\n\n void testList(List<@Nullable String> nullableList) {\n List<@NotNull String> list2 = nullableList;\n }\n \nUse the **Configure Annotations** button to specify nullability annotations and the checkboxes to fine-tune where the inspection should provide warnings.\n\nThis inspection only reports if the language level of the project or module is 5 or higher,\nand nullability annotations are available on the classpath." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs/Nullability problems", + "index": 115, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseOfAWTPeerClass", + "shortDescription": { + "text": "Use of AWT peer class" + }, + "fullDescription": { + "text": "Reports uses of AWT peer classes. Such classes represent native windowing system widgets, and will be non-portable between different windowing systems. Example: 'import java.awt.peer.ButtonPeer;\n\n abstract class Sample implements ButtonPeer {\n public void foo() {\n Sample sample;\n }\n }'", + "markdown": "Reports uses of AWT peer classes. Such classes represent native windowing system widgets, and will be non-portable between different windowing systems.\n\n**Example:**\n\n\n import java.awt.peer.ButtonPeer;\n\n abstract class Sample implements ButtonPeer {\n public void foo() {\n Sample sample;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Portability", + "index": 7, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EqualsBetweenInconvertibleTypes", + "shortDescription": { + "text": "'equals()' between objects of inconvertible types" + }, + "fullDescription": { + "text": "Reports calls to 'equals()' where the target and argument are of incompatible types. While such a call might theoretically be useful, most likely it is a bug. Example: 'new HashSet().equals(new TreeSet());'", + "markdown": "Reports calls to `equals()` where the target and argument are of incompatible types.\n\nWhile such a call might theoretically be useful, most likely it is a bug.\n\n**Example:**\n\n\n new HashSet().equals(new TreeSet());\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SynchronizationOnGetClass", + "shortDescription": { + "text": "Synchronization on 'getClass()'" + }, + "fullDescription": { + "text": "Reports synchronization on a call to 'getClass()'. If the class containing the synchronization is subclassed, the subclass will synchronize on a different class object. Usually the call to 'getClass()' can be replaced with a class literal expression, for example 'String.class'. An even better solution is synchronizing on a 'private static final' lock object, access to which can be completely controlled. Example: 'synchronized(getClass()) {}'", + "markdown": "Reports synchronization on a call to `getClass()`.\n\n\nIf the class containing the synchronization is subclassed, the subclass\nwill\nsynchronize on a different class object. Usually the call to `getClass()` can be replaced with a class literal expression, for\nexample `String.class`. An even better solution is synchronizing on a `private static final` lock object, access to\nwhich can be completely controlled.\n\n**Example:**\n\n synchronized(getClass()) {}\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantExplicitVariableType", + "shortDescription": { + "text": "Local variable type can be omitted" + }, + "fullDescription": { + "text": "Reports redundant local variable types. These types can be inferred from the context and thus replaced with 'var'. Example: 'void test(InputStream s) {\n try (InputStream in = s) {}\n }' After the fix is applied: 'void test(InputStream s) {\n try (var in = s) {}\n }'", + "markdown": "Reports redundant local variable types.\n\nThese types can be inferred from the context and thus replaced with `var`.\n\n**Example:**\n\n\n void test(InputStream s) {\n try (InputStream in = s) {}\n }\n\nAfter the fix is applied:\n\n\n void test(InputStream s) {\n try (var in = s) {}\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 10", + "index": 110, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DuplicateCondition", + "shortDescription": { + "text": "Duplicate condition" + }, + "fullDescription": { + "text": "Reports duplicate conditions in '&&' and '||' expressions and branches of 'if' statements. While sometimes duplicate conditions are intended, in most cases they the result of an oversight. Example: 'boolean result = digit1 != digit2 || digit1 != digit2;' To ignore conditions that may produce side effects, use the Ignore conditions with side effects option. Disabling this option may lead to false-positives, for example, when the same method returns different values on subsequent invocations. Example: 'if (iterator.next() != null || iterator.next() != null) {\n System.out.println(\"Got it\");\n }' Due to possible side effects of 'iterator.next()' (on the example), the warning will only be triggered if the Ignore conditions with side effects option is disabled.", + "markdown": "Reports duplicate conditions in `&&` and `||` expressions and branches of `if` statements. While sometimes duplicate conditions are intended, in most cases they the result of an oversight.\n\nExample:\n\n\n boolean result = digit1 != digit2 || digit1 != digit2;\n\n\nTo ignore conditions that may produce side effects, use the **Ignore conditions with side effects** option.\nDisabling this option may lead to false-positives, for example, when the same method returns different values on subsequent invocations.\n\nExample:\n\n\n if (iterator.next() != null || iterator.next() != null) {\n System.out.println(\"Got it\");\n }\n\nDue to possible side effects of `iterator.next()` (on the example), the warning will only be\ntriggered if the **Ignore conditions with side effects** option is disabled." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThrownExceptionsPerMethod", + "shortDescription": { + "text": "Method with too many exceptions declared" + }, + "fullDescription": { + "text": "Reports methods that have too many types of exceptions in its 'throws' list. Methods with too many exceptions declared are a good sign that your error handling code is getting overly complex. Use the Exceptions thrown limit field to specify the maximum number of exception types a method is allowed to have in its 'throws' list.", + "markdown": "Reports methods that have too many types of exceptions in its `throws` list.\n\nMethods with too many exceptions declared are a good sign that your error handling code is getting overly complex.\n\nUse the **Exceptions thrown limit** field to specify the maximum number of exception types a method is allowed to have in its `throws` list." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Method metrics", + "index": 95, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantThrows", + "shortDescription": { + "text": "Redundant 'throws' clause" + }, + "fullDescription": { + "text": "Reports exceptions that are declared in a method's signature but never thrown by the method itself or its implementations and overriding methods. The inspection ignores methods related to serialization, for example the methods 'readObject()' and 'writeObject()'. Example: 'void method() throws InterruptedException {\n System.out.println();\n }' The quick-fix removes unnecessary exceptions from the declaration and normalizes redundant 'try'-'catch' statements: 'void method() {\n System.out.println();\n }' Note: Some exceptions may not be reported during in-editor highlighting for performance reasons. To see all results, run the inspection by selecting Code | Inspect Code or Code | Analyze Code | Run Inspection by Name from the main menu. Use the Ignore exceptions thrown by entry point methods option to not report exceptions thrown by for example 'main()' methods. Entry point methods can be configured in the settings of the Java | Declaration redundancy | Unused declaration inspection.", + "markdown": "Reports exceptions that are declared in a method's signature but never thrown by the method itself or its implementations and overriding methods.\n\nThe inspection ignores methods related to serialization, for example the methods `readObject()` and `writeObject()`.\n\n**Example:**\n\n\n void method() throws InterruptedException {\n System.out.println();\n }\n\nThe quick-fix removes unnecessary exceptions from the declaration and normalizes redundant `try`-`catch` statements:\n\n\n void method() {\n System.out.println();\n }\n\n\n**Note:** Some exceptions may not be reported during in-editor highlighting for performance reasons.\nTo see all results, run the inspection by selecting **Code \\| Inspect Code** or **Code \\| Analyze Code \\| Run Inspection by Name** from the main menu.\n\nUse the **Ignore exceptions thrown by entry point methods** option to not report exceptions thrown by\nfor example `main()` methods.\nEntry point methods can be configured in the settings of the\n[Java \\| Declaration redundancy \\| Unused declaration](settings://Errors?Unused%20Declaration%20entry%20point) inspection.\n\n
    " + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 15, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SerializableWithUnconstructableAncestor", + "shortDescription": { + "text": "Serializable class with unconstructable ancestor" + }, + "fullDescription": { + "text": "Reports 'Serializable' classes whose closest non-serializable ancestor doesn't have a no-argument constructor. Such classes cannot be deserialized and will fail with an 'InvalidClassException'. Example: 'class Ancestor {\n private String name;\n Ancestor(String name) {\n this.name = name;\n }\n }\n\n // warning on this class because the superclass is not\n // serializable, and its constructor takes arguments\n class Descendant extends Ancestor implements Serializable {\n Descendant() {\n super(\"Bob\");\n }\n }'", + "markdown": "Reports `Serializable` classes whose closest non-serializable ancestor doesn't have a no-argument constructor. Such classes cannot be deserialized and will fail with an `InvalidClassException`.\n\n**Example:**\n\n\n class Ancestor {\n private String name;\n Ancestor(String name) {\n this.name = name;\n }\n }\n\n // warning on this class because the superclass is not\n // serializable, and its constructor takes arguments\n class Descendant extends Ancestor implements Serializable {\n Descendant() {\n super(\"Bob\");\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 18, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExcessiveLambdaUsage", + "shortDescription": { + "text": "Excessive lambda usage" + }, + "fullDescription": { + "text": "Reports if a trivial lambda expression is used in cases in which there's an alternative method that behaves in the same way, but accepts a concrete value instead of a lambda. This inspection helps simplify the code. Example: 'Optional.orElseGet(() -> null)' After the quick-fix is applied: 'Optional.orElse(null)' New in 2017.1", + "markdown": "Reports if a trivial lambda expression is used in cases in which there's an alternative method that behaves in the same way, but accepts a concrete value instead of a lambda.\n\nThis inspection helps simplify the code.\n\nExample:\n\n\n Optional.orElseGet(() -> null)\n\nAfter the quick-fix is applied:\n\n\n Optional.orElse(null)\n\nNew in 2017.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LambdaBodyCanBeCodeBlock", + "shortDescription": { + "text": "Lambda body can be code block" + }, + "fullDescription": { + "text": "Reports lambdas whose body is an expression and suggests converting expression bodies to code blocks. Example: 'n -> n + 1' After the quick-fix is applied: 'n -> {\n return n + 1;\n}'", + "markdown": "Reports lambdas whose body is an expression and suggests converting expression bodies to code blocks.\n\nExample:\n\n\n n -> n + 1\n\nAfter the quick-fix is applied:\n\n n -> {\n return n + 1;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ParameterHidingMemberVariable", + "shortDescription": { + "text": "Parameter hides field" + }, + "fullDescription": { + "text": "Reports method parameters named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the parameter when using the identically named field is intended. A quick-fix is suggested to rename the parameter. Example: 'class Main {\n private String value;\n\n public Main(String value) {\n value = value.toUpperCase();\n }\n }' You can configure the following options for this inspection: Ignore for property setters - ignore parameters of simple setters. Ignore superclass fields not visible from subclass - ignore 'private' fields in a superclass, which are not visible from the method. Ignore for constructors - ignore parameters of constructors. Ignore for abstract methods - ignore parameters of abstract methods. Ignore for static method parameters hiding instance fields - ignore parameters of 'static' methods hiding an instance field and to ignore parameters of instance methods in static inner classes hiding an instance field of an outer class. While not strictly hiding, such parameters can still be confusing.", + "markdown": "Reports method parameters named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the parameter when using the identically named field is intended.\n\nA quick-fix is suggested to rename the parameter.\n\n**Example:**\n\n\n class Main {\n private String value;\n\n public Main(String value) {\n value = value.toUpperCase();\n }\n }\n \n\nYou can configure the following options for this inspection:\n\n1. **Ignore for property setters** - ignore parameters of simple setters.\n2. **Ignore superclass fields not visible from subclass** - ignore `private` fields in a superclass, which are not visible from the method.\n3. **Ignore for constructors** - ignore parameters of constructors.\n4. **Ignore for abstract methods** - ignore parameters of abstract methods.\n5. **Ignore for static method parameters hiding instance fields** - ignore parameters of `static` methods hiding an instance field and to ignore parameters of instance methods in static inner classes hiding an instance field of an outer class. While not strictly hiding, such parameters can still be confusing." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 54, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseOfAnotherObjectsPrivateField", + "shortDescription": { + "text": "Accessing a non-public field of another object" + }, + "fullDescription": { + "text": "Reports accesses to 'private' or 'protected' fields of another object. Java allows access to such fields for objects of the same class as the current object but some coding styles discourage this use. Additionally, such direct access to 'private' fields may fail in component-oriented architectures, such as Spring or Hibernate, that expect all access to other objects to be through method calls so the framework can mediate access using proxies. Example: 'public class Base {\n protected int bar;\n\n void increment(Base base) {\n bar++;\n base.bar++; // warning: direct access to another object's non-public field\n }\n }' A quick-fix to encapsulate the field is available. Configure the inspection: Use the Ignore accesses from the same class option to ignore access from the same class and only report access from inner or outer classes. To ignore access from inner classes as well, use the nested Ignore accesses from inner classes. Use the Ignore accesses from 'equals()' method to ignore access from an 'equals()' method.", + "markdown": "Reports accesses to `private` or `protected` fields of another object. Java allows access to such fields for objects of the same class as the current object but some coding styles discourage this use. Additionally, such direct access to `private` fields may fail in component-oriented architectures, such as Spring or Hibernate, that expect all access to other objects to be through method calls so the framework can mediate access using proxies.\n\n**Example:**\n\n\n public class Base {\n protected int bar;\n\n void increment(Base base) {\n bar++;\n base.bar++; // warning: direct access to another object's non-public field\n }\n }\n\nA quick-fix to encapsulate the field is available.\n\nConfigure the inspection:\n\n* Use the **Ignore accesses from the same class** option to ignore access from the same class and only report access from inner or outer classes.\n\n To ignore access from inner classes as well, use the nested **Ignore accesses from inner classes**.\n* Use the **Ignore accesses from 'equals()' method** to ignore access from an `equals()` method." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Encapsulation", + "index": 57, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PointlessBitwiseExpression", + "shortDescription": { + "text": "Pointless bitwise expression" + }, + "fullDescription": { + "text": "Reports pointless bitwise expressions. Such expressions include applying the '&' operator to the maximum value for the given type, applying the 'or' operator to zero, and shifting by zero. Such expressions may be the result of automated refactorings not followed through to completion and are unlikely to be originally intended. Examples: '// Warning: operation is pointless and can be replaced with just `flags`\n // 0xFFFF_FFFF is the maximum value for an integer, and both literals are treated\n // as 32 bit integer literals.\n int bits = flags & 0xFFFF_FFFF;\n\n // Warning: operation is pointless and can be replaced with just `bits`\n // OR-ing with 0 always outputs the other operand.\n int or = bits | 0x0;\n\n // Warning: operation is pointless, as always results in 0\n int xor = or ^ or;'", + "markdown": "Reports pointless bitwise expressions.\n\n\nSuch expressions include applying the `&` operator to the maximum value for the given type, applying the\n`or` operator to zero, and shifting by zero. Such expressions may be the result of automated\nrefactorings not followed through to completion and are unlikely to be originally intended.\n\n**Examples:**\n\n\n // Warning: operation is pointless and can be replaced with just `flags`\n // 0xFFFF_FFFF is the maximum value for an integer, and both literals are treated\n // as 32 bit integer literals.\n int bits = flags & 0xFFFF_FFFF;\n\n // Warning: operation is pointless and can be replaced with just `bits`\n // OR-ing with 0 always outputs the other operand.\n int or = bits | 0x0;\n\n // Warning: operation is pointless, as always results in 0\n int xor = or ^ or;\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Bitwise operation issues", + "index": 97, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CustomSecurityManager", + "shortDescription": { + "text": "Custom 'SecurityManager'" + }, + "fullDescription": { + "text": "Reports user-defined subclasses of 'java.lang.SecurityManager'. While not necessarily representing a security hole, such classes should be thoroughly and professionally inspected for possible security issues. Example: 'class CustomSecurityManager extends SecurityManager {\n }'", + "markdown": "Reports user-defined subclasses of `java.lang.SecurityManager`.\n\n\nWhile not necessarily representing a security hole, such classes should be thoroughly\nand professionally inspected for possible security issues.\n\n**Example:**\n\n\n class CustomSecurityManager extends SecurityManager {\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 30, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TimeToString", + "shortDescription": { + "text": "Call to 'Time.toString()'" + }, + "fullDescription": { + "text": "Reports 'toString()' calls on 'java.sql.Time' objects. Such calls are usually incorrect in an internationalized environment.", + "markdown": "Reports `toString()` calls on `java.sql.Time` objects. Such calls are usually incorrect in an internationalized environment." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 9, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObjectEquality", + "shortDescription": { + "text": "Object comparison using '==', instead of 'equals()'" + }, + "fullDescription": { + "text": "Reports code that uses '==' or '!=' rather than 'equals()' to test for 'Object' equality. Comparing objects using '==' or '!=' is often a bug, because it compares objects by identity instead of equality. Comparisons to 'null' are not reported. Array, 'String' and 'Number' comparisons are reported by separate inspections. Example: 'if (list1 == list2) {\n return;\n }' After the quick-fix is applied: 'if (Object.equals(list1, list2)) {\n return;\n }' Use the inspection settings to configure exceptions for this inspection.", + "markdown": "Reports code that uses `==` or `!=` rather than `equals()` to test for `Object` equality.\n\nComparing objects using `==` or `!=` is often a bug, because it compares objects by identity instead of\nequality.\nComparisons to `null` are not reported.\nArray, `String` and `Number` comparisons are reported by separate inspections.\n\n**Example:**\n\n if (list1 == list2) {\n return;\n }\n\nAfter the quick-fix is applied:\n\n if (Object.equals(list1, list2)) {\n return;\n }\n\n\nUse the inspection settings to configure exceptions for this inspection." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DuplicateThrows", + "shortDescription": { + "text": "Duplicate throws" + }, + "fullDescription": { + "text": "Reports duplicate exceptions in a method 'throws' list. Example: 'void f() throws Exception, Exception {}' After the quick-fix is applied: 'void f() throws Exception {}' Use the Ignore exceptions subclassing others option to ignore exceptions subclassing other exceptions.", + "markdown": "Reports duplicate exceptions in a method `throws` list.\n\nExample:\n\n\n void f() throws Exception, Exception {}\n\nAfter the quick-fix is applied:\n\n\n void f() throws Exception {}\n\n\nUse the **Ignore exceptions subclassing others** option to ignore exceptions subclassing other exceptions." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 15, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnstableTypeUsedInSignature", + "shortDescription": { + "text": "Unstable type is used in signature" + }, + "fullDescription": { + "text": "Reports declarations of classes, methods, and fields that reference an unstable API type in the signature, but are not marked with the same unstable annotation. This inspection ensures that the signatures of a public API do not expose any unstable (internal, experimental) types. For example, if a method returns an experimental class, the method itself is considered experimental because incompatible changes of the type (deletion or move to another package) lead to incompatible method signature changes. Use the list below to specify which annotations mark an unstable API.", + "markdown": "Reports declarations of classes, methods, and fields that reference an unstable API type in the signature, but are not marked with the same unstable annotation.\n\n\nThis inspection ensures that the signatures of a public API do not expose any *unstable* (internal, experimental) types.\nFor example, if a method returns an *experimental* class, the method itself is considered *experimental*\nbecause incompatible changes of the type (deletion or move to another package) lead to incompatible method signature changes.\n\nUse the list below to specify which annotations mark an unstable API." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 4, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PrivateMemberAccessBetweenOuterAndInnerClass", + "shortDescription": { + "text": "Synthetic accessor call" + }, + "fullDescription": { + "text": "Reports references from a nested class to non-constant 'private' members of an outer class. For such references, javac will generate package-private synthetic accessor methods, which may compromise the security because members appearing to be private will in fact be accessible from the entire package. A nested class and its outer class are compiled to separate class files. The Java virtual machine normally prohibits access from a class to private fields and methods of another class. To enable access from a nested class to private members of an outer class, javac creates a package-private synthetic accessor method. By making the 'private' member package-private instead, the actual accessibility is made explicit. This also saves a little bit of memory, which may improve performance in resource constrained environments. This inspection only reports if the language level of the project or module is 10 or lower. Under Java 11 and higher accessor methods are not generated anymore, because of nest-based access control (JEP 181). Example: 'class Outer {\n private void x() {}\n\n class Inner {\n void y() {\n x();\n }\n }\n }' After the quick fix is applied: 'class Outer {\n void x() {}\n\n class Inner {\n void y() {\n x();\n }\n }\n }'", + "markdown": "Reports references from a nested class to non-constant `private` members of an outer class. For such references, javac will generate package-private synthetic accessor methods, which may compromise the security because members appearing to be private will in fact be accessible from the entire package.\n\n\nA nested class and its outer class are compiled to separate\nclass files. The Java virtual machine normally prohibits access from a class to private fields and methods of\nanother class. To enable access from a nested class to private members of an outer class, javac creates a package-private\nsynthetic accessor method.\n\n\nBy making the `private` member package-private instead, the actual accessibility is made explicit.\nThis also saves a little bit of memory, which may improve performance in resource constrained environments.\n\n\nThis inspection only reports if the language level of the project or module is 10 or lower.\nUnder Java 11 and higher accessor methods are not generated anymore,\nbecause of nest-based access control ([JEP 181](https://openjdk.org/jeps/181)).\n\n**Example:**\n\n\n class Outer {\n private void x() {}\n\n class Inner {\n void y() {\n x();\n }\n }\n }\n\nAfter the quick fix is applied:\n\n\n class Outer {\n void x() {}\n\n class Inner {\n void y() {\n x();\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance/Embedded", + "index": 21, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassIndependentOfModule", + "shortDescription": { + "text": "Class independent of its module" + }, + "fullDescription": { + "text": "Reports classes that: do not depend on any other class in their module are not a dependency for any other class in their module Such classes are an indication of ad-hoc or incoherent modularisation strategies, and may often profitably be moved. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports classes that:\n\n* do not depend on any other class in their module\n* are not a dependency for any other class in their module\n\nSuch classes are an indication of ad-hoc or incoherent modularisation strategies,\nand may often profitably be moved.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Modularization issues", + "index": 65, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SystemRunFinalizersOnExit", + "shortDescription": { + "text": "Call to 'System.runFinalizersOnExit()'" + }, + "fullDescription": { + "text": "Reports calls to 'System.runFinalizersOnExit()'. This call is one of the most dangerous in the Java language. It is inherently non-thread-safe, may result in data corruption, a deadlock, and may affect parts of the program far removed from its call point. It is deprecated and was removed in JDK 11, and its use is strongly discouraged. This inspection only reports if the language level of the project or module is 10 or lower.", + "markdown": "Reports calls to `System.runFinalizersOnExit()`.\n\n\nThis call is one of the most dangerous in the Java language. It is inherently non-thread-safe,\nmay result in data corruption, a deadlock, and may affect parts of the program far removed from its call point.\nIt is deprecated and was removed in JDK 11, and its use is strongly discouraged.\n\nThis inspection only reports if the language level of the project or module is 10 or lower." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceInefficientStreamCount", + "shortDescription": { + "text": "Inefficient Stream API call chains ending with count()" + }, + "fullDescription": { + "text": "Reports Stream API call chains ending with the 'count()' operation that could be optimized. The following call chains are replaced by this inspection: 'Collection.stream().count()' → 'Collection.size()'. In Java 8 'Collection.stream().count()' actually iterates over the collection elements to count them, while 'Collection.size()' is much faster for most of the collections. 'Stream.flatMap(Collection::stream).count()' → 'Stream.mapToLong(Collection::size).sum()'. Similarly, there's no need to iterate over all the nested collections. Instead, their sizes could be summed up. 'Stream.filter(o -> ...).count() > 0' → 'Stream.anyMatch(o -> ...)'. Unlike the original call, 'anyMatch()' may stop the computation as soon as a matching element is found. 'Stream.filter(o -> ...).count() == 0' → 'Stream.noneMatch(o -> ...)'. Similar to the above. Note that if the replacement involves a short-circuiting operation like 'anyMatch()', there could be a visible behavior change, if the intermediate stream operations produce side effects. In general, side effects should be avoided in Stream API calls.", + "markdown": "Reports Stream API call chains ending with the `count()` operation that could be optimized.\n\n\nThe following call chains are replaced by this inspection:\n\n* `Collection.stream().count()` → `Collection.size()`. In Java 8 `Collection.stream().count()` actually iterates over the collection elements to count them, while `Collection.size()` is much faster for most of the collections.\n* `Stream.flatMap(Collection::stream).count()` → `Stream.mapToLong(Collection::size).sum()`. Similarly, there's no need to iterate over all the nested collections. Instead, their sizes could be summed up.\n* `Stream.filter(o -> ...).count() > 0` → `Stream.anyMatch(o -> ...)`. Unlike the original call, `anyMatch()` may stop the computation as soon as a matching element is found.\n* `Stream.filter(o -> ...).count() == 0` → `Stream.noneMatch(o -> ...)`. Similar to the above.\n\n\nNote that if the replacement involves a short-circuiting operation like `anyMatch()`, there could be a visible behavior change,\nif the intermediate stream operations produce side effects. In general, side effects should be avoided in Stream API calls." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ParameterTypePreventsOverriding", + "shortDescription": { + "text": "Parameter type prevents overriding" + }, + "fullDescription": { + "text": "Reports parameter types of a subclass method that have the same name as the parameter type of the corresponding super method but belong to a different package. In these cases, the subclass method cannot override the super method. Example: 'public class A {\n public void method(Object o) {}\n}\n\npublic class B extends A {\n public void method(Object o) {} // warning on parameter type\n class Object {}\n}' After the quick-fix is applied: 'public class A {\n public void method(Object o) {}\n}\n\npublic class B extends A {\n public void method(java.lang.Object o) {} // new parameter type\n class Object {}\n}'", + "markdown": "Reports parameter types of a subclass method that have the same name as the parameter type of the corresponding super method but belong to a different package. In these cases, the subclass method cannot override the super method.\n\n**Example:**\n\n\n public class A {\n public void method(Object o) {}\n }\n\n public class B extends A {\n public void method(Object o) {} // warning on parameter type\n class Object {}\n }\n\nAfter the quick-fix is applied:\n\n\n public class A {\n public void method(Object o) {}\n }\n\n public class B extends A {\n public void method(java.lang.Object o) {} // new parameter type\n class Object {}\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 25, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ManualArrayToCollectionCopy", + "shortDescription": { + "text": "Manual array to collection copy" + }, + "fullDescription": { + "text": "Reports code that uses a loop to copy the contents of an array into a collection. A shorter and potentially faster (depending on the collection implementation) way to do this is using 'Collection.addAll(Arrays.asList())' or 'Collections.addAll()'. Only loops without additional statements inside are reported. Example: 'void addAll(List list, String[] arr) {\n for (int i = 0; i < arr.length; i++) {\n String s = arr[i];\n list.add(s);\n }\n }' After the quick-fix is applied: 'void addAll(List list, String[] arr) {\n Collections.addAll(list, arr);\n }'", + "markdown": "Reports code that uses a loop to copy the contents of an array into a collection.\n\n\nA shorter and potentially faster (depending on the collection implementation) way to do this is using `Collection.addAll(Arrays.asList())` or `Collections.addAll()`.\n\n\nOnly loops without additional statements inside are reported.\n\n**Example:**\n\n\n void addAll(List list, String[] arr) {\n for (int i = 0; i < arr.length; i++) {\n String s = arr[i];\n list.add(s);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n void addAll(List list, String[] arr) {\n Collections.addAll(list, arr);\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SwitchLabeledRuleCanBeCodeBlock", + "shortDescription": { + "text": "Labeled switch rule can have code block" + }, + "fullDescription": { + "text": "Reports rules of 'switch' expressions or enhanced 'switch' statements with an expression body. These can be converted to code blocks. Example: 'String message = switch (errorCode) {\n case 404 -> \"Not found!\";\n ...\n };' After the quick-fix is applied: 'String message = switch (errorCode) {\n case 404 -> {\n yield \"Not found!\";\n }\n ...\n };' The inspection only reports if the language level of the project or module is 14 or higher. New in 2019.1", + "markdown": "Reports rules of `switch` expressions or enhanced `switch` statements with an expression body. These can be converted to code blocks.\n\nExample:\n\n\n String message = switch (errorCode) {\n case 404 -> \"Not found!\";\n ...\n };\n\nAfter the quick-fix is applied:\n\n\n String message = switch (errorCode) {\n case 404 -> {\n yield \"Not found!\";\n }\n ...\n };\n\nThe inspection only reports if the language level of the project or module is 14 or higher.\n\nNew in 2019.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringOperationCanBeSimplified", + "shortDescription": { + "text": "Redundant 'String' operation" + }, + "fullDescription": { + "text": "Reports redundant calls to 'String' constructors and methods like 'toString()' or 'substring()' that can be replaced with a simpler expression. For example, calls to these methods can be safely removed in code like '\"string\".substring(0)', '\"string\".toString()', or 'new StringBuilder().toString().substring(1,3)'. Example: 'System.out.println(new String(\"message\"));' After the quick-fix is applied: 'System.out.println(\"message\");' Note that the quick-fix removes the redundant constructor call, and this may affect 'String' referential equality. If you need to preserve it, even though it is considered bad practice, suppress the warning or use the inspection setting to ignore redundant 'String' constructor calls. Use the Do not report String constructor calls option below to not report code like the example above. This will avoid changing the outcome of String comparisons with '==' or '!=' after applying the quick-fix in code that uses 'new String()' calls to guarantee a different object identity. New in 2018.1", + "markdown": "Reports redundant calls to `String` constructors and methods like `toString()` or `substring()` that can be replaced with a simpler expression.\n\nFor example, calls to these methods can be safely removed in code\nlike `\"string\".substring(0)`, `\"string\".toString()`, or\n`new StringBuilder().toString().substring(1,3)`.\n\nExample:\n\n\n System.out.println(new String(\"message\"));\n\nAfter the quick-fix is applied:\n\n\n System.out.println(\"message\");\n\n\nNote that the quick-fix removes the redundant constructor call, and this may affect `String` referential equality.\nIf you need to preserve it, even though it is considered bad practice, suppress the warning or use the inspection setting to ignore\nredundant `String` constructor calls.\n\n\nUse the **Do not report String constructor calls** option below to not report code like the example above.\nThis will avoid changing the outcome of String comparisons with `==` or `!=` after applying\nthe quick-fix in code that uses `new String()` calls to guarantee a different object identity.\n\nNew in 2018.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassReferencesSubclass", + "shortDescription": { + "text": "Class references one of its subclasses" + }, + "fullDescription": { + "text": "Reports classes which contain references to one of their subclasses. Such references may be confusing and violate several rules of object-oriented design. Example: 'class Entity {\n // Warning: the class references its subclass\n void compare(SimpleEntity entity) {\n ...\n }\n }\n class SimpleEntity extends Entity {\n ...\n }'", + "markdown": "Reports classes which contain references to one of their subclasses. Such references may be confusing and violate several rules of object-oriented design.\n\nExample:\n\n\n class Entity {\n // Warning: the class references its subclass\n void compare(SimpleEntity entity) {\n ...\n }\n }\n class SimpleEntity extends Entity {\n ...\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 75, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaReflectionMemberAccess", + "shortDescription": { + "text": "Reflective access to non-existent or not visible class member" + }, + "fullDescription": { + "text": "Reports reflective access to fields and methods that don't exist or aren't visible. Example: 'Field stringHashField() throws NoSuchFieldException {\n return String.class.getField(\"hash\");\n }' After the quick-fix is applied: 'Field stringHashField() throws NoSuchFieldException {\n return String.class.getDeclaredField(\"hash\");\n }' With a 'final' class, it's clear if there is a field or method with the specified name in the class. With non-'final' classes, it's possible that a subclass has a field or method with that name, so there could be false positives. Use the inspection's settings to get rid of such false positives everywhere or with specific classes. New in 2017.2", + "markdown": "Reports reflective access to fields and methods that don't exist or aren't visible.\n\nExample:\n\n\n Field stringHashField() throws NoSuchFieldException {\n return String.class.getField(\"hash\");\n }\n\nAfter the quick-fix is applied:\n\n\n Field stringHashField() throws NoSuchFieldException {\n return String.class.getDeclaredField(\"hash\");\n }\n\n\nWith a `final` class, it's clear if there is a field or method with the specified name in the class.\n\n\nWith non-`final` classes, it's possible that a subclass has a field or method with that name, so there could be false positives.\nUse the inspection's settings to get rid of such false positives everywhere or with specific classes.\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Reflective access", + "index": 98, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObviousNullCheck", + "shortDescription": { + "text": "Null-check method is called with obviously non-null argument" + }, + "fullDescription": { + "text": "Reports if a null-checking method (for example, 'Objects.requireNonNull' or 'Assert.assertNotNull') is called on a value that is obviously non-null (for example, a newly created object). Such a check is redundant and may indicate a programming error. Example: 'final String greeting = Objects.requireNonNull(\"Hi!\");' After the quick-fix is applied: 'final String greeting = \"Hi!\";' New in 2017.2", + "markdown": "Reports if a null-checking method (for example, `Objects.requireNonNull` or `Assert.assertNotNull`) is called on a value that is obviously non-null (for example, a newly created object). Such a check is redundant and may indicate a programming error.\n\n**Example:**\n\n\n final String greeting = Objects.requireNonNull(\"Hi!\");\n\nAfter the quick-fix is applied:\n\n\n final String greeting = \"Hi!\";\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SerialVersionUIDNotStaticFinal", + "shortDescription": { + "text": "'serialVersionUID' field not declared 'private static final long'" + }, + "fullDescription": { + "text": "Reports 'Serializable' classes whose 'serialVersionUID' field is not declared 'private static final long'. Example: 'class SampleClass implements Serializable {\n private long serialVersionUID = 1; // field of a Serializable class is not declared 'private static final long'\n\n public SampleClass() {\n System.out.println(serialVersionUID);\n }\n }'", + "markdown": "Reports `Serializable` classes whose `serialVersionUID` field is not declared `private static final long`.\n\n**Example:**\n\n\n class SampleClass implements Serializable {\n private long serialVersionUID = 1; // field of a Serializable class is not declared 'private static final long'\n\n public SampleClass() {\n System.out.println(serialVersionUID);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 18, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InnerClassOnInterface", + "shortDescription": { + "text": "Inner class of interface" + }, + "fullDescription": { + "text": "Reports inner classes in 'interface' classes. Some coding standards discourage the use of such classes. The inspection doesn't report enum classes and annotation interfaces. Use the Ignore inner interfaces of interfaces option to ignore inner interfaces. For example: 'interface I {\n interface Inner {\n }\n }'", + "markdown": "Reports inner classes in `interface` classes.\n\nSome coding standards\ndiscourage the use of such classes. The inspection doesn't report enum classes and annotation interfaces.\n\n\nUse the **Ignore inner interfaces of interfaces** option to ignore inner interfaces. For example:\n\n\n interface I {\n interface Inner {\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DateToString", + "shortDescription": { + "text": "Call to 'Date.toString()'" + }, + "fullDescription": { + "text": "Reports 'toString()' calls on 'java.util.Date' objects. Such calls are usually incorrect in an internationalized environment.", + "markdown": "Reports `toString()` calls on `java.util.Date` objects. Such calls are usually incorrect in an internationalized environment." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 9, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IterableUsedAsVararg", + "shortDescription": { + "text": "Iterable is used as vararg" + }, + "fullDescription": { + "text": "Reports suspicious usages of 'Collection' or 'Iterable' in vararg method calls. For example, in the following method: ' boolean contains(T needle, T... haystack) {...}' a call like 'if(contains(\"item\", listOfStrings)) {...}' looks suspicious as the list will be wrapped into a single element array. Such code can be successfully compiled and will likely run without exceptions, but it's probably used by mistake. New in 2019.2", + "markdown": "Reports suspicious usages of `Collection` or `Iterable` in vararg method calls.\n\nFor example, in the following method:\n\n\n boolean contains(T needle, T... haystack) {...}\n\na call like\n\n\n if(contains(\"item\", listOfStrings)) {...}\n\nlooks suspicious as the list will be wrapped into a single element array.\nSuch code can be successfully compiled and will likely run without\nexceptions, but it's probably used by mistake.\n\nNew in 2019.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodNameSameAsParentName", + "shortDescription": { + "text": "Method name same as parent class name" + }, + "fullDescription": { + "text": "Reports methods that have the same name as the superclass of the method's class, as such a method name may be confusing. This inspection doesn't check interfaces or superclasses deep in the hierarchy. Example: 'class Parent {}\n class Child extends Parent {\n public Parent Parent() {\n return null;\n }\n }' A quick-fix that renames such methods is available only in the editor.", + "markdown": "Reports methods that have the same name as the superclass of the method's class, as such a method name may be confusing.\n\nThis inspection doesn't check interfaces or superclasses deep in the hierarchy.\n\n**Example:**\n\n\n class Parent {}\n class Child extends Parent {\n public Parent Parent() {\n return null;\n }\n }\n\nA quick-fix that renames such methods is available only in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Method", + "index": 88, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PublicFieldAccessedInSynchronizedContext", + "shortDescription": { + "text": "Non-private field accessed in 'synchronized' context" + }, + "fullDescription": { + "text": "Reports non-'final', non-'private' fields that are accessed in a synchronized context. A non-'private' field cannot be guaranteed to always be accessed in a synchronized manner, and such \"partially synchronized\" access may result in unexpectedly inconsistent data structures. Example: 'class Bar {\n public String field1;\n }\n public Bar myBar;\n\n synchronized public void sample() {\n myBar.field1 = \"bar\";\n }'", + "markdown": "Reports non-`final`, non-`private` fields that are accessed in a synchronized context.\n\n\nA non-`private` field cannot be guaranteed to always be accessed in a synchronized manner, and such \"partially synchronized\"\naccess may result in unexpectedly inconsistent data structures.\n\n**Example:**\n\n\n class Bar {\n public String field1;\n }\n public Bar myBar;\n\n synchronized public void sample() {\n myBar.field1 = \"bar\";\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedLabel", + "shortDescription": { + "text": "Unused label" + }, + "fullDescription": { + "text": "Reports labels that are not targets of any 'break' or 'continue' statements. Example: 'label: for (int i = 0; i < 10; i++) {\n if (i == 3) {\n break;\n }\n }' After the quick-fix is applied, the label is removed: 'for (int i = 0; i < 10; i++) {\n if (i == 3) {\n break;\n }\n }'", + "markdown": "Reports labels that are not targets of any `break` or `continue` statements.\n\n**Example:**\n\n\n label: for (int i = 0; i < 10; i++) {\n if (i == 3) {\n break;\n }\n }\n\nAfter the quick-fix is applied, the label is removed:\n\n\n for (int i = 0; i < 10; i++) {\n if (i == 3) {\n break;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 15, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ForeachStatement", + "shortDescription": { + "text": "Enhanced 'for' statement" + }, + "fullDescription": { + "text": "Reports enhanced 'for' statements. Example: 'for (int x: Arrays.asList(1, 2, 3)) {\n System.out.println(x);\n }' After the quick-fix is applied: 'for (Iterator iterator = Arrays.asList(1, 2, 3).iterator(); iterator.hasNext(); ) {\n final int x = iterator.next();\n System.out.println(x);\n }' Enhanced 'for' statement appeared in Java 5. This inspection can help to downgrade for backward compatibility with earlier Java versions.", + "markdown": "Reports enhanced `for` statements.\n\nExample:\n\n\n for (int x: Arrays.asList(1, 2, 3)) {\n System.out.println(x);\n }\n\nAfter the quick-fix is applied:\n\n\n for (Iterator iterator = Arrays.asList(1, 2, 3).iterator(); iterator.hasNext(); ) {\n final int x = iterator.next();\n System.out.println(x);\n }\n\n\n*Enhanced* `for` *statement* appeared in Java 5.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level issues", + "index": 60, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LambdaParameterNamingConvention", + "shortDescription": { + "text": "Lambda parameter naming convention" + }, + "fullDescription": { + "text": "Reports lambda parameters whose names are too short, too long, or do not follow the specified regular expression pattern. Example: 'Function id = X -> X;' should be reported if the inspection is enabled with the default settings in which a parameter name should start with a lowercase letter. Configure the inspection: Use the fields in the Options section to specify the minimum length, maximum length, and a regular expression expected for lambda parameter names. Specify 0 in order not to check the length of names. Regular expressions should be specified in the standard 'java.util.regex' format.", + "markdown": "Reports lambda parameters whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n**Example:** `Function id = X -> X;`\nshould be reported if the inspection is enabled with the default settings in which a parameter name should start with a lowercase letter.\n\nConfigure the inspection:\n\n\nUse the fields in the **Options** section to specify the minimum length, maximum length, and a regular expression expected for lambda parameter names.\nSpecify **0** in order not to check the length of names.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions", + "index": 50, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LawOfDemeter", + "shortDescription": { + "text": "Method call violates Law of Demeter" + }, + "fullDescription": { + "text": "Reports Law of Demeter violations. The Law of Demeter is not really a law, but specifies a style guideline: never call a method on an object received from another call. The code that follows this guideline is easier to maintain, adapt, and refactor, has less coupling between methods, less duplication, and better information hiding. On the other hand, you may need to write many wrapper methods to meet this guideline. Example: 'boolean pay(Customer c, Invoice invoice) {\n int dollars = c.getWallet().getDollars(); // violation\n if (dollars >= invoice.getAmount()) {\n Wallet w = c.getWallet();\n w.subtract(invoice.getAmount()); // violation\n return true;\n }\n return false;\n }' The above example might be better implemented as a method 'payInvoice(Invoice invoice)' in 'Customer'. Example: 'Engine engine = car.getEngine();\n int cylinders = engine.getNumberOfCylinders();'", + "markdown": "Reports [Law of Demeter](https://en.wikipedia.org/wiki/Law_of_Demeter) violations.\n\nThe Law of Demeter is not really a law, but specifies a style guideline: never call a method on an object received from another call.\nThe code that follows this guideline is easier to maintain, adapt, and refactor, has less coupling between methods, less duplication,\nand better information hiding. On the other hand, you may need to write many wrapper methods to meet this guideline.\n\n**Example:**\n\n\n boolean pay(Customer c, Invoice invoice) {\n int dollars = c.getWallet().getDollars(); // violation\n if (dollars >= invoice.getAmount()) {\n Wallet w = c.getWallet();\n w.subtract(invoice.getAmount()); // violation\n return true;\n }\n return false;\n }\n\nThe above example might be better implemented as a method `payInvoice(Invoice invoice)` in `Customer`.\n\n**Example:**\n\n\n Engine engine = car.getEngine();\n int cylinders = engine.getNumberOfCylinders();\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Data flow", + "index": 23, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OptionalUsedAsFieldOrParameterType", + "shortDescription": { + "text": "'Optional' used as field or parameter type" + }, + "fullDescription": { + "text": "Reports any cases in which 'java.util.Optional', 'java.util.OptionalDouble', 'java.util.OptionalInt', 'java.util.OptionalLong', or 'com.google.common.base.Optional' are used as types for fields or parameters. 'Optional' was designed to provide a limited mechanism for library method return types in which a clear way to represent \"no result\" was needed. Using a field with the 'java.util.Optional' type is also problematic if the class needs to be 'Serializable', as 'java.util.Optional' is not serializable. Example: 'class MyClass {\n Optional name; // Optional field\n\n // Optional parameter\n void setName(Optional name) {\n this.name = name;\n }\n }'", + "markdown": "Reports any cases in which `java.util.Optional`, `java.util.OptionalDouble`, `java.util.OptionalInt`, `java.util.OptionalLong`, or `com.google.common.base.Optional` are used as types for fields or parameters.\n\n`Optional` was designed to provide a limited mechanism for library method return types in which a clear way to represent \"no result\"\nwas needed.\n\nUsing a field with the `java.util.Optional` type is also problematic if the class needs to be\n`Serializable`, as `java.util.Optional` is not serializable.\n\nExample:\n\n\n class MyClass {\n Optional name; // Optional field\n\n // Optional parameter\n void setName(Optional name) {\n this.name = name;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 75, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceAllDot", + "shortDescription": { + "text": "Suspicious regex expression argument" + }, + "fullDescription": { + "text": "Reports calls to 'String.replaceAll()' or 'String.split()' where the first argument is a single regex meta character argument. The regex meta characters are one of '.$|()[{^?*+\\'. They have a special meaning in regular expressions. For example, calling '\"ab.cd\".replaceAll(\".\", \"-\")' produces '\"-----\"', because the dot matches any character. Most likely the escaped variant '\"\\\\.\"' was intended instead. Using 'File.separator' as a regex is also reported. The 'File.separator' has a platform specific value. It equals to '/' on Linux and Mac but equals to '\\' on Windows, which is not a valid regular expression, so such code is not portable. Example: 's.replaceAll(\".\", \"-\");' After the quick-fix is applied: 's.replaceAll(\"\\\\.\", \"-\");'", + "markdown": "Reports calls to `String.replaceAll()` or `String.split()` where the first argument is a single regex meta character argument.\n\n\nThe regex meta characters are one of `.$|()[{^?*+\\`. They have a special meaning in regular expressions.\nFor example, calling `\"ab.cd\".replaceAll(\".\", \"-\")` produces `\"-----\"`, because the dot matches any character.\nMost likely the escaped variant `\"\\\\.\"` was intended instead.\n\n\nUsing `File.separator` as a regex is also reported. The `File.separator` has a platform specific value. It\nequals to `/` on Linux and Mac but equals to `\\` on Windows, which is not a valid regular expression, so\nsuch code is not portable.\n\n**Example:**\n\n\n s.replaceAll(\".\", \"-\");\n\nAfter the quick-fix is applied:\n\n\n s.replaceAll(\"\\\\.\", \"-\");\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ForCanBeForeach", + "shortDescription": { + "text": "'for' loop can be replaced with enhanced for loop" + }, + "fullDescription": { + "text": "Reports 'for' loops that iterate over collections or arrays, and can be automatically replaced with an enhanced 'for' loop (foreach iteration syntax). Example: 'for (Iterator iterator = list.iterator(); iterator.hasNext(); ) {\n String item = iterator.next();\n System.out.println(item);\n }' After the quick-fix is applied: 'for (String item : list) {\n System.out.println(item);\n }' Use the Report indexed 'java.util.List' loops option to find loops involving 'list.get(index)' calls. Generally, these loops can be replaced with enhanced 'for' loops, unless they modify an underlying list in the process, for example, by calling 'list.remove(index)'. If the latter is the case, the enhanced 'for' loop may throw 'ConcurrentModificationException'. Also, in some cases, 'list.get(index)' loops may work a little bit faster. Use the Do not report iterations over untyped collections option to ignore collections without type parameters. This prevents the creation of enhanced 'for' loop variables of the 'java.lang.Object' type and the insertion of casts where the loop variable is used. This inspection only reports if the language level of the project or module is 5 or higher.", + "markdown": "Reports `for` loops that iterate over collections or arrays, and can be automatically replaced with an enhanced `for` loop (foreach iteration syntax).\n\n**Example:**\n\n\n for (Iterator iterator = list.iterator(); iterator.hasNext(); ) {\n String item = iterator.next();\n System.out.println(item);\n }\n\nAfter the quick-fix is applied:\n\n\n for (String item : list) {\n System.out.println(item);\n }\n\n\nUse the **Report indexed 'java.util.List' loops** option to find loops involving `list.get(index)` calls.\nGenerally, these loops can be replaced with enhanced `for` loops,\nunless they modify an underlying list in the process, for example, by calling `list.remove(index)`.\nIf the latter is the case, the enhanced `for` loop may throw `ConcurrentModificationException`.\nAlso, in some cases, `list.get(index)` loops may work a little bit faster.\n\n\nUse the **Do not report iterations over untyped collections** option to ignore collections without type parameters.\nThis prevents the creation of enhanced `for` loop variables of the `java.lang.Object` type and the insertion of casts\nwhere the loop variable is used.\n\nThis inspection only reports if the language level of the project or module is 5 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 5", + "index": 51, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AmbiguousFieldAccess", + "shortDescription": { + "text": "Access to inherited field looks like access to element from surrounding code" + }, + "fullDescription": { + "text": "Reports access to a superclass field from an anonymous, inner or local class, if a local variable, parameter, or field with the same name is available in the code surrounding the class. In this case it may seem that an element from the surrounding code is accessed, when in fact it is an access to a field from the superclass. To clarify the intent of the code, it is recommended to add an explicit 'super' qualifier to the field access. Example: 'class First {\n protected String ambiguous;\n }\n class Second {\n void foo(String ambiguous) {\n new First() {\n {\n System.out.println(ambiguous); // the field is accessed, not the parameter\n }\n };\n }\n }' After the quick-fix is applied: 'class First {\n protected String ambiguous;\n }\n class Second {\n void foo(String ambiguous) {\n new First() {\n {\n System.out.println(super.ambiguous);\n }\n };\n }\n }'", + "markdown": "Reports access to a superclass field from an anonymous, inner or local class, if a local variable, parameter, or field with the same name is available in the code surrounding the class. In this case it may seem that an element from the surrounding code is accessed, when in fact it is an access to a field from the superclass.\n\n\nTo clarify the intent of the code, it is recommended to add an explicit\n`super` qualifier to the field access.\n\n**Example:**\n\n\n class First {\n protected String ambiguous;\n }\n class Second {\n void foo(String ambiguous) {\n new First() {\n {\n System.out.println(ambiguous); // the field is accessed, not the parameter\n }\n };\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class First {\n protected String ambiguous;\n }\n class Second {\n void foo(String ambiguous) {\n new First() {\n {\n System.out.println(super.ambiguous);\n }\n };\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 54, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonProtectedConstructorInAbstractClass", + "shortDescription": { + "text": "Public constructor in abstract class" + }, + "fullDescription": { + "text": "Reports 'public' constructors of 'abstract' classes. Constructors of 'abstract' classes can only be called from the constructors of their subclasses, declaring them 'public' may be confusing. The quick-fix makes such constructors protected. Example: 'public abstract class Foo {\n public Foo () { // warning: has 'public' modifier\n /* ... */\n }\n }' After the quick-fix is applied: 'public abstract class Foo {\n protected Foo () {\n /* ... */\n }\n }' Configure the inspection: Use the Ignore for non-public classes option below to ignore 'public' constructors in non-public classes.", + "markdown": "Reports `public` constructors of `abstract` classes.\n\n\nConstructors of `abstract` classes can only be called from the constructors of\ntheir subclasses, declaring them `public` may be confusing.\n\nThe quick-fix makes such constructors protected.\n\n**Example:**\n\n\n public abstract class Foo {\n public Foo () { // warning: has 'public' modifier\n /* ... */\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public abstract class Foo {\n protected Foo () {\n /* ... */\n }\n }\n\nConfigure the inspection:\n\nUse the **Ignore for non-public classes** option below to ignore `public` constructors in non-public classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 25, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PackageVisibleField", + "shortDescription": { + "text": "Package-visible field" + }, + "fullDescription": { + "text": "Reports fields that are declared without any access modifier (also known as package-private). Constants (that is, fields marked 'static' and 'final') are not reported. Example: 'public class A {\n Object object; // warning\n final static int MODE = 0; // constant, no warning\n }'", + "markdown": "Reports fields that are declared without any access modifier (also known as package-private).\n\nConstants (that is, fields marked `static` and `final`) are not reported.\n\n**Example:**\n\n\n public class A {\n Object object; // warning\n final static int MODE = 0; // constant, no warning\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Encapsulation", + "index": 57, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ComparableImplementedButEqualsNotOverridden", + "shortDescription": { + "text": "'Comparable' implemented but 'equals()' not overridden" + }, + "fullDescription": { + "text": "Reports classes that implement 'java.lang.Comparable' but do not override 'equals()'. If 'equals()' is not overridden, the 'equals()' implementation is not consistent with the 'compareTo()' implementation. If an object of such a class is added to a collection such as 'java.util.SortedSet', this collection will violate the contract of 'java.util.Set', which is defined in terms of 'equals()'. Example: 'class Length implements Comparable {\n private int cm = 0;\n\n @Override\n public int compareTo(@NotNull Length o) {\n if (cm == o.cm) return 0;\n return cm < o.cm ? -1 : 1;\n }\n }' After the quick fix is applied: 'class Length implements Comparable {\n private int cm = 0;\n\n @Override\n public int compareTo(@NotNull Length o) {\n if (cm == o.cm) return 0;\n return cm < o.cm ? -1 : 1;\n }\n\n @Override\n public boolean equals(Object o) {\n return o instanceof Length && compareTo((Length) o) == 0;\n }\n }'", + "markdown": "Reports classes that implement `java.lang.Comparable` but do not override `equals()`.\n\n\nIf `equals()`\nis not overridden, the `equals()` implementation is not consistent with\nthe `compareTo()` implementation. If an object of such a class is added\nto a collection such as `java.util.SortedSet`, this collection will violate\nthe contract of `java.util.Set`, which is defined in terms of\n`equals()`.\n\n**Example:**\n\n\n class Length implements Comparable {\n private int cm = 0;\n\n @Override\n public int compareTo(@NotNull Length o) {\n if (cm == o.cm) return 0;\n return cm < o.cm ? -1 : 1;\n }\n }\n\nAfter the quick fix is applied:\n\n\n class Length implements Comparable {\n private int cm = 0;\n\n @Override\n public int compareTo(@NotNull Length o) {\n if (cm == o.cm) return 0;\n return cm < o.cm ? -1 : 1;\n }\n\n @Override\n public boolean equals(Object o) {\n return o instanceof Length && compareTo((Length) o) == 0;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MapReplaceableByEnumMap", + "shortDescription": { + "text": "'Map' can be replaced with 'EnumMap'" + }, + "fullDescription": { + "text": "Reports instantiations of 'java.util.Map' objects whose key types are enumerated classes. Such 'java.util.Map' objects can be replaced with 'java.util.EnumMap' objects. 'java.util.EnumMap' implementations can be much more efficient because the underlying data structure is a simple array. Example: 'Map myEnums = new HashMap<>();' After the quick-fix is applied: 'Map myEnums = new EnumMap<>(MyEnum.class);'", + "markdown": "Reports instantiations of `java.util.Map` objects whose key types are enumerated classes. Such `java.util.Map` objects can be replaced with `java.util.EnumMap` objects.\n\n\n`java.util.EnumMap` implementations can be much more efficient\nbecause the underlying data structure is a simple array.\n\n**Example:**\n\n\n Map myEnums = new HashMap<>();\n\nAfter the quick-fix is applied:\n\n\n Map myEnums = new EnumMap<>(MyEnum.class);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InstantiationOfUtilityClass", + "shortDescription": { + "text": "Instantiation of utility class" + }, + "fullDescription": { + "text": "Reports instantiation of utility classes using the 'new' keyword. In utility classes, all fields and methods are 'static'. Instantiation of such classes is most likely unnecessary and indicates a mistake. Example: 'class MyUtils {\n public static double cube(double x) {\n return x * x * x;\n }\n }\n class Main {\n public static void main(String[] args) {\n // Instantiation of utility class\n MyUtils utils = new MyUtils();\n }\n }' To prevent utility classes from being instantiated, it's recommended to use a 'private' constructor.", + "markdown": "Reports instantiation of utility classes using the `new` keyword.\n\n\nIn utility classes, all fields and methods are `static`.\nInstantiation of such classes is most likely unnecessary and indicates a mistake.\n\n**Example:**\n\n\n class MyUtils {\n public static double cube(double x) {\n return x * x * x;\n }\n }\n class Main {\n public static void main(String[] args) {\n // Instantiation of utility class\n MyUtils utils = new MyUtils();\n }\n }\n\n\nTo prevent utility classes from being instantiated,\nit's recommended to use a `private` constructor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TrailingWhitespacesInTextBlock", + "shortDescription": { + "text": "Trailing whitespace in text block" + }, + "fullDescription": { + "text": "Reports text blocks with trailing whitespace characters. Trailing whitespace is considered incidental and will be stripped away by the Java compiler. This inspection only reports if the language level of the project or module is 15 or higher. New in 2021.1", + "markdown": "Reports text blocks with trailing whitespace characters. Trailing whitespace is considered incidental and will be stripped away by the Java compiler.\n\nThis inspection only reports if the language level of the project or module is 15 or higher.\n\nNew in 2021.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Code style issues", + "index": 117, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReturnNull", + "shortDescription": { + "text": "Return of 'null'" + }, + "fullDescription": { + "text": "Reports 'return' statements with 'null' return values. While occasionally useful, this construct may make the code more prone to failing with a 'NullPointerException'. If a method is designed to return 'null', it is suggested to mark it with the '@Nullable' annotation - such methods will be ignored by this inspection. Example: 'class Person {\n public String getName () {\n return null;\n }\n }' After the quick-fix is applied: 'class Person {\n @Nullable\n public String getName () {\n return null;\n }\n }' If the return type is 'java.util.Optional', an additional quick-fix to convert 'null' to 'Optional.empty()' is suggested. Use the following options to configure the inspection: Whether to ignore 'private' methods. This will also ignore return of 'null' from anonymous classes and lambdas. Whether 'null' values on array returns, collection object returns, plain object returns, or a combination of the three should be reported. Return of 'null' in methods with return type 'java.util.Optional' are always reported. Click Configure annotations to specify which annotations should be considered 'nullable'.", + "markdown": "Reports `return` statements with `null` return values. While occasionally useful, this construct may make the code more prone to failing with a `NullPointerException`.\n\n\nIf a method is designed to return `null`, it is suggested to mark it with the\n`@Nullable` annotation - such methods will be ignored by this inspection.\n\n**Example:**\n\n\n class Person {\n public String getName () {\n return null;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Person {\n @Nullable\n public String getName () {\n return null;\n }\n }\n\n\nIf the return type is `java.util.Optional`, an additional quick-fix to convert\n`null` to `Optional.empty()` is suggested.\n\n\nUse the following options to configure the inspection:\n\n* Whether to ignore `private` methods. This will also ignore return of `null` from anonymous classes and lambdas.\n* Whether `null` values on array returns, collection object returns, plain object returns, or a combination of the three should be reported. Return of `null` in methods with return type `java.util.Optional` are always reported.\n* Click **Configure annotations** to specify which annotations should be considered 'nullable'." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs/Nullability problems", + "index": 115, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NewClassNamingConvention", + "shortDescription": { + "text": "Class naming convention" + }, + "fullDescription": { + "text": "Reports classes whose names are too short, too long, or do not follow the specified regular expression pattern. Example: if the inspection is enabled for tests, and the specified length for the minimum class name is 8 (the default), the following test class produces a warning because the length of its name is 6, which is less than 8: 'public class MyTest{}'. A quick-fix that renames such classes is available only in the editor. Configure the inspection: Use the list in the Options section to specify which classes should be checked. Deselect the checkboxes for the classes for which you want to skip the check. For each class type, specify the minimum length, maximum length, and the regular expression expected for class names using the provided input fields. Specify 0 in the length fields to skip corresponding checks. Regular expressions should be specified in the standard 'java.util.regex' format.", + "markdown": "Reports classes whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n**Example:** if the inspection is enabled for tests, and the specified length for the minimum class name is 8 (the default), the following test class\nproduces a warning because the length of its name is 6, which is less than 8: `public class MyTest{}`.\n\nA quick-fix that renames such classes is available only in the editor.\n\nConfigure the inspection:\n\n\nUse the list in the **Options** section to specify which classes should be checked. Deselect the checkboxes for the classes for which\nyou want to skip the check.\n\nFor each class type, specify the minimum length, maximum length, and the regular expression expected for class names using the\nprovided input fields. Specify **0** in the length fields to skip corresponding checks.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Class", + "index": 67, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnpredictableBigDecimalConstructorCall", + "shortDescription": { + "text": "Unpredictable 'BigDecimal' constructor call" + }, + "fullDescription": { + "text": "Reports calls to 'BigDecimal' constructors that accept a 'double' value. These constructors produce 'BigDecimal' that is exactly equal to the supplied 'double' value. However, because doubles are encoded in the IEEE 754 64-bit double-precision binary floating-point format, the exact value can be unexpected. For example, 'new BigDecimal(0.1)' yields a 'BigDecimal' object. Its value is '0.1000000000000000055511151231257827021181583404541015625' which is the nearest number to 0.1 representable as a double. To get 'BigDecimal' that stores the same value as written in the source code, use either 'new BigDecimal(\"0.1\")' or 'BigDecimal.valueOf(0.1)'. Example: 'class Constructor {\n void foo() {\n new BigDecimal(0.1);\n }\n }' After the quick-fix is applied: 'class Constructor {\n void foo() {\n new BigDecimal(\"0.1\");\n }\n }'", + "markdown": "Reports calls to `BigDecimal` constructors that accept a `double` value. These constructors produce `BigDecimal` that is exactly equal to the supplied `double` value. However, because doubles are encoded in the IEEE 754 64-bit double-precision binary floating-point format, the exact value can be unexpected.\n\nFor example, `new BigDecimal(0.1)` yields a `BigDecimal` object. Its value is\n`0.1000000000000000055511151231257827021181583404541015625`\nwhich is the nearest number to 0.1 representable as a double.\nTo get `BigDecimal` that stores the same value as written in the source code,\nuse either `new BigDecimal(\"0.1\")` or `BigDecimal.valueOf(0.1)`.\n\n**Example:**\n\n\n class Constructor {\n void foo() {\n new BigDecimal(0.1);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Constructor {\n void foo() {\n new BigDecimal(\"0.1\");\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseCompareMethod", + "shortDescription": { + "text": "'compare()' method can be used to compare numbers" + }, + "fullDescription": { + "text": "Reports expressions that can be replaced by a call to the 'Integer.compare()' method or a similar method from the 'Long', 'Short', 'Byte', 'Double' or 'Float' classes, instead of more verbose or less efficient constructs. If 'x' and 'y' are boxed integers, then 'x.compareTo(y)' is suggested, if they are primitives 'Integer.compare(x, y)' is suggested. Example: 'public int compare(int x, int y) {\n return x > y ? 1 : x < y ? -1 : 0;\n }' After the quick-fix is applied: 'public int compare(int x, int y) {\n return Integer.compare(x, y);\n }' Note that 'Double.compare' and 'Float.compare' slightly change the code semantics. In particular, they make '-0.0' and '0.0' distinguishable ('Double.compare(-0.0, 0.0)' yields -1). Also, they consistently process 'NaN' value. In most of the cases, this semantics change actually improves the code. Use the checkbox to disable this inspection for floating point numbers if semantics change is unacceptable in your case. New in 2017.2", + "markdown": "Reports expressions that can be replaced by a call to the `Integer.compare()` method or a similar method from the `Long`, `Short`, `Byte`, `Double` or `Float` classes, instead of more verbose or less efficient constructs.\n\nIf `x` and `y` are boxed integers, then `x.compareTo(y)` is suggested,\nif they are primitives `Integer.compare(x, y)` is suggested.\n\n**Example:**\n\n\n public int compare(int x, int y) {\n return x > y ? 1 : x < y ? -1 : 0;\n }\n\nAfter the quick-fix is applied:\n\n\n public int compare(int x, int y) {\n return Integer.compare(x, y);\n }\n\n\nNote that `Double.compare` and `Float.compare` slightly change the code semantics. In particular,\nthey make `-0.0` and `0.0` distinguishable (`Double.compare(-0.0, 0.0)` yields -1).\nAlso, they consistently process `NaN` value. In most of the cases, this semantics change actually improves the\ncode. Use the checkbox to disable this inspection for floating point numbers if semantics change is unacceptable\nin your case.\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 33, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IntegerDivisionInFloatingPointContext", + "shortDescription": { + "text": "Integer division in floating-point context" + }, + "fullDescription": { + "text": "Reports integer divisions where the result is used as a floating-point number. Such division is often an error and may have unexpected results due to the truncation that happens in integer division. Example: 'float x = 3.0F + 3/5;'", + "markdown": "Reports integer divisions where the result is used as a floating-point number. Such division is often an error and may have unexpected results due to the truncation that happens in integer division.\n\n**Example:**\n\n\n float x = 3.0F + 3/5;\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssertWithoutMessage", + "shortDescription": { + "text": "Message missing on assertion" + }, + "fullDescription": { + "text": "Reports calls to 'assertXXX()' or 'fail()' without an error message string argument. An error message on assertion failure may help clarify the test case's intent. Example: 'assertTrue(checkValid());' After the quick-fix is applied: 'assertTrue(checkValid(), \"|\");' The message argument is added before or after the existing arguments according to the assertions framework that you use.", + "markdown": "Reports calls to `assertXXX()` or `fail()` without an error message string argument. An error message on assertion failure may help clarify the test case's intent.\n\n**Example:**\n\n\n assertTrue(checkValid());\n\nAfter the quick-fix is applied:\n\n assertTrue(checkValid(), \"|\");\n\n\nThe message argument is added before or after the existing arguments according to the assertions framework that you use." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Test frameworks", + "index": 96, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MoveFieldAssignmentToInitializer", + "shortDescription": { + "text": "Field assignment can be moved to initializer" + }, + "fullDescription": { + "text": "Suggests replacing initialization of fields using assignment with initialization in the field declaration. Only reports if the field assignment is located in an instance or static initializer, and joining it with the field declaration is likely to be safe. In other cases, like assignment inside a constructor, the quick-fix is provided without highlighting, as the fix may change the semantics. Example: 'class MyClass {\n static final int intConstant;\n \n static {\n intConstant = 10;\n }\n }' The quick fix moves the assigned value to the field initializer removing the class initializer if possible: 'class MyClass {\n static final int intConstant = 10;\n }' Since 2017.2", + "markdown": "Suggests replacing initialization of fields using assignment with initialization in the field declaration.\n\nOnly reports if the field assignment is located in an instance or static initializer, and\njoining it with the field declaration is likely to be safe.\nIn other cases, like assignment inside a constructor, the quick-fix is provided without highlighting,\nas the fix may change the semantics.\n\nExample:\n\n\n class MyClass {\n static final int intConstant;\n \n static {\n intConstant = 10;\n }\n }\n\nThe quick fix moves the assigned value to the field initializer removing the class initializer if possible:\n\n\n class MyClass {\n static final int intConstant = 10;\n }\n\nSince 2017.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringConcatenationInFormatCall", + "shortDescription": { + "text": "String concatenation as argument to 'format()' call" + }, + "fullDescription": { + "text": "Reports non-constant string concatenations used as a format string argument. While occasionally intended, this is usually a misuse of a formatting method and may even cause security issues if the variables used in the concatenated string contain special characters like '%'. Also, sometimes this could be the result of mistakenly concatenating a string format argument by typing a '+' when a ',' was meant. Example: 'static String formatGreeting(String userName) {\n return String.format(\"Hello, \" + userName);\n }' Here, the 'userName' will be interpreted as a part of format string, which may result in 'IllegalFormatException' (for example, if 'userName' is '\"%\"') or in using an enormous amount of memory (for example, if 'userName' is '\"%2000000000%\"'). The call should be probably replaced with 'String.format(\"Hello, %s\", userName);'. This inspection checks calls to formatting methods on 'java.util.Formatter', 'java.lang.String', 'java.io.PrintWriter', or 'java.io.PrintStream'.", + "markdown": "Reports non-constant string concatenations used as a format string argument.\n\n\nWhile occasionally intended, this is usually a misuse of a formatting method\nand may even cause security issues if the variables used in the concatenated string\ncontain special characters like `%`.\n\n\nAlso, sometimes this could be the result\nof mistakenly concatenating a string format argument by typing a `+` when a `,` was meant.\n\n**Example:**\n\n\n static String formatGreeting(String userName) {\n return String.format(\"Hello, \" + userName);\n }\n\n\nHere, the `userName` will be interpreted as a part of format string, which may result\nin `IllegalFormatException` (for example, if `userName` is `\"%\"`) or\nin using an enormous amount of memory (for example, if `userName` is `\"%2000000000%\"`).\nThe call should be probably replaced with `String.format(\"Hello, %s\", userName);`.\n\n\nThis inspection checks calls to formatting methods on\n`java.util.Formatter`,\n`java.lang.String`,\n`java.io.PrintWriter`,\nor `java.io.PrintStream`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConditionalBreakInInfiniteLoop", + "shortDescription": { + "text": "Conditional break inside loop" + }, + "fullDescription": { + "text": "Reports conditional breaks at the beginning or at the end of a loop and suggests adding a loop condition instead to shorten the code. Example: 'while (true) {\n if (i == 23) break;\n i++;\n }' After the quick fix is applied: 'while (i != 23) {\n i++;\n }'", + "markdown": "Reports conditional breaks at the beginning or at the end of a loop and suggests adding a loop condition instead to shorten the code.\n\nExample:\n\n\n while (true) {\n if (i == 23) break;\n i++;\n }\n\nAfter the quick fix is applied:\n\n\n while (i != 23) {\n i++;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnqualifiedInnerClassAccess", + "shortDescription": { + "text": "Unqualified inner class access" + }, + "fullDescription": { + "text": "Reports references to inner classes that are not qualified with the name of the enclosing class. Example: 'import foo.Foo.Bar;\n\n class Foo {\n class Bar {}\n }\n\n class Baz {\n void f(Bar bar) {}\n }' After the quick-fix is applied: 'class Foo {\n class Bar {}\n }\n\n class Baz {\n void f(Foo.Bar bar) {}\n }' Use the inspection settings to ignore references to inner classes within the same class, which therefore do not require an import.", + "markdown": "Reports references to inner classes that are not qualified with the name of the enclosing class.\n\n**Example:**\n\n\n import foo.Foo.Bar;\n\n class Foo {\n class Bar {}\n }\n\n class Baz {\n void f(Bar bar) {}\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n class Bar {}\n }\n\n class Baz {\n void f(Foo.Bar bar) {}\n }\n\n\nUse the inspection settings to ignore references to inner classes within the same class,\nwhich therefore do not require an import." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantClassCall", + "shortDescription": { + "text": "Redundant 'isInstance()' or 'cast()' call" + }, + "fullDescription": { + "text": "Reports redundant calls of 'java.lang.Class' methods. For example, 'Xyz.class.isInstance(object)' can be replaced with 'object instanceof Xyz'. The instanceof check is preferred: even though the performance will probably be the same as these methods are intrinsics, they better indicate a static check. New in 2018.2", + "markdown": "Reports redundant calls of `java.lang.Class` methods.\n\nFor example, `Xyz.class.isInstance(object)` can be replaced with `object instanceof Xyz`.\nThe instanceof check is preferred: even though the performance will probably be the same as these methods are intrinsics,\nthey better indicate a static check.\n\nNew in 2018.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WaitWhileHoldingTwoLocks", + "shortDescription": { + "text": "'wait()' while holding two locks" + }, + "fullDescription": { + "text": "Reports calls to 'wait()' methods that may occur while the current thread is holding two locks. Since calling 'wait()' only releases one lock on its target, waiting with two locks held can easily lead to a deadlock. Example: 'synchronized (lockA) {\n synchronized (lockB) {\n lockB.wait(); //warning\n //thread A is stuck here holding lockA\n }\n }\n\n synchronized (lockA) { //thread B can't enter the block and release thread A\n lockB.notify();\n }'", + "markdown": "Reports calls to `wait()` methods that may occur while the current thread is holding two locks.\n\n\nSince calling `wait()` only releases one lock on its target,\nwaiting with two locks held can easily lead to a deadlock.\n\n**Example:**\n\n\n synchronized (lockA) {\n synchronized (lockB) {\n lockB.wait(); //warning\n //thread A is stuck here holding lockA\n }\n }\n\n synchronized (lockA) { //thread B can't enter the block and release thread A\n lockB.notify();\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryStringEscape", + "shortDescription": { + "text": "Unnecessarily escaped character" + }, + "fullDescription": { + "text": "Reports unnecessarily escaped characters in 'String' and optionally 'char' literals. The escaped tab character '\\t' is not reported, because otherwise it will be invisible. Examples: 'String s = \"\\'Scare\\' quotes\";\n String t = \"\"\"\n All you need is\\n\\tLove\\n\"\"\";' After the quick-fix is applied: 'String s = \"'Scare' quotes\";\n String t = \"\"\"\n All you need is\n \\tLove\n \"\"\";' New in 2019.3", + "markdown": "Reports unnecessarily escaped characters in `String` and optionally `char` literals.\n\nThe escaped tab character `\\t` is not reported, because otherwise it will be invisible.\n\nExamples:\n\n\n String s = \"\\'Scare\\' quotes\";\n String t = \"\"\"\n All you need is\\n\\tLove\\n\"\"\";\n\nAfter the quick-fix is applied:\n\n\n String s = \"'Scare' quotes\";\n String t = \"\"\"\n All you need is\n \\tLove\n \"\"\";\n\nNew in 2019.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SerializableInnerClassWithNonSerializableOuterClass", + "shortDescription": { + "text": "Serializable non-'static' inner class with non-Serializable outer class" + }, + "fullDescription": { + "text": "Reports non-static inner classes that implement 'Serializable' and are declared inside a class that doesn't implement 'Serializable'. Such classes are unlikely to serialize correctly due to implicit references to the outer class. Example: 'class A {\n class Main implements Serializable {\n }\n }' Use the following options to configure the inspection: List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit 'Serializable' from a superclass but are not intended for serialization. Whether to ignore 'Serializable' anonymous classes.", + "markdown": "Reports non-static inner classes that implement `Serializable` and are declared inside a class that doesn't implement `Serializable`.\n\n\nSuch classes are unlikely to serialize correctly due to implicit references to the outer class.\n\n**Example:**\n\n\n class A {\n class Main implements Serializable {\n }\n }\n\nUse the following options to configure the inspection:\n\n* List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit `Serializable` from a superclass but are not intended for serialization.\n* Whether to ignore `Serializable` anonymous classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 18, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousListRemoveInLoop", + "shortDescription": { + "text": "Suspicious 'List.remove()' in loop" + }, + "fullDescription": { + "text": "Reports 'list.remove(index)' calls inside an ascending counted loop. This is suspicious as the list becomes shorter after the removal, and the next element gets skipped. A simple fix is to decrease the index variable after the removal, but probably removing via an iterator or using the 'removeIf()' method (Java 8 and later) is a more robust alternative. If you don't expect that 'remove()' will be called more than once in a loop, consider adding a 'break' after it. Example: 'public static void main(String[] args) {\n process(new ArrayList<>(\n Arrays.asList(\"1\", \"2\", \"|\", \"3\", \"4\")));\n }\n\n static void process(List list) {\n for (int i = 0; i < list.size(); i++) {\n if (list.get(i).equals(\"|\")) {\n list.remove(i);\n continue;\n }\n System.out.println(list.get(i));\n }\n }' The code looks like '1 2 3 4' is going to be printed, but in reality, '3' will be skipped in the output. New in 2018.2", + "markdown": "Reports `list.remove(index)` calls inside an ascending counted loop.\n\n\nThis is suspicious as the list becomes\nshorter after the removal, and the next element gets skipped. A simple fix is to decrease the index variable\nafter the removal,\nbut probably removing via an iterator or using the `removeIf()` method (Java 8 and later) is a more robust alternative.\nIf you don't expect that `remove()` will be called more than once in a loop, consider adding a `break` after it.\n\n**Example:**\n\n public static void main(String[] args) {\n process(new ArrayList<>(\n Arrays.asList(\"1\", \"2\", \"|\", \"3\", \"4\")));\n }\n\n static void process(List list) {\n for (int i = 0; i < list.size(); i++) {\n if (list.get(i).equals(\"|\")) {\n list.remove(i);\n continue;\n }\n System.out.println(list.get(i));\n }\n }\n\nThe code looks like `1 2 3 4` is going to be printed, but in reality, `3` will be skipped in the output.\n\nNew in 2018.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JUnit5AssertionsConverter", + "shortDescription": { + "text": "JUnit 5 obsolete assertions" + }, + "fullDescription": { + "text": "Reports any calls to methods from the 'junit.framework.Assert', 'org.junit.Assert', or 'org.junit.Assume' classes inside JUnit 5 tests. Although the tests work properly, migration to 'org.junit.jupiter.api.Assertions'/'org.junit.jupiter.api.Assumptions' will help you avoid dependencies on old JUnit version. Example: 'import org.junit.Assert;\n import org.junit.jupiter.api.Test;\n\n public class MyTest {\n @Test\n public void simpleTest() {\n Assert.assertEquals(4, 2 + 2);\n }\n }' After the quick-fix is applied: 'import org.junit.jupiter.api.Assertions;\n import org.junit.jupiter.api.Test;\n\n public class MyTest {\n @Test\n public void simpleTest() {\n Assertions.assertEquals(4, 2 + 2);\n }\n }'", + "markdown": "Reports any calls to methods from the `junit.framework.Assert`, `org.junit.Assert`, or `org.junit.Assume`\nclasses inside JUnit 5 tests.\n\nAlthough the tests work properly, migration to `org.junit.jupiter.api.Assertions`/`org.junit.jupiter.api.Assumptions`\nwill help you avoid dependencies on old JUnit version.\n\n**Example:**\n\n\n import org.junit.Assert;\n import org.junit.jupiter.api.Test;\n\n public class MyTest {\n @Test\n public void simpleTest() {\n Assert.assertEquals(4, 2 + 2);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n import org.junit.jupiter.api.Assertions;\n import org.junit.jupiter.api.Test;\n\n public class MyTest {\n @Test\n public void simpleTest() {\n Assertions.assertEquals(4, 2 + 2);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages/Test frameworks", + "index": 85, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NegativeIntConstantInLongContext", + "shortDescription": { + "text": "Negative int hexadecimal constant in long context" + }, + "fullDescription": { + "text": "Reports negative int hexadecimal constants in long context. Such constants are implicitly widened to long, which means their higher bits will become 1 rather than 0 (e.g., 0xFFFF_FFFF will become 0xFFFF_FFFF_FFFF_FFFFL). Unlikely this is intended, and even if it is, using an explicit long constant would be less confusing. Example: '// Warning: this is int constant -1 which is widened to long\n // becoming 0xFFFF_FFFF_FFFF_FFFFL.\n long mask = 0xFFFF_FFFF;' New in 2022.3", + "markdown": "Reports negative int hexadecimal constants in long context. Such constants are implicitly widened to long, which means their higher bits will become 1 rather than 0 (e.g., 0xFFFF_FFFF will become 0xFFFF_FFFF_FFFF_FFFFL). Unlikely this is intended, and even if it is, using an explicit long constant would be less confusing.\n\n**Example:**\n\n\n // Warning: this is int constant -1 which is widened to long\n // becoming 0xFFFF_FFFF_FFFF_FFFFL.\n long mask = 0xFFFF_FFFF;\n\nNew in 2022.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FieldCanBeLocal", + "shortDescription": { + "text": "Field can be local" + }, + "fullDescription": { + "text": "Reports redundant class fields that can be replaced with local variables. If all local usages of a field are preceded by assignments to that field, the field can be removed, and its usages can be replaced with local variables.", + "markdown": "Reports redundant class fields that can be replaced with local variables.\n\nIf all local usages of a field are preceded by assignments to that field, the\nfield can be removed, and its usages can be replaced with local variables." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DefaultAnnotationParam", + "shortDescription": { + "text": "Default annotation parameter value" + }, + "fullDescription": { + "text": "Reports annotation parameters that are assigned to their 'default' value. Example: '@interface Test {\n Class expected() default Throwable.class;\n }\n\n @Test(expected = Throwable.class)\n void testSmth() {}' After the quick-fix is applied: '@Test()\n void testSmth() {}'", + "markdown": "Reports annotation parameters that are assigned to their `default` value.\n\nExample:\n\n\n @interface Test {\n Class expected() default Throwable.class;\n }\n\n @Test(expected = Throwable.class)\n void testSmth() {}\n\nAfter the quick-fix is applied:\n\n\n @Test()\n void testSmth() {}\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 15, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WhileLoopSpinsOnField", + "shortDescription": { + "text": "'while' loop spins on field" + }, + "fullDescription": { + "text": "Reports 'while' loops that spin on the value of a non-'volatile' field, waiting for it to be changed by another thread. In addition to being potentially extremely CPU intensive when little work is done inside the loop, such loops are likely to have different semantics from what was intended. The Java Memory Model allows such loops to never complete even if another thread changes the field's value. Additionally, since Java 9 it's recommended to call 'Thread.onSpinWait()' inside a spin loop on a 'volatile' field, which may significantly improve performance on some hardware. Example: 'class SpinsOnField {\n boolean ready = false;\n\n void run() {\n while (!ready) {\n }\n // do some work\n }\n\n void markAsReady() {\n ready = true;\n }\n }' After the quick-fix is applied: 'class SpinsOnField {\n volatile boolean ready = false;\n\n void run() {\n while (!ready) {\n Thread.onSpinWait();\n }\n // do some work\n }\n\n void markAsReady() {\n ready = true;\n }\n }' Use the inspection options to only report empty 'while' loops.", + "markdown": "Reports `while` loops that spin on the value of a non-`volatile` field, waiting for it to be changed by another thread.\n\n\nIn addition to being potentially extremely CPU intensive when little work is done inside the loop, such\nloops are likely to have different semantics from what was intended.\nThe Java Memory Model allows such loops to never complete even if another thread changes the field's value.\n\n\nAdditionally, since Java 9 it's recommended to call `Thread.onSpinWait()` inside a spin loop\non a `volatile` field, which may significantly improve performance on some hardware.\n\n**Example:**\n\n\n class SpinsOnField {\n boolean ready = false;\n\n void run() {\n while (!ready) {\n }\n // do some work\n }\n\n void markAsReady() {\n ready = true;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class SpinsOnField {\n volatile boolean ready = false;\n\n void run() {\n while (!ready) {\n Thread.onSpinWait();\n }\n // do some work\n }\n\n void markAsReady() {\n ready = true;\n }\n }\n\n\nUse the inspection options to only report empty `while` loops." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IfStatementWithIdenticalBranches", + "shortDescription": { + "text": "'if' statement with identical branches" + }, + "fullDescription": { + "text": "Reports 'if' statements in which common parts can be extracted from the branches. These common parts are independent from the condition and make 'if' statements harder to understand. Example: 'if (x > 12) {\n doSomethingBefore();\n doSomethingDifferent1();\n doSomethingAfter();\n } else {\n doSomethingBefore();\n doSomethingDifferent2();\n doSomethingAfter();\n }' After the quick-fix is applied: 'doSomethingBefore();\n if (x > 12) {\n doSomethingDifferent1();\n } else {\n doSomethingDifferent2();\n }\n doSomethingAfter();' Updated in 2018.1", + "markdown": "Reports `if` statements in which common parts can be extracted from the branches.\n\nThese common parts are independent from the condition and make `if` statements harder to understand.\n\nExample:\n\n\n if (x > 12) {\n doSomethingBefore();\n doSomethingDifferent1();\n doSomethingAfter();\n } else {\n doSomethingBefore();\n doSomethingDifferent2();\n doSomethingAfter();\n }\n\nAfter the quick-fix is applied:\n\n\n doSomethingBefore();\n if (x > 12) {\n doSomethingDifferent1();\n } else {\n doSomethingDifferent2();\n }\n doSomethingAfter();\n\nUpdated in 2018.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InterfaceWithOnlyOneDirectInheritor", + "shortDescription": { + "text": "Interface with a single direct inheritor" + }, + "fullDescription": { + "text": "Reports interfaces that have precisely one direct inheritor. While such interfaces may offer admirable clarity of design, in memory-constrained or bandwidth-limited environments, they needlessly increase the total footprint of the application. Consider merging the interface with its inheritor. This inspection is intended for Java ME and other highly resource constrained environments. Applying the results of this inspection without consideration might have negative effects on code clarity and design.", + "markdown": "Reports interfaces that have precisely one direct inheritor. While such interfaces may offer admirable clarity of design, in memory-constrained or bandwidth-limited environments, they needlessly increase the total footprint of the application. Consider merging the interface with its inheritor.\n\n\nThis inspection is intended for Java ME and other highly resource constrained environments.\nApplying the results of this inspection without consideration might have negative effects on code clarity and design." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance/Embedded", + "index": 21, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InstanceofChain", + "shortDescription": { + "text": "Chain of 'instanceof' checks" + }, + "fullDescription": { + "text": "Reports any chains of 'if'-'else' statements all of whose conditions are 'instanceof' expressions or class equality expressions (e.g. comparison with 'String.class'). Such constructions usually indicate a failure in object-oriented design which dictates that such type-based dispatch should be done via polymorphic method calls rather than explicit chains of type tests. Example: 'double getArea(Shape shape) {\n // Warning: abstraction failure.\n // It would be better to declare a getArea()\n // abstract method in the shape interface\n // and implement it in every inheritor.\n if (shape instanceof Point) {\n return 0;\n }\n if (shape instanceof Circle) {\n return Math.PI *\n Math.pow(((Circle) shape).radius(), 2);\n }\n if (shape instanceof Rectangle) {\n return ((Rectangle) shape).width() *\n ((Rectangle) shape).height();\n }\n throw new IllegalArgumentException();\n }' Use the checkbox below to ignore 'instanceof' expressions on library classes.", + "markdown": "Reports any chains of `if`-`else` statements all of whose conditions are `instanceof` expressions or class equality expressions (e.g. comparison with `String.class`). Such constructions usually indicate a failure in object-oriented design which dictates that such type-based dispatch should be done via polymorphic method calls rather than explicit chains of type tests.\n\nExample:\n\n\n double getArea(Shape shape) {\n // Warning: abstraction failure.\n // It would be better to declare a getArea()\n // abstract method in the shape interface\n // and implement it in every inheritor.\n if (shape instanceof Point) {\n return 0;\n }\n if (shape instanceof Circle) {\n return Math.PI *\n Math.pow(((Circle) shape).radius(), 2);\n }\n if (shape instanceof Rectangle) {\n return ((Rectangle) shape).width() *\n ((Rectangle) shape).height();\n }\n throw new IllegalArgumentException();\n }\n\n\nUse the checkbox below to ignore `instanceof` expressions on library classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 75, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BlockMarkerComments", + "shortDescription": { + "text": "Block marker comment" + }, + "fullDescription": { + "text": "Reports comments which are used as code block markers. The quick-fix removes such comments. Example: 'while (i < 10) {\n i++;\n } // end while' After the quick-fix is applied: 'while (i < 10) {\n i++;\n }'", + "markdown": "Reports comments which are used as code block markers. The quick-fix removes such comments.\n\nExample:\n\n\n while (i < 10) {\n i++;\n } // end while\n\nAfter the quick-fix is applied:\n\n\n while (i < 10) {\n i++;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SerializableHasSerializationMethods", + "shortDescription": { + "text": "Serializable class without 'readObject()' and 'writeObject()'" + }, + "fullDescription": { + "text": "Reports 'Serializable' classes that do not implement 'readObject()' and 'writeObject()' methods. If 'readObject()' and 'writeObject()' methods are not implemented, the default serialization algorithms are used, which may be sub-optimal for performance and compatibility in many environments. Use the following options to configure the inspection: List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit 'Serializable' from a superclass but are not intended for serialization. Whether to ignore 'Serializable' classes without non-static fields. Whether to ignore 'Serializable' anonymous classes.", + "markdown": "Reports `Serializable` classes that do not implement `readObject()` and `writeObject()` methods.\n\n\nIf `readObject()` and `writeObject()` methods are not implemented,\nthe default serialization algorithms are used,\nwhich may be sub-optimal for performance and compatibility in many environments.\n\n\nUse the following options to configure the inspection:\n\n* List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit `Serializable` from a superclass but are not intended for serialization.\n* Whether to ignore `Serializable` classes without non-static fields.\n* Whether to ignore `Serializable` anonymous classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 18, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SynchronizeOnLock", + "shortDescription": { + "text": "Synchronization on a 'Lock' object" + }, + "fullDescription": { + "text": "Reports 'synchronized' blocks that lock on an instance of 'java.util.concurrent.locks.Lock'. Such synchronization is almost certainly unintended, and appropriate versions of '.lock()' and '.unlock()' should be used instead. Example: 'final ReentrantLock lock = new ReentrantLock();\n\n public void foo() {\n synchronized (lock) {}\n }'", + "markdown": "Reports `synchronized` blocks that lock on an instance of `java.util.concurrent.locks.Lock`. Such synchronization is almost certainly unintended, and appropriate versions of `.lock()` and `.unlock()` should be used instead.\n\n**Example:**\n\n\n final ReentrantLock lock = new ReentrantLock();\n\n public void foo() {\n synchronized (lock) {}\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BadExceptionCaught", + "shortDescription": { + "text": "Prohibited 'Exception' caught" + }, + "fullDescription": { + "text": "Reports 'catch' clauses that catch an inappropriate exception. Some exceptions, for example 'java.lang.NullPointerException' or 'java.lang.IllegalMonitorStateException', represent programming errors and therefore almost certainly should not be caught in production code. Example: 'try {\n return component.getMousePosition(true) != null;\n } catch (NullPointerException e) { // warning: Prohibited exception 'NullPointerException' caught\n return false;\n }' Use the Prohibited exceptions list to specify which exceptions should be reported.", + "markdown": "Reports `catch` clauses that catch an inappropriate exception.\n\nSome exceptions, for example\n`java.lang.NullPointerException` or\n`java.lang.IllegalMonitorStateException`, represent programming errors\nand therefore almost certainly should not be caught in production code.\n\n**Example:**\n\n\n try {\n return component.getMousePosition(true) != null;\n } catch (NullPointerException e) { // warning: Prohibited exception 'NullPointerException' caught\n return false;\n }\n\nUse the **Prohibited exceptions** list to specify which exceptions should be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IdempotentLoopBody", + "shortDescription": { + "text": "Idempotent loop body" + }, + "fullDescription": { + "text": "Reports loops whose second and all subsequent iterations do not produce any additional side effects other than the one produced by the first iteration, which can indicate a programming error. Such loops may iterate only zero, one, or infinite number of times. If the infinite number of times case is unreachable, such a loop can be replaced with an 'if' statement. Otherwise, there's a possibility that the program can get stuck. Example: 'public void foo(String baseName, String names) {\n int suffix = 1;\n String name = baseName;\n while (names.contains(name)) {\n // error: suffix is not updated making loop body idempotent\n name = baseName + suffix;\n }\n }' New in 2018.1", + "markdown": "Reports loops whose second and all subsequent iterations do not produce any additional side effects other than the one produced by the first iteration, which can indicate a programming error.\n\nSuch loops may iterate only zero, one, or infinite number of times.\nIf the infinite number of times case is unreachable, such a loop can be replaced with an `if` statement.\nOtherwise, there's a possibility that the program can get stuck.\n\nExample:\n\n\n public void foo(String baseName, String names) {\n int suffix = 1;\n String name = baseName;\n while (names.contains(name)) {\n // error: suffix is not updated making loop body idempotent\n name = baseName + suffix;\n }\n }\n\nNew in 2018.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantImplements", + "shortDescription": { + "text": "Redundant interface declaration" + }, + "fullDescription": { + "text": "Reports classes declaring that they implement or extend an interface, when that interface is already declared as 'implemented' by a superclass or extended by another interface of that class. Such declarations are unnecessary and may be safely removed.", + "markdown": "Reports classes declaring that they implement or extend an interface, when that interface is already declared as `implemented` by a superclass or extended by another interface of that class. Such declarations are unnecessary and may be safely removed." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 15, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InstanceofCatchParameter", + "shortDescription": { + "text": "'instanceof' on 'catch' parameter" + }, + "fullDescription": { + "text": "Reports cases in which an 'instanceof' expression is used for testing the type of a parameter in a 'catch' block. Testing the type of 'catch' parameters is usually better done by having separate 'catch' blocks instead of using 'instanceof'. Example: 'void foo(Runnable runnable) {\n try {\n runnable.run();\n } catch (Throwable throwable) {\n if (throwable instanceof NoClassDefFoundError) { // warning: 'instanceof' on 'catch' parameter 'throwable'\n System.out.println(\"Class not found!\");\n }\n }\n }'", + "markdown": "Reports cases in which an `instanceof` expression is used for testing the type of a parameter in a `catch` block.\n\nTesting the type of `catch` parameters is usually better done by having separate\n`catch` blocks instead of using `instanceof`.\n\n**Example:**\n\n\n void foo(Runnable runnable) {\n try {\n runnable.run();\n } catch (Throwable throwable) {\n if (throwable instanceof NoClassDefFoundError) { // warning: 'instanceof' on 'catch' parameter 'throwable'\n System.out.println(\"Class not found!\");\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantScheduledForRemovalAnnotation", + "shortDescription": { + "text": "Redundant @ScheduledForRemoval annotation" + }, + "fullDescription": { + "text": "Reports usages of '@ApiStatus.ScheduledForRemoval' annotation without 'inVersion' attribute in code which targets Java 9 or newer version. Such usages can be replaced by 'forRemoval' attribute in '@Deprecated' annotation to simplify code. New in 2022.1", + "markdown": "Reports usages of `@ApiStatus.ScheduledForRemoval` annotation without `inVersion` attribute in code which targets Java 9 or newer version.\n\n\nSuch usages can be replaced by `forRemoval` attribute in `@Deprecated` annotation to simplify code.\n\nNew in 2022.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code maturity", + "index": 49, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OptionalGetWithoutIsPresent", + "shortDescription": { + "text": "Optional.get() is called without isPresent() check" + }, + "fullDescription": { + "text": "Reports calls to 'get()' on an 'Optional' without checking that it has a value. Calling 'Optional.get()' on an empty 'Optional' instance will throw an exception. Example: 'void x(List list) {\n final Optional optional =\n list.stream().filter(x -> x > 10).findFirst();\n final Integer result = optional.get(); // problem here\n }'", + "markdown": "Reports calls to `get()` on an `Optional` without checking that it has a value.\n\nCalling `Optional.get()` on an empty `Optional` instance will throw an exception.\n\n**Example:**\n\n\n void x(List list) {\n final Optional optional =\n list.stream().filter(x -> x > 10).findFirst();\n final Integer result = optional.get(); // problem here\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FrequentlyUsedInheritorInspection", + "shortDescription": { + "text": "Class may extend a commonly used base class" + }, + "fullDescription": { + "text": "Reports classes or interfaces that can be replaced with an implementation or extension of a more specific commonly used class or interface. For this inspection to work, a superclass needs to be in project source files and the project needs to use the IntelliJ IDEA build system. Example: 'class MyInheritor implements A {} // B suggested on the A reference\n\n interface A {}\n\n abstract class B implements A {}\n\n abstract class C1 extends B {}\n abstract class C2 extends B {}\n abstract class C3 extends B {}\n abstract class C4 extends B {}\n abstract class C5 extends B {}' By default, this inspection doesn't highlight issues in the editor but only provides a quick-fix. New in 2017.2", + "markdown": "Reports classes or interfaces that can be replaced with an implementation or extension of a more specific commonly used class or interface.\n\nFor this inspection to work, a superclass needs to be in project source files and the project needs to use the IntelliJ IDEA build system.\n\n**Example:**\n\n\n class MyInheritor implements A {} // B suggested on the A reference\n\n interface A {}\n\n abstract class B implements A {}\n\n abstract class C1 extends B {}\n abstract class C2 extends B {}\n abstract class C3 extends B {}\n abstract class C4 extends B {}\n abstract class C5 extends B {}\n\nBy default, this inspection doesn't highlight issues in the editor but only provides a quick-fix.\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 25, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OnDemandImport", + "shortDescription": { + "text": "'*' import" + }, + "fullDescription": { + "text": "Reports any 'import' statements that cover entire packages ('* imports'). Some coding standards prohibit such 'import' statements. You can configure IntelliJ IDEA to detect and fix such statements with its Optimize Imports command. Go to Settings | Editor | Code Style | Java | Imports, make sure that the Use single class import option is enabled, and specify values in the Class count to use import with '*' and Names count to use static import with '*' fields. Thus this inspection is mostly useful for offline reporting on code bases that you don't intend to change.", + "markdown": "Reports any `import` statements that cover entire packages ('\\* imports').\n\nSome coding standards prohibit such `import` statements.\n\n\nYou can configure IntelliJ IDEA to detect and fix such statements with its **Optimize Imports**\ncommand. Go to [Settings \\| Editor \\| Code Style \\| Java \\| Imports](settings://preferences.sourceCode.Java?Use%20single%20class%20import),\nmake sure that the **Use single class import** option is enabled, and specify values in the\n**Class count to use import with '\\*'** and **Names count to use static import with '\\*'** fields.\nThus this inspection is mostly useful for offline reporting on code bases that you don't\nintend to change." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Imports", + "index": 22, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FallthruInSwitchStatement", + "shortDescription": { + "text": "Fallthrough in 'switch' statement" + }, + "fullDescription": { + "text": "Reports 'fall-through' in a 'switch' statement. Fall-through occurs when a series of executable statements after a 'case' label is not guaranteed to transfer control before the next 'case' label. For example, this can happen if the branch is missing a 'break' statement. In that case, control falls through to the statements after that 'switch' label, even though the 'switch' expression is not equal to the value of the fallen-through label. While occasionally intended, this construction is confusing and is often the result of a typo. This inspection ignores any fall-through commented with a text matching the regex pattern '(?i)falls?\\s*thro?u'. There is a fix that adds a 'break' to the branch that can fall through to the next branch. Example: 'switch(x) {\n case (4):\n if (condition) {\n System.out.println(\"3\");\n // no break here\n } else {\n break;\n }\n case (6):\n System.out.println(\"4\");\n }' After the quick-fix is applied: 'switch(x) {\n case (4):\n if (condition) {\n System.out.println(\"3\");\n } else {\n break;\n }\n break;\n case (6):\n System.out.println(\"4\");\n }'", + "markdown": "Reports 'fall-through' in a `switch` statement.\n\nFall-through occurs when a series of executable statements after a `case` label is not guaranteed\nto transfer control before the next `case` label. For example, this can happen if the branch is missing a `break` statement.\nIn that case, control falls through to the statements after\nthat `switch` label, even though the `switch` expression is not equal to\nthe value of the fallen-through label. While occasionally intended, this construction is confusing and is often the result of a typo.\n\n\nThis inspection ignores any fall-through commented with a text matching the regex pattern `(?i)falls?\\s*thro?u`.\n\nThere is a fix that adds a `break` to the branch that can fall through to the next branch.\n\nExample:\n\n\n switch(x) {\n case (4):\n if (condition) {\n System.out.println(\"3\");\n // no break here\n } else {\n break;\n }\n case (6):\n System.out.println(\"4\");\n }\n\nAfter the quick-fix is applied:\n\n\n switch(x) {\n case (4):\n if (condition) {\n System.out.println(\"3\");\n } else {\n break;\n }\n break;\n case (6):\n System.out.println(\"4\");\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OptionalIsPresent", + "shortDescription": { + "text": "Non functional style 'Optional.isPresent()' usage" + }, + "fullDescription": { + "text": "Reports conditions, like 'if(Optional.isPresent())' or 'if(Optional.isEmpty())', that can be rewritten in the functional style, as it is shorter and easier to read. Example: 'if (str.isPresent()) str.get().trim();' After the quick-fix is applied: 'str.ifPresent(String::trim);' This inspection only reports if the language level of the project or module is 8 or higher.", + "markdown": "Reports conditions, like `if(Optional.isPresent())` or `if(Optional.isEmpty())`, that can be rewritten in the functional style, as it is shorter and easier to read.\n\nExample:\n\n\n if (str.isPresent()) str.get().trim();\n\nAfter the quick-fix is applied:\n\n\n str.ifPresent(String::trim);\n\nThis inspection only reports if the language level of the project or module is 8 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantOperationOnEmptyContainer", + "shortDescription": { + "text": "Redundant operation on empty container" + }, + "fullDescription": { + "text": "Reports redundant operations on empty collections, maps or arrays. Iterating, removing elements, sorting, and some other operations on empty collections have no effect and can be removed. Also, they may be a signal of a bug. Example: 'if (numbers.isEmpty()){\n //error due to the missed negation\n int max = numbers.stream().max(Comparator.naturalOrder()).get();\n ...\n }' New in 2019.1", + "markdown": "Reports redundant operations on empty collections, maps or arrays.\n\n\nIterating, removing elements, sorting,\nand some other operations on empty collections have no effect and can be removed. Also, they may be a signal of a bug.\n\n**Example:**\n\n\n if (numbers.isEmpty()){\n //error due to the missed negation\n int max = numbers.stream().max(Comparator.naturalOrder()).get();\n ...\n }\n\nNew in 2019.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FieldNamingConvention", + "shortDescription": { + "text": "Field naming convention" + }, + "fullDescription": { + "text": "Reports fields whose names are too short, too long, or do not follow the specified regular expression pattern. Example: if the inspection is enabled for constants, and the minimum specified length for a field name is 5 (the default), the following constant produces a warning because the length of its name is 3, which is less than 5: 'public static final int MAX = 42;'. A quick-fix that renames such fields is available only in the editor. Configure the inspection: Use the list in the Options section to specify which fields should be checked. Deselect the checkboxes for the fields for which you want to skip the check. For each field type, specify the minimum length, maximum length, and the regular expression expected for field names using the provided input fields. Specify 0 in the length fields to skip the corresponding checks. Regular expressions should be specified in the standard 'java.util.regex' format.", + "markdown": "Reports fields whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n**Example:** if the inspection is enabled for constants, and the minimum specified length for a field name is 5 (the default), the following constant\nproduces a warning because the length of its name is 3, which is less than 5: `public static final int MAX = 42;`.\n\nA quick-fix that renames such fields is available only in the editor.\n\nConfigure the inspection:\n\nUse the list in the **Options** section to specify which fields should be checked. Deselect the checkboxes for the fields for which\nyou want to skip the check.\n\nFor each field type, specify the minimum length, maximum length, and the regular expression expected for field names using the\nprovided input fields.\nSpecify **0** in the length fields to skip the corresponding checks.\n\nRegular expressions should be specified in the standard\n`java.util.regex` format." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions", + "index": 50, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AtomicFieldUpdaterNotStaticFinal", + "shortDescription": { + "text": "'AtomicFieldUpdater' field not declared 'static final'" + }, + "fullDescription": { + "text": "Reports fields of types: 'java.util.concurrent.atomic.AtomicLongFieldUpdater' 'java.util.concurrent.atomic.AtomicIntegerFieldUpdater' 'java.util.concurrent.atomic.AtomicReferenceFieldUpdater' that are not 'static final'. Because only one atomic field updater is needed for updating a 'volatile' field in all instances of a class, it can almost always be 'static'. Making the updater 'final' allows the JVM to optimize access for improved performance. Example: 'class Main {\n private volatile int id;\n private AtomicIntegerFieldUpdater

    idFieldUpdater = AtomicIntegerFieldUpdater.newUpdater(Main.class, \"id\");\n }' After the quick-fix is applied: 'class Main {\n private volatile int id;\n private static final AtomicIntegerFieldUpdater
    idFieldUpdater = AtomicIntegerFieldUpdater.newUpdater(Main.class, \"id\");\n }'", + "markdown": "Reports fields of types:\n\n* `java.util.concurrent.atomic.AtomicLongFieldUpdater`\n* `java.util.concurrent.atomic.AtomicIntegerFieldUpdater`\n* `java.util.concurrent.atomic.AtomicReferenceFieldUpdater`\n\nthat are not `static final`. Because only one atomic field updater is needed for updating a `volatile` field in all instances of a class, it can almost always be `static`.\n\nMaking the updater `final` allows the JVM to optimize access for improved performance.\n\n**Example:**\n\n\n class Main {\n private volatile int id;\n private AtomicIntegerFieldUpdater
    idFieldUpdater = AtomicIntegerFieldUpdater.newUpdater(Main.class, \"id\");\n }\n\nAfter the quick-fix is applied:\n\n\n class Main {\n private volatile int id;\n private static final AtomicIntegerFieldUpdater
    idFieldUpdater = AtomicIntegerFieldUpdater.newUpdater(Main.class, \"id\");\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java8MapForEach", + "shortDescription": { + "text": "Map.forEach() can be used" + }, + "fullDescription": { + "text": "Suggests replacing 'for(Entry entry : map.entrySet()) {...}' or 'map.entrySet().forEach(entry -> ...)' with 'map.forEach((key, value) -> ...)'. Example 'void print(Map map) {\n map.entrySet().forEach(entry -> {\n String str = entry.getKey();\n System.out.println(str + \":\" + entry.getValue());\n });\n }' After the quick-fix is applied: 'void print(Map map) {\n map.forEach((str, value) -> System.out.println(str + \":\" + value));\n }' When the Do not report loops option is enabled, only 'entrySet().forEach()' cases will be reported. However, the quick-fix action will be available for 'for'-loops as well. This inspection only reports if the language level of the project or module is 8 or higher. New in 2017.1", + "markdown": "Suggests replacing `for(Entry entry : map.entrySet()) {...}` or `map.entrySet().forEach(entry -> ...)` with `map.forEach((key, value) -> ...)`.\n\nExample\n\n\n void print(Map map) {\n map.entrySet().forEach(entry -> {\n String str = entry.getKey();\n System.out.println(str + \":\" + entry.getValue());\n });\n }\n\nAfter the quick-fix is applied:\n\n\n void print(Map map) {\n map.forEach((str, value) -> System.out.println(str + \":\" + value));\n }\n\n\nWhen the **Do not report loops** option is enabled, only `entrySet().forEach()` cases will be reported.\nHowever, the quick-fix action will be available for `for`-loops as well.\n\nThis inspection only reports if the language level of the project or module is 8 or higher.\n\nNew in 2017.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 59, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassNamePrefixedWithPackageName", + "shortDescription": { + "text": "Class name prefixed with package name" + }, + "fullDescription": { + "text": "Reports classes whose names are prefixed with their package names, ignoring differences in capitalization. While occasionally having such names is reasonable, they are often used due to a poor naming scheme, may be redundant and annoying. Example: 'package byteCode;\n class ByteCodeAnalyzer {}' A quick-fix that renames such classes is available only in the editor.", + "markdown": "Reports classes whose names are prefixed with their package names, ignoring differences in capitalization.\n\nWhile occasionally having such names is reasonable, they are often used due to a poor naming scheme, may be redundant and\nannoying.\n\n**Example:**\n\n\n package byteCode;\n class ByteCodeAnalyzer {}\n\nA quick-fix that renames such classes is available only in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Class", + "index": 67, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstantConditionalExpression", + "shortDescription": { + "text": "Constant conditional expression" + }, + "fullDescription": { + "text": "Reports conditional expressions in which the condition is either a 'true' or 'false' constant. These expressions sometimes occur as a result of automatic refactorings and may be simplified. Example: 'return true ? \"Yes\" : \"No\";' After quick-fix is applied: 'return \"Yes\";'", + "markdown": "Reports conditional expressions in which the condition is either a `true` or `false` constant. These expressions sometimes occur as a result of automatic refactorings and may be simplified.\n\nExample:\n\n\n return true ? \"Yes\" : \"No\";\n\nAfter quick-fix is applied:\n\n\n return \"Yes\";\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SameParameterValue", + "shortDescription": { + "text": "Method parameter is always the same value" + }, + "fullDescription": { + "text": "Reports method parameters that always have the same constant value. Example: 'static void printPoint(int x, int y) { // x is always 0\n System.out.println(x + \", \" + y);\n }\n\n public static void main(String[] args) {\n printPoint(0, 1);\n printPoint(0, 2);\n }' The quick-fix inlines the constant value. This may simplify the method implementation. Use the Ignore when inline parameter initializer would not succeed option to suppress the inspections when: the parameter is modified inside the method. the parameter value that is being passed is a reference to an inaccessible field (only in Java). the parameter is a vararg (only in Java). Use the Maximal reported method visibility option to control the maximum visibility of methods to be reported. Use the Minimal reported method usage count field to specify the minimal number of method usages with the same parameter value.", + "markdown": "Reports method parameters that always have the same constant value.\n\nExample:\n\n\n static void printPoint(int x, int y) { // x is always 0\n System.out.println(x + \", \" + y);\n }\n\n public static void main(String[] args) {\n printPoint(0, 1);\n printPoint(0, 2);\n }\n\nThe quick-fix inlines the constant value. This may simplify the method implementation.\n\n\nUse the **Ignore when inline parameter initializer would not succeed** option to suppress the inspections when:\n\n* the parameter is modified inside the method.\n* the parameter value that is being passed is a reference to an inaccessible field (only in Java).\n* the parameter is a vararg (only in Java).\n\n\nUse the **Maximal reported method visibility** option to control the maximum visibility of methods to be reported.\n\n\nUse the **Minimal reported method usage count** field to specify the minimal number of method usages with the same parameter value." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 15, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CatchMayIgnoreException", + "shortDescription": { + "text": "Catch block may ignore exception" + }, + "fullDescription": { + "text": "Reports 'catch' blocks that are empty or may ignore an exception. While occasionally intended, empty 'catch' blocks may complicate debugging. Also, ignoring a 'catch' parameter might be wrong. Finally, the static code analyzer reports if it detects that a 'catch' block may silently ignore important VM exceptions like 'NullPointerException'. Ignoring such an exception (without logging or rethrowing it) may hide a bug. The inspection won't report any 'catch' parameters named 'ignore' or 'ignored'. Conversely, the inspection will warn you about any 'catch' parameters named 'ignore' or 'ignored' that are actually in use. Additionally, the inspection won't report 'catch' parameters inside test sources named 'expected' or 'ok'. You can use a quick-fix to change the exception name to 'ignored'. For empty catch blocks, an additional quick-fix to generate the catch body is suggested. You can modify the \"Catch Statement Body\" template on the Code tab in Settings | Editor | File and Code Templates. Example: 'try {\n throwingMethod();\n } catch (IOException ex) {\n\n }' After the quick-fix is applied: 'try {\n System.out.println(System.in.read());\n } catch (IOException ignored) {\n\n }' Configure the inspection: Use the Do not warn when 'catch' block contains a comment option to ignore 'catch' blocks with comments. Use the Do not warn when 'catch' block is not empty option to ignore 'catch' blocks that contain statements or comments inside, while the variable itself is not used. Use the Do not warn when exception named 'ignore(d)' is not actually ignored option to ignore variables named 'ignored' if they are in use. New in 2018.1", + "markdown": "Reports `catch` blocks that are empty or may ignore an exception.\n\nWhile occasionally intended, empty `catch` blocks may complicate debugging.\nAlso, ignoring a `catch` parameter might be wrong.\nFinally, the static code analyzer reports if it detects that a `catch` block may silently ignore important VM\nexceptions like `NullPointerException`. Ignoring such an exception\n(without logging or rethrowing it) may hide a bug.\n\n\nThe inspection won't report any `catch` parameters named `ignore` or `ignored`.\nConversely, the inspection will warn you about any `catch` parameters named `ignore` or `ignored` that are actually in use.\nAdditionally, the inspection won't report `catch` parameters inside test sources named `expected` or `ok`.\n\n\nYou can use a quick-fix to change the exception name to `ignored`.\nFor empty **catch** blocks, an additional quick-fix to generate the **catch** body is suggested.\nYou can modify the \"Catch Statement Body\" template on the Code tab in\n[Settings \\| Editor \\| File and Code Templates](settings://fileTemplates).\n\n**Example:**\n\n\n try {\n throwingMethod();\n } catch (IOException ex) {\n\n }\n\nAfter the quick-fix is applied:\n\n\n try {\n System.out.println(System.in.read());\n } catch (IOException ignored) {\n\n }\n\nConfigure the inspection:\n\n* Use the **Do not warn when 'catch' block contains a comment** option to ignore `catch` blocks with comments.\n* Use the **Do not warn when 'catch' block is not empty** option to ignore `catch` blocks that contain statements or comments inside, while the variable itself is not used.\n* Use the **Do not warn when exception named 'ignore(d)' is not actually ignored** option to ignore variables named `ignored` if they are in use.\n\nNew in 2018.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassWithTooManyDependents", + "shortDescription": { + "text": "Class with too many dependents" + }, + "fullDescription": { + "text": "Reports a class on which too many other classes are directly dependent. Any modification to such a class may require changing many other classes, which may be expensive. Only top-level classes are reported. Use the field below to specify the maximum allowed number of dependents for a class. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports a class on which too many other classes are directly dependent.\n\nAny modification to such a class may require changing many other classes, which may be expensive.\n\nOnly top-level classes are reported.\n\nUse the field below to specify the maximum allowed number of dependents for a class.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Dependency issues", + "index": 89, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RecordStoreResource", + "shortDescription": { + "text": "'RecordStore' opened but not safely closed" + }, + "fullDescription": { + "text": "Reports Java ME 'javax.microedition.rms.RecordStore' resources that are not opened in front of a 'try' block and closed in the corresponding 'finally' block. Such resources may be inadvertently leaked if an exception is thrown before the resource is closed. This inspection is intended for Java ME and other highly resource constrained environments. Applying the results of this inspection without consideration might have negative effects on code clarity and design. Example: 'void foo1() throws RecordStoreException {\n RecordStore rs = RecordStore.openRecordStore(\"bar\", true); // warning\n }\n void foo2() throws RecordStoreException {\n RecordStore rs = RecordStore.openRecordStore(\"bar\", true); // no warning\n try {\n /* ... */\n } finally {\n rs.closeRecordStore();\n }\n }'", + "markdown": "Reports Java ME `javax.microedition.rms.RecordStore` resources that are not opened in front of a `try` block and closed in the corresponding `finally` block.\n\nSuch resources may be inadvertently leaked if an exception is thrown before the resource is closed.\n\n\nThis inspection is intended for Java ME and other highly resource constrained environments.\nApplying the results of this inspection without consideration might have negative effects on code clarity and design.\n\n**Example:**\n\n\n void foo1() throws RecordStoreException {\n RecordStore rs = RecordStore.openRecordStore(\"bar\", true); // warning\n }\n void foo2() throws RecordStoreException {\n RecordStore rs = RecordStore.openRecordStore(\"bar\", true); // no warning\n try {\n /* ... */\n } finally {\n rs.closeRecordStore();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance/Embedded", + "index": 21, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WrongPackageStatement", + "shortDescription": { + "text": "Wrong package statement" + }, + "fullDescription": { + "text": "Detects 'package' statements that do not correspond to the project directory structure. Also, reports classes without 'package' statements if the class is not located directly in source root directory. While it's not strictly mandated by Java language, it's good to keep classes from package 'com.example.myapp' inside the 'com/example/myapp' directory under the source root. Failure to do this may confuse code readers and make some tools working incorrectly.", + "markdown": "Detects `package` statements that do not correspond to the project directory structure. Also, reports classes without `package` statements if the class is not located directly in source root directory.\n\nWhile it's not strictly mandated by Java language, it's good to keep classes\nfrom package `com.example.myapp` inside the `com/example/myapp` directory under\nthe source root. Failure to do this may confuse code readers and make some tools working incorrectly." + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObjectsEqualsCanBeSimplified", + "shortDescription": { + "text": "'Objects.equals()' can be replaced with 'equals()'" + }, + "fullDescription": { + "text": "Reports calls to 'Objects.equals(a, b)' in which the first argument is statically known to be non-null. Such a call can be safely replaced with 'a.equals(b)' or 'a == b' if both arguments are primitives. Example: 'String defaultName = \"default\";\n boolean isDefault = Objects.equals(defaultName, name);' After the quick-fix is applied: 'String defaultName = \"default\";\n boolean isDefault = defaultName.equals(name);' New in 2018.3", + "markdown": "Reports calls to `Objects.equals(a, b)` in which the first argument is statically known to be non-null.\n\nSuch a call can be safely replaced with `a.equals(b)` or `a == b` if both arguments are primitives.\n\nExample:\n\n\n String defaultName = \"default\";\n boolean isDefault = Objects.equals(defaultName, name);\n\nAfter the quick-fix is applied:\n\n\n String defaultName = \"default\";\n boolean isDefault = defaultName.equals(name);\n\nNew in 2018.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassLoaderInstantiation", + "shortDescription": { + "text": "'ClassLoader' instantiation" + }, + "fullDescription": { + "text": "Reports instantiations of the 'java.lang.ClassLoader' class. While often benign, any instantiations of 'ClassLoader' should be closely examined in any security audit. Example: 'Class loadExtraClass(String name) throws Exception {\n try(URLClassLoader loader =\n new URLClassLoader(new URL[]{new URL(\"extraClasses/\")})) {\n return loader.loadClass(name);\n }\n }'", + "markdown": "Reports instantiations of the `java.lang.ClassLoader` class.\n\nWhile often benign, any instantiations of `ClassLoader` should be closely examined in any security audit.\n\n**Example:**\n\n Class loadExtraClass(String name) throws Exception {\n try(URLClassLoader loader =\n new URLClassLoader(new URL[]{new URL(\"extraClasses/\")})) {\n return loader.loadClass(name);\n }\n }\n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 30, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FieldNotUsedInToString", + "shortDescription": { + "text": "Field not used in 'toString()' method" + }, + "fullDescription": { + "text": "Reports any fields that are not used in the 'toString()' method of a class. This inspection can help discover the fields that were added after the 'toString()' method was created and for which the 'toString()' method was not updated. The quick-fix regenerates the 'toString()' method. In the Generate | toString() dialog, it is possible to exclude fields from this check. This inspection will also check for problems with getter methods if the Enable getters in code generation option is enabled there. Example: 'public class Relevant {\n private String name; // not used in toString()\n private int index;\n private int length;\n\n @Override\n public String toString() {\n return \"Relevant{\" + \"index=\" + index +\n \", length=\" + length + '}';\n }\n }' After the quick-fix is applied: 'public class Relevant {\n private String name;\n private int index;\n private int length;\n\n @Override\n public String toString() {\n return \"Relevant{\" + \"name='\" + name + '\\'' +\n \", index=\" + index + \", length=\" + length + '}';\n }\n }'", + "markdown": "Reports any fields that are not used in the `toString()` method of a class.\n\nThis inspection can help discover the\nfields that were added after the `toString()` method was created and for which the `toString()` method was not\nupdated. The quick-fix regenerates the `toString()` method.\n\n\nIn the **Generate \\| toString()** dialog, it is possible to exclude fields from this check.\nThis inspection will also check for problems with getter methods if the *Enable getters in code generation* option is enabled there.\n\nExample:\n\n\n public class Relevant {\n private String name; // not used in toString()\n private int index;\n private int length;\n\n @Override\n public String toString() {\n return \"Relevant{\" + \"index=\" + index +\n \", length=\" + length + '}';\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class Relevant {\n private String name;\n private int index;\n private int length;\n\n @Override\n public String toString() {\n return \"Relevant{\" + \"name='\" + name + '\\'' +\n \", index=\" + index + \", length=\" + length + '}';\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/toString() issues", + "index": 119, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnresolvedClassReferenceRepair", + "shortDescription": { + "text": "Unresolved class reference" + }, + "fullDescription": { + "text": "Reports an unresolved class reference. The quick-fix suggests trying to resolve reference.", + "markdown": "Reports an unresolved class reference.\n\nThe quick-fix suggests trying to resolve reference." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 75, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CovariantEquals", + "shortDescription": { + "text": "Covariant 'equals()'" + }, + "fullDescription": { + "text": "Reports 'equals()' methods taking an argument type other than 'java.lang.Object' if the containing class does not have other overloads of 'equals()' that take 'java.lang.Object' as its argument type. A covariant version of 'equals()' does not override the 'Object.equals(Object)' method. It may cause unexpected behavior at runtime. For example, if the class is used to construct one of the standard collection classes, which expect that the 'Object.equals(Object)' method is overridden. Example: 'class Foo {\n public boolean equals(Foo foo) { // warning\n return false;\n }\n }\n class Bar {\n public boolean equals(Bar bar) { // no warning here\n return false;\n }\n @Override\n public boolean equals(Object obj) {\n return false;\n }\n }'", + "markdown": "Reports `equals()` methods taking an argument type other than `java.lang.Object` if the containing class does not have other overloads of `equals()` that take `java.lang.Object` as its argument type.\n\n\nA covariant version of `equals()` does not override the\n`Object.equals(Object)` method. It may cause unexpected\nbehavior at runtime. For example, if the class is used to construct\none of the standard collection classes, which expect that the\n`Object.equals(Object)` method is overridden.\n\n**Example:**\n\n\n class Foo {\n public boolean equals(Foo foo) { // warning\n return false;\n }\n }\n class Bar {\n public boolean equals(Bar bar) { // no warning here\n return false;\n }\n @Override\n public boolean equals(Object obj) {\n return false;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Convert2Lambda", + "shortDescription": { + "text": "Anonymous type can be replaced with lambda" + }, + "fullDescription": { + "text": "Reports anonymous classes which can be replaced with lambda expressions. Example: 'new Thread(new Runnable() {\n @Override\n public void run() {\n // run thread\n }\n });' After the quick-fix is applied: 'new Thread(() -> {\n // run thread\n });' Note that if an anonymous class is converted into a stateless lambda, the same lambda object can be reused by Java runtime during subsequent invocations. On the other hand, when an anonymous class is used, separate objects are created every time. Thus, applying the quick-fix can cause the semantics change in rare cases, e.g. when anonymous class instances are used as 'HashMap' keys. Lambda syntax is not supported in Java 1.7 and earlier JVMs. Use the Report when interface is not annotated with @FunctionalInterface option to ignore the cases in which an anonymous class implements an interface without '@FunctionalInterface' annotation.", + "markdown": "Reports anonymous classes which can be replaced with lambda expressions.\n\nExample:\n\n\n new Thread(new Runnable() {\n @Override\n public void run() {\n // run thread\n }\n });\n\nAfter the quick-fix is applied:\n\n\n new Thread(() -> {\n // run thread\n });\n\n\nNote that if an anonymous class is converted into a stateless lambda, the same lambda object\ncan be reused by Java runtime during subsequent invocations. On the other hand, when an anonymous class is used,\nseparate objects are created every time. Thus, applying the quick-fix can cause the semantics change in rare cases,\ne.g. when anonymous class instances are used as `HashMap` keys.\n\nLambda syntax is not supported in Java 1.7 and earlier JVMs.\n\n\nUse the **Report when interface is not annotated with @FunctionalInterface** option to ignore the cases in which an anonymous\nclass implements an interface without `@FunctionalInterface` annotation." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 59, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NativeMethods", + "shortDescription": { + "text": "Native method" + }, + "fullDescription": { + "text": "Reports methods declared 'native'. Native methods are inherently unportable.", + "markdown": "Reports methods declared `native`. Native methods are inherently unportable." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Portability", + "index": 7, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ParameterizedParametersStaticCollection", + "shortDescription": { + "text": "Parameterized test class without data provider method" + }, + "fullDescription": { + "text": "Reports JUnit 4 parameterized test classes that are annotated with '@RunWith(Parameterized.class)' but either do not include a data provider method annotated with '@Parameterized.Parameters' or this method has an incorrect signature. Such test classes cannot be run. The data provider method should be 'public' and 'static' and have a return type of 'Iterable' or 'Object[]'. Suggests creating an empty parameter provider method or changing the signature of the incorrect data provider method. Example: '@RunWith(Parameterized.class)\n public class ImportantTest {\n private int input;\n private int expected;\n\n ImportantTest(int input, int expected) {\n this.input = input;\n this.expected = expected;\n }\n\n // ... test cases\n }' After the quick-fix is applied: '@RunWith(Parameterized.class)\n public class ImportantTest {\n private int input;\n private int expected;\n\n ImportantTest(int input, int expected) {\n this.input = input;\n this.expected = expected;\n }\n\n @Parameters\n public static Iterable parameters() {\n return null;\n }\n\n // ... test cases\n }'", + "markdown": "Reports JUnit 4 [parameterized test](https://github.com/junit-team/junit4/wiki/parameterized-tests) classes that are annotated with `@RunWith(Parameterized.class)` but either do not include a data provider method annotated with `@Parameterized.Parameters` or this method has an incorrect signature. Such test classes cannot be run. The data provider method should be `public` and `static` and have a return type of `Iterable` or `Object[]`.\n\nSuggests creating an empty parameter provider method or changing the signature of the incorrect data provider method.\n\n**Example:**\n\n\n\n @RunWith(Parameterized.class)\n public class ImportantTest {\n private int input;\n private int expected;\n\n ImportantTest(int input, int expected) {\n this.input = input;\n this.expected = expected;\n }\n\n // ... test cases\n }\n\nAfter the quick-fix is applied:\n\n\n @RunWith(Parameterized.class)\n public class ImportantTest {\n private int input;\n private int expected;\n\n ImportantTest(int input, int expected) {\n this.input = input;\n this.expected = expected;\n }\n\n @Parameters\n public static Iterable parameters() {\n return null;\n }\n\n // ... test cases\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/JUnit", + "index": 74, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifiableIfStatement", + "shortDescription": { + "text": "'if' statement can be replaced with conditional or boolean expression" + }, + "fullDescription": { + "text": "Reports 'if' statements that can be replaced with conditions using the '&&', '||', '==', '!=', or '?:' operator. The result is usually shorter, but not always clearer, so it's not advised to apply the fix in every case. Example: 'if (condition) return true; else return foo;' After the quick-fix is applied: 'return condition || foo;' Configure the inspection: Use the Don't suggest '?:' operator option to disable the warning when the '?:' operator is suggested. In this case, only '&&', '||', '==', and '!=' suggestions will be highlighted. The quick-fix will still be available in the editor. Use the Ignore chained 'if' statements option to disable the warning for 'if-else' chains. The quick-fix will still be available in the editor. New in 2018.2", + "markdown": "Reports `if` statements that can be replaced with conditions using the `&&`, `||`, `==`, `!=`, or `?:` operator.\n\nThe result is usually shorter, but not always clearer, so it's not advised to apply the fix in every case.\n\nExample:\n\n\n if (condition) return true; else return foo;\n\nAfter the quick-fix is applied:\n\n\n return condition || foo;\n\nConfigure the inspection:\n\n* Use the **Don't suggest '?:' operator** option to disable the warning when the `?:` operator is suggested. In this case, only `&&`, `||`, `==`, and `!=` suggestions will be highlighted. The quick-fix will still be available in the editor.\n* Use the **Ignore chained 'if' statements** option to disable the warning for `if-else` chains. The quick-fix will still be available in the editor.\n\nNew in 2018.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EqualsWithItself", + "shortDescription": { + "text": "'equals()' called on itself" + }, + "fullDescription": { + "text": "Reports calls to 'equals()' or 'compareTo()' where an object is compared for equality with itself. According to the method contracts, these operations will always return 'true' for 'equals()' or '0' for 'compareTo()'. The inspection also checks the calls to 'Objects.equals()', 'Objects.deepEquals()', 'Arrays.equals()', 'Comparator.compare', and the like. Example: 'class Foo {\n boolean foo(Object o) {\n return o.equals(o); // warning\n }\n\n boolean bar(String[] ss) {\n return Arrays.equals(ss, ss); // warning\n }\n}'", + "markdown": "Reports calls to `equals()` or `compareTo()` where an object is compared for equality with itself.\n\nAccording to the method contracts, these operations will always return\n`true` for `equals()` or `0` for `compareTo()`. The inspection also checks\nthe calls to `Objects.equals()`, `Objects.deepEquals()`,\n`Arrays.equals()`, `Comparator.compare`, and the like.\n\n**Example:**\n\n\n class Foo {\n boolean foo(Object o) {\n return o.equals(o); // warning\n }\n\n boolean bar(String[] ss) {\n return Arrays.equals(ss, ss); // warning\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassInheritanceDepth", + "shortDescription": { + "text": "Class too deep in inheritance tree" + }, + "fullDescription": { + "text": "Reports classes that are too deep in the inheritance hierarchy. Classes that are too deeply inherited may be confusing and indicate that a refactoring is necessary. All superclasses from a library are treated as a single superclass, libraries are considered unmodifiable. Use the Inheritance depth limit field to specify the maximum inheritance depth for a class.", + "markdown": "Reports classes that are too deep in the inheritance hierarchy.\n\nClasses that are too deeply inherited may be confusing and indicate that a refactoring is necessary.\n\nAll superclasses from a library are treated as a single superclass, libraries are considered unmodifiable.\n\nUse the **Inheritance depth limit** field to specify the maximum inheritance depth for a class." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class metrics", + "index": 87, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThrowCaughtLocally", + "shortDescription": { + "text": "'throw' caught by containing 'try' statement" + }, + "fullDescription": { + "text": "Reports 'throw' statements whose exceptions are always caught by containing 'try' statements. Using 'throw' statements as a \"goto\" to change the local flow of control is confusing and results in poor performance. Example: 'try {\n if (!Files.isDirectory(PROJECTS)) {\n throw new IllegalStateException(\"Directory not found.\"); // warning: 'throw' caught by containing 'try' statement\n }\n ...\n } catch (Exception e) {\n LOG.error(\"run failed\");\n }' Use the Ignore rethrown exceptions option to ignore exceptions that are rethrown.", + "markdown": "Reports `throw` statements whose exceptions are always caught by containing `try` statements.\n\nUsing `throw`\nstatements as a \"goto\" to change the local flow of control is confusing and results in poor performance.\n\n**Example:**\n\n\n try {\n if (!Files.isDirectory(PROJECTS)) {\n throw new IllegalStateException(\"Directory not found.\"); // warning: 'throw' caught by containing 'try' statement\n }\n ...\n } catch (Exception e) {\n LOG.error(\"run failed\");\n }\n\nUse the **Ignore rethrown exceptions** option to ignore exceptions that are rethrown." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MarkedForRemoval", + "shortDescription": { + "text": "Usage of API marked for removal" + }, + "fullDescription": { + "text": "Reports usages of deprecated APIs (classes, fields, and methods) that are marked for removal with '@Deprecated(forRemoval=true)'. The code that uses an API marked for removal may cause a runtime error with a future version of the API. That is why the recommended severity for this inspection is Error. You can change the severity to Warning if you want to use the same code highlighting as in ordinary deprecation. New in 2017.3", + "markdown": "Reports usages of deprecated APIs (classes, fields, and methods) that are marked for removal with `@Deprecated(`**forRemoval**`=true)`.\n\n\nThe code that uses an API marked for removal may cause a runtime error with a future version of the API. That is why\nthe recommended severity for this inspection is *Error*.\n\n\nYou can change the severity to *Warning* if you want to use the same code highlighting as in ordinary deprecation.\n\nNew in 2017.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code maturity", + "index": 49, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SynchronizeOnValueBasedClass", + "shortDescription": { + "text": "Value-based warnings" + }, + "fullDescription": { + "text": "Reports attempts to synchronize on an instance of a value-based class that produce compile-time warnings and raise run-time exceptions starting from Java 16. For example, 'java.lang.Double' is annotated with 'jdk.internal.ValueBased', so the following code will produce a compile-time warning: 'Double d = 20.0;\nsynchronized (d) { ... } // javac warning' New in 2021.1", + "markdown": "Reports attempts to synchronize on an instance of a value-based class that produce compile-time warnings and raise run-time exceptions starting from Java 16.\n\n\nFor example, `java.lang.Double` is annotated with `jdk.internal.ValueBased`, so the following code will\nproduce a compile-time warning:\n\n\n Double d = 20.0;\n synchronized (d) { ... } // javac warning\n\nNew in 2021.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Compiler issues", + "index": 90, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NestedConditionalExpression", + "shortDescription": { + "text": "Nested conditional expression" + }, + "fullDescription": { + "text": "Reports nested conditional expressions as they may result in extremely confusing code. Example: 'int y = a == 10 ? b == 20 ? 10 : a : b;'", + "markdown": "Reports nested conditional expressions as they may result in extremely confusing code.\n\nExample:\n\n\n int y = a == 10 ? b == 20 ? 10 : a : b;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonSerializableWithSerialVersionUIDField", + "shortDescription": { + "text": "Non-serializable class with 'serialVersionUID'" + }, + "fullDescription": { + "text": "Reports non-'Serializable' classes that define a 'serialVersionUID' field. A 'serialVersionUID' field in that context normally indicates an error because the field will be ignored and the class will not be serialized. Example: 'public class IWantToSerializeThis {\n private static final long serialVersionUID = 2669293150219020249L;\n }'", + "markdown": "Reports non-`Serializable` classes that define a `serialVersionUID` field. A `serialVersionUID` field in that context normally indicates an error because the field will be ignored and the class will not be serialized.\n\n**Example:**\n\n\n public class IWantToSerializeThis {\n private static final long serialVersionUID = 2669293150219020249L;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 18, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WhileCanBeForeach", + "shortDescription": { + "text": "'while' loop can be replaced with enhanced 'for' loop" + }, + "fullDescription": { + "text": "Reports 'while' loops that iterate over collections and can be replaced with enhanced 'for' loops (foreach iteration syntax). Example: 'Iterator it = c.iterator();\n while(it.hasNext()) {\n Object obj = it.next();\n System.out.println(obj);\n }' Can be replaced with: 'for (Object obj : c) {\n System.out.println(obj);\n }' This inspection only reports if the language level of the project or module is 5 or higher.", + "markdown": "Reports `while` loops that iterate over collections and can be replaced with enhanced `for` loops (foreach iteration syntax).\n\n**Example:**\n\n\n Iterator it = c.iterator();\n while(it.hasNext()) {\n Object obj = it.next();\n System.out.println(obj);\n }\n\nCan be replaced with:\n\n\n for (Object obj : c) {\n System.out.println(obj);\n }\n\nThis inspection only reports if the language level of the project or module is 5 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 5", + "index": 51, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ImplicitNumericConversion", + "shortDescription": { + "text": "Implicit numeric conversion" + }, + "fullDescription": { + "text": "Reports implicit conversion between numeric types. Implicit numeric conversion is not a problem in itself but, if unexpected, may cause difficulties when tracing bugs. Example: 'double m(int i) {\n return i * 10;\n }' After the quick-fix is applied: 'double m(int i) {\n return (double) (i * 10);\n }' Configure the inspection: Use the Ignore widening conversions option to ignore implicit conversion that cannot result in data loss (for example, 'int'->'long'). Use the Ignore conversions from and to 'char' option to ignore conversion from and to 'char'. The inspection will still report conversion from and to floating-point numbers. Use the Ignore conversion from constants and literals to make the inspection ignore conversion from literals and compile-time constants.", + "markdown": "Reports implicit conversion between numeric types.\n\nImplicit numeric conversion is not a problem in itself but, if unexpected, may cause difficulties when tracing bugs.\n\n**Example:**\n\n\n double m(int i) {\n return i * 10;\n }\n\nAfter the quick-fix is applied:\n\n\n double m(int i) {\n return (double) (i * 10);\n }\n\nConfigure the inspection:\n\n* Use the **Ignore widening conversions** option to ignore implicit conversion that cannot result in data loss (for example, `int`-\\>`long`).\n* Use the **Ignore conversions from and to 'char'** option to ignore conversion from and to `char`. The inspection will still report conversion from and to floating-point numbers.\n* Use the **Ignore conversion from constants and literals** to make the inspection ignore conversion from literals and compile-time constants." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BulkFileAttributesRead", + "shortDescription": { + "text": "Bulk 'Files.readAttributes()' call can be used" + }, + "fullDescription": { + "text": "Reports multiple sequential 'java.io.File' attribute checks, such as: 'isDirectory()' 'isFile()' 'lastModified()' 'length()' Such calls can be replaced with a bulk 'Files.readAttributes()' call. This is usually more performant then multiple separate attribute checks. Example: 'boolean isNewFile(File file, long lastModified) throws IOException {\n return file.isFile() && file.lastModified() > lastModified;\n }' After the quick-fix is applied: 'boolean isNewFile(File file, long lastModified) throws IOException {\n BasicFileAttributes fileAttributes = Files.readAttributes(file.toPath(), BasicFileAttributes.class);\n return fileAttributes.isRegularFile() && fileAttributes.lastModifiedTime().toMillis() > lastModified;\n }' This inspection does not show a warning if 'IOException' is not handled in the current context, but the quick-fix is still available. Note that the replacements are usually not completely equivalent and should be applied with care. In particular, the behavior could differ if the file does not exist at all. This inspection only reports if the language level of the project or module is 7 or higher. New in 2022.1", + "markdown": "Reports multiple sequential `java.io.File` attribute checks, such as:\n\n* `isDirectory()`\n* `isFile()`\n* `lastModified()`\n* `length()`\n\nSuch calls can be replaced with a bulk `Files.readAttributes()` call. This is usually more performant then multiple separate attribute checks.\n\nExample:\n\n\n boolean isNewFile(File file, long lastModified) throws IOException {\n return file.isFile() && file.lastModified() > lastModified;\n }\n\nAfter the quick-fix is applied:\n\n\n boolean isNewFile(File file, long lastModified) throws IOException {\n BasicFileAttributes fileAttributes = Files.readAttributes(file.toPath(), BasicFileAttributes.class);\n return fileAttributes.isRegularFile() && fileAttributes.lastModifiedTime().toMillis() > lastModified;\n }\n\nThis inspection does not show a warning if `IOException` is not handled in the current context, but the quick-fix is still available.\n\nNote that the replacements are usually not completely equivalent and should be applied with care. In particular, the behavior could differ if\nthe file does not exist at all.\n\nThis inspection only reports if the language level of the project or module is 7 or higher.\n\nNew in 2022.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NotNullFieldNotInitialized", + "shortDescription": { + "text": "@NotNull field is not initialized" + }, + "fullDescription": { + "text": "Reports fields annotated as not-null that are not initialized in the constructor. Example: 'public class MyClass {\n private @NotNull String value;\n\n public void setValue(@NotNull String value) {\n this.value = value;\n }\n\n public @NotNull String getValue() {\n return value;\n }\n }' Such fields may violate the not-null constraint. In the example above, the 'setValue' parameter is annotated as not-null, but 'getValue' may return null if the setter was not called. Configure the inspection: Use the Ignore fields which could be initialized implicitly option to control whether a warning should be issued if the field could be initialized implicitly (e.g. via a dependency injection). Use the Ignore fields initialized in setUp() method option to control whether a warning should be issued if the field is written in the test case 'setUp()' method.", + "markdown": "Reports fields annotated as not-null that are not initialized in the constructor.\n\nExample:\n\n public class MyClass {\n private @NotNull String value;\n\n public void setValue(@NotNull String value) {\n this.value = value;\n }\n\n public @NotNull String getValue() {\n return value;\n }\n }\n\n\nSuch fields may violate the not-null constraint. In the example above, the `setValue` parameter is annotated as not-null, but\n`getValue` may return null if the setter was not called.\n\nConfigure the inspection:\n\n* Use the **Ignore fields which could be initialized implicitly** option to control whether a warning should be issued if the field could be initialized implicitly (e.g. via a dependency injection).\n* Use the **Ignore fields initialized in setUp() method** option to control whether a warning should be issued if the field is written in the test case `setUp()` method." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs/Nullability problems", + "index": 115, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverlyComplexBooleanExpression", + "shortDescription": { + "text": "Overly complex boolean expression" + }, + "fullDescription": { + "text": "Reports boolean expressions with too many terms. Such expressions may be confusing and bug-prone. Example: 'cond(x1) && cond(x2) ^ cond(x3) && cond(x4);' Configure the inspection: Use the Maximum number of terms field to specify the maximum number of terms allowed in a boolean expression. Use the Ignore pure conjunctions and disjunctions option to ignore boolean expressions which use only a single boolean operator repeatedly.", + "markdown": "Reports boolean expressions with too many terms. Such expressions may be confusing and bug-prone.\n\nExample:\n\n\n cond(x1) && cond(x2) ^ cond(x3) && cond(x4);\n\nConfigure the inspection:\n\n* Use the **Maximum number of terms** field to specify the maximum number of terms allowed in a boolean expression.\n* Use the **Ignore pure conjunctions and disjunctions** option to ignore boolean expressions which use only a single boolean operator repeatedly." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NotifyCalledOnCondition", + "shortDescription": { + "text": "'notify()' or 'notifyAll()' called on 'java.util.concurrent.locks.Condition' object" + }, + "fullDescription": { + "text": "Reports calls to 'notify()' or 'notifyAll()' made on 'java.util.concurrent.locks.Condition' object. This is probably a programming error, and some variant of the 'signal()' or 'signalAll()' method was intended instead, otherwise 'IllegalMonitorStateException' may occur. Example: 'class C {\n final Lock l = new ReentrantLock();\n final Condition c = l.newCondition();\n\n void release() {\n l.lock();\n try {\n c.notifyAll(); // probably 'signalAll()' was intended here\n } finally {\n l.unlock();\n }\n }\n }'", + "markdown": "Reports calls to `notify()` or `notifyAll()` made on `java.util.concurrent.locks.Condition` object.\n\n\nThis is probably a programming error, and some variant of the `signal()` or\n`signalAll()` method was intended instead, otherwise `IllegalMonitorStateException` may occur.\n\n**Example:**\n\n\n class C {\n final Lock l = new ReentrantLock();\n final Condition c = l.newCondition();\n\n void release() {\n l.lock();\n try {\n c.notifyAll(); // probably 'signalAll()' was intended here\n } finally {\n l.unlock();\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SwitchStatementsWithoutDefault", + "shortDescription": { + "text": "'switch' statement without 'default' branch" + }, + "fullDescription": { + "text": "Reports 'switch' statements that do not contain 'default' labels. Adding the 'default' label guarantees that all possible scenarios are covered, and it becomes easier to make assumptions about the current state of the program. Note that by default, the inspection does not report 'switch' statements if all cases for enums or 'sealed' classes are covered. Use the Ignore exhaustive switch statements option if you want to change this behavior.", + "markdown": "Reports `switch` statements that do not contain `default` labels.\n\nAdding the `default` label guarantees that all possible scenarios are covered, and it becomes\neasier to make assumptions about the current state of the program.\n\n\nNote that by default, the inspection does not report `switch` statements if all cases for enums or `sealed` classes are covered.\nUse the **Ignore exhaustive switch statements** option if you want to change this behavior." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IncompatibleMask", + "shortDescription": { + "text": "Incompatible bitwise mask operation" + }, + "fullDescription": { + "text": "Reports bitwise mask expressions which are guaranteed to evaluate to 'true' or 'false'. The inspection checks the expressions of the form '(var & constant1) == constant2' or '(var | constant1) == constant2', where 'constant1' and 'constant2' are incompatible bitmask constants. Example: '// Incompatible mask: as the mask ends in 00,\n // the result could be 0x1200 but not 0x1234\n if ((mask & 0xFF00) == 0x1234) {...}'", + "markdown": "Reports bitwise mask expressions which are guaranteed to evaluate to `true` or `false`.\n\n\nThe inspection checks the expressions of the form `(var & constant1) == constant2` or\n`(var | constant1) == constant2`, where `constant1`\nand `constant2` are incompatible bitmask constants.\n\n**Example:**\n\n // Incompatible mask: as the mask ends in 00,\n // the result could be 0x1200 but not 0x1234\n if ((mask & 0xFF00) == 0x1234) {...}\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Bitwise operation issues", + "index": 97, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NewMethodNamingConvention", + "shortDescription": { + "text": "Method naming convention" + }, + "fullDescription": { + "text": "Reports methods whose names are too short, too long, or do not follow the specified regular expression pattern. Instance methods that override library methods and constructors are ignored by this inspection. Example: if the inspection is enabled for static methods, and the minimum specified method name length is 4 (the default), the following static method produces a warning, because the length of its name is 3, which is less than 4: 'public static int max(int a, int b)'. A quick-fix that renames such methods is available only in the editor. Configure the inspection: Use the list in the Options section to specify which methods should be checked. Deselect the checkboxes for the method types for which you want to skip the check. Specify 0 in the length fields to skip the corresponding checks. Regular expressions should be specified in the standard 'java.util.regex' format.", + "markdown": "Reports methods whose names are too short, too long, or do not follow the specified regular expression pattern.\n\nInstance methods that override library\nmethods and constructors are ignored by this inspection.\n\n**Example:** if the inspection is enabled for static methods, and the minimum specified method name length is 4 (the default),\nthe following static method produces a warning, because the length of its name is 3, which is less\nthan 4: `public static int max(int a, int b)`.\n\nA quick-fix that renames such methods is available only in the editor.\n\nConfigure the inspection:\n\nUse the list in the **Options** section to specify which methods should be checked. Deselect the checkboxes for the method types for which\nyou want to skip the check. Specify **0** in the length fields to skip the corresponding checks.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Method", + "index": 88, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExplicitArgumentCanBeLambda", + "shortDescription": { + "text": "Explicit argument can be lambda" + }, + "fullDescription": { + "text": "Reports method calls that accept a non-trivial expression and can be replaced with an equivalent method call which accepts a lambda instead. Converting an expression to a lambda ensures that the expression won't be evaluated if it's not used inside the method. For example, 'optional.orElse(createDefaultValue())' can be converted to 'optional.orElseGet(this::createDefaultValue)'. New in 2018.1", + "markdown": "Reports method calls that accept a non-trivial expression and can be replaced with an equivalent method call which accepts a lambda instead.\n\n\nConverting an expression to a lambda ensures that the expression won't be evaluated\nif it's not used inside the method. For example, `optional.orElse(createDefaultValue())` can be converted\nto `optional.orElseGet(this::createDefaultValue)`.\n\nNew in 2018.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverlyStrongTypeCast", + "shortDescription": { + "text": "Overly strong type cast" + }, + "fullDescription": { + "text": "Reports type casts that are overly strong. For instance, casting an object to 'ArrayList' when casting it to 'List' would do just as well. Note: much like the Redundant type cast inspection, applying the fix for this inspection may change the semantics of your program if you are intentionally using an overly strong cast to cause a 'ClassCastException' to be generated. Example: 'interface Super {\n void doSmth();\n }\n interface Sub extends Super { }\n\n void use(Object obj) {\n // Warning: ((Super)obj).doSmth() could be used\n ((Sub)obj).doSmth();\n }' Use the checkbox below to ignore casts when there's a matching 'instanceof' check in the code.", + "markdown": "Reports type casts that are overly strong. For instance, casting an object to `ArrayList` when casting it to `List` would do just as well.\n\n\n**Note:** much like the *Redundant type cast*\ninspection, applying the fix for this inspection may change the semantics of your program if you are\nintentionally using an overly strong cast to cause a `ClassCastException` to be generated.\n\nExample:\n\n\n interface Super {\n void doSmth();\n }\n interface Sub extends Super { }\n\n void use(Object obj) {\n // Warning: ((Super)obj).doSmth() could be used\n ((Sub)obj).doSmth();\n }\n\n\nUse the checkbox below to ignore casts when there's a matching `instanceof` check in the code." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 75, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EqualsCalledOnEnumConstant", + "shortDescription": { + "text": "'equals()' called on enum value" + }, + "fullDescription": { + "text": "Reports 'equals()' calls on enum constants. Such calls can be replaced by an identity comparison ('==') because two enum constants are equal only when they have the same identity. A quick-fix is available to change the call to a comparison. Example: 'boolean foo(MyEnum value) {\n return value.equals(MyEnum.FOO);\n }' After the quick-fix is applied: 'boolean foo(MyEnum value) {\n return value == MyEnum.FOO;\n }'", + "markdown": "Reports `equals()` calls on enum constants.\n\nSuch calls can be replaced by an identity comparison (`==`) because two\nenum constants are equal only when they have the same identity.\n\nA quick-fix is available to change the call to a comparison.\n\n**Example:**\n\n\n boolean foo(MyEnum value) {\n return value.equals(MyEnum.FOO);\n }\n\nAfter the quick-fix is applied:\n\n\n boolean foo(MyEnum value) {\n return value == MyEnum.FOO;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaLangImport", + "shortDescription": { + "text": "Unnecessary import from the 'java.lang' package" + }, + "fullDescription": { + "text": "Reports 'import' statements that refer to the 'java.lang' package. 'java.lang' classes are always implicitly imported, so such import statements are redundant and confusing. Since IntelliJ IDEA can automatically detect and fix such statements with its Optimize Imports command, this inspection is mostly useful for offline reporting on code bases that you don't intend to change.", + "markdown": "Reports `import` statements that refer to the `java.lang` package.\n\n\n`java.lang` classes are always implicitly imported, so such import statements are\nredundant and confusing.\n\n\nSince IntelliJ IDEA can automatically detect and fix such statements with its **Optimize Imports** command, this inspection is mostly useful for offline reporting on code bases that you don't intend to change." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Imports", + "index": 22, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UtilityClass", + "shortDescription": { + "text": "Utility class" + }, + "fullDescription": { + "text": "Reports utility classes. Utility classes have all fields and methods declared as 'static' and their presence may indicate a lack of object-oriented design. Use the Ignore if annotated by option to specify special annotations. The inspection ignores classes annotated with one of these annotations.", + "markdown": "Reports utility classes.\n\nUtility classes have all fields and methods declared as `static` and their\npresence may indicate a lack of object-oriented design.\n\n\nUse the **Ignore if annotated by** option to specify special annotations. The inspection ignores classes annotated with one of\nthese annotations." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassNameDiffersFromFileName", + "shortDescription": { + "text": "Class name differs from file name" + }, + "fullDescription": { + "text": "Reports top-level class names that don't match the name of a file containing them. While the Java specification allows for naming non-'public' classes this way, files with unmatched names may be confusing and decrease usefulness of various software tools.", + "markdown": "Reports top-level class names that don't match the name of a file containing them.\n\nWhile the Java specification allows for naming non-`public` classes this way,\nfiles with unmatched names may be confusing and decrease usefulness of various software tools." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryConstantArrayCreationExpression", + "shortDescription": { + "text": "Redundant 'new' expression in constant array creation" + }, + "fullDescription": { + "text": "Reports constant new array expressions that can be replaced with an array initializer. Array initializers can omit the type because it is already specified in the left side of the assignment. Example: 'int[] foo = new int[] {42};' After the quick-fix is applied: 'int[] foo = {42};'", + "markdown": "Reports constant new array expressions that can be replaced with an array initializer. Array initializers can omit the type because it is already specified in the left side of the assignment.\n\n**Example:**\n\n\n int[] foo = new int[] {42};\n\nAfter the quick-fix is applied:\n\n\n int[] foo = {42};\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HardcodedLineSeparators", + "shortDescription": { + "text": "Hardcoded line separator" + }, + "fullDescription": { + "text": "Reports linefeed ('\\n') and carriage return ('\\r') character escape sequences used in string literals, character literals or text blocks. These characters are commonly used as line separators, and portability may suffer if they are hardcoded. Example: 'String count = \"first\\nsecond\\rthird\";'", + "markdown": "Reports linefeed (`\\n`) and carriage return (`\\r`) character escape sequences used in string literals, character literals or text blocks. These characters are commonly used as line separators, and portability may suffer if they are hardcoded.\n\n**Example:**\n\n\n String count = \"first\\nsecond\\rthird\";\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Portability", + "index": 7, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LabeledStatement", + "shortDescription": { + "text": "Labeled statement" + }, + "fullDescription": { + "text": "Reports labeled statements that can complicate refactorings and control flow of the method. Example: 'label:\n while (true) {\n // code\n }'", + "markdown": "Reports labeled statements that can complicate refactorings and control flow of the method.\n\nExample:\n\n\n label:\n while (true) {\n // code\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IndexOfReplaceableByContains", + "shortDescription": { + "text": "'String.indexOf()' expression can be replaced with 'contains()'" + }, + "fullDescription": { + "text": "Reports comparisons with 'String.indexOf()' calls that can be replaced with a call to the 'String.contains()' method. Example: 'boolean b = \"abcd\".indexOf('e') >= 0;' After the quick-fix is applied: 'boolean b = \"abcd\".contains('e');' This inspection only reports if the language level of the project or module is 5 or higher.", + "markdown": "Reports comparisons with `String.indexOf()` calls that can be replaced with a call to the `String.contains()` method.\n\n**Example:**\n\n\n boolean b = \"abcd\".indexOf('e') >= 0;\n\nAfter the quick-fix is applied:\n\n\n boolean b = \"abcd\".contains('e');\n\nThis inspection only reports if the language level of the project or module is 5 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 5", + "index": 51, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringConcatenationArgumentToLogCall", + "shortDescription": { + "text": "Non-constant string concatenation as argument to logging call" + }, + "fullDescription": { + "text": "Reports non-constant string concatenations that are used as arguments to SLF4J and Log4j 2 logging methods. Non-constant concatenations are evaluated at runtime even when the logging message is not logged; this can negatively impact performance. It is recommended to use a parameterized log message instead, which will not be evaluated when logging is disabled. Example: 'public class Vital {\n private static final Logger LOG = LoggerFactory.getLogger(Vital.class);\n\n public void saveTheWorld(int i, String s, boolean b) {\n LOG.info(\"saveTheWorld(\" + i + \", \" + s + \", \" + b + \")\");\n // todo\n }\n }' After the quick-fix is applied: 'public class Vital {\n private static final Logger LOG = LoggerFactory.getLogger(Vital.class);\n\n public void saveTheWorld(int i, String s, boolean b) {\n LOG.info(\"saveTheWorld({}, {}, {})\", i, s, b);\n // todo\n }\n }' Configure the inspection: Use the Warn on list to ignore certain higher logging levels. Higher logging levels may be enabled even in production, and the arguments will always be evaluated.", + "markdown": "Reports non-constant string concatenations that are used as arguments to **SLF4J** and **Log4j 2** logging methods. Non-constant concatenations are evaluated at runtime even when the logging message is not logged; this can negatively impact performance. It is recommended to use a parameterized log message instead, which will not be evaluated when logging is disabled.\n\n**Example:**\n\n\n public class Vital {\n private static final Logger LOG = LoggerFactory.getLogger(Vital.class);\n\n public void saveTheWorld(int i, String s, boolean b) {\n LOG.info(\"saveTheWorld(\" + i + \", \" + s + \", \" + b + \")\");\n // todo\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class Vital {\n private static final Logger LOG = LoggerFactory.getLogger(Vital.class);\n\n public void saveTheWorld(int i, String s, boolean b) {\n LOG.info(\"saveTheWorld({}, {}, {})\", i, s, b);\n // todo\n }\n }\n\n\nConfigure the inspection:\n\n* Use the **Warn on** list to ignore certain higher logging levels. Higher logging levels may be enabled even in production, and the arguments will always be evaluated." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Logging", + "index": 64, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousNameCombination", + "shortDescription": { + "text": "Suspicious variable/parameter name combination" + }, + "fullDescription": { + "text": "Reports assignments and function calls in which the name of the target variable or the function parameter does not match the name of the value assigned to it. Example 1: 'int x = 0;\n int y = x; // x is used as a y-coordinate' Example 2: 'int x = 0, y = 0;\n // x is used as a y-coordinate and y as an x-coordinate\n Rectangle rc = new Rectangle(y, x, 20, 20);' Configure the inspection: Use the Group of names area to specify the names which should not be used together: an error is reported if the parameter name or assignment target name contains words from one group and the name of the assigned or passed variable contains words from a different group. Use the Ignore methods area to specify the methods that should not be checked but have a potentially suspicious name. For example, the 'Integer.compare()' parameters are named 'x' and 'y' but are unrelated to coordinates.", + "markdown": "Reports assignments and function calls in which the name of the target variable or the function parameter does not match the name of the value assigned to it.\n\nExample 1:\n\n\n int x = 0;\n int y = x; // x is used as a y-coordinate\n \nExample 2:\n\n\n int x = 0, y = 0;\n // x is used as a y-coordinate and y as an x-coordinate\n Rectangle rc = new Rectangle(y, x, 20, 20);\n\nConfigure the inspection:\n\nUse the **Group of names** area to specify the names which should not be used together: an error is reported\nif the parameter name or assignment target name contains words from one group and the name of the assigned or passed\nvariable contains words from a different group.\n\nUse the **Ignore methods** area to specify the methods that should not be checked but have a potentially suspicious name.\nFor example, the `Integer.compare()` parameters are named `x` and `y` but are unrelated to coordinates." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ImplicitDefaultCharsetUsage", + "shortDescription": { + "text": "Implicit platform default charset" + }, + "fullDescription": { + "text": "Reports method and constructor calls that implicitly use the platform default charset. Such calls can produce different results on systems that use a different default charset and may result in unexpected behaviour. Example: 'void foo(byte[] bytes) {\n String s = new String(bytes);\n}'\n You can use a quick-fix that specifies the explicit UTF-8 charset if the corresponding overloaded method is available. After the quick-fix is applied: 'void foo(byte[] bytes) {\n String s = new String(bytes, StandardCharsets.UTF_8);\n}'", + "markdown": "Reports method and constructor calls that implicitly use the platform default charset. Such calls can produce different results on systems that use a different default charset and may result in unexpected behaviour.\n\n**Example:**\n\n void foo(byte[] bytes) {\n String s = new String(bytes);\n }\n\nYou can use a quick-fix that specifies the explicit UTF-8 charset if the corresponding overloaded method is available.\nAfter the quick-fix is applied:\n\n void foo(byte[] bytes) {\n String s = new String(bytes, StandardCharsets.UTF_8);\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 9, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DesignForExtension", + "shortDescription": { + "text": "Design for extension" + }, + "fullDescription": { + "text": "Reports methods which are not 'static', 'private', 'final' or 'abstract', and whose bodies are not empty. Coding in a style that avoids such methods protects the contracts of classes from being broken by their subclasses. The benefit of this style is that subclasses cannot corrupt the state of the superclass by forgetting to call the super method. The cost is that subclasses are limited in their flexibility, in particular they cannot prevent execution of code in the superclass. Use the quick-fix to add the missing modifiers. Example: 'class Foo {\n public boolean equals(Object o) { return true; }\n }' After the quick-fix is applied: 'class Foo {\n public final boolean equals(Object o) { return true; }\n }' This inspection is intended for code that is going to be used in secure environments, and is probably not appropriate for less restrictive environments.", + "markdown": "Reports methods which are not `static`, `private`, `final` or `abstract`, and whose bodies are not empty.\n\n\nCoding in a style that avoids such methods protects the contracts of classes from being broken by their subclasses. The\nbenefit of this style is that subclasses cannot corrupt the state of the superclass by forgetting to call the super method. The cost is\nthat\nsubclasses are limited in their flexibility, in particular they cannot prevent execution of code in the superclass. Use the quick-fix to\nadd\nthe missing modifiers.\n\n**Example:**\n\n\n class Foo {\n public boolean equals(Object o) { return true; }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n public final boolean equals(Object o) { return true; }\n }\n\nThis inspection is intended for code that is going to be used in secure environments, and is probably not appropriate for less restrictive environments." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 30, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifyStreamApiCallChains", + "shortDescription": { + "text": "Stream API call chain can be simplified" + }, + "fullDescription": { + "text": "Reports stream API call chains that can be simplified. Simplification will often avoid some temporary object creation during collection traversal. The inspection replaces the following call chains: 'collection.stream().forEach()' → 'collection.forEach()' 'collection.stream().collect(toList/toSet/toCollection())' → 'new CollectionType<>(collection)' 'collection.stream().toArray()' → 'collection.toArray()' 'Arrays.asList().stream()' → 'Arrays.stream()' or 'Stream.of()' 'IntStream.range(0, array.length).mapToObj(idx -> array[idx])' → 'Arrays.stream(array)' 'IntStream.range(0, list.size()).mapToObj(idx -> list.get(idx))' → 'list.stream()' 'Collections.singleton().stream()' → 'Stream.of()' 'Collections.emptyList().stream()' → 'Stream.empty()' 'stream.filter().findFirst().isPresent()' → 'stream.anyMatch()' 'stream.collect(counting())' → 'stream.count()' 'stream.collect(maxBy())' → 'stream.max()' 'stream.collect(mapping())' → 'stream.map().collect()' 'stream.collect(reducing())' → 'stream.reduce()' 'stream.collect(summingInt())' → 'stream.mapToInt().sum()' 'stream.mapToObj(x -> x)' → 'stream.boxed()' 'stream.map(x -> {...; return x;})' → 'stream.peek(x -> ...)' '!stream.anyMatch()' → 'stream.noneMatch()' '!stream.anyMatch(x -> !(...))' → 'stream.allMatch()' 'stream.map().anyMatch(Boolean::booleanValue)' → 'stream.anyMatch()' 'IntStream.range(expr1, expr2).mapToObj(x -> array[x])' → 'Arrays.stream(array, expr1, expr2)' 'Collection.nCopies(count, ...)' → 'Stream.generate().limit(count)' 'stream.sorted(comparator).findFirst()' → 'Stream.min(comparator)' 'optional.orElseGet(() -> { throw new ...; })' → 'optional.orElseThrow()' Note that the replacement semantics may have minor differences in some cases. For example, 'Collections.synchronizedList(...).stream().forEach()' is not synchronized while 'Collections.synchronizedList(...).forEach()' is synchronized. Also, 'collect(Collectors.maxBy())' returns an empty 'Optional' if the resulting element is 'null' while 'Stream.max()' throws 'NullPointerException' in this case.", + "markdown": "Reports stream API call chains that can be simplified. Simplification will often avoid some temporary object creation during collection traversal.\n\n\nThe inspection replaces the following call chains:\n\n* `collection.stream().forEach()` → `collection.forEach()`\n* `collection.stream().collect(toList/toSet/toCollection())` → `new CollectionType<>(collection)`\n* `collection.stream().toArray()` → `collection.toArray()`\n* `Arrays.asList().stream()` → `Arrays.stream()` or `Stream.of()`\n* `IntStream.range(0, array.length).mapToObj(idx -> array[idx])` → `Arrays.stream(array)`\n* `IntStream.range(0, list.size()).mapToObj(idx -> list.get(idx))` → `list.stream()`\n* `Collections.singleton().stream()` → `Stream.of()`\n* `Collections.emptyList().stream()` → `Stream.empty()`\n* `stream.filter().findFirst().isPresent()` → `stream.anyMatch()`\n* `stream.collect(counting())` → `stream.count()`\n* `stream.collect(maxBy())` → `stream.max()`\n* `stream.collect(mapping())` → `stream.map().collect()`\n* `stream.collect(reducing())` → `stream.reduce()`\n* `stream.collect(summingInt())` → `stream.mapToInt().sum()`\n* `stream.mapToObj(x -> x)` → `stream.boxed()`\n* `stream.map(x -> {...; return x;})` → `stream.peek(x -> ...)`\n* `!stream.anyMatch()` → `stream.noneMatch()`\n* `!stream.anyMatch(x -> !(...))` → `stream.allMatch()`\n* `stream.map().anyMatch(Boolean::booleanValue)` → `stream.anyMatch()`\n* `IntStream.range(expr1, expr2).mapToObj(x -> array[x])` → `Arrays.stream(array, expr1, expr2)`\n* `Collection.nCopies(count, ...)` → `Stream.generate().limit(count)`\n* `stream.sorted(comparator).findFirst()` → `Stream.min(comparator)`\n* `optional.orElseGet(() -> { throw new ...; })` → `optional.orElseThrow()`\n\n\nNote that the replacement semantics may have minor differences in some cases. For example,\n`Collections.synchronizedList(...).stream().forEach()` is not synchronized while\n`Collections.synchronizedList(...).forEach()` is synchronized.\nAlso, `collect(Collectors.maxBy())` returns an empty `Optional` if the resulting element is\n`null` while `Stream.max()` throws `NullPointerException` in this case." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OptionalContainsCollection", + "shortDescription": { + "text": "'Optional' contains array or collection" + }, + "fullDescription": { + "text": "Reports 'java.util.Optional' or 'com.google.common.base.Optional' types with an array or collection type parameter. In such cases, it is more clear to just use an empty array or collection to indicate the absence of result. Example: 'Optional> foo() {\n return Optional.empty();\n }' This code could look like: 'List foo() {\n return new List<>();\n }'", + "markdown": "Reports `java.util.Optional` or `com.google.common.base.Optional` types with an array or collection type parameter.\n\nIn such cases, it is more clear to just use an empty array or collection to indicate the absence of result.\n\n**Example:**\n\n\n Optional> foo() {\n return Optional.empty();\n }\n\nThis code could look like:\n\n\n List foo() {\n return new List<>();\n }\n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnknownGuard", + "shortDescription": { + "text": "Unknown '@GuardedBy' field" + }, + "fullDescription": { + "text": "Reports '@GuardedBy' annotations in which the specified guarding field is unknown. Example: 'private Object state;\n\n @GuardedBy(\"lock\") //unknown guard reference\n public void bar() {\n state = new Object();\n }' Supported '@GuardedBy' annotations are: 'net.jcip.annotations.GuardedBy' 'javax.annotation.concurrent.GuardedBy' 'org.apache.http.annotation.GuardedBy' 'com.android.annotations.concurrency.GuardedBy' 'androidx.annotation.GuardedBy' 'com.google.errorprone.annotations.concurrent.GuardedBy'", + "markdown": "Reports `@GuardedBy` annotations in which the specified guarding field is unknown.\n\nExample:\n\n\n private Object state;\n\n @GuardedBy(\"lock\") //unknown guard reference\n public void bar() {\n state = new Object();\n }\n\nSupported `@GuardedBy` annotations are:\n\n* `net.jcip.annotations.GuardedBy`\n* `javax.annotation.concurrent.GuardedBy`\n* `org.apache.http.annotation.GuardedBy`\n* `com.android.annotations.concurrency.GuardedBy`\n* `androidx.annotation.GuardedBy`\n* `com.google.errorprone.annotations.concurrent.GuardedBy`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Concurrency annotation issues", + "index": 58, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifiableAssertion", + "shortDescription": { + "text": "Simplifiable assertion" + }, + "fullDescription": { + "text": "Reports any 'assert' calls that can be replaced with simpler and equivalent calls. Example → Replacement 'assertEquals(true, x());' 'assertTrue(x());' 'assertTrue(y() != null);' 'assertNotNull(y());' 'assertTrue(z == z());' 'assertSame(z, z());' 'assertTrue(a.equals(a()));' 'assertEquals(a, a());' 'assertTrue(false);' 'fail();'", + "markdown": "Reports any `assert` calls that can be replaced with simpler and equivalent calls.\n\n| Example | → | Replacement |\n|----------------------------------|---|-------------------------|\n| `assertEquals(`**true**`, x());` | | `assertTrue(x());` |\n| `assertTrue(y() != null);` | | `assertNotNull(y());` |\n| `assertTrue(z == z());` | | `assertSame(z, z());` |\n| `assertTrue(a.equals(a()));` | | `assertEquals(a, a());` |\n| `assertTrue(`**false**`);` | | `fail();` |" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Test frameworks", + "index": 96, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LoadLibraryWithNonConstantString", + "shortDescription": { + "text": "Call to 'System.loadLibrary()' with non-constant string" + }, + "fullDescription": { + "text": "Reports calls to 'java.lang.System.loadLibrary()', 'java.lang.System.load()', 'java.lang.Runtime.loadLibrary()' and 'java.lang.Runtime.load()' which take a dynamically-constructed string as the name of the library. Constructed library name strings are a common source of security breaches. By default, this inspection ignores compile-time constants. Example: 'void test(int i) {\n System.loadLibrary(\"foo\" + i);\n }' Use the inspection settings to consider any 'static final' fields as constant. Be careful, because strings like the following will be ignored when the option is enabled: 'private static final String LIBRARY = getUserInput();'", + "markdown": "Reports calls to `java.lang.System.loadLibrary()`, `java.lang.System.load()`, `java.lang.Runtime.loadLibrary()` and `java.lang.Runtime.load()` which take a dynamically-constructed string as the name of the library.\n\n\nConstructed library name strings are a common source of security breaches.\nBy default, this inspection ignores compile-time constants.\n\n**Example:**\n\n\n void test(int i) {\n System.loadLibrary(\"foo\" + i);\n }\n\n\nUse the inspection settings to consider any `static final` fields as constant.\nBe careful, because strings like the following will be ignored when the option is enabled:\n\n\n private static final String LIBRARY = getUserInput();\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 30, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InterfaceMethodClashesWithObject", + "shortDescription": { + "text": "Interface method clashes with method in 'Object'" + }, + "fullDescription": { + "text": "Reports interface methods that clash with the protected methods 'clone()' and 'finalize()' from the 'java.lang.Object' class. In an interface, it is possible to declare these methods with a return type that is incompatible with the 'java.lang.Object' methods. A class that implements such an interface will not be compilable. When the interface is functional, it remains possible to create a lambda from it, but this is not recommended. Example: '// Warning: this interface cannot be implemented\n // by any class, only by a lambda or method reference\n interface MyInterface {\n double clone();\n }'", + "markdown": "Reports interface methods that clash with the **protected** methods `clone()` and `finalize()` from the `java.lang.Object` class.\n\nIn an interface, it is possible to declare these methods with a return type that is incompatible with the `java.lang.Object` methods.\nA class that implements such an interface will not be compilable.\nWhen the interface is functional, it remains possible to create a lambda from it, but this is not recommended.\n\nExample:\n\n\n // Warning: this interface cannot be implemented\n // by any class, only by a lambda or method reference\n interface MyInterface {\n double clone();\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 75, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StaticMethodOnlyUsedInOneClass", + "shortDescription": { + "text": "Static member only used from one other class" + }, + "fullDescription": { + "text": "Reports 'static' methods and fields that are only used from a class other than the containing class. Such members could be moved into the using class. Factory methods and members accessed from an anonymous class inside the member's class are ignored by this inspection. Convenience overloads, which call a method with the same name in the same class but have fewer parameters, are also ignored. Use the first checkbox to supress this inspection when the static member is only used from a test class. Use the second checkbox below to ignore member usages from inside anonymous, local, or non-static inner classes. Use the third checkbox below to not warn on members that cannot be moved without problems, for example, because a method with an identical signature is already present in the target class, or because a field or a method used inside the method will not be accessible when this method is moved. Use the fourth checkbox to ignore members located in utility classes.", + "markdown": "Reports `static` methods and fields that are only used from a class other than the containing class. Such members could be moved into the using class. Factory methods and members accessed from an anonymous class inside the member's class are ignored by this inspection. Convenience overloads, which call a method with the same name in the same class but have fewer parameters, are also ignored.\n\n\nUse the first checkbox to supress this inspection when the static member is only used from a test class.\n\n\nUse the second checkbox below to ignore member usages from inside anonymous, local, or non-static inner classes.\n\n\nUse the third checkbox below to not warn on members that cannot be moved without problems,\nfor example, because a method with an identical signature is already present in the target class,\nor because a field or a method used inside the method will not be accessible when this method is moved.\n\n\nUse the fourth checkbox to ignore members located in utility classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 75, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AbstractClassExtendsConcreteClass", + "shortDescription": { + "text": "Abstract class extends concrete class" + }, + "fullDescription": { + "text": "Reports 'abstract' classes that extend concrete classes.", + "markdown": "Reports `abstract` classes that extend concrete classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 25, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantEscapeInRegexReplacement", + "shortDescription": { + "text": "Redundant escape in regex replacement string" + }, + "fullDescription": { + "text": "Reports redundant escapes in the replacement string of regex methods. It is possible to escape any character in a regex replacement string, but if a literal '$' or '\\' is required is escaping necessary. Example: 'string.replaceAll(\"a\", \"\\\\b\");' After the quick-fix is applied: 'string.replaceAll(\"a\", \"b\");' New in 2022.3", + "markdown": "Reports redundant escapes in the replacement string of regex methods. It is possible to escape any character in a regex replacement string, but if a literal `$` or `\\` is required is escaping necessary.\n\n**Example:**\n\n\n string.replaceAll(\"a\", \"\\\\b\");\n\nAfter the quick-fix is applied:\n\n\n string.replaceAll(\"a\", \"b\");\n\nNew in 2022.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java8CollectionRemoveIf", + "shortDescription": { + "text": "Loop can be replaced with 'Collection.removeIf()'" + }, + "fullDescription": { + "text": "Reports loops which can be collapsed into a single 'Collection.removeIf' call. Example: 'for (Iterator it = collection.iterator(); it.hasNext(); ) {\n String aValue = it.next();\n if(shouldBeRemoved(aValue)) {\n it.remove();\n }\n }' After the quick-fix is applied: 'collection.removeIf(aValue -> shouldBeRemoved(aValue));' This inspection only reports if the language level of the project or module is 8 or higher.", + "markdown": "Reports loops which can be collapsed into a single `Collection.removeIf` call.\n\nExample:\n\n\n for (Iterator it = collection.iterator(); it.hasNext(); ) {\n String aValue = it.next();\n if(shouldBeRemoved(aValue)) {\n it.remove();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n collection.removeIf(aValue -> shouldBeRemoved(aValue));\n\n\nThis inspection only reports if the language level of the project or module is 8 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 59, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SynchronizedOnLiteralObject", + "shortDescription": { + "text": "Synchronization on an object initialized with a literal" + }, + "fullDescription": { + "text": "Reports 'synchronized' blocks that lock on an object initialized with a literal. String literals are interned and 'Character', 'Boolean' and 'Number' literals can be allocated from a cache. Because of this, it is possible that some other part of the system, which uses an object initialized with the same literal, is actually holding a reference to the exact same object. This can create unexpected dead-lock situations, if the lock object was thought to be private. Example: 'class Main {\n final String mutex = \"Mutex\";\n void method() {\n synchronized (mutex) {\n }\n }\n }' Use the Warn on all possible literals option to report any synchronization on 'String', 'Character', 'Boolean' and 'Number' objects.", + "markdown": "Reports `synchronized` blocks that lock on an object initialized with a literal.\n\n\nString literals are interned and `Character`, `Boolean` and `Number` literals can be allocated from a cache.\nBecause of this, it is possible that some other part of the system, which uses an object initialized with the same literal, is actually\nholding a reference to the exact same object. This can create unexpected dead-lock situations, if the lock object was thought to be private.\n\n**Example:**\n\n\n class Main {\n final String mutex = \"Mutex\";\n void method() {\n synchronized (mutex) {\n }\n }\n }\n\n\nUse the **Warn on all possible literals** option to report any synchronization on\n`String`, `Character`, `Boolean` and `Number` objects." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java9ReflectionClassVisibility", + "shortDescription": { + "text": "Reflective access across modules issues" + }, + "fullDescription": { + "text": "Reports 'Class.forName()' and 'ClassLoader.loadClass()' calls which try to access classes that aren't visible in the current scope due to Java 9 module accessibility rules. This inspection only reports if the language level of the project or module is 9 or higher.", + "markdown": "Reports `Class.forName()` and `ClassLoader.loadClass()` calls which try to access classes that aren't visible in the current scope due to Java 9 module accessibility rules.\n\nThis inspection only reports if the language level of the project or module is 9 or higher." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Reflective access", + "index": 98, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CharsetObjectCanBeUsed", + "shortDescription": { + "text": "Standard 'Charset' object can be used" + }, + "fullDescription": { + "text": "Reports methods and constructors in which constant charset 'String' literal (for example, '\"UTF-8\"') can be replaced with the predefined 'StandardCharsets.UTF_8' code. The code after the fix may work faster, because the charset lookup becomes unnecessary. Also, catching 'UnsupportedEncodingException' may become unnecessary as well. In this case, the catch block will be removed automatically. Example: 'try {\n byte[] bytes = \"str\".getBytes(\"UTF-8\");\n } catch (UnsupportedEncodingException e) {\n }' After quick-fix is applied: 'byte[] bytes = \"str\".getBytes(StandardCharsets.UTF_8);' The inspection is available in Java 7 and later. New in 2018.2", + "markdown": "Reports methods and constructors in which constant charset `String` literal (for example, `\"UTF-8\"`) can be replaced with the predefined `StandardCharsets.UTF_8` code.\n\nThe code after the fix may work faster, because the charset lookup becomes unnecessary.\nAlso, catching `UnsupportedEncodingException` may become unnecessary as well. In this case,\nthe catch block will be removed automatically.\n\nExample:\n\n\n try {\n byte[] bytes = \"str\".getBytes(\"UTF-8\");\n } catch (UnsupportedEncodingException e) {\n }\n\nAfter quick-fix is applied:\n\n\n byte[] bytes = \"str\".getBytes(StandardCharsets.UTF_8);\n\nThe inspection is available in Java 7 and later.\n\nNew in 2018.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SafeVarargsDetector", + "shortDescription": { + "text": "Possible heap pollution from parameterized vararg type" + }, + "fullDescription": { + "text": "Reports methods with variable arity, which can be annotated as '@SafeVarargs'. The '@SafeVarargs' annotation suppresses unchecked warnings about parameterized array creation at call sites. Example: 'public class Foo {\n private List list = new ArrayList<>();\n\n public final void safeVarargs(T... elements) {\n Collections.addAll(list, elements);\n }\n }' After the quick-fix is applied: 'public class Foo {\n private List list = new ArrayList<>();\n\n @SafeVarargs\n public final void safeVarargs(T... elements) {\n Collections.addAll(list, elements);\n }\n }' This annotation is not supported under Java 1.6 or earlier JVMs.", + "markdown": "Reports methods with variable arity, which can be annotated as `@SafeVarargs`. The `@SafeVarargs` annotation suppresses unchecked warnings about parameterized array creation at call sites.\n\n**Example:**\n\n\n public class Foo {\n private List list = new ArrayList<>();\n\n public final void safeVarargs(T... elements) {\n Collections.addAll(list, elements);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class Foo {\n private List list = new ArrayList<>();\n\n @SafeVarargs\n public final void safeVarargs(T... elements) {\n Collections.addAll(list, elements);\n }\n }\n\n\nThis annotation is not supported under Java 1.6 or earlier JVMs." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 7", + "index": 112, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseOfSunClasses", + "shortDescription": { + "text": "Use of 'sun.*' classes" + }, + "fullDescription": { + "text": "Reports uses of classes from the 'sun.*' hierarchy. Such classes are non-portable between different JVMs.", + "markdown": "Reports uses of classes from the `sun.*` hierarchy. Such classes are non-portable between different JVMs." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Portability", + "index": 7, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ComparatorMethodParameterNotUsed", + "shortDescription": { + "text": "Suspicious 'Comparator.compare()' implementation" + }, + "fullDescription": { + "text": "Reports problems in 'Comparator.compare()' and 'Comparable.compareTo()' implementations. The following cases are reported: A parameter is not used. Most likely this is a typo and the other parameter is compared with itself, or the method is not implemented correctly. It's evident that the method does not return '0' for the same elements. Such a comparison method violates the contract and can produce unpredictable results when equal elements are encountered. In particular, sorting may fail with an exception on some data. Comparison method never returns positive or negative value. To fulfill the contract, if comparison method returns positive values, it should also return negative ones if arguments are supplied in reversed order. Comparison method returns 'Integer.MIN_VALUE'. While allowed by contract, it may be error-prone, as some call sites may incorrectly invert the return value of comparison method using unary minus. In this case, 'Integer.MIN_VALUE' will stay negative. Example: 'Comparator lambda =\n (a, b) -> a.length() > b.length()\n ? 0\n : Math.random() > 0.5 ? -1 : 1;'", + "markdown": "Reports problems in `Comparator.compare()` and `Comparable.compareTo()` implementations.\n\nThe following cases are reported:\n\n* A parameter is not used. Most likely this is a typo and the other parameter is compared with itself, or the method is not implemented correctly.\n* It's evident that the method does not return `0` for the same elements. Such a comparison method violates the contract and can produce unpredictable results when equal elements are encountered. In particular, sorting may fail with an exception on some data.\n* Comparison method never returns positive or negative value. To fulfill the contract, if comparison method returns positive values, it should also return negative ones if arguments are supplied in reversed order.\n* Comparison method returns `Integer.MIN_VALUE`. While allowed by contract, it may be error-prone, as some call sites may incorrectly invert the return value of comparison method using unary minus. In this case, `Integer.MIN_VALUE` will stay negative.\n\n**Example:**\n\n\n Comparator lambda =\n (a, b) -> a.length() > b.length()\n ? 0\n : Math.random() > 0.5 ? -1 : 1;\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantCast", + "shortDescription": { + "text": "Redundant type cast" + }, + "fullDescription": { + "text": "Reports unnecessary cast expressions. Example: 'static Object toObject(String s) {\n return (Object) s;\n }' Use the checkbox below to ignore clarifying casts e.g., casts in collection calls where 'Object' is expected: 'static void removeFromList(List l, Object o) {\n l.remove((String)o);\n }'", + "markdown": "Reports unnecessary cast expressions.\n\nExample:\n\n\n static Object toObject(String s) {\n return (Object) s;\n }\n\n\nUse the checkbox below to ignore clarifying casts e.g., casts in collection calls where `Object` is expected:\n\n\n static void removeFromList(List l, Object o) {\n l.remove((String)o);\n } \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AnonymousInnerClass", + "shortDescription": { + "text": "Anonymous inner class can be replaced with inner class" + }, + "fullDescription": { + "text": "Reports anonymous inner classes. In some cases, replacing anonymous inner classes with inner classes can lead to more readable and maintainable code. Also, some code standards discourage anonymous inner classes.", + "markdown": "Reports anonymous inner classes.\n\nIn some cases, replacing anonymous inner classes with inner classes can lead to more readable and maintainable code.\nAlso, some code standards discourage anonymous inner classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifyCollector", + "shortDescription": { + "text": "Simplifiable collector" + }, + "fullDescription": { + "text": "Reports collectors that can be simplified. In particular, some cascaded 'groupingBy()' collectors can be expressed by using a simpler 'toMap()' collector, which is also likely to be more performant. Example: 'Collectors.groupingByConcurrent(String::length, Collectors.collectingAndThen(Collectors.maxBy(String::compareTo), Optional::get));' After the quick-fix is applied: 'Collectors.toConcurrentMap(String::length, Function.identity(), BinaryOperator.maxBy(String::compareTo));' This inspection only reports if the language level of the project or module is 8 or higher. New in 2017.1", + "markdown": "Reports collectors that can be simplified.\n\nIn particular, some cascaded `groupingBy()` collectors can be expressed by using a\nsimpler `toMap()` collector, which is also likely to be more performant.\n\nExample:\n\n\n Collectors.groupingByConcurrent(String::length, Collectors.collectingAndThen(Collectors.maxBy(String::compareTo), Optional::get));\n\nAfter the quick-fix is applied:\n\n\n Collectors.toConcurrentMap(String::length, Function.identity(), BinaryOperator.maxBy(String::compareTo));\n\nThis inspection only reports if the language level of the project or module is 8 or higher.\n\nNew in 2017.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Annotation", + "shortDescription": { + "text": "Annotation" + }, + "fullDescription": { + "text": "Reports annotations. Annotations are not supported in Java 1.4 and earlier JVM.", + "markdown": "Reports annotations. Annotations are not supported in Java 1.4 and earlier JVM." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level issues", + "index": 60, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MultipleTopLevelClassesInFile", + "shortDescription": { + "text": "Multiple top level classes in single file" + }, + "fullDescription": { + "text": "Reports multiple top-level classes in a single Java file. Putting multiple top-level classes in one file may be confusing and degrade the usefulness of various software tools.", + "markdown": "Reports multiple top-level classes in a single Java file.\n\nPutting multiple\ntop-level classes in one file may be confusing and degrade the usefulness of various\nsoftware tools." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryUnicodeEscape", + "shortDescription": { + "text": "Unnecessary unicode escape sequence" + }, + "fullDescription": { + "text": "Reports unnecessary unicode escape sequences. For example, when the file encoding can handle the character without escaping it. Unicode control characters are not reported by this inspection (except for a line feed and a tab). Example: 'String s = \"\\u0062\";'", + "markdown": "Reports unnecessary unicode escape sequences. For example, when the file encoding can handle the character without escaping it. Unicode control characters are not reported by this inspection (except for a line feed and a tab).\n\n**Example:**\n\n String s = \"\\u0062\";\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 9, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PrimitiveArrayArgumentToVariableArgMethod", + "shortDescription": { + "text": "Confusing primitive array argument to varargs method" + }, + "fullDescription": { + "text": "Reports any calls to a variable arity method where the call has a primitive array in the variable arity parameter position (for example, 'System.out.printf(\"%s\", new int[]{1, 2, 3})'). Such a primitive-array argument may be confusing, as it will be wrapped as a single-element array, rather than each individual element being boxed, as might be expected. Example: 'String.format(\"%s\", new int[]{1, 2, 3});' After the quick-fix is applied: 'String.format(\"%s\", (Object) new int[]{1, 2, 3});'", + "markdown": "Reports any calls to a variable arity method where the call has a primitive array in the variable arity parameter position (for example, `System.out.printf(\"%s\", new int[]{1, 2, 3})`). Such a primitive-array argument may be confusing, as it will be wrapped as a single-element array, rather than each individual element being boxed, as might be expected.\n\n**Example:**\n\n\n String.format(\"%s\", new int[]{1, 2, 3});\n\nAfter the quick-fix is applied:\n\n\n String.format(\"%s\", (Object) new int[]{1, 2, 3});\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringTokenizer", + "shortDescription": { + "text": "Use of 'StringTokenizer'" + }, + "fullDescription": { + "text": "Reports usages of the 'StringTokenizer' class. Excessive use of 'StringTokenizer' is incorrect in an internationalized environment.", + "markdown": "Reports usages of the `StringTokenizer` class. Excessive use of `StringTokenizer` is incorrect in an internationalized environment." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 9, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IteratorNextDoesNotThrowNoSuchElementException", + "shortDescription": { + "text": "'Iterator.next()' which can't throw 'NoSuchElementException'" + }, + "fullDescription": { + "text": "Reports implementations of 'Iterator.next()' that cannot throw 'java.util.NoSuchElementException'. Such implementations violate the contract of 'java.util.Iterator', and may result in subtle bugs if the iterator is used in a non-standard way. Example: 'class Numbers implements Iterator {\n @Override\n public Integer next() { //warning\n if (hasNext()) {\n return generateNext();\n } else {\n return null; //throw NoSuchElementException instead\n }\n }\n\n ...\n }'", + "markdown": "Reports implementations of `Iterator.next()` that cannot throw `java.util.NoSuchElementException`.\n\n\nSuch implementations violate the contract of `java.util.Iterator`,\nand may result in subtle bugs if the iterator is used in a non-standard way.\n\n**Example:**\n\n\n class Numbers implements Iterator {\n @Override\n public Integer next() { //warning\n if (hasNext()) {\n return generateNext();\n } else {\n return null; //throw NoSuchElementException instead\n }\n }\n\n ...\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousTernaryOperatorInVarargsCall", + "shortDescription": { + "text": "Suspicious ternary operator in varargs method call" + }, + "fullDescription": { + "text": "Reports vararg method calls that use a ternary operator with mixed array and non-array branches. When compiled, both branches are wrapped in arrays. As a result, the array branch is turned into a two-dimensional array, which may indicate a problem. The quick-fix wraps the non-array branch in an array to prevent the compiler from doing the conversion. Example: 'static void bar(boolean flag) {\n Object[] a = {1, 2};\n Object b = \"hello\";\n foo(flag ? a : b);\n }\n static void foo(Object... obj) {\n }' After the quick-fix: 'static void bar(boolean flag) {\n Object[] a = {1, 2};\n Object b = \"hello\";\n foo(flag ? a : new Object[]{b});\n }\n static void foo(Object... obj) {\n }' New in 2020.3", + "markdown": "Reports vararg method calls that use a ternary operator with mixed array and non-array branches.\n\n\nWhen compiled, both branches are wrapped in arrays. As a result, the array branch is turned into\na two-dimensional array, which may indicate a problem.\n\n\nThe quick-fix wraps the non-array branch in an array to prevent the compiler from doing the conversion.\n\n**Example:**\n\n\n static void bar(boolean flag) {\n Object[] a = {1, 2};\n Object b = \"hello\";\n foo(flag ? a : b);\n }\n static void foo(Object... obj) {\n }\n\nAfter the quick-fix:\n\n\n static void bar(boolean flag) {\n Object[] a = {1, 2};\n Object b = \"hello\";\n foo(flag ? a : new Object[]{b});\n }\n static void foo(Object... obj) {\n }\n\nNew in 2020.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseBulkOperation", + "shortDescription": { + "text": "Bulk operation can be used instead of iteration" + }, + "fullDescription": { + "text": "Reports single operations inside loops that could be replaced with a bulk method. Not only are bulk methods shorter, but in some cases they may be more performant as well. Example: 'void test(Collection numbers) {\n List result = new ArrayList<>();\n for (Integer i : numbers) {\n result.add(i);\n }\n }' After the fix is applied: 'void test(Collection numbers) {\n List result = new ArrayList<>();\n result.addAll(numbers);\n }' The Use Arrays.asList() to wrap arrays option allows to report arrays, even if the bulk method requires a collection. In this case the quick-fix will automatically wrap the array in 'Arrays.asList()' call. New in 2017.1", + "markdown": "Reports single operations inside loops that could be replaced with a bulk method.\n\n\nNot only are bulk methods shorter, but in some cases they may be more performant as well.\n\n**Example:**\n\n void test(Collection numbers) {\n List result = new ArrayList<>();\n for (Integer i : numbers) {\n result.add(i);\n }\n }\n\nAfter the fix is applied:\n\n\n void test(Collection numbers) {\n List result = new ArrayList<>();\n result.addAll(numbers);\n }\n\n\nThe **Use Arrays.asList() to wrap arrays** option allows to report arrays, even if the bulk method requires a collection.\nIn this case the quick-fix will automatically wrap the array in `Arrays.asList()` call.\n\nNew in 2017.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BigDecimalEquals", + "shortDescription": { + "text": "'equals()' called on 'BigDecimal'" + }, + "fullDescription": { + "text": "Reports 'equals()' calls that compare two 'java.math.BigDecimal' numbers. This is normally a mistake, as two 'java.math.BigDecimal' numbers are only equal if they are equal in both value and scale. Example: 'if (new BigDecimal(\"2.0\").equals(\n new BigDecimal(\"2.00\"))) {} // false' After the quick-fix is applied: 'if (new BigDecimal(\"2.0\").compareTo(\n new BigDecimal(\"2.00\")) == 0) {} // true'", + "markdown": "Reports `equals()` calls that compare two `java.math.BigDecimal` numbers. This is normally a mistake, as two `java.math.BigDecimal` numbers are only equal if they are equal in both value and scale.\n\n**Example:**\n\n\n if (new BigDecimal(\"2.0\").equals(\n new BigDecimal(\"2.00\"))) {} // false\n\nAfter the quick-fix is applied:\n\n\n if (new BigDecimal(\"2.0\").compareTo(\n new BigDecimal(\"2.00\")) == 0) {} // true\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AccessToNonThreadSafeStaticFieldFromInstance", + "shortDescription": { + "text": "Non-thread-safe 'static' field access" + }, + "fullDescription": { + "text": "Reports access to 'static' fields that are of a non-thread-safe type. When a 'static' field is accessed from an instance method or a non-synchronized block, multiple threads can access that field. This can lead to unspecified side effects, like exceptions and incorrect results. Example: 'class Sample {\n private static final SimpleDateFormat df = new SimpleDateFormat(\"yyyy-MM-dd\");\n String method() {\n return df.format(\"\");\n }\n }' You can specify which types should be considered not thread-safe. Only fields with these exact types or initialized with these exact types are reported, because there may exist thread-safe subclasses of these types.", + "markdown": "Reports access to `static` fields that are of a non-thread-safe type.\n\n\nWhen a `static` field is accessed from an instance method or a non-synchronized block,\nmultiple threads can access that field.\nThis can lead to unspecified side effects, like exceptions and incorrect results.\n\n**Example:**\n\n\n class Sample {\n private static final SimpleDateFormat df = new SimpleDateFormat(\"yyyy-MM-dd\");\n String method() {\n return df.format(\"\");\n }\n }\n\n\nYou can specify which types should be considered not thread-safe.\nOnly fields with these exact types or initialized with these exact types are reported,\nbecause there may exist thread-safe subclasses of these types." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssignmentToCatchBlockParameter", + "shortDescription": { + "text": "Assignment to 'catch' block parameter" + }, + "fullDescription": { + "text": "Reports assignments to, 'catch' block parameters. Changing a 'catch' block parameter is very confusing and should be discouraged. The quick-fix adds a declaration of a new variable. Example: 'void processFile(String fileName) throws Exception {\n try {\n doProcessFile(fileName);\n } catch(Exception ex) {\n if (ex instanceof UncheckedIOException) {\n // Warning: catch block parameter reassigned\n ex = ((UncheckedIOException) ex).getCause();\n }\n throw ex;\n }\n }' After the quick-fix is applied: 'void processFile(String fileName) throws Exception {\n try {\n doProcessFile(fileName);\n } catch(Exception ex) {\n Exception unwrapped = ex;\n if (unwrapped instanceof UncheckedIOException) {\n unwrapped = ((UncheckedIOException)\n unwrapped).getCause();\n }\n throw unwrapped;\n }\n }'", + "markdown": "Reports assignments to, `catch` block parameters.\n\nChanging a `catch` block parameter is very confusing and should be discouraged.\n\nThe quick-fix adds a declaration of a new variable.\n\n**Example:**\n\n\n void processFile(String fileName) throws Exception {\n try {\n doProcessFile(fileName);\n } catch(Exception ex) {\n if (ex instanceof UncheckedIOException) {\n // Warning: catch block parameter reassigned\n ex = ((UncheckedIOException) ex).getCause();\n }\n throw ex;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n void processFile(String fileName) throws Exception {\n try {\n doProcessFile(fileName);\n } catch(Exception ex) {\n Exception unwrapped = ex;\n if (unwrapped instanceof UncheckedIOException) {\n unwrapped = ((UncheckedIOException)\n unwrapped).getCause();\n }\n throw unwrapped;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Assignment issues", + "index": 36, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AbstractMethodOverridesAbstractMethod", + "shortDescription": { + "text": "Abstract method overrides abstract method" + }, + "fullDescription": { + "text": "Reports 'abstract' methods that override 'abstract' methods. Such methods don't make sense because any concrete child class will have to implement the abstract method anyway. Methods whose return types, exception declarations, annotations, or modifiers differ from the overridden method are not reported by this inspection. Configure the inspection: Use the Ignore methods with different Javadoc than their super methods option to ignore any abstract methods whose JavaDoc comment differs from their super method.", + "markdown": "Reports `abstract` methods that override `abstract` methods.\n\nSuch methods don't make sense because any concrete child class will have to implement the abstract method anyway.\n\n\nMethods whose return types, exception declarations, annotations, or modifiers differ from the overridden method are not reported by this inspection.\n\n\nConfigure the inspection:\n\n* Use the **Ignore methods with different Javadoc than their super methods** option to ignore any abstract methods whose JavaDoc comment differs from their super method." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 25, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SerializableInnerClassHasSerialVersionUIDField", + "shortDescription": { + "text": "Serializable non-static inner class without 'serialVersionUID'" + }, + "fullDescription": { + "text": "Reports non-static inner classes that implement 'java.io.Serializable', but do not define a 'serialVersionUID' field. Without a 'serialVersionUID' field, any change to the class will make previously serialized versions unreadable. It is strongly recommended that 'Serializable' non-static inner classes have a 'serialVersionUID' field, otherwise the default serialization algorithm may result in serialized versions being incompatible between compilers due to differences in synthetic accessor methods. A quick-fix is suggested to add the missing 'serialVersionUID' field. Example: 'class Outer {\n class Inner implements Serializable {}\n }' After the quick-fix is applied: 'class Outer {\n class Inner implements Serializable {\n private static final long serialVersionUID = -7004458730436243902L;\n }\n }' Use the following options to configure the inspection: List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit 'Serializable' from a superclass but are not intended for serialization. Whether to ignore 'Serializable' anonymous classes.", + "markdown": "Reports non-static inner classes that implement `java.io.Serializable`, but do not define a `serialVersionUID` field.\n\n\nWithout a `serialVersionUID` field, any change to the class will make previously\nserialized versions unreadable. It is strongly recommended that `Serializable`\nnon-static inner classes have a `serialVersionUID` field, otherwise the default\nserialization algorithm may result in serialized versions being incompatible between\ncompilers due to differences in synthetic accessor methods.\n\n\nA quick-fix is suggested to add the missing `serialVersionUID` field.\n\n**Example:**\n\n\n class Outer {\n class Inner implements Serializable {}\n }\n\nAfter the quick-fix is applied:\n\n\n class Outer {\n class Inner implements Serializable {\n private static final long serialVersionUID = -7004458730436243902L;\n }\n }\n\nUse the following options to configure the inspection:\n\n* List classes whose inheritors should not be reported by this inspection. This is meant for classes that inherit `Serializable` from a superclass but are not intended for serialization.\n* Whether to ignore `Serializable` anonymous classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 18, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LoopStatementsThatDontLoop", + "shortDescription": { + "text": "Loop statement that does not loop" + }, + "fullDescription": { + "text": "Reports any instance of 'for', 'while', and 'do' statements whose bodies will be executed once at most. Normally, this is an indication of a bug. Use the Ignore enhanced for loops option to ignore the foreach loops. They are sometimes used to perform an action only on the first item of an iterable in a compact way. Example: 'for (String s : stringIterable) {\n doSomethingOnFirstString(s);\n break;\n }'", + "markdown": "Reports any instance of `for`, `while`, and `do` statements whose bodies will be executed once at most. Normally, this is an indication of a bug.\n\n\nUse the **Ignore enhanced for loops** option to ignore the foreach loops.\nThey are sometimes used to perform an action only on the first item of an iterable in a compact way.\n\nExample:\n\n\n for (String s : stringIterable) {\n doSomethingOnFirstString(s);\n break;\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ArrayCreationWithoutNewKeyword", + "shortDescription": { + "text": "Array creation without 'new' expression" + }, + "fullDescription": { + "text": "Reports array initializers without 'new' array expressions and suggests adding them. Example: 'int[] a = {42}' After the quick-fix is applied: 'int[] a = new int[]{42}'", + "markdown": "Reports array initializers without `new` array expressions and suggests adding them.\n\nExample:\n\n\n int[] a = {42}\n\nAfter the quick-fix is applied:\n\n\n int[] a = new int[]{42}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConfusingOctalEscape", + "shortDescription": { + "text": "Confusing octal escape sequence" + }, + "fullDescription": { + "text": "Reports string literals containing an octal escape sequence immediately followed by a digit. Such strings may be confusing, and are often the result of errors in escape code creation. Example: 'System.out.println(\"\\1234\"); // Octal escape sequence '\\123' immediately followed by a digit'", + "markdown": "Reports string literals containing an octal escape sequence immediately followed by a digit.\n\nSuch strings may be confusing, and are often the result of errors in escape code creation.\n\n**Example:**\n\n\n System.out.println(\"\\1234\"); // Octal escape sequence '\\123' immediately followed by a digit\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ParameterNameDiffersFromOverriddenParameter", + "shortDescription": { + "text": "Parameter name differs from parameter in overridden or overloaded method" + }, + "fullDescription": { + "text": "Reports parameters whose names differ from the corresponding parameters of the methods they override or overload. While legal in Java, such inconsistent names may be confusing and decrease the documentation benefits of good naming practices. Example: 'class Person {\n Person(String fullName) {}\n }\n class Child extends Person {\n Child(String name) { super(name); }\n }' After the quick-fix is applied: 'class Person {\n Person(String fullName) {}\n }\n class Child extends Person {\n Child(String fullName) { super(fullName); }\n }' Use the options to indicate whether to ignore overridden parameter names that are only a single character long or come from a library method. Both can be useful if you do not wish to be bound by dubious naming conventions used in libraries.", + "markdown": "Reports parameters whose names differ from the corresponding parameters of the methods they override or overload. While legal in Java, such inconsistent names may be confusing and decrease the documentation benefits of good naming practices.\n\n**Example:**\n\n\n class Person {\n Person(String fullName) {}\n }\n class Child extends Person {\n Child(String name) { super(name); }\n }\n\nAfter the quick-fix is applied:\n\n\n class Person {\n Person(String fullName) {}\n }\n class Child extends Person {\n Child(String fullName) { super(fullName); }\n }\n\n\nUse the options to indicate whether to ignore overridden parameter names that are only\na single character long or come from a library method. Both can be useful if\nyou do not wish to be bound by dubious naming conventions used in libraries." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions", + "index": 50, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OctalLiteral", + "shortDescription": { + "text": "Octal integer" + }, + "fullDescription": { + "text": "Reports octal integer literals. Some coding standards prohibit the use of octal literals, as they may be easily confused with decimal literals. Example: 'int i = 015;\n int j = 0_777;' This inspection has two different quick-fixes. After the Convert octal literal to decimal literal quick-fix is applied, the code changes to: 'int i = 13;\n int j = 511;' After the Remove leading zero to make decimal quick-fix is applied, the code changes to: 'int i = 15;\n int j = 777;'", + "markdown": "Reports octal integer literals. Some coding standards prohibit the use of octal literals, as they may be easily confused with decimal literals.\n\nExample:\n\n\n int i = 015;\n int j = 0_777;\n\nThis inspection has two different quick-fixes.\nAfter the **Convert octal literal to decimal literal** quick-fix is applied, the code changes to:\n\n\n int i = 13;\n int j = 511;\n\nAfter the **Remove leading zero to make decimal** quick-fix is applied, the code changes to:\n\n\n int i = 15;\n int j = 777;\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LambdaParameterHidingMemberVariable", + "shortDescription": { + "text": "Lambda parameter hides field" + }, + "fullDescription": { + "text": "Reports lambda parameters named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the lambda parameter when using the identically named field is intended. A quick-fix is suggested to rename the lambda parameter. Example: 'public class MyClass {\n public Object foo;\n\n void sort(List list) {\n list.sort((foo, bar) -> foo - bar);\n }\n }' Use the option to choose whether to ignore fields that are not visible from the lambda expression. For example, private fields of a superclass.", + "markdown": "Reports lambda parameters named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the lambda parameter when using the identically named field is intended.\n\nA quick-fix is suggested to rename the lambda parameter.\n\n**Example:**\n\n\n public class MyClass {\n public Object foo;\n\n void sort(List list) {\n list.sort((foo, bar) -> foo - bar);\n }\n }\n\n\nUse the option to choose whether to ignore fields that are not visible from the lambda expression.\nFor example, private fields of a superclass." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 54, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReadWriteStringCanBeUsed", + "shortDescription": { + "text": "'Files.readString()' or 'Files.writeString()' can be used" + }, + "fullDescription": { + "text": "Reports method calls that read or write a 'String' as bytes using 'java.nio.file.Files'. Such calls can be replaced with a call to a 'Files.readString()' or 'Files.writeString()' method introduced in Java 11. Example: 'String s = \"example\";\n Files.write(Paths.get(\"out.txt\"), s.getBytes(StandardCharsets.UTF_8), StandardOpenOption.WRITE);\n s = new String(Files.readAllBytes(Paths.get(\"in.txt\")), StandardCharsets.ISO_8859_1);' After the quick fix is applied: 'String s = \"example\";\n Files.writeString(Paths.get(\"out.txt\"), s, StandardOpenOption.WRITE);\n s = Files.readString(Paths.get(\"in.txt\"), StandardCharsets.ISO_8859_1);' New in 2018.3", + "markdown": "Reports method calls that read or write a `String` as bytes using `java.nio.file.Files`. Such calls can be replaced with a call to a `Files.readString()` or `Files.writeString()` method introduced in Java 11.\n\n**Example:**\n\n\n String s = \"example\";\n Files.write(Paths.get(\"out.txt\"), s.getBytes(StandardCharsets.UTF_8), StandardOpenOption.WRITE);\n s = new String(Files.readAllBytes(Paths.get(\"in.txt\")), StandardCharsets.ISO_8859_1);\n\nAfter the quick fix is applied:\n\n\n String s = \"example\";\n Files.writeString(Paths.get(\"out.txt\"), s, StandardOpenOption.WRITE);\n s = Files.readString(Paths.get(\"in.txt\"), StandardCharsets.ISO_8859_1);\n\nNew in 2018.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 11", + "index": 122, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstantMathCall", + "shortDescription": { + "text": "Constant call to 'Math'" + }, + "fullDescription": { + "text": "Reports calls to 'java.lang.Math' or 'java.lang.StrictMath' methods that can be replaced with simple compile-time constants. Example: 'double v = Math.sin(0.0);' After the quick-fix is applied: 'double v = 0.0;'", + "markdown": "Reports calls to `java.lang.Math` or `java.lang.StrictMath` methods that can be replaced with simple compile-time constants.\n\n**Example:**\n\n double v = Math.sin(0.0);\n\nAfter the quick-fix is applied:\n\n double v = 0.0;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MissortedModifiers", + "shortDescription": { + "text": "Missorted modifiers" + }, + "fullDescription": { + "text": "Reports declarations whose modifiers are not in the canonical preferred order (as stated in the Java Language Specification). Example: 'class Foo {\n native public final void foo();\n }' After the quick-fix is applied: 'class Foo {\n public final native void foo();\n }' Use the inspection settings to: toggle the reporting of misplaced annotations: (annotations with 'ElementType.TYPE_USE' not directly before the type and after the modifier keywords, or other annotations not before the modifier keywords). When this option is disabled, any annotation can be positioned before or after the modifier keywords. Modifier lists with annotations in between the modifier keywords will always be reported. specify whether the 'ElementType.TYPE_USE' annotation should be positioned directly before a type, even when the annotation has other targets specified.", + "markdown": "Reports declarations whose modifiers are not in the canonical preferred order (as stated in the Java Language Specification).\n\n**Example:**\n\n\n class Foo {\n native public final void foo();\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n public final native void foo();\n }\n\nUse the inspection settings to:\n\n*\n toggle the reporting of misplaced annotations:\n (annotations with `ElementType.TYPE_USE` *not* directly\n before the type and after the modifier keywords, or\n other annotations *not* before the modifier keywords).\n When this option is disabled, any annotation can be positioned before or after the modifier keywords.\n Modifier lists with annotations in between the modifier keywords will always be reported.\n\n*\n specify whether the `ElementType.TYPE_USE` annotation should be positioned directly before\n a type, even when the annotation has other targets specified." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TransientFieldInNonSerializableClass", + "shortDescription": { + "text": "Transient field in non-serializable class" + }, + "fullDescription": { + "text": "Reports 'transient' fields in classes that do not implement 'java.io.Serializable'. Example: 'public class NonSerializableClass {\n private transient String password;\n }' After the quick-fix is applied: 'public class NonSerializableClass {\n private String password;\n }'", + "markdown": "Reports `transient` fields in classes that do not implement `java.io.Serializable`.\n\n**Example:**\n\n\n public class NonSerializableClass {\n private transient String password;\n }\n\nAfter the quick-fix is applied:\n\n\n public class NonSerializableClass {\n private String password;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 18, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CyclomaticComplexity", + "shortDescription": { + "text": "Overly complex method" + }, + "fullDescription": { + "text": "Reports methods that have too many branch points. A branch point is one of the following: loop statement 'if' statement ternary expression 'catch' section expression with one or more '&&' or '||' operators inside 'switch' block with non-default branches Methods with too high cyclomatic complexity may be confusing and hard to test. Use the Method complexity limit field to specify the maximum allowed cyclomatic complexity for a method.", + "markdown": "Reports methods that have too many branch points.\n\nA branch point is one of the following:\n\n* loop statement\n* `if` statement\n* ternary expression\n* `catch` section\n* expression with one or more `&&` or `||` operators inside\n* `switch` block with non-default branches\n\nMethods with too high cyclomatic complexity may be confusing and hard to test.\n\nUse the **Method complexity limit** field to specify the maximum allowed cyclomatic complexity for a method." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Method metrics", + "index": 95, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SlowListContainsAll", + "shortDescription": { + "text": "Call to 'list.containsAll(collection)' may have poor performance" + }, + "fullDescription": { + "text": "Reports calls to 'containsAll()' on 'java.util.List'. The time complexity of this method call is O(n·m), where n is the number of elements in the list on which the method is called, and m is the number of elements in the collection passed to the method as a parameter. When the list is large, this can be an expensive operation. The quick-fix wraps the list in 'new java.util.HashSet<>()' since the time required to create 'java.util.HashSet' from 'java.util.List' and execute 'containsAll()' on 'java.util.HashSet' is O(n+m). Example: 'public boolean check(List list, Collection collection) {\n // O(n·m) complexity\n return list.containsAll(collection);\n }' After the quick-fix is applied: 'public boolean check(List list, Collection collection) {\n // O(n+m) complexity\n return new HashSet<>(list).containsAll(collection);\n }' New in 2022.1", + "markdown": "Reports calls to `containsAll()` on `java.util.List`.\n\n\nThe time complexity of this method call is O(n·m), where n is the number of elements in the list on which\nthe method is called, and m is the number of elements in the collection passed to the method as a parameter.\nWhen the list is large, this can be an expensive operation.\n\n\nThe quick-fix wraps the list in `new java.util.HashSet<>()` since the time required to create\n`java.util.HashSet` from `java.util.List` and execute `containsAll()` on\n`java.util.HashSet` is O(n+m).\n\n**Example:**\n\n public boolean check(List list, Collection collection) {\n // O(n·m) complexity\n return list.containsAll(collection);\n }\n\nAfter the quick-fix is applied:\n\n public boolean check(List list, Collection collection) {\n // O(n+m) complexity\n return new HashSet<>(list).containsAll(collection);\n }\n\nNew in 2022.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AwaitNotInLoop", + "shortDescription": { + "text": "'await()' not called in loop" + }, + "fullDescription": { + "text": "Reports 'java.util.concurrent.locks.Condition.await()' not being called inside a loop. 'await()' and related methods are normally used to suspend a thread until some condition becomes true. As the thread could have been woken up for a different reason, the condition should be checked after the 'await()' call returns. A loop is a simple way to achieve this. Example: 'void acquire(Condition released) throws InterruptedException {\n released.await();\n }' Good code should look like this: 'void acquire(Condition released) throws InterruptedException {\n while (acquired) {\n released.await();\n }\n }'", + "markdown": "Reports `java.util.concurrent.locks.Condition.await()` not being called inside a loop.\n\n\n`await()` and related methods are normally used to suspend a thread until some condition becomes true.\nAs the thread could have been woken up for a different reason,\nthe condition should be checked after the `await()` call returns.\nA loop is a simple way to achieve this.\n\n**Example:**\n\n\n void acquire(Condition released) throws InterruptedException {\n released.await();\n }\n\nGood code should look like this:\n\n\n void acquire(Condition released) throws InterruptedException {\n while (acquired) {\n released.await();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StaticVariableUninitializedUse", + "shortDescription": { + "text": "Static field used before initialization" + }, + "fullDescription": { + "text": "Reports 'static' variables that are read before initialization. The inspection ignores equality checks with 'null'. Example: 'class Foo {\n public static int bar;\n\n public static void main(String[] args) {\n System.out.println(bar);\n }\n }' Note that this inspection uses a very conservative dataflow algorithm and may incorrectly report 'static' variables as uninitialized. Variables reported as initialized will always be initialized. Use the Ignore primitive fields option to ignore uninitialized primitive fields.", + "markdown": "Reports `static` variables that are read before initialization.\n\nThe inspection ignores equality checks with `null`.\n\n**Example:**\n\n\n class Foo {\n public static int bar;\n\n public static void main(String[] args) {\n System.out.println(bar);\n }\n }\n\nNote that this inspection uses a very conservative dataflow algorithm and may incorrectly report `static` variables as uninitialized. Variables\nreported as initialized will always be initialized.\n\nUse the **Ignore primitive fields** option to ignore uninitialized primitive fields." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Initialization", + "index": 28, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CyclicClassDependency", + "shortDescription": { + "text": "Cyclic class dependency" + }, + "fullDescription": { + "text": "Reports classes that are mutually or cyclically dependent on other classes. Such cyclic dependencies make code fragile and hard to maintain. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports classes that are mutually or cyclically dependent on other classes.\n\nSuch cyclic dependencies make code fragile and hard to maintain.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Dependency issues", + "index": 89, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExceptionPackage", + "shortDescription": { + "text": "Exception package" + }, + "fullDescription": { + "text": "Reports packages that only contain classes that extend 'java.lang.Throwable', either directly or indirectly. Although exceptions usually don't depend on other classes for their implementation, they are normally not used separately. It is often a better design to locate exceptions in the same package as the classes that use them. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports packages that only contain classes that extend `java.lang.Throwable`, either directly or indirectly.\n\nAlthough exceptions usually don't depend on other classes for their implementation, they are normally not used separately.\nIt is often a better design to locate exceptions in the same package as the classes that use them.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Packaging issues", + "index": 38, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringBufferReplaceableByStringBuilder", + "shortDescription": { + "text": "'StringBuffer' may be 'StringBuilder'" + }, + "fullDescription": { + "text": "Reports variables declared as 'StringBuffer' and suggests replacing them with 'StringBuilder'. 'StringBuilder' is a non-thread-safe replacement for 'StringBuffer'. This inspection only reports if the language level of the project or module is 5 or higher.", + "markdown": "Reports variables declared as `StringBuffer` and suggests replacing them with `StringBuilder`. `StringBuilder` is a non-thread-safe replacement for `StringBuffer`.\n\nThis inspection only reports if the language level of the project or module is 5 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 5", + "index": 51, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeParameterExtendsObject", + "shortDescription": { + "text": "Type parameter explicitly extends 'Object'" + }, + "fullDescription": { + "text": "Reports type parameters and wildcard type arguments that are explicitly declared to extend 'java.lang.Object'. Such 'extends' clauses are redundant as 'java.lang.Object' is a supertype for all classes. Example: 'class ClassA {}' If you need to preserve the 'extends Object' clause because of annotations, disable the Ignore when java.lang.Object is annotated option. This might be useful, for example, when you use a nullness analyzer, and the 'extends Object' clause holds a '@Nullable'/'@NotNull' annotation. Example: 'class MyClass {}'", + "markdown": "Reports type parameters and wildcard type arguments that are explicitly declared to extend `java.lang.Object`.\n\nSuch 'extends' clauses are redundant as `java.lang.Object` is a supertype for all classes.\n\n**Example:**\n\n class ClassA {}\n\n\nIf you need to preserve the 'extends Object' clause because of annotations, disable the\n**Ignore when java.lang.Object is annotated** option.\nThis might be useful, for example, when you use a nullness analyzer, and the 'extends Object' clause\nholds a `@Nullable`/`@NotNull` annotation.\n\n**Example:**\n\n class MyClass {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SynchronizedMethod", + "shortDescription": { + "text": "'synchronized' method" + }, + "fullDescription": { + "text": "Reports the 'synchronized' modifier on methods. There are several reasons a 'synchronized' modifier on a method may be a bad idea: As little work as possible should be performed under a lock. Therefore it is often better to use a 'synchronized' block and keep there only the code that works with shared state. Synchronization becomes a part of a method's interface. This makes a transition to a different locking mechanism difficult. Keeping track of what is locking a particular object gets harder. The DoS (denial-of-service) attack becomes feasible either on purpose or unknowingly when inheriting the method's class. As an alternative, consider synchronizing on a 'private final' lock object, access to which can be completely controlled. A quick-fix is provided to wrap the method body with 'synchronized(this)'. Example: 'class Main {\n public synchronized void fooBar() {\n }\n }' After the quick-fix is applied: 'class Main {\n public void fooBar() {\n synchronized (this) {\n }\n }\n }' You can configure the following options for this inspection: Include native methods - include native methods into the inspection's scope. Ignore methods overriding a synchronized method - do not report methods that override a 'synchronized' method.", + "markdown": "Reports the `synchronized` modifier on methods.\n\n\nThere are several reasons a `synchronized` modifier on a method may be a bad idea:\n\n1. As little work as possible should be performed under a lock. Therefore it is often better to use a `synchronized` block and keep there only the code that works with shared state.\n2. Synchronization becomes a part of a method's interface. This makes a transition to a different locking mechanism difficult.\n3. Keeping track of what is locking a particular object gets harder.\n4. The DoS (denial-of-service) attack becomes feasible either on purpose or unknowingly when inheriting the method's class.\n\n\nAs an alternative, consider synchronizing on a `private final` lock object, access to which can be completely controlled.\n\nA quick-fix is provided to wrap the method body with `synchronized(this)`.\n\n**Example:**\n\n\n class Main {\n public synchronized void fooBar() {\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Main {\n public void fooBar() {\n synchronized (this) {\n }\n }\n }\n\nYou can configure the following options for this inspection:\n\n1. **Include native methods** - include native methods into the inspection's scope.\n2. **Ignore methods overriding a synchronized method** - do not report methods that override a `synchronized` method." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringConcatenationInsideStringBufferAppend", + "shortDescription": { + "text": "String concatenation as argument to 'StringBuilder.append()' call" + }, + "fullDescription": { + "text": "Reports 'String' concatenation used as the argument to 'StringBuffer.append()', 'StringBuilder.append()' or 'Appendable.append()'. Such calls may profitably be turned into chained append calls on the existing 'StringBuffer/Builder/Appendable' saving the cost of an extra 'StringBuffer/Builder' allocation. This inspection ignores compile-time evaluated 'String' concatenations, in which case the conversion would only worsen performance. Example: 'void bar(StringBuilder builder, String name) {\n builder.append(\"Hello,\" + name); //warning\n builder.append(\"Hello,\" + \"world\"); //no warning\n }'", + "markdown": "Reports `String` concatenation used as the argument to `StringBuffer.append()`, `StringBuilder.append()` or `Appendable.append()`.\n\n\nSuch calls may profitably be turned into chained append calls on the existing `StringBuffer/Builder/Appendable`\nsaving the cost of an extra `StringBuffer/Builder` allocation.\nThis inspection ignores compile-time evaluated `String` concatenations, in which case the conversion would only\nworsen performance.\n\n**Example:**\n\n\n void bar(StringBuilder builder, String name) {\n builder.append(\"Hello,\" + name); //warning\n builder.append(\"Hello,\" + \"world\"); //no warning\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AbstractMethodWithMissingImplementations", + "shortDescription": { + "text": "Abstract method with missing implementations" + }, + "fullDescription": { + "text": "Reports 'abstract' methods that are not implemented in every concrete subclass. This results in a compile-time error on the subclasses; the inspection reports the problem at the point of the abstract method, allowing faster detection of the problem.", + "markdown": "Reports `abstract` methods that are not implemented in every concrete subclass.\n\n\nThis results in a compile-time error on the subclasses;\nthe inspection reports the problem at the point of the abstract method, allowing faster detection of the problem." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 25, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FeatureEnvy", + "shortDescription": { + "text": "Feature envy" + }, + "fullDescription": { + "text": "Reports the Feature Envy code smell. The warning is thrown when a method calls methods on another class three or more times. Calls to library classes, parent classes, contained or containing classes are not counted by this inspection. Feature envy is often an indication of the fact that this functionality is located in a wrong class. Example: 'class JobManager {\n // Warning: this method calls three methods\n // of the Job class\n // It would be better to move this chain of\n // calls to the Job class itself.\n void performJob(Job job) {\n job.beforeStart();\n job.process();\n job.afterProcessing();\n }\n }'", + "markdown": "Reports the *Feature Envy* code smell. The warning is thrown when a method calls methods on another class three or more times. Calls to library classes, parent classes, contained or containing classes are not counted by this inspection. Feature envy is often an indication of the fact that this functionality is located in a wrong class.\n\nExample:\n\n\n class JobManager {\n // Warning: this method calls three methods\n // of the Job class\n // It would be better to move this chain of\n // calls to the Job class itself.\n void performJob(Job job) {\n job.beforeStart();\n job.process();\n job.afterProcessing();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 75, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BoxingBoxedValue", + "shortDescription": { + "text": "Boxing of already boxed value" + }, + "fullDescription": { + "text": "Reports boxing of already boxed values. This is a redundant operation since any boxed value will first be auto-unboxed before boxing the value again. If done inside an inner loop, such code may cause performance problems. Example: 'Integer value = 1;\n method(Integer.valueOf(value));' After the quick fix is applied: 'Integer value = 1;\n method(value);'", + "markdown": "Reports boxing of already boxed values.\n\n\nThis is a redundant\noperation since any boxed value will first be auto-unboxed before boxing the\nvalue again. If done inside an inner loop, such code may cause performance\nproblems.\n\n**Example:**\n\n\n Integer value = 1;\n method(Integer.valueOf(value));\n\nAfter the quick fix is applied:\n\n\n Integer value = 1;\n method(value);\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Convert2MethodRef", + "shortDescription": { + "text": "Lambda can be replaced with method reference" + }, + "fullDescription": { + "text": "Reports lambdas that can be replaced with method references. While often it could be a matter of taste, method references are more clear and readable compared to lambdas. Example: 'Runnable r = () -> System.out.println();' After the quick-fix is applied: 'Runnable r = System.out::println;' The inspection may suggest method references even if a lambda doesn't call any method, like replacing 'obj -> obj != null' with 'Objects::nonNull'. Use the Settings | Editor | Code Style | Java | Code Generation settings to configure special method references. This inspection only reports if the language level of the project or module is 8 or higher.", + "markdown": "Reports lambdas that can be replaced with method references. While often it could be a matter of taste, method references are more clear and readable compared to lambdas.\n\nExample:\n\n\n Runnable r = () -> System.out.println();\n\nAfter the quick-fix is applied:\n\n\n Runnable r = System.out::println;\n\n\nThe inspection may suggest method references even if a lambda doesn't call any method, like replacing `obj -> obj != null`\nwith `Objects::nonNull`.\nUse the [Settings \\| Editor \\| Code Style \\| Java \\| Code Generation](settings://preferences.sourceCode.Java?Lambda%20Body)\nsettings to configure special method references.\n\nThis inspection only reports if the language level of the project or module is 8 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 59, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantCollectionOperation", + "shortDescription": { + "text": "Redundant 'Collection' operation" + }, + "fullDescription": { + "text": "Reports unnecessarily complex collection operations which have simpler alternatives. Example: 'void f(String[] array, Collection collection) {\n String[] strings = Arrays.asList(array).subList(0, 10).toArray(new String[0]);\n boolean contains = collection.containsAll(Collections.singletonList(\"x\"));\n }' After the quick-fix is applied: 'void f(String[] array, Collection collection) {\n String[] strings = Arrays.copyOf(array, 10);\n boolean contains = collection.contains(\"x\");\n }' New in 2018.1", + "markdown": "Reports unnecessarily complex collection operations which have simpler alternatives.\n\nExample:\n\n\n void f(String[] array, Collection collection) {\n String[] strings = Arrays.asList(array).subList(0, 10).toArray(new String[0]);\n boolean contains = collection.containsAll(Collections.singletonList(\"x\"));\n }\n\nAfter the quick-fix is applied:\n\n\n void f(String[] array, Collection collection) {\n String[] strings = Arrays.copyOf(array, 10);\n boolean contains = collection.contains(\"x\");\n }\n\nNew in 2018.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryToStringCall", + "shortDescription": { + "text": "Unnecessary call to 'toString()'" + }, + "fullDescription": { + "text": "Reports calls to 'toString()' that are used in the following cases: In string concatenations In the 'java.lang.StringBuilder#append()' or 'java.lang.StringBuffer#append()' methods In the methods of 'java.io.PrintWriter' or 'java.io.PrintStream' in the methods 'org.slf4j.Logger' In these cases, conversion to string will be handled by the underlying library methods, and the explicit call to 'toString()' is not needed. Example: 'System.out.println(this.toString())' After the quick-fix is applied: 'System.out.println(this)' Note that without the 'toString()' call, the code semantics might be different: if the expression is null, then the 'null' string will be used instead of throwing a 'NullPointerException'. Use the Report only when qualifier is known to be not-null option to avoid warnings for the values that could potentially be null.", + "markdown": "Reports calls to `toString()` that are used in the following cases:\n\n* In string concatenations\n* In the `java.lang.StringBuilder#append()` or `java.lang.StringBuffer#append()` methods\n* In the methods of `java.io.PrintWriter` or `java.io.PrintStream`\n* in the methods `org.slf4j.Logger`\n\nIn these cases, conversion to string will be handled by the underlying library methods, and the explicit call to `toString()` is not needed.\n\nExample:\n\n\n System.out.println(this.toString())\n\nAfter the quick-fix is applied:\n\n\n System.out.println(this)\n\n\nNote that without the `toString()` call, the code semantics might be different: if the expression is null,\nthen the `null` string will be used instead of throwing a `NullPointerException`.\n\nUse the **Report only when qualifier is known to be not-null** option to avoid warnings for the values that could potentially be null." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassOnlyUsedInOnePackage", + "shortDescription": { + "text": "Class only used from one other package" + }, + "fullDescription": { + "text": "Reports classes that don't depend on any other class in their package, depend on classes from another package, and are themselves a dependency only for classes from this other package. Consider moving such classes to the package on which they depend. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports classes that don't depend on any other class in their package, depend on classes from another package, and are themselves a dependency only for classes from this other package. Consider moving such classes to the package on which they depend.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Packaging issues", + "index": 38, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuppressionAnnotation", + "shortDescription": { + "text": "Inspection suppression annotation" + }, + "fullDescription": { + "text": "Reports comments or annotations suppressing inspections. This inspection can be useful when leaving suppressions intentionally for further review. Example: '@SuppressWarnings(\"unused\")\n static Stream stringProvider() {\n return Stream.of(\"foo\", \"bar\");\n }'", + "markdown": "Reports comments or annotations suppressing inspections.\n\nThis inspection can be useful when leaving suppressions intentionally for further review.\n\n**Example:**\n\n\n @SuppressWarnings(\"unused\")\n static Stream stringProvider() {\n return Stream.of(\"foo\", \"bar\");\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code maturity", + "index": 49, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverriddenMethodCallDuringObjectConstruction", + "shortDescription": { + "text": "Overridden method called during object construction" + }, + "fullDescription": { + "text": "Reports any calls to overridden methods of the current class during object construction. This happens if an object construction is inside: A constructor A non-static instance initializer A non-static field initializer 'clone()' 'readObject()' 'readObjectNoData()' Such calls may result in subtle bugs, as the object is not guaranteed to be initialized before the method call occurs. Example: 'abstract class Parent {\n void someMethod() { }\n }\n\n class Child extends Parent {\n Child() {\n someMethod();\n }\n\n @Override\n void someMethod() { }\n }' This inspection shares its functionality with: The Abstract method called during object construction inspection The Overridable method called during object construction inspection Only one inspection should be enabled at the same time to prevent duplicate warnings.", + "markdown": "Reports any calls to overridden methods of the current class during object construction. This happens if an object construction is inside:\n\n* A constructor\n* A non-static instance initializer\n* A non-static field initializer\n* `clone()`\n* `readObject()`\n* `readObjectNoData()`\n\nSuch calls may result in subtle bugs, as the object is not guaranteed to be initialized before the method call occurs.\n\nExample:\n\n\n abstract class Parent {\n void someMethod() { }\n }\n\n class Child extends Parent {\n Child() {\n someMethod();\n }\n\n @Override\n void someMethod() { }\n }\n\nThis inspection shares its functionality with:\n\n* The **Abstract method called during object construction** inspection\n* The **Overridable method called during object construction** inspection\n\nOnly one inspection should be enabled at the same time to prevent duplicate warnings." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Initialization", + "index": 28, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AbstractClassWithoutAbstractMethods", + "shortDescription": { + "text": "Abstract class without 'abstract' methods" + }, + "fullDescription": { + "text": "Reports 'abstract' classes that have no 'abstract' methods.", + "markdown": "Reports `abstract` classes that have no `abstract` methods." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 25, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CastThatLosesPrecision", + "shortDescription": { + "text": "Numeric cast that loses precision" + }, + "fullDescription": { + "text": "Reports cast operations between primitive numeric types that may result in precision loss. Such casts are not necessarily a problem but may result in difficult to trace bugs if the loss of precision is unexpected. Example: 'int a = 420;\n byte b = (byte) a;' Use the Ignore casts from int to char option to ignore casts from 'int' to 'char'. This type of cast is often used when implementing I/O operations because the 'read()' method of the 'java.io.Reader' class returns an 'int'. Use the Ignore casts from int 128-255 to byte option to ignore casts of constant values (128-255) from 'int' to 'byte'. Such values will overflow to negative numbers that still fit inside a byte.", + "markdown": "Reports cast operations between primitive numeric types that may result in precision loss.\n\nSuch casts are not necessarily a problem but may result in difficult to\ntrace bugs if the loss of precision is unexpected.\n\n**Example:**\n\n\n int a = 420;\n byte b = (byte) a;\n\nUse the **Ignore casts from int to char** option to ignore casts from `int` to `char`.\nThis type of cast is often used when implementing I/O operations because the `read()` method of the\n`java.io.Reader` class returns an `int`.\n\nUse the **Ignore casts from int 128-255 to byte** option to ignore casts of constant values (128-255) from `int` to\n`byte`.\nSuch values will overflow to negative numbers that still fit inside a byte." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues/Cast", + "index": 102, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReturnSeparatedFromComputation", + "shortDescription": { + "text": "'return' separated from the result computation" + }, + "fullDescription": { + "text": "Reports 'return' statements that return a local variable where the value of the variable is computed somewhere else within the same method. The quick-fix inlines the returned variable by moving the return statement to the location in which the value of the variable is computed. When the returned value can't be inlined into the 'return' statement, the quick-fix attempts to move the return statement as close to the computation of the returned value as possible. Example: 'int n = -1;\n for (int i = 0; i < a.length; i++) {\n if (a[i] == b) {\n n = i;\n break;\n }\n }\n return n;' After the quick-fix is applied: 'int n = -1;\n for (int i = 0; i < a.length; i++) {\n if (a[i] == b) {\n return i;\n }\n }\n return n;'", + "markdown": "Reports `return` statements that return a local variable where the value of the variable is computed somewhere else within the same method.\n\nThe quick-fix inlines the returned variable by moving the return statement to the location in which the value\nof the variable is computed.\nWhen the returned value can't be inlined into the `return` statement,\nthe quick-fix attempts to move the return statement as close to the computation of the returned value as possible.\n\nExample:\n\n\n int n = -1;\n for (int i = 0; i < a.length; i++) {\n if (a[i] == b) {\n n = i;\n break;\n }\n }\n return n;\n\nAfter the quick-fix is applied:\n\n\n int n = -1;\n for (int i = 0; i < a.length; i++) {\n if (a[i] == b) {\n return i;\n }\n }\n return n;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SynchronizeOnNonFinalField", + "shortDescription": { + "text": "Synchronization on a non-final field" + }, + "fullDescription": { + "text": "Reports 'synchronized' statement lock expressions that consist of a non-'final' field reference. Such statements are unlikely to have useful semantics, as different threads may acquire different locks even when operating on the same object. Example: 'private Object o;\n public void foo() {\n synchronized (o) // synchronization on a non-final field\n { }\n }'", + "markdown": "Reports `synchronized` statement lock expressions that consist of a non-`final` field reference. Such statements are unlikely to have useful semantics, as different threads may acquire different locks even when operating on the same object.\n\n**Example:**\n\n\n private Object o;\n public void foo() {\n synchronized (o) // synchronization on a non-final field\n { }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SameReturnValue", + "shortDescription": { + "text": "Method always returns the same value" + }, + "fullDescription": { + "text": "Reports methods and method hierarchies that always return the same constant. Example: 'class X {\n int xxx() {\n return 0;\n }\n }'", + "markdown": "Reports methods and method hierarchies that always return the same constant.\n\n**Example:**\n\n\n class X {\n int xxx() {\n return 0;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 15, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThrowablePrintStackTrace", + "shortDescription": { + "text": "Call to 'printStackTrace()'" + }, + "fullDescription": { + "text": "Reports calls to 'Throwable.printStackTrace()' without arguments. Such statements are often used for temporary debugging and should be either removed from the production code or replaced with a more robust logging facility.", + "markdown": "Reports calls to `Throwable.printStackTrace()` without arguments.\n\nSuch statements are often used for temporary debugging and should be either removed from the production code\nor replaced with a more robust logging facility." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code maturity", + "index": 49, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringBufferMustHaveInitialCapacity", + "shortDescription": { + "text": "'StringBuilder' without initial capacity" + }, + "fullDescription": { + "text": "Reports attempts to instantiate a new 'StringBuffer' or 'StringBuilder' object without specifying its initial capacity. If no initial capacity is specified, a default capacity is used, which will rarely be optimal. Failing to specify the initial capacity for 'StringBuffer' may result in performance issues if space needs to be reallocated and memory copied when the initial capacity is exceeded. Example: '// Capacity is not specified\n var sb = new StringBuilder();'", + "markdown": "Reports attempts to instantiate a new `StringBuffer` or `StringBuilder` object without specifying its initial capacity.\n\n\nIf no initial capacity is specified, a default capacity is used, which will rarely be optimal.\nFailing to specify the initial capacity for `StringBuffer` may result\nin performance issues if space needs to be reallocated and memory copied\nwhen the initial capacity is exceeded.\n\nExample:\n\n\n // Capacity is not specified\n var sb = new StringBuilder();\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ArrayObjectsEquals", + "shortDescription": { + "text": "Use of shallow or 'Objects' methods with arrays" + }, + "fullDescription": { + "text": "Reports expressions that seem to use an inappropriate method for determining array equality or calculating their hashcode. The following method calls are reported: 'Object.equals()' for any arrays 'Arrays.equals()' for multidimensional arrays 'Arrays.hashCode()' for multidimensional arrays", + "markdown": "Reports expressions that seem to use an inappropriate method for determining array equality or calculating their hashcode.\n\nThe following method calls are reported:\n\n* `Object.equals()` for any arrays\n* `Arrays.equals()` for multidimensional arrays\n* `Arrays.hashCode()` for multidimensional arrays" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThreeNegationsPerMethod", + "shortDescription": { + "text": "Method with more than three negations" + }, + "fullDescription": { + "text": "Reports methods with three or more negations. Such methods may be confusing. Example: 'void doSmth(int a, int b, boolean flag1, boolean flag2) {\n if (!flag && !flag2) {\n if (a != b) {\n doOther();\n }\n }\n }' Without negations, the method becomes easier to understand: 'void doSmth(int a, int b, boolean flag1, boolean flag2) {\n if (flag1 || flag2 || a == b) return;\n doOther();\n }' Configure the inspection: Use the Ignore negations in 'equals()' methods option to disable the inspection within 'equals()' methods. Use the Ignore negations in 'assert' statements to disable the inspection within 'assert' statements.", + "markdown": "Reports methods with three or more negations. Such methods may be confusing.\n\n**Example:**\n\n\n void doSmth(int a, int b, boolean flag1, boolean flag2) {\n if (!flag && !flag2) {\n if (a != b) {\n doOther();\n }\n }\n }\n\nWithout negations, the method becomes easier to understand:\n\n\n void doSmth(int a, int b, boolean flag1, boolean flag2) {\n if (flag1 || flag2 || a == b) return;\n doOther();\n }\n\nConfigure the inspection:\n\n* Use the **Ignore negations in 'equals()' methods** option to disable the inspection within `equals()` methods.\n* Use the **Ignore negations in 'assert' statements** to disable the inspection within `assert` statements." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Method metrics", + "index": 95, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThreadWithDefaultRunMethod", + "shortDescription": { + "text": "Instantiating a 'Thread' with default 'run()' method" + }, + "fullDescription": { + "text": "Reports code that instantiates 'Thread' without specifying a 'Runnable' parameter or overriding the 'run()' method. Such threads do nothing useful.", + "markdown": "Reports code that instantiates `Thread` without specifying a `Runnable` parameter or overriding the `run()` method.\n\n\nSuch threads do nothing useful." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TestOnlyProblems", + "shortDescription": { + "text": "Test-only usage in production code" + }, + "fullDescription": { + "text": "Reports '@TestOnly'- and '@VisibleForTesting'-annotated methods and classes that are used in production code. Also reports usage of applying '@TestOnly' '@VisibleForTesting' to the same element. The problems are not reported if such method or class is referenced from: Code under the Test Sources folder A test class (JUnit/TestNG) Another '@TestOnly'-annotated method Example (in production code): '@TestOnly\n fun foo() { ... }\n\n fun main () {\n foo()\n }'", + "markdown": "Reports `@TestOnly`- and `@VisibleForTesting`-annotated methods and classes that are used in production code. Also reports usage of applying `@TestOnly` `@VisibleForTesting` to the same element.\n\nThe problems are not reported if such method or class is referenced from:\n\n* Code under the **Test Sources** folder\n* A test class (JUnit/TestNG)\n* Another `@TestOnly`-annotated method\n\n**Example (in production code):**\n\n\n @TestOnly\n fun foo() { ... }\n\n fun main () {\n foo()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages/Test frameworks", + "index": 85, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java8MapApi", + "shortDescription": { + "text": "Simplifiable 'Map' operations" + }, + "fullDescription": { + "text": "Reports common usage patterns of 'java.util.Map' and suggests replacing them with: 'getOrDefault()', 'computeIfAbsent()', 'putIfAbsent()', 'merge()', or 'replaceAll()'. Example: 'map.containsKey(key) ? map.get(key) : \"default\";' After the quick-fix is applied: 'map.getOrDefault(key, \"default\");' Example: 'List list = map.get(key);\n if (list == null) {\n list = new ArrayList<>();\n map.put(key, list);\n }' After the quick-fix is applied: 'map.computeIfAbsent(key, localKey -> new ArrayList<>());' Example: 'Integer val = map.get(key);\n if (val == null) map.put(key, 1);\n else map.put(key, val + 1);' After the quick-fix is applied: 'map.merge(key, 1, (localKey, localValue) -> localValue + 1);' Example: 'for (Map.Entry entry : map.entrySet()) {\n map.put(entry.getKey(), transform(entry.getValue()));\n }' After the quick-fix is applied: 'map.replaceAll((localKey, localValue) -> transform(localValue));' Note that the replacement with 'computeIfAbsent()' or 'merge()' might work incorrectly for some 'Map' implementations if the code extracted to the lambda expression modifies the same 'Map'. By default, the warning doesn't appear if this code might have side effects. If necessary, enable the Suggest replacement even if lambda may have side effects option to always show the warning. Also, due to different handling of the 'null' value in old methods like 'put()' and newer methods like 'computeIfAbsent()' or 'merge()', semantics might change if storing the 'null' value into given 'Map' is important. The inspection won't suggest the replacement when the value is statically known to be nullable, but for values with unknown nullability the replacement is still suggested. In these cases, we recommended suppressing the warning and adding an explanatory comment. This inspection reports only if the language level of the project or module is 8 or higher.", + "markdown": "Reports common usage patterns of `java.util.Map` and suggests replacing them with: `getOrDefault()`, `computeIfAbsent()`, `putIfAbsent()`, `merge()`, or `replaceAll()`.\n\nExample:\n\n\n map.containsKey(key) ? map.get(key) : \"default\";\n\nAfter the quick-fix is applied:\n\n\n map.getOrDefault(key, \"default\");\n\nExample:\n\n\n List list = map.get(key);\n if (list == null) {\n list = new ArrayList<>();\n map.put(key, list);\n }\n\nAfter the quick-fix is applied:\n\n\n map.computeIfAbsent(key, localKey -> new ArrayList<>());\n\nExample:\n\n\n Integer val = map.get(key);\n if (val == null) map.put(key, 1);\n else map.put(key, val + 1);\n\nAfter the quick-fix is applied:\n\n\n map.merge(key, 1, (localKey, localValue) -> localValue + 1);\n\nExample:\n\n\n for (Map.Entry entry : map.entrySet()) {\n map.put(entry.getKey(), transform(entry.getValue()));\n }\n\nAfter the quick-fix is applied:\n\n\n map.replaceAll((localKey, localValue) -> transform(localValue));\n\nNote that the replacement with `computeIfAbsent()` or `merge()` might work incorrectly for some `Map`\nimplementations if the code extracted to the lambda expression modifies the same `Map`. By default,\nthe warning doesn't appear if this code might have side effects. If necessary, enable the\n**Suggest replacement even if lambda may have side effects** option to always show the warning.\n\nAlso, due to different handling of the `null` value in old methods like `put()` and newer methods like\n`computeIfAbsent()` or `merge()`, semantics might change if storing the `null` value into given\n`Map` is important. The inspection won't suggest the replacement when the value is statically known to be nullable,\nbut for values with unknown nullability the replacement is still suggested. In these cases, we recommended suppressing the warning\nand adding an explanatory comment.\n\nThis inspection reports only if the language level of the project or module is 8 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 8", + "index": 59, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JUnit5Converter", + "shortDescription": { + "text": "JUnit 4 test can be JUnit 5" + }, + "fullDescription": { + "text": "Reports JUnit 4 tests that can be automatically migrated to JUnit 5. While default runners are automatically convertible, custom runners, method- and field- rules are not and require manual changes. Example: 'import org.junit.Assert;\n import org.junit.Test;\n\n public class RelevantTest {\n @Test\n public void testIt() {\n Assert.assertEquals(\"expected\", \"actual\");\n }\n }' After the quick-fix is applied: 'import org.junit.jupiter.api.Assertions;\n import org.junit.jupiter.api.Test;\n\n public class RelevantTest {\n @Test\n public void testIt() {\n Assertions.assertEquals(\"expected\", \"actual\");\n }\n }' This inspection requires that the JUnit 5 library is available in the classpath, and JDK 1.8 or later is configured for the project.", + "markdown": "Reports JUnit 4 tests that can be automatically migrated to JUnit 5. While default runners are automatically convertible, custom runners, method- and field- rules are not and require manual changes.\n\n**Example:**\n\n\n import org.junit.Assert;\n import org.junit.Test;\n\n public class RelevantTest {\n @Test\n public void testIt() {\n Assert.assertEquals(\"expected\", \"actual\");\n }\n }\n\nAfter the quick-fix is applied:\n\n\n import org.junit.jupiter.api.Assertions;\n import org.junit.jupiter.api.Test;\n\n public class RelevantTest {\n @Test\n public void testIt() {\n Assertions.assertEquals(\"expected\", \"actual\");\n }\n }\n\nThis inspection requires that the JUnit 5 library is available in the classpath, and JDK 1.8 or later is configured for the project." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages/Test frameworks", + "index": 85, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MeaninglessRecordAnnotationInspection", + "shortDescription": { + "text": "Meaningless record annotation" + }, + "fullDescription": { + "text": "Reports annotations used on record components that have no effect. This can happen in two cases: The reported annotation has the METHOD target, but the corresponding accessor is explicitly defined. The reported annotation has the PARAMETER target, but the canonical constructor is explicitly defined. Example: '@Target(ElementType.METHOD)\n@interface A { }\n \n// The annotation will not appear in bytecode at all,\n// as it should be propagated to the accessor but accessor is explicitly defined \nrecord R(@A int x) {\n public int x() { return x; }\n}' New in 2021.1", + "markdown": "Reports annotations used on record components that have no effect.\n\nThis can happen in two cases:\n\n* The reported annotation has the METHOD target, but the corresponding accessor is explicitly defined.\n* The reported annotation has the PARAMETER target, but the canonical constructor is explicitly defined.\n\nExample:\n\n\n @Target(ElementType.METHOD)\n @interface A { }\n \n // The annotation will not appear in bytecode at all,\n // as it should be propagated to the accessor but accessor is explicitly defined \n record R(@A int x) {\n public int x() { return x; }\n }\n\nNew in 2021.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EqualsWhichDoesntCheckParameterClass", + "shortDescription": { + "text": "'equals()' method which does not check class of parameter" + }, + "fullDescription": { + "text": "Reports 'equals()' methods that do not check the type of their parameter. Failure to check the type of the parameter in the 'equals()' method may result in latent errors if the object is used in an untyped collection. Example: 'class MyClass {\n int x;\n\n @Override\n public boolean equals(Object obj) {\n // equals method should return false if obj is not MyClass\n return ((MyClass)obj).x == x;\n }\n }'", + "markdown": "Reports `equals()` methods that do not check the type of their parameter.\n\nFailure to check the type of the parameter\nin the `equals()` method may result in latent errors if the object is used in an untyped collection.\n\n**Example:**\n\n\n class MyClass {\n int x;\n\n @Override\n public boolean equals(Object obj) {\n // equals method should return false if obj is not MyClass\n return ((MyClass)obj).x == x;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssignmentToSuperclassField", + "shortDescription": { + "text": "Constructor assigns value to field defined in superclass" + }, + "fullDescription": { + "text": "Reports assignment to, or modification of fields that are declared in a superclass from within a subclass constructor. It is considered preferable to initialize the fields of a superclass in its own constructor and delegate to that constructor in a subclass. This will also allow declaring a field 'final' if it isn't changed after the construction. Example: 'class Super {\n int x;\n }\n class Sub extends Super {\n Sub(int _x) {\n // Warning: x is declared in a superclass\n x = _x;\n }\n }' To avoid the problem, declare a superclass constructor: 'class Super {\n final int x;\n\n Super(int _x) {\n x = _x;\n }\n }\n class Sub extends Super {\n Sub(int _x) {\n super(_x);\n }\n }'", + "markdown": "Reports assignment to, or modification of fields that are declared in a superclass from within a subclass constructor.\n\nIt is considered preferable to initialize the fields of a superclass in its own constructor and\ndelegate to that constructor in a subclass. This will also allow declaring a field `final`\nif it isn't changed after the construction.\n\n**Example:**\n\n\n class Super {\n int x;\n }\n class Sub extends Super {\n Sub(int _x) {\n // Warning: x is declared in a superclass\n x = _x;\n }\n }\n\nTo avoid the problem, declare a superclass constructor:\n\n\n class Super {\n final int x;\n\n Super(int _x) {\n x = _x;\n }\n }\n class Sub extends Super {\n Sub(int _x) {\n super(_x);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Assignment issues", + "index": 36, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NumericOverflow", + "shortDescription": { + "text": "Numeric overflow" + }, + "fullDescription": { + "text": "Reports expressions that overflow during computation. Usually, this happens by accident and indicates a bug. For example, a wrong type is used or a shift should be done in an opposite direction . Examples: 'float a = 1.0f/0.0f;\n long b = 30 * 24 * 60 * 60 * 1000;\n long c = 1000L << 62;'", + "markdown": "Reports expressions that overflow during computation. Usually, this happens by accident and indicates a bug. For example, a wrong type is used or a shift should be done in an opposite direction .\n\n**Examples:**\n\n\n float a = 1.0f/0.0f;\n long b = 30 * 24 * 60 * 60 * 1000;\n long c = 1000L << 62;\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousIndentAfterControlStatement", + "shortDescription": { + "text": "Suspicious indentation after control statement without braces" + }, + "fullDescription": { + "text": "Reports suspicious indentation of statements after a control statement without braces. Such indentation can make it look like the statement is inside the control statement, when in fact it will be executed unconditionally after the control statement. Example: 'class Bar {\n void foo(int i) {\n if (i == 0)\n System.out.println(\"foo\");\n System.out.println(\"bar\"); // warning\n if (i == 1);\n System.out.println(\"great\"); // warning\n if (i == 42)\n System.out.println(\"answer\");\n System.out.println(\"question\"); // warning\n }\n }'", + "markdown": "Reports suspicious indentation of statements after a control statement without braces.\n\n\nSuch indentation can make it look like the statement is inside the control statement,\nwhen in fact it will be executed unconditionally after the control statement.\n\n**Example:**\n\n\n class Bar {\n void foo(int i) {\n if (i == 0)\n System.out.println(\"foo\");\n System.out.println(\"bar\"); // warning\n if (i == 1);\n System.out.println(\"great\"); // warning\n if (i == 42)\n System.out.println(\"answer\");\n System.out.println(\"question\"); // warning\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FillPermitsList", + "shortDescription": { + "text": "Same file subclasses are missing from permits clause of a sealed class" + }, + "fullDescription": { + "text": "Reports sealed classes whose permits clauses do not contain some of the subclasses from the same file. Example: 'sealed class A {}\n final class B extends A {}' After the quick-fix is applied: 'sealed class A permits B {}\n final class B extends A {}' New in 2020.3", + "markdown": "Reports sealed classes whose permits clauses do not contain some of the subclasses from the same file.\n\nExample:\n\n\n sealed class A {}\n final class B extends A {}\n\nAfter the quick-fix is applied:\n\n\n sealed class A permits B {}\n final class B extends A {}\n\nNew in 2020.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Junit4Converter", + "shortDescription": { + "text": "JUnit 3 test can be JUnit 4" + }, + "fullDescription": { + "text": "Reports JUnit 3 test classes that can be converted to JUnit 4 test classes. Example: 'public class MainTestCase extends junit.framework.TestCase {\n public void test() {\n Assert.assertTrue(true);\n }\n }' After the quick-fix is applied: 'public class MainTestCase {\n @org.junit.Test\n public void test() {\n Assert.assertTrue(true);\n }\n }' This inspection only reports if the language level of the project or module is 5 or higher, and JUnit 4 is available on the classpath.", + "markdown": "Reports JUnit 3 test classes that can be converted to JUnit 4 test classes.\n\n**Example:**\n\n\n public class MainTestCase extends junit.framework.TestCase {\n public void test() {\n Assert.assertTrue(true);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class MainTestCase {\n @org.junit.Test\n public void test() {\n Assert.assertTrue(true);\n }\n }\n\nThis inspection only reports if the language level of the project or module is 5 or higher, and JUnit 4 is available on the classpath." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/JUnit", + "index": 74, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousDateFormat", + "shortDescription": { + "text": "Suspicious date format pattern" + }, + "fullDescription": { + "text": "Reports date format patterns that are likely used by mistake. The following patterns are reported: Uppercase \"Y\", unless \"w\" appears nearby. It stands for \"Week year\" that is almost always the same as normal \"Year\" (lowercase \"y\" pattern), but may point to the next year at the end of December. Uppercase \"M\" (month) close to \"H\", \"K\", \"h\", or \"k\" (hour). It's likely that a lowercase \"m\" (minute) was intended. Lowercase \"m\" (minute) close to \"y\" (year) or \"d\" (day in month). It's likely that an uppercase \"M\" (month) was intended. Uppercase \"D\" (day in year) close to \"M\", or \"L\" (month). It's likely that a lowercase \"d\" (day in month) was intended. Uppercase \"S\" (milliseconds) close to \"m\" (minutes). It's likely that a lowercase \"s\" (seconds) was intended. Examples: 'new SimpleDateFormat(\"YYYY-MM-dd\")': likely '\"yyyy-MM-dd\"' was intended. 'new SimpleDateFormat(\"yyyy-MM-DD\")': likely '\"yyyy-MM-dd\"' was intended. 'new SimpleDateFormat(\"HH:MM\")': likely '\"HH:mm\"' was intended. New in 2020.1", + "markdown": "Reports date format patterns that are likely used by mistake.\n\nThe following patterns are reported:\n\n* Uppercase \"Y\", unless \"w\" appears nearby. It stands for \"Week year\" that is almost always the same as normal \"Year\" (lowercase \"y\" pattern), but may point to the next year at the end of December.\n* Uppercase \"M\" (month) close to \"H\", \"K\", \"h\", or \"k\" (hour). It's likely that a lowercase \"m\" (minute) was intended.\n* Lowercase \"m\" (minute) close to \"y\" (year) or \"d\" (day in month). It's likely that an uppercase \"M\" (month) was intended.\n* Uppercase \"D\" (day in year) close to \"M\", or \"L\" (month). It's likely that a lowercase \"d\" (day in month) was intended.\n* Uppercase \"S\" (milliseconds) close to \"m\" (minutes). It's likely that a lowercase \"s\" (seconds) was intended.\n\n\nExamples: \n\n`new SimpleDateFormat(\"YYYY-MM-dd\")`: likely `\"yyyy-MM-dd\"` was intended. \n\n`new SimpleDateFormat(\"yyyy-MM-DD\")`: likely `\"yyyy-MM-dd\"` was intended. \n\n`new SimpleDateFormat(\"HH:MM\")`: likely `\"HH:mm\"` was intended.\n\nNew in 2020.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassNewInstance", + "shortDescription": { + "text": "Unsafe call to 'Class.newInstance()'" + }, + "fullDescription": { + "text": "Reports calls to 'java.lang.Class.newInstance()'. This method propagates exceptions thrown by the no-arguments constructor, including checked exceptions. Usages of this method effectively bypass the compile-time exception checking that would otherwise be performed by the compiler. A quick-fix is suggested to replace the call with a call to the 'java.lang.reflect.Constructor.newInstance()' method, which avoids this problem by wrapping any exception thrown by the constructor in a (checked) 'java.lang.reflect.InvocationTargetException'. Example: 'clazz.newInstance()' After the quick-fix is applied: 'clazz.getConstructor().newInstance();'", + "markdown": "Reports calls to `java.lang.Class.newInstance()`.\n\n\nThis method propagates exceptions thrown by\nthe no-arguments constructor, including checked exceptions. Usages of this method\neffectively bypass the compile-time exception checking that would\notherwise be performed by the compiler.\n\n\nA quick-fix is suggested to replace the call with a call to the\n`java.lang.reflect.Constructor.newInstance()` method, which\navoids this problem by wrapping any exception thrown by the constructor in a\n(checked) `java.lang.reflect.InvocationTargetException`.\n\n**Example:**\n\n\n clazz.newInstance()\n\nAfter the quick-fix is applied:\n\n\n clazz.getConstructor().newInstance();\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MagicConstant", + "shortDescription": { + "text": "Magic Constant" + }, + "fullDescription": { + "text": "Reports expressions that can be replaced with \"magic\" constants. Example 1: '// Bare literal \"2\" is used, warning:\n Font font = new Font(\"Arial\", 2)' Example 2: '// Predefined constant is used, good:\n Font font = new Font(\"Arial\", Font.ITALIC)' When possible, the quick-fix inserts an appropriate predefined constant. The behavior of this inspection is controlled by 'org.intellij.lang.annotations.MagicConstant' annotation. Some standard Java library methods are pre-annotated, but you can use this annotation in your code as well.", + "markdown": "Reports expressions that can be replaced with \"magic\" constants.\n\nExample 1:\n\n\n // Bare literal \"2\" is used, warning:\n Font font = new Font(\"Arial\", 2)\n\nExample 2:\n\n\n // Predefined constant is used, good:\n Font font = new Font(\"Arial\", Font.ITALIC)\n\n\nWhen possible, the quick-fix inserts an appropriate predefined constant.\n\n\nThe behavior of this inspection is controlled by `org.intellij.lang.annotations.MagicConstant` annotation.\nSome standard Java library methods are pre-annotated, but you can use this annotation in your code as well." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LimitedScopeInnerClass", + "shortDescription": { + "text": "Local class" + }, + "fullDescription": { + "text": "Reports local classes. A local class is a named nested class declared inside a code block. Local classes are uncommon and may therefore be confusing. In addition, some code standards discourage the use of local classes. Example: 'void test() {\n class Local { // local class\n }\n new Local();\n }'", + "markdown": "Reports local classes.\n\nA local class is a named nested class declared inside a code block.\nLocal classes are uncommon and may therefore be confusing.\nIn addition, some code standards discourage the use of local classes.\n\n**Example:**\n\n\n void test() {\n class Local { // local class\n }\n new Local();\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MultiplyOrDivideByPowerOfTwo", + "shortDescription": { + "text": "Multiplication or division by power of two" + }, + "fullDescription": { + "text": "Reports multiplication of an integer value by a constant integer that can be represented as a power of two. Such expressions can be replaced with right or left shift operations for a possible performance improvement. Note that this inspection is not relevant for modern JVMs (e. g., HotSpot or OpenJ9) because their JIT compilers will perform this optimization. It might only be useful in some embedded systems where no JIT compilation is performed. Example: 'int y = x * 4;' A quick-fix is suggested to replace the multiplication or division operation with the shift operation: 'int y = x << 2;' Use the option to make the inspection also report division by a power of two. Note that replacing a power of two division with a shift does not work for negative numbers.", + "markdown": "Reports multiplication of an integer value by a constant integer that can be represented as a power of two. Such expressions can be replaced with right or left shift operations for a possible performance improvement.\n\n\nNote that this inspection is not relevant for modern JVMs (e. g.,\nHotSpot or OpenJ9) because their JIT compilers will perform this optimization.\nIt might only be useful in some embedded systems where no JIT compilation is performed.\n\n**Example:**\n\n\n int y = x * 4;\n\nA quick-fix is suggested to replace the multiplication or division operation with the shift operation:\n\n\n int y = x << 2;\n\n\nUse the option to make the inspection also report division by a power of two.\nNote that replacing a power of two division with a shift does not work for negative numbers." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance/Embedded", + "index": 21, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodCallInLoopCondition", + "shortDescription": { + "text": "Method call in loop condition" + }, + "fullDescription": { + "text": "Reports method calls in the condition part of a loop statement. In highly resource constrained environments, such calls may have adverse performance implications. Applying the results of this inspection without consideration might have negative effects on code clarity and design. This inspection is intended for Java ME and other highly resource constrained environments. Example: 'String s = \"example\";\n for (int i = 0; i < s.length(); i++) {\n System.out.println(s.charAt(i));\n }' After the quick-fix is applied: 'String s = \"example\";\n int length = s.length();\n for (int i = 0; i < length; i++) {\n System.out.println(s.charAt(i));\n }' Use the option to ignore calls to common Java iteration methods like 'Iterator.hasNext()' and known methods with side-effects like 'Atomic*.compareAndSet'.", + "markdown": "Reports method calls in the condition part of a loop statement. In highly resource constrained environments, such calls may have adverse performance implications.\n\n\nApplying the results of this inspection without consideration might have negative effects on code clarity and design.\nThis inspection is intended for Java ME and other highly resource constrained environments.\n\n**Example:**\n\n\n String s = \"example\";\n for (int i = 0; i < s.length(); i++) {\n System.out.println(s.charAt(i));\n }\n\nAfter the quick-fix is applied:\n\n\n String s = \"example\";\n int length = s.length();\n for (int i = 0; i < length; i++) {\n System.out.println(s.charAt(i));\n }\n\n\nUse the option to ignore calls to common Java iteration methods like `Iterator.hasNext()`\nand known methods with side-effects like `Atomic*.compareAndSet`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance/Embedded", + "index": 21, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NumericToString", + "shortDescription": { + "text": "Call to 'Number.toString()'" + }, + "fullDescription": { + "text": "Reports 'toString()' calls on objects of a class extending 'Number'. Such calls are usually incorrect in an internationalized environment and some locale specific formatting should be used instead. Example: 'void print(Double d) {\n System.out.println(d.toString());\n }' A possible way to fix this problem could be: 'void print(Double d) {\n System.out.printf(\"%f%n\", d);\n }' This formats the number using the default locale which is set during the startup of the JVM and is based on the host environment.", + "markdown": "Reports `toString()` calls on objects of a class extending `Number`. Such calls are usually incorrect in an internationalized environment and some locale specific formatting should be used instead.\n\n**Example:**\n\n\n void print(Double d) {\n System.out.println(d.toString());\n }\n\nA possible way to fix this problem could be:\n\n\n void print(Double d) {\n System.out.printf(\"%f%n\", d);\n }\n\nThis formats the number using the default locale which is set during the startup of the JVM and is based on the host environment." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 9, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ForLoopReplaceableByWhile", + "shortDescription": { + "text": "'for' loop may be replaced by 'while' loop" + }, + "fullDescription": { + "text": "Reports 'for' loops that contain neither initialization nor update components, and suggests converting them to 'while' loops. This makes the code easier to read. Example: 'for(; exitCondition(); ) {\n process();\n }' After the quick-fix is applied: 'while(exitCondition()) {\n process();\n }' The quick-fix is also available for other 'for' loops, so you can replace any 'for' loop with a 'while' loop. Use the Ignore 'infinite' for loops without conditions option if you want to ignore 'for' loops with trivial or non-existent conditions.", + "markdown": "Reports `for` loops that contain neither initialization nor update components, and suggests converting them to `while` loops. This makes the code easier to read.\n\nExample:\n\n\n for(; exitCondition(); ) {\n process();\n }\n\nAfter the quick-fix is applied:\n\n\n while(exitCondition()) {\n process();\n }\n\nThe quick-fix is also available for other `for` loops, so you can replace any `for` loop with a\n`while` loop.\n\nUse the **Ignore 'infinite' for loops without conditions** option if you want to ignore `for`\nloops with trivial or non-existent conditions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodCount", + "shortDescription": { + "text": "Class with too many methods" + }, + "fullDescription": { + "text": "Reports classes whose number of methods exceeds the specified maximum. Classes with too many methods are often trying to 'do too much'. Consider splitting such a class into multiple smaller classes. Configure the inspection: Use the Method count limit field to specify the maximum allowed number of methods in a class. Use the Ignore simple getter and setter methods option to ignore simple getters and setters in method count. Use the Ignore methods overriding/implementing a super method to ignore methods that override or implement a method from a superclass.", + "markdown": "Reports classes whose number of methods exceeds the specified maximum.\n\nClasses with too many methods are often trying to 'do too much'. Consider splitting such a class into multiple smaller classes.\n\nConfigure the inspection:\n\n* Use the **Method count limit** field to specify the maximum allowed number of methods in a class.\n* Use the **Ignore simple getter and setter methods** option to ignore simple getters and setters in method count.\n* Use the **Ignore methods overriding/implementing a super method** to ignore methods that override or implement a method from a superclass." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class metrics", + "index": 87, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryDefault", + "shortDescription": { + "text": "Unnecessary 'default' for enum 'switch' statement" + }, + "fullDescription": { + "text": "Reports enum 'switch' statements or expression with 'default' branches which can never be taken, because all possible values are covered by a 'case' branch. Such elements are redundant, especially for 'switch' expressions, because they don't compile when all enum constants are not covered by a 'case' branch. The language level needs to be configured to 14 to report 'switch' expressions. The provided quick-fix removes 'default' branches. Example: 'enum E { A, B }\n int foo(E e) {\n return switch (e) {\n case A -> 1;\n case B -> 2;\n default -> 3;\n };\n }' After the quick-fix is applied: 'enum E { A, B }\n int foo(E e) {\n return switch (e) {\n case A -> 1;\n case B -> 2;\n };\n }' Use the Only report switch expressions option to report only redundant 'default' branches in switch expressions.", + "markdown": "Reports enum `switch` statements or expression with `default` branches which can never be taken, because all possible values are covered by a `case` branch.\n\nSuch elements are redundant, especially for `switch` expressions, because they don't compile when all\nenum constants are not covered by a `case` branch.\n\n\nThe language level needs to be configured to 14 to report `switch` expressions.\n\nThe provided quick-fix removes `default` branches.\n\nExample:\n\n\n enum E { A, B }\n int foo(E e) {\n return switch (e) {\n case A -> 1;\n case B -> 2;\n default -> 3;\n };\n }\n\nAfter the quick-fix is applied:\n\n\n enum E { A, B }\n int foo(E e) {\n return switch (e) {\n case A -> 1;\n case B -> 2;\n };\n }\n\nUse the **Only report switch expressions** option to report only redundant `default` branches in switch expressions." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StaticFieldReferenceOnSubclass", + "shortDescription": { + "text": "Static field referenced via subclass" + }, + "fullDescription": { + "text": "Reports accesses to static fields where the call is qualified by a subclass of the declaring class, rather than by the declaring class itself. Java allows such qualification, but such accesses may indicate a subtle confusion of inheritance and overriding. Example: 'class Parent {\n static int foo = 0;\n }\n\n class Child extends Parent { }\n\n void bar() {\n System.out.println(Child.foo);\n }' After the quick-fix is applied, the result looks like this: 'class Parent {\n static int foo = 0;\n }\n\n class Child extends Parent { }\n\n void bar() {\n System.out.println(Parent.foo);\n }'", + "markdown": "Reports accesses to static fields where the call is qualified by a subclass of the declaring class, rather than by the declaring class itself.\n\n\nJava allows such qualification, but such accesses may indicate a subtle confusion of inheritance and overriding.\n\n**Example:**\n\n\n class Parent {\n static int foo = 0;\n }\n\n class Child extends Parent { }\n\n void bar() {\n System.out.println(Child.foo);\n }\n\nAfter the quick-fix is applied, the result looks like this:\n\n\n class Parent {\n static int foo = 0;\n }\n\n class Child extends Parent { }\n\n void bar() {\n System.out.println(Parent.foo);\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "VolatileArrayField", + "shortDescription": { + "text": "Volatile array field" + }, + "fullDescription": { + "text": "Reports array fields that are declared 'volatile'. Such declarations may be confusing because accessing the array itself follows the rules for 'volatile' fields, but accessing the array's contents does not. Example: 'class Data {\n private volatile int[] idx = new int[0];\n }' If such volatile access is needed for array contents, consider using 'java.util.concurrent.atomic' classes instead: 'class Data {\n private final AtomicIntegerArray idx = new AtomicIntegerArray(new int[0]);\n }'", + "markdown": "Reports array fields that are declared `volatile`. Such declarations may be confusing because accessing the array itself follows the rules for `volatile` fields, but accessing the array's contents does not.\n\n**Example:**\n\n\n class Data {\n private volatile int[] idx = new int[0];\n }\n\n\nIf such volatile access is needed for array contents, consider using\n`java.util.concurrent.atomic` classes instead:\n\n\n class Data {\n private final AtomicIntegerArray idx = new AtomicIntegerArray(new int[0]);\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryInheritDoc", + "shortDescription": { + "text": "Unnecessary '{@inheritDoc}' Javadoc comment" + }, + "fullDescription": { + "text": "Reports Javadoc comments that contain only an '{@inheritDoc}' tag. Since Javadoc copies the super class' comment if no comment is present, a comment containing only '{@inheritDoc}' adds nothing. Also, it reports the '{@inheritDoc}' usages in invalid locations, for example, in fields. Suggests removing the unnecessary Javadoc comment. Example: 'class Example implements Comparable {\n /**\n * {@inheritDoc}\n */\n @Override\n public int compareTo(Example o) {\n return 0;\n }\n }' After the quick-fix is applied: 'class Example implements Comparable {\n @Override\n public int compareTo(Example o) {\n return 0;\n }\n }'", + "markdown": "Reports Javadoc comments that contain only an `{@inheritDoc}` tag. Since Javadoc copies the super class' comment if no comment is present, a comment containing only `{@inheritDoc}` adds nothing.\n\nAlso, it reports the `{@inheritDoc}` usages in invalid locations, for example, in fields.\n\nSuggests removing the unnecessary Javadoc comment.\n\n**Example:**\n\n\n class Example implements Comparable {\n /**\n * {@inheritDoc}\n */\n @Override\n public int compareTo(Example o) {\n return 0;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Example implements Comparable {\n @Override\n public int compareTo(Example o) {\n return 0;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 45, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IgnoredJUnitTest", + "shortDescription": { + "text": "JUnit test annotated with '@Ignore'/'@Disabled'" + }, + "fullDescription": { + "text": "Reports usages of JUnit 4's '@Ignore' or JUnit 5's '@Disabled' annotations. It is considered a code smell to have tests annotated with these annotations for a long time, especially when no reason is specified. Example: '@Ignore\n public class UrgentTest {\n\n @Test\n public void testIt() {\n Assert.assertEquals(\"expected\", \"actual\");\n }\n }' Configure the inspection: Use the Only report annotations without reason option to only report the cases when no reason is specified as the annotation's 'value' attribute.", + "markdown": "Reports usages of JUnit 4's `@Ignore` or JUnit 5's `@Disabled` annotations. It is considered a code smell to have tests annotated with these annotations for a long time, especially when no reason is specified.\n\n**Example:**\n\n\n @Ignore\n public class UrgentTest {\n\n @Test\n public void testIt() {\n Assert.assertEquals(\"expected\", \"actual\");\n }\n }\n\n\nConfigure the inspection:\n\n* Use the **Only report annotations without reason** option to only report the cases when no reason is specified as the annotation's `value` attribute." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages/Test frameworks", + "index": 85, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IgnoreResultOfCall", + "shortDescription": { + "text": "Result of method call ignored" + }, + "fullDescription": { + "text": "Reports method calls whose result is ignored. For many methods, ignoring the result is perfectly legitimate, but for some it is almost certainly an error. Examples of methods where ignoring the result is likely an error include 'java.io.inputStream.read()', which returns the number of bytes actually read, and any method on 'java.lang.String' or 'java.math.BigInteger'. These methods do not produce side-effects and thus pointless if their result is ignored. The calls to the following methods are inspected: Simple getters (which do nothing except return a field) Methods specified in the settings of this inspection Methods annotated with 'org.jetbrains.annotations.Contract(pure=true)' Methods annotated with .*.'CheckReturnValue' Methods in a class or package annotated with 'javax.annotation.CheckReturnValue' Optionally, all non-library methods Calls to methods annotated with Error Prone's or AssertJ's '@CanIgnoreReturnValue' annotation are not reported. Use the inspection settings to specify the classes to check. Methods are matched by name or name pattern using Java regular expression syntax. For classes, use fully-qualified names. Each entry applies to both the class and all its inheritors.", + "markdown": "Reports method calls whose result is ignored.\n\nFor many methods, ignoring the result is perfectly\nlegitimate, but for some it is almost certainly an error. Examples of methods where ignoring\nthe result is likely an error include `java.io.inputStream.read()`,\nwhich returns the number of bytes actually read, and any method on\n`java.lang.String` or `java.math.BigInteger`. These methods do not produce side-effects and thus pointless\nif their result is ignored.\n\nThe calls to the following methods are inspected:\n\n* Simple getters (which do nothing except return a field)\n* Methods specified in the settings of this inspection\n* Methods annotated with `org.jetbrains.annotations.Contract(pure=true)`\n* Methods annotated with .\\*.`CheckReturnValue`\n* Methods in a class or package annotated with `javax.annotation.CheckReturnValue`\n* Optionally, all non-library methods\n\nCalls to methods annotated with Error Prone's or AssertJ's `@CanIgnoreReturnValue` annotation are not reported.\n\n\nUse the inspection settings to specify the classes to check.\nMethods are matched by name or name pattern using Java regular expression syntax.\nFor classes, use fully-qualified names. Each entry applies to both the class and all its inheritors." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BlockingMethodInNonBlockingContext", + "shortDescription": { + "text": "Possibly blocking call in non-blocking context" + }, + "fullDescription": { + "text": "Reports thread-blocking method calls in code fragments where threads should not be blocked. Example (Project Reactor): 'Flux.just(\"1\").flatMap(f -> {\n Flux just = loadUsersFromDatabase();\n just.toIterable(); // Error: blocking operator call in non-blocking scope\n return just;\n }\n);' Consider running blocking code with a proper scheduler, for example 'Schedulers.boundedElastic()', or try to find an alternative non-blocking API. Example (Kotlin Coroutines): 'suspend fun exampleFun() {\n Thread.sleep(100); // Error: blocking method call inside suspend function\n}' Consider running blocking code with a special dispatcher, for example 'Dispatchers.IO', or try to find an alternative non-blocking API. Configure the inspection: In the Blocking Annotations list, specify annotations that mark thread-blocking methods. In the Non-Blocking Annotations list, specify annotations that mark non-blocking methods. Specified annotations can be used as External Annotations", + "markdown": "Reports thread-blocking method calls in code fragments where threads should not be blocked.\n\n**Example (Project Reactor):**\n\n\n Flux.just(\"1\").flatMap(f -> {\n Flux just = loadUsersFromDatabase();\n just.toIterable(); // Error: blocking operator call in non-blocking scope\n return just;\n }\n );\n\nConsider running blocking code [with a proper\nscheduler](https://projectreactor.io/docs/core/release/reference/#faq.wrap-blocking), for example `Schedulers.boundedElastic()`, or try to find an alternative non-blocking API.\n\n**Example (Kotlin Coroutines):**\n\n\n suspend fun exampleFun() {\n Thread.sleep(100); // Error: blocking method call inside suspend function\n }\n\nConsider running blocking code [with a special dispatcher](https://kotlinlang.org/docs/coroutine-context-and-dispatchers.html),\nfor example `Dispatchers.IO`, or try to find an alternative non-blocking API.\n\nConfigure the inspection:\n\n* In the **Blocking Annotations** list, specify annotations that mark thread-blocking methods.\n* In the **Non-Blocking Annotations** list, specify annotations that mark non-blocking methods.\n\nSpecified annotations can be used as [External Annotations](https://www.jetbrains.com/help/idea/external-annotations.html)" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 4, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonReproducibleMathCall", + "shortDescription": { + "text": "Non-reproducible call to 'Math'" + }, + "fullDescription": { + "text": "Reports calls to 'java.lang.Math' methods, which results are not guaranteed to be reproduced precisely. In environments where reproducibility of results is required, 'java.lang.StrictMath' should be used instead.", + "markdown": "Reports calls to `java.lang.Math` methods, which results are not guaranteed to be reproduced precisely.\n\nIn environments where reproducibility of results is required, `java.lang.StrictMath`\nshould be used instead." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ParametersPerConstructor", + "shortDescription": { + "text": "Constructor with too many parameters" + }, + "fullDescription": { + "text": "Reports constructors whose number of parameters exceeds the specified maximum. Such objects are hard to instantiate, especially if some parameters are optional. Constructors with too many parameters may indicate that refactoring is necessary. Consider applying the builder pattern, for example. Example: 'public BankAccount(long accountNumber,\n String owner,\n double balance,\n double interestRate) {\n // fields initialization\n }' Configure the inspection: Use the Parameter limit field to specify the maximum allowed number of parameters in a constructor. Use the Ignore constructors with visibility list to specify whether the inspection should ignore constructors with specific visibility.", + "markdown": "Reports constructors whose number of parameters exceeds the specified maximum. Such objects are hard to instantiate, especially if some parameters are optional. Constructors with too many parameters may indicate that refactoring is necessary. Consider applying the builder pattern, for example.\n\n**Example:**\n\n\n public BankAccount(long accountNumber,\n String owner,\n double balance,\n double interestRate) {\n // fields initialization\n }\n\nConfigure the inspection:\n\n* Use the **Parameter limit** field to specify the maximum allowed number of parameters in a constructor.\n* Use the **Ignore constructors with visibility** list to specify whether the inspection should ignore constructors with specific visibility." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Method metrics", + "index": 95, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssertBetweenInconvertibleTypes", + "shortDescription": { + "text": "'assertEquals()' between objects of inconvertible types" + }, + "fullDescription": { + "text": "Reports calls to assertion methods where the \"expected\" and \"actual\" arguments are of incompatible types. Such calls often indicate that there is a bug in the test. This inspection checks the relevant JUnit, TestNG, and AssertJ methods. Examples: 'assertEquals(\"1\", 1);\n assertNotSame(new int[0], 0);\n\n // weak warning, may just test the equals() contract\n assertThat(foo).as(\"user type\").isNotEqualTo(bar);'", + "markdown": "Reports calls to assertion methods where the \"expected\" and \"actual\" arguments are of incompatible types.\n\nSuch calls often indicate that there is a bug in the test.\nThis inspection checks the relevant JUnit, TestNG, and AssertJ methods.\n\n**Examples:**\n\n\n assertEquals(\"1\", 1);\n assertNotSame(new int[0], 0);\n\n // weak warning, may just test the equals() contract\n assertThat(foo).as(\"user type\").isNotEqualTo(bar);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages/Test frameworks", + "index": 85, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonExtendableApiUsage", + "shortDescription": { + "text": "Class, interface, or method should not be extended" + }, + "fullDescription": { + "text": "Reports classes, interfaces and methods that extend, implement, or override API elements marked with '@ApiStatus.NonExtendable'. The '@ApiStatus.NonExtendable' annotation indicates that the class, interface, or method must not be extended, implemented, or overridden. Since casting such interfaces and classes to the internal library implementation is rather common, if a client provides a different implementation, you will get 'ClassCastException'. Adding new abstract methods to such classes and interfaces will break the compatibility with the client's implementations.", + "markdown": "Reports classes, interfaces and methods that extend, implement, or override API elements marked with `@ApiStatus.NonExtendable`.\n\n\nThe `@ApiStatus.NonExtendable` annotation indicates that the class, interface, or method **must not be extended,\nimplemented, or overridden** .\nSince casting such interfaces and classes to the internal library implementation is rather common,\nif a client provides a different implementation, you will get `ClassCastException`.\nAdding new abstract methods to such classes and interfaces will break the compatibility with the client's implementations." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 4, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SwitchExpressionCanBePushedDown", + "shortDescription": { + "text": "Common subexpression can be extracted from 'switch'" + }, + "fullDescription": { + "text": "Reports switch expressions and statements where every branch has a common subexpression, so the 'switch' could be moved inside. This action shortens the code. In many cases, it's reasonable to extract the resulting switch expression to a separate variable or method. Example: 'switch (value) {\n case 0 -> System.out.println(\"zero\");\n case 1 -> System.out.println(\"one\");\n case 2, 3, 4 -> System.out.println(\"few\");\n default -> System.out.println(\"many\");\n }' After the quick-fix is applied: 'System.out.println(switch (value) {\n case 0 -> \"zero\";\n case 1 -> \"one\";\n case 2, 3, 4 -> \"few\";\n default -> \"many\";\n });' This inspection is applicable only to enhanced switches with arrow syntax. New in 2022.3", + "markdown": "Reports switch expressions and statements where every branch has a common subexpression, so the `switch` could be moved inside. This action shortens the code. In many cases, it's reasonable to extract the resulting switch expression to a separate variable or method.\n\nExample:\n\n\n switch (value) {\n case 0 -> System.out.println(\"zero\");\n case 1 -> System.out.println(\"one\");\n case 2, 3, 4 -> System.out.println(\"few\");\n default -> System.out.println(\"many\");\n }\n\nAfter the quick-fix is applied:\n\n\n System.out.println(switch (value) {\n case 0 -> \"zero\";\n case 1 -> \"one\";\n case 2, 3, 4 -> \"few\";\n default -> \"many\";\n });\n\n\nThis inspection is applicable only to enhanced switches with arrow syntax.\n\nNew in 2022.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnqualifiedFieldAccess", + "shortDescription": { + "text": "Instance field access not qualified with 'this'" + }, + "fullDescription": { + "text": "Reports field access operations that are not qualified with 'this' or some other qualifier. Some coding styles mandate that all field access operations are qualified to prevent confusion with local variable or parameter access. Example: 'class Foo {\n int foo;\n\n void bar() {\n foo += 1;\n }\n }' After the quick-fix is applied: 'class Foo {\n int foo;\n\n void bar() {\n this.foo += 1;\n }\n }'", + "markdown": "Reports field access operations that are not qualified with `this` or some other qualifier.\n\n\nSome coding styles mandate that all field access operations are qualified to prevent confusion with local\nvariable or parameter access.\n\n**Example:**\n\n\n class Foo {\n int foo;\n\n void bar() {\n foo += 1;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n int foo;\n\n void bar() {\n this.foo += 1;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MismatchedCollectionQueryUpdate", + "shortDescription": { + "text": "Mismatched query and update of collection" + }, + "fullDescription": { + "text": "Reports collections whose contents are either queried and not updated, or updated and not queried. Such inconsistent queries and updates are pointless and may indicate either dead code or a typo. Use the inspection settings to specify name patterns that correspond to update/query methods. Query methods that return an element are automatically detected, and only those that write data to an output parameter (for example, an 'OutputStream') need to be specified. Example: Suppose you have your custom 'FixedStack' class with method 'store()': 'public class FixedStack extends Collection {\n public T store(T t) {\n // implementation\n }\n }' You can add 'store' to the update methods table in order to report mismatched queries like: 'void test(int i) {\n FixedStack stack = new FixedStack<>();\n stack.store(i);\n }'", + "markdown": "Reports collections whose contents are either queried and not updated, or updated and not queried.\n\n\nSuch inconsistent queries and updates are pointless and may indicate\neither dead code or a typo.\n\n\nUse the inspection settings to specify name patterns that correspond to update/query methods.\nQuery methods that return an element are automatically detected, and only\nthose that write data to an output parameter (for example, an `OutputStream`) need to be specified.\n\n\n**Example:**\n\nSuppose you have your custom `FixedStack` class with method `store()`:\n\n\n public class FixedStack extends Collection {\n public T store(T t) {\n // implementation\n }\n }\n\nYou can add `store` to the update methods table in order to report mismatched queries like:\n\n\n void test(int i) {\n FixedStack stack = new FixedStack<>();\n stack.store(i);\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CharacterComparison", + "shortDescription": { + "text": "Character comparison" + }, + "fullDescription": { + "text": "Reports ordinal comparisons of 'char' values. In an internationalized environment, such comparisons are rarely correct.", + "markdown": "Reports ordinal comparisons of `char` values. In an internationalized environment, such comparisons are rarely correct." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 9, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InnerClassReferencedViaSubclass", + "shortDescription": { + "text": "Inner class referenced via subclass" + }, + "fullDescription": { + "text": "Reports accesses of inner and nested classes where the call is qualified by a subclass of the declaring class, rather than the declaring class itself. Java allows such qualification, but such accesses may indicate a subtle confusion of inheritance and overriding. Example: 'class Super {\n static class Inner {}\n }\n\n class Sub extends Super {\n void test() {\n Sub.Inner s = new Sub.Inner(); // 'Inner' class is declared in 'Super' class, but referenced via 'Sub' class\n }\n }' After the quick-fix is applied: 'class Super {\n static class Inner {}\n }\n\n class Sub extends Super {\n void test() {\n Super.Inner s = new Super.Inner();\n }\n }'", + "markdown": "Reports accesses of inner and nested classes where the call is qualified by a subclass of the declaring class, rather than the declaring class itself.\n\n\nJava allows such qualification, but such accesses may indicate a subtle confusion of inheritance and overriding.\n\n**Example:**\n\n\n class Super {\n static class Inner {}\n }\n\n class Sub extends Super {\n void test() {\n Sub.Inner s = new Sub.Inner(); // 'Inner' class is declared in 'Super' class, but referenced via 'Sub' class\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Super {\n static class Inner {}\n }\n\n class Sub extends Super {\n void test() {\n Super.Inner s = new Super.Inner();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConfusingElse", + "shortDescription": { + "text": "Redundant 'else'" + }, + "fullDescription": { + "text": "Reports redundant 'else' keywords in 'if'—'else' statements and statement chains. The 'else' keyword is redundant when all previous branches end with a 'return', 'throw', 'break', or 'continue' statement. In this case, the statements from the 'else' branch can be placed after the 'if' statement, and the 'else' keyword can be removed. Example: 'if (name == null) {\n throw new IllegalArgumentException();\n } else {\n System.out.println(name);\n }' After the quick-fix is applied: 'if (name == null) {\n throw new IllegalArgumentException();\n }\n System.out.println(name);' Disable the Report when there are no more statements after the 'if' statement option to ignore cases where the 'if'—'else' statement is the last statement in a code block.", + "markdown": "Reports redundant `else` keywords in `if`---`else` statements and statement chains.\n\n\nThe `else` keyword is redundant when all previous branches end with a\n`return`, `throw`, `break`, or `continue` statement. In this case,\nthe statements from the `else` branch can be placed after the `if` statement, and the\n`else` keyword can be removed.\n\n**Example:**\n\n\n if (name == null) {\n throw new IllegalArgumentException();\n } else {\n System.out.println(name);\n }\n\nAfter the quick-fix is applied:\n\n\n if (name == null) {\n throw new IllegalArgumentException();\n }\n System.out.println(name);\n\nDisable the **Report when there are no more statements after the 'if' statement** option to ignore cases where the `if`---`else` statement is the last statement in a code block." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ChannelResource", + "shortDescription": { + "text": "'Channel' opened but not safely closed" + }, + "fullDescription": { + "text": "Reports 'Channel' resources that are not safely closed, including any instances created by calling 'getChannel()' on a file or socket resource. By default, the inspection assumes that the resources can be closed by any method with 'close' or 'cleanup' in its name. Example: 'void send(Socket socket) throws IOException {\n SocketChannel channel = socket.getChannel(); //warning\n channel.write(ByteBuffer.wrap(\"message\".getBytes()));\n }' Use the following options to configure the inspection: Whether a 'Channel' resource is allowed to be opened inside a 'try' block. This style is less desirable because it is more verbose than opening a 'Channel' in front of a 'try' block. Whether the resource can be closed by any method call with the resource passed as argument.", + "markdown": "Reports `Channel` resources that are not safely closed, including any instances created by calling `getChannel()` on a file or socket resource.\n\n\nBy default, the inspection assumes that the resources can be closed by any method with\n'close' or 'cleanup' in its name.\n\n**Example:**\n\n\n void send(Socket socket) throws IOException {\n SocketChannel channel = socket.getChannel(); //warning\n channel.write(ByteBuffer.wrap(\"message\".getBytes()));\n }\n\n\nUse the following options to configure the inspection:\n\n* Whether a `Channel` resource is allowed to be opened inside a `try` block. This style is less desirable because it is more verbose than opening a `Channel` in front of a `try` block.\n* Whether the resource can be closed by any method call with the resource passed as argument." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Resource management", + "index": 46, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ScheduledThreadPoolExecutorWithZeroCoreThreads", + "shortDescription": { + "text": "'ScheduledThreadPoolExecutor' with zero core threads" + }, + "fullDescription": { + "text": "Reports any 'java.util.concurrent.ScheduledThreadPoolExecutor' instances in which 'corePoolSize' is set to zero via the 'setCorePoolSize' method or the object constructor. A 'ScheduledThreadPoolExecutor' with zero core threads will run nothing. Example: 'void foo(int corePoolSize) {\n if (corePoolSize != 0) return;\n ThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(corePoolSize); // warning\n executor.setCorePoolSize(corePoolSize); // warning\n }'", + "markdown": "Reports any `java.util.concurrent.ScheduledThreadPoolExecutor` instances in which `corePoolSize` is set to zero via the `setCorePoolSize` method or the object constructor.\n\n\nA `ScheduledThreadPoolExecutor` with zero core threads will run nothing.\n\n**Example:**\n\n\n void foo(int corePoolSize) {\n if (corePoolSize != 0) return;\n ThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(corePoolSize); // warning\n executor.setCorePoolSize(corePoolSize); // warning\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SynchronizeOnThis", + "shortDescription": { + "text": "Synchronization on 'this'" + }, + "fullDescription": { + "text": "Reports synchronization on 'this' or 'class' expressions. The reported constructs include 'synchronized' blocks and calls to 'wait()', 'notify()' or 'notifyAll()'. There are several reasons synchronization on 'this' or 'class' expressions may be a bad idea: it makes synchronization a part of the external interface of the class, which makes a future change to a different locking mechanism difficult, it becomes hard to track just who is locking on a given object, it makes a denial-of-service attack possible, either on purpose or it can happen easily by accident when subclassing. As an alternative, consider synchronizing on a 'private final' lock object, access to which can be completely controlled. Example: 'public void print() {\n synchronized(this) { // warning: Lock operations on 'this' may have unforeseen side-effects\n System.out.println(\"synchronized\");\n }\n }'", + "markdown": "Reports synchronization on `this` or `class` expressions. The reported constructs include `synchronized` blocks and calls to `wait()`, `notify()` or `notifyAll()`.\n\nThere are several reasons synchronization on `this` or `class` expressions may be a bad idea:\n\n1. it makes synchronization a part of the external interface of the class, which makes a future change to a different locking mechanism difficult,\n2. it becomes hard to track just who is locking on a given object,\n3. it makes a denial-of-service attack possible, either on purpose or it can happen easily by accident when subclassing.\n\nAs an alternative, consider synchronizing on a `private final` lock object, access to which can be completely controlled.\n\n**Example:**\n\n\n public void print() {\n synchronized(this) { // warning: Lock operations on 'this' may have unforeseen side-effects\n System.out.println(\"synchronized\");\n }\n }\n \n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedAssignment", + "shortDescription": { + "text": "Unused assignment" + }, + "fullDescription": { + "text": "Reports assignment values that are not used after the assignment. If the assignment value is unused, it's better to remove the assignment to shorten the code and avoid redundant allocations. The following cases are reported: The variable never gets read after the assignment. The variable is always overwritten with a new value before it is read. The variable initializer is redundant (for one of the two reasons above). Configure the inspection: Use the Report redundant initializers option to report redundant initializers: 'int getI() {\n int i = 0; // redundant initialization\n i = 2;\n return i;\n }' Use the Report ++i when may be replaced with (i + 1) option to report the cases when '++i' expression may be replaced with 'i + 1': 'int preInc(int i) {\n int res = i;\n return ++res;\n }' Use the Report i++ when changed value is not used afterwards option to report the cases when the result of 'i++' expression is not used later: 'int postInc(int i) {\n int res = i;\n return res++;\n }'", + "markdown": "Reports assignment values that are not used after the assignment. If the assignment value is unused, it's better to remove the assignment to shorten the code and avoid redundant allocations.\n\nThe following cases are reported:\n\n* The variable never gets read after the assignment.\n* The variable is always overwritten with a new value before it is read.\n* The variable initializer is redundant (for one of the two reasons above).\n\nConfigure the inspection:\n\n\nUse the **Report redundant initializers** option to report redundant initializers:\n\n\n int getI() {\n int i = 0; // redundant initialization\n i = 2;\n return i;\n }\n\n\nUse the **Report ++i when may be replaced with (i + 1)** option to report the cases when `++i` expression\nmay be replaced with `i + 1`:\n\n\n int preInc(int i) {\n int res = i;\n return ++res;\n }\n\n\nUse the **Report i++ when changed value is not used afterwards** option to report the cases when the result of `i++` expression\nis not used later:\n\n\n int postInc(int i) {\n int res = i;\n return res++;\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HashCodeUsesNonFinalVariable", + "shortDescription": { + "text": "Non-final field referenced in 'hashCode()'" + }, + "fullDescription": { + "text": "Reports implementations of 'hashCode()' that access non-'final' variables. Such access may result in 'hashCode()' returning different values at different points in the object's lifecycle, which may in turn cause problems when using the standard collections classes. Example: 'class Drink {\n String name;\n Drink(String name) { this.name = name; }\n @Override public int hashCode() {\n return Objects.hash(name); //warning\n }\n }\n ...\n Drink coffee = new Drink(\"Coffee\");\n priceMap.put(coffee, 10.0);\n coffee.name = \"Tea\";\n double coffeePrice = priceMap.get(coffee); //not found' A quick-fix is suggested to make the field final: 'class Drink {\n final String name;\n ...\n }'", + "markdown": "Reports implementations of `hashCode()` that access non-`final` variables.\n\n\nSuch access may result in `hashCode()`\nreturning different values at different points in the object's lifecycle, which may in turn cause problems when\nusing the standard collections classes.\n\n**Example:**\n\n\n class Drink {\n String name;\n Drink(String name) { this.name = name; }\n @Override public int hashCode() {\n return Objects.hash(name); //warning\n }\n }\n ...\n Drink coffee = new Drink(\"Coffee\");\n priceMap.put(coffee, 10.0);\n coffee.name = \"Tea\";\n double coffeePrice = priceMap.get(coffee); //not found\n\nA quick-fix is suggested to make the field final:\n\n\n class Drink {\n final String name;\n ...\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ProtectedField", + "shortDescription": { + "text": "Protected field" + }, + "fullDescription": { + "text": "Reports 'protected' fields. Constants (that is, variables marked 'static' or 'final') are not reported. Example: 'public class A {\n protected Object object; // warning\n protected final static int MODE = 0; // constant, no warning\n }'", + "markdown": "Reports `protected` fields.\n\nConstants (that is, variables marked `static` or `final`) are not reported.\n\n**Example:**\n\n\n public class A {\n protected Object object; // warning\n protected final static int MODE = 0; // constant, no warning\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Encapsulation", + "index": 57, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssignmentUsedAsCondition", + "shortDescription": { + "text": "Assignment used as condition" + }, + "fullDescription": { + "text": "Reports assignments that are used as a condition of an 'if', 'while', 'for', or 'do' statement, or a conditional expression. Although occasionally intended, this usage is confusing and may indicate a typo, for example, '=' instead of '=='. The quick-fix replaces '=' with '=='. Example: 'void update(String str, boolean empty) {\n // Warning: 'empty' is reassigned,\n // not compared to str.isEmpty()\n if (empty = str.isEmpty()) {\n ...\n }\n }' After the quick-fix is applied: 'void update(String str, boolean empty) {\n if (empty == str.isEmpty()) {\n ...\n }\n }'", + "markdown": "Reports assignments that are used as a condition of an `if`, `while`, `for`, or `do` statement, or a conditional expression.\n\nAlthough occasionally intended, this usage is confusing and may indicate a typo, for example, `=` instead of `==`.\n\nThe quick-fix replaces `=` with `==`.\n\n**Example:**\n\n\n void update(String str, boolean empty) {\n // Warning: 'empty' is reassigned,\n // not compared to str.isEmpty()\n if (empty = str.isEmpty()) {\n ...\n }\n }\n\nAfter the quick-fix is applied:\n\n\n void update(String str, boolean empty) {\n if (empty == str.isEmpty()) {\n ...\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Assignment issues", + "index": 36, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InstanceofThis", + "shortDescription": { + "text": "'instanceof' check for 'this'" + }, + "fullDescription": { + "text": "Reports usages of 'instanceof' or 'getClass() == SomeClass.class' in which a 'this' expression is checked. Such expressions indicate a failure of the object-oriented design, and should be replaced by polymorphic constructions. Example: 'class Super {\n void process() {\n if (this instanceof Sub) { // warning\n doSomething();\n } else {\n doSomethingElse();\n }\n }\n}\n \nclass Sub extends Super {}' To fix the problem, use an overriding method: 'class Super {\n void process() {\n doSomethingElse();\n }\n}\n \nclass Sub extends Super {\n @Override\n void process() {\n doSomething();\n }\n}'", + "markdown": "Reports usages of `instanceof` or `getClass() == SomeClass.class` in which a `this` expression is checked.\n\nSuch expressions indicate a failure of the object-oriented design, and should be replaced by\npolymorphic constructions.\n\nExample:\n\n\n class Super {\n void process() {\n if (this instanceof Sub) { // warning\n doSomething();\n } else {\n doSomethingElse();\n }\n }\n }\n \n class Sub extends Super {}\n\nTo fix the problem, use an overriding method:\n\n\n class Super {\n void process() {\n doSomethingElse();\n }\n }\n \n class Sub extends Super {\n @Override\n void process() {\n doSomething();\n }\n } \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 75, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassMayBeInterface", + "shortDescription": { + "text": "Abstract 'class' may be 'interface'" + }, + "fullDescription": { + "text": "Reports 'abstract' classes that can be converted to interfaces. Using interfaces instead of classes is preferable as Java doesn't support multiple class inheritance, while a class can implement multiple interfaces. A class may be converted to an interface if it has no superclasses (other than Object), has only 'public static final' fields, 'public abstract' methods, and 'public' inner classes. Example: 'abstract class Example {\n public static final int MY_CONST = 42;\n public abstract void foo();\n}\n\nclass Inheritor extends Example {\n @Override\n public void foo() {\n System.out.println(MY_CONST);\n }\n}' After the quick-fix is applied: 'interface Example {\n int MY_CONST = 42;\n void foo();\n}\n\nclass Inheritor implements Example {\n @Override\n public void foo() {\n System.out.println(MY_CONST);\n }\n}' Configure the inspection: Use the Report classes containing non-abstract methods when using Java 8 option to report only the classes with 'static' methods and non-abstract methods that can be converted to 'default' methods (only applicable to language level of 8 or higher).", + "markdown": "Reports `abstract` classes that can be converted to interfaces.\n\nUsing interfaces instead of classes is preferable as Java doesn't support multiple class inheritance,\nwhile a class can implement multiple interfaces.\n\nA class may be converted to an interface if it has no superclasses (other\nthan Object), has only `public static final` fields,\n`public abstract` methods, and `public` inner classes.\n\n\nExample:\n\n\n abstract class Example {\n public static final int MY_CONST = 42;\n public abstract void foo();\n }\n\n class Inheritor extends Example {\n @Override\n public void foo() {\n System.out.println(MY_CONST);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n interface Example {\n int MY_CONST = 42;\n void foo();\n }\n\n class Inheritor implements Example {\n @Override\n public void foo() {\n System.out.println(MY_CONST);\n }\n }\n\nConfigure the inspection:\n\n\nUse the **Report classes containing non-abstract methods when using Java 8** option to report only the classes with `static` methods and non-abstract methods that can be converted to\n`default` methods (only applicable to language level of 8 or higher)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PackageInMultipleModules", + "shortDescription": { + "text": "Package with classes in multiple modules" + }, + "fullDescription": { + "text": "Reports non-empty packages that are present in several modules. When packages are contained in several modules, it is very easy to create a class with the same name in two modules. A module which depends on these modules will see a conflict if it tries to use such a class. The Java Platform Module System disallows packages contained in more than one module (also called split packages) Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports non-empty packages that are present in several modules. When packages are contained in several modules, it is very easy to create a class with the same name in two modules. A module which depends on these modules will see a conflict if it tries to use such a class. The Java Platform Module System disallows packages contained in more than one module (also called *split packages* )\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Packaging issues", + "index": 38, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FloatingPointEquality", + "shortDescription": { + "text": "Floating-point equality comparison" + }, + "fullDescription": { + "text": "Reports floating-point values that are being compared using the '==' or '!=' operator. Floating-point values are inherently inaccurate, and comparing them for exact equality is seldom the desired semantics. This inspection ignores comparisons with zero and infinity literals. Example: 'void m(double d1, double d2) {\n if (d1 == d2) {}\n }'", + "markdown": "Reports floating-point values that are being compared using the `==` or `!=` operator.\n\nFloating-point values are inherently inaccurate, and comparing them for exact equality is seldom the desired semantics.\n\nThis inspection ignores comparisons with zero and infinity literals.\n\n**Example:**\n\n\n void m(double d1, double d2) {\n if (d1 == d2) {}\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryCallToStringValueOf", + "shortDescription": { + "text": "Unnecessary conversion to 'String'" + }, + "fullDescription": { + "text": "Reports calls to static methods like 'String.valueOf()' or 'Integer.toString()' when they are used in a string concatenation or as an argument of a library method in which the explicit string conversion is not needed. Example: 'System.out.println(\"Number: \" + Integer.toString(count));' After the quick-fix is applied: 'System.out.println(\"Number: \" + count);' Library methods in which explicit string conversion is considered redundant: Classes 'java.io.PrintWriter', 'java.io.PrintStream' 'print()', 'println()' Classes 'java.lang.StringBuilder', 'java.lang.StringBuffer' 'append()' Class 'org.slf4j.Logger' 'trace()', 'debug()', 'info()', 'warn()', 'error()'", + "markdown": "Reports calls to static methods like `String.valueOf()` or `Integer.toString()` when they are used in a string concatenation or as an argument of a library method in which the explicit string conversion is not needed.\n\nExample:\n\n\n System.out.println(\"Number: \" + Integer.toString(count));\n\nAfter the quick-fix is applied:\n\n\n System.out.println(\"Number: \" + count);\n\nLibrary methods in which explicit string conversion is considered redundant:\n\n* Classes `java.io.PrintWriter`, `java.io.PrintStream`\n * `print()`, `println()`\n* Classes `java.lang.StringBuilder`, `java.lang.StringBuffer`\n * `append()`\n* Class `org.slf4j.Logger`\n * `trace()`, `debug()`, `info()`, `warn()`, `error()`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringReplaceableByStringBuffer", + "shortDescription": { + "text": "Non-constant 'String' can be replaced with 'StringBuilder'" + }, + "fullDescription": { + "text": "Reports variables declared as 'java.lang.String' that are repeatedly appended to. Such variables could be declared more efficiently as 'java.lang.StringBuffer' or 'java.lang.StringBuilder'. Example: 'String s = \"\";\n for (int i = 0; i < names.length; i++) {\n String name = names[i] + (i == names.length - 1 ? \"\" : \" \");\n s = s + name;\n }' Such a loop can be replaced with: 'StringBuilder s = new StringBuilder();\n for (int i = 0; i < names.length; i++) {\n String name = names[i] + (i == names.length - 1 ? \"\" : \" \");\n s.append(name);\n }' Or even with: 'String s = String.join(\" \", names);' Use the option to make this inspection only report when the variable is appended to in a loop.", + "markdown": "Reports variables declared as `java.lang.String` that are repeatedly appended to. Such variables could be declared more efficiently as `java.lang.StringBuffer` or `java.lang.StringBuilder`.\n\n**Example:**\n\n\n String s = \"\";\n for (int i = 0; i < names.length; i++) {\n String name = names[i] + (i == names.length - 1 ? \"\" : \" \");\n s = s + name;\n }\n\nSuch a loop can be replaced with:\n\n\n StringBuilder s = new StringBuilder();\n for (int i = 0; i < names.length; i++) {\n String name = names[i] + (i == names.length - 1 ? \"\" : \" \");\n s.append(name);\n }\n\nOr even with:\n\n\n String s = String.join(\" \", names);\n\n\nUse the option to make this inspection only report when the variable is appended to in a loop." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PublicField", + "shortDescription": { + "text": "'public' field" + }, + "fullDescription": { + "text": "Reports 'public' fields. Constants (fields marked with 'static' and 'final') are not reported. Example: 'class Main {\n public String name;\n }' After the quick-fix is applied: 'class Main {\n private String name;\n\n public String getName() {\n return name;\n }\n\n public void setName(String name) {\n this.name = name;\n }\n }' Configure the inspection: Use the Ignore If Annotated By list to specify annotations to ignore. The inspection will ignore fields with any of these annotations. Use the Ignore 'public final' fields of an enum option to ignore 'public final' fields of the 'enum' type.", + "markdown": "Reports `public` fields. Constants (fields marked with `static` and `final`) are not reported.\n\n**Example:**\n\n\n class Main {\n public String name;\n }\n\nAfter the quick-fix is applied:\n\n\n class Main {\n private String name;\n\n public String getName() {\n return name;\n }\n\n public void setName(String name) {\n this.name = name;\n }\n }\n\nConfigure the inspection:\n\n* Use the **Ignore If Annotated By** list to specify annotations to ignore. The inspection will ignore fields with any of these annotations.\n* Use the **Ignore 'public final' fields of an enum** option to ignore `public final` fields of the `enum` type." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Encapsulation", + "index": 57, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FinallyBlockCannotCompleteNormally", + "shortDescription": { + "text": "'finally' block which can not complete normally" + }, + "fullDescription": { + "text": "Reports 'return', 'throw', 'break', 'continue', and 'yield' statements that are used inside 'finally' blocks. These cause the 'finally' block to not complete normally but to complete abruptly. Any exceptions thrown from the 'try' and 'catch' blocks of the same 'try'-'catch' statement will be suppressed. Example: 'void x() {\n try {\n throw new RuntimeException();\n } finally {\n // if bar() returns true, the RuntimeException will be suppressed\n if (bar()) return;\n }\n }'", + "markdown": "Reports `return`, `throw`, `break`, `continue`, and `yield` statements that are used inside `finally` blocks. These cause the `finally` block to not complete normally but to complete abruptly. Any exceptions thrown from the `try` and `catch` blocks of the same `try`-`catch` statement will be suppressed.\n\n**Example:**\n\n\n void x() {\n try {\n throw new RuntimeException();\n } finally {\n // if bar() returns true, the RuntimeException will be suppressed\n if (bar()) return;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringBufferToStringInConcatenation", + "shortDescription": { + "text": "'StringBuilder.toString()' in concatenation" + }, + "fullDescription": { + "text": "Reports 'StringBuffer.toString()' or 'StringBuilder.toString()' calls in string concatenations. Such calls are unnecessary when concatenating and can be removed, saving a method call and an object allocation, which may improve performance.", + "markdown": "Reports `StringBuffer.toString()` or `StringBuilder.toString()` calls in string concatenations. Such calls are unnecessary when concatenating and can be removed, saving a method call and an object allocation, which may improve performance." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CollectionContainsUrl", + "shortDescription": { + "text": "'Map' or 'Set' may contain 'URL' objects" + }, + "fullDescription": { + "text": "Reports 'java.util.Set' and 'java.util.Map' variables that contain 'java.net.URL' objects. Such collections will call the 'equals()' and 'hashCode()' methods on inserted objects, which can cause performance problems on 'URL' objects. 'URL''s 'equals()' and 'hashCode()' methods can perform a DNS lookup to resolve the host name. This may cause significant delays, depending on the availability and speed of the network and the DNS server. Using 'java.net.URI' instead of 'java.net.URL' will avoid the DNS lookup. Example: 'Set set = new HashSet();'", + "markdown": "Reports `java.util.Set` and `java.util.Map` variables that contain `java.net.URL` objects. Such collections will call the `equals()` and `hashCode()` methods on inserted objects, which can cause performance problems on `URL` objects.\n\n\n`URL`'s `equals()` and `hashCode()` methods can perform a DNS lookup to resolve the host name.\nThis may cause significant delays, depending on the availability and speed of the network and the DNS server.\nUsing `java.net.URI` instead of `java.net.URL` will avoid the DNS lookup.\n\n**Example:**\n\n\n Set set = new HashSet();\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstantOnWrongSideOfComparison", + "shortDescription": { + "text": "Constant on wrong side of comparison" + }, + "fullDescription": { + "text": "Reports comparison operations where the constant value is on the wrong side. Some coding conventions specify that constants should be on a specific side of a comparison, either left or right. Example: 'boolean compare(int x) {\n return 1 > x; // Constant '1' on the left side of the comparison\n }' After the quick-fix is applied: 'boolean compare(int x) {\n return x < 1;\n }' Use the inspection settings to choose the side of constants in comparisons and whether to warn if 'null' literals are on the wrong side. New in 2019.2", + "markdown": "Reports comparison operations where the constant value is on the wrong side.\n\nSome coding conventions specify that constants should be on a specific side of a comparison, either left or right.\n\n**Example:**\n\n\n boolean compare(int x) {\n return 1 > x; // Constant '1' on the left side of the comparison\n }\n\nAfter the quick-fix is applied:\n\n\n boolean compare(int x) {\n return x < 1;\n }\n\n\nUse the inspection settings to choose the side of constants in comparisons\nand whether to warn if `null` literals are on the wrong side.\n\nNew in 2019.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SerialAnnotationUsedOnWrongMember", + "shortDescription": { + "text": "'@Serial' annotation used on wrong member" + }, + "fullDescription": { + "text": "Reports methods and fields in the 'Serializable' and 'Externalizable' classes that are not suitable to be annotated with the 'java.io.Serial' annotation. Examples: 'class Test implements Serializable {\n @Serial // The annotated field is not a part of serialization mechanism because it's not final\n private static long serialVersionUID = 7874493593505141603L;\n\n @Serial // The annotated method is not a part of the serialization mechanism because it's not private\n void writeObject(ObjectOutputStream out) throws IOException {\n }\n}' 'class Test implements Externalizable {\n @Serial // The annotated method is not a part of the serialization mechanism as it's inside Externalizable class\n private void writeObject(ObjectOutputStream out) throws IOException {\n }\n}' For information about all valid cases, refer the documentation for 'java.io.Serial'. This inspection only reports if the language level of the project or module is 14 or higher. New in 2020.3", + "markdown": "Reports methods and fields in the `Serializable` and `Externalizable` classes that are not suitable to be annotated with the `java.io.Serial` annotation.\n\n**Examples:**\n\n\n class Test implements Serializable {\n @Serial // The annotated field is not a part of serialization mechanism because it's not final\n private static long serialVersionUID = 7874493593505141603L;\n\n @Serial // The annotated method is not a part of the serialization mechanism because it's not private\n void writeObject(ObjectOutputStream out) throws IOException {\n }\n }\n\n\n class Test implements Externalizable {\n @Serial // The annotated method is not a part of the serialization mechanism as it's inside Externalizable class\n private void writeObject(ObjectOutputStream out) throws IOException {\n }\n }\n\nFor information about all valid cases, refer the documentation for `java.io.Serial`.\n\nThis inspection only reports if the language level of the project or module is 14 or higher.\n\nNew in 2020.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 18, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessarilyQualifiedStaticallyImportedElement", + "shortDescription": { + "text": "Unnecessarily qualified statically imported element" + }, + "fullDescription": { + "text": "Reports usage of statically imported members qualified with their containing class name. Such qualification is unnecessary and can be removed because statically imported members can be accessed directly by member name. Example: 'import static foo.Test.WIDTH;\n\n class Bar {\n void bar() {\n System.out.println(Test.WIDTH);\n }\n }' After the quick-fix is applied: 'import static foo.Test.WIDTH;\n\n class Bar {\n void bar() {\n System.out.println(WIDTH);\n }\n }'", + "markdown": "Reports usage of statically imported members qualified with their containing class name.\n\nSuch qualification is unnecessary and can be removed\nbecause statically imported members can be accessed directly by member name.\n\n**Example:**\n\n\n import static foo.Test.WIDTH;\n\n class Bar {\n void bar() {\n System.out.println(Test.WIDTH);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n import static foo.Test.WIDTH;\n\n class Bar {\n void bar() {\n System.out.println(WIDTH);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ObjectToString", + "shortDescription": { + "text": "Call to default 'toString()'" + }, + "fullDescription": { + "text": "Reports calls to 'toString()' that use the default implementation from 'java.lang.Object'. The default implementation is rarely intended but may be used by accident. Calls to 'toString()' on objects with 'java.lang.Object', interface or abstract class type are ignored by this inspection. Example: 'class Bar {\n void foo1(Bar bar) {\n String s = bar.toString(); // warning\n /* ... */\n }\n\n void foo2(Object obj) {\n String s = obj.toString(); // no warning here\n /* ... */\n }\n }'", + "markdown": "Reports calls to `toString()` that use the default implementation from `java.lang.Object`.\n\nThe default implementation is rarely intended but may be used by accident.\n\n\nCalls to `toString()` on objects with `java.lang.Object`,\ninterface or abstract class type are ignored by this inspection.\n\n**Example:**\n\n\n class Bar {\n void foo1(Bar bar) {\n String s = bar.toString(); // warning\n /* ... */\n }\n\n void foo2(Object obj) {\n String s = obj.toString(); // no warning here\n /* ... */\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseOfJDBCDriverClass", + "shortDescription": { + "text": "Use of concrete JDBC driver class" + }, + "fullDescription": { + "text": "Reports uses of specific JDBC driver classes. Use of such classes will bind your project to a specific database and driver, defeating the purpose of JDBC and resulting in loss of portability. Example: 'import java.sql.Driver;\n\n abstract class Sample implements Driver {\n public void foo() {\n Sample sample;\n }\n }'", + "markdown": "Reports uses of specific JDBC driver classes. Use of such classes will bind your project to a specific database and driver, defeating the purpose of JDBC and resulting in loss of portability.\n\n**Example:**\n\n\n import java.sql.Driver;\n\n abstract class Sample implements Driver {\n public void foo() {\n Sample sample;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Portability", + "index": 7, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThrowsRuntimeException", + "shortDescription": { + "text": "Unchecked exception declared in 'throws' clause" + }, + "fullDescription": { + "text": "Reports declaration of an unchecked exception ('java.lang.RuntimeException' or one of its subclasses) in the 'throws' clause of a method. Declarations of unchecked exceptions are not required and may be deleted or moved to a Javadoc '@throws' tag. Example: 'public class InvalidDataException extends RuntimeException {}\n\n class TextEditor {\n void readSettings() throws InvalidDataException {} // warning: Unchecked exception 'InvalidDataException' declared in 'throws' clause\n }'", + "markdown": "Reports declaration of an unchecked exception (`java.lang.RuntimeException` or one of its subclasses) in the `throws` clause of a method.\n\nDeclarations of unchecked exceptions are not required and may be deleted or moved to a Javadoc `@throws` tag.\n\n**Example:**\n\n\n public class InvalidDataException extends RuntimeException {}\n\n class TextEditor {\n void readSettings() throws InvalidDataException {} // warning: Unchecked exception 'InvalidDataException' declared in 'throws' clause\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JDBCResource", + "shortDescription": { + "text": "JDBC resource opened but not safely closed" + }, + "fullDescription": { + "text": "Reports JDBC resources that are not safely closed. JDBC resources reported by this inspection include 'java.sql.Connection', 'java.sql.Statement', 'java.sql.PreparedStatement', 'java.sql.CallableStatement', and 'java.sql.ResultSet'. By default, the inspection assumes that the resources can be closed by any method with 'close' or 'cleanup' in its name. Example: 'ResultSet findAllElements(Connection connection) throws SQLException {\n PreparedStatement statement = connection.prepareStatement(\"SELECT * FROM TABLE\");//statement is not closed\n statement.execute();\n return statement.getResultSet();\n }' Use the following options to configure the inspection: Whether a JDBC resource is allowed to be opened inside a 'try' block. This style is less desirable because it is more verbose than opening a resource in front of a 'try' block. Whether the resource can be closed by any method call with the resource passed as argument.", + "markdown": "Reports JDBC resources that are not safely closed. JDBC resources reported by this inspection include `java.sql.Connection`, `java.sql.Statement`, `java.sql.PreparedStatement`, `java.sql.CallableStatement`, and `java.sql.ResultSet`.\n\n\nBy default, the inspection assumes that the resources can be closed by any method with\n'close' or 'cleanup' in its name.\n\n**Example:**\n\n\n ResultSet findAllElements(Connection connection) throws SQLException {\n PreparedStatement statement = connection.prepareStatement(\"SELECT * FROM TABLE\");//statement is not closed\n statement.execute();\n return statement.getResultSet();\n }\n\n\nUse the following options to configure the inspection:\n\n* Whether a JDBC resource is allowed to be opened inside a `try` block. This style is less desirable because it is more verbose than opening a resource in front of a `try` block.\n* Whether the resource can be closed by any method call with the resource passed as argument." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Resource management", + "index": 46, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NewObjectEquality", + "shortDescription": { + "text": "New object is compared using '=='" + }, + "fullDescription": { + "text": "Reports code that applies '==' or '!=' to a newly allocated object instead of calling 'equals()'. The references to newly allocated objects cannot point at existing objects, thus the comparison will always evaluate to 'false'. The inspection may also report newly created objects returned from simple methods. Example: 'void test(Object obj) {\n if (new Object() == obj) {...}\n }' After the quick-fix is applied: 'void test(Object obj) {\n if (new Object().equals(obj)) {...}\n }' New in 2018.3", + "markdown": "Reports code that applies `==` or `!=` to a newly allocated object instead of calling `equals()`.\n\n\nThe references to newly allocated objects cannot point at existing objects,\nthus the comparison will always evaluate to `false`. The inspection may also report newly\ncreated objects returned from simple methods.\n\n**Example:**\n\n\n void test(Object obj) {\n if (new Object() == obj) {...}\n }\n\nAfter the quick-fix is applied:\n\n\n void test(Object obj) {\n if (new Object().equals(obj)) {...}\n }\n\n\nNew in 2018.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JNDIResource", + "shortDescription": { + "text": "JNDI resource opened but not safely closed" + }, + "fullDescription": { + "text": "Reports JNDI resources that are not safely closed. JNDI resources reported by this inspection include 'javax.naming.InitialContext', and 'javax.naming.NamingEnumeration'. By default, the inspection assumes that the resources can be closed by any method with 'close' or 'cleanup' in its name. Example: 'Object findObject(Properties properties, String name) throws NamingException {\n Context context = new InitialContext(properties); //context is not closed\n return context.lookup(name);\n }' Use the following options to configure the inspection: Whether a JNDI Resource is allowed to be opened inside a 'try' block. This style is less desirable because it is more verbose than opening a resource in front of a 'try' block. Whether the resource can be closed by any method call with the resource passed as argument.", + "markdown": "Reports JNDI resources that are not safely closed. JNDI resources reported by this inspection include `javax.naming.InitialContext`, and `javax.naming.NamingEnumeration`.\n\n\nBy default, the inspection assumes that the resources can be closed by any method with\n'close' or 'cleanup' in its name.\n\n**Example:**\n\n\n Object findObject(Properties properties, String name) throws NamingException {\n Context context = new InitialContext(properties); //context is not closed\n return context.lookup(name);\n }\n\n\nUse the following options to configure the inspection:\n\n* Whether a JNDI Resource is allowed to be opened inside a `try` block. This style is less desirable because it is more verbose than opening a resource in front of a `try` block.\n* Whether the resource can be closed by any method call with the resource passed as argument." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Resource management", + "index": 46, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TryWithIdenticalCatches", + "shortDescription": { + "text": "Identical 'catch' branches in 'try' statement" + }, + "fullDescription": { + "text": "Reports identical 'catch' sections in a single 'try' statement. Collapsing such sections into one multi-catch block reduces code duplication and prevents the situations when one 'catch' section is updated, and another one is not. Example: 'try {\n doSmth();\n }\n catch (IOException e) {\n LOG.error(e);\n }\n catch (URISyntaxException e) {\n LOG.error(e);\n }' A quick-fix is available to make the code more compact: 'try {\n doSmth();\n }\n catch (IOException | URISyntaxException e) {\n LOG.error(e);\n }' This inspection only reports if the language level of the project or module is 7 or higher.", + "markdown": "Reports identical `catch` sections in a single `try` statement.\n\nCollapsing such sections into one *multi-catch* block reduces code duplication and prevents\nthe situations when one `catch` section is updated, and another one is not.\n\n**Example:**\n\n\n try {\n doSmth();\n }\n catch (IOException e) {\n LOG.error(e);\n }\n catch (URISyntaxException e) {\n LOG.error(e);\n }\n\nA quick-fix is available to make the code more compact:\n\n\n try {\n doSmth();\n }\n catch (IOException | URISyntaxException e) {\n LOG.error(e);\n }\n\nThis inspection only reports if the language level of the project or module is 7 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 7", + "index": 112, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LambdaCanBeReplacedWithAnonymous", + "shortDescription": { + "text": "Lambda can be replaced with anonymous class" + }, + "fullDescription": { + "text": "Reports lambda expressions that can be replaced with anonymous classes. Expanding lambda expressions to anonymous classes may be useful if you need to implement other methods inside an anonymous class. Example: 's -> System.out.println(s)' After the quick-fix is applied: 'new Consumer() {\n @Override\n public void accept(String s) {\n System.out.println(s);\n }\n}' Lambda expression appeared in Java 8. This inspection can help to downgrade for backward compatibility with earlier Java versions.", + "markdown": "Reports lambda expressions that can be replaced with anonymous classes.\n\n\nExpanding lambda expressions to anonymous classes may be useful if you need to implement other\nmethods inside an anonymous class.\n\nExample:\n\n\n s -> System.out.println(s)\n\nAfter the quick-fix is applied:\n\n new Consumer() {\n @Override\n public void accept(String s) {\n System.out.println(s);\n }\n }\n\n\n*Lambda expression* appeared in Java 8.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantCompareCall", + "shortDescription": { + "text": "Redundant 'compare()' method call" + }, + "fullDescription": { + "text": "Reports comparisons in which the 'compare' method is superfluous. Example: 'boolean result = Integer.compare(a, b) == 0;' After the quick-fix is applied: 'boolean result = a == b;' New in 2018.2", + "markdown": "Reports comparisons in which the `compare` method is superfluous.\n\nExample:\n\n\n boolean result = Integer.compare(a, b) == 0;\n\nAfter the quick-fix is applied:\n\n\n boolean result = a == b;\n\nNew in 2018.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IfCanBeAssertion", + "shortDescription": { + "text": "Statement can be replaced with 'assert' or 'Objects.requireNonNull'" + }, + "fullDescription": { + "text": "Reports 'if' statements that throw only 'java.lang.Throwable' from a 'then' branch and do not have an 'else' branch. Such statements can be converted to more compact 'assert' statements. The inspection also reports Guava's 'Preconditions.checkNotNull()'. They can be replaced with a 'Objects.requireNonNull()' call for which a library may not be needed. Example: 'if (x == 2) throw new RuntimeException(\"fail\");\n if (y == null) throw new AssertionError();\n Preconditions.checkNotNull(z, \"z\");' After the quick-fix is applied: 'assert x != 2 : \"fail\";\n Objects.requireNonNull(y);\n Objects.requireNonNull(z, \"z\");' By default, this inspection provides a quick-fix in the editor without code highlighting.", + "markdown": "Reports `if` statements that throw only `java.lang.Throwable` from a `then` branch and do not have an `else` branch. Such statements can be converted to more compact `assert` statements.\n\n\nThe inspection also reports Guava's `Preconditions.checkNotNull()`.\nThey can be replaced with a `Objects.requireNonNull()` call for which a library may not be needed.\n\nExample:\n\n\n if (x == 2) throw new RuntimeException(\"fail\");\n if (y == null) throw new AssertionError();\n Preconditions.checkNotNull(z, \"z\");\n\nAfter the quick-fix is applied:\n\n\n assert x != 2 : \"fail\";\n Objects.requireNonNull(y);\n Objects.requireNonNull(z, \"z\");\n\nBy default, this inspection provides a quick-fix in the editor without code highlighting." + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TextBlockBackwardMigration", + "shortDescription": { + "text": "Text block can be replaced with regular string literal" + }, + "fullDescription": { + "text": "Reports text blocks that can be replaced with regular string literals. Example: 'Object obj = engine.eval(\"\"\"\n function hello() {\n print('\"Hello, world\"');\n }\n\n hello();\n \"\"\");' After the quick fix is applied: 'Object obj = engine.eval(\"function hello() {\\n\" +\n \" print('\\\"Hello, world\\\"');\\n\" +\n \"}\\n\" +\n \"\\n\" +\n \"hello();\\n\");' Text block appeared in Java 15. This inspection can help to downgrade for backward compatibility with earlier Java versions. New in 2019.3", + "markdown": "Reports text blocks that can be replaced with regular string literals.\n\n**Example:**\n\n\n Object obj = engine.eval(\"\"\"\n function hello() {\n print('\"Hello, world\"');\n }\n\n hello();\n \"\"\");\n\nAfter the quick fix is applied:\n\n\n Object obj = engine.eval(\"function hello() {\\n\" +\n \" print('\\\"Hello, world\\\"');\\n\" +\n \"}\\n\" +\n \"\\n\" +\n \"hello();\\n\");\n\n\n*Text block* appeared in Java 15.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions.\n\nNew in 2019.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 15", + "index": 99, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EmptyClass", + "shortDescription": { + "text": "Redundant empty class" + }, + "fullDescription": { + "text": "Reports empty classes and Java files without any defined classes. A class is empty if it doesn't contain any fields, methods, constructors, or initializers. Empty classes often remain after significant changes or refactorings. Configure the inspection: Use the Ignore if annotated by option to specify special annotations. The inspection will ignore the classes marked with these annotations. Use the Ignore class if it is a parametrization of a super type option to ignore classes that parameterize a superclass. For example: 'class MyList extends ArrayList {}' Use the Ignore subclasses of java.lang.Throwable to ignore classes that extend 'java.lang.Throwable'. Use the Comments count as content option to ignore classes that contain comments.", + "markdown": "Reports empty classes and Java files without any defined classes.\n\nA class is empty if it\ndoesn't contain any fields, methods, constructors, or initializers. Empty classes often remain\nafter significant changes or refactorings.\n\nConfigure the inspection:\n\n* Use the **Ignore if annotated by** option to specify special annotations. The inspection will ignore the classes marked with these annotations.\n*\n Use the **Ignore class if it is a parametrization of a super type** option to ignore classes that parameterize a superclass. For example:\n\n class MyList extends ArrayList {}\n\n* Use the **Ignore subclasses of java.lang.Throwable** to ignore classes that extend `java.lang.Throwable`.\n* Use the **Comments count as content** option to ignore classes that contain comments." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavadocDeclaration", + "shortDescription": { + "text": "Javadoc declaration problems" + }, + "fullDescription": { + "text": "Reports Javadoc comments and tags with the following problems: invalid tag names incomplete tag descriptions duplicated tags missing Javadoc descriptions Example: '/**\n * Invalid tag name\n * @poram param description\n */\n public void sample(int param){\n }' Example: '/**\n * Pointing to itself {@link #sample(int)}\n */\n public void sample(int param){\n }' Quick-fix adds the unknown Javadoc tag to the list of user defined additional tags. Use textfield below to define additional Javadoc tags. Use first checkbox to ignore duplicated 'throws' tag. Use second checkbox to ignore problem with missing or incomplete first sentence in the description. Use third checkbox to ignore references pointing to itself.", + "markdown": "Reports Javadoc comments and tags with the following problems:\n\n* invalid tag names\n* incomplete tag descriptions\n* duplicated tags\n* missing Javadoc descriptions\n\nExample:\n\n\n /**\n * Invalid tag name\n * @poram param description\n */\n public void sample(int param){\n }\n\nExample:\n\n\n /**\n * Pointing to itself {@link #sample(int)}\n */\n public void sample(int param){\n }\n\nQuick-fix adds the unknown Javadoc tag to the list of user defined additional tags.\n\nUse textfield below to define additional Javadoc tags.\n\nUse first checkbox to ignore duplicated 'throws' tag.\n\nUse second checkbox to ignore problem with missing or incomplete first sentence in the description.\n\nUse third checkbox to ignore references pointing to itself." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 45, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConditionalCanBeOptional", + "shortDescription": { + "text": "Conditional can be replaced with Optional" + }, + "fullDescription": { + "text": "Reports null-check conditions and suggests replacing them with 'Optional' chains. Example: 'return str == null ? \"\" : str.trim();' After applying the quick-fix: 'return Optional.ofNullable(str).map(String::trim).orElse(\"\");' While the replacement is not always shorter, it could be helpful for further refactoring (for example, for changing the method return value to 'Optional'). Note that when a not-null branch of the condition returns null, the corresponding mapping step will produce an empty 'Optional' possibly changing the semantics. If it cannot be statically proven that semantics will be preserved, the quick-fix action name will contain the \"(may change semantics)\" notice, and the inspection highlighting will be turned off. This inspection only reports if the language level of the project or module is 8 or higher. New in 2018.1", + "markdown": "Reports null-check conditions and suggests replacing them with `Optional` chains.\n\nExample:\n\n\n return str == null ? \"\" : str.trim();\n\nAfter applying the quick-fix:\n\n\n return Optional.ofNullable(str).map(String::trim).orElse(\"\");\n\nWhile the replacement is not always shorter, it could be helpful for further refactoring\n(for example, for changing the method return value to `Optional`).\n\nNote that when a not-null branch of the condition returns null, the corresponding mapping step will\nproduce an empty `Optional` possibly changing the semantics. If it cannot be statically\nproven that semantics will be preserved, the quick-fix action name will contain the \"(may change semantics)\"\nnotice, and the inspection highlighting will be turned off.\n\nThis inspection only reports if the language level of the project or module is 8 or higher.\n\nNew in 2018.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssignmentToMethodParameter", + "shortDescription": { + "text": "Assignment to method parameter" + }, + "fullDescription": { + "text": "Reports assignment to, or modification of method parameters. Although occasionally intended, this construct may be confusing and is therefore prohibited in some Java projects. The quick-fix adds a declaration of a new variable. Example: 'void printTrimmed(String s) {\n s = s.trim();\n System.out.println(s);\n }' After the quick-fix is applied: 'void printTrimmed(String s) {\n String trimmed = s.trim();\n System.out.println(trimmed);\n }' Use the Ignore if assignment is a transformation of the original parameter option to ignore assignments that modify the parameter value based on its previous value.", + "markdown": "Reports assignment to, or modification of method parameters.\n\nAlthough occasionally intended, this construct may be confusing\nand is therefore prohibited in some Java projects.\n\nThe quick-fix adds a declaration of a new variable.\n\n**Example:**\n\n\n void printTrimmed(String s) {\n s = s.trim();\n System.out.println(s);\n }\n\nAfter the quick-fix is applied:\n\n\n void printTrimmed(String s) {\n String trimmed = s.trim();\n System.out.println(trimmed);\n }\n\n\nUse the **Ignore if assignment is a transformation of the original parameter** option to ignore assignments that modify\nthe parameter value based on its previous value." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Assignment issues", + "index": 36, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LocalVariableHidingMemberVariable", + "shortDescription": { + "text": "Local variable hides field" + }, + "fullDescription": { + "text": "Reports local variables named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the variable where the identically named field is intended. A quick-fix is suggested to rename the variable. Example: 'public class Foo {\n public Object foo;\n\n void bar() {\n Object o = new Object() {\n void baz() {\n Object foo; // Local variable 'foo' hides field in class 'Foo'\n }\n };\n }\n }' You can configure the following options for this inspection: Ignore non-accessible fields - ignore local variables named identically to superclass fields that are not visible (for example, because they are private). Ignore local variables in a static context hiding non-static fields - for example when the local variable is inside a static method or inside a method which is inside a static inner class.", + "markdown": "Reports local variables named identically to a field of a surrounding class. As a result of such naming, you may accidentally use the variable where the identically named field is intended.\n\nA quick-fix is suggested to rename the variable.\n\n**Example:**\n\n\n public class Foo {\n public Object foo;\n\n void bar() {\n Object o = new Object() {\n void baz() {\n Object foo; // Local variable 'foo' hides field in class 'Foo'\n }\n };\n }\n }\n\n\nYou can configure the following options for this inspection:\n\n1. **Ignore non-accessible fields** - ignore local variables named identically to superclass fields that are not visible (for example, because they are private).\n2. **Ignore local variables in a static context hiding non-static fields** - for example when the local variable is inside a static method or inside a method which is inside a static inner class." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 54, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssignmentToLambdaParameter", + "shortDescription": { + "text": "Assignment to lambda parameter" + }, + "fullDescription": { + "text": "Reports assignment to, or modification of lambda parameters. Although occasionally intended, this construct may be confusing and is often caused by a typo or use of a wrong variable. The quick-fix adds a declaration of a new variable. Example: 'list.forEach(s -> {\n s = s.trim();\n System.out.println(\"String: \" + s);\n });' After the quick-fix is applied: 'list.forEach(s -> {\n String trimmed = s.trim();\n System.out.println(\"String: \" + trimmed);\n });' Use the Ignore if assignment is a transformation of the original parameter option to ignore assignments that modify the parameter value based on its previous value.", + "markdown": "Reports assignment to, or modification of lambda parameters. Although occasionally intended, this construct may be confusing and is often caused by a typo or use of a wrong variable.\n\nThe quick-fix adds a declaration of a new variable.\n\n**Example:**\n\n\n list.forEach(s -> {\n s = s.trim();\n System.out.println(\"String: \" + s);\n });\n\nAfter the quick-fix is applied:\n\n\n list.forEach(s -> {\n String trimmed = s.trim();\n System.out.println(\"String: \" + trimmed);\n });\n\nUse the **Ignore if assignment is a transformation of the original parameter** option to ignore assignments that modify the parameter\nvalue based on its previous value." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Assignment issues", + "index": 36, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryTemporaryOnConversionToString", + "shortDescription": { + "text": "Unnecessary temporary object in conversion to 'String'" + }, + "fullDescription": { + "text": "Reports unnecessary creation of temporary objects when converting from a primitive type to 'String'. Example: 'String foo = new Integer(3).toString();' After the quick-fix is applied: 'String foo = Integer.toString(3);'", + "markdown": "Reports unnecessary creation of temporary objects when converting from a primitive type to `String`.\n\n**Example:**\n\n\n String foo = new Integer(3).toString();\n\nAfter the quick-fix is applied:\n\n\n String foo = Integer.toString(3);\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SystemGetenv", + "shortDescription": { + "text": "Call to 'System.getenv()'" + }, + "fullDescription": { + "text": "Reports calls to 'System.getenv()'. Calls to 'System.getenv()' are inherently unportable.", + "markdown": "Reports calls to `System.getenv()`. Calls to `System.getenv()` are inherently unportable." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Portability", + "index": 7, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InterfaceMayBeAnnotatedFunctional", + "shortDescription": { + "text": "Interface may be annotated as '@FunctionalInterface'" + }, + "fullDescription": { + "text": "Reports interfaces that can be annotated with '@FunctionalInterface' (available since JDK 1.8). Annotating an interface with '@FunctionalInterface' indicates that the interface is functional and no more 'abstract' methods can be added to it. Example: 'interface FileProcessor {\n void execute(File file);\n }' After the quick-fix is applied: '@FunctionalInterface\n interface FileProcessor {\n void execute(File file);\n }' This inspection only reports if the language level of the project or module is 8 or higher.", + "markdown": "Reports interfaces that can be annotated with `@FunctionalInterface` (available since JDK 1.8).\n\nAnnotating an interface with `@FunctionalInterface` indicates that the interface\nis functional and no more `abstract` methods can be added to it.\n\n**Example:**\n\n\n interface FileProcessor {\n void execute(File file);\n }\n\nAfter the quick-fix is applied:\n\n\n @FunctionalInterface\n interface FileProcessor {\n void execute(File file);\n }\n\nThis inspection only reports if the language level of the project or module is 8 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BreakStatementWithLabel", + "shortDescription": { + "text": "'break' statement with label" + }, + "fullDescription": { + "text": "Reports 'break' statements with labels. Labeled 'break' statements complicate refactoring and can be confusing. Example: 'void handle(List strs) {\n outer:\n for (String s: strs) {\n for (char ch : s.toCharArray()) {\n if ('s' == ch) break outer;\n handleChar(ch);\n }\n }\n }'", + "markdown": "Reports `break` statements with labels.\n\nLabeled `break` statements complicate refactoring and can be confusing.\n\nExample:\n\n\n void handle(List strs) {\n outer:\n for (String s: strs) {\n for (char ch : s.toCharArray()) {\n if ('s' == ch) break outer;\n handleChar(ch);\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringEquality", + "shortDescription": { + "text": "String comparison using '==', instead of 'equals()'" + }, + "fullDescription": { + "text": "Reports code that uses of == or != to compare strings. These operators determine referential equality instead of comparing content. In most cases, strings should be compared using 'equals()', which does a character-by-character comparison when the strings are different objects. Example: 'void foo(String s, String t) {\n final boolean b = t == s;\n }' If 't' is known to be non-null, then it's safe to apply the \"unsafe\" quick-fix and get the result similar to the following: 'void foo(String s, String t) {\n final boolean b = t.equals(s);\n }'", + "markdown": "Reports code that uses of **==** or **!=** to compare strings.\n\n\nThese operators determine referential equality instead of comparing content.\nIn most cases, strings should be compared using `equals()`,\nwhich does a character-by-character comparison when the strings are different objects.\n\n**Example:**\n\n\n void foo(String s, String t) {\n final boolean b = t == s;\n }\n\nIf `t` is known to be non-null, then it's safe to apply the \"unsafe\" quick-fix and get the result similar to the following:\n\n\n void foo(String s, String t) {\n final boolean b = t.equals(s);\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousLiteralUnderscore", + "shortDescription": { + "text": "Suspicious underscore in number literal" + }, + "fullDescription": { + "text": "Reports decimal number literals that use the underscore numeric separator with groups where the number of digits is not three. Such literals may contain a typo. This inspection will not warn on literals containing two consecutive underscores. It is also allowed to omit underscores in the fractional part of 'double' and 'float' literals. Example: 'int oneMillion = 1_000_0000;'", + "markdown": "Reports decimal number literals that use the underscore numeric separator with groups where the number of digits is not three. Such literals may contain a typo.\n\nThis inspection will not warn on literals containing two consecutive underscores.\nIt is also allowed to omit underscores in the fractional part of `double` and `float` literals.\n\n**Example:** `int oneMillion = 1_000_0000;`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StaticCallOnSubclass", + "shortDescription": { + "text": "Static method referenced via subclass" + }, + "fullDescription": { + "text": "Reports static method calls where the call is qualified by a subclass of the declaring class, rather than by the declaring class itself. Java allows such qualification for classes, but such calls may indicate a subtle confusion of inheritance and overriding. Example: 'class Parent {\n public static void print(String str) {}\n }\n class Child extends Parent {}\n\n Child.print(\"Hello, world!\");' After the quick-fix is applied: 'Parent.print(\"Hello, world!\");'", + "markdown": "Reports static method calls where the call is qualified by a subclass of the declaring class, rather than by the declaring class itself.\n\n\nJava allows such qualification for classes, but such calls\nmay indicate a subtle confusion of inheritance and overriding.\n\n**Example:**\n\n\n class Parent {\n public static void print(String str) {}\n }\n class Child extends Parent {}\n\n Child.print(\"Hello, world!\");\n\nAfter the quick-fix is applied:\n\n\n Parent.print(\"Hello, world!\");\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstantExpression", + "shortDescription": { + "text": "Constant expression can be evaluated" + }, + "fullDescription": { + "text": "Reports compile-time constant expressions and suggests replacing them with their actual values. For example, you will be prompted to replace \"2 + 2\" with \"4\". New in 2018.1", + "markdown": "Reports compile-time constant expressions and suggests replacing them with their actual values. For example, you will be prompted to replace \"2 + 2\" with \"4\".\n\nNew in 2018.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReadResolveAndWriteReplaceProtected", + "shortDescription": { + "text": "'readResolve()' or 'writeReplace()' not declared 'protected'" + }, + "fullDescription": { + "text": "Reports classes that implement 'java.io.Serializable' where the 'readResolve()' or 'writeReplace()' methods are not declared 'protected'. Declaring 'readResolve()' and 'writeReplace()' methods 'private' can force subclasses to silently ignore them, while declaring them 'public' allows them to be invoked by untrusted code. If the containing class is declared 'final', these methods can be declared 'private'. Example: 'class ClassWithSerialization implements Serializable {\n public Object writeReplace() { // warning: 'writeReplace()' not declared protected\n ...\n }\n }'", + "markdown": "Reports classes that implement `java.io.Serializable` where the `readResolve()` or `writeReplace()` methods are not declared `protected`.\n\n\nDeclaring `readResolve()` and `writeReplace()` methods `private`\ncan force subclasses to silently ignore them, while declaring them\n`public` allows them to be invoked by untrusted code.\n\n\nIf the containing class is declared `final`, these methods can be declared `private`.\n\n**Example:**\n\n\n class ClassWithSerialization implements Serializable {\n public Object writeReplace() { // warning: 'writeReplace()' not declared protected\n ...\n }\n }\n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 18, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PackageDotHtmlMayBePackageInfo", + "shortDescription": { + "text": "'package.html' may be converted to 'package-info.java'" + }, + "fullDescription": { + "text": "Reports any 'package.html' files which are used for documenting packages. Since JDK 1.5, it is recommended that you use 'package-info.java' files instead, as such files can also contain package annotations. This way, package-info.java becomes a sole repository for package level annotations and documentation. Example: 'package.html' '\n \n Documentation example.\n \n' After the quick-fix is applied: 'package-info.java' '/**\n * Documentation example.\n */\npackage com.sample;'", + "markdown": "Reports any `package.html` files which are used for documenting packages.\n\nSince JDK 1.5, it is recommended that you use `package-info.java` files instead, as such\nfiles can also contain package annotations. This way, package-info.java becomes a\nsole repository for package level annotations and documentation.\n\nExample: `package.html`\n\n\n \n \n Documentation example.\n \n \n\nAfter the quick-fix is applied: `package-info.java`\n\n\n /**\n * Documentation example.\n */\n package com.sample;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 45, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryLabelOnContinueStatement", + "shortDescription": { + "text": "Unnecessary label on 'continue' statement" + }, + "fullDescription": { + "text": "Reports 'continue' statements with unnecessary labels. Example: 'LABEL:\n while (a > b) {\n System.out.println(\"Hello\");\n //the code below is the last statement in a loop,\n //so unnecessary label and continue can be removed\n continue LABEL;\n }'", + "markdown": "Reports `continue` statements with unnecessary labels.\n\nExample:\n\n\n LABEL:\n while (a > b) {\n System.out.println(\"Hello\");\n //the code below is the last statement in a loop,\n //so unnecessary label and continue can be removed\n continue LABEL;\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LongLiteralsEndingWithLowercaseL", + "shortDescription": { + "text": "'long' literal ending with 'l' instead of 'L'" + }, + "fullDescription": { + "text": "Reports 'long' literals ending with lowercase 'l'. These literals may be confusing, as the lowercase 'l' looks very similar to a literal '1' (one). Example: 'long nights = 100l;' After the quick-fix is applied: 'long nights = 100L;'", + "markdown": "Reports `long` literals ending with lowercase 'l'. These literals may be confusing, as the lowercase 'l' looks very similar to a literal '1' (one).\n\n**Example:**\n\n\n long nights = 100l;\n\nAfter the quick-fix is applied:\n\n\n long nights = 100L;\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantArrayCreation", + "shortDescription": { + "text": "Redundant array creation" + }, + "fullDescription": { + "text": "Reports arrays that are created specifically to be passed as a varargs parameter. Example: 'Arrays.asList(new String[]{\"Hello\", \"world\"})' The quick-fix replaces the array initializer with individual arguments: 'Arrays.asList(\"Hello\", \"world\")'", + "markdown": "Reports arrays that are created specifically to be passed as a varargs parameter.\n\nExample:\n\n`Arrays.asList(new String[]{\"Hello\", \"world\"})`\n\nThe quick-fix replaces the array initializer with individual arguments:\n\n`Arrays.asList(\"Hello\", \"world\")`" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ParameterNamingConvention", + "shortDescription": { + "text": "Method parameter naming convention" + }, + "fullDescription": { + "text": "Reports method parameters whose names are too short, too long, or do not follow the specified regular expression pattern. Example: 'void fooBar(int X)' should be reported if the inspection is enabled with the default settings in which a parameter name should start with a lowercase letter. Configure the inspection: Use the fields in the Options section to specify the minimum length, maximum length, and a regular expression expected for method parameter names. Specify 0 in order not to check the length of names. Regular expressions should be specified in the standard 'java.util.regex' format.", + "markdown": "Reports method parameters whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n**Example:** `void fooBar(int X)`\nshould be reported if the inspection is enabled with the default settings in which a parameter name should start with a lowercase letter.\n\nConfigure the inspection:\n\n\nUse the fields in the **Options** section to specify the minimum length, maximum length, and a regular expression expected for\nmethod parameter names. Specify **0** in order not to check the length of names.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions", + "index": 50, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodCanBeVariableArityMethod", + "shortDescription": { + "text": "Method can have varargs parameter" + }, + "fullDescription": { + "text": "Reports methods that can be converted to variable arity methods. Example: 'void process(String name, Object[] objects);' After the quick-fix is applied: 'void process(String name, Object... objects);' This inspection only reports if the language level of the project or module is 5 or higher.", + "markdown": "Reports methods that can be converted to variable arity methods.\n\n**Example:**\n\n\n void process(String name, Object[] objects);\n\nAfter the quick-fix is applied:\n\n\n void process(String name, Object... objects);\n\n\nThis inspection only reports if the language level of the project or module is 5 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 5", + "index": 51, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonShortCircuitBoolean", + "shortDescription": { + "text": "Non-short-circuit boolean expression" + }, + "fullDescription": { + "text": "Reports usages of the non-short-circuit forms of boolean 'and' and 'or' ('&', '|', '&=' and '|='). Although the non-short-circuit versions are occasionally useful, in most cases the short-circuit forms ('&&' and '||') are intended and such unintentional usages may lead to subtle bugs. A quick-fix is suggested to use the short-circuit versions. Example: 'void foo(boolean x, boolean y, boolean z) {\n if (x | y) { x |= z; }\n }' After the quick-fix is applied: 'void foo(boolean x, boolean y) {\n if (x || y) { x = x || z; }\n }'", + "markdown": "Reports usages of the non-short-circuit forms of boolean 'and' and 'or' (`&`, `|`, `&=` and `|=`). Although the non-short-circuit versions are occasionally useful, in most cases the short-circuit forms (`&&` and `||`) are intended and such unintentional usages may lead to subtle bugs.\n\n\nA quick-fix is suggested to use the short-circuit versions.\n\n**Example:**\n\n\n void foo(boolean x, boolean y, boolean z) {\n if (x | y) { x |= z; }\n }\n\nAfter the quick-fix is applied:\n\n\n void foo(boolean x, boolean y) {\n if (x || y) { x = x || z; }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AbstractClassNeverImplemented", + "shortDescription": { + "text": "Abstract class which has no concrete subclass" + }, + "fullDescription": { + "text": "Reports 'abstract' classes that have no concrete subclasses.", + "markdown": "Reports `abstract` classes that have no concrete subclasses." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 25, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThrowablePrintedToSystemOut", + "shortDescription": { + "text": "'Throwable' printed to 'System.out'" + }, + "fullDescription": { + "text": "Reports calls to 'System.out.println()' with an exception as an argument. Using print statements for logging exceptions hides the stack trace from you, which can complicate the investigation of the problem. It is recommended that you use logger instead. Calls to 'System.out.print()', 'System.err.println()', and 'System.err.print()' with an exception argument are also reported. It is better to use a logger to log exceptions instead. For example, instead of: 'try {\n foo();\n } catch (Exception e) {\n System.out.println(e);\n }' use the following code: 'try {\n foo();\n } catch (Exception e) {\n logger.warn(e); // logger call may be different\n }'", + "markdown": "Reports calls to `System.out.println()` with an exception as an argument.\n\nUsing print statements for logging exceptions hides the stack trace from you, which can complicate the investigation of the problem.\nIt is recommended that you use logger instead.\n\nCalls to `System.out.print()`, `System.err.println()`, and `System.err.print()` with an exception argument are also\nreported. It is better to use a logger to log exceptions instead.\n\nFor example, instead of:\n\n\n try {\n foo();\n } catch (Exception e) {\n System.out.println(e);\n }\n\nuse the following code:\n\n\n try {\n foo();\n } catch (Exception e) {\n logger.warn(e); // logger call may be different\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code maturity", + "index": 49, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StreamToLoop", + "shortDescription": { + "text": "Stream API call chain can be replaced with loop" + }, + "fullDescription": { + "text": "Reports Stream API chains, 'Iterable.forEach()', and 'Map.forEach()' calls that can be automatically converted into classical loops. Example: 'String joinNonEmpty(List list) {\n return list.stream() // Stream can be converted to loop\n .filter(s -> !s.isEmpty())\n .map(String::trim)\n .collect(Collectors.joining(\", \"));\n }' After the quick-fix is applied: 'String joinNonEmpty(List list) {\n StringJoiner joiner = new StringJoiner(\", \");\n for (String s : list) {\n if (!s.isEmpty()) {\n String trim = s.trim();\n joiner.add(trim);\n }\n }\n return joiner.toString();\n }' Note that sometimes this inspection might cause slight semantic changes. Special care should be taken when it comes to short-circuiting, as it's not specified how many elements will be actually read when the stream short-circuits. Stream API appeared in Java 8. This inspection can help to downgrade for backward compatibility with earlier Java versions. Configure the inspection: Use the Iterate unknown Stream sources via Stream.iterator() option to suggest conversions for streams with unrecognized source. In this case, iterator will be created from the stream. For example, when checkbox is selected, the conversion will be suggested here: 'List handles = ProcessHandle.allProcesses().collect(Collectors.toList());' In this case, the result will be as follows: 'List handles = new ArrayList<>();\n for (Iterator it = ProcessHandle.allProcesses().iterator(); it.hasNext(); ) {\n ProcessHandle allProcess = it.next();\n handles.add(allProcess);\n }' New in 2017.1", + "markdown": "Reports Stream API chains, `Iterable.forEach()`, and `Map.forEach()` calls that can be automatically converted into classical loops.\n\n**Example:**\n\n\n String joinNonEmpty(List list) {\n return list.stream() // Stream can be converted to loop\n .filter(s -> !s.isEmpty())\n .map(String::trim)\n .collect(Collectors.joining(\", \"));\n }\n\nAfter the quick-fix is applied:\n\n\n String joinNonEmpty(List list) {\n StringJoiner joiner = new StringJoiner(\", \");\n for (String s : list) {\n if (!s.isEmpty()) {\n String trim = s.trim();\n joiner.add(trim);\n }\n }\n return joiner.toString();\n }\n\n\nNote that sometimes this inspection might cause slight semantic changes.\nSpecial care should be taken when it comes to short-circuiting, as it's not specified how many elements will be actually read when\nthe stream short-circuits.\n\n\n*Stream API* appeared in Java 8.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions.\n\nConfigure the inspection:\n\nUse the **Iterate unknown Stream sources via Stream.iterator()** option to suggest conversions for streams with unrecognized source.\nIn this case, iterator will be created from the stream.\nFor example, when checkbox is selected, the conversion will be suggested here:\n\n\n List handles = ProcessHandle.allProcesses().collect(Collectors.toList());\n\nIn this case, the result will be as follows:\n\n\n List handles = new ArrayList<>();\n for (Iterator it = ProcessHandle.allProcesses().iterator(); it.hasNext(); ) {\n ProcessHandle allProcess = it.next();\n handles.add(allProcess);\n }\n\nNew in 2017.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NotifyWithoutCorrespondingWait", + "shortDescription": { + "text": "'notify()' without corresponding 'wait()'" + }, + "fullDescription": { + "text": "Reports calls to 'Object.notify()' or 'Object.notifyAll()' for which no call to a corresponding 'Object.wait()' can be found. Only calls that target fields of the current class are reported by this inspection. Example: 'synchronized (synList) {\n synList.notify(); //synList.wait() is never called\n }'", + "markdown": "Reports calls to `Object.notify()` or `Object.notifyAll()` for which no call to a corresponding `Object.wait()` can be found.\n\nOnly calls that target fields of the current class are reported by this inspection.\n\n**Example:**\n\n\n synchronized (synList) {\n synList.notify(); //synList.wait() is never called\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantRecordConstructor", + "shortDescription": { + "text": "Redundant record constructor" + }, + "fullDescription": { + "text": "Reports redundant constructors declared inside Java records. Example 1: 'record Point(int x, int y) {\n public Point {} // could be removed\n }\n \n record Point(int x, int y) {\n public Point(int x, int y) { // could be removed\n this.x = x;\n this.y = y;\n }\n }' The quick-fix removes the redundant constructors. Example 2: '// could be converted to compact constructor\n record Range(int from, int to) {\n public Range(int from, int to) {\n if (from > to) throw new IllegalArgumentException();\n this.from = from;\n this.to = to;\n }\n }' The quick-fix converts this code into a compact constructor. This inspection only reports if the language level of the project or module is 16 or higher. New in 2020.1", + "markdown": "Reports redundant constructors declared inside Java records.\n\n**Example 1:**\n\n\n record Point(int x, int y) {\n public Point {} // could be removed\n }\n \n record Point(int x, int y) {\n public Point(int x, int y) { // could be removed\n this.x = x;\n this.y = y;\n }\n }\n\nThe quick-fix removes the redundant constructors.\n\n**Example 2:**\n\n\n // could be converted to compact constructor\n record Range(int from, int to) {\n public Range(int from, int to) {\n if (from > to) throw new IllegalArgumentException();\n this.from = from;\n this.to = to;\n }\n }\n\nThe quick-fix converts this code into a compact constructor.\n\nThis inspection only reports if the language level of the project or module is 16 or higher.\n\nNew in 2020.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 15, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AmbiguousMethodCall", + "shortDescription": { + "text": "Call to inherited method looks like call to local method" + }, + "fullDescription": { + "text": "Reports calls to a superclass method from an anonymous, inner or local class, if a method with the same signature exists in the code surrounding the class. In this case it may seem that a method from the surrounding code is called, when in fact it is a call to a method from the superclass. To clarify the intent of the code, it is recommended to add an explicit 'super' qualifier to the method call. Example: 'class Parent {\n void ambiguous(){}\n }\n\n class Example {\n void ambiguous(){}\n\n class Inner extends Parent {\n void example(){\n ambiguous(); //warning\n }\n }\n }' After the quick-fix is applied: 'class Parent {\n void ambiguous(){}\n }\n\n class Example {\n void ambiguous(){}\n\n class Inner extends Parent {\n void example(){\n super.ambiguous();\n }\n }\n }'", + "markdown": "Reports calls to a superclass method from an anonymous, inner or local class, if a method with the same signature exists in the code surrounding the class. In this case it may seem that a method from the surrounding code is called, when in fact it is a call to a method from the superclass.\n\n\nTo clarify the intent of the code, it is recommended to add an explicit\n`super` qualifier to the method call.\n\n**Example:**\n\n\n class Parent {\n void ambiguous(){}\n }\n\n class Example {\n void ambiguous(){}\n\n class Inner extends Parent {\n void example(){\n ambiguous(); //warning\n }\n }\n }\n \nAfter the quick-fix is applied:\n\n\n class Parent {\n void ambiguous(){}\n }\n\n class Example {\n void ambiguous(){}\n\n class Inner extends Parent {\n void example(){\n super.ambiguous();\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 54, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassInitializerMayBeStatic", + "shortDescription": { + "text": "Class initializer may be 'static'" + }, + "fullDescription": { + "text": "Reports instance initializers which may be made 'static'. An instance initializer may be static if it does not reference any of its class' non-static members. Static initializers are executed once the class is resolved, while instance initializers are executed on each instantiation of the class. This inspection doesn't report instance empty initializers and initializers in anonymous classes. Example: 'class A {\n public static String CONSTANT;\n {\n CONSTANT = \"Hello\";\n }\n }' After the quick-fix is applied: 'class A {\n public static String CONSTANT;\n static {\n CONSTANT = \"Hello\"; //now initialized only once per class\n }\n }'", + "markdown": "Reports instance initializers which may be made `static`.\n\n\nAn instance initializer may be static if it does not reference any of its class' non-static members.\nStatic initializers are executed once the class is resolved,\nwhile instance initializers are executed on each instantiation of the class.\n\nThis inspection doesn't report instance empty initializers and initializers in anonymous classes.\n\n**Example:**\n\n\n class A {\n public static String CONSTANT;\n {\n CONSTANT = \"Hello\";\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class A {\n public static String CONSTANT;\n static {\n CONSTANT = \"Hello\"; //now initialized only once per class\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MagicCharacter", + "shortDescription": { + "text": "Magic character" + }, + "fullDescription": { + "text": "Reports character literals that are used without constant declaration. These characters might result in bad code readability. Also, there might be errors if a character is changed only in one location but not everywhere in code. Example: 'char c = 'c';'", + "markdown": "Reports character literals that are used without constant declaration. These characters might result in bad code readability. Also, there might be errors if a character is changed only in one location but not everywhere in code.\n\n**Example:**\n\n char c = 'c';\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 9, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SlowAbstractSetRemoveAll", + "shortDescription": { + "text": "Call to 'set.removeAll(list)' may work slowly" + }, + "fullDescription": { + "text": "Reports calls to 'java.util.Set.removeAll()' with a 'java.util.List' argument. Such a call can be slow when the size of the argument is greater than or equal to the size of the set, and the set is a subclass of 'java.util.AbstractSet'. In this case, 'List.contains()' is called for each element in the set, which will perform a linear search. Example: 'public void check(String... ss) {\n // possible O(n^2) complexity\n mySet.removeAll(List.of(ss));\n }' After the quick fix is applied: 'public void check(String... ss) {\n // O(n) complexity\n List.of(ss).forEach(mySet::remove);\n }' New in 2020.3", + "markdown": "Reports calls to `java.util.Set.removeAll()` with a `java.util.List` argument.\n\n\nSuch a call can be slow when the size of the argument is greater than or equal to the size of the set,\nand the set is a subclass of `java.util.AbstractSet`.\nIn this case, `List.contains()` is called for each element in the set, which will perform a linear search.\n\n**Example:**\n\n\n public void check(String... ss) {\n // possible O(n^2) complexity\n mySet.removeAll(List.of(ss));\n }\n\nAfter the quick fix is applied:\n\n\n public void check(String... ss) {\n // O(n) complexity\n List.of(ss).forEach(mySet::remove);\n }\n\nNew in 2020.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ArrayEquality", + "shortDescription": { + "text": "Array comparison using '==', instead of 'Arrays.equals()'" + }, + "fullDescription": { + "text": "Reports operators '==' and '!=' used to test for array equality. In most cases, testing for the equality of array contents is intended, which can be done with the 'java.util.Arrays.equals()' method. A quick-fix is suggested to replace '==' with 'java.util.Arrays.equals()'. Example: 'void foo(Object[] x, Object[] y) {\n boolean comparison = x == y;\n }' After the quick-fix is applied: 'void foo(Object[] x, Object[] y) {\n boolean comparison = Arrays.equals(x, y);\n }'", + "markdown": "Reports operators `==` and `!=` used to test for array equality. In most cases, testing for the equality of array contents is intended, which can be done with the `java.util.Arrays.equals()` method.\n\n\nA quick-fix is suggested to replace `==` with `java.util.Arrays.equals()`.\n\n**Example:**\n\n\n void foo(Object[] x, Object[] y) {\n boolean comparison = x == y;\n }\n\nAfter the quick-fix is applied:\n\n\n void foo(Object[] x, Object[] y) {\n boolean comparison = Arrays.equals(x, y);\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StaticInheritance", + "shortDescription": { + "text": "Static inheritance" + }, + "fullDescription": { + "text": "Reports interfaces that are implemented only to provide access to constants. This kind of inheritance is often confusing and may hide important dependency information.", + "markdown": "Reports interfaces that are implemented only to provide access to constants. This kind of inheritance is often confusing and may hide important dependency information." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Inheritance issues", + "index": 25, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StaticCollection", + "shortDescription": { + "text": "Static collection" + }, + "fullDescription": { + "text": "Reports static fields of a 'Collection' type. While it's not necessarily a problem, static collections often cause memory leaks and are therefore prohibited by some coding standards. Example: 'public class Example {\n static List list = new ArrayList<>();\n\n }' Configure the inspection: Use the Ignore weak static collections or maps option to ignore the fields of the 'java.util.WeakHashMap' type.", + "markdown": "Reports static fields of a `Collection` type. While it's not necessarily a problem, static collections often cause memory leaks and are therefore prohibited by some coding standards.\n\n**Example:**\n\n\n public class Example {\n static List list = new ArrayList<>();\n\n }\n\n\nConfigure the inspection:\n\n* Use the **Ignore weak static collections or maps** option to ignore the fields of the `java.util.WeakHashMap` type." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Memory", + "index": 69, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantUnmodifiable", + "shortDescription": { + "text": "Redundant usage of unmodifiable collection wrappers" + }, + "fullDescription": { + "text": "Reports redundant calls to unmodifiable collection wrappers from the 'Collections' class. If the argument that is passed to an unmodifiable collection wrapper is already immutable, such a wrapping becomes redundant. Example: 'List x = Collections.unmodifiableList(Collections.singletonList(\"abc\"));' After the quick-fix is applied: 'List x = Collections.singletonList(\"abc\");' In order to detect the methods that return unmodifiable collections, the inspection uses the 'org.jetbrains.annotations.Unmodifiable' and 'org.jetbrains.annotations.UnmodifiableView' annotations. Use them to extend the inspection to your own unmodifiable collection wrappers. New in 2020.3", + "markdown": "Reports redundant calls to unmodifiable collection wrappers from the `Collections` class.\n\nIf the argument that is passed to an unmodifiable\ncollection wrapper is already immutable, such a wrapping becomes redundant.\n\nExample:\n\n\n List x = Collections.unmodifiableList(Collections.singletonList(\"abc\"));\n\nAfter the quick-fix is applied:\n\n\n List x = Collections.singletonList(\"abc\");\n\nIn order to detect the methods that return unmodifiable collections, the\ninspection uses the `org.jetbrains.annotations.Unmodifiable`\nand `org.jetbrains.annotations.UnmodifiableView` annotations.\nUse them to extend the inspection to your own unmodifiable collection\nwrappers.\n\nNew in 2020.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonExceptionNameEndsWithException", + "shortDescription": { + "text": "Non-exception class name ends with 'Exception'" + }, + "fullDescription": { + "text": "Reports non-'exception' classes whose names end with 'Exception'. Such classes may cause confusion by breaking a common naming convention and often indicate that the 'extends Exception' clause is missing. Example: 'public class NotStartedException {}' A quick-fix that renames such classes is available only in the editor.", + "markdown": "Reports non-`exception` classes whose names end with `Exception`.\n\nSuch classes may cause confusion by breaking a common naming convention and\noften indicate that the `extends Exception` clause is missing.\n\n**Example:**\n\n public class NotStartedException {}\n\nA quick-fix that renames such classes is available only in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Class", + "index": 67, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstantValue", + "shortDescription": { + "text": "Constant values" + }, + "fullDescription": { + "text": "Reports expressions and conditions that always produce the same result, like true, false, null, or zero. Such expressions could be replaced with the corresponding constant value. Very often though they signal about a bug in the code. Examples: '// always true\n // root cause: || is used instead of &&\n if (x > 0 || x < 10) {}\n\n System.out.println(str.trim());\n // always false\n // root cause: variable was dereferenced before null-check\n if (str == null) {}' The inspection behavior may be controlled by a number of annotations, such as nullability annotations, '@Contract' annotation, '@Range' annotation and so on. Configure the inspection: Use the Don't report assertions with condition statically proven to be always true option to avoid reporting assertions that were statically proven to be always true. This also includes conditions like 'if (alwaysFalseCondition) throw new IllegalArgumentException();'. Use the Ignore assert statements option to control how the inspection treats 'assert' statements. By default, the option is disabled, which means that the assertions are assumed to be executed (-ea mode). If the option is enabled, the assertions will be completely ignored (-da mode). Use the Warn when constant is stored in variable option to display warnings when variable is used, whose value is known to be a constant. Before IntelliJ IDEA 2022.3, this inspection was part of \"Constant Conditions & Exceptions\" inspection. Now, it split into two inspections: \"Constant Values\" and \"Nullability and data flow problems\".", + "markdown": "Reports expressions and conditions that always produce the same result, like true, false, null, or zero. Such expressions could be replaced with the corresponding constant value. Very often though they signal about a bug in the code.\n\nExamples:\n\n // always true\n // root cause: || is used instead of &&\n if (x > 0 || x < 10) {}\n\n System.out.println(str.trim());\n // always false\n // root cause: variable was dereferenced before null-check\n if (str == null) {}\n\n\nThe inspection behavior may be controlled by a number of annotations, such as\n[nullability](https://www.jetbrains.com/help/idea/nullable-and-notnull-annotations.html) annotations,\n[@Contract](https://www.jetbrains.com/help/idea/contract-annotations.html) annotation,\n`@Range` annotation and so on.\n\nConfigure the inspection:\n\n* Use the **Don't report assertions with condition statically proven to be always true** option to avoid reporting assertions that were statically proven to be always true. This also includes conditions like `if (alwaysFalseCondition) throw new IllegalArgumentException();`.\n* Use the **Ignore assert statements** option to control how the inspection treats `assert` statements. By default, the option is disabled, which means that the assertions are assumed to be executed (-ea mode). If the option is enabled, the assertions will be completely ignored (-da mode).\n* Use the **Warn when constant is stored in variable** option to display warnings when variable is used, whose value is known to be a constant.\n\n\nBefore IntelliJ IDEA 2022.3, this inspection was part of \"Constant Conditions \\& Exceptions\" inspection. Now, it split into two inspections:\n\"Constant Values\" and \"Nullability and data flow problems\"." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CastCanBeReplacedWithVariable", + "shortDescription": { + "text": "Cast can be replaced with variable" + }, + "fullDescription": { + "text": "Reports type cast operations that can be replaced with existing local or pattern variables with the same value. Example: 'void foo(Object obj) {\n String s = (String) obj;\n System.out.println(((String) obj).trim());\n }' After the quick-fix is applied: 'void foo(Object obj) {\n String s = (String) obj;\n System.out.println(s.trim());\n }' New in 2022.3", + "markdown": "Reports type cast operations that can be replaced with existing local or pattern variables with the same value.\n\nExample:\n\n\n void foo(Object obj) {\n String s = (String) obj;\n System.out.println(((String) obj).trim());\n }\n\nAfter the quick-fix is applied:\n\n\n void foo(Object obj) {\n String s = (String) obj;\n System.out.println(s.trim());\n }\n\nNew in 2022.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Convert2Diamond", + "shortDescription": { + "text": "Explicit type can be replaced with '<>'" + }, + "fullDescription": { + "text": "Reports 'new' expressions with type arguments that can be replaced a with diamond type '<>'. Example: 'List list = new ArrayList(); // reports array list type argument' After the quick-fix is applied: 'List list = new ArrayList<>();' This inspection only reports if the language level of the project or module is 7 or higher.", + "markdown": "Reports `new` expressions with type arguments that can be replaced a with diamond type `<>`.\n\nExample:\n\n\n List list = new ArrayList(); // reports array list type argument\n\nAfter the quick-fix is applied:\n\n\n List list = new ArrayList<>();\n\nThis inspection only reports if the language level of the project or module is 7 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 7", + "index": 112, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "VarargParameter", + "shortDescription": { + "text": "Varargs method" + }, + "fullDescription": { + "text": "Reports methods that accept an arbitrary number of parameters (also known as varargs methods). Example: 'enum EnumConstants {\n A(null), B, C;\n\n EnumConstants(String... ss) {}\n}' A quick-fix is available to replace a variable argument parameter with an equivalent array parameter. Relevant arguments in method calls are wrapped in an array initializer expression. After the quick-fix is applied: 'enum EnumConstants {\n A(null), B(new String[]{}), C(new String[]{});\n\n EnumConstants(String[] ss) {}\n}' Varargs method appeared in Java 5. This inspection can help to downgrade for backward compatibility with earlier Java versions.", + "markdown": "Reports methods that accept an arbitrary number of parameters (also known as varargs methods).\n\n**Example:**\n\n\n enum EnumConstants {\n A(null), B, C;\n\n EnumConstants(String... ss) {}\n }\n\nA quick-fix is available to replace a variable argument\nparameter with an equivalent array parameter. Relevant arguments in method calls are wrapped in an array initializer expression.\nAfter the quick-fix is applied:\n\n\n enum EnumConstants {\n A(null), B(new String[]{}), C(new String[]{});\n\n EnumConstants(String[] ss) {}\n }\n\n\n*Varargs method* appeared in Java 5.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level issues", + "index": 60, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SystemGC", + "shortDescription": { + "text": "Call to 'System.gc()' or 'Runtime.gc()'" + }, + "fullDescription": { + "text": "Reports 'System.gc()' or 'Runtime.gc()' calls. While occasionally useful in testing, explicitly triggering garbage collection via 'System.gc()' is almost never recommended in production code and can result in serious performance issues.", + "markdown": "Reports `System.gc()` or `Runtime.gc()` calls. While occasionally useful in testing, explicitly triggering garbage collection via `System.gc()` is almost never recommended in production code and can result in serious performance issues." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Memory", + "index": 69, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassComplexity", + "shortDescription": { + "text": "Overly complex class" + }, + "fullDescription": { + "text": "Reports classes whose total complexity exceeds the specified maximum. The total complexity of a class is the sum of cyclomatic complexities of all the methods and initializers the class declares. Inherited methods and initializers are not counted toward the total complexity. Too high complexity indicates that the class should be refactored into several smaller classes. Use the Cyclomatic complexity limit field below to specify the maximum allowed complexity for a class.", + "markdown": "Reports classes whose total complexity exceeds the specified maximum.\n\nThe total complexity of a class is the sum of cyclomatic complexities of all the methods\nand initializers the class declares. Inherited methods and initializers are not counted\ntoward the total complexity.\n\nToo high complexity indicates that the class should be refactored into several smaller classes.\n\nUse the **Cyclomatic complexity limit** field below to specify the maximum allowed complexity for a class." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class metrics", + "index": 87, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ArrayLengthInLoopCondition", + "shortDescription": { + "text": "Array.length in loop condition" + }, + "fullDescription": { + "text": "Reports accesses to the '.length' property of an array in the condition part of a loop statement. In highly resource constrained environments, such calls may have adverse performance implications. This inspection is intended for Java ME and other highly resource constrained environments. Applying the results of this inspection without consideration might have negative effects on code clarity and design. Example: 'void foo(Object[] x) {\n for (int i = 0; i < x.length; i++) { /**/ }\n }'", + "markdown": "Reports accesses to the `.length` property of an array in the condition part of a loop statement. In highly resource constrained environments, such calls may have adverse performance implications.\n\n\nThis inspection is intended for Java ME and other highly resource constrained environments.\nApplying the results of this inspection without consideration might have negative effects on code clarity and design.\n\n**Example:**\n\n\n void foo(Object[] x) {\n for (int i = 0; i < x.length; i++) { /**/ }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance/Embedded", + "index": 21, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CheckForOutOfMemoryOnLargeArrayAllocation", + "shortDescription": { + "text": "Large array allocation with no OutOfMemoryError check" + }, + "fullDescription": { + "text": "Reports large array allocations which do not check for 'java.lang.OutOfMemoryError'. In memory constrained environments, allocations of large data objects should probably be checked for memory depletion. This inspection is intended for Java ME and other highly resource constrained environments. Applying the results of this inspection without consideration might have negative effects on code clarity and design. Use the option to specify the maximum number of elements to allow in unchecked array allocations.", + "markdown": "Reports large array allocations which do not check for `java.lang.OutOfMemoryError`. In memory constrained environments, allocations of large data objects should probably be checked for memory depletion.\n\n\nThis inspection is intended for Java ME and other highly resource constrained environments.\nApplying the results of this inspection without consideration might have negative effects on code clarity and design.\n\n\nUse the option to specify the maximum number of elements to allow in unchecked array allocations." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance/Embedded", + "index": 21, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassWithoutConstructor", + "shortDescription": { + "text": "Class without constructor" + }, + "fullDescription": { + "text": "Reports classes without constructors. Some coding standards prohibit such classes.", + "markdown": "Reports classes without constructors.\n\nSome coding standards prohibit such classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/JavaBeans issues", + "index": 35, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverflowingLoopIndex", + "shortDescription": { + "text": "Loop executes zero or billions of times" + }, + "fullDescription": { + "text": "Reports loops that cannot be completed without an index overflow or loops that don't loop at all. It usually happens because of a mistake in the update operation. Example: 'void foo(int s) {\n for (int i = s; i > 12; i++) { // i-- should be here\n System.out.println(i);\n }\n }' New in 2019.1", + "markdown": "Reports loops that cannot be completed without an index overflow or loops that don't loop at all. It usually happens because of a mistake in the update operation.\n\nExample:\n\n\n void foo(int s) {\n for (int i = s; i > 12; i++) { // i-- should be here\n System.out.println(i);\n }\n }\n\nNew in 2019.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java9UndeclaredServiceUsage", + "shortDescription": { + "text": "Usage of service not declared in 'module-info'" + }, + "fullDescription": { + "text": "Reports situations in which a service is loaded with 'java.util.ServiceLoader' but it isn't declared with the 'uses' clause in the 'module-info.java' file and suggests inserting it. New in 2018.1", + "markdown": "Reports situations in which a service is loaded with `java.util.ServiceLoader` but it isn't declared with the `uses` clause in the `module-info.java` file and suggests inserting it.\n\nNew in 2018.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Visibility", + "index": 54, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InnerClassMayBeStatic", + "shortDescription": { + "text": "Inner class may be 'static'" + }, + "fullDescription": { + "text": "Reports inner classes that can be made 'static'. A 'static' inner class does not keep an implicit reference to its enclosing instance. This prevents a common cause of memory leaks and uses less memory per instance of the class. Example: 'public class Outer {\n class Inner { // not static\n public void foo() {\n bar(\"x\");\n }\n\n private void bar(String string) {}\n }\n }' After the quick-fix is applied: 'public class Outer {\n static class Inner {\n public void foo() {\n bar(\"x\");\n }\n\n private void bar(String string) {}\n }\n }'", + "markdown": "Reports inner classes that can be made `static`.\n\nA `static` inner class does not keep an implicit reference to its enclosing instance.\nThis prevents a common cause of memory leaks and uses less memory per instance of the class.\n\n**Example:**\n\n\n public class Outer {\n class Inner { // not static\n public void foo() {\n bar(\"x\");\n }\n\n private void bar(String string) {}\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class Outer {\n static class Inner {\n public void foo() {\n bar(\"x\");\n }\n\n private void bar(String string) {}\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Memory", + "index": 69, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SetReplaceableByEnumSet", + "shortDescription": { + "text": "'Set' can be replaced with 'EnumSet'" + }, + "fullDescription": { + "text": "Reports instantiations of 'java.util.Set' objects whose content types are enumerated classes. Such 'Set' objects can be replaced with 'java.util.EnumSet' objects. 'EnumSet' implementations can be much more efficient compared to other sets, as the underlying data structure is a bit vector. Use the quick-fix to replace the initializer with a call to 'EnumSet.noneOf()'. This quick-fix is not available when the type of the variable is a sub-class of 'Set'. Example: 'enum MyEnum { FOO, BAR; }\n\n Set enums = new HashSet();' After the quick-fix is applied: 'enum MyEnum { FOO, BAR; }\n\n Set enums = EnumSet.noneOf(MyEnum.class);'", + "markdown": "Reports instantiations of `java.util.Set` objects whose content types are enumerated classes. Such `Set` objects can be replaced with `java.util.EnumSet` objects.\n\n\n`EnumSet` implementations can be much more efficient compared to\nother sets, as the underlying data structure is a bit vector. Use the quick-fix to replace the initializer with a call to\n`EnumSet.noneOf()`. This quick-fix is not available when the type of the variable is a sub-class of `Set`.\n\n**Example:**\n\n\n enum MyEnum { FOO, BAR; }\n\n Set enums = new HashSet();\n\nAfter the quick-fix is applied:\n\n\n enum MyEnum { FOO, BAR; }\n\n Set enums = EnumSet.noneOf(MyEnum.class);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PackageInfoWithoutPackage", + "shortDescription": { + "text": "'package-info.java' without 'package' statement" + }, + "fullDescription": { + "text": "Reports 'package-info.java' files without a 'package' statement. The Javadoc tool considers such files documentation for the default package even when the file is located somewhere else.", + "markdown": "Reports `package-info.java` files without a `package` statement.\n\n\nThe Javadoc tool considers such files documentation for the default package even when the file is located somewhere else." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 45, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CallToSimpleSetterInClass", + "shortDescription": { + "text": "Call to simple setter from within class" + }, + "fullDescription": { + "text": "Reports calls to a simple property setter from within the property's class. A simple property setter is defined as one which simply assigns the value of its parameter to a field, and does no other calculations. Such simple setter calls can be safely inlined. Some coding standards also suggest against the use of simple setters for code clarity reasons. Example: 'class Foo {\n private int index;\n public Foo(int idx) {\n setIndex(idx);\n }\n public void setIndex(int idx) {\n index = idx;\n }\n }' After the quick-fix is applied: 'class Foo {\n private int index;\n public Foo(int idx) {\n index = idx;\n }\n public void setIndex(int idx) {\n index = idx;\n }\n }' Use the following options to configure the inspection: Whether to only report setter calls on 'this', not on objects of the same type passed in as a parameter. Whether to ignore non-'private' setters.", + "markdown": "Reports calls to a simple property setter from within the property's class.\n\n\nA simple property setter is defined as one which simply assigns the value of its parameter to a field,\nand does no other calculations. Such simple setter calls can be safely inlined.\nSome coding standards also suggest against the use of simple setters for code clarity reasons.\n\n**Example:**\n\n\n class Foo {\n private int index;\n public Foo(int idx) {\n setIndex(idx);\n }\n public void setIndex(int idx) {\n index = idx;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n private int index;\n public Foo(int idx) {\n index = idx;\n }\n public void setIndex(int idx) {\n index = idx;\n }\n }\n\nUse the following options to configure the inspection:\n\n* Whether to only report setter calls on `this`, not on objects of the same type passed in as a parameter.\n* Whether to ignore non-`private` setters." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonSerializableWithSerializationMethods", + "shortDescription": { + "text": "Non-serializable class with 'readObject()' or 'writeObject()'" + }, + "fullDescription": { + "text": "Reports non-'Serializable' classes that define 'readObject()' or 'writeObject()' methods. Such methods in that context normally indicate an error. Example: 'public class SampleClass {\n private void readObject(ObjectInputStream str) {}\n private void writeObject(ObjectOutputStream str) {}\n }'", + "markdown": "Reports non-`Serializable` classes that define `readObject()` or `writeObject()` methods. Such methods in that context normally indicate an error.\n\n**Example:**\n\n\n public class SampleClass {\n private void readObject(ObjectInputStream str) {}\n private void writeObject(ObjectOutputStream str) {}\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 18, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CloneReturnsClassType", + "shortDescription": { + "text": "'clone()' should have return type equal to the class it contains" + }, + "fullDescription": { + "text": "Reports 'clone()' methods with return types different from the class they're located in. Often a 'clone()' method will have a return type of 'java.lang.Object', which makes it harder to use by its clients. Effective Java (the second and third editions) recommends making the return type of the 'clone()' method the same as the class type of the object it returns. Example: 'class Foo implements Cloneable {\n public Object clone() {\n try {\n return super.clone();\n } catch (CloneNotSupportedException e) {\n throw new AssertionError();\n }\n }\n }' After the quick-fix is applied: 'class Foo implements Cloneable {\n public Foo clone() {\n try {\n return (Foo)super.clone();\n } catch (CloneNotSupportedException e) {\n throw new AssertionError();\n }\n }\n }'", + "markdown": "Reports `clone()` methods with return types different from the class they're located in.\n\nOften a `clone()` method will have a return type of `java.lang.Object`, which makes it harder to use by its clients.\n*Effective Java* (the second and third editions) recommends making the return type of the `clone()` method the same as the\nclass type of the object it returns.\n\n**Example:**\n\n\n class Foo implements Cloneable {\n public Object clone() {\n try {\n return super.clone();\n } catch (CloneNotSupportedException e) {\n throw new AssertionError();\n }\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo implements Cloneable {\n public Foo clone() {\n try {\n return (Foo)super.clone();\n } catch (CloneNotSupportedException e) {\n throw new AssertionError();\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Cloning issues", + "index": 80, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OptionalToIf", + "shortDescription": { + "text": "'Optional' can be replaced with sequence of 'if' statements" + }, + "fullDescription": { + "text": "Reports 'Optional' call chains that can be replaced with a sequence of 'if' statements. Example: 'return Optional.ofNullable(name)\n .map(this::extractInitials)\n .map(initials -> initials.toUpperCase(Locale.ENGLISH))\n .orElseGet(this::getDefault);' After the quick-fix is applied: 'if (name != null) {\n String initials = extractInitials(name);\n if (initials != null) return initials.toUpperCase(Locale.ENGLISH);\n }\n return getDefault();' 'java.util.Optional' appeared in Java 8. This inspection can help to downgrade for backward compatibility with earlier Java versions. New in 2020.2", + "markdown": "Reports `Optional` call chains that can be replaced with a sequence of `if` statements.\n\nExample:\n\n\n return Optional.ofNullable(name)\n .map(this::extractInitials)\n .map(initials -> initials.toUpperCase(Locale.ENGLISH))\n .orElseGet(this::getDefault);\n\nAfter the quick-fix is applied:\n\n\n if (name != null) {\n String initials = extractInitials(name);\n if (initials != null) return initials.toUpperCase(Locale.ENGLISH);\n }\n return getDefault();\n\n\n`java.util.Optional` appeared in Java 8.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions.\n\nNew in 2020.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryFinalOnLocalVariableOrParameter", + "shortDescription": { + "text": "Unnecessary 'final' on local variable or parameter" + }, + "fullDescription": { + "text": "Reports local variables or parameters unnecessarily declared 'final'. Some coding standards frown upon variables declared 'final' for reasons of terseness. Example: 'class Foo {\n Foo(Object o) {}\n\n void bar(final Object o) {\n new Foo(o);\n }\n }' After the quick-fix is applied: 'class Foo {\n Foo(Object o) {}\n\n void bar(Object o) {\n new Foo(o);\n }\n }' Use the inspection options to toggle the reporting for: local variables parameters (including parameters of 'catch' blocks and enhanced 'for' statements) Also, you can configure the inspection to only report 'final' parameters of 'abstract' or interface methods, which may be considered extra unnecessary as such markings don't affect the implementation of these methods.", + "markdown": "Reports local variables or parameters unnecessarily declared `final`.\n\nSome coding standards frown upon variables declared `final` for reasons of terseness.\n\n**Example:**\n\n\n class Foo {\n Foo(Object o) {}\n\n void bar(final Object o) {\n new Foo(o);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n Foo(Object o) {}\n\n void bar(Object o) {\n new Foo(o);\n }\n }\n\n\nUse the inspection options to toggle the reporting for:\n\n* local variables\n* parameters (including parameters of `catch` blocks and enhanced `for` statements)\n\n\nAlso, you can configure the inspection to only report `final` parameters of `abstract` or interface\nmethods, which may be considered extra unnecessary as such markings don't\naffect the implementation of these methods." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IllegalDependencyOnInternalPackage", + "shortDescription": { + "text": "Illegal dependency on internal package" + }, + "fullDescription": { + "text": "Reports references in modules without 'module-info.java' on packages which are not exported from named modules. Such configuration may occur when some modules in the project are already migrated to Java modules but others are still non-modular. By analogy to the JDK, such non-modular code should not get access to the code in named modules which is not explicitly exported.", + "markdown": "Reports references in modules without `module-info.java` on packages which are not exported from named modules.\n\nSuch configuration may occur when some modules in the project are already migrated to Java modules but others are still non-modular.\nBy analogy to the JDK, such non-modular code should not get access to the code in named modules which is not explicitly exported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages", + "index": 4, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonBooleanMethodNameMayNotStartWithQuestion", + "shortDescription": { + "text": "Non-boolean method name must not start with question word" + }, + "fullDescription": { + "text": "Reports non-boolean methods whose names start with a question word. Such method names may be confusing. Non-boolean methods that override library methods are ignored by this inspection. Example: 'public void hasName(String name) {\n assert names.contains(name);\n }' A quick-fix that renames such methods is available only in the editor. Configure the inspection: Use the Boolean method name prefixes list to specify the question words that should be used only for boolean methods. Use the Ignore methods with 'java.lang.Boolean' return type option to ignore methods with 'java.lang.Boolean' return type. Use the Ignore methods overriding/implementing a super method option to ignore methods which have supers.", + "markdown": "Reports non-boolean methods whose names start with a question word. Such method names may be confusing.\n\nNon-boolean methods that override library methods are ignored by this inspection.\n\n**Example:**\n\n\n public void hasName(String name) {\n assert names.contains(name);\n }\n\nA quick-fix that renames such methods is available only in the editor.\n\nConfigure the inspection:\n\n* Use the **Boolean method name prefixes** list to specify the question words that should be used only for boolean methods.\n* Use the **Ignore methods with 'java.lang.Boolean' return type** option to ignore methods with `java.lang.Boolean` return type.\n* Use the **Ignore methods overriding/implementing a super method** option to ignore methods which have supers." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Method", + "index": 88, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WeakerAccess", + "shortDescription": { + "text": "Declaration access can be weaker" + }, + "fullDescription": { + "text": "Reports fields, methods or classes that may have their access modifier narrowed down. Example: 'class Sample {\n void foo() {\n bar(\"foo\", \"foo\");\n }\n void bar(String x, String y) { } // can be private\n }' After the quick-fix is applied: 'class Sample {\n void foo() {\n bar(\"foo\", \"foo\");\n }\n private void bar(String x, String y) { }\n }' Use the inspection's options to define the rules for the modifier change suggestions.", + "markdown": "Reports fields, methods or classes that may have their access modifier narrowed down.\n\nExample:\n\n\n class Sample {\n void foo() {\n bar(\"foo\", \"foo\");\n }\n void bar(String x, String y) { } // can be private\n }\n\nAfter the quick-fix is applied:\n\n\n class Sample {\n void foo() {\n bar(\"foo\", \"foo\");\n }\n private void bar(String x, String y) { }\n }\n\nUse the inspection's options to define the rules for the modifier change suggestions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 15, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceWithJavadoc", + "shortDescription": { + "text": "Comment replaceable with Javadoc" + }, + "fullDescription": { + "text": "Reports a regular comment that belongs to a field, method, or class that can be replaced with a Javadoc comment. Example: 'public class Main {\n /*\n * Hello,\n */\n // World!\n void f() {\n }\n }' After the quick-fix is applied: 'public class Main {\n /**\n * Hello,\n * World!\n */\n void f() {\n }\n }'", + "markdown": "Reports a regular comment that belongs to a field, method, or class that can be replaced with a Javadoc comment.\n\n**Example:**\n\n\n public class Main {\n /*\n * Hello,\n */\n // World!\n void f() {\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class Main {\n /**\n * Hello,\n * World!\n */\n void f() {\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 45, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BigDecimalMethodWithoutRoundingCalled", + "shortDescription": { + "text": "Call to 'BigDecimal' method without a rounding mode argument" + }, + "fullDescription": { + "text": "Reports calls to 'divide()' or 'setScale()' without a rounding mode argument. Such calls can lead to an 'ArithmeticException' when the exact value cannot be represented in the result (for example, because it has a non-terminating decimal expansion). Specifying a rounding mode prevents the 'ArithmeticException'. Example: 'BigDecimal.valueOf(1).divide(BigDecimal.valueOf(3));'", + "markdown": "Reports calls to `divide()` or `setScale()` without a rounding mode argument.\n\nSuch calls can lead to an `ArithmeticException` when the exact value cannot be represented in the result\n(for example, because it has a non-terminating decimal expansion).\n\nSpecifying a rounding mode prevents the `ArithmeticException`.\n\n**Example:**\n\n\n BigDecimal.valueOf(1).divide(BigDecimal.valueOf(3));\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverlyComplexArithmeticExpression", + "shortDescription": { + "text": "Overly complex arithmetic expression" + }, + "fullDescription": { + "text": "Reports arithmetic expressions with the excessive number of terms. Such expressions might be hard to understand and might contain errors. Parameters, field references, and other primary expressions are counted as a term. Example: 'int calc(int a, int b) {\n return a + a + a + b + b + b + b; // The line contains 7 terms and will be reported.\n }' Use the field below to specify a number of terms allowed in arithmetic expressions.", + "markdown": "Reports arithmetic expressions with the excessive number of terms. Such expressions might be hard to understand and might contain errors.\n\nParameters, field references, and other primary expressions are counted as a term.\n\n**Example:**\n\n int calc(int a, int b) {\n return a + a + a + b + b + b + b; // The line contains 7 terms and will be reported.\n }\n\nUse the field below to specify a number of terms allowed in arithmetic expressions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Numeric issues", + "index": 27, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DriverManagerGetConnection", + "shortDescription": { + "text": "Use of 'DriverManager' to get JDBC connection" + }, + "fullDescription": { + "text": "Reports any uses of 'java.sql.DriverManager' to acquire a JDBC connection. 'java.sql.DriverManager' has been superseded by 'javax.sql.Datasource', which allows for connection pooling and other optimizations. Example: 'Connection conn = DriverManager.getConnection(url, username, password);'", + "markdown": "Reports any uses of `java.sql.DriverManager` to acquire a JDBC connection.\n\n\n`java.sql.DriverManager`\nhas been superseded by `javax.sql.Datasource`, which\nallows for connection pooling and other optimizations.\n\n**Example:**\n\n Connection conn = DriverManager.getConnection(url, username, password);\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Resource management", + "index": 46, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WrapperTypeMayBePrimitive", + "shortDescription": { + "text": "Wrapper type may be primitive" + }, + "fullDescription": { + "text": "Reports local variables of wrapper type that are mostly used as primitive types. In some cases, boxing can be source of significant performance penalty, especially in loops. Heuristics are applied to estimate the number of boxing operations. For example, conversions inside loops are considered as much more numerous. Example: 'public void example() {\n Integer value = 12;\n needBox(value);\n for (int i = 0; i < 10; i++) {\n // Loop usages considered as happening more often\n needPrimitive(value);\n }\n }\n\n void needPrimitive(int value) {}\n void needBox(Integer value) {}' After the quick-fix is applied: 'public void example() {\n int value = 12;\n needBox(value);\n for (int i = 0; i < 10; i++) {\n // Loop usages considered as happening more often\n needPrimitive(value);\n }\n }\n\n void needPrimitive(int value) {}\n void needBox(Integer value) {}' New in 2018.2", + "markdown": "Reports local variables of wrapper type that are mostly used as primitive types.\n\nIn some cases, boxing can be source of significant performance penalty, especially in loops.\n\nHeuristics are applied to estimate the number of boxing operations. For example, conversions inside loops are considered\nas much more numerous.\n\n**Example:**\n\n public void example() {\n Integer value = 12;\n needBox(value);\n for (int i = 0; i < 10; i++) {\n // Loop usages considered as happening more often\n needPrimitive(value);\n }\n }\n\n void needPrimitive(int value) {}\n void needBox(Integer value) {}\n\nAfter the quick-fix is applied:\n\n public void example() {\n int value = 12;\n needBox(value);\n for (int i = 0; i < 10; i++) {\n // Loop usages considered as happening more often\n needPrimitive(value);\n }\n }\n\n void needPrimitive(int value) {}\n void needBox(Integer value) {}\n\n\nNew in 2018.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EmptyStatementBody", + "shortDescription": { + "text": "Statement with empty body" + }, + "fullDescription": { + "text": "Reports 'if', 'while', 'do', 'for', and 'switch' statements with empty bodies. While occasionally intended, such code is confusing and is often the result of a typo. This inspection is disabled in JSP files.", + "markdown": "Reports `if`, `while`, `do`, `for`, and `switch` statements with empty bodies.\n\nWhile occasionally intended, such code is confusing and is often the result of a typo.\n\nThis inspection is disabled in JSP files." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EmptyFinallyBlock", + "shortDescription": { + "text": "Empty 'finally' block" + }, + "fullDescription": { + "text": "Reports empty 'finally' blocks. Empty 'finally' blocks usually indicate coding errors. They may also remain after code refactoring and can safely be removed. This inspection doesn't report empty 'finally' blocks found in JSP files. Example: 'try {\n Files.readString(Paths.get(\"in.txt\"));\n } catch (IOException e) {\n throw new RuntimeException(e);\n } finally {\n\n }' After the quick-fix is applied: 'try {\n Files.readString(Paths.get(\"in.txt\"));\n } catch (IOException e) {\n throw new RuntimeException(e);\n }'", + "markdown": "Reports empty `finally` blocks.\n\nEmpty `finally` blocks usually indicate coding errors. They may also remain after code refactoring and can safely be removed.\n\nThis inspection doesn't report empty `finally` blocks found in JSP files.\n\n**Example:**\n\n\n try {\n Files.readString(Paths.get(\"in.txt\"));\n } catch (IOException e) {\n throw new RuntimeException(e);\n } finally {\n\n }\n\nAfter the quick-fix is applied:\n\n\n try {\n Files.readString(Paths.get(\"in.txt\"));\n } catch (IOException e) {\n throw new RuntimeException(e);\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InconsistentLanguageLevel", + "shortDescription": { + "text": "Inconsistent language level settings" + }, + "fullDescription": { + "text": "Reports modules which depend on other modules with a higher language level. Such dependencies should be removed or the language level of the module be increased. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports modules which depend on other modules with a higher language level.\n\nSuch dependencies should be removed or the language level of the module be increased.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Modularization issues", + "index": 65, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EnumerationCanBeIteration", + "shortDescription": { + "text": "Enumeration can be iteration" + }, + "fullDescription": { + "text": "Reports calls to 'Enumeration' methods that are used on collections and may be replaced with equivalent 'Iterator' constructs. Example: 'Enumeration keys = map.keys();\n while (keys.hasMoreElements()) {\n String name = keys.nextElement();\n }' After the quick-fix is applied: 'Iterator iterator = map.keySet().iterator();\n while (iterator.hasNext()) {\n String name = iterator.next();\n }'", + "markdown": "Reports calls to `Enumeration` methods that are used on collections and may be replaced with equivalent `Iterator` constructs.\n\n**Example:**\n\n\n Enumeration keys = map.keys();\n while (keys.hasMoreElements()) {\n String name = keys.nextElement();\n }\n\nAfter the quick-fix is applied:\n\n\n Iterator iterator = map.keySet().iterator();\n while (iterator.hasNext()) {\n String name = iterator.next();\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 33, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThreadDumpStack", + "shortDescription": { + "text": "Call to 'Thread.dumpStack()'" + }, + "fullDescription": { + "text": "Reports usages of 'Thread.dumpStack()'. Such statements are often used for temporary debugging and should be either removed from the production code or replaced with a more robust logging facility.", + "markdown": "Reports usages of `Thread.dumpStack()`.\n\nSuch statements are often used for temporary debugging and should be either removed from the production code\nor replaced with a more robust logging facility." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code maturity", + "index": 49, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryBlockStatement", + "shortDescription": { + "text": "Unnecessary code block" + }, + "fullDescription": { + "text": "Reports code blocks that are redundant to the semantics of the program and can be replaced with their contents. The code blocks that are the bodies of 'if', 'do', 'while', or 'for' statements will not be reported by this inspection. Example: 'void foo() {\n { // unnecessary\n int result = call();\n analyze(result);\n } // unnecessary\n }' Configure the inspection: Use the Ignore branches of 'switch' statements option to ignore the code blocks that are used as branches of switch statements.", + "markdown": "Reports code blocks that are redundant to the semantics of the program and can be replaced with their contents.\n\nThe code blocks that are the bodies of `if`, `do`,\n`while`, or `for` statements will not be reported by this\ninspection.\n\nExample:\n\n\n void foo() {\n { // unnecessary\n int result = call();\n analyze(result);\n } // unnecessary\n }\n\nConfigure the inspection:\n\n\nUse the **Ignore branches of 'switch' statements** option to ignore the code blocks that are used as branches of switch statements." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FinalMethodInFinalClass", + "shortDescription": { + "text": "'final' method in 'final' class" + }, + "fullDescription": { + "text": "Reports 'final' methods in 'final' classes. Since 'final' classes cannot be inherited, marking a method as 'final' may be unnecessary and confusing. Example: 'record Bar(int a, int b) {\n public final int sum() { \n return a + b;\n }\n}'\n After the quick-fix is applied: 'record Bar(int a, int b) {\n public int sum() { \n return a + b;\n }\n}' As shown in the example, a class can be marked as 'final' explicitly or implicitly.", + "markdown": "Reports `final` methods in `final` classes.\n\nSince `final` classes cannot be inherited, marking a method as `final`\nmay be unnecessary and confusing.\n\n**Example:**\n\n record Bar(int a, int b) {\n public final int sum() { \n return a + b;\n }\n }\n\nAfter the quick-fix is applied:\n\n record Bar(int a, int b) {\n public int sum() { \n return a + b;\n }\n }\n\nAs shown in the example, a class can be marked as `final` explicitly or implicitly." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 15, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FinalPrivateMethod", + "shortDescription": { + "text": "'private' method declared 'final'" + }, + "fullDescription": { + "text": "Reports methods that are marked with both 'final' and 'private' keywords. Since 'private' methods cannot be meaningfully overridden because of their visibility, declaring them 'final' is redundant.", + "markdown": "Reports methods that are marked with both `final` and `private` keywords.\n\nSince `private` methods cannot be meaningfully overridden because of their visibility, declaring them\n`final` is redundant." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FinalStaticMethod", + "shortDescription": { + "text": "'static' method declared 'final'" + }, + "fullDescription": { + "text": "Reports static methods that are marked as 'final'. Such code might indicate an error or an incorrect assumption about the effect of the 'final' keyword. Static methods are not subject to runtime polymorphism, so the only purpose of the 'final' keyword used with static methods is to ensure the method will not be hidden in a subclass.", + "markdown": "Reports static methods that are marked as `final`.\n\nSuch code might indicate an error or an incorrect assumption about the effect of the `final` keyword.\nStatic methods are not subject to runtime polymorphism, so the only purpose of the `final` keyword used with static methods\nis to ensure the method will not be hidden in a subclass." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantTypeArguments", + "shortDescription": { + "text": "Redundant type arguments" + }, + "fullDescription": { + "text": "Reports calls to parametrized methods with explicit argument types that can be omitted since they will be unambiguously inferred by the compiler. Using redundant type arguments is unnecessary and makes the code less readable. Example: 'List list = Arrays.asList(\"Hello\", \"World\");' A quick-fix is provided to remove redundant type arguments: 'List list = Arrays.asList(\"Hello\", \"World\");'", + "markdown": "Reports calls to parametrized methods with explicit argument types that can be omitted since they will be unambiguously inferred by the compiler.\n\n\nUsing redundant type arguments is unnecessary and makes the code less readable.\n\nExample:\n\n\n List list = Arrays.asList(\"Hello\", \"World\");\n\nA quick-fix is provided to remove redundant type arguments:\n\n\n List list = Arrays.asList(\"Hello\", \"World\");\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FieldHasSetterButNoGetter", + "shortDescription": { + "text": "Field has setter but no getter" + }, + "fullDescription": { + "text": "Reports fields that have setter methods but no getter methods. In certain bean containers, when used within the Java beans specification, such fields might be difficult to work with.", + "markdown": "Reports fields that have setter methods but no getter methods.\n\n\nIn certain bean containers, when used within the Java beans specification, such fields might be difficult\nto work with." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/JavaBeans issues", + "index": 35, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AssignmentOrReturnOfFieldWithMutableType", + "shortDescription": { + "text": "Assignment or return of field with mutable type" + }, + "fullDescription": { + "text": "Reports return of, or assignment from a method parameter to an array or a mutable type like 'Collection', 'Date', 'Map', 'Calendar', etc. Because such types are mutable, this construct may result in unexpected modifications of an object's state from outside the owning class. Although this construct may be useful for performance reasons, it is inherently prone to bugs. The following mutable types are reported: 'java.util.Date' 'java.util.Calendar' 'java.util.Collection' 'java.util.Map' 'com.google.common.collect.Multimap' 'com.google.common.collect.Table' The quick-fix adds a call to the field's '.clone()' method. Example: 'class Log {\n String[] messages;\n ...\n\n String[] getMessages() {\n return messages; // warning: Return of String[] field 'messages'\n }\n }' After the quick-fix is applied: 'class Log {\n String[] messages;\n ...\n\n String[] getMessages() {\n return messages.clone();\n }\n }' Use the Ignore assignments in and returns from private methods option to ignore assignments and returns in 'private' methods.", + "markdown": "Reports return of, or assignment from a method parameter to an array or a mutable type like `Collection`, `Date`, `Map`, `Calendar`, etc.\n\nBecause such types are mutable, this construct may\nresult in unexpected modifications of an object's state from outside the owning class. Although this construct may be useful for\nperformance reasons, it is inherently prone to bugs.\n\nThe following mutable types are reported:\n\n* `java.util.Date`\n* `java.util.Calendar`\n* `java.util.Collection`\n* `java.util.Map`\n* `com.google.common.collect.Multimap`\n* `com.google.common.collect.Table`\n\nThe quick-fix adds a call to the field's `.clone()` method.\n\n**Example:**\n\n\n class Log {\n String[] messages;\n ...\n\n String[] getMessages() {\n return messages; // warning: Return of String[] field 'messages'\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Log {\n String[] messages;\n ...\n\n String[] getMessages() {\n return messages.clone();\n }\n }\n\nUse the **Ignore assignments in and returns from private methods** option to ignore assignments and returns in `private` methods." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Encapsulation", + "index": 57, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryUnboxing", + "shortDescription": { + "text": "Unnecessary unboxing" + }, + "fullDescription": { + "text": "Reports unboxing, that is explicit unwrapping of wrapped primitive values. Unboxing is unnecessary as of Java 5 and later, and can safely be removed. Examples: 'Integer i = Integer.valueOf(42).intValue();' → 'Integer i = Integer.valueOf(42);' 'int k = Integer.valueOf(42).intValue();' → 'int k = Integer.valueOf(42);' (reports only when the Only report truly superfluously unboxed expressions option is not checked) Use the Only report truly superfluously unboxed expressions option to only report truly superfluous unboxing, where an unboxed value is immediately boxed either implicitly or explicitly. In this case, the entire unboxing-boxing step can be removed. The inspection doesn't report simple explicit unboxing. This inspection only reports if the language level of the project or module is 5 or higher.", + "markdown": "Reports unboxing, that is explicit unwrapping of wrapped primitive values.\n\nUnboxing is unnecessary as of Java 5 and later, and can safely be removed.\n\n**Examples:**\n\n* `Integer i = Integer.valueOf(42).intValue();` → `Integer i = Integer.valueOf(42);`\n* `int k = Integer.valueOf(42).intValue();` → `int k = Integer.valueOf(42);`\n\n (reports only when the **Only report truly superfluously unboxed expressions** option is not checked)\n\n\nUse the **Only report truly superfluously unboxed expressions** option to only report truly superfluous unboxing,\nwhere an unboxed value is immediately boxed either implicitly or explicitly.\nIn this case, the entire unboxing-boxing step can be removed. The inspection doesn't report simple explicit unboxing.\n\nThis inspection only reports if the language level of the project or module is 5 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 5", + "index": 51, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RuntimeExecWithNonConstantString", + "shortDescription": { + "text": "Call to 'Runtime.exec()' with non-constant string" + }, + "fullDescription": { + "text": "Reports calls to 'java.lang.Runtime.exec()' which take a dynamically-constructed string as the command to execute. Constructed execution strings are a common source of security breaches. By default, this inspection ignores compile-time constants. Example: 'String i = getUserInput();\n Runtime runtime = Runtime.getRuntime();\n runtime.exec(\"foo\" + i); // reports warning' Use the inspection settings to consider any 'static' 'final' fields as constant. Be careful, because strings like the following will be ignored when the option is enabled: 'static final String COMMAND = \"ping \" + getDomainFromUserInput() + \"'\";'", + "markdown": "Reports calls to `java.lang.Runtime.exec()` which take a dynamically-constructed string as the command to execute.\n\n\nConstructed execution strings are a common source of security breaches.\nBy default, this inspection ignores compile-time constants.\n\n**Example:**\n\n\n String i = getUserInput();\n Runtime runtime = Runtime.getRuntime();\n runtime.exec(\"foo\" + i); // reports warning\n\n\nUse the inspection settings to consider any `static` `final` fields as constant.\nBe careful, because strings like the following will be ignored when the option is enabled:\n\n\n static final String COMMAND = \"ping \" + getDomainFromUserInput() + \"'\";\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 30, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OptionalAssignedToNull", + "shortDescription": { + "text": "Null value for Optional type" + }, + "fullDescription": { + "text": "Reports 'null' assigned to 'Optional' variable or returned from method returning 'Optional'. It's recommended that you use 'Optional.empty()' (or 'Optional.absent()' for Guava) to denote an empty value. Example: 'Optional foo(boolean flag) {\n return flag ? Optional.of(42) : null;\n }' After the quick-fix is applied: 'Optional foo(boolean flag) {\n return flag ? Optional.of(42) : Optional.empty();\n }' Configure the inspection: Use the Report comparison of Optional with null option to also report comparisons like 'optional == null'. While in rare cases (e.g. lazily initialized optional field) this might be correct, optional variable is usually never null, and probably 'optional.isPresent()' was intended. This inspection only reports if the language level of the project or module is 8 or higher. New in 2017.2", + "markdown": "Reports `null` assigned to `Optional` variable or returned from method returning `Optional`.\n\nIt's recommended that you use `Optional.empty()` (or `Optional.absent()` for Guava) to denote an empty value.\n\nExample:\n\n\n Optional foo(boolean flag) {\n return flag ? Optional.of(42) : null;\n }\n\nAfter the quick-fix is applied:\n\n\n Optional foo(boolean flag) {\n return flag ? Optional.of(42) : Optional.empty();\n }\n\nConfigure the inspection:\n\n\nUse the **Report comparison of Optional with null** option to also report comparisons like `optional == null`. While in rare cases (e.g. lazily initialized\noptional field) this might be correct, optional variable is usually never null, and probably `optional.isPresent()` was\nintended.\n\nThis inspection only reports if the language level of the project or module is 8 or higher.\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code maturity", + "index": 49, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PointlessIndexOfComparison", + "shortDescription": { + "text": "Pointless 'indexOf()' comparison" + }, + "fullDescription": { + "text": "Reports unnecessary comparisons with '.indexOf()' expressions. An example of such an expression is comparing the result of '.indexOf()' with numbers smaller than -1.", + "markdown": "Reports unnecessary comparisons with `.indexOf()` expressions. An example of such an expression is comparing the result of `.indexOf()` with numbers smaller than -1." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ErrorRethrown", + "shortDescription": { + "text": "'Error' not rethrown" + }, + "fullDescription": { + "text": "Reports 'try' statements that catch 'java.lang.Error' or any of its subclasses and do not rethrow the error. Statements that catch 'java.lang.ThreadDeath' are not reported. Example: 'try {\n executeTests(request);\n }\n catch (OutOfMemoryError ex) { // warning: Error 'ex' not rethrown\n return false;\n }'", + "markdown": "Reports `try` statements that catch `java.lang.Error` or any of its subclasses and do not rethrow the error.\n\nStatements that catch `java.lang.ThreadDeath` are not\nreported.\n\n**Example:**\n\n\n try {\n executeTests(request);\n }\n catch (OutOfMemoryError ex) { // warning: Error 'ex' not rethrown\n return false;\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IteratorHasNextCallsIteratorNext", + "shortDescription": { + "text": "'Iterator.hasNext()' which calls 'next()'" + }, + "fullDescription": { + "text": "Reports implementations of 'Iterator.hasNext()' or 'ListIterator.hasPrevious()' that call 'Iterator.next()' or 'ListIterator.previous()' on the iterator instance. Such calls are almost certainly an error, as methods like 'hasNext()' should not modify the iterators state, while 'next()' should. Example: 'class MyIterator implements Iterator {\n public boolean hasNext() {\n return next() != null;\n }\n }'", + "markdown": "Reports implementations of `Iterator.hasNext()` or `ListIterator.hasPrevious()` that call `Iterator.next()` or `ListIterator.previous()` on the iterator instance. Such calls are almost certainly an error, as methods like `hasNext()` should not modify the iterators state, while `next()` should.\n\n**Example:**\n\n\n class MyIterator implements Iterator {\n public boolean hasNext() {\n return next() != null;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EqualsAndHashcode", + "shortDescription": { + "text": "'equals()' and 'hashCode()' not paired" + }, + "fullDescription": { + "text": "Reports classes that override the 'equals()' method but do not override the 'hashCode()' method or vice versa, which can potentially lead to problems when the class is added to a 'Collection' or a 'HashMap'. The quick-fix generates the default implementation for an absent method. Example: 'class StringHolder {\n String s;\n\n @Override public int hashCode() {\n return s != null ? s.hashCode() : 0;\n }\n}' After the quick-fix is applied: 'class StringHolder {\n String s;\n\n @Override public int hashCode() {\n return s != null ? s.hashCode() : 0;\n }\n\n @Override\n public boolean equals(Object o) {\n if (this == o) return true;\n if (!(o instanceof StringHolder)) return false;\n\n StringHolder holder = (StringHolder)o;\n\n if (s != null ? !s.equals(holder.s) : holder.s != null) return false;\n\n return true;\n }\n}'", + "markdown": "Reports classes that override the `equals()` method but do not override the `hashCode()` method or vice versa, which can potentially lead to problems when the class is added to a `Collection` or a `HashMap`.\n\nThe quick-fix generates the default implementation for an absent method.\n\nExample:\n\n\n class StringHolder {\n String s;\n\n @Override public int hashCode() {\n return s != null ? s.hashCode() : 0;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class StringHolder {\n String s;\n\n @Override public int hashCode() {\n return s != null ? s.hashCode() : 0;\n }\n\n @Override\n public boolean equals(Object o) {\n if (this == o) return true;\n if (!(o instanceof StringHolder)) return false;\n\n StringHolder holder = (StringHolder)o;\n\n if (s != null ? !s.equals(holder.s) : holder.s != null) return false;\n\n return true;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CyclicPackageDependency", + "shortDescription": { + "text": "Cyclic package dependency" + }, + "fullDescription": { + "text": "Reports packages that are mutually or cyclically dependent on other packages. Such cyclic dependencies make code fragile and hard to maintain. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports packages that are mutually or cyclically dependent on other packages.\n\nSuch cyclic dependencies make code fragile and hard to maintain.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Dependency issues", + "index": 89, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringRepeatCanBeUsed", + "shortDescription": { + "text": "String.repeat() can be used" + }, + "fullDescription": { + "text": "Reports loops that can be replaced with a single 'String.repeat()' method (available since Java 11). Example: 'void append(StringBuilder sb, int count, Object obj) {\n for (int i = 0; i < count; i++) {\n sb.append(obj);\n }\n }' After the quick-fix is applied: 'void append(StringBuilder sb, int count, Object obj) {\n sb.append(String.valueOf(obj).repeat(Math.max(0, count)));\n }' By default, the inspection may wrap 'count' with 'Math.max(0, count)' if it cannot prove statically that 'count' is not negative. This is done to prevent possible semantics change, as 'String.repeat()' rejects negative numbers. Use the Add Math.max(0,count) to avoid possible semantics change option to disable this behavior if required. Similarly, a string you want to repeat can be wrapped in 'String.valueOf' to prevent possible 'NullPointerException' if it's unknown whether it can be 'null'. This inspection only reports if the language level of the project or module is 11 or higher. New in 2019.1", + "markdown": "Reports loops that can be replaced with a single `String.repeat()` method (available since Java 11).\n\n**Example:**\n\n\n void append(StringBuilder sb, int count, Object obj) {\n for (int i = 0; i < count; i++) {\n sb.append(obj);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n void append(StringBuilder sb, int count, Object obj) {\n sb.append(String.valueOf(obj).repeat(Math.max(0, count)));\n }\n\n\nBy default, the inspection may wrap `count` with `Math.max(0, count)` if it cannot prove statically that `count` is\nnot negative. This is done to prevent possible semantics change, as `String.repeat()` rejects negative numbers.\nUse the **Add Math.max(0,count) to avoid possible semantics change** option to disable this behavior if required.\n\nSimilarly, a string you want to repeat can be wrapped in\n`String.valueOf` to prevent possible `NullPointerException` if it's unknown whether it can be `null`.\n\nThis inspection only reports if the language level of the project or module is 11 or higher.\n\nNew in 2019.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 11", + "index": 122, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SystemSetSecurityManager", + "shortDescription": { + "text": "Call to 'System.setSecurityManager()'" + }, + "fullDescription": { + "text": "Reports calls to 'System.setSecurityManager()'. While often benign, any call to 'System.setSecurityManager()' should be closely examined in any security audit.", + "markdown": "Reports calls to `System.setSecurityManager()`.\n\nWhile often benign, any call to `System.setSecurityManager()` should be closely examined in any security audit." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 30, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnsatisfiedRange", + "shortDescription": { + "text": "Return value is outside of declared range" + }, + "fullDescription": { + "text": "Reports numeric values returned from methods that don't conform to the declared method return range. You can declare method return range using a number of annotations: 'org.jetbrains.annotations.Range' from JetBrains annotations package (specify 'from' and 'to') 'org.checkerframework.common.value.qual.IntRange' from Checker Framework annotations package (specify 'from' and 'to') 'org.checkerframework.checker.index.qual.GTENegativeOne' from Checker Framework annotations package (range is '>= -1') 'org.checkerframework.checker.index.qual.NonNegative' from Checker Framework annotations package (range is '>= 0') 'org.checkerframework.checker.index.qual.Positive' from Checker Framework annotations package (range is '> 0') 'javax.annotation.Nonnegative' from JSR 305 annotations package (range is '>= 0') 'javax.validation.constraints.Min' (specify minimum value) 'javax.validation.constraints.Max' (specify maximum value) Example: '@Range(from = 0, to = Integer.MAX_VALUE) int getValue() {\n // Warning: -1 is outside of declared range\n return -1;\n }' New in 2021.2", + "markdown": "Reports numeric values returned from methods that don't conform to the declared method return range. You can declare method return range using a number of annotations:\n\n* `org.jetbrains.annotations.Range` from JetBrains annotations package (specify 'from' and 'to')\n* `org.checkerframework.common.value.qual.IntRange` from Checker Framework annotations package (specify 'from' and 'to')\n* `org.checkerframework.checker.index.qual.GTENegativeOne` from Checker Framework annotations package (range is '\\>= -1')\n* `org.checkerframework.checker.index.qual.NonNegative` from Checker Framework annotations package (range is '\\>= 0')\n* `org.checkerframework.checker.index.qual.Positive` from Checker Framework annotations package (range is '\\> 0')\n* `javax.annotation.Nonnegative` from JSR 305 annotations package (range is '\\>= 0')\n* `javax.validation.constraints.Min` (specify minimum value)\n* `javax.validation.constraints.Max` (specify maximum value)\n\nExample:\n\n\n @Range(from = 0, to = Integer.MAX_VALUE) int getValue() {\n // Warning: -1 is outside of declared range\n return -1;\n }\n\nNew in 2021.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs/Nullability problems", + "index": 115, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassWithTooManyDependencies", + "shortDescription": { + "text": "Class with too many dependencies" + }, + "fullDescription": { + "text": "Reports classes that are directly dependent on too many other classes in the project. Modifications to any dependency of such classes may require changing the class, thus making it prone to instability. Only top-level classes are reported. Use the Maximum number of dependencies field to specify the maximum allowed number of dependencies for a class. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports classes that are directly dependent on too many other classes in the project.\n\nModifications to any dependency of such classes may require changing the class, thus making it prone to instability.\n\nOnly top-level classes are reported.\n\nUse the **Maximum number of dependencies** field to specify the maximum allowed number of dependencies for a class.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Dependency issues", + "index": 89, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassWithoutNoArgConstructor", + "shortDescription": { + "text": "Class without no-arg constructor" + }, + "fullDescription": { + "text": "Reports classes without a constructor that takes no arguments (i.e. has no parameters). No-arg constructors are necessary in some contexts. For example, if a class needs to be created using reflection. Example: 'public class Bean {\n private String name;\n\n public Bean(String name) {\n this.name = name;\n }\n }' Use the checkbox below to ignore classes without explicit constructors. The compiler provides a default no-arg constructor to such classes.", + "markdown": "Reports classes without a constructor that takes no arguments (i.e. has no parameters). No-arg constructors are necessary in some contexts. For example, if a class needs to be created using reflection.\n\n**Example:**\n\n\n public class Bean {\n private String name;\n\n public Bean(String name) {\n this.name = name;\n }\n }\n\n\nUse the checkbox below to ignore classes without explicit constructors.\nThe compiler provides a default no-arg constructor to such classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/JavaBeans issues", + "index": 35, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CastConflictsWithInstanceof", + "shortDescription": { + "text": "Cast conflicts with 'instanceof'" + }, + "fullDescription": { + "text": "Reports type cast expressions that are preceded by an 'instanceof' check for a different type. Although this might be intended, such a construct is most likely an error, and will result in a 'java.lang.ClassCastException' at runtime. Example: 'class Main {\n int whenCharSequenceCastToNumber(Object o){\n if (o instanceof CharSequence) {\n return ((Number) o).intValue();\n }\n return 0;\n }\n\n int earlyReturnWhenNotCharSequence(Object o){\n if (!(o instanceof CharSequence)) return 0;\n return ((Number)o).intValue();\n }\n }'", + "markdown": "Reports type cast expressions that are preceded by an `instanceof` check for a different type.\n\n\nAlthough this might be intended, such a construct is most likely an error, and will\nresult in a `java.lang.ClassCastException` at runtime.\n\n**Example:**\n\n\n class Main {\n int whenCharSequenceCastToNumber(Object o){\n if (o instanceof CharSequence) {\n return ((Number) o).intValue();\n }\n return 0;\n }\n\n int earlyReturnWhenNotCharSequence(Object o){\n if (!(o instanceof CharSequence)) return 0;\n return ((Number)o).intValue();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Contract", + "shortDescription": { + "text": "Contract issues" + }, + "fullDescription": { + "text": "Reports issues in method '@Contract' annotations. The types of issues that can be reported are: Errors in contract syntax Contracts that do not conform to the method signature (wrong parameter count) Method implementations that contradict the contract (e.g. return 'true' when the contract says 'false') Example: '// method has no parameters, but contract expects 1\n @Contract(\"_ -> fail\")\n void x() {\n throw new AssertionError();\n }'", + "markdown": "Reports issues in method `@Contract` annotations. The types of issues that can be reported are:\n\n* Errors in contract syntax\n* Contracts that do not conform to the method signature (wrong parameter count)\n* Method implementations that contradict the contract (e.g. return `true` when the contract says `false`)\n\nExample:\n\n\n // method has no parameters, but contract expects 1\n @Contract(\"_ -> fail\")\n void x() {\n throw new AssertionError();\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NewExceptionWithoutArguments", + "shortDescription": { + "text": "Exception constructor called without arguments" + }, + "fullDescription": { + "text": "Reports creation of a exception instance without any arguments specified. When an exception is constructed without any arguments, it contains no information about the problem that occurred, which makes debugging needlessly hard. Example: 'throw new IOException(); // warning: exception without arguments'", + "markdown": "Reports creation of a exception instance without any arguments specified.\n\nWhen an exception is constructed without any arguments, it contains no information about the problem that occurred, which makes\ndebugging needlessly hard.\n\n**Example:**\n\n\n throw new IOException(); // warning: exception without arguments\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Error handling", + "index": 14, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EnhancedSwitchBackwardMigration", + "shortDescription": { + "text": "Enhanced 'switch'" + }, + "fullDescription": { + "text": "Reports enhanced 'switch' statements and expressions. Suggests replacing them with regular 'switch' statements. Example: 'boolean even = switch (condition) {\n case 1, 3, 5, 7, 9 -> false;\n default -> true;\n };' After the quick-fix is applied: 'boolean even;\n switch (condition) {\n case 1:\n case 3:\n case 5:\n case 7:\n case 9:\n even = false;\n break;\n default:\n even = true;\n break;\n}' Enhanced 'switch' appeared in Java 14. This inspection can help to downgrade for backward compatibility with earlier Java versions. New in 2019.1", + "markdown": "Reports enhanced `switch` statements and expressions. Suggests replacing them with regular `switch` statements.\n\n**Example:**\n\n\n boolean even = switch (condition) {\n case 1, 3, 5, 7, 9 -> false;\n default -> true;\n };\n\nAfter the quick-fix is applied:\n\n\n boolean even;\n switch (condition) {\n case 1:\n case 3:\n case 5:\n case 7:\n case 9:\n even = false;\n break;\n default:\n even = true;\n break;\n }\n\n\n*Enhanced* `switch` appeared in Java 14.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions.\n\nNew in 2019.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 14", + "index": 100, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PackageWithTooManyClasses", + "shortDescription": { + "text": "Package with too many classes" + }, + "fullDescription": { + "text": "Reports packages that contain too many classes. Overly large packages may indicate a lack of design clarity. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor. Use the Maximum number of classes field to specify the maximum allowed number of classes in a package.", + "markdown": "Reports packages that contain too many classes.\n\nOverly large packages may indicate a lack of design clarity.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor.\n\nUse the **Maximum number of classes** field to specify the maximum allowed number of classes in a package." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Packaging issues", + "index": 38, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TryFinallyCanBeTryWithResources", + "shortDescription": { + "text": "'try finally' can be replaced with 'try' with resources" + }, + "fullDescription": { + "text": "Reports 'try'-'finally' statements that can use Java 7 Automatic Resource Management, which is less error-prone. A quick-fix is available to convert a 'try'-'finally' statement into a 'try'-with-resources statement. Example: 'PrintStream printStream = new PrintStream(fileName);\n try {\n printStream.print(true);\n } finally {\n printStream.close();\n }' A quick-fix is provided to pass the cause to a constructor: 'try (PrintStream printStream = new PrintStream(fileName)) {\n printStream.print(true);\n }' This inspection only reports if the language level of the project or module is 7 or higher.", + "markdown": "Reports `try`-`finally` statements that can use Java 7 Automatic Resource Management, which is less error-prone.\n\nA quick-fix is available to convert a `try`-`finally`\nstatement into a `try`-with-resources statement.\n\n**Example:**\n\n\n PrintStream printStream = new PrintStream(fileName);\n try {\n printStream.print(true);\n } finally {\n printStream.close();\n }\n\nA quick-fix is provided to pass the cause to a constructor:\n\n\n try (PrintStream printStream = new PrintStream(fileName)) {\n printStream.print(true);\n }\n\nThis inspection only reports if the language level of the project or module is 7 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 7", + "index": 112, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SynchronizationOnStaticField", + "shortDescription": { + "text": "Synchronization on 'static' field" + }, + "fullDescription": { + "text": "Reports synchronization on 'static' fields. While not strictly incorrect, synchronization on 'static' fields can lead to bad performance because of contention.", + "markdown": "Reports synchronization on `static` fields. While not strictly incorrect, synchronization on `static` fields can lead to bad performance because of contention." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SwitchStatementWithConfusingDeclaration", + "shortDescription": { + "text": "Local variable used and declared in different 'switch' branches" + }, + "fullDescription": { + "text": "Reports local variables declared in one branch of a 'switch' statement and used in another branch. Such declarations can be extremely confusing. Example: 'switch(i) {\n case 2:\n int x = 0;\n break;\n case 3:\n x = 3;\n System.out.println(x);\n break;\n }'", + "markdown": "Reports local variables declared in one branch of a `switch` statement and used in another branch. Such declarations can be extremely confusing.\n\nExample:\n\n\n switch(i) {\n case 2:\n int x = 0;\n break;\n case 3:\n x = 3;\n System.out.println(x);\n break;\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SamePackageImport", + "shortDescription": { + "text": "Unnecessary import from the same package" + }, + "fullDescription": { + "text": "Reports 'import' statements that refer to the same package as the containing file. Same-package files are always implicitly imported, so such 'import' statements are redundant and confusing. Since IntelliJ IDEA can automatically detect and fix such statements with its Optimize Imports command, this inspection is mostly useful for offline reporting on code bases that you don't intend to change.", + "markdown": "Reports `import` statements that refer to the same package as the containing file.\n\n\nSame-package files are always implicitly imported, so such `import`\nstatements are redundant and confusing.\n\n\nSince IntelliJ IDEA can automatically detect and fix such statements with its **Optimize Imports**\ncommand, this inspection is mostly useful for offline reporting on code bases that you\ndon't intend to change." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Imports", + "index": 22, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FieldMayBeFinal", + "shortDescription": { + "text": "Field may be 'final'" + }, + "fullDescription": { + "text": "Reports fields that can be safely made 'final'. All 'final' fields have a value and this value does not change, which can make the code easier to reason about. To avoid too expensive analysis, this inspection only reports if the field has a 'private' modifier or it is defined in a local or anonymous class. A field can be 'final' if: It is 'static' and initialized once in its declaration or in one 'static' initializer. It is non-'static' and initialized once in its declaration, in one instance initializer or in every constructor And it is not modified anywhere else. Example: 'public class Person {\n private String name; // can be final\n\n Person(String name) {\n this.name = name;\n }\n\n public String getName() {\n return name;\n }\n }' After the quick-fix is applied: 'public class Person {\n private final String name;\n\n Person(String name) {\n this.name = name;\n }\n\n public String getName() {\n return name;\n }\n }'", + "markdown": "Reports fields that can be safely made `final`. All `final` fields have a value and this value does not change, which can make the code easier to reason about.\n\nTo avoid too expensive analysis, this inspection only reports if the field has a `private` modifier\nor it is defined in a local or anonymous class.\nA field can be `final` if:\n\n* It is `static` and initialized once in its declaration or in one `static` initializer.\n* It is non-`static` and initialized once in its declaration, in one instance initializer or in every constructor\n\nAnd it is not modified anywhere else.\n\n**Example:**\n\n\n public class Person {\n private String name; // can be final\n\n Person(String name) {\n this.name = name;\n }\n\n public String getName() {\n return name;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class Person {\n private final String name;\n\n Person(String name) {\n this.name = name;\n }\n\n public String getName() {\n return name;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MissingJavadoc", + "shortDescription": { + "text": "Missing Javadoc" + }, + "fullDescription": { + "text": "Reports missing Javadoc comments and tags. Example: '/**\n * Missing \"@param\" is reported (if configured).\n */\n public void sample(int param){\n }' The quick-fixes add missing tag or missing Javadoc comment: '/**\n * Missing \"@param\" is reported (if configured).\n * @param param\n */\n public void sample(int param){\n }' Inspection can be configured to ignore deprecated elements or simple accessor methods like 'getField()' or 'setField()'. You can also use options below to configure required tags and minimal required visibility for the specific code elements like method, field, class, package, module.", + "markdown": "Reports missing Javadoc comments and tags.\n\nExample:\n\n\n /**\n * Missing \"@param\" is reported (if configured).\n */\n public void sample(int param){\n }\n\nThe quick-fixes add missing tag or missing Javadoc comment:\n\n\n /**\n * Missing \"@param\" is reported (if configured).\n * @param param\n */\n public void sample(int param){\n }\n\n\nInspection can be configured to ignore deprecated elements or simple accessor methods like `getField()` or `setField()`.\nYou can also use options below to configure required tags and minimal required visibility for the specific code elements like method, field, class, package, module." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Javadoc", + "index": 45, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousArrayMethodCall", + "shortDescription": { + "text": "Suspicious 'Arrays' method call" + }, + "fullDescription": { + "text": "Reports calls to non-generic-array manipulation methods like 'Arrays.fill()' with mismatched argument types. Such calls don't do anything useful and are likely to be mistakes. Example: 'int foo(String[] strings) {\n return Arrays.binarySearch(strings, 1);\n }' New in 2017.2", + "markdown": "Reports calls to non-generic-array manipulation methods like `Arrays.fill()` with mismatched argument types. Such calls don't do anything useful and are likely to be mistakes.\n\n**Example:**\n\n\n int foo(String[] strings) {\n return Arrays.binarySearch(strings, 1);\n }\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassHasNoToStringMethod", + "shortDescription": { + "text": "Class does not override 'toString()' method" + }, + "fullDescription": { + "text": "Reports classes without a 'toString()' method.", + "markdown": "Reports classes without a `toString()` method." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/toString() issues", + "index": 119, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AwaitWithoutCorrespondingSignal", + "shortDescription": { + "text": "'await()' without corresponding 'signal()'" + }, + "fullDescription": { + "text": "Reports calls to 'Condition.await()', for which no call to a corresponding 'Condition.signal()' or 'Condition.signalAll()' can be found. Calling 'Condition.await()' in a thread without corresponding 'Condition.signal()' may cause the thread to become disabled until it is interrupted or \"spurious wakeup\" occurs. Only calls that target fields of the current class are reported by this inspection. Example: 'class Queue {\n private final Condition isEmpty = ...;\n\n void add(Object elem) {\n // ...\n // isEmpty.signal();\n // ...\n }\n\n void remove(Object elem) throws InterruptedException {\n // ...\n isEmpty.await(); // 'await()' doesn't contain corresponding 'signal()'/'signalAll()' call\n // ...\n }\n }'", + "markdown": "Reports calls to `Condition.await()`, for which no call to a corresponding `Condition.signal()` or `Condition.signalAll()` can be found.\n\n\nCalling `Condition.await()` in a thread without corresponding `Condition.signal()` may cause the thread\nto become disabled until it is interrupted or \"spurious wakeup\" occurs.\n\nOnly calls that target fields of the current class are reported by this inspection.\n\n**Example:**\n\n\n class Queue {\n private final Condition isEmpty = ...;\n\n void add(Object elem) {\n // ...\n // isEmpty.signal();\n // ...\n }\n\n void remove(Object elem) throws InterruptedException {\n // ...\n isEmpty.await(); // 'await()' doesn't contain corresponding 'signal()'/'signalAll()' call\n // ...\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryLocalVariable", + "shortDescription": { + "text": "Redundant local variable" + }, + "fullDescription": { + "text": "Reports unnecessary local variables that add nothing to the comprehensibility of a method, including: Local variables that are immediately returned. Local variables that are immediately assigned to another variable and then not used. Local variables that always have the same value as another local variable or parameter. Example: 'boolean yes() {\n boolean b = true;\n return b;\n }' After the quick-fix is applied: 'boolean yes() {\n return true;\n }' Configure the inspection: Use the Ignore immediately returned or thrown variables option to ignore immediately returned or thrown variables. Some coding styles suggest using such variables for clarity and ease of debugging. Use the Ignore variables which have an annotation option to ignore annotated variables.", + "markdown": "Reports unnecessary local variables that add nothing to the comprehensibility of a method, including:\n\n* Local variables that are immediately returned.\n* Local variables that are immediately assigned to another variable and then not used.\n* Local variables that always have the same value as another local variable or parameter.\n\n**Example:**\n\n\n boolean yes() {\n boolean b = true;\n return b;\n }\n\nAfter the quick-fix is applied:\n\n\n boolean yes() {\n return true;\n }\n \nConfigure the inspection:\n\n* Use the **Ignore immediately returned or thrown variables** option to ignore immediately returned or thrown variables. Some coding styles suggest using such variables for clarity and ease of debugging.\n* Use the **Ignore variables which have an annotation** option to ignore annotated variables." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Data flow", + "index": 23, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Java9RedundantRequiresStatement", + "shortDescription": { + "text": "Redundant 'requires' directive in module-info" + }, + "fullDescription": { + "text": "Reports redundant 'requires' directives in Java Platform Module System 'module-info.java' files. A 'requires' directive is redundant when a module 'A' requires a module 'B', but the code in module 'A' doesn't import any packages or classes from 'B'. Furthermore, all modules have an implicitly declared dependence on the 'java.base' module, therefore a 'requires java.base;' directive is always redundant. The quick-fix deletes the redundant 'requires' directive. If the deleted dependency re-exported modules that are actually used, the fix adds a 'requires' directives for these modules. This inspection only reports if the language level of the project or module is 9 or higher. New in 2017.1", + "markdown": "Reports redundant `requires` directives in Java Platform Module System `module-info.java` files. A `requires` directive is redundant when a module `A` requires a module `B`, but the code in module `A` doesn't import any packages or classes from `B`. Furthermore, all modules have an implicitly declared dependence on the `java.base` module, therefore a `requires java.base;` directive is always redundant.\n\n\nThe quick-fix deletes the redundant `requires` directive.\nIf the deleted dependency re-exported modules that are actually used, the fix adds a `requires` directives for these modules.\n\nThis inspection only reports if the language level of the project or module is 9 or higher.\n\nNew in 2017.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 15, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FieldAccessNotGuarded", + "shortDescription": { + "text": "Unguarded field access or method call" + }, + "fullDescription": { + "text": "Reports accesses of fields declared as '@GuardedBy' that are not guarded by an appropriate synchronization structure. Example: '@GuardedBy(\"this\")\n void x() {\n notify();\n }\n void y() {\n x(); // unguarded method call\n }' Supported '@GuardedBy' annotations are: 'net.jcip.annotations.GuardedBy' 'javax.annotation.concurrent.GuardedBy' 'org.apache.http.annotation.GuardedBy' 'com.android.annotations.concurrency.GuardedBy' 'androidx.annotation.GuardedBy' 'com.google.errorprone.annotations.concurrent.GuardedBy'", + "markdown": "Reports accesses of fields declared as `@GuardedBy` that are not guarded by an appropriate synchronization structure.\n\nExample:\n\n\n @GuardedBy(\"this\")\n void x() {\n notify();\n }\n void y() {\n x(); // unguarded method call\n }\n\nSupported `@GuardedBy` annotations are:\n\n* `net.jcip.annotations.GuardedBy`\n* `javax.annotation.concurrent.GuardedBy`\n* `org.apache.http.annotation.GuardedBy`\n* `com.android.annotations.concurrency.GuardedBy`\n* `androidx.annotation.GuardedBy`\n* `com.google.errorprone.annotations.concurrent.GuardedBy`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Concurrency annotation issues", + "index": 58, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BusyWait", + "shortDescription": { + "text": "Busy wait" + }, + "fullDescription": { + "text": "Reports calls to 'java.lang.Thread.sleep()' that occur inside loops. Such calls are indicative of \"busy-waiting\". Busy-waiting is often inefficient, and may result in unexpected deadlocks as busy-waiting threads do not release locked resources. Example: 'class X {\n volatile int x;\n public void waitX() throws Exception {\n while (x > 0) {\n Thread.sleep(10);//warning: Call to 'Thread.sleep()' in a loop, probably busy-waiting\n }\n }\n }'", + "markdown": "Reports calls to `java.lang.Thread.sleep()` that occur inside loops.\n\nSuch calls\nare indicative of \"busy-waiting\". Busy-waiting is often inefficient, and may result in unexpected deadlocks\nas busy-waiting threads do not release locked resources.\n\n**Example:**\n\n\n class X {\n volatile int x;\n public void waitX() throws Exception {\n while (x > 0) {\n Thread.sleep(10);//warning: Call to 'Thread.sleep()' in a loop, probably busy-waiting\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ForLoopWithMissingComponent", + "shortDescription": { + "text": "'for' loop with missing components" + }, + "fullDescription": { + "text": "Reports 'for' loops that lack initialization, condition, or update clauses. Some coding styles prohibit such loops. Example: 'for (int i = 0;;i++) {\n // body\n }' Use the Ignore collection iterations option to ignore loops which use an iterator. This is a standard way to iterate over a collection in which the 'for' loop does not have an update clause.", + "markdown": "Reports `for` loops that lack initialization, condition, or update clauses. Some coding styles prohibit such loops.\n\nExample:\n\n\n for (int i = 0;;i++) {\n // body\n }\n\n\nUse the **Ignore collection iterations** option to ignore loops which use an iterator.\nThis is a standard way to iterate over a collection in which the `for` loop does not have an update clause." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PublicStaticArrayField", + "shortDescription": { + "text": "'public static' array field" + }, + "fullDescription": { + "text": "Reports 'public' 'static' array fields. Such fields are often used to store arrays of constant values. Still, they represent a security hazard, as their contents may be modified, even if the field is declared 'final'. Example: 'public static String[] allowedPasswords = {\"foo\", \"bar\"};'", + "markdown": "Reports `public` `static` array fields.\n\n\nSuch fields are often used to store arrays of constant values. Still, they represent a security\nhazard, as their contents may be modified, even if the field is declared `final`.\n\n**Example:**\n\n\n public static String[] allowedPasswords = {\"foo\", \"bar\"};\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 30, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MagicNumber", + "shortDescription": { + "text": "Magic number" + }, + "fullDescription": { + "text": "Reports \"magic numbers\": numeric literals that are not named by a constant declaration. Using magic numbers can lead to unclear code, as well as errors if a magic number is changed in one location but remains unchanged not another. The numbers 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 1000, 0L, 1L, 2L, 0.0, 1.0, 0.0F and 1.0F are not reported by this inspection. Example: 'void checkFileSize(long bytes) {\n if (bytes > 1_048_576) {\n throw new IllegalArgumentException(\"too big\");\n }\n }' A quick-fix introduces a new constant: 'static final int MAX_SUPPORTED_FILE_SIZE = 1_048_576;\n\n void checkFileSize(long bytes) {\n if (bytes > MAX_SUPPORTED_FILE_SIZE) {\n throw new IllegalArgumentException(\"too big\");\n }\n }' Configure the inspection: Use the Ignore constants in 'hashCode()' methods option to disable this inspection within 'hashCode()' methods. Use the Ignore in annotations option to ignore magic numbers in annotations. Use the Ignore initial capacity for StringBuilders and Collections option to ignore magic numbers used as initial capacity when constructing 'Collection', 'Map', 'StringBuilder' or 'StringBuffer' objects.", + "markdown": "Reports \"magic numbers\": numeric literals that are not named by a constant declaration.\n\nUsing magic numbers can lead to unclear code, as well as errors if a magic\nnumber is changed in one location but remains unchanged not another. The numbers 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 1000, 0L, 1L, 2L,\n0.0, 1.0, 0.0F and 1.0F are not reported by this inspection.\n\nExample:\n\n\n void checkFileSize(long bytes) {\n if (bytes > 1_048_576) {\n throw new IllegalArgumentException(\"too big\");\n }\n }\n\nA quick-fix introduces a new constant:\n\n\n static final int MAX_SUPPORTED_FILE_SIZE = 1_048_576;\n\n void checkFileSize(long bytes) {\n if (bytes > MAX_SUPPORTED_FILE_SIZE) {\n throw new IllegalArgumentException(\"too big\");\n }\n }\n\nConfigure the inspection:\n\n* Use the **Ignore constants in 'hashCode()' methods** option to disable this inspection within `hashCode()` methods.\n* Use the **Ignore in annotations** option to ignore magic numbers in annotations.\n* Use the **Ignore initial capacity for StringBuilders and Collections** option to ignore magic numbers used as initial capacity when constructing `Collection`, `Map`, `StringBuilder` or `StringBuffer` objects." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Abstraction issues", + "index": 75, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverwrittenKey", + "shortDescription": { + "text": "Overwritten Map, Set, or array element" + }, + "fullDescription": { + "text": "Reports code that overwrites a 'Map' key, a 'Set' element, or an array element in a sequence of 'add'/'put' calls or using a Java 9 factory method like 'Set.of' (which will result in runtime exception). This usually occurs due to a copy-paste error. Example: 'map.put(\"A\", 1);\n map.put(\"B\", 2);\n map.put(\"C\", 3);\n map.put(\"D\", 4);\n map.put(\"A\", 5); // duplicating key \"A\", overwrites the previously written entry' New in 2017.3", + "markdown": "Reports code that overwrites a `Map` key, a `Set` element, or an array element in a sequence of `add`/`put` calls or using a Java 9 factory method like `Set.of` (which will result in runtime exception).\n\nThis usually occurs due to a copy-paste error.\n\n**Example:**\n\n\n map.put(\"A\", 1);\n map.put(\"B\", 2);\n map.put(\"C\", 3);\n map.put(\"D\", 4);\n map.put(\"A\", 5); // duplicating key \"A\", overwrites the previously written entry\n\nNew in 2017.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AnonymousClassMethodCount", + "shortDescription": { + "text": "Anonymous inner class with too many methods" + }, + "fullDescription": { + "text": "Reports anonymous inner classes whose method count exceeds the specified maximum. Anonymous classes with numerous methods may be difficult to understand and should be promoted to become named inner classes. Use the Method count limit field to specify the maximum allowed number of methods in an anonymous inner class.", + "markdown": "Reports anonymous inner classes whose method count exceeds the specified maximum.\n\nAnonymous classes with numerous methods may be\ndifficult to understand and should be promoted to become named inner classes.\n\nUse the **Method count limit** field to specify the maximum allowed number of methods in an anonymous inner class." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class metrics", + "index": 87, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EnumSwitchStatementWhichMissesCases", + "shortDescription": { + "text": "Enum 'switch' statement that misses case" + }, + "fullDescription": { + "text": "Reports 'switch' statements over enumerated types that are not exhaustive. Example: 'enum AlphaBetaGamma {\n A, B, C;\n\n void x(AlphaBetaGamma e) {\n switch (e) {\n\n }\n }\n }' After the quick-fix is applied: 'enum AlphaBetaGamma {\n A, B, C;\n\n void x(AlphaBetaGamma e) {\n switch (e) {\n case A -> {}\n case B -> {}\n case C -> {}\n }\n }\n }' Use the Ignore switch statements with a default branch option to ignore 'switch' statements that have a 'default' branch.", + "markdown": "Reports `switch` statements over enumerated types that are not exhaustive.\n\n**Example:**\n\n\n enum AlphaBetaGamma {\n A, B, C;\n\n void x(AlphaBetaGamma e) {\n switch (e) {\n\n }\n }\n }\n\nAfter the quick-fix is applied:\n\n\n enum AlphaBetaGamma {\n A, B, C;\n\n void x(AlphaBetaGamma e) {\n switch (e) {\n case A -> {}\n case B -> {}\n case C -> {}\n }\n }\n }\n\n\nUse the **Ignore switch statements with a default branch** option to ignore `switch`\nstatements that have a `default` branch." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodWithMultipleLoops", + "shortDescription": { + "text": "Method with multiple loops" + }, + "fullDescription": { + "text": "Reports methods that contain more than one loop statement. Example: The method below will be reported because it contains two loops: 'void methodWithTwoLoops(int n1, int n2) {\n for (int i = 0; i < n1; i++) {\n System.out.println(i);\n }\n\n int j = 0;\n while (j < n2) {\n System.out.println(j);\n j++;\n }\n }' The following method will also be reported because it contains a nested loop: 'void methodWithNestedLoop(int n1, int n2) {\n for (int i = 0; i < n1; i++) {\n for (int j = 0; j < n2; j++) {\n System.out.println(i + j);\n }\n }\n }'", + "markdown": "Reports methods that contain more than one loop statement.\n\n**Example:**\n\nThe method below will be reported because it contains two loops:\n\n\n void methodWithTwoLoops(int n1, int n2) {\n for (int i = 0; i < n1; i++) {\n System.out.println(i);\n }\n\n int j = 0;\n while (j < n2) {\n System.out.println(j);\n j++;\n }\n }\n\nThe following method will also be reported because it contains a nested loop:\n\n\n void methodWithNestedLoop(int n1, int n2) {\n for (int i = 0; i < n1; i++) {\n for (int j = 0; j < n2; j++) {\n System.out.println(i + j);\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Method metrics", + "index": 95, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousIntegerDivAssignment", + "shortDescription": { + "text": "Suspicious integer division assignment" + }, + "fullDescription": { + "text": "Reports assignments whose right side is a division that shouldn't be truncated to integer. While occasionally intended, this construction is often buggy. Example: 'int x = 18;\n x *= 3/2; // doesn't change x because of the integer division result' This code should be replaced with: 'int x = 18;\n x *= 3.0/2;' In the inspection options, you can disable warnings for suspicious but possibly correct divisions, for example, when the dividend can't be calculated statically. 'void calc(int d) {\n int x = 18;\n x *= d/2;\n }' New in 2019.2", + "markdown": "Reports assignments whose right side is a division that shouldn't be truncated to integer.\n\nWhile occasionally intended, this construction is often buggy.\n\n**Example:**\n\n\n int x = 18;\n x *= 3/2; // doesn't change x because of the integer division result\n\n\nThis code should be replaced with:\n\n\n int x = 18;\n x *= 3.0/2;\n\n\nIn the inspection options, you can disable warnings for suspicious but possibly correct divisions,\nfor example, when the dividend can't be calculated statically.\n\n\n void calc(int d) {\n int x = 18;\n x *= d/2;\n }\n\n\nNew in 2019.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NegativelyNamedBooleanVariable", + "shortDescription": { + "text": "Negatively named boolean variable" + }, + "fullDescription": { + "text": "Reports negatively named variables, for example: 'disabled', 'hidden', or 'isNotChanged'. Usually, inverting the 'boolean' value and removing the negation from the name makes the code easier to understand. Example: 'boolean disabled = false;'", + "markdown": "Reports negatively named variables, for example: `disabled`, `hidden`, or `isNotChanged`.\n\nUsually, inverting the `boolean` value and removing the negation from the name makes the code easier to understand.\n\nExample:\n\n\n boolean disabled = false;\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Data flow", + "index": 23, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SleepWhileHoldingLock", + "shortDescription": { + "text": "Call to 'Thread.sleep()' while synchronized" + }, + "fullDescription": { + "text": "Reports calls to 'java.lang.Thread.sleep()' methods that occur within a 'synchronized' block or method. 'sleep()' within a 'synchronized' block may result in decreased performance, poor scalability, and possibly even deadlocking. Consider using 'wait()' instead, as it will release the lock held. Example: 'synchronized (lock) {\n Thread.sleep(100);\n }'", + "markdown": "Reports calls to `java.lang.Thread.sleep()` methods that occur within a `synchronized` block or method.\n\n\n`sleep()` within a\n`synchronized` block may result in decreased performance, poor scalability, and possibly\neven deadlocking. Consider using `wait()` instead,\nas it will release the lock held.\n\n**Example:**\n\n\n synchronized (lock) {\n Thread.sleep(100);\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Threading issues", + "index": 8, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DeprecatedClassUsageInspection", + "shortDescription": { + "text": "Deprecated API usage in XML" + }, + "fullDescription": { + "text": "Reports usages of deprecated classes and methods in XML files.", + "markdown": "Reports usages of deprecated classes and methods in XML files." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 61, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CastToIncompatibleInterface", + "shortDescription": { + "text": "Casting to incompatible interface" + }, + "fullDescription": { + "text": "Reports type cast expressions where the cast type is an interface and the cast expression has a class type that neither implements the cast interface, nor has any visible subclasses that implement the cast interface. Although this might be intended, such a construct is most likely an error, and will result in a 'java.lang.ClassCastException' at runtime. Example: 'interface A {}\n interface Z {}\n static class C {}\n\n void x(C c) {\n if (c instanceof Z) {\n A a = ((A)c); // cast to incompatible interface 'A'\n }\n }'", + "markdown": "Reports type cast expressions where the cast type is an interface and the cast expression has a class type that neither implements the cast interface, nor has any visible subclasses that implement the cast interface.\n\n\nAlthough this might be intended, such a construct is most likely an error, and will\nresult in a `java.lang.ClassCastException` at runtime.\n\n**Example:**\n\n\n interface A {}\n interface Z {}\n static class C {}\n\n void x(C c) {\n if (c instanceof Z) {\n A a = ((A)c); // cast to incompatible interface 'A'\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MethodReturnAlwaysConstant", + "shortDescription": { + "text": "Method returns per-class constant" + }, + "fullDescription": { + "text": "Reports methods that only return a constant, which may differ for various inheritors. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor.", + "markdown": "Reports methods that only return a constant, which may differ for various inheritors.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DuplicateBranchesInSwitch", + "shortDescription": { + "text": "Duplicate branches in 'switch'" + }, + "fullDescription": { + "text": "Reports 'switch' statements or expressions that contain the same code in different branches and suggests merging the duplicate branches. Example: 'switch (n) {\n case 1:\n System.out.println(n);\n break;\n case 2:\n System.out.println(n);\n break;\n default:\n System.out.println(\"default\");\n }' After the quick-fix is applied: 'switch (n) {\n case 1:\n case 2:\n System.out.println(n);\n break;\n default:\n System.out.println(\"default\");\n }' New in 2019.1", + "markdown": "Reports `switch` statements or expressions that contain the same code in different branches and suggests merging the duplicate branches.\n\nExample:\n\n\n switch (n) {\n case 1:\n System.out.println(n);\n break;\n case 2:\n System.out.println(n);\n break;\n default:\n System.out.println(\"default\");\n }\n\nAfter the quick-fix is applied:\n\n\n switch (n) {\n case 1:\n case 2:\n System.out.println(n);\n break;\n default:\n System.out.println(\"default\");\n }\n\nNew in 2019.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SingleElementAnnotation", + "shortDescription": { + "text": "Non-normalized annotation" + }, + "fullDescription": { + "text": "Reports annotations in a shorthand form and suggests rewriting them in a normal form with an attribute name. Example: '@SuppressWarnings(\"foo\")' After the quick-fix is applied: '@SuppressWarnings(value = \"foo\")'", + "markdown": "Reports annotations in a shorthand form and suggests rewriting them in a normal form with an attribute name.\n\nExample:\n\n\n @SuppressWarnings(\"foo\")\n\nAfter the quick-fix is applied:\n\n\n @SuppressWarnings(value = \"foo\")\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ManualMinMaxCalculation", + "shortDescription": { + "text": "Manual min/max calculation" + }, + "fullDescription": { + "text": "Reports cases where the minimum or the maximum of two numbers can be calculated using a 'Math.max()' or 'Math.min()' call, instead of doing it manually. Example: 'public int min(int a, int b) {\n return b < a ? b : a;\n }' After the quick-fix is applied: 'public int min(int a, int b) {\n return Math.min(a, b);\n }' Use the Disable for float and double option to disable this inspection for 'double' and 'float' types. This is useful because the quick-fix may slightly change the semantics for 'float'/ 'double' types when handling 'NaN'. Nevertheless, in most cases this will actually fix a subtle bug where 'NaN' is not taken into account. New in 2019.2", + "markdown": "Reports cases where the minimum or the maximum of two numbers can be calculated using a `Math.max()` or `Math.min()` call, instead of doing it manually.\n\n**Example:**\n\n\n public int min(int a, int b) {\n return b < a ? b : a;\n }\n\nAfter the quick-fix is applied:\n\n\n public int min(int a, int b) {\n return Math.min(a, b);\n }\n\n\nUse the **Disable for float and double** option to disable this inspection for `double` and `float` types.\nThis is useful because the quick-fix may slightly change the semantics for `float`/\n`double` types when handling `NaN`. Nevertheless, in most cases this will actually fix\na subtle bug where `NaN` is not taken into account.\n\nNew in 2019.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SimplifiableConditionalExpression", + "shortDescription": { + "text": "Simplifiable conditional expression" + }, + "fullDescription": { + "text": "Reports conditional expressions and suggests simplifying them. Examples: 'condition ? true : foo → condition || foo' 'condition ? false : foo → !condition && foo' 'condition ? foo : !foo → condition == foo' 'condition ? true : false → condition' 'a == b ? b : a → a' 'result != null ? result : null → result'", + "markdown": "Reports conditional expressions and suggests simplifying them.\n\nExamples:\n\n condition ? true : foo → condition || foo\n\n condition ? false : foo → !condition && foo\n\n condition ? foo : !foo → condition == foo\n\n condition ? true : false → condition\n\n a == b ? b : a → a\n\n result != null ? result : null → result\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SillyAssignment", + "shortDescription": { + "text": "Variable is assigned to itself" + }, + "fullDescription": { + "text": "Reports assignments of a variable to itself. Example: 'a = a;' The quick-fix removes the assigment.", + "markdown": "Reports assignments of a variable to itself.\n\n**Example:**\n\n\n a = a;\n\nThe quick-fix removes the assigment." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 15, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BoundedWildcard", + "shortDescription": { + "text": "Can use bounded wildcard" + }, + "fullDescription": { + "text": "Reports generic method parameters that can make use of bounded wildcards. Example: 'void process(Consumer consumer);' should be replaced with: 'void process(Consumer consumer);' This method signature is more flexible because it accepts more types: not only 'Consumer', but also 'Consumer'. Likewise, type parameters in covariant position: 'T produce(Producer p);' should be replaced with: 'T produce(Producer p);' To quote Joshua Bloch in Effective Java third Edition: Item 31: Use bounded wildcards to increase API flexibility Using wildcard types in your APIs, while tricky, makes the APIs far more flexible. If you write a library that will be widely used, the proper use of wildcard types should be considered mandatory. Remember the basic rule: producer-extends, consumer-super (PECS). Also remember that all Comparables and Comparators are consumers. Use the inspection options to toggle the reporting for: invariant classes. An example of an invariant class is 'java.util.List' because it both accepts values (via the 'List.add(T)' method) and produces values (via the 'T List.get()' method). On the other hand, 'contravariant' classes only receive values, for example, 'java.util.function.Consumer' with the only method 'accept(T)'. Similarly, 'covariant' classes only produce values, for example, 'java.util.function.Supplier' with the only method 'T get()'. People often use bounded wildcards in covariant/contravariant classes but avoid wildcards in invariant classes, for example, 'void process(List l)'. Disable this option to ignore such invariant classes and leave them rigidly typed, for example, 'void process(List l)'. 'private' methods, which can be considered as not a part of the public API instance methods", + "markdown": "Reports generic method parameters that can make use of [bounded wildcards](https://en.wikipedia.org/wiki/Wildcard_(Java)).\n\n**Example:**\n\n\n void process(Consumer consumer);\n\nshould be replaced with:\n\n\n void process(Consumer consumer);\n\n\nThis method signature is more flexible because it accepts more types: not only\n`Consumer`, but also `Consumer`.\n\nLikewise, type parameters in covariant position:\n\n\n T produce(Producer p);\n\nshould be replaced with:\n\n\n T produce(Producer p);\n\n\nTo quote [Joshua Bloch](https://en.wikipedia.org/wiki/Joshua_Bloch#Effective_Java) in *Effective Java* third Edition:\n>\n> #### Item 31: Use bounded wildcards to increase API flexibility\n>\n> Using wildcard types in your APIs, while tricky, makes the APIs far more flexible. If you write a library that will be widely used, the proper use of wildcard types should be considered mandatory. Remember the basic rule: producer-extends, consumer-super (PECS). Also remember that all Comparables and Comparators are consumers.\n\n\nUse the inspection options to toggle the reporting for:\n\n*\n invariant classes. An example of an invariant class is `java.util.List` because it both accepts values\n (via the `List.add(T)` method)\n and produces values (via the `T List.get()` method).\n\n\n On the\n other hand, `contravariant` classes only receive values, for example, `java.util.function.Consumer`\n with the only method `accept(T)`. Similarly, `covariant` classes\n only produce values, for example, `java.util.function.Supplier`\n with the only method `T get()`.\n\n\n People often use bounded wildcards in covariant/contravariant\n classes but avoid wildcards in invariant classes, for example, `void process(List l)`.\n Disable this option to ignore such invariant classes and leave them rigidly typed, for example, `void\n process(List l)`.\n*\n `private` methods, which can be considered as not a part of the public API\n\n*\n instance methods" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnqualifiedMethodAccess", + "shortDescription": { + "text": "Instance method call not qualified with 'this'" + }, + "fullDescription": { + "text": "Reports calls to non-'static' methods on the same instance that are not qualified with 'this'. Example: 'class Foo {\n void bar() {}\n\n void foo() {\n bar();\n }\n }' After the quick-fix is applied: 'class Foo {\n void bar() {}\n\n void foo() {\n this.bar();\n }\n }'", + "markdown": "Reports calls to non-`static` methods on the same instance that are not qualified with `this`.\n\n**Example:**\n\n\n class Foo {\n void bar() {}\n\n void foo() {\n bar();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n void bar() {}\n\n void foo() {\n this.bar();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InstanceofIncompatibleInterface", + "shortDescription": { + "text": "'instanceof' with incompatible interface" + }, + "fullDescription": { + "text": "Reports 'instanceof' expressions where the compared type is an interface, and the compared expression has a class type that neither implements the compared interface, nor has any visible subclasses which implement the compared interface. Although that might be intended, normally such a construct is most likely an error, where the resulting 'instanceof' expression always evaluates to 'false'. Example: 'interface I1 {}\n\n interface I2 {}\n\n interface I3 extends I1 {}\n\n static class Sub1 implements I1 {}\n\n static class Sub2 extends Sub1 implements I2 {\n void test(Sub1 sub1) {\n if (sub1 instanceof I3) { // here 'I3' is incompatible interface\n }\n }\n }'", + "markdown": "Reports `instanceof` expressions where the compared type is an interface, and the compared expression has a class type that neither implements the compared interface, nor has any visible subclasses which implement the compared interface.\n\n\nAlthough that might be intended, normally such a construct is most likely an error, where\nthe resulting `instanceof` expression always evaluates to `false`.\n\n**Example:**\n\n\n interface I1 {}\n\n interface I2 {}\n\n interface I3 extends I1 {}\n\n static class Sub1 implements I1 {}\n\n static class Sub2 extends Sub1 implements I2 {\n void test(Sub1 sub1) {\n if (sub1 instanceof I3) { // here 'I3' is incompatible interface\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FunctionalExpressionCanBeFolded", + "shortDescription": { + "text": "Functional expression can be folded" + }, + "fullDescription": { + "text": "Reports method references or lambda expressions that point to a method of their own functional interface type and hence can be replaced with their qualifiers removing unnecessary object allocation. Example: 'SwingUtilities.invokeLater(r::run);\n SwingUtilities.invokeAndWait(() -> r.run());' After the quick-fix is applied: 'SwingUtilities.invokeLater(r);\n SwingUtilities.invokeAndWait(r);' This inspection reports only if the language level of the project or module is 8 or higher.", + "markdown": "Reports method references or lambda expressions that point to a method of their own functional interface type and hence can be replaced with their qualifiers removing unnecessary object allocation.\n\nExample:\n\n\n SwingUtilities.invokeLater(r::run);\n SwingUtilities.invokeAndWait(() -> r.run());\n\nAfter the quick-fix is applied:\n\n\n SwingUtilities.invokeLater(r);\n SwingUtilities.invokeAndWait(r);\n\nThis inspection reports only if the language level of the project or module is 8 or higher." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Declaration redundancy", + "index": 15, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MigrateAssertToMatcherAssert", + "shortDescription": { + "text": "JUnit assertion can be 'assertThat()' call" + }, + "fullDescription": { + "text": "Reports calls to 'Assert.assertEquals()', 'Assert.assertTrue()', etc. methods which can be migrated to Hamcrest declarative style 'Assert.assertThat()' calls. For example: 'public class SubstantialTest {\n @Test\n public void testContents(Collection c, String s) {\n Assert.assertTrue(c.contains(s));\n Assert.assertEquals(c, s);\n Assert.assertNotNull(c);\n Assert.assertNull(c);\n Assert.assertFalse(c.contains(s));\n }\n }' A quick-fix is provided to perform the migration: 'public class SubstantialTest {\n @Test\n public void testContents(Collection c, String s) {\n assertThat(c, hasItem(o));\n assertThat(o, is(c));\n assertThat(c, notNullValue());\n assertThat(c, nullValue());\n assertThat(c, not(hasItem(o)));\n }\n }' This inspection requires that the Hamcrest library is available on the classpath. Use the Statically import matcher's methods option to specify if you want the quick-fix to statically import the Hamcrest matcher methods.", + "markdown": "Reports calls to `Assert.assertEquals()`, `Assert.assertTrue()`, etc. methods which can be migrated to Hamcrest declarative style `Assert.assertThat()` calls.\n\nFor example:\n\n\n public class SubstantialTest {\n @Test\n public void testContents(Collection c, String s) {\n Assert.assertTrue(c.contains(s));\n Assert.assertEquals(c, s);\n Assert.assertNotNull(c);\n Assert.assertNull(c);\n Assert.assertFalse(c.contains(s));\n }\n }\n\nA quick-fix is provided to perform the migration:\n\n\n public class SubstantialTest {\n @Test\n public void testContents(Collection c, String s) {\n assertThat(c, hasItem(o));\n assertThat(o, is(c));\n assertThat(c, notNullValue());\n assertThat(c, nullValue());\n assertThat(c, not(hasItem(o)));\n }\n }\n\nThis inspection requires that the Hamcrest library is available on the classpath.\n\nUse the **Statically import matcher's methods** option to specify if you want the quick-fix to statically import the Hamcrest matcher methods." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JVM languages/Test frameworks", + "index": 85, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InstanceVariableInitialization", + "shortDescription": { + "text": "Instance field may not be initialized" + }, + "fullDescription": { + "text": "Reports instance variables that may be uninitialized upon object initialization. Example: 'class Foo {\n public int bar;\n\n static { }\n }' Note that this inspection uses a very conservative dataflow algorithm and may incorrectly report instance variables as uninitialized. Variables reported as initialized will always be initialized. Use the Ignore primitive fields option to ignore uninitialized primitive fields.", + "markdown": "Reports instance variables that may be uninitialized upon object initialization.\n\n**Example:**\n\n\n class Foo {\n public int bar;\n\n static { }\n }\n\nNote that this inspection uses a very conservative dataflow algorithm and may incorrectly report instance variables as uninitialized. Variables\nreported as initialized will always be initialized.\n\nUse the **Ignore primitive fields** option to ignore uninitialized primitive fields." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Initialization", + "index": 28, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CustomClassloader", + "shortDescription": { + "text": "Custom 'ClassLoader' is declared" + }, + "fullDescription": { + "text": "Reports user-defined subclasses of 'java.lang.ClassLoader'. While not necessarily representing a security hole, such classes should be thoroughly inspected for possible security issues.", + "markdown": "Reports user-defined subclasses of `java.lang.ClassLoader`.\n\n\nWhile not necessarily representing a security hole, such classes should be thoroughly\ninspected for possible security issues." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Security", + "index": 30, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IfStatementWithTooManyBranches", + "shortDescription": { + "text": "'if' statement with too many branches" + }, + "fullDescription": { + "text": "Reports 'if' statements with too many branches. Such statements may be confusing and are often a sign of inadequate levels of design abstraction. Use the Maximum number of branches field to specify the maximum number of branches an 'if' statement is allowed to have.", + "markdown": "Reports `if` statements with too many branches.\n\nSuch statements may be confusing and are often a sign of inadequate levels of design\nabstraction.\n\n\nUse the **Maximum number of branches** field to specify the maximum number of branches an `if` statement is allowed to have." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ThisEscapedInConstructor", + "shortDescription": { + "text": "'this' reference escaped in object construction" + }, + "fullDescription": { + "text": "Reports possible escapes of 'this' during the object initialization. The escapes occur when 'this' is used as a method argument or an object of assignment in a constructor or initializer. Such escapes may result in subtle bugs, as the object is now available in the context where it is not guaranteed to be initialized. Example: 'class Foo {\n {\n System.out.println(this);\n }\n }'", + "markdown": "Reports possible escapes of `this` during the object initialization. The escapes occur when `this` is used as a method argument or an object of assignment in a constructor or initializer. Such escapes may result in subtle bugs, as the object is now available in the context where it is not guaranteed to be initialized.\n\n**Example:**\n\n\n class Foo {\n {\n System.out.println(this);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Initialization", + "index": 28, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessarySuperConstructor", + "shortDescription": { + "text": "Unnecessary call to 'super()'" + }, + "fullDescription": { + "text": "Reports calls to no-arg superclass constructors during object construction. Such calls are unnecessary and may be removed. Example: 'class Foo {\n Foo() {\n super();\n }\n }' After the quick-fix is applied: 'class Foo {\n Foo() {\n }\n }'", + "markdown": "Reports calls to no-arg superclass constructors during object construction.\n\nSuch calls are unnecessary and may be removed.\n\n**Example:**\n\n\n class Foo {\n Foo() {\n super();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n Foo() {\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonSerializableObjectPassedToObjectStream", + "shortDescription": { + "text": "Non-serializable object passed to 'ObjectOutputStream'" + }, + "fullDescription": { + "text": "Reports non-'Serializable' objects used as arguments to 'java.io.ObjectOutputStream.write()'. Such calls will result in runtime exceptions. This inspection assumes objects of the types 'java.util.Collection' and 'java.util.Map' to be 'Serializable', unless the types they are declared in are non-'Serializable'. Example: 'public class IWantToSerializeThis {\n public static void main(String[] args) throws IOException {\n try(var stream = new ObjectOutputStream(Files.newOutputStream(Paths.get(\"output\")))) {\n // Warning -- will fail with NotSerializableException\n stream.writeObject(new IWantToSerializeThis());\n }\n }\n }'", + "markdown": "Reports non-`Serializable` objects used as arguments to `java.io.ObjectOutputStream.write()`. Such calls will result in runtime exceptions.\n\n\nThis inspection assumes objects of the types `java.util.Collection` and\n`java.util.Map` to be `Serializable`, unless the types\nthey are declared in are non-`Serializable`.\n\n**Example:**\n\n\n public class IWantToSerializeThis {\n public static void main(String[] args) throws IOException {\n try(var stream = new ObjectOutputStream(Files.newOutputStream(Paths.get(\"output\")))) {\n // Warning -- will fail with NotSerializableException\n stream.writeObject(new IWantToSerializeThis());\n }\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Serialization issues", + "index": 18, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonPublicClone", + "shortDescription": { + "text": "'clone()' method not 'public'" + }, + "fullDescription": { + "text": "Reports 'clone()' methods that are 'protected' and not 'public'. When overriding the 'clone()' method from 'java.lang.Object', it is expected to make the method 'public', so that it is accessible from non-subclasses outside the package.", + "markdown": "Reports `clone()` methods that are `protected` and not `public`.\n\nWhen overriding the `clone()` method from `java.lang.Object`, it is expected to make the method `public`,\nso that it is accessible from non-subclasses outside the package." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Cloning issues", + "index": 80, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IfCanBeSwitch", + "shortDescription": { + "text": "'if' can be replaced with 'switch'" + }, + "fullDescription": { + "text": "Reports 'if' statements that can be replaced with 'switch' statements. The replacement result is usually shorter and clearer. Example: 'void test(String str) {\n if (str.equals(\"1\")) {\n System.out.println(1);\n } else if (str.equals(\"2\")) {\n System.out.println(2);\n } else if (str.equals(\"3\")) {\n System.out.println(3);\n } else {\n System.out.println(4);\n }\n }' After the quick-fix is applied: 'void test(String str) {\n switch (str) {\n case \"1\" -> System.out.println(1);\n case \"2\" -> System.out.println(2);\n case \"3\" -> System.out.println(3);\n default -> System.out.println(4);\n }\n }' This inspection only reports if the language level of the project or module is 7 or higher. Use the Minimum number of 'if' condition branches field to specify the minimum number of 'if' condition branches for an 'if' statement to have to be reported. Note that the terminal 'else' branch (without 'if') is not counted. Use the Suggest switch on numbers option to enable the suggestion of 'switch' statements on primitive and boxed numbers and characters. Use the Suggest switch on enums option to enable the suggestion of 'switch' statements on 'enum' constants. Use the Only suggest on null-safe expressions option to suggest 'switch' statements that can't introduce a 'NullPointerException' only.", + "markdown": "Reports `if` statements that can be replaced with `switch` statements.\n\nThe replacement result is usually shorter and clearer.\n\n**Example:**\n\n\n void test(String str) {\n if (str.equals(\"1\")) {\n System.out.println(1);\n } else if (str.equals(\"2\")) {\n System.out.println(2);\n } else if (str.equals(\"3\")) {\n System.out.println(3);\n } else {\n System.out.println(4);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n void test(String str) {\n switch (str) {\n case \"1\" -> System.out.println(1);\n case \"2\" -> System.out.println(2);\n case \"3\" -> System.out.println(3);\n default -> System.out.println(4);\n }\n }\n \nThis inspection only reports if the language level of the project or module is 7 or higher.\n\nUse the **Minimum number of 'if' condition branches** field to specify the minimum number of `if` condition branches\nfor an `if` statement to have to be reported. Note that the terminal `else` branch (without `if`) is not counted.\n\n\nUse the **Suggest switch on numbers** option to enable the suggestion of `switch` statements on\nprimitive and boxed numbers and characters.\n\n\nUse the **Suggest switch on enums** option to enable the suggestion of `switch` statements on\n`enum` constants.\n\n\nUse the **Only suggest on null-safe expressions** option to suggest `switch` statements that can't introduce a `NullPointerException` only." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids", + "index": 33, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseOfObsoleteDateTimeApi", + "shortDescription": { + "text": "Use of obsolete date-time API" + }, + "fullDescription": { + "text": "Reports usages of 'java.util.Date', 'java.util.Calendar', 'java.util.GregorianCalendar', 'java.util.TimeZone', and 'java.util.SimpleTimeZone'. While still supported, these classes were made obsolete by the JDK8 Date-Time API and should probably not be used in new development.", + "markdown": "Reports usages of `java.util.Date`, `java.util.Calendar`, `java.util.GregorianCalendar`, `java.util.TimeZone`, and `java.util.SimpleTimeZone`.\n\nWhile still supported, these classes were made obsolete by the JDK8 Date-Time API and should probably\nnot be used in new development." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code maturity", + "index": 49, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InfiniteRecursion", + "shortDescription": { + "text": "Infinite recursion" + }, + "fullDescription": { + "text": "Reports methods that call themselves infinitely unless an exception is thrown. Methods reported by this inspection cannot return normally. While such behavior may be intended, in many cases this is just an oversight. Example: 'int baz() {\n return baz();\n }'", + "markdown": "Reports methods that call themselves infinitely unless an exception is thrown.\n\n\nMethods reported by this inspection cannot return normally.\nWhile such behavior may be intended, in many cases this is just an oversight.\n\n**Example:**\n\n int baz() {\n return baz();\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NullArgumentToVariableArgMethod", + "shortDescription": { + "text": "Confusing argument to varargs method" + }, + "fullDescription": { + "text": "Reports calls to variable arity methods that have a single argument in the vararg parameter position, which is either a 'null' or an array of a subtype of the vararg parameter. Such an argument may be confusing as it is unclear if a varargs or non-varargs call is desired. Example: 'String[] ss = new String[]{\"foo\", \"bar\"};\n System.out.printf(\"%s\", ss);' In this example only the first element of the array will be printed, not the entire array.", + "markdown": "Reports calls to variable arity methods that have a single argument in the vararg parameter position, which is either a `null` or an array of a subtype of the vararg parameter. Such an argument may be confusing as it is unclear if a varargs or non-varargs call is desired.\n\n**Example:**\n\n\n String[] ss = new String[]{\"foo\", \"bar\"};\n System.out.printf(\"%s\", ss);\n\nIn this example only the first element of the array will be printed, not the entire array." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ModuleWithTooFewClasses", + "shortDescription": { + "text": "Module with too few classes" + }, + "fullDescription": { + "text": "Reports modules that contain too few classes. Overly small modules may indicate a too fragmented design. Java, Kotlin and Groovy classes are counted. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor. Use the Minimum number of classes field to specify the minimum number of classes a module may have.", + "markdown": "Reports modules that contain too few classes. Overly small modules may indicate a too fragmented design. Java, Kotlin and Groovy classes are counted.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor.\n\nUse the **Minimum number of classes** field to specify the minimum number of classes a module may have." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Modularization issues", + "index": 65, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OverloadedVarargsMethod", + "shortDescription": { + "text": "Overloaded varargs method" + }, + "fullDescription": { + "text": "Reports varargs methods with the same name as other methods in the class or in a superclass. Overloaded methods that take a variable number of arguments can be very confusing because it is often unclear which overload gets called. Example: 'public void execute(Runnable... r) {} // warning\n public void execute(Runnable r1, Runnable r2) {}'", + "markdown": "Reports varargs methods with the same name as other methods in the class or in a superclass. Overloaded methods that take a variable number of arguments can be very confusing because it is often unclear which overload gets called.\n\n**Example:**\n\n\n public void execute(Runnable... r) {} // warning\n public void execute(Runnable r1, Runnable r2) {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Naming conventions/Method", + "index": 88, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AnonymousInnerClassMayBeStatic", + "shortDescription": { + "text": "Anonymous class may be a named 'static' inner class" + }, + "fullDescription": { + "text": "Reports anonymous classes that may be safely replaced with 'static' inner classes. An anonymous class may be a 'static' inner class if it doesn't explicitly reference its enclosing instance or local classes from its surrounding method. A 'static' inner class does not keep an implicit reference to its enclosing instance. This prevents a common cause of memory leaks and uses less memory per class instance. Since Java 18, only serializable anonymous classes keep an implicit reference to its enclosing instance, if this reference is not used. So, if module language level is Java 18 or higher, this inspection reports serializable classes only. The quick-fix extracts the anonymous class into a named 'static' inner class. Example: 'void sample() {\n Thread thread = new Thread(new Runnable() {\n @Override\n public void run() {\n }\n });\n }' After the quick-fix is applied: 'void sample() {\n Thread thread = new Thread(new Task());\n }\n\n private static class Task implements Runnable {\n @Override\n public void run() {\n }\n }'", + "markdown": "Reports anonymous classes that may be safely replaced with `static` inner classes. An anonymous class may be a `static` inner class if it doesn't explicitly reference its enclosing instance or local classes from its surrounding method.\n\n\nA `static` inner class does not keep an implicit reference to its enclosing instance.\nThis prevents a common cause of memory leaks and uses less memory per class instance.\n\n\nSince Java 18, only serializable anonymous classes keep an implicit reference to its enclosing instance,\nif this reference is not used. So, if module language level is Java 18 or higher,\nthis inspection reports serializable classes only.\n\nThe quick-fix extracts the anonymous class into a named `static` inner class.\n\n**Example:**\n\n\n void sample() {\n Thread thread = new Thread(new Runnable() {\n @Override\n public void run() {\n }\n });\n }\n\nAfter the quick-fix is applied:\n\n\n void sample() {\n Thread thread = new Thread(new Task());\n }\n\n private static class Task implements Runnable {\n @Override\n public void run() {\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Memory", + "index": 69, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DeprecatedIsStillUsed", + "shortDescription": { + "text": "Deprecated member is still used" + }, + "fullDescription": { + "text": "Reports deprecated classes, methods, and fields that are used in your code nonetheless. Example: 'class MyCode {\n @Deprecated\n void oldMethod() {}// warning: \"Deprecated member is still used\"\n\n void newMethod() {\n oldMethod(); // forgotten usage\n }\n }' Usages within deprecated elements are ignored. NOTE: Due to performance reasons, a non-private member is checked only when its name rarely occurs in the project.", + "markdown": "Reports deprecated classes, methods, and fields that are used in your code nonetheless.\n\nExample:\n\n\n class MyCode {\n @Deprecated\n void oldMethod() {}// warning: \"Deprecated member is still used\"\n\n void newMethod() {\n oldMethod(); // forgotten usage\n }\n }\n\nUsages within deprecated elements are ignored.\n\n**NOTE:** Due to performance reasons, a non-private member is checked only when its name rarely occurs in the project." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code maturity", + "index": 49, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PublicConstructor", + "shortDescription": { + "text": "'public' constructor can be replaced with factory method" + }, + "fullDescription": { + "text": "Reports 'public' constructors. Some coding standards discourage the use of 'public' constructors and recommend 'static' factory methods instead. This way the implementation can be swapped out without affecting the call sites. Example: 'class Test {\n private String name;\n\n public Test(String name) {\n this.name = name;\n }\n\n public void test() {\n System.out.println(name);\n }\n\n public static void main(String[] args) {\n new Test(\"str\").test();\n }\n }' After quick-fix is applied: 'class Test {\n private String name;\n\n private Test(String name) {\n this.name = name;\n }\n\n public static Test getInstance(String name) {\n return new Test(name);\n }\n\n public void test() {\n System.out.println(name);\n }\n\n public static void main(String[] args) {\n getInstance(\"str\").test();\n }\n }'", + "markdown": "Reports `public` constructors.\n\nSome coding standards discourage the use of `public` constructors and recommend\n`static` factory methods instead.\nThis way the implementation can be swapped out without affecting the call sites.\n\n**Example:**\n\n\n class Test {\n private String name;\n\n public Test(String name) {\n this.name = name;\n }\n\n public void test() {\n System.out.println(name);\n }\n\n public static void main(String[] args) {\n new Test(\"str\").test();\n }\n }\n\nAfter quick-fix is applied:\n\n\n class Test {\n private String name;\n\n private Test(String name) {\n this.name = name;\n }\n\n public static Test getInstance(String name) {\n return new Test(name);\n }\n\n public void test() {\n System.out.println(name);\n }\n\n public static void main(String[] args) {\n getInstance(\"str\").test();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantComparatorComparing", + "shortDescription": { + "text": "Comparator method can be simplified" + }, + "fullDescription": { + "text": "Reports 'Comparator' combinator constructs that can be simplified. Example: 'c.thenComparing(Comparator.comparing(function));\n\n Comparator.comparing(Map.Entry::getKey);\n\n Collections.max(list, Comparator.reverseOrder());' After the quick-fixes are applied: 'c.thenComparing(function)\n\n Map.Entry.comparingByKey()\n\n Collections.min(list, Comparator.naturalOrder());' New in 2018.1", + "markdown": "Reports `Comparator` combinator constructs that can be simplified.\n\nExample:\n\n\n c.thenComparing(Comparator.comparing(function));\n\n Comparator.comparing(Map.Entry::getKey);\n\n Collections.max(list, Comparator.reverseOrder());\n\nAfter the quick-fixes are applied:\n\n\n c.thenComparing(function)\n\n Map.Entry.comparingByKey()\n\n Collections.min(list, Comparator.naturalOrder());\n\nNew in 2018.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SwitchStatementWithTooFewBranches", + "shortDescription": { + "text": "Minimum 'switch' branches" + }, + "fullDescription": { + "text": "Reports 'switch' statements and expressions with too few 'case' labels, and suggests rewriting them as 'if' and 'else if' statements. Example (minimum branches == 3): 'switch (expression) {\n case \"foo\" -> foo();\n case \"bar\" -> bar();\n }' After the quick-fix is applied: 'if (\"foo\".equals(expression)) {\n foo();\n } else if (\"bar\".equals(expression)) {\n bar();\n }' Exhaustive switch expressions (Java 14+) or pattern switch statements (Java 17 preview) without the 'default' branch are not reported. That's because compile-time exhaustiveness check will be lost when the 'switch' is converted to 'if' which might be undesired. Configure the inspection: Use the Minimum number of branches field to specify the minimum expected number of 'case' labels. Use the Do not report pattern switch statements option to avoid reporting switch statements and expressions that have pattern branches. E.g.: 'String result = switch(obj) {\n case String str -> str.trim();\n default -> \"none\";\n };' It might be preferred to keep the switch even with a single pattern branch, rather than using the 'instanceof' statement.", + "markdown": "Reports `switch` statements and expressions with too few `case` labels, and suggests rewriting them as `if` and `else if` statements.\n\nExample (minimum branches == 3):\n\n\n switch (expression) {\n case \"foo\" -> foo();\n case \"bar\" -> bar();\n }\n\nAfter the quick-fix is applied:\n\n\n if (\"foo\".equals(expression)) {\n foo();\n } else if (\"bar\".equals(expression)) {\n bar();\n }\n\nExhaustive switch expressions (Java 14+) or pattern switch statements (Java 17 preview) without the 'default' branch are not reported.\nThat's because compile-time exhaustiveness check will be lost when the `switch` is converted to `if`\nwhich might be undesired.\n\nConfigure the inspection:\n\nUse the **Minimum number of branches** field to specify the minimum expected number of `case` labels.\n\nUse the **Do not report pattern switch statements** option to avoid reporting switch statements and expressions that\nhave pattern branches. E.g.:\n\n\n String result = switch(obj) {\n case String str -> str.trim();\n default -> \"none\";\n };\n\nIt might be preferred to keep the switch even with a single pattern branch, rather than using the `instanceof` statement." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "VariableNotUsedInsideIf", + "shortDescription": { + "text": "Reference checked for 'null' is not used inside 'if'" + }, + "fullDescription": { + "text": "Reports references to variables that are checked for nullability in the condition of an 'if' statement or conditional expression but not used inside that 'if' statement. Usually this either means that the check is unnecessary or that the variable is not referenced inside the 'if' statement by mistake. Example: 'void test(Integer i) {\n if (i != null) { // here 'i' is not used inside 'if' statement\n System.out.println();\n }\n }'", + "markdown": "Reports references to variables that are checked for nullability in the condition of an `if` statement or conditional expression but not used inside that `if` statement.\n\n\nUsually this either means that\nthe check is unnecessary or that the variable is not referenced inside the\n`if` statement by mistake.\n\n**Example:**\n\n\n void test(Integer i) {\n if (i != null) { // here 'i' is not used inside 'if' statement\n System.out.println();\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CollectionAddAllCanBeReplacedWithConstructor", + "shortDescription": { + "text": "Redundant 'Collection.addAll()' call" + }, + "fullDescription": { + "text": "Reports 'Collection.addAll()' and 'Map.putAll()' calls immediately after an instantiation of a collection using a no-arg constructor. Such constructs can be replaced with a single call to a parametrized constructor, which simplifies the code. Also, for some collections the replacement might be more performant. Example: 'Set set = new HashSet<>();\n set.addAll(Arrays.asList(\"alpha\", \"beta\", \"gamma\"));' After the quick-fix is applied: 'Set set = new HashSet<>(Arrays.asList(\"alpha\", \"beta\", \"gamma\"));' The JDK collection classes are supported by default. Additionally, you can specify other classes using the Classes to check panel.", + "markdown": "Reports `Collection.addAll()` and `Map.putAll()` calls immediately after an instantiation of a collection using a no-arg constructor.\n\nSuch constructs can be replaced with a single call to a parametrized constructor, which simplifies the code. Also, for some collections the replacement\nmight be more performant.\n\n**Example:**\n\n\n Set set = new HashSet<>();\n set.addAll(Arrays.asList(\"alpha\", \"beta\", \"gamma\"));\n\nAfter the quick-fix is applied:\n\n\n Set set = new HashSet<>(Arrays.asList(\"alpha\", \"beta\", \"gamma\"));\n\n\nThe JDK collection classes are supported by default.\nAdditionally, you can specify other classes using the **Classes to check** panel." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Performance", + "index": 10, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MultipleReturnPointsPerMethod", + "shortDescription": { + "text": "Method with multiple return points" + }, + "fullDescription": { + "text": "Reports methods whose number of 'return' points exceeds the specified maximum. Methods with too many 'return' points may be confusing and hard to refactor. A 'return' point is either a 'return' statement or a falling through the bottom of a 'void' method or constructor. Example: The method below is reported if only two 'return' statements are allowed: 'void doSmth(User[] users) {\n for (User user : users) {\n if (cond1(user)) {\n user.setId(getId());\n return;\n } else if (cond2(user)) {\n if (cond3(user)) {\n user.setId(getId());\n return;\n }\n }\n }\n }' Consider rewriting the method so it becomes easier to understand: 'void doSmth(User[] users) {\n for (User user : users) {\n if (cond1(user) || cond2(user) && cond3(user)) {\n user.setId(getId());\n return;\n }\n }\n }' Configure the inspection: Use the Return point limit field to specify the maximum allowed number of 'return' points for a method. Use the Ignore guard clauses option to ignore guard clauses. A guard clause is an 'if' statement that contains only a 'return' statement Use the Ignore for 'equals()' methods option to ignore 'return' points inside 'equals()' methods.", + "markdown": "Reports methods whose number of `return` points exceeds the specified maximum. Methods with too many `return` points may be confusing and hard to refactor.\n\nA `return` point is either a `return` statement or a falling through the bottom of a\n`void` method or constructor.\n\n**Example:**\n\nThe method below is reported if only two `return` statements are allowed:\n\n\n void doSmth(User[] users) {\n for (User user : users) {\n if (cond1(user)) {\n user.setId(getId());\n return;\n } else if (cond2(user)) {\n if (cond3(user)) {\n user.setId(getId());\n return;\n }\n }\n }\n }\n\nConsider rewriting the method so it becomes easier to understand:\n\n\n void doSmth(User[] users) {\n for (User user : users) {\n if (cond1(user) || cond2(user) && cond3(user)) {\n user.setId(getId());\n return;\n }\n }\n }\n\nConfigure the inspection:\n\n* Use the **Return point limit** field to specify the maximum allowed number of `return` points for a method.\n* Use the **Ignore guard clauses** option to ignore guard clauses. A guard clause is an `if` statement that contains only a `return` statement\n* Use the **Ignore for 'equals()' methods** option to ignore `return` points inside `equals()` methods." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Method metrics", + "index": 95, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousMethodCalls", + "shortDescription": { + "text": "Suspicious collection method call" + }, + "fullDescription": { + "text": "Reports method calls on parameterized collections, where the actual argument type does not correspond to the collection's elements type. Example: 'List list = getListOfElements();\n list.remove(\"\"); // remove is highlighted' In the inspection settings, you can disable warnings for potentially correct code like the following: 'public boolean accept(Map map, Object key) {\n return map.containsKey(key);\n }'", + "markdown": "Reports method calls on parameterized collections, where the actual argument type does not correspond to the collection's elements type.\n\n**Example:**\n\n\n List list = getListOfElements();\n list.remove(\"\"); // remove is highlighted\n\n\nIn the inspection settings, you can disable warnings for potentially correct code like the following:\n\n\n public boolean accept(Map map, Object key) {\n return map.containsKey(key);\n }\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Probable bugs", + "index": 13, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstantDeclaredInInterface", + "shortDescription": { + "text": "Constant declared in interface" + }, + "fullDescription": { + "text": "Reports constants ('public static final' fields) declared in interfaces. Some coding standards require declaring constants in abstract classes instead.", + "markdown": "Reports constants (`public static final` fields) declared in interfaces.\n\nSome coding standards require declaring constants in abstract classes instead." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class structure", + "index": 11, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ForwardCompatibility", + "shortDescription": { + "text": "Forward compatibility" + }, + "fullDescription": { + "text": "Reports Java code constructs that may fail to compile in future Java versions. The following problems are reported: Use of 'assert', 'enum' or '_' as an identifier Use of the 'var', 'yield', or 'record' restricted identifier as a type name Unqualified calls to the 'yield()' method Modifiers on the 'requires java.base' statement inside of 'module-info.java' Example: '// This previously legal class does not compile with Java 14,\n // as 'yield' became a restricted identifier.\n public class yield {}' Fixing these issues timely may simplify migration to future Java versions.", + "markdown": "Reports Java code constructs that may fail to compile in future Java versions.\n\nThe following problems are reported:\n\n* Use of `assert`, `enum` or `_` as an identifier\n* Use of the `var`, `yield`, or `record` restricted identifier as a type name\n* Unqualified calls to the `yield()` method\n* Modifiers on the `requires java.base` statement inside of `module-info.java`\n\n**Example:**\n\n\n // This previously legal class does not compile with Java 14,\n // as 'yield' became a restricted identifier.\n public class yield {} \n\nFixing these issues timely may simplify migration to future Java versions." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level issues", + "index": 60, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DiamondCanBeReplacedWithExplicitTypeArguments", + "shortDescription": { + "text": "Diamond can be replaced with explicit type arguments" + }, + "fullDescription": { + "text": "Reports instantiation of generic classes in which the <> symbol (diamond) is used instead of type parameters. The quick-fix replaces <> (diamond) with explicit type parameters. Example: 'List list = new ArrayList<>()' After the quick-fix is applied: 'List list = new ArrayList()' Diamond operation appeared in Java 7. This inspection can help to downgrade for backward compatibility with earlier Java versions.", + "markdown": "Reports instantiation of generic classes in which the **\\<\\>** symbol (diamond) is used instead of type parameters.\n\nThe quick-fix replaces **\\<\\>** (diamond) with explicit type parameters.\n\nExample:\n\n List list = new ArrayList<>()\n\nAfter the quick-fix is applied:\n\n List list = new ArrayList()\n\n\n*Diamond operation* appeared in Java 7.\nThis inspection can help to downgrade for backward compatibility with earlier Java versions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Code style issues", + "index": 12, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseOfProcessBuilder", + "shortDescription": { + "text": "Use of 'java.lang.ProcessBuilder' class" + }, + "fullDescription": { + "text": "Reports uses of 'java.lang.ProcessBuilder', which might be unportable between operating systems because paths to executables, environment variables, command-line arguments and their escaping might vary depending on the OS.", + "markdown": "Reports uses of `java.lang.ProcessBuilder`, which might be unportable between operating systems because paths to executables, environment variables, command-line arguments and their escaping might vary depending on the OS." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Portability", + "index": 7, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaRequiresAutoModule", + "shortDescription": { + "text": "Dependencies on automatic modules" + }, + "fullDescription": { + "text": "Reports usages of automatic modules in a 'requires' directive. An automatic module is unreliable since it can depend on the types on the class path, and its name and exported packages can change if it's converted into an explicit module. Corresponds to '-Xlint:requires-automatic' and '-Xlint:requires-transitive-automatic' Javac options. The first option increases awareness of when automatic modules are used. The second warns the authors of a module that they're putting the users of that module at risk by establishing implied readability to an automatic module. Example: '//module-info.java\n module org.printer {\n requires transitive drivers.corp.org; // reported in case 'drivers.corp.org' is an automatic module\n }' Use the Highlight only transitive dependencies option to warn only about transitive dependencies.", + "markdown": "Reports usages of automatic modules in a `requires` directive.\n\nAn automatic\nmodule is unreliable since it can depend on the types on the class path,\nand its name and exported packages can change if it's\nconverted into an explicit module.\n\nCorresponds to `-Xlint:requires-automatic` and `-Xlint:requires-transitive-automatic` Javac options.\nThe first option increases awareness of when automatic modules are used.\nThe second warns the authors of a module that they're putting the users of that module at risk by establishing implied readability to an automatic module.\n\n**Example:**\n\n\n //module-info.java\n module org.printer {\n requires transitive drivers.corp.org; // reported in case 'drivers.corp.org' is an automatic module\n }\n\n\nUse the **Highlight only transitive dependencies** option to warn only about transitive dependencies." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 9", + "index": 76, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExcessiveRangeCheck", + "shortDescription": { + "text": "Excessive range check" + }, + "fullDescription": { + "text": "Reports condition chains in which a value range is checked and these condition chains can be simplified to a single check. The quick-fix replaces a condition chain with a simplified expression: Example: 'x > 2 && x < 4' After the quick-fix is applied: 'x == 3' Example: 'arr.length == 0 || arr.length > 1' After the quick-fix is applied: 'arr.length != 1' New in 2019.1", + "markdown": "Reports condition chains in which a value range is checked and these condition chains can be simplified to a single check.\n\nThe quick-fix replaces a condition chain with a simplified expression:\n\nExample:\n\n\n x > 2 && x < 4\n\nAfter the quick-fix is applied:\n\n\n x == 3\n\nExample:\n\n\n arr.length == 0 || arr.length > 1\n\nAfter the quick-fix is applied:\n\n\n arr.length != 1\n\nNew in 2019.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Verbose or redundant code constructs", + "index": 39, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReplaceNullCheck", + "shortDescription": { + "text": "Null check can be replaced with method call" + }, + "fullDescription": { + "text": "Reports 'null' checks that can be replaced with a call to a static method from 'Objects' or 'Stream'. Example: 'if (message == null) {\n application.messageStorage().save(new EmptyMessage());\n } else {\n application.messageStorage().save(message);\n }' After the quick-fix is applied: 'application.messageStorage()\n .save(Objects.requireNonNullElseGet(message, () -> new EmptyMessage()));' Use the Don't warn if the replacement is longer than the original option to ignore the cases when the replacement is longer than the original code. New in 2017.3", + "markdown": "Reports `null` checks that can be replaced with a call to a static method from `Objects` or `Stream`.\n\n**Example:**\n\n\n if (message == null) {\n application.messageStorage().save(new EmptyMessage());\n } else {\n application.messageStorage().save(message);\n }\n\nAfter the quick-fix is applied:\n\n\n application.messageStorage()\n .save(Objects.requireNonNullElseGet(message, () -> new EmptyMessage()));\n\n\nUse the **Don't warn if the replacement is longer than the original** option to ignore the cases when the replacement is longer than the\noriginal code.\n\nNew in 2017.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 9", + "index": 76, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StaticImport", + "shortDescription": { + "text": "Static import" + }, + "fullDescription": { + "text": "Reports 'import static' statements. Such 'import' statements are not supported under Java 1.4 or earlier JVMs. Configure the inspection: Use the table below to specify the classes that will be ignored by the inspection when used in an 'import static' statement. Use the Ignore single field static imports checkbox to ignore single-field 'import static' statements. Use the Ignore single method static imports checkbox to ignore single-method 'import static' statements.", + "markdown": "Reports `import static` statements.\n\nSuch `import` statements are not supported under Java 1.4 or earlier JVMs.\n\nConfigure the inspection:\n\n* Use the table below to specify the classes that will be ignored by the inspection when used in an `import static` statement.\n* Use the **Ignore single field static imports** checkbox to ignore single-field `import static` statements.\n* Use the **Ignore single method static imports** checkbox to ignore single-method `import static` statements." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Imports", + "index": 22, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NoExplicitFinalizeCalls", + "shortDescription": { + "text": "'finalize()' called explicitly" + }, + "fullDescription": { + "text": "Reports calls to 'Object.finalize()'. Calling 'Object.finalize()' explicitly may result in objects being placed in an inconsistent state. The garbage collector automatically calls this method on an object when it determines that there are no references to this object. The inspection doesn't report calls to 'super.finalize()' from within implementations of 'finalize()' as they're benign. Example: 'MyObject m = new MyObject();\n m.finalize();\n System.gc()'", + "markdown": "Reports calls to `Object.finalize()`.\n\nCalling `Object.finalize()` explicitly may result in objects being placed in an\ninconsistent state.\nThe garbage collector automatically calls this method on an object when it determines that there are no references to this object.\n\nThe inspection doesn't report calls to `super.finalize()` from within implementations of `finalize()` as\nthey're benign.\n\n**Example:**\n\n\n MyObject m = new MyObject();\n m.finalize();\n System.gc()\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Finalization", + "index": 62, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NegatedIfElse", + "shortDescription": { + "text": "'if' statement with negated condition" + }, + "fullDescription": { + "text": "Reports 'if' statements that contain 'else' branches and whose conditions are negated. Flipping the order of the 'if' and 'else' branches usually increases the clarity of such statements. There is a fix that inverts the current 'if' statement. Example: 'void m(Object o1, Object o2) {\n if (o1 != o2) {\n System.out.println(1);\n }\n else {\n System.out.println(2);\n }\n }' After applying the quick-fix: 'void m(Object o1, Object o2) {\n if (o1 == o2) {\n System.out.println(2);\n } else {\n System.out.println(1);\n }\n }' Use the Ignore '!= null' comparisons option to ignore comparisons of the '!= null' form. Use the Ignore '!= 0' comparisons option to ignore comparisons of the '!= 0' form.", + "markdown": "Reports `if` statements that contain `else` branches and whose conditions are negated.\n\nFlipping the order of the `if` and `else`\nbranches usually increases the clarity of such statements.\n\nThere is a fix that inverts the current `if` statement.\n\nExample:\n\n\n void m(Object o1, Object o2) {\n if (o1 != o2) {\n System.out.println(1);\n }\n else {\n System.out.println(2);\n }\n }\n\nAfter applying the quick-fix:\n\n\n void m(Object o1, Object o2) {\n if (o1 == o2) {\n System.out.println(2);\n } else {\n System.out.println(1);\n }\n }\n\nUse the **Ignore '!= null' comparisons** option to ignore comparisons of the `!= null` form.\n\nUse the **Ignore '!= 0' comparisons** option to ignore comparisons of the `!= 0` form." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Control flow issues", + "index": 26, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FieldCount", + "shortDescription": { + "text": "Class with too many fields" + }, + "fullDescription": { + "text": "Reports classes whose number of fields exceeds the specified maximum. Classes with a large number of fields are often trying to do too much. Consider splitting such a class into multiple smaller classes. Configure the inspection: Use the Field count limit field to specify the maximum allowed number of fields in a class. Use the Include constant fields in count option to indicate whether constant fields should be counted. By default only immutable 'static final' objects are counted as constants. Use the 'static final' fields count as constant option to count any 'static final' field as constant. Use the Include enum constants in count option to specify whether 'enum' constants in 'enum' classes should be counted.", + "markdown": "Reports classes whose number of fields exceeds the specified maximum.\n\nClasses with a large number of fields are often trying to do too much. Consider splitting such a class into multiple smaller classes.\n\nConfigure the inspection:\n\n* Use the **Field count limit** field to specify the maximum allowed number of fields in a class.\n* Use the **Include constant fields in count** option to indicate whether constant fields should be counted.\n* By default only immutable `static final` objects are counted as constants. Use the **'static final' fields count as constant** option to count any `static final` field as constant.\n* Use the **Include enum constants in count** option to specify whether `enum` constants in `enum` classes should be counted." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Class metrics", + "index": 87, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StringConcatenation", + "shortDescription": { + "text": "String concatenation" + }, + "fullDescription": { + "text": "Reports 'String' concatenations. Concatenation might be incorrect in an internationalized environment and could be replaced by usages of 'java.text.MessageFormat' or similar classes.", + "markdown": "Reports `String` concatenations. Concatenation might be incorrect in an internationalized environment and could be replaced by usages of `java.text.MessageFormat` or similar classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 9, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClassCanBeRecord", + "shortDescription": { + "text": "Class can be a record" + }, + "fullDescription": { + "text": "Suggests replacing classes with records. The inspection can be useful if you need to focus on modeling immutable data rather than extensible behavior. Automatic implementation of data-driven methods, such as equals and accessors, helps to get rid of boilerplate. Note that not every class can be a record. Here are some of the restrictions: A class must contain no inheritors and must be a top-level class. All the non-static fields in class must be final. Class must contain no instance initializers, generic constructors, nor native methods. To get a full list of the restrictions, refer to the Oracle documentation. Example: 'class Point {\n private final double x;\n private final double y;\n\n Point(double x, double y) {\n this.x = x;\n this.y = y;\n }\n\n double getX() {\n return x;\n }\n\n double getY() {\n return y;\n }\n }' After the quick-fix is applied: 'record Point(int x, int y) {\n }' Enable the Suggest renaming get/is-accessors option to allow renaming 'getX()'/'isX()' accessors to 'x()' automatically. Use the When conversion makes a member more accessible options to specify if the conversion may violate class encapsulation: Choose Do not suggest conversion option to never violate class encapsulation Choose Show affected members in conflicts view option to apply conversion with notification about encapsulation violation issues Choose Convert silently option to apply conversion silently whether encapsulation violation issues exist or not Use the Suppress conversion if class is annotated by list to exclude classes from conversion when annotated by annotations matching the specified patterns. This inspection only reports if the language level of the project or module is 16 or higher. New in 2020.3", + "markdown": "Suggests replacing classes with records.\n\nThe inspection can be useful if you need to focus on modeling immutable data rather than extensible behavior.\nAutomatic implementation of data-driven methods, such as equals and accessors, helps to get rid of boilerplate.\n\n\nNote that not every class can be a record. Here are some of the restrictions:\n\n* A class must contain no inheritors and must be a top-level class.\n* All the non-static fields in class must be final.\n* Class must contain no instance initializers, generic constructors, nor native methods.\n\nTo get a full list of the restrictions, refer to the\n[Oracle documentation](https://docs.oracle.com/javase/specs/jls/se15/preview/specs/records-jls.html).\n\nExample:\n\n\n class Point {\n private final double x;\n private final double y;\n\n Point(double x, double y) {\n this.x = x;\n this.y = y;\n }\n\n double getX() {\n return x;\n }\n\n double getY() {\n return y;\n }\n }\n\nAfter the quick-fix is applied:\n\n\n record Point(int x, int y) {\n }\n\nEnable the **Suggest renaming get/is-accessors** option to allow renaming `getX()`/`isX()` accessors to `x()` automatically.\n\n\nUse the **When conversion makes a member more accessible** options to specify if the conversion may violate class encapsulation:\n\n* Choose **Do not suggest conversion** option to never violate class encapsulation\n* Choose **Show affected members in conflicts view** option to apply conversion with notification about encapsulation violation issues\n* Choose **Convert silently** option to apply conversion silently whether encapsulation violation issues exist or not\n\nUse the **Suppress conversion if class is annotated by** list to exclude classes from conversion when annotated by annotations matching the specified patterns.\n\nThis inspection only reports if the language level of the project or module is 16 or higher.\n\nNew in 2020.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Java language level migration aids/Java 16", + "index": 111, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConstantAssertArgument", + "shortDescription": { + "text": "Constant assert argument" + }, + "fullDescription": { + "text": "Reports constant arguments in 'assertTrue()', 'assertFalse()', 'assertNull()', and 'assertNotNull()' calls. Calls to these methods with constant arguments will either always succeed or always fail. Such statements can easily be left over after refactoring and are probably not intended. Example: 'assertNotNull(\"foo\");'", + "markdown": "Reports constant arguments in `assertTrue()`, `assertFalse()`, `assertNull()`, and `assertNotNull()` calls.\n\n\nCalls to these methods with\nconstant arguments will either always succeed or always fail.\nSuch statements can easily be left over after refactoring and are probably not intended.\n\n**Example:**\n\n\n assertNotNull(\"foo\");\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Test frameworks", + "index": 96, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "org.intellij.groovy", + "version": "223.8787", + "rules": [ + { + "id": "GroovyListSetCanBeKeyedAccess", + "shortDescription": { + "text": "Call to List.set can be keyed access" + }, + "fullDescription": { + "text": "Reports calls to 'java.util.List.set()' methods. Such calls could be replaced by the shorter and clearer keyed access form. Example: 'def list = [\"foo\"]\nlist.set(0, \"bar\") // list.set(0, \"bar\") could be replaced with list[0] = \"bar\"'\n After the quick-fix is applied: 'def list = [\"foo\"]\nlist[0] = \"bar\"'", + "markdown": "Reports calls to `java.util.List.set()` methods. Such calls could be replaced by the shorter and clearer keyed access form.\n\n**Example:**\n\n\n def list = [\"foo\"]\n list.set(0, \"bar\") // list.set(0, \"bar\") could be replaced with list[0] = \"bar\"\n\nAfter the quick-fix is applied:\n\n\n def list = [\"foo\"]\n list[0] = \"bar\"\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/GPath", + "index": 20, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyConstantNamingConvention", + "shortDescription": { + "text": "Constant naming convention" + }, + "fullDescription": { + "text": "Reports constant with names which don't match the specified convention. Constants are fields of immutable type declared with 'static' and 'final' modifiers. Reports constants whose names are either too short, too long, or do not follow the specified regular expression pattern. Configure the inspection: Use the Pattern field to specify 'java.util.regex.Pattern' which a constant name is expected to match. Use the Min length field to specify the minimum length of a constant name. Use the Max length field to specify the maximum length of a constant name.", + "markdown": "Reports constant with names which don't match the specified convention.\n\nConstants are fields of immutable type declared with `static` and `final` modifiers.\nReports constants whose names are either too short, too long, or do not follow the specified regular expression pattern.\n\nConfigure the inspection:\n\n* Use the **Pattern** field to specify `java.util.regex.Pattern` which a constant name is expected to match.\n* Use the **Min length** field to specify the minimum length of a constant name.\n* Use the **Max length** field to specify the maximum length of a constant name." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Naming conventions", + "index": 37, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyThreadStopSuspendResume", + "shortDescription": { + "text": "Call to Thread.stop(), Thread.suspend(), or Thread.resume()" + }, + "fullDescription": { + "text": "Reports calls to 'Thread.stop()','Thread.suspend()', or 'Thread.resume()'. These calls are inherently prone to data corruption and deadlock, and their use is strongly discouraged.", + "markdown": "Reports calls to `Thread.stop()`,`Thread.suspend()`, or `Thread.resume()`.\n\n\nThese calls are inherently prone to data corruption and deadlock, and their use is strongly\ndiscouraged." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 40, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyContinueOrBreakFromFinallyBlock", + "shortDescription": { + "text": "'continue' or 'break' from 'finally' block" + }, + "fullDescription": { + "text": "Reports 'break' and 'continue' statements inside of 'finally' blocks. While occasionally intended, such statements are very confusing, may mask thrown exceptions, and tremendously complicate debugging.", + "markdown": "Reports `break` and `continue` statements inside of `finally` blocks.\n\nWhile occasionally intended, such statements are very confusing, may mask thrown exceptions, and tremendously complicate debugging." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Error handling", + "index": 43, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyInArgumentCheck", + "shortDescription": { + "text": "Incompatible 'in' argument types" + }, + "fullDescription": { + "text": "Reports usages of membership operator 'in' with items and containers of incompatible types. Example: 'def list = [1, 2]\nif (\"foo\" in list) {} // list of Integers can't contain String'", + "markdown": "Reports usages of membership operator `in` with items and containers of incompatible types.\n\n**Example:**\n\n\n def list = [1, 2]\n if (\"foo\" in list) {} // list of Integers can't contain String\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 52, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyMapPutCanBeKeyedAccess", + "shortDescription": { + "text": "Call to Map.put can be keyed access" + }, + "fullDescription": { + "text": "Reports calls to 'java.util.Map.put()' methods. Such calls could be replaced by the shorter and clearer keyed access form. Example: 'def map = [\"foo\": \"bar\"]\nmap.put(\"foo\", \"baz\") // map.put(\"foo\", \"baz\") could be replaced with map[\"foo\"] = \"baz\"'\n After the quick-fix is applied: 'def map = [\"foo\": \"bar\"]\nmap[\"foo\"] = \"baz\"'", + "markdown": "Reports calls to `java.util.Map.put()` methods. Such calls could be replaced by the shorter and clearer keyed access form.\n\n**Example:**\n\n\n def map = [\"foo\": \"bar\"]\n map.put(\"foo\", \"baz\") // map.put(\"foo\", \"baz\") could be replaced with map[\"foo\"] = \"baz\"\n\nAfter the quick-fix is applied:\n\n\n def map = [\"foo\": \"bar\"]\n map[\"foo\"] = \"baz\"\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/GPath", + "index": 20, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyAssignmentToMethodParameter", + "shortDescription": { + "text": "Assignment to method parameter" + }, + "fullDescription": { + "text": "Reports assignment to method parameters. While occasionally intended, this construct can be extremely confusing, and is often the result of a typo. Example: 'def m(a, b, c) {\n a = [] // warning\n }'", + "markdown": "Reports assignment to method parameters.\n\nWhile occasionally intended, this construct can be extremely confusing, and is often the result of a typo.\n\n**Example:**\n\n\n def m(a, b, c) {\n a = [] // warning\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Assignment issues", + "index": 63, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyStaticMethodNamingConvention", + "shortDescription": { + "text": "Static method naming convention" + }, + "fullDescription": { + "text": "Reports static methods whose names are too short, too long, or do not follow the specified regular expression pattern. Use the fields provided below to specify minimum length, maximum length and regular expression expected for static method names. Regular expressions should be specified in the standard 'java.util.regex' format.", + "markdown": "Reports static methods whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n\nUse the fields provided below to specify minimum length, maximum length and regular expression expected for static method names.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Naming conventions", + "index": 37, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyTrivialIf", + "shortDescription": { + "text": "Redundant 'if' statement" + }, + "fullDescription": { + "text": "Reports 'if' statements which can be simplified to single assignment or 'return' statements. Example: 'if (foo())\n return true;\n else\n return false;' After the quick-fix is applied: 'return foo();'", + "markdown": "Reports `if` statements which can be simplified to single assignment or `return` statements.\n\n**Example:**\n\n\n if (foo())\n return true;\n else\n return false;\n\nAfter the quick-fix is applied:\n\n\n return foo();\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 68, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyPointlessArithmetic", + "shortDescription": { + "text": "Pointless arithmetic expression" + }, + "fullDescription": { + "text": "Reports pointless arithmetic expressions. Such expressions include adding or subtracting zero, multiplying by zero or one, division by one, and shift by zero. Such expressions may be the result of automated refactorings not completely followed through to completion, and in any case are unlikely to be what the developer intended to do. Example: 'a + 0' After the quick-fix is applied: 'a'", + "markdown": "Reports pointless arithmetic expressions.\n\n\nSuch expressions include adding or subtracting zero, multiplying by zero or one,\ndivision by one, and shift by zero. Such expressions may be the result of automated refactorings\nnot completely followed through to completion, and in any case are unlikely to be what the developer\nintended to do.\n\n**Example:**\n\n\n a + 0\n\nAfter the quick-fix is applied:\n\n\n a\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 70, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyAccessibility", + "shortDescription": { + "text": "Inaccessible element" + }, + "fullDescription": { + "text": "Reports references which exceed access rights. Access to private members breaks encapsulation.", + "markdown": "Reports references which exceed access rights.\n\nAccess to private members breaks encapsulation." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 52, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyDoubleCheckedLocking", + "shortDescription": { + "text": "Double-checked locking" + }, + "fullDescription": { + "text": "Reports double-checked locking. Double-checked locking tries to initialize a field on demand and in a thread-safe manner, while avoiding the cost of synchronization. Unfortunately it is not thread-safe when used on a field that is not declared 'volatile'. When using Java 1.4 or earlier, double-checked locking doesn't work even with a 'volatile' field. Read the article linked above for a detailed explanation of the problem. Example: 'class Foo {\n private Helper helper = null\n\n Helper getHelper() {\n if (helper == null)\n synchronized(this) {\n if (helper == null) {\n helper = new Helper()\n }\n }\n }\n return helper;\n }\n }'", + "markdown": "Reports [double-checked locking](https://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html).\n\n\nDouble-checked locking tries to initialize a field on demand and in a thread-safe manner, while avoiding the cost of synchronization.\nUnfortunately it is not thread-safe when used on a field that is not declared `volatile`.\nWhen using Java 1.4 or earlier, double-checked locking doesn't work even with a `volatile` field.\nRead the article linked above for a detailed explanation of the problem.\n\n**Example:**\n\n\n class Foo {\n private Helper helper = null\n\n Helper getHelper() {\n if (helper == null)\n synchronized(this) {\n if (helper == null) {\n helper = new Helper()\n }\n }\n }\n return helper;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 40, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyFallthrough", + "shortDescription": { + "text": "Fallthrough in 'switch' statement" + }, + "fullDescription": { + "text": "Reports fallthrough in switch statements. While occasionally useful, fallthrough is often unintended, and may lead to surprising bugs. Example: 'switch(n) {\n case 1:\n print 1\n case 2: // \"case 1\" fallthrough to \"case 2\". Statements from \"case 2\" will be executed immediately after \"case 1\".\n print 2\n break\n default:\n print \"Default\"\n}'", + "markdown": "Reports *fallthrough* in switch statements. While occasionally useful, fallthrough is often unintended, and may lead to surprising bugs.\n\n**Example:**\n\n\n switch(n) {\n case 1:\n print 1\n case 2: // \"case 1\" fallthrough to \"case 2\". Statements from \"case 2\" will be executed immediately after \"case 1\".\n print 2\n break\n default:\n print \"Default\"\n }\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 68, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyLocalVariableNamingConvention", + "shortDescription": { + "text": "Local variable naming convention" + }, + "fullDescription": { + "text": "Reports local variables whose names are too short, too long, or do not follow the specified regular expression pattern. Use the fields provided below to specify minimum length, maximum length and regular expression expected for local variables names. Regular expressions should be specified in the standard 'java.util.regex' format.", + "markdown": "Reports local variables whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n\nUse the fields provided below to specify minimum length, maximum length and regular expression expected for local variables names.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Naming conventions", + "index": 37, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyIfStatementWithIdenticalBranches", + "shortDescription": { + "text": "If statement with identical branches" + }, + "fullDescription": { + "text": "Reports 'if' statements with identical \"then\" and 'else' branches. Such statements are almost certainly programmer error. Example: 'if (condition) {\n print \"foo\"\n} else {\n print \"foo\"\n}'\n After the quick-fix is applied: 'print \"foo\"'", + "markdown": "Reports `if` statements with identical \"then\" and `else` branches. Such statements are almost certainly programmer error.\n\n**Example:**\n\n\n if (condition) {\n print \"foo\"\n } else {\n print \"foo\"\n }\n\nAfter the quick-fix is applied:\n\n\n print \"foo\"\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 68, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyUncheckedAssignmentOfMemberOfRawType", + "shortDescription": { + "text": "Unchecked assignment from members of raw type" + }, + "fullDescription": { + "text": "Reports unchecked assignments from members of raw type. Example: 'List list = new ArrayList()\n List<String> a = list.get(0)'", + "markdown": "Reports unchecked assignments from members of raw type.\n\n**Example:**\n\n\n List list = new ArrayList()\n List<String> a = list.get(0)\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Assignment issues", + "index": 63, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyNonShortCircuitBoolean", + "shortDescription": { + "text": "Non short-circuit boolean" + }, + "fullDescription": { + "text": "Reports the non-short-circuit forms of boolean operators 'and' and 'or' ( '&' and '|' ). The non-short-circuit versions are occasionally useful, but their presence is often due to typos of the short-circuit forms ( '&&' and '||' ), and may lead to subtle bugs. Example: 'if (a & b) {}' After the quick-fix is applied: 'if (a && b) {}'", + "markdown": "Reports the non-short-circuit forms of boolean operators 'and' and 'or' ( `&` and `|` ).\n\n\nThe non-short-circuit versions are occasionally useful, but\ntheir presence is often due to typos of the short-circuit forms ( `&&`\nand `||` ), and may lead to subtle bugs.\n\n**Example:**\n\n\n if (a & b) {}\n\nAfter the quick-fix is applied:\n\n\n if (a && b) {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 52, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrMethodMayBeStatic", + "shortDescription": { + "text": "Method can be made 'static'" + }, + "fullDescription": { + "text": "Reports methods which may safely be made 'static'. A method may be 'static' if it is not 'synchronized', it does not reference any of its class' instance methods and instance fields, and it is not overridden in a subclass.", + "markdown": "Reports methods which may safely be made `static`.\n\n\nA method may be `static` if it is not `synchronized`,\nit does not reference any of its class' instance methods and instance fields,\nand it is not overridden in a subclass." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Other", + "index": 79, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyDivideByZero", + "shortDescription": { + "text": "Division by zero" + }, + "fullDescription": { + "text": "Reports divisions by zero or remainders by zero. Example: 'def a = 42\n a / 0 // warning\n a % 0.0 // warning'", + "markdown": "Reports divisions by zero or remainders by zero.\n\n**Example:**\n\n\n def a = 42\n a / 0 // warning\n a % 0.0 // warning\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 52, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JavaStylePropertiesInvocation", + "shortDescription": { + "text": "Java-style property access" + }, + "fullDescription": { + "text": "Reports properties accessed via method calls. Example: 'class Foo {\n int foo\n }\n\n def bar = new Foo()\n print(bar.getFoo())' After the quick-fix is applied: 'class Foo {\n int foo\n }\n\n def bar = new Foo()\n print(bar.foo)'", + "markdown": "Reports properties accessed via method calls.\n\n**Example:**\n\n\n class Foo {\n int foo\n }\n\n def bar = new Foo()\n print(bar.getFoo())\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n int foo\n }\n\n def bar = new Foo()\n print(bar.foo)\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Style", + "index": 81, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyTrivialConditional", + "shortDescription": { + "text": "Redundant conditional expression" + }, + "fullDescription": { + "text": "Reports ternary conditional operators of the form 'x ? true : false' or similar, which can be trivially simplified. Example: 'foo() ? true : false' After the quick-fix is applied: 'foo()'", + "markdown": "Reports ternary conditional operators of the form `x ? true : false` or similar, which can be trivially simplified.\n\n**Example:**\n\n\n foo() ? true : false\n\nAfter the quick-fix is applied:\n\n\n foo()\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 68, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrUnnecessarySemicolon", + "shortDescription": { + "text": "Unnecessary semicolon" + }, + "fullDescription": { + "text": "Reports unnecessary semicolons. Example: 'print 2; print 3 // semicolon is required\n print 2; // semicolon is unnecessary'", + "markdown": "Reports unnecessary semicolons.\n\n**Example:**\n\n\n print 2; print 3 // semicolon is required\n print 2; // semicolon is unnecessary\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Style", + "index": 81, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrFinalVariableAccess", + "shortDescription": { + "text": "Final variable access" + }, + "fullDescription": { + "text": "Reports uninitialized final fields, invalid assignments to final variables, and parameters and fields.", + "markdown": "Reports uninitialized final fields, invalid assignments to final variables, and parameters and fields." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 68, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ChangeToMethod", + "shortDescription": { + "text": "Operator invocation can be replaced with method call" + }, + "fullDescription": { + "text": "Reports operator invocations that can be replaced with method calls. Example: 'a + b' After the quick-fix is applied: 'a.plus(b)'", + "markdown": "Reports operator invocations that can be replaced with method calls.\n\n**Example:**\n\n\n a + b\n\nAfter the quick-fix is applied:\n\n\n a.plus(b)\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Style", + "index": 81, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnnecessaryQualifiedReference", + "shortDescription": { + "text": "Unnecessary qualified reference" + }, + "fullDescription": { + "text": "Reports fully qualified references, which can be replaced with import. Example: 'def swingBuilder = new groovy.swing.SwingBuilder()' After the quick-fix is applied: 'import groovy.swing.SwingBuilder\n \n def swingBuilder = new SwingBuilder()'", + "markdown": "Reports fully qualified references, which can be replaced with import.\n\n**Example:**\n\n\n def swingBuilder = new groovy.swing.SwingBuilder()\n\nAfter the quick-fix is applied:\n\n\n import groovy.swing.SwingBuilder\n \n def swingBuilder = new SwingBuilder()\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 70, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyBreak", + "shortDescription": { + "text": "'break' statement" + }, + "fullDescription": { + "text": "Reports 'break' statements outside of 'switch' statements.", + "markdown": "Reports `break` statements outside of `switch` statements." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 68, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DelegatesTo", + "shortDescription": { + "text": "@DelegatesTo" + }, + "fullDescription": { + "text": "Reports unused '@DelegatesTo.Target' annotations and unresolved '@DelegatedTo.target' annotation attribute values. Example: '// unused target 't1' and unresolved target 't2'\n def m(\n @DelegatesTo.Target('t1') target,\n @DelegatesTo(target = 't2') Closure c\n ) {}'", + "markdown": "Reports unused `@DelegatesTo.Target` annotations and unresolved `@DelegatedTo.target` annotation attribute values.\n\n**Example:**\n\n\n // unused target 't1' and unresolved target 't2'\n def m(\n @DelegatesTo.Target('t1') target,\n @DelegatesTo(target = 't2') Closure c\n ) {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Annotations", + "index": 91, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyConstantConditional", + "shortDescription": { + "text": "Constant conditional expression" + }, + "fullDescription": { + "text": "Reports conditional expressions with boolean constant as a condition. Example: 'true ? result1 : result2\n false ? result1 : result2'", + "markdown": "Reports conditional expressions with boolean constant as a condition.\n\n**Example:**\n\n\n true ? result1 : result2\n false ? result1 : result2\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 68, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyOverlyComplexArithmeticExpression", + "shortDescription": { + "text": "Overly complex arithmetic expression" + }, + "fullDescription": { + "text": "Reports arithmetic expressions with too many terms. Such expressions may be confusing and bug-prone. Use the Maximum number of terms field to specify the maximum number of terms allowed in an arithmetic expression.", + "markdown": "Reports arithmetic expressions with too many terms.\n\n\nSuch expressions may be confusing and bug-prone.\n\n\nUse the **Maximum number of terms** field to specify the maximum number of terms allowed in an arithmetic expression." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 70, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrSwitchExhaustivenessCheck", + "shortDescription": { + "text": "Exhaustiveness check for switch expressions" + }, + "fullDescription": { + "text": "Reports switch expressions that do not cover all possible outcomes of the matched expression. Groovy does not require that switch expression must be exhaustive. It acts as if an implicit 'default -> null' branch is inserted. It may cause unexpected nulls if a developer forgets to insert necessary 'case' branches. Example: 'enum A { X, Y }\n\n def foo(A a) {\n def x = switch (a) { // reports switch\n case A.X -> ...\n }\n }'", + "markdown": "Reports switch expressions that do not cover all possible outcomes of the matched expression.\n\n\nGroovy does not require that switch expression must be exhaustive. It acts as if an implicit `default -> null` branch is inserted.\nIt may cause unexpected nulls if a developer forgets to insert necessary `case` branches.\n\n**Example:**\n\n\n enum A { X, Y }\n\n def foo(A a) {\n def x = switch (a) { // reports switch\n case A.X -> ...\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 52, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyThrowFromFinallyBlock", + "shortDescription": { + "text": "'throw' inside 'finally' block" + }, + "fullDescription": { + "text": "Reports 'throw' statements inside of 'finally' blocks. While occasionally intended, such 'throw' statements may mask exceptions thrown and tremendously complicate debugging.", + "markdown": "Reports `throw` statements inside of `finally` blocks.\n\n\nWhile occasionally intended, such `throw` statements may mask exceptions thrown and\ntremendously complicate debugging." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Error handling", + "index": 43, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyAssignabilityCheck", + "shortDescription": { + "text": "Incompatible type assignments" + }, + "fullDescription": { + "text": "Reports assignments with incompatible types. Such assignments might result in various runtime exceptions. Example: 'class A {}\n class B {}\n\n // incompatible assignment\n A a = new B()'", + "markdown": "Reports assignments with incompatible types.\n\nSuch assignments might result in various runtime exceptions.\n\n**Example:**\n\n\n class A {}\n class B {}\n\n // incompatible assignment\n A a = new B()\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Assignment issues", + "index": 63, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ChangeToOperator", + "shortDescription": { + "text": "Method call can be replaced with operator invocation" + }, + "fullDescription": { + "text": "Reports method calls that can be replaced with operator invocations. Example: 'a.plus(b)' After the quick-fix is applied: 'a + b'", + "markdown": "Reports method calls that can be replaced with operator invocations.\n\n**Example:**\n\n\n a.plus(b)\n\nAfter the quick-fix is applied:\n\n\n a + b\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Style", + "index": 81, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyMapGetCanBeKeyedAccess", + "shortDescription": { + "text": "Call to Map.get can be keyed access" + }, + "fullDescription": { + "text": "Reports calls to 'java.util.Map.get()' methods. Such calls could be replaced by the shorter and clearer keyed access form. Example: 'def map = [\"foo\": \"bar\"]\ndef str = map.get(\"foo\") // map.get(\"foo\") could be replaced with map[\"foo\"]'\n After the quick-fix is applied: 'def map = [\"foo\": \"bar\"]\ndef str = map[\"foo\"]'", + "markdown": "Reports calls to `java.util.Map.get()` methods. Such calls could be replaced by the shorter and clearer keyed access form.\n\n**Example:**\n\n\n def map = [\"foo\": \"bar\"]\n def str = map.get(\"foo\") // map.get(\"foo\") could be replaced with map[\"foo\"]\n\nAfter the quick-fix is applied:\n\n\n def map = [\"foo\": \"bar\"]\n def str = map[\"foo\"]\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/GPath", + "index": 20, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyUntypedAccess", + "shortDescription": { + "text": "Untyped reference expression" + }, + "fullDescription": { + "text": "Reports reference expressions whose type can't be determined.", + "markdown": "Reports reference expressions whose type can't be determined." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 52, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyResultOfAssignmentUsed", + "shortDescription": { + "text": "Result of assignment used" + }, + "fullDescription": { + "text": "Reports assignment expressions nested inside other expressions to use the assigned value immediately. Such expressions may be confusing and violating the general design principle that a given construct should do precisely one thing.", + "markdown": "Reports assignment expressions nested inside other expressions to use the assigned value immediately.\n\n\nSuch expressions may be confusing and violating the general design principle that a\ngiven construct should do precisely one thing." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Assignment issues", + "index": 63, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyResultOfObjectAllocationIgnored", + "shortDescription": { + "text": "Result of object allocation ignored" + }, + "fullDescription": { + "text": "Reports object allocation where the result of this operation is ignored. Such allocation expressions are legal Groovy, but are usually either inadvertent, or evidence of a complicated object initialization strategy.", + "markdown": "Reports object allocation where the result of this operation is ignored.\n\n\nSuch allocation expressions are legal Groovy, but are usually either inadvertent, or\nevidence of a complicated object initialization strategy." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 52, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyNestedAssignment", + "shortDescription": { + "text": "Nested assignment" + }, + "fullDescription": { + "text": "Reports assignment expressions nested inside other expressions. While admirably terse, such expressions may be confusing, and violate the general design principle that a given construct should do precisely one thing. Example: 'a = b = 1'", + "markdown": "Reports assignment expressions nested inside other expressions. While admirably terse, such expressions may be confusing, and violate the general design principle that a given construct should do precisely one thing.\n\n**Example:**\n\n\n a = b = 1\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Assignment issues", + "index": 63, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyDocCheck", + "shortDescription": { + "text": "Unresolved GroovyDoc reference" + }, + "fullDescription": { + "text": "Reports unresolved references inside GroovyDoc comments.", + "markdown": "Reports unresolved references inside GroovyDoc comments." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 52, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyUnusedCatchParameter", + "shortDescription": { + "text": "Unused 'catch' parameter" + }, + "fullDescription": { + "text": "Reports catch parameters that are unused in their corresponding blocks. This inspection will not report any catch parameters named \"ignore\" or \"ignored\". Example: 'try {\n def arr = new int[3]\n arr[5] = 5\n } catch(Exception ex) {\n println('Catching the exception')\n }' Here the parameter ex is never used in catch block. After the quick-fix is applied: 'try {\n def arr = new int[3]\n arr[5] = 5\n } catch(Exception ignored) {\n println('Catching the exception')\n }'", + "markdown": "Reports **catch** parameters that are unused in their\ncorresponding blocks. This inspection will not report any **catch** parameters\nnamed \"ignore\" or \"ignored\".\n\n**Example:**\n\n\n try {\n def arr = new int[3]\n arr[5] = 5\n } catch(Exception ex) {\n println('Catching the exception')\n }\n\nHere the parameter **ex** is never used in **catch** block.\n\nAfter the quick-fix is applied:\n\n\n try {\n def arr = new int[3]\n arr[5] = 5\n } catch(Exception ignored) {\n println('Catching the exception')\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Error handling", + "index": 43, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyInstanceMethodNamingConvention", + "shortDescription": { + "text": "Instance method naming convention" + }, + "fullDescription": { + "text": "Reports instance methods whose names are too short, too long, or do not follow the specified regular expression pattern. Instance methods that override library methods are ignored by this inspection. Use the fields provided below to specify minimum length, maximum length and regular expression expected for instance method names. Regular expressions should be specified in the standard 'java.util.regex' format.", + "markdown": "Reports instance methods whose names are too short, too long, or do not follow the specified regular expression pattern. Instance methods that override library methods are ignored by this inspection.\n\n\nUse the fields provided below to specify minimum length, maximum length and regular expression expected for instance method names.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Naming conventions", + "index": 37, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovySynchronizedMethod", + "shortDescription": { + "text": "Synchronized method" + }, + "fullDescription": { + "text": "Reports the 'synchronized' modifier on methods. Some coding standards prohibit the use of the 'synchronized' modifier, in favor of 'synchronized' statements.", + "markdown": "Reports the `synchronized` modifier on methods.\n\n\nSome coding standards\nprohibit the use of the `synchronized` modifier, in favor of `synchronized` statements." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 40, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyUnconditionalWait", + "shortDescription": { + "text": "Unconditional 'wait' call" + }, + "fullDescription": { + "text": "Reports wait() being called unconditionally within a synchronized context. Normally, wait() is used to block a thread until some condition is true. If wait() is called unconditionally, that often indicates that the condition was checked before a lock was acquired. In that case, a data race may occur, with the condition becoming true between the time it was checked and the time the lock was acquired. While constructs found by this inspection are not necessarily incorrect, they are certainly worth examining.", + "markdown": "Reports **wait()**\nbeing called unconditionally within a synchronized context.\nNormally, **wait()** is\nused to block a thread until some condition is true. If **wait()**\nis called unconditionally, that often indicates that the condition was checked before a lock was\nacquired. In that case, a data race may occur, with the condition becoming true between the time\nit was checked and the time the lock was acquired. While constructs found by this inspection\nare not necessarily incorrect, they are certainly worth examining." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 40, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyContinue", + "shortDescription": { + "text": "'continue' statement" + }, + "fullDescription": { + "text": "Reports 'continue' statements.", + "markdown": "Reports `continue` statements." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 68, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyUnsynchronizedMethodOverridesSynchronizedMethod", + "shortDescription": { + "text": "Unsynchronized method overrides synchronized method" + }, + "fullDescription": { + "text": "Reports non-synchronized methods overriding synchronized methods. Example: 'abstract class Base {\n synchronized void foo() {\n // ...\n }\n }\n class Derived extends Base {\n @Override\n void foo() {\n super.foo()\n // ...\n }\n }' Here the non-synchronized method 'foo()' in class 'Bar' overrides synchronized method.", + "markdown": "Reports non-**synchronized** methods overriding **synchronized** methods.\n\n**Example:**\n\n\n abstract class Base {\n synchronized void foo() {\n // ...\n }\n }\n class Derived extends Base {\n @Override\n void foo() {\n super.foo()\n // ...\n }\n }\n\nHere the non-synchronized method `foo()` in class `Bar` overrides synchronized method." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 40, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyNegatedIf", + "shortDescription": { + "text": "Negated if condition expression" + }, + "fullDescription": { + "text": "Reports 'if' statements which contain 'else' branches and whose conditions are negated. Flipping the order of the 'if' and 'else' branches will usually increase the clarity of such statements. Example: 'if (!condition) {\n return \"1\"\n} else {\n return \"2\"\n}'", + "markdown": "Reports `if` statements which contain `else` branches and whose conditions are negated. Flipping the order of the `if` and `else` branches will usually increase the clarity of such statements.\n\n**Example:**\n\n\n if (!condition) {\n return \"1\"\n } else {\n return \"2\"\n }\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 70, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NewGroovyClassNamingConvention", + "shortDescription": { + "text": "Class naming convention" + }, + "fullDescription": { + "text": "Reports classes whose names are too short, too long, or do not follow the specified regular expression pattern. For each class type, specify the minimum length, maximum length, and the regular expression expected for class names using the provided input fields. Regular expressions should be specified in the standard 'java.util.regex' format.", + "markdown": "Reports classes whose names are too short, too long, or do not follow\nthe specified regular expression pattern.\n\nFor each class type, specify the minimum length, maximum length, and the regular expression expected for class names using the\nprovided input fields.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Naming conventions", + "index": 37, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClashingGetters", + "shortDescription": { + "text": "Clashing getters" + }, + "fullDescription": { + "text": "Reports boolean methods which can be accessed via the same property name. The result of accessing such property might be unexpected. Example: 'class X {\n boolean isFoo() { true }\n boolean getFoo() { false }\n }\n\n // getFoo() will be called\n new X().foo'", + "markdown": "Reports boolean methods which can be accessed via the same property name.\n\nThe result of accessing such property might be unexpected.\n\n**Example:**\n\n\n class X {\n boolean isFoo() { true }\n boolean getFoo() { false }\n }\n\n // getFoo() will be called\n new X().foo\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 70, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyDuplicateSwitchBranch", + "shortDescription": { + "text": "Duplicate switch case" + }, + "fullDescription": { + "text": "Reports duplicated expressions in 'case' labels for 'switch' statements. Example: 'switch (n) {\n case 1: //duplicate\n break\n case 1: //duplicate\n System.out.println(\"2\")\n break\n default:\n System.out.println(\"default\");\n}'", + "markdown": "Reports duplicated expressions in `case` labels for `switch` statements.\n\n**Example:**\n\n\n switch (n) {\n case 1: //duplicate\n break\n case 1: //duplicate\n System.out.println(\"2\")\n break\n default:\n System.out.println(\"default\");\n }\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Validity issues", + "index": 101, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovySwitchStatementWithNoDefault", + "shortDescription": { + "text": "Switch statement with no default case" + }, + "fullDescription": { + "text": "Reports 'switch' statements that do not contain 'default' labels. Some coding practices may insist on adding this label to all 'switch' statements.", + "markdown": "Reports `switch` statements that do not contain `default` labels.\n\n\nSome coding practices may insist on adding this label to all `switch` statements." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 68, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyListGetCanBeKeyedAccess", + "shortDescription": { + "text": "Call to List.get can be keyed access" + }, + "fullDescription": { + "text": "Reports calls to 'java.util.List.get()' methods. Such calls could be replaced by the shorter and clearer keyed access form. Example: 'def list = [\"foo\"]\ndef str = list.get(0) // list.get(0) could be replaced with list[0]'\n After the quick-fix is applied: 'def list = [\"foo\"]\ndef str = list[0]'", + "markdown": "Reports calls to `java.util.List.get()` methods. Such calls could be replaced by the shorter and clearer keyed access form.\n\n**Example:**\n\n\n def list = [\"foo\"]\n def str = list.get(0) // list.get(0) could be replaced with list[0]\n\nAfter the quick-fix is applied:\n\n\n def list = [\"foo\"]\n def str = list[0]\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/GPath", + "index": 20, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovySynchronizationOnThis", + "shortDescription": { + "text": "Synchronization on 'this'" + }, + "fullDescription": { + "text": "Reports synchronization which uses 'this' as its lock expression. Constructs reported include 'synchronized' blocks which lock 'this', and calls to 'wait()' 'notify()' or 'notifyAll()' which target 'wait()'. Such constructs, like synchronized methods, make it hard to track just who is locking on a given object, and make possible \"denial of service\" attacks on objects. As an alternative, consider locking on a private instance variable, access to which can be completely controlled.", + "markdown": "Reports synchronization which uses `this` as its lock expression.\n\n\nConstructs reported include `synchronized`\nblocks which lock `this`, and calls to `wait()`\n`notify()` or `notifyAll()` which target `wait()`.\nSuch constructs, like synchronized methods, make it hard to track just who is locking on a given\nobject, and make possible \"denial of service\" attacks on objects. As an alternative, consider\nlocking on a private instance variable, access to which can be completely controlled." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 40, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyNestedSynchronizedStatement", + "shortDescription": { + "text": "Nested 'synchronized' statement" + }, + "fullDescription": { + "text": "Reports nested 'synchronized' statements. Nested 'synchronized' statements are either redundant (if the lock objects are identical) or prone to deadlock.", + "markdown": "Reports nested `synchronized` statements.\n\n\nNested `synchronized` statements\nare either redundant (if the lock objects are identical) or prone to deadlock." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 40, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyGStringKey", + "shortDescription": { + "text": "GString map key" + }, + "fullDescription": { + "text": "Reports statements which use a 'groovy.lang.GString' object as a key to map. In general 'GString' objects are mutable and probably should not be used as keys. Also, a 'GString' entry cannot be accessed with a 'java.lang.String' object with same value. Example: 'def map = [:]\ndef key = 'foo'\nmap << [\"${key}\": 'bar']\nassert map[key] == null // confusing 'true' result of comparison'\n New in 2017.1", + "markdown": "Reports statements which use a `groovy.lang.GString` object as a key to map. In general `GString` objects are mutable and probably should not be used as keys. Also, a `GString` entry cannot be accessed with a `java.lang.String` object with same value.\n\n**Example:**\n\n\n def map = [:]\n def key = 'foo'\n map << [\"${key}\": 'bar']\n assert map[key] == null // confusing 'true' result of comparison\n\nNew in 2017.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 70, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NewInstanceOfSingleton", + "shortDescription": { + "text": "New instance of class annotated with @groovy.lang.Singleton" + }, + "fullDescription": { + "text": "Reports new instance creation of classes annotated with '@groovy.lang.Singleton'. Such constructions can lead to runtime exception Can't instantiate singleton. Example: '@Singleton\n class Foo{\n }\n \n Foo foo = new Foo()' After the quick-fix is applied: '@Singleton\n class Foo{\n }\n \n Foo foo = Foo.instance'", + "markdown": "Reports new instance creation of classes annotated with `@groovy.lang.Singleton`.\nSuch constructions can lead to runtime exception **Can't instantiate singleton**.\n\n**Example:**\n\n\n @Singleton\n class Foo{\n }\n \n Foo foo = new Foo()\n\nAfter the quick-fix is applied:\n\n\n @Singleton\n class Foo{\n }\n \n Foo foo = Foo.instance\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 70, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyVariableCanBeFinal", + "shortDescription": { + "text": "Variable can be final" + }, + "fullDescription": { + "text": "Reports parameters or local variables that may have a final modifier added. Example: 'def list = [1,2,3]\n return list' After the quick-fix is applied: 'final def list = [1,2,3]\n return list' For more information, see the same inspection in Java.", + "markdown": "Reports parameters or local variables that may have a final modifier added.\n\n**Example:**\n\n\n def list = [1,2,3]\n return list\n\nAfter the quick-fix is applied:\n\n\n final def list = [1,2,3]\n return list\n\nFor more information, see the same inspection in Java." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Data flow", + "index": 105, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyWaitCallNotInLoop", + "shortDescription": { + "text": "'wait()' not in loop" + }, + "fullDescription": { + "text": "Reports calls to 'wait()' not made inside a loop. 'wait()' is normally used to suspend a thread until a condition is true, and that condition should be checked after the 'wait()' returns. A loop is the clearest way to achieve this.", + "markdown": "Reports calls to `wait()` not made inside a loop.\n\n`wait()` is normally used to suspend a thread until a condition is true, and that condition should be checked after the `wait()`\nreturns. A loop is the clearest way to achieve this." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 40, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyUnnecessaryReturn", + "shortDescription": { + "text": "Unnecessary 'return' statement" + }, + "fullDescription": { + "text": "Reports 'return' statements at the end of constructors and methods returning 'void'. These are unnecessary and may be safely removed. Example: 'void foo (String s){\n print(s)\n return\n }' After the quick-fix is applied: 'void foo (String s){\n print(s)\n }' For more information, see the same inspection in Java.", + "markdown": "Reports `return` statements at the end of constructors and methods returning\n`void`. These are unnecessary and may be safely removed.\n\n**Example:**\n\n\n void foo (String s){\n print(s)\n return\n }\n\nAfter the quick-fix is applied:\n\n\n void foo (String s){\n print(s)\n }\n\nFor more information, see the same inspection in Java." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 68, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrReassignedInClosureLocalVar", + "shortDescription": { + "text": "Local variable is reassigned in closure or anonymous class" + }, + "fullDescription": { + "text": "Reports local variables assigned to expression with different type inside of closure or anonymous class. Example: 'int sum = 0\n [1, 2, 3].each { sum += 'as' }\n println(sum)' As a result, the 'integer' variable sum is reassigned to a 'String' expression.", + "markdown": "Reports local variables assigned to expression with different type inside of closure or anonymous class.\n\n**Example:**\n\n\n int sum = 0\n [1, 2, 3].each { sum += 'as' }\n println(sum)\n\nAs a result, the `integer` variable **sum** is reassigned to a `String` expression." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 70, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyMethodParameterCount", + "shortDescription": { + "text": "Method with too many parameters" + }, + "fullDescription": { + "text": "Reports methods with too many parameters. Method with too many parameters is a good sign that refactoring is necessary. Methods whose signatures are inherited from library classes are ignored by this inspection. Use the Maximum number of parameters: field to specify the maximum acceptable number of parameters a method might have.", + "markdown": "Reports methods with too many parameters. Method with too many parameters is a good sign that refactoring is necessary. Methods whose signatures are inherited from library classes are ignored by this inspection.\n\n\nUse the **Maximum number of parameters:** field to specify the maximum acceptable number of parameters a method might have." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Method metrics", + "index": 106, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyConditional", + "shortDescription": { + "text": "Ternary expression" + }, + "fullDescription": { + "text": "Reports ternary expressions. Some coding standards prohibit the use of the condition operator in favor of 'if' statements.", + "markdown": "Reports ternary expressions.\n\nSome coding standards prohibit the use of the condition operator in favor of `if` statements." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Style", + "index": 81, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyAccessToStaticFieldLockedOnInstance", + "shortDescription": { + "text": "Access to static field locked on instance data" + }, + "fullDescription": { + "text": "Reports accesses to a non-constant static field which is locked on either 'this' or an instance field of 'this'. Locking a static field on instance data does not prevent the field from being modified by other instances, and thus may result in surprising race conditions. Example: 'static String s;\n def foo() {\n synchronized (this) {\n System.out.println(s); // warning\n }\n }'", + "markdown": "Reports accesses to a non-constant static field which is locked on either `this` or an instance field of `this`.\n\n\nLocking a static field on instance data does not prevent the field from being\nmodified by other instances, and thus may result in surprising race conditions.\n\n**Example:**\n\n\n static String s;\n def foo() {\n synchronized (this) {\n System.out.println(s); // warning\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 40, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyNestedConditional", + "shortDescription": { + "text": "Nested conditional expression" + }, + "fullDescription": { + "text": "Reports ternary conditional expressions that are nested inside other conditional expressions. Such nested conditionals may be very confusing. \"Elvis\" expressions are counted as conditionals for purpose of this inspection. Example: 'return (condition ? \"result\" : null) ?: \"fail\"'", + "markdown": "Reports ternary conditional expressions that are nested inside other conditional expressions. Such nested conditionals may be very confusing. \"Elvis\" expressions are counted as conditionals for purpose of this inspection.\n\n**Example:**\n\n\n return (condition ? \"result\" : null) ?: \"fail\"\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 70, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyEmptyStatementBody", + "shortDescription": { + "text": "Statement with empty body" + }, + "fullDescription": { + "text": "Reports 'if', 'while', 'do' or 'for' statements with empty bodies. While occasionally intended, this construction is confusing, and often the result of a typo. Example: 'if (condition) {}\nwhile(true){}'", + "markdown": "Reports `if`, `while`, `do` or `for` statements with empty bodies. While occasionally intended, this construction is confusing, and often the result of a typo.\n\n**Example:**\n\n\n if (condition) {}\n while(true){}\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 70, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyLabeledStatement", + "shortDescription": { + "text": "Labeled statement inspection" + }, + "fullDescription": { + "text": "Reports labels already used in parent workflow. Example: 'def list = [\"foo\"]\ncycle:\nfor (element in list) {\n cycle: // confusing label repeat\n element.chars().forEach {\n }\n}'", + "markdown": "Reports labels already used in parent workflow.\n\n**Example:**\n\n\n def list = [\"foo\"]\n cycle:\n for (element in list) {\n cycle: // confusing label repeat\n element.chars().forEach {\n }\n }\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 52, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyAssignmentToForLoopParameter", + "shortDescription": { + "text": "Assignment to 'for' loop parameter" + }, + "fullDescription": { + "text": "Reports assignments to for loop parameters inside the for loop body. While occasionally intended, this construct can be extremely confusing, and is often the result of a typo. Example: 'for (value in [1, 2, 3]) {\n value = 4 // warning\n }'", + "markdown": "Reports assignments to **for** loop parameters inside the **for** loop body.\n\nWhile occasionally intended, this construct can be extremely confusing, and is often the result of a typo.\n\n**Example:**\n\n\n for (value in [1, 2, 3]) {\n value = 4 // warning\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Assignment issues", + "index": 63, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrUnnecessaryAlias", + "shortDescription": { + "text": "Unnecessary import alias" + }, + "fullDescription": { + "text": "Reports unnecessary import aliases. Example: 'import com.foo.Bar as Bar' After the quick-fix is applied: 'import com.foo.Bar'", + "markdown": "Reports unnecessary import aliases.\n\n**Example:**\n\n\n import com.foo.Bar as Bar\n\nAfter the quick-fix is applied:\n\n\n import com.foo.Bar\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Style", + "index": 81, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyAssignmentCanBeOperatorAssignment", + "shortDescription": { + "text": "Assignment can be replaced with operator assignment" + }, + "fullDescription": { + "text": "Reports assignments which can be replaced by an operator assignment. Example: 'a = a + b' After the quick-fix is applied: 'a += b' Configure the inspection: Use the Ignore conditional operators option to ignore '&&' and '||' operators. Use the Ignore obscure operators option to ignore '^' and '%' operators.", + "markdown": "Reports assignments which can be replaced by an operator assignment.\n\n**Example:**\n\n\n a = a + b\n\nAfter the quick-fix is applied:\n\n\n a += b\n\nConfigure the inspection:\n\n* Use the **Ignore conditional operators** option to ignore `&&` and `||` operators.\n* Use the **Ignore obscure operators** option to ignore `^` and `%` operators." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Assignment issues", + "index": 63, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyImplicitNullArgumentCall", + "shortDescription": { + "text": "Implicit null argument" + }, + "fullDescription": { + "text": "Reports calls with no arguments to method that has exactly one parameter. This is equivalent to call with 'null', and that behavior is often confusing and unintended. Example: 'def foo(String s){}\nfoo() // this call is actually 'foo(null)' call'", + "markdown": "Reports calls with no arguments to method that has exactly one parameter. This is equivalent to call with `null`, and that behavior is often confusing and unintended.\n\n**Example:**\n\n\n def foo(String s){}\n foo() // this call is actually 'foo(null)' call\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 70, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyReturnFromFinallyBlock", + "shortDescription": { + "text": "'return' inside 'finally' block" + }, + "fullDescription": { + "text": "Reports 'return' statements inside of 'finally' blocks. While occasionally intended, such 'return' statements may mask exceptions thrown, and complicate debugging.", + "markdown": "Reports `return` statements inside of `finally` blocks.\n\n\nWhile occasionally intended, such `return` statements may mask exceptions thrown, and\ncomplicate debugging." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Error handling", + "index": 43, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyConstructorNamedArguments", + "shortDescription": { + "text": "Named arguments of constructor call" + }, + "fullDescription": { + "text": "Reports named arguments of a default class constructor call which don't correspond to properties of this class. Example: 'class Person {\n def name\n def age\n }\n\n // 'firstName' property doesn't exist\n new Person(firstName: \"John\")'", + "markdown": "Reports named arguments of a default class constructor call which don't correspond to properties of this class.\n\n**Example:**\n\n\n class Person {\n def name\n def age\n }\n\n // 'firstName' property doesn't exist\n new Person(firstName: \"John\")\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 52, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyConditionalWithIdenticalBranches", + "shortDescription": { + "text": "Ternary expression with identical branches" + }, + "fullDescription": { + "text": "Reports ternary expressions with identical \"then\" and \"else\" branches. Such expressions are almost certainly a programmer error. The quick-fix replaces the expression with its \"then\" branch. Example: 'condition ? a.foo() : a.foo()' After the quick-fix is applied: 'a.foo()'", + "markdown": "Reports ternary expressions with identical \"then\" and \"else\" branches. Such expressions are almost certainly a programmer error.\n\nThe quick-fix replaces the expression with its \"then\" branch.\n\n**Example:**\n\n\n condition ? a.foo() : a.foo()\n\nAfter the quick-fix is applied:\n\n\n a.foo()\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 68, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrUnnecessaryNonSealedModifier", + "shortDescription": { + "text": "Unnecessary 'non-sealed' modifier" + }, + "fullDescription": { + "text": "Reports unnecessary 'non-sealed' modifiers which used on methods, fields, or variables. This modifier has effect only on classes, interfaces and traits. Example: 'non-sealed boolean foo() {} // modifier is unnecessary\n non-sealed Object bar // modifier is unnecessary\n\n // modifier is required and therefore not highlighted\n non-sealed class A {}'", + "markdown": "Reports unnecessary `non-sealed` modifiers which used on methods, fields, or variables.\n\nThis modifier has effect only on classes, interfaces and traits.\n\n**Example:**\n\n\n non-sealed boolean foo() {} // modifier is unnecessary\n non-sealed Object bar // modifier is unnecessary\n\n // modifier is required and therefore not highlighted\n non-sealed class A {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Style", + "index": 81, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrAnnotationReferencingUnknownIdentifiers", + "shortDescription": { + "text": "@TupleConstructor and @MapConstructor" + }, + "fullDescription": { + "text": "Reports unresolved identifiers in '@TupleConstructor' and '@MapConstructor' 'includes' and 'excludes' annotation attribute values. Example: '// unresolved 'c'\n @TupleConstructor(includes = ['a', 'b', 'c'])\n class X {\n def a\n def b\n }'", + "markdown": "Reports unresolved identifiers in `@TupleConstructor` and `@MapConstructor` `includes` and `excludes` annotation attribute values.\n\n**Example:**\n\n\n // unresolved 'c'\n @TupleConstructor(includes = ['a', 'b', 'c'])\n class X {\n def a\n def b\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Annotations", + "index": 91, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrUnnecessaryDefModifier", + "shortDescription": { + "text": "Unnecessary 'def'" + }, + "fullDescription": { + "text": "Reports unnecessary 'def' modifiers when used with explicit type declaration. Example: 'def boolean foo() {} // modifier is unnecessary\n def Object bar // modifier is unnecessary\n\n // modifier is required and therefore not highlighted\n def (int a, String b) = []'", + "markdown": "Reports unnecessary `def` modifiers when used with explicit type declaration.\n\n**Example:**\n\n\n def boolean foo() {} // modifier is unnecessary\n def Object bar // modifier is unnecessary\n\n // modifier is required and therefore not highlighted\n def (int a, String b) = []\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Style", + "index": 81, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrUnresolvedAccess", + "shortDescription": { + "text": "Unresolved reference expression" + }, + "fullDescription": { + "text": "Reports reference expressions which cannot be resolved.", + "markdown": "Reports reference expressions which cannot be resolved." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 52, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrPOJO", + "shortDescription": { + "text": "@POJO without @CompileStatic" + }, + "fullDescription": { + "text": "Reports annotation '@groovy.transform.stc.POJO' applied without '@groovy.transform.CompileStatic'. Annotation '@POJO' changes compilation process of Groovy classes to bytecode. It has no effect without explicitly enabled static compilation (which is done via '@CompileStatic' annotation). Example: '@POJO // reports @POJO\n class A {}'", + "markdown": "Reports annotation `@groovy.transform.stc.POJO` applied without `@groovy.transform.CompileStatic`.\n\n\nAnnotation `@POJO` changes compilation process of Groovy classes to bytecode. It has no effect without explicitly enabled static compilation (which is done via `@CompileStatic` annotation).\n\n**Example:**\n\n\n @POJO // reports @POJO\n class A {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Annotations", + "index": 91, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyWaitWhileNotSynchronized", + "shortDescription": { + "text": "'wait()' while not synced" + }, + "fullDescription": { + "text": "Reports calls to 'wait()' not made inside a corresponding synchronized statement or synchronized method. Calling 'wait()' on an object without holding a lock on that object will result in an 'IllegalMonitorStateException' being thrown. Such a construct is not necessarily an error, as the necessary lock may be acquired before the containing method is called, but its worth looking at.", + "markdown": "Reports calls to `wait()` not made inside a corresponding synchronized\nstatement or synchronized method.\n\nCalling `wait()` on an object\nwithout holding a lock on that object will result in an `IllegalMonitorStateException` being thrown.\nSuch a construct is not necessarily an error, as the necessary lock may be acquired before\nthe containing method is called, but its worth looking at." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 40, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyMultipleReturnPointsPerMethod", + "shortDescription": { + "text": "Method with multiple return points" + }, + "fullDescription": { + "text": "Reports methods with too many return points. Methods with too many return points may be confusing, and hard to refactor. Example: 'int foo(int a) {\n if (a > 0) {\n return a\n }\n if (a < 0) return -a\n return 0\n }'\n Use the field provided below to specify the maximum acceptable number of return points a method might have.", + "markdown": "Reports methods with too many return points. Methods with too many return points may be confusing, and hard to refactor.\n\n**Example:**\n\n\n int foo(int a) {\n if (a > 0) {\n return a\n }\n if (a < 0) return -a\n return 0\n }\n\n\nUse the field provided below to specify the maximum acceptable number of return points a method\nmight have." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Method metrics", + "index": 106, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyConditionalCanBeElvis", + "shortDescription": { + "text": "Ternary expression can be replaced with elvis expression" + }, + "fullDescription": { + "text": "Reports ternary expressions which can be replaced by an elvis expression. Example: 'def notNull(o, defaultValue) {\n o != null ? o : defaultValue\n }' After the quick-fix is applied: 'def notNull(o, defaultValue) {\n o ?: defaultValue\n }'", + "markdown": "Reports ternary expressions which can be replaced by an elvis expression.\n\n**Example:**\n\n\n def notNull(o, defaultValue) {\n o != null ? o : defaultValue\n }\n\nAfter the quick-fix is applied:\n\n\n def notNull(o, defaultValue) {\n o ?: defaultValue\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 68, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrUnnecessaryFinalModifier", + "shortDescription": { + "text": "Unnecessary 'final'" + }, + "fullDescription": { + "text": "Reports unnecessary 'final' modifiers when used with the record definition. Example: 'final record R(int a) {} // modifier is unnecessary'", + "markdown": "Reports unnecessary `final` modifiers when used with the record definition.\n\n**Example:**\n\n\n final record R(int a) {} // modifier is unnecessary\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Style", + "index": 81, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyOverlyLongMethod", + "shortDescription": { + "text": "Overly long method" + }, + "fullDescription": { + "text": "Reports methods that are too long. Methods that are too long may be confusing, and are a good sign that refactoring is necessary. Use the Maximum statements per method field to specify the maximum acceptable number of non-comment source statements a method might have.", + "markdown": "Reports methods that are too long.\n\n\nMethods that are too long\nmay be confusing, and are a good sign that refactoring is necessary.\n\n\nUse the **Maximum statements per method** field to specify the maximum acceptable number of non-comment source\nstatements a method might have." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Method metrics", + "index": 106, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SecondUnsafeCall", + "shortDescription": { + "text": "Second unsafe call" + }, + "fullDescription": { + "text": "Reports possible NullPointerException during chain methods or properties call. Example: 'domain?.getZone().getName()' After the quick-fix is applied: 'domain?.getZone()?.getName()'", + "markdown": "Reports possible **NullPointerException** during chain methods or properties call.\n\n**Example:**\n\n\n domain?.getZone().getName()\n\nAfter the quick-fix is applied:\n\n\n domain?.getZone()?.getName()\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 52, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrPackage", + "shortDescription": { + "text": "Package mismatch" + }, + "fullDescription": { + "text": "Reports files with a declared package that does not match the package expected. Also, reports files without 'package' statements if the class is not located directly in the source root directory.", + "markdown": "Reports files with a declared package that does not match the package expected. Also, reports files without `package` statements if the class is not located directly in the source root directory." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 70, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyOverlyComplexBooleanExpression", + "shortDescription": { + "text": "Overly complex boolean expression" + }, + "fullDescription": { + "text": "Reports boolean expressions with too many terms. Such expressions may be confusing and bug-prone. Use the Maximum number of terms field to specify the maximum number of terms allowed in a boolean expression.", + "markdown": "Reports boolean expressions with too many terms.\n\n\nSuch expressions may be confusing and bug-prone.\n\n\nUse the **Maximum number of terms** field to specify the maximum number of terms allowed in a boolean expression." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 70, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyUnreachableStatement", + "shortDescription": { + "text": "Unreachable statement" + }, + "fullDescription": { + "text": "Reports statements that are unreachable. This can occur if the statement is after an infinite loop, 'return', 'break', or 'continue' statement. Example: 'void foo (int n) {\n if (n < 1) {\n return\n print('This statement is unreachable')\n }\n while (true){\n print ('Hello, world!')\n }\n print('This statement is unreachable too')\n }'", + "markdown": "Reports statements that are unreachable. This can occur if the statement is after an infinite loop,\n`return`, `break`, or `continue` statement.\n\n**Example:**\n\n\n void foo (int n) {\n if (n < 1) {\n return\n print('This statement is unreachable')\n }\n while (true){\n print ('Hello, world!')\n }\n print('This statement is unreachable too')\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Validity issues", + "index": 101, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovySystemRunFinalizersOnExit", + "shortDescription": { + "text": "Call to System.runFinalizersOnExit()" + }, + "fullDescription": { + "text": "Reports calls to 'System.runFinalizersOnExit()'. This call is one of the most dangerous in the Java language. It is inherently non-thread-safe, may result in data corruption, deadlock, and may affect parts of the program far removed from its call point. It is deprecated, and its use is strongly discouraged.", + "markdown": "Reports calls to `System.runFinalizersOnExit()`.\n\n\nThis call is one of the most dangerous in the Java language. It is inherently non-thread-safe,\nmay result in data corruption, deadlock, and may affect parts of the program far removed from its call point.\nIt is deprecated, and its use is strongly discouraged." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 40, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyInstanceVariableNamingConvention", + "shortDescription": { + "text": "Instance variable naming convention" + }, + "fullDescription": { + "text": "Reports instance variables whose names are too short, too long, or do not follow the specified regular expression pattern. Use the fields provided below to specify minimum length, maximum length and regular expression expected for instance variable names. Regular expressions should be specified in the standard 'java.util.regex' format.", + "markdown": "Reports instance variables whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n\nUse the fields provided below to specify minimum length, maximum length and regular expression expected for\ninstance variable names.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Naming conventions", + "index": 37, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyConstantIfStatement", + "shortDescription": { + "text": "Constant if statement" + }, + "fullDescription": { + "text": "Reports 'if' statements with boolean constant as a condition. Example: 'if (true) {\n // ...\n }\n if (false) {\n // ...\n }'", + "markdown": "Reports `if` statements with boolean constant as a condition.\n\n**Example:**\n\n\n if (true) {\n // ...\n }\n if (false) {\n // ...\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 68, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyParameterNamingConvention", + "shortDescription": { + "text": "Method parameter naming convention" + }, + "fullDescription": { + "text": "Reports method parameters whose names are either too short, too long, or do not follow the specified regular expression pattern. Use the fields provided below to specify minimum length, maximum length and regular expression expected for method parameter names. Regular expressions should be specified in the standard 'java.util.regex' format.", + "markdown": "Reports method parameters whose names are either too short, too long, or do not follow the specified regular expression pattern.\n\n\nUse the fields provided below to specify minimum length, maximum length and regular expression\nexpected for method parameter names.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Naming conventions", + "index": 37, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrUnnecessaryPublicModifier", + "shortDescription": { + "text": "Unnecessary 'public'" + }, + "fullDescription": { + "text": "Reports unnecessary 'public' modifiers as Groovy classes and methods are 'public' by default. Example: 'public class Foo{\n public void bar(){\n }\n }' After the quick-fix is applied: 'class Foo{\n void bar(){\n }\n }'", + "markdown": "Reports unnecessary `public` modifiers as Groovy classes and methods are `public` by default.\n\n**Example:**\n\n\n public class Foo{\n public void bar(){\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo{\n void bar(){\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Style", + "index": 81, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrStringStyleViolation", + "shortDescription": { + "text": "String style violation" + }, + "fullDescription": { + "text": "Reports strings with quotation that doesn't match code style. Example: 'def hw = \"Hello, world!\"' After the quick-fix is applied: 'def hw = 'Hello, world!'' Use the fields provided below to specify code style for different kinds of strings.", + "markdown": "Reports strings with quotation that doesn't match code style.\n\n**Example:**\n\n\n def hw = \"Hello, world!\"\n\nAfter the quick-fix is applied:\n\n\n def hw = 'Hello, world!'\n\nUse the fields provided below to specify code style for different kinds of strings." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Style", + "index": 81, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyPointlessBoolean", + "shortDescription": { + "text": "Pointless boolean expression" + }, + "fullDescription": { + "text": "Reports pointless or pointlessly complicated boolean expressions. Such expressions include conjunction with true, disjunction with false, equality comparison with a boolean literal, or negation of a boolean literal. Such expressions may be the result of automated refactorings not completely followed through to completion, and in any case are unlikely to be what the developer intended to do. Example: 'if (someBool && true) {}' After the quick-fix is applied: 'if (someBool) {}'", + "markdown": "Reports pointless or pointlessly complicated boolean expressions.\n\n\nSuch expressions include conjunction with true,\ndisjunction with false,\nequality comparison with a boolean literal, or negation of a boolean literal. Such expressions may be\nthe result of automated refactorings\nnot completely followed through to completion, and in any case are unlikely to be what the developer\nintended to do.\n\n**Example:**\n\n\n if (someBool && true) {}\n\nAfter the quick-fix is applied:\n\n\n if (someBool) {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 70, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SingletonConstructor", + "shortDescription": { + "text": "@Singleton constructors" + }, + "fullDescription": { + "text": "Reports constructors of classes annotated by '@Singleton' unless it is declared non-strict. Example: '@Singleton\n class Foo{\n Foo(){\n }\n }' There are two possible quick-fixes: either to remove the constructor or to declare '@Singleton' non-strict. After the quick-fix is applied: '@Singleton\n class Foo{\n }' or: '@Singleton(strict = false)\n class Foo{\n Foo(){\n }\n }'", + "markdown": "Reports constructors of classes annotated by `@Singleton` unless it is declared non-strict.\n\n**Example:**\n\n\n @Singleton\n class Foo{\n Foo(){\n }\n }\n\nThere are two possible quick-fixes: either to remove the constructor or to declare `@Singleton` non-strict.\n\nAfter the quick-fix is applied:\n\n\n @Singleton\n class Foo{\n }\n\nor:\n\n\n @Singleton(strict = false)\n class Foo{\n Foo(){\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Annotations", + "index": 91, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyStaticVariableNamingConvention", + "shortDescription": { + "text": "Static variable naming convention" + }, + "fullDescription": { + "text": "Reports 'static' variables whose names are too short, too long, or do not follow the specified regular expression pattern. Constants, i.e. variables of immutable type declared 'static final', are not checked by this inspection Use the fields provided below to specify minimum length, maximum length and regular expression expected for static variable names. Regular expressions should be specified in the standard 'java.util.regex' format.", + "markdown": "Reports `static` variables whose names are too short, too long, or do not follow the specified regular expression pattern.\n\n\nConstants, i.e. variables of immutable type declared\n`static final`, are not checked by this inspection\n\n\nUse the fields provided below to specify minimum length, maximum length and regular expression expected for static variable names.\n\nRegular expressions should be specified in the standard `java.util.regex` format." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Naming conventions", + "index": 37, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyInfiniteLoopStatement", + "shortDescription": { + "text": "Infinite loop statement" + }, + "fullDescription": { + "text": "Reports 'for', 'while', or 'do' statements which can only exit by throwing an exception. While such statements may be correct, they usually happen by mistake. Example: 'while(true) {\n Thread.sleep(1000)\n}'", + "markdown": "Reports `for`, `while`, or `do` statements which can only exit by throwing an exception. While such statements may be correct, they usually happen by mistake.\n\n**Example:**\n\n\n while(true) {\n Thread.sleep(1000)\n }\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 52, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyEmptyTryBlock", + "shortDescription": { + "text": "Empty 'try' block" + }, + "fullDescription": { + "text": "Reports empty 'try' blocks. Empty 'try' blocks usually indicate coding errors. Example: 'try {\n}\nfinally {\n close()\n}'", + "markdown": "Reports empty `try` blocks. Empty `try` blocks usually indicate coding errors.\n\n**Example:**\n\n\n try {\n }\n finally {\n close()\n }\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Error handling", + "index": 43, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrPermitsClause", + "shortDescription": { + "text": "Non-extending permitted subclasses" + }, + "fullDescription": { + "text": "Reports permitted classes that do not extend the sealed base class. Groovy does not require that all permitted classes should be available in compile-time and compiled along with base class. Compiler will not warn the user on dealing with non-extending permitted subclass, but it contradicts the nature of sealed classes. Example: 'class A permits B {} // reports B\n class B {}'", + "markdown": "Reports permitted classes that do not extend the sealed base class.\n\n\nGroovy does not require that all permitted classes should be available in compile-time and compiled along with base class. Compiler will not warn the user on dealing with non-extending permitted subclass, but it contradicts the nature of sealed classes.\n\n**Example:**\n\n\n class A permits B {} // reports B\n class B {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 52, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyUnusedIncOrDec", + "shortDescription": { + "text": "Unused incrementing or decrementing" + }, + "fullDescription": { + "text": "Reports unused incrementing and decrementing expressions.", + "markdown": "Reports unused incrementing and decrementing expressions." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Data flow", + "index": 105, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyEmptyCatchBlock", + "shortDescription": { + "text": "Empty 'catch' block" + }, + "fullDescription": { + "text": "Reports empty 'catch' blocks. While occasionally intended, empty 'catch' blocks can make debugging extremely difficult. Example: 'try {\n throw new Exception()\n}\ncatch (Exception e) {\n}'\n After the quick-fix is applied: 'try {\n throw new Exception()\n}\ncatch (Exception ignored) {\n}'", + "markdown": "Reports empty `catch` blocks. While occasionally intended, empty `catch` blocks can make debugging extremely difficult.\n\n**Example:**\n\n\n try {\n throw new Exception()\n }\n catch (Exception e) {\n }\n\nAfter the quick-fix is applied:\n\n\n try {\n throw new Exception()\n }\n catch (Exception ignored) {\n }\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Error handling", + "index": 43, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ClashingTraitMethods", + "shortDescription": { + "text": "Clashing trait methods" + }, + "fullDescription": { + "text": "Reports classes which implement two or more traits that contain methods with same signatures. The result of calling such methods might be unexpected. The quick-fix adds an explicit overriding method. Example: 'trait T1 {\n def foo() {}\n }\n\n trait T2 {\n def foo() {}\n }\n\n class X implements T1, T2 {}\n\n // T2.foo() will be called\n new X().foo()' After the quick-fix is applied: 'class X implements T1, T2 {\n @Override\n Object foo() {\n return T2.super.foo()\n }\n }'", + "markdown": "Reports classes which implement two or more traits that contain methods with same signatures.\n\nThe result of calling such methods might be unexpected.\n\nThe quick-fix adds an explicit overriding method.\n\n**Example:**\n\n\n trait T1 {\n def foo() {}\n }\n\n trait T2 {\n def foo() {}\n }\n\n class X implements T1, T2 {}\n\n // T2.foo() will be called\n new X().foo()\n\nAfter the quick-fix is applied:\n\n\n class X implements T1, T2 {\n @Override\n Object foo() {\n return T2.super.foo()\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 70, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyOverlyComplexMethod", + "shortDescription": { + "text": "Overly complex method" + }, + "fullDescription": { + "text": "Reports methods that have too high a cyclomatic complexity. Cyclomatic complexity is basically a measurement of the number of branching points in a method. Methods with too high a cyclomatic complexity may be confusing and difficult to test. Use the Method complexity limit field to specify the maximum acceptable cyclomatic complexity a method might have.", + "markdown": "Reports methods that have too high a cyclomatic complexity.\n\n\nCyclomatic\ncomplexity is basically a measurement of the number of branching points in a method. Methods with too high\na cyclomatic complexity may be confusing and difficult to test.\n\n\nUse the **Method complexity limit** field to specify the maximum acceptable cyclomatic complexity a method might have." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Method metrics", + "index": 106, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TypeCustomizer", + "shortDescription": { + "text": "Type customizer inspection" + }, + "fullDescription": { + "text": "Reports files which can be custom type checkers and are not added to compiler resources yet.", + "markdown": "Reports files which can be custom type checkers and are not added to compiler resources yet." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Other", + "index": 79, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyOverlyNestedMethod", + "shortDescription": { + "text": "Overly nested method" + }, + "fullDescription": { + "text": "Reports methods whose bodies are too deeply nested. Methods with too much statement nesting may be confusing, and are a good sign that refactoring may be necessary. Use the Maximum nesting depth field to specify the maximum acceptable nesting depth a method might have.", + "markdown": "Reports methods whose bodies are too deeply nested.\n\n\nMethods with too much statement\nnesting may be confusing, and are a good sign that refactoring may be necessary.\n\n\nUse the **Maximum nesting depth** field to specify the maximum acceptable nesting depth a method might have." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Method metrics", + "index": 106, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyVariableNotAssigned", + "shortDescription": { + "text": "Variable not assigned" + }, + "fullDescription": { + "text": "Reports variables that might not have been initialized.", + "markdown": "Reports variables that might not have been initialized." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Data flow", + "index": 105, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyMethodWithMoreThanThreeNegations", + "shortDescription": { + "text": "Method with more than three negations" + }, + "fullDescription": { + "text": "Reports methods with three or more negation operations ('!' or '!='). Such methods may be unnecessarily confusing.", + "markdown": "Reports methods with three or more negation operations (`!` or `!=`). Such methods may be unnecessarily confusing." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Method metrics", + "index": 106, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyDoubleNegation", + "shortDescription": { + "text": "Double negation" + }, + "fullDescription": { + "text": "Reports double negation that can be simplified. Example: 'if (!!functionCall()) {} // double negation\nif (!(a != b)) {} // double negation'\n After the quick-fix is applied: 'if (functionCall()) {}\nif (a == b) {}'", + "markdown": "Reports double negation that can be simplified.\n\n**Example:**\n\n\n if (!!functionCall()) {} // double negation\n if (!(a != b)) {} // double negation\n\nAfter the quick-fix is applied:\n\n\n if (functionCall()) {}\n if (a == b) {}\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 70, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrNamedVariantLabels", + "shortDescription": { + "text": "@NamedVariant/@NamedParam/@NamedDelegate unresolved label" + }, + "fullDescription": { + "text": "Reports unresolved argument labels in calls of methods annotated by '@NamedVariant'/'@NamedParam'/'@NamedDelegate'. Example: '@groovy.transform.NamedVariant\n def foo(a, b) {}\n\n // unresolved label 'c'\n foo(a: 1, b: 2, c: 3)'", + "markdown": "Reports unresolved argument labels in calls of methods annotated by `@NamedVariant`/`@NamedParam`/`@NamedDelegate`.\n\n**Example:**\n\n\n @groovy.transform.NamedVariant\n def foo(a, b) {}\n\n // unresolved label 'c'\n foo(a: 1, b: 2, c: 3)\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Annotations", + "index": 91, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyIfStatementWithTooManyBranches", + "shortDescription": { + "text": "If statement with too many branches" + }, + "fullDescription": { + "text": "Reports 'if' statements with too many branches. Such statements may be confusing, and are often the sign of inadequate levels of design abstraction. Example: 'if (a) {\n print \"foo\"\n} else if (b) {\n print \"bar\"\n} else if (c) {\n print \"baz\"\n} else if (d) {\n print \"Too many branches\"\n}'\n Use the Maximum number of branches field to specify the maximum number of branches expected.", + "markdown": "Reports `if` statements with too many branches. Such statements may be confusing, and are often the sign of inadequate levels of design abstraction.\n\n**Example:**\n\n\n if (a) {\n print \"foo\"\n } else if (b) {\n print \"bar\"\n } else if (c) {\n print \"baz\"\n } else if (d) {\n print \"Too many branches\"\n }\n\n\nUse the **Maximum number of branches** field to specify the maximum number of branches expected." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 68, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyNegatedConditional", + "shortDescription": { + "text": "Negated conditional expression" + }, + "fullDescription": { + "text": "Reports conditional expressions whose conditions are negated. Flipping the order of the conditional expression branches will usually increase the clarity of such statements. Example: '~condition ? \"1\" : \"2\"'", + "markdown": "Reports conditional expressions whose conditions are negated. Flipping the order of the conditional expression branches will usually increase the clarity of such statements.\n\n**Example:**\n\n\n ~condition ? \"1\" : \"2\"\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 70, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyWhileLoopSpinsOnField", + "shortDescription": { + "text": "While loop spins on field" + }, + "fullDescription": { + "text": "Reports 'while' loops, which spin on the value of a non-'volatile' field, waiting for it to be changed by another thread. In addition to being potentially extremely CPU intensive when little work is done inside the loop, such loops likely have different semantics than intended. The Java Memory Model allows that loop to never complete even if another thread changes the field's value. Example: 'class SpinsOnField {\n boolean ready = false;\n\n void run() {\n // the loop may never complete even after\n // markAsReady call from the other thread\n while (!ready) {\n }\n // do some work\n }\n\n void markAsReady() {\n ready = true;\n }\n }' Additionally since Java 9, calling 'Thread.onSpinWait()' inside spin loop on a 'volatile' field is recommended, which may significantly improve performance on some hardware. Use the checkbox below to have this inspection report only empty 'while' loops.", + "markdown": "Reports `while` loops, which spin on the\nvalue of a non-`volatile` field, waiting for it to be changed by another thread.\n\n\nIn addition to being potentially extremely CPU intensive when little work is done inside the loop, such\nloops likely have different semantics than intended. The Java Memory Model allows that loop to never complete even\nif another thread changes the field's value.\n\n**Example:**\n\n\n class SpinsOnField {\n boolean ready = false;\n\n void run() {\n // the loop may never complete even after\n // markAsReady call from the other thread\n while (!ready) {\n }\n // do some work\n }\n\n void markAsReady() {\n ready = true;\n }\n }\n\n\nAdditionally since Java 9, calling `Thread.onSpinWait()` inside spin loop\non a `volatile` field is recommended, which may significantly improve performance on some hardware.\n\n\nUse the checkbox below to have this inspection report only empty `while` loops." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 40, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrEqualsBetweenInconvertibleTypes", + "shortDescription": { + "text": "'equals()' between objects of inconvertible types" + }, + "fullDescription": { + "text": "Reports calls to 'equals()' where the target and argument are of incompatible types. While such a call might theoretically be useful, most likely it represents a bug. Example: 'new HashSet() == new TreeSet())'", + "markdown": "Reports calls to `equals()` where the target and argument are of incompatible types.\n\nWhile such a call might theoretically be useful, most likely it represents a bug.\n\n**Example:**\n\n\n new HashSet() == new TreeSet())\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 52, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyEmptySyncBlock", + "shortDescription": { + "text": "Empty 'synchronized' block" + }, + "fullDescription": { + "text": "Reports 'synchronized' statements with empty bodies. While theoretically this may be the semantics intended, this construction is confusing, and often the result of a typo. Example: 'synchronized(lock) {\n}'", + "markdown": "Reports `synchronized` statements with empty bodies. While theoretically this may be the semantics intended, this construction is confusing, and often the result of a typo.\n\n**Example:**\n\n\n synchronized(lock) {\n }\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 40, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovySillyAssignment", + "shortDescription": { + "text": "Silly assignment" + }, + "fullDescription": { + "text": "Reports assignments of a variable to itself.", + "markdown": "Reports assignments of a variable to itself." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Assignment issues", + "index": 63, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyConditionalCanBeConditionalCall", + "shortDescription": { + "text": "Ternary expression can be replaced with safe call" + }, + "fullDescription": { + "text": "Reports ternary expressions which can be replaced by a safe call. Example: 'def charArray(String s) {\n s == null ? null : s.toCharArray()\n }' After the quick-fix is applied: 'def charArray(String s) {\n s?.toCharArray()\n }'", + "markdown": "Reports ternary expressions which can be replaced by a safe call.\n\n**Example:**\n\n\n def charArray(String s) {\n s == null ? null : s.toCharArray()\n }\n\nAfter the quick-fix is applied:\n\n\n def charArray(String s) {\n s?.toCharArray()\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 68, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyInfiniteRecursion", + "shortDescription": { + "text": "Infinite recursion" + }, + "fullDescription": { + "text": "Reports methods which must either recurse infinitely or throw an exception. Methods reported by this inspection could not be finished correct. Example: '// this function always dive deeper\ndef fibonacci(int n) {\n return fibonacci(n-1) + fibonacci(n-2)\n}'", + "markdown": "Reports methods which must either recurse infinitely or throw an exception. Methods reported by this inspection could not be finished correct.\n\n**Example:**\n\n\n // this function always dive deeper\n def fibonacci(int n) {\n return fibonacci(n-1) + fibonacci(n-2)\n }\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 52, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyNestedSwitch", + "shortDescription": { + "text": "Nested switch statement" + }, + "fullDescription": { + "text": "Reports 'switch' statements that are nested inside other 'switch' statements. Such nested switch statements are confusing, and may result in unexpected behaviour. Example: 'switch (outer) {\n case 1:\n switch (inner) {\n case 1:\n print \"inner 1\"\n break\n default:\n print \"inner default\"\n }\n break\n default:\n print \"default\"\n}'", + "markdown": "Reports `switch` statements that are nested inside other `switch` statements. Such nested switch statements are confusing, and may result in unexpected behaviour.\n\n**Example:**\n\n\n switch (outer) {\n case 1:\n switch (inner) {\n case 1:\n print \"inner 1\"\n break\n default:\n print \"inner default\"\n }\n break\n default:\n print \"default\"\n }\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 70, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyRangeTypeCheck", + "shortDescription": { + "text": "Incorrect range arguments" + }, + "fullDescription": { + "text": "Reports types used in ranges that do not have a 'next()' or 'previous()' method or do not implement the 'java.lang.Comparable' interface.", + "markdown": "Reports types used in ranges that do not have a `next()` or `previous()` method or do not implement the `java.lang.Comparable` interface." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Probable bugs", + "index": 52, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrUnnecessarySealedModifier", + "shortDescription": { + "text": "Unnecessary 'sealed' modifier" + }, + "fullDescription": { + "text": "Reports unnecessary 'sealed' modifiers which used on methods, fields, or variables. This modifier has effect only on classes, interfaces and traits. Example: 'sealed boolean foo() {} // modifier is unnecessary\n sealed Object bar // modifier is unnecessary\n\n // modifier is required and therefore not highlighted\n sealed class A {}'", + "markdown": "Reports unnecessary `sealed` modifiers which used on methods, fields, or variables.\n\nThis modifier has effect only on classes, interfaces and traits.\n\n**Example:**\n\n\n sealed boolean foo() {} // modifier is unnecessary\n sealed Object bar // modifier is unnecessary\n\n // modifier is required and therefore not highlighted\n sealed class A {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Style", + "index": 81, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GrDeprecatedAPIUsage", + "shortDescription": { + "text": "Deprecated API usage" + }, + "fullDescription": { + "text": "Reports references to deprecated classes, fields, and methods.", + "markdown": "Reports references to deprecated classes, fields, and methods." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 70, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyMissingReturnStatement", + "shortDescription": { + "text": "Missing return statement" + }, + "fullDescription": { + "text": "Reports missing 'return' statements at the end of methods with a non-void return type. The end of method should be reachable by the method's execution flow. Example: 'String foo(int a) {\n if (a > 0) {\n return \"more than zero\"\n }\n} // foo(-1) will return 'null'\n\nint bar(int a) {\n if (a > 0) {\n return a\n }\n} // bar(-1) will fall with runtime exception'", + "markdown": "Reports missing `return` statements at the end of methods with a non-**void** return type. The end of method should be reachable by the method's execution flow.\n\n**Example:**\n\n\n String foo(int a) {\n if (a > 0) {\n return \"more than zero\"\n }\n } // foo(-1) will return 'null'\n\n int bar(int a) {\n if (a > 0) {\n return a\n }\n } // bar(-1) will fall with runtime exception\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Data flow", + "index": 105, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyPublicFieldAccessedInSynchronizedContext", + "shortDescription": { + "text": "Non-private field accessed in synchronized context" + }, + "fullDescription": { + "text": "Reports non-'final', non-'private' fields which are accessed in a synchronized context. A non-private field cannot be guaranteed to always be accessed in a synchronized manner, and such \"partially synchronized\" access may result in unexpectedly inconsistent data structures. Accesses in constructors an initializers are ignored for purposes of this inspection.", + "markdown": "Reports non-`final`, non-`private` fields which are accessed in a synchronized context.\n\n\nA non-private field cannot be guaranteed to always be accessed in a synchronized manner, and such \"partially synchronized\"\naccess may result in unexpectedly inconsistent data structures. Accesses in constructors an initializers are ignored\nfor purposes of this inspection." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 40, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyUnnecessaryContinue", + "shortDescription": { + "text": "Unnecessary 'continue' statement" + }, + "fullDescription": { + "text": "Reports 'continue' statements if they are last reachable statements in the loop. These 'continue' statements are unnecessary and can be safely removed. Example: 'for(int i in array) {\n println(i)\n continue\n }' After the quick-fix is applied: 'for(int i in array) {\n println(i)\n }' For more information, see the same inspection in Java.", + "markdown": "Reports `continue` statements if they are last reachable statements in the loop.\nThese `continue` statements are unnecessary and can be safely removed.\n\n**Example:**\n\n\n for(int i in array) {\n println(i)\n continue\n }\n\nAfter the quick-fix is applied:\n\n\n for(int i in array) {\n println(i)\n }\n\nFor more information, see the same inspection in Java." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 68, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyUnusedAssignment", + "shortDescription": { + "text": "Unused assignment" + }, + "fullDescription": { + "text": "Reports the cases where a variable is redundant as its value is never used after its assignment. If the variable is unused, we recommend removing it to shorten the code and to avoid redundant allocations. The following cases are reported: the variable never gets read after assignment the value is always overwritten with another assignment before the next variable read the variable initializer is redundant (for one of the above two reasons) For more info see the same inspection in Java.", + "markdown": "Reports the cases where a variable is redundant as its value is never used after its assignment.\n\nIf the variable is unused, we recommend removing it to shorten the code and to avoid redundant allocations.\n\nThe following cases are reported:\n\n* the variable never gets read after assignment\n* the value is always overwritten with another assignment before the next variable read\n* the variable initializer is redundant (for one of the above two reasons)\n\nFor more info see the same inspection in Java." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Data flow", + "index": 105, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyNotifyWhileNotSynchronized", + "shortDescription": { + "text": "'notify()' or 'notifyAll()' while not synced" + }, + "fullDescription": { + "text": "Reports calls to 'notify()' and 'notifyAll()' not within a corresponding synchronized statement or synchronized method. Calling these methods on an object without holding a lock on that object will result in an 'IllegalMonitorStateException' being thrown. Such a construct is not necessarily an error, as the necessary lock may be acquired before the containing method is called, but it's worth looking at.", + "markdown": "Reports calls to `notify()` and `notifyAll()` not within a corresponding synchronized statement or synchronized method.\n\n\nCalling these methods on an object\nwithout holding a lock on that object will result in an `IllegalMonitorStateException` being thrown.\nSuch a construct is not necessarily an error, as the necessary lock may be acquired before\nthe containing method is called, but it's worth looking at." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 40, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyBusyWait", + "shortDescription": { + "text": "Busy wait" + }, + "fullDescription": { + "text": "Reports calls to 'java.lang.Thread.sleep()' that occur inside loops. Such calls are indicative of \"busy-waiting\". Busy-waiting is often inefficient, and may result in unexpected deadlocks as busy-waiting threads do not release locked resources.", + "markdown": "Reports calls to `java.lang.Thread.sleep()` that occur inside loops.\n\n\nSuch calls are indicative of \"busy-waiting\". Busy-waiting is often inefficient, and may result in unexpected deadlocks\nas busy-waiting threads do not release locked resources." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 40, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyOctalInteger", + "shortDescription": { + "text": "Octal integer" + }, + "fullDescription": { + "text": "Reports octal integer literals. Some coding standards prohibit the use of octal literals, as they may be easily confused with decimal literals.", + "markdown": "Reports octal integer literals.\n\n\nSome coding standards prohibit the\nuse of octal literals, as they may be easily confused with decimal literals." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 70, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyEmptyFinallyBlock", + "shortDescription": { + "text": "Empty 'finally' block" + }, + "fullDescription": { + "text": "Reports empty 'finally' blocks. Empty 'finally' blocks usually indicate coding errors. Example: 'try {\n throw new Exception()\n}\nfinally {\n}'", + "markdown": "Reports empty `finally` blocks. Empty `finally` blocks usually indicate coding errors.\n\n**Example:**\n\n\n try {\n throw new Exception()\n }\n finally {\n }\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Error handling", + "index": 43, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovySynchronizationOnVariableInitializedWithLiteral", + "shortDescription": { + "text": "Synchronization on variable initialized with literal" + }, + "fullDescription": { + "text": "Reports synchronized blocks which lock on an object which is initialized with a literal. String literals are interned and 'Number' literals can be allocated from a cache. Because of this, it is possible that some other part of the system which uses an object initialized with the same literal, is actually holding a reference to the exact same object. This can create unexpected dead-lock situations, if the string was thought to be private.", + "markdown": "Reports synchronized blocks which lock on an object which is initialized with a literal.\n\n\nString literals are interned and `Number` literals can be allocated from a cache. Because of\nthis, it is possible that some other part of the system which uses an object initialized with the same\nliteral, is actually holding a reference to the exact same object. This can create unexpected dead-lock\nsituations, if the string was thought to be private." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 40, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyUnusedDeclaration", + "shortDescription": { + "text": "Unused declaration" + }, + "fullDescription": { + "text": "Reports unused classes, methods and fields. Example: 'public class Department {\n private Organization myOrganization;\n }' Here 'Department' explicitly references 'Organization' but if 'Department' class itself is unused, then inspection would report both classes. The inspection also reports parameters, which are not used by their methods and all method implementations/overriders, as well as local variables, which are declared but not used. For more information, see the same inspection in Java.", + "markdown": "Reports unused classes, methods and fields.\n\n**Example:**\n\n\n public class Department {\n private Organization myOrganization;\n }\n\nHere `Department` explicitly references `Organization` but if `Department` class itself is unused,\nthen inspection would report both classes.\n\n\nThe inspection also reports parameters, which are not used by their methods and all method implementations/overriders, as well as local\nvariables, which are declared but not used.\n\nFor more information, see the same inspection in Java." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Declaration redundancy", + "index": 124, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyLoopStatementThatDoesntLoop", + "shortDescription": { + "text": "Loop statement that doesn't loop" + }, + "fullDescription": { + "text": "Reports 'for' or 'while' statements whose bodies are guaranteed to execute at most once. While such statements could be written intentionally, they are usually a symptom of error. Example: 'for (int i in 0..<10) {\n return\n }'", + "markdown": "Reports `for` or `while` statements whose bodies are guaranteed to execute at most once. While such statements could be written intentionally, they are usually a symptom of error.\n\n**Example:**\n\n\n for (int i in 0..<10) {\n return\n }\n\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 68, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyResultOfIncrementOrDecrementUsed", + "shortDescription": { + "text": "Result of increment or decrement used" + }, + "fullDescription": { + "text": "Reports increment or decrement expressions nested inside other expressions. Such expressions may be confusing, and violate the general design principle that a given construct should do precisely one thing.", + "markdown": "Reports increment or decrement expressions nested inside other expressions.\n\n\nSuch expressions may be confusing, and violate the general design principle that a\ngiven construct should do precisely one thing." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Potentially confusing code constructs", + "index": 70, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovySynchronizationOnNonFinalField", + "shortDescription": { + "text": "Synchronization on non-final field" + }, + "fullDescription": { + "text": "Reports 'synchronized' statements where the lock expression is a non-'final' field. Such statements are unlikely to have useful semantics, as different threads may be locking on different objects even when operating on the same object.", + "markdown": "Reports `synchronized` statements where the lock expression is a non-`final` field.\n\n\nSuch statements are unlikely to have useful semantics, as different\nthreads may be locking on different objects even when operating on the same object." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Threading issues", + "index": 40, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "GroovyReturnFromClosureCanBeImplicit", + "shortDescription": { + "text": "'return' statement can be implicit" + }, + "fullDescription": { + "text": "Reports return statements at the end of closures which can be made implicit. Groovy closures implicitly return the value of the last statement in them. Example: 'def foo = {\n return 1\n }' After the quick-fix is applied: 'def foo = {\n 1\n }'", + "markdown": "Reports return statements at the end of closures which can be made implicit.\n\n\nGroovy closures implicitly return the value of the last statement in them.\n\n**Example:**\n\n\n def foo = {\n return 1\n }\n\nAfter the quick-fix is applied:\n\n\n def foo = {\n 1\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Groovy/Control flow issues", + "index": 68, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij", + "version": "223.8787.120", + "rules": [ + { + "id": "HtmlUnknownBooleanAttribute", + "shortDescription": { + "text": "Incorrect boolean attribute" + }, + "fullDescription": { + "text": "Reports an HTML non-boolean attribute without a value. Suggests configuring attributes that should not be reported.", + "markdown": "Reports an HTML non-boolean attribute without a value. Suggests configuring attributes that should not be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 29, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InconsistentLineSeparators", + "shortDescription": { + "text": "Inconsistent line separators" + }, + "fullDescription": { + "text": "Reports files with line separators different from the ones that are specified in the project's settings. For example, the inspection will be triggered if you set the line separator to '\\n' in Settings | Editor | Code Style | Line separator, while the file you are editing uses '\\r\\n' as a line separator. The inspection also warns you about mixed line separators within a file.", + "markdown": "Reports files with line separators different from the ones that are specified in the project's settings.\n\nFor example, the inspection will be triggered if you set the line separator to `\\n` in\n[Settings \\| Editor \\| Code Style \\| Line separator](settings://preferences.sourceCode?Line%20separator),\nwhile the file you are editing uses `\\r\\n` as a line separator.\n\nThe inspection also warns you about mixed line separators within a file." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 44, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantSuppression", + "shortDescription": { + "text": "Redundant suppression" + }, + "fullDescription": { + "text": "Reports usages of the following elements that can be safely removed because the inspection they affect is no longer applicable in this context: '@SuppressWarning' annotation, or '// noinspection' line comment, or '/** noinspection */' JavaDoc comment Example: 'public class C {\n // symbol is already private,\n // but annotation is still around\n @SuppressWarnings({\"WeakerAccess\"})\n private boolean CONST = true;\n void f() {\n CONST = false;\n }\n}'", + "markdown": "Reports usages of the following elements that can be safely removed because the inspection they affect is no longer applicable in this context:\n\n* `@SuppressWarning` annotation, or\n* `// noinspection` line comment, or\n* `/** noinspection */` JavaDoc comment\n\nExample:\n\n\n public class C {\n // symbol is already private,\n // but annotation is still around\n @SuppressWarnings({\"WeakerAccess\"})\n private boolean CONST = true;\n void f() {\n CONST = false;\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 44, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ProblematicWhitespace", + "shortDescription": { + "text": "Problematic whitespace" + }, + "fullDescription": { + "text": "Reports the following problems: Tabs used for indentation when the code style is configured to use only spaces. Spaces used for indentation when the code style is configured to use only tabs. Spaces used for indentation and tabs used for alignment when the code style is configured to use smart tabs.", + "markdown": "Reports the following problems:\n\n* Tabs used for indentation when the code style is configured to use only spaces.\n* Spaces used for indentation when the code style is configured to use only tabs.\n* Spaces used for indentation and tabs used for alignment when the code style is configured to use smart tabs." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 44, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlUnknownTarget", + "shortDescription": { + "text": "Unresolved file in a link" + }, + "fullDescription": { + "text": "Reports an unresolved file in a link.", + "markdown": "Reports an unresolved file in a link." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 29, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LongLine", + "shortDescription": { + "text": "Line is longer than allowed by code style" + }, + "fullDescription": { + "text": "Reports lines that are longer than the Hard wrap at parameter specified in Settings | Editor | Code Style | General.", + "markdown": "Reports lines that are longer than the **Hard wrap at** parameter specified in [Settings \\| Editor \\| Code Style \\| General](settings://preferences.sourceCode?Hard%20wrap%20at)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 44, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlWrongRootElement", + "shortDescription": { + "text": "Wrong root element" + }, + "fullDescription": { + "text": "Reports a root tag name different from the name specified in the '' tag.", + "markdown": "Reports a root tag name different from the name specified in the `` tag." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 61, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlUnknownAttribute", + "shortDescription": { + "text": "Unknown attribute" + }, + "fullDescription": { + "text": "Reports an unknown HTML attribute. Suggests configuring attributes that should not be reported.", + "markdown": "Reports an unknown HTML attribute. Suggests configuring attributes that should not be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 29, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpRedundantEscape", + "shortDescription": { + "text": "Redundant character escape" + }, + "fullDescription": { + "text": "Reports redundant character escape sequences that can be replaced with unescaped characters preserving the meaning. Many escape sequences that are necessary outside of a character class are redundant inside square brackets '[]' of a character class. Although unescaped opening curly braces '{' outside of character classes are allowed in some dialects (JavaScript, Python, and so on), it can cause confusion and make the pattern less portable, because there are dialects that require escaping curly braces as characters. For this reason the inspection does not report escaped opening curly braces. Example: '\\-\\;[\\.]' After the quick-fix is applied: '-;[.]' The Ignore escaped closing brackets '}' and ']' option specifies whether to report '\\}' and '\\]' outside of a character class when they are allowed to be unescaped by the RegExp dialect. New in 2017.3", + "markdown": "Reports redundant character escape sequences that can be replaced with unescaped characters preserving the meaning. Many escape sequences that are necessary outside of a character class are redundant inside square brackets `[]` of a character class.\n\n\nAlthough unescaped opening curly braces `{` outside of character classes are allowed in some dialects (JavaScript, Python, and so on),\nit can cause confusion and make the pattern less portable, because there are dialects that require escaping curly braces as characters.\nFor this reason the inspection does not report escaped opening curly braces.\n\n**Example:**\n\n\n \\-\\;[\\.]\n\nAfter the quick-fix is applied:\n\n\n -;[.]\n\n\nThe **Ignore escaped closing brackets '}' and '\\]'** option specifies whether to report `\\}` and `\\]` outside of a character class\nwhen they are allowed to be unescaped by the RegExp dialect.\n\nNew in 2017.3" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 82, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IncorrectFormatting", + "shortDescription": { + "text": "Incorrect formatting" + }, + "fullDescription": { + "text": "Reports formatting issues that appear if your code doesn't follow your project's code style settings. This inspection is not compatible with languages that require third-party formatters for code formatting, for example, Go or C with CLangFormat enabled.", + "markdown": "Reports formatting issues that appear if your code doesn't\nfollow your project's code style settings.\n\n\nThis inspection is not compatible with languages that require\nthird-party formatters for code formatting, for example, Go or\nC with CLangFormat enabled." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 44, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlExtraClosingTag", + "shortDescription": { + "text": "Redundant closing tag" + }, + "fullDescription": { + "text": "Reports redundant closing tags on empty elements, for example, 'img' or 'br'. Example: '\n \n

    \n \n ' After the quick-fix is applied: '\n \n
    \n \n '", + "markdown": "Reports redundant closing tags on empty elements, for example, `img` or `br`.\n\n**Example:**\n\n\n \n \n

    \n \n \n\nAfter the quick-fix is applied:\n\n\n \n \n
    \n \n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 29, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpUnexpectedAnchor", + "shortDescription": { + "text": "Begin or end anchor in unexpected position" + }, + "fullDescription": { + "text": "Reports '^' or '\\A' anchors not at the beginning of the pattern and '$', '\\Z' or '\\z' anchors not at the end of the pattern. In the wrong position these RegExp anchors prevent the pattern from matching anything. In case of the '^' and '$' anchors, most likely the literal character was meant and the escape forgotten. Example: '(Price $10)' New in 2018.1", + "markdown": "Reports `^` or `\\A` anchors not at the beginning of the pattern and `$`, `\\Z` or `\\z` anchors not at the end of the pattern. In the wrong position these RegExp anchors prevent the pattern from matching anything. In case of the `^` and `$` anchors, most likely the literal character was meant and the escape forgotten.\n\n**Example:**\n\n\n (Price $10)\n\n\nNew in 2018.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 82, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpellCheckingInspection", + "shortDescription": { + "text": "Typo" + }, + "fullDescription": { + "text": "Reports typos and misspellings in your code, comments, and literals and fixes them with one click.", + "markdown": "Reports typos and misspellings in your code, comments, and literals and fixes them with one click." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "TYPO" + } + }, + "relationships": [ + { + "target": { + "id": "Proofreading", + "index": 92, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CheckXmlFileWithXercesValidator", + "shortDescription": { + "text": "Failed external validation" + }, + "fullDescription": { + "text": "Reports a discrepancy in an XML file with the specified DTD or schema detected by the Xerces validator.", + "markdown": "Reports a discrepancy in an XML file with the specified DTD or schema detected by the Xerces validator." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 61, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlUnknownTag", + "shortDescription": { + "text": "Unknown tag" + }, + "fullDescription": { + "text": "Reports an unknown HTML tag. Suggests configuring tags that should not be reported.", + "markdown": "Reports an unknown HTML tag. Suggests configuring tags that should not be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 29, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpEscapedMetaCharacter", + "shortDescription": { + "text": "Escaped meta character" + }, + "fullDescription": { + "text": "Reports escaped meta characters. Some RegExp coding styles specify that meta characters should be placed inside a character class, to make the regular expression easier to understand. This inspection does not warn about the meta character '[', ']' and '^', because those would need additional escaping inside a character class. Example: '\\d+\\.\\d+' After the quick-fix is applied: '\\d+[.]\\d+' New in 2017.1", + "markdown": "Reports escaped meta characters. Some RegExp coding styles specify that meta characters should be placed inside a character class, to make the regular expression easier to understand. This inspection does not warn about the meta character `[`, `]` and `^`, because those would need additional escaping inside a character class.\n\n**Example:**\n\n\n \\d+\\.\\d+\n\nAfter the quick-fix is applied:\n\n\n \\d+[.]\\d+\n\nNew in 2017.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 82, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlHighlighting", + "shortDescription": { + "text": "XML highlighting" + }, + "fullDescription": { + "text": "Reports XML validation problems in the results of a batch code inspection.", + "markdown": "Reports XML validation problems in the results of a batch code inspection." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 61, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlDuplicatedId", + "shortDescription": { + "text": "Duplicate 'id' attribute" + }, + "fullDescription": { + "text": "Reports a duplicate 'id' attribute in XML.", + "markdown": "Reports a duplicate `id` attribute in XML." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 61, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpDuplicateCharacterInClass", + "shortDescription": { + "text": "Duplicate character in character class" + }, + "fullDescription": { + "text": "Reports duplicate characters inside a RegExp character class. Duplicate characters are unnecessary and can be removed without changing the semantics of the regex. Example: '[aabc]' After the quick-fix is applied: '[abc]'", + "markdown": "Reports duplicate characters inside a RegExp character class. Duplicate characters are unnecessary and can be removed without changing the semantics of the regex.\n\n**Example:**\n\n\n [aabc]\n\nAfter the quick-fix is applied:\n\n\n [abc]\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 82, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlUnboundNsPrefix", + "shortDescription": { + "text": "Unbound namespace prefix" + }, + "fullDescription": { + "text": "Reports an unbound namespace prefix in XML.", + "markdown": "Reports an unbound namespace prefix in XML." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 61, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RequiredAttributes", + "shortDescription": { + "text": "Missing required attribute" + }, + "fullDescription": { + "text": "Reports a missing mandatory attribute in an XML/HTML tag. Suggests configuring attributes that should not be reported.", + "markdown": "Reports a missing mandatory attribute in an XML/HTML tag. Suggests configuring attributes that should not be reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 29, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlUnusedNamespaceDeclaration", + "shortDescription": { + "text": "Unused schema declaration" + }, + "fullDescription": { + "text": "Reports an unused namespace declaration or location hint in XML.", + "markdown": "Reports an unused namespace declaration or location hint in XML." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 61, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpRedundantClassElement", + "shortDescription": { + "text": "Redundant '\\d', '[:digit:]', or '\\D' class elements" + }, + "fullDescription": { + "text": "Reports redundant '\\d' or '[:digit:]' that are used in one class with '\\w' or '[:word:]' ('\\D' with '\\W') and can be removed. Example: '[\\w\\d]' After the quick-fix is applied: '[\\w]' New in 2022.2", + "markdown": "Reports redundant `\\d` or `[:digit:]` that are used in one class with `\\w` or `[:word:]` (`\\D` with `\\W`) and can be removed.\n\n**Example:**\n\n\n [\\w\\d]\n\nAfter the quick-fix is applied:\n\n\n [\\w]\n\nNew in 2022.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 82, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpSimplifiable", + "shortDescription": { + "text": "Regular expression can be simplified" + }, + "fullDescription": { + "text": "Reports regular expressions that can be simplified. Example: '[a] xx* [ah-hz]' After the quick-fix is applied: 'a x+ [ahz]' New in 2022.1", + "markdown": "Reports regular expressions that can be simplified.\n\n**Example:**\n\n\n [a] xx* [ah-hz]\n\nAfter the quick-fix is applied:\n\n\n a x+ [ahz]\n\nNew in 2022.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 82, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpEmptyAlternationBranch", + "shortDescription": { + "text": "Empty branch in alternation" + }, + "fullDescription": { + "text": "Reports empty branches in a RegExp alternation. An empty branch will only match the empty string, and in most cases that is not what is desired. This inspection will not report a single empty branch at the start or the end of an alternation. Example: '(alpha||bravo)' After the quick-fix is applied: '(alpha|bravo)' New in 2017.2", + "markdown": "Reports empty branches in a RegExp alternation. An empty branch will only match the empty string, and in most cases that is not what is desired. This inspection will not report a single empty branch at the start or the end of an alternation.\n\n**Example:**\n\n\n (alpha||bravo)\n\nAfter the quick-fix is applied:\n\n\n (alpha|bravo)\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 82, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlPathReference", + "shortDescription": { + "text": "Unresolved file reference" + }, + "fullDescription": { + "text": "Reports an unresolved file reference in XML.", + "markdown": "Reports an unresolved file reference in XML." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 61, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpUnnecessaryNonCapturingGroup", + "shortDescription": { + "text": "Unnecessary non-capturing group" + }, + "fullDescription": { + "text": "Reports unnecessary non-capturing groups, which have no influence on the match result. Example: 'Everybody be cool, (?:this) is a robbery!' After the quick-fix is applied: 'Everybody be cool, this is a robbery!' New in 2021.1", + "markdown": "Reports unnecessary non-capturing groups, which have no influence on the match result.\n\n**Example:**\n\n\n Everybody be cool, (?:this) is a robbery!\n\nAfter the quick-fix is applied:\n\n\n Everybody be cool, this is a robbery!\n\nNew in 2021.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 82, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TodoComment", + "shortDescription": { + "text": "TODO comment" + }, + "fullDescription": { + "text": "Reports TODO comments in your code. You can configure the format for TODO comments in Settings | Editor | TODO. Enable the Only warn on TODO comments without any details option to only warn on empty TODO comments, that don't provide any description on the task that should be done. Disable to report all TODO comments.", + "markdown": "Reports **TODO** comments in your code.\n\nYou can configure the format for **TODO** comments in [Settings \\| Editor \\| TODO](settings://preferences.toDoOptions).\n\nEnable the **Only warn on TODO comments without any details** option to only warn on empty TODO comments, that\ndon't provide any description on the task that should be done. Disable to report all TODO comments." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 44, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Json5StandardCompliance", + "shortDescription": { + "text": "Compliance with JSON5 standard" + }, + "fullDescription": { + "text": "Reports inconsistency with the language specification in a JSON5 file.", + "markdown": "Reports inconsistency with [the language specification](http://json5.org) in a JSON5 file." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 104, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JsonPathUnknownFunction", + "shortDescription": { + "text": "Unknown JSONPath function" + }, + "fullDescription": { + "text": "Reports an unknown name in a JSONPath function call instead of known standard function names: 'concat', 'keys', 'length', 'min', 'max', 'avg', 'stddev', 'sum'.", + "markdown": "Reports an unknown name in a JSONPath function call instead of known standard function names: `concat`, `keys`, `length`, `min`, `max`, `avg`, `stddev`, `sum`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 104, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlWrongAttributeValue", + "shortDescription": { + "text": "Wrong attribute value" + }, + "fullDescription": { + "text": "Reports an incorrect HTML attribute value.", + "markdown": "Reports an incorrect HTML attribute value." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 29, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlDefaultAttributeValue", + "shortDescription": { + "text": "Redundant attribute with default value" + }, + "fullDescription": { + "text": "Reports a redundant assignment of the default value to an XML attribute.", + "markdown": "Reports a redundant assignment of the default value to an XML attribute." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 61, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JsonSchemaCompliance", + "shortDescription": { + "text": "Compliance with JSON schema" + }, + "fullDescription": { + "text": "Reports inconsistence between a JSON file and the JSON schema that is assigned to it.", + "markdown": "Reports inconsistence between a JSON file and the [JSON schema](https://json-schema.org) that is assigned to it. " + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 104, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EmptyDirectory", + "shortDescription": { + "text": "Empty directory" + }, + "fullDescription": { + "text": "Reports empty directories. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor. Use the Only report empty directories located under a source folder option to have only directories under source roots reported.", + "markdown": "Reports empty directories.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor.\n\nUse the **Only report empty directories located under a source folder** option to have only directories under source\nroots reported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 44, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SyntaxError", + "shortDescription": { + "text": "Syntax error" + }, + "fullDescription": { + "text": "Reports syntax errors that have been found in the result of a batch code inspection run.", + "markdown": "Reports syntax errors that have been found in the result of a batch code inspection run." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 44, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CheckDtdRefs", + "shortDescription": { + "text": "Unresolved DTD reference" + }, + "fullDescription": { + "text": "Reports inconsistency in a DTD-specific reference, for example, in a reference to an XML entity or to a DTD element declaration. Works in DTD an XML files.", + "markdown": "Reports inconsistency in a DTD-specific reference, for example, in a reference to an XML entity or to a DTD element declaration. Works in DTD an XML files." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 61, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonAsciiCharacters", + "shortDescription": { + "text": "Non-ASCII characters" + }, + "fullDescription": { + "text": "Reports code elements that use non-ASCII symbols in an unusual context. Example: Non-ASCII characters used in identifiers, strings, or comments. Identifiers written in different languages, such as 'myСollection' with the letter 'C' written in Cyrillic. Comments or strings containing Unicode symbols, such as long dashes and arrows.", + "markdown": "Reports code elements that use non-ASCII symbols in an unusual context.\n\nExample:\n\n* Non-ASCII characters used in identifiers, strings, or comments.\n* Identifiers written in different languages, such as `my`**С**`ollection` with the letter **C** written in Cyrillic.\n* Comments or strings containing Unicode symbols, such as long dashes and arrows." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Internationalization", + "index": 109, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LossyEncoding", + "shortDescription": { + "text": "Lossy encoding" + }, + "fullDescription": { + "text": "Reports characters that cannot be displayed because of the current document encoding. Examples: If you type international characters in a document with the US-ASCII charset, some characters will be lost on save. If you load a UTF-8-encoded file using the ISO-8859-1 one-byte charset, some characters will be displayed incorrectly. You can fix this by changing the file encoding either by specifying the encoding directly in the file, e.g. by editing 'encoding=' attribute in the XML prolog of XML file, or by changing the corresponding options in Settings | Editor | File Encodings.", + "markdown": "Reports characters that cannot be displayed because of the current document encoding.\n\nExamples:\n\n* If you type international characters in a document with the **US-ASCII** charset, some characters will be lost on save.\n* If you load a **UTF-8** -encoded file using the **ISO-8859-1** one-byte charset, some characters will be displayed incorrectly.\n\nYou can fix this by changing the file encoding\neither by specifying the encoding directly in the file, e.g. by editing `encoding=` attribute in the XML prolog of XML file,\nor by changing the corresponding options in **Settings \\| Editor \\| File Encodings**." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Internationalization", + "index": 109, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IgnoreFileDuplicateEntry", + "shortDescription": { + "text": "Ignore file duplicates" + }, + "fullDescription": { + "text": "Reports duplicate entries (patterns) in the ignore file (e.g. .gitignore, .hgignore). Duplicate entries in these files are redundant and can be removed. Example: # Output directories\n /out/\n /target/\n /out/", + "markdown": "Reports duplicate entries (patterns) in the ignore file (e.g. .gitignore, .hgignore). Duplicate entries in these files are redundant and can be removed.\n\nExample:\n\n```\n # Output directories\n /out/\n /target/\n /out/\n```" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Version control", + "index": 113, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JsonStandardCompliance", + "shortDescription": { + "text": "Compliance with JSON standard" + }, + "fullDescription": { + "text": "Reports the following discrepancies of a JSON file with the language specification: A line or block comment (configurable). Multiple top-level values (expect for JSON Lines files, configurable for others). A trailing comma in an object or array (configurable). A single quoted string. A property key is a not a double quoted strings. A NaN or Infinity/-Infinity numeric value as a floating point literal (configurable).", + "markdown": "Reports the following discrepancies of a JSON file with [the language specification](https://tools.ietf.org/html/rfc7159):\n\n* A line or block comment (configurable).\n* Multiple top-level values (expect for JSON Lines files, configurable for others).\n* A trailing comma in an object or array (configurable).\n* A single quoted string.\n* A property key is a not a double quoted strings.\n* A NaN or Infinity/-Infinity numeric value as a floating point literal (configurable)." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 104, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JsonSchemaDeprecation", + "shortDescription": { + "text": "Deprecated JSON property" + }, + "fullDescription": { + "text": "Reports a deprecated property in a JSON file. Note that deprecation mechanism is not defined in the JSON Schema specification yet, and this inspection uses a non-standard extension 'deprecationMessage'.", + "markdown": "Reports a deprecated property in a JSON file. \nNote that deprecation mechanism is not defined in the JSON Schema specification yet, and this inspection uses a non-standard extension 'deprecationMessage'." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 104, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JsonSchemaRefReference", + "shortDescription": { + "text": "Unresolved '$ref' and '$schema' references" + }, + "fullDescription": { + "text": "Reports an unresolved '$ref' or '$schema' path in a JSON schema.", + "markdown": "Reports an unresolved `$ref` or `$schema` path in a JSON schema. " + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 104, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SSBasedInspection", + "shortDescription": { + "text": "Structural search inspection" + }, + "fullDescription": { + "text": "Allows configuring Structural Search/Structural Replace templates that you can apply to the file you are editing. All matches will be highlighted and marked with the template name that you have configured. If you configure the Structural Replace pattern as well, the corresponding replace option will be available as a quick-fix.", + "markdown": "Allows configuring **Structural Search/Structural Replace** templates that you can apply to the file you are editing.\n\nAll matches will be highlighted and marked with the template name that you have configured.\nIf you configure the **Structural Replace** pattern as well, the corresponding replace option will be available as a quick-fix." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Structural search", + "index": 118, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CheckValidXmlInScriptTagBody", + "shortDescription": { + "text": "Malformed content of 'script' tag" + }, + "fullDescription": { + "text": "Reports contents of 'script' tags that are invalid XML. Example: '' After the quick-fix is applied: ''", + "markdown": "Reports contents of `script` tags that are invalid XML. \n\n**Example:**\n\n\n \n\nAfter the quick-fix is applied:\n\n\n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 29, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpSuspiciousBackref", + "shortDescription": { + "text": "Suspicious back reference" + }, + "fullDescription": { + "text": "Reports back references that will not be resolvable at runtime. This means that the back reference can never match anything. A back reference will not be resolvable when the group is defined after the back reference, or if the group is defined in a different branch of an alternation. Example of a group defined after its back reference: '\\1(abc)' Example of a group and a back reference in different branches: 'a(b)c|(xy)\\1z' New in 2022.1", + "markdown": "Reports back references that will not be resolvable at runtime. This means that the back reference can never match anything. A back reference will not be resolvable when the group is defined after the back reference, or if the group is defined in a different branch of an alternation.\n\n**Example of a group defined after its back reference:**\n\n\n \\1(abc)\n\n**Example of a group and a back reference in different branches:**\n\n\n a(b)c|(xy)\\1z\n\nNew in 2022.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 82, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpSingleCharAlternation", + "shortDescription": { + "text": "Single character alternation" + }, + "fullDescription": { + "text": "Reports single char alternation in a RegExp. It is simpler to use a character class instead. This may also provide better matching performance. Example: 'a|b|c|d' After the quick-fix is applied: '[abcd]' New in 2017.1", + "markdown": "Reports single char alternation in a RegExp. It is simpler to use a character class instead. This may also provide better matching performance.\n\n**Example:**\n\n\n a|b|c|d\n\nAfter the quick-fix is applied:\n\n\n [abcd]\n\n\nNew in 2017.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 82, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CheckTagEmptyBody", + "shortDescription": { + "text": "Empty element content" + }, + "fullDescription": { + "text": "Reports XML elements without contents. Example: '\n \n ' After the quick-fix is applied: '\n \n '", + "markdown": "Reports XML elements without contents.\n\n**Example:**\n\n\n \n \n \n\nAfter the quick-fix is applied:\n\n\n \n \n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 61, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnresolvedReference", + "shortDescription": { + "text": "Unresolved reference" + }, + "fullDescription": { + "text": "Reports an unresolved reference to a named pattern ('define') in RELAX-NG files that use XML syntax. Suggests creating the referenced 'define' element.", + "markdown": "Reports an unresolved reference to a named pattern (`define`) in RELAX-NG files that use XML syntax. Suggests creating the referenced `define` element." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "RELAX NG", + "index": 120, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlMissingClosingTag", + "shortDescription": { + "text": "Missing closing tag" + }, + "fullDescription": { + "text": "Reports an HTML element without a closing tag. Some coding styles require that HTML elements have closing tags even where this is optional. Example: '\n \n

    Behold!\n \n ' After the quick-fix is applied: '\n \n

    Behold!

    \n \n '", + "markdown": "Reports an HTML element without a closing tag. Some coding styles require that HTML elements have closing tags even where this is optional.\n\n**Example:**\n\n\n \n \n

    Behold!\n \n \n\nAfter the quick-fix is applied:\n\n\n \n \n

    Behold!

    \n \n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 29, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HtmlUnknownAnchorTarget", + "shortDescription": { + "text": "Unresolved fragment in a link" + }, + "fullDescription": { + "text": "Reports an unresolved last part of an URL after the '#' sign.", + "markdown": "Reports an unresolved last part of an URL after the `#` sign." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 29, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlInvalidId", + "shortDescription": { + "text": "Unresolved 'id' reference" + }, + "fullDescription": { + "text": "Reports an unresolved 'id' reference in XML.", + "markdown": "Reports an unresolved `id` reference in XML." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 61, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ReassignedToPlainText", + "shortDescription": { + "text": "Reassigned to plain text" + }, + "fullDescription": { + "text": "Reports files that were explicitly re-assigned to Plain Text File Type. This association is unnecessary because the platform auto-detects text files by content automatically. You can dismiss this warning by removing the file type association in Settings | Editor | File Types | Text.", + "markdown": "Reports files that were explicitly re-assigned to Plain Text File Type. This association is unnecessary because the platform auto-detects text files by content automatically.\n\nYou can dismiss this warning by removing the file type association\nin **Settings \\| Editor \\| File Types \\| Text**." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 44, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JsonPathEvaluateUnknownKey", + "shortDescription": { + "text": "Unknown property key used for JSONPath evaluate expression" + }, + "fullDescription": { + "text": "Reports a key in a JSONPath expression that is missing in the source JSON document to evaluate.", + "markdown": "Reports a key in a JSONPath expression that is missing in the source JSON document to evaluate." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 104, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Annotator", + "shortDescription": { + "text": "Annotator" + }, + "fullDescription": { + "text": "Reports problems that are found by language annotators in the result of a batch code inspection run.", + "markdown": "Reports problems that are found by language annotators in the result of a batch code inspection run." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 44, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JsonDuplicatePropertyKeys", + "shortDescription": { + "text": "Duplicate keys in object literals" + }, + "fullDescription": { + "text": "Reports a duplicate key in an object literal.", + "markdown": "Reports a duplicate key in an object literal." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 104, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpRedundantNestedCharacterClass", + "shortDescription": { + "text": "Redundant nested character class" + }, + "fullDescription": { + "text": "Reports unnecessary nested character classes. Example: '[a-c[x-z]]' After the quick-fix is applied: '[a-cx-z]' New in 2020.2", + "markdown": "Reports unnecessary nested character classes.\n\n**Example:**\n\n\n [a-c[x-z]]\n\nAfter the quick-fix is applied:\n\n\n [a-cx-z]\n\nNew in 2020.2" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 82, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XmlDeprecatedElement", + "shortDescription": { + "text": "Deprecated symbol" + }, + "fullDescription": { + "text": "Reports a deprecated XML element or attribute. Symbols can be marked by XML comment or documentation tag with text 'deprecated'.", + "markdown": "Reports a deprecated XML element or attribute.\n\nSymbols can be marked by XML comment or documentation tag with text 'deprecated'." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "XML", + "index": 61, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpOctalEscape", + "shortDescription": { + "text": "Octal escape" + }, + "fullDescription": { + "text": "Reports octal escapes, which are easily confused with back references. Use hexadecimal escapes to avoid confusion. Example: '\\07' After the quick-fix is applied: '\\x07' New in 2017.1", + "markdown": "Reports octal escapes, which are easily confused with back references. Use hexadecimal escapes to avoid confusion.\n\n**Example:**\n\n\n \\07\n\nAfter the quick-fix is applied:\n\n\n \\x07\n\nNew in 2017.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 82, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedDefine", + "shortDescription": { + "text": "Unused define" + }, + "fullDescription": { + "text": "Reports an unused named pattern ('define') in a RELAX-NG file (XML or Compact Syntax). 'define' elements that are used through an include in another file are ignored.", + "markdown": "Reports an unused named pattern (`define`) in a RELAX-NG file (XML or Compact Syntax). `define` elements that are used through an include in another file are ignored." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "RELAX NG", + "index": 120, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpAnonymousGroup", + "shortDescription": { + "text": "Anonymous capturing group or numeric back reference" + }, + "fullDescription": { + "text": "Reports anonymous capturing groups and numeric back references in a RegExp. These are only reported when the RegExp dialect supports named group and named group references. Named groups and named back references improve code readability and are recommended to use instead. When a capture is not needed, matching can be more performant and use less memory by using a non-capturing group, i.e. '(?:xxx)' instead of '(xxx)'. Example: '(\\d\\d\\d\\d)\\1' A better regex pattern could look like this: '(?\\d\\d\\d\\d)\\k' New in 2017.2", + "markdown": "Reports anonymous capturing groups and numeric back references in a RegExp. These are only reported when the RegExp dialect supports named group and named group references. Named groups and named back references improve code readability and are recommended to use instead. When a capture is not needed, matching can be more performant and use less memory by using a non-capturing group, i.e. `(?:xxx)` instead of `(xxx)`.\n\n**Example:**\n\n\n (\\d\\d\\d\\d)\\1\n\nA better regex pattern could look like this:\n\n\n (?\\d\\d\\d\\d)\\k\n\nNew in 2017.2" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 82, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpDuplicateAlternationBranch", + "shortDescription": { + "text": "Duplicate branch in alternation" + }, + "fullDescription": { + "text": "Reports duplicate branches in a RegExp alternation. Duplicate branches slow down matching and obscure the intent of the expression. Example: '(alpha|bravo|charlie|alpha)' After the quick-fix is applied: '(alpha|bravo|charlie)' New in 2017.1", + "markdown": "Reports duplicate branches in a RegExp alternation. Duplicate branches slow down matching and obscure the intent of the expression.\n\n**Example:**\n\n\n (alpha|bravo|charlie|alpha)\n\nAfter the quick-fix is applied:\n\n\n (alpha|bravo|charlie)\n\nNew in 2017.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 82, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RegExpRepeatedSpace", + "shortDescription": { + "text": "Consecutive spaces" + }, + "fullDescription": { + "text": "Reports multiple consecutive spaces in a RegExp. Because spaces are not visible by default, it can be hard to see how many spaces are required. The RegExp can be made more clear by replacing the consecutive spaces with a single space and a counted quantifier. Example: '( )' After the quick-fix is applied: '( {5})' New in 2017.1", + "markdown": "Reports multiple consecutive spaces in a RegExp. Because spaces are not visible by default, it can be hard to see how many spaces are required. The RegExp can be made more clear by replacing the consecutive spaces with a single space and a counted quantifier.\n\n**Example:**\n\n\n ( )\n\nAfter the quick-fix is applied:\n\n\n ( {5})\n\n\nNew in 2017.1" + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "RegExp", + "index": 82, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CheckEmptyScriptTag", + "shortDescription": { + "text": "Empty tag" + }, + "fullDescription": { + "text": "Reports empty tags that do not work in some browsers. Example: '\n \n '", + "markdown": "Reports empty tags that do not work in some browsers.\n\n**Example:**\n\n\n \n \n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "HTML", + "index": 29, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JsonPathUnknownOperator", + "shortDescription": { + "text": "Unknown JSONPath operator" + }, + "fullDescription": { + "text": "Reports an unknown operator on a JSONPath expression instead of one of the standard ones: 'in', 'nin', 'subsetof', 'anyof', 'noneof', 'size', 'empty', 'contains'.", + "markdown": "Reports an unknown operator on a JSONPath expression instead of one of the standard ones: `in`, `nin`, `subsetof`, `anyof`, `noneof`, `size`, `empty`, `contains`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "JSON and JSON5", + "index": 104, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.java-i18n", + "version": "223.8787", + "rules": [ + { + "id": "UnusedMessageFormatParameter", + "shortDescription": { + "text": "Missing message format parameter" + }, + "fullDescription": { + "text": "Reports properties values that look like 'java.text.MessageFormat' format strings but do not use some the parameters of the '{xx}' kind. Example: '# parameter {0} is not used\nerror.message=Something happened in line {1}'", + "markdown": "Reports properties values that look like `java.text.MessageFormat` format strings but do not use some the parameters of the `{xx}` kind.\n\nExample:\n\n\n # parameter {0} is not used\n error.message=Something happened in line {1}\n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Properties files", + "index": 31, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConvertToBasicLatin", + "shortDescription": { + "text": "Non-Basic Latin character" + }, + "fullDescription": { + "text": "Reports non-Basic Latin characters in literals and suggests replacing them with unicode entities. Example: '// © 2021\n char c = '©';\n String s = \"Áî\";'\n After the quick-fix is applied: '// © 2021\n char c = '\\u00a9';\n String s = \"\\u00c1\\u00ee\";'", + "markdown": "Reports non-Basic Latin characters in literals and suggests replacing them with unicode entities.\n\nExample:\n\n\n // © 2021\n char c = '©';\n String s = \"Áî\";\n\nAfter the quick-fix is applied:\n\n\n // © 2021\n char c = '\\u00a9';\n String s = \"\\u00c1\\u00ee\";\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFORMATION" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 9, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InconsistentResourceBundle", + "shortDescription": { + "text": "Inconsistent resource bundle" + }, + "fullDescription": { + "text": "Reports problems in the properties files contained in the resource bundle. Report missing translation option controls search for an untranslated properties. It reports properties contained in parent properties file that are missing in inherited (unless it's a language dialect). E.g. having this resource bundle: messages.properties : abc=xxx messages_fr.properties : empty Property abc will be reported as untranslated. Report inconsistent properties option controls invalid resource bundle structure inspection. It reports properties contained in inherited properties file that are missing in parent (or in sibling if there is no parent). E.g. having this resource bundle: messages.properties : empty messages_fr.properties : abc=xxx Property abc translation here is not available for any language except French, and, thus, will be reported as missing in the (default) properties file messages.properties . Report properties overridden with the same value option checks for properties which are copy-pasted into several properties files verbatim. E.g. in this resource bundle: messages.properties : abc=xxx messages_fr.properties : abc=xxx Property abc will be reported as unnecessarily inherited in the file messages_fr.properties . Report properties overridden with different placeholders option checks for properties which are overridden for placeholder consistency. E.g. in this resource bundle: messages.properties : qwe={0}xxx{1} abc={0}yyy{1} messages_fr.properties : qwe={0}xxx{0}xxx{1} abc={0}yyy Property abc will be reported as property contains message format placeholders with value not corresponding to messages.properties . Report properties overridden with different values endings option checks for properties which are overridden for ending consistency. E.g. in this resource bundle: messages.properties : abc=xxxzzz messages_fr.properties : abc=xxx; Property abc will be reported as property contains special signs ( '!' , '?' , '.' , ':' or ';' ) at the end of value but value in messages.properties doesn't.", + "markdown": "Reports problems in the properties files contained in the resource bundle.\n\n* **Report missing translation**\n\noption controls search for an untranslated properties. \nIt reports properties contained in parent properties file that are missing in inherited (unless it's a language dialect). \nE.g. having this resource bundle: \n**messages.properties** : **abc=xxx** \n**messages_fr.properties** : empty \nProperty **abc** will be reported as untranslated.\n\n* **Report inconsistent properties**\n\noption controls invalid resource bundle structure inspection. \nIt reports properties contained in inherited properties file that are missing in parent (or in sibling if there is no parent). \nE.g. having this resource bundle: \n**messages.properties** : empty \n**messages_fr.properties** : **abc=xxx** \nProperty **abc** translation here is not available for any language except French, and, thus, will be reported as missing in the (default) properties file **messages.properties** .\n\n* **Report properties overridden with the same value**\n\noption checks for properties which are copy-pasted into several properties files verbatim. \nE.g. in this resource bundle: \n**messages.properties** : **abc=xxx** \n**messages_fr.properties** : **abc=xxx** \nProperty **abc** will be reported as unnecessarily inherited in the file **messages_fr.properties** . \n\n* **Report properties overridden with different placeholders**\n\noption checks for properties which are overridden for placeholder consistency. \nE.g. in this resource bundle: \n**messages.properties** : \n**qwe={0}xxx{1}** \n**abc={0}yyy{1}** \n**messages_fr.properties** : \n**qwe={0}xxx{0}xxx{1}** \n**abc={0}yyy** \nProperty **abc** will be reported as property contains message format placeholders with value not corresponding to **messages.properties** . \n\n* **Report properties overridden with different values endings**\n\noption checks for properties which are overridden for ending consistency. \nE.g. in this resource bundle: \n**messages.properties** : \n**abc=xxxzzz** \n**messages_fr.properties** : \n**abc=xxx;** \nProperty **abc** will be reported as property contains special signs ( **'!'** , **'?'** , **'.'** , **':'** or **';'** ) at the end of value but value in **messages.properties** doesn't. " + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Properties files", + "index": 31, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HardCodedStringLiteral", + "shortDescription": { + "text": "Hardcoded strings" + }, + "fullDescription": { + "text": "Reports any instances of hardcoded 'String' literals. Hardcoded 'String' literals are probably errors in an internationalized environment. This inspection won't report empty strings and strings consisting only of whitespaces. A quick-fix is available to transform a string literal into a 'java.util.ResourceBundle.getString()' method call. Use inspection's options to further specialize whether this inspection should report strings in: Assert statements like in 'assert str.equals(\"message\")' Exception constructor calls like in 'new Exception(\"message\")' JUnit assert calls like in 'assertEquals(str, \"message\")' The only argument to a method returning String like in 'getStringByKey(\"key\")' Literals with value of legal and existing class name like 'Class.forName(\"java.lang.Object\")' Literals with value of legal and existing property key 'bundle.getString(\"authentication.failed\")'", + "markdown": "Reports any instances of hardcoded `String` literals.\n\nHardcoded `String` literals are probably errors in an\ninternationalized environment. This inspection won't report empty strings and strings consisting only of whitespaces. A quick-fix is available\nto transform a string literal into a `java.util.ResourceBundle.getString()` method call.\n\nUse inspection's options to further specialize whether this inspection should report strings in:\n\n* Assert statements like in `assert str.equals(\"message\")`\n* Exception constructor calls like in `new Exception(\"message\")`\n* JUnit assert calls like in `assertEquals(str, \"message\")`\n* The only argument to a method returning String like in `getStringByKey(\"key\")`\n* Literals with value of legal and existing class name like `Class.forName(\"java.lang.Object\")`\n* Literals with value of legal and existing property key `bundle.getString(\"authentication.failed\")`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 9, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DialogTitleCapitalization", + "shortDescription": { + "text": "Incorrect string capitalization" + }, + "fullDescription": { + "text": "Reports strings in method parameters and return values annotated with '@Nls' and having the capitalization parameter to conform to capitalization rules existing in most platform UI guidelines. Example: 'void setTitle(@NlsContexts.DialogTitle String title) {}\n setTitle(\"This is sentence capitalization but should be title\");' After the quick-fix is applied: 'setTitle(\"This Is Sentence Capitalization but Should Be Title\");'", + "markdown": "Reports strings in method parameters and return values annotated with `@Nls` and having the capitalization parameter to conform to capitalization rules existing in most platform UI guidelines.\n\n**Example:**\n\n\n void setTitle(@NlsContexts.DialogTitle String title) {}\n setTitle(\"This is sentence capitalization but should be title\"); \n\nAfter the quick-fix is applied:\n\n\n setTitle(\"This Is Sentence Capitalization but Should Be Title\"); \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 9, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnresolvedPropertyKey", + "shortDescription": { + "text": "Invalid property key" + }, + "fullDescription": { + "text": "Reports invalid arguments that are passed to methods with parameters annotated as '@PropertyKey'. These arguments should be valid property keys in corresponding properties files. Also, the inspection verifies that the 'resourceBundle' argument of the '@PropertyKey' annotation is an existing resource bundle. Use the quick-fix to create a new property or to select an existing one. Example: '@PropertyKey(resourceBundle = \"myBundle\") String value = \"invalid.key\";'", + "markdown": "Reports invalid arguments that are passed to methods with parameters annotated as `@PropertyKey`.\n\nThese arguments should be valid property keys in corresponding properties files.\nAlso, the inspection verifies that the `resourceBundle`\nargument of the `@PropertyKey` annotation is an existing resource bundle.\n\n\nUse the quick-fix to create a new property or to select an existing one.\n\nExample:\n\n\n @PropertyKey(resourceBundle = \"myBundle\") String value = \"invalid.key\";\n" + }, + "defaultConfiguration": { + "enabled": true, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Properties files", + "index": 121, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SuspiciousLocalesLanguages", + "shortDescription": { + "text": "Suspicious resource bundle locale languages" + }, + "fullDescription": { + "text": "Reports locales with language codes that are not supported by Java.", + "markdown": "Reports locales with language codes that are not supported by Java." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Properties files", + "index": 31, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DuplicateStringLiteralInspection", + "shortDescription": { + "text": "Duplicate string literal" + }, + "fullDescription": { + "text": "Reports string literals that are replicated unchanged throughout the project. Two quick-fixes are provided. One to introduce a constant for a duplicated string and use it throughout the project, and one to show the location of all the duplicates of a particular string literal. Example: 'class C1 { String CONST1 = \"duplicate string\"; }\n class C2 { String CONST2 = \"duplicate string\"; }' Configure the inspection: Use the Min string length field to set the minimal string length required to detect duplicates. Use the Ignore @PropertyKey expressions option to ignore strings passed as arguments to methods annotated with 'org.jetbrains.annotations.PropertyKey'.", + "markdown": "Reports string literals that are replicated unchanged throughout the project. Two quick-fixes are provided. One to introduce a constant for a duplicated string and use it throughout the project, and one to show the location of all the duplicates of a particular string literal.\n\nExample:\n\n\n class C1 { String CONST1 = \"duplicate string\"; }\n class C2 { String CONST2 = \"duplicate string\"; }\n\nConfigure the inspection:\n\n* Use the **Min string length** field to set the minimal string length required to detect duplicates.\n* Use the **Ignore @PropertyKey expressions** option to ignore strings passed as arguments to methods annotated with `org.jetbrains.annotations.PropertyKey`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Internationalization", + "index": 9, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "org.editorconfig.editorconfigjetbrains", + "version": "223.8787", + "rules": [ + { + "id": "EditorConfigRootDeclarationUniqueness", + "shortDescription": { + "text": "Extra top-level declaration" + }, + "fullDescription": { + "text": "Reports multiple top-level declarations. There can be only one optional “root=true” top-level declaration in the EditorConfig file. Using multiple top-level declarations is not allowed.", + "markdown": "Reports multiple top-level declarations. There can be only one optional \"root=true\" top-level declaration in the EditorConfig file. Using multiple top-level declarations is not allowed." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigNumerousWildcards", + "shortDescription": { + "text": "Too many wildcards" + }, + "fullDescription": { + "text": "Reports sections that contain too many wildcards. Using a lot of wildcards may lead to performance issues.", + "markdown": "Reports sections that contain too many wildcards. Using a lot of wildcards may lead to performance issues." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigKeyCorrectness", + "shortDescription": { + "text": "Unknown property" + }, + "fullDescription": { + "text": "Reports properties that are not supported by the IDE. Note: some “ij” domain properties may require specific language plugins.", + "markdown": "Reports properties that are not supported by the IDE. Note: some \"ij\" domain properties may require specific language plugins." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigEncoding", + "shortDescription": { + "text": "File encoding doesn't match EditorConfig charset" + }, + "fullDescription": { + "text": "Checks that current file encoding matches the encoding defined in \"charset\" property of .editorconfig file.", + "markdown": "Checks that current file encoding matches the encoding defined in \"charset\" property of .editorconfig file." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigRootDeclarationCorrectness", + "shortDescription": { + "text": "Unexpected top-level declaration" + }, + "fullDescription": { + "text": "Reports unexpected top-level declarations. Top-level declarations other than “root=true” are not allowed in the EditorConfig file.", + "markdown": "Reports unexpected top-level declarations. Top-level declarations other than \"root=true\" are not allowed in the EditorConfig file." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigPatternRedundancy", + "shortDescription": { + "text": "Duplicate or redundant pattern" + }, + "fullDescription": { + "text": "Reports file patterns that are redundant as there already are other patterns that define the same scope of files or even a broader one. For example, in '[{*.java,*}]' the first '*.java' pattern defines a narrower scope compared to '*'. That is why it is redundant and can be removed.", + "markdown": "Reports file patterns that are redundant as there already are other patterns that define the same scope of files or even a broader one. For example, in `[{*.java,*}]` the first `*.java` pattern defines a narrower scope compared to `*`. That is why it is redundant and can be removed." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigDeprecatedDescriptor", + "shortDescription": { + "text": "Deprecated property" + }, + "fullDescription": { + "text": "Reports EditorConfig properties that are no longer supported.", + "markdown": "Reports EditorConfig properties that are no longer supported." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigShadowedOption", + "shortDescription": { + "text": "Overridden property" + }, + "fullDescription": { + "text": "Reports properties that are already defined in other sections. For example: '[*.java]\nindent_size=4\n[{*.java,*.js}]\nindent_size=2' The second section includes all '*.java' files too but it also redefines indent_size. As a result the value 2 will be used for files matching '*.java'.", + "markdown": "Reports properties that are already defined in other sections.\n\nFor example:\n\n\n [*.java]\n indent_size=4\n [{*.java,*.js}]\n indent_size=2\n\nThe second section includes all `*.java` files too but it also redefines indent_size. As a result the value 2 will be used for files matching `*.java`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigEmptyHeader", + "shortDescription": { + "text": "Empty header" + }, + "fullDescription": { + "text": "Reports sections with an empty header. Section header must contain file path globs in the format similar to one supported by 'gitignore'.", + "markdown": "Reports sections with an empty header. Section header must contain file path globs in the format similar to one supported by `gitignore`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigValueUniqueness", + "shortDescription": { + "text": "Non-unique list value" + }, + "fullDescription": { + "text": "Reports duplicates in lists of values.", + "markdown": "Reports duplicates in lists of values." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigMissingRequiredDeclaration", + "shortDescription": { + "text": "Required declarations are missing" + }, + "fullDescription": { + "text": "Reports properties that miss the required declarations. Refer to the documentation for more information.", + "markdown": "Reports properties that miss the required declarations. Refer to the documentation for more information." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigSpaceInHeader", + "shortDescription": { + "text": "Space in file pattern" + }, + "fullDescription": { + "text": "Reports space characters in wildcard patterns that affect pattern matching. If these characters are not intentional, they should be removed.", + "markdown": "Reports space characters in wildcard patterns that affect pattern matching. If these characters are not intentional, they should be removed." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigOptionRedundancy", + "shortDescription": { + "text": "Redundant property" + }, + "fullDescription": { + "text": "Reports properties that are redundant when another applicable section already contains the same property and value. For example: '[*]\nindent_size=4\n[*.java]\nindent_size=4' are both applicable to '*.java' files and define the same 'indent_size' value.", + "markdown": "Reports properties that are redundant when another applicable section already contains the same property and value.\n\n\nFor example:\n\n\n [*]\n indent_size=4\n [*.java]\n indent_size=4\n\nare both applicable to `*.java` files and define the same `indent_size` value." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigUnexpectedComma", + "shortDescription": { + "text": "Unexpected comma" + }, + "fullDescription": { + "text": "Reports commas that cannot be used in the current context. Commas are allowed only as separators for values in lists.", + "markdown": "Reports commas that cannot be used in the current context. Commas are allowed only as separators for values in lists." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigCharClassRedundancy", + "shortDescription": { + "text": "Unnecessary character class" + }, + "fullDescription": { + "text": "Reports character classes that consist of a single character. Such classes can be simplified to a character, for example '[a]'→'a'.", + "markdown": "Reports character classes that consist of a single character. Such classes can be simplified to a character, for example `[a]`→`a`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigPartialOverride", + "shortDescription": { + "text": "Overlapping sections" + }, + "fullDescription": { + "text": "Reports subsets of files specified in the current section that overlap with other subsets in other sections. For example: '[{foo,bar}]' and '[{foo,bas}]' both contain “foo”.", + "markdown": "Reports subsets of files specified in the current section that overlap with other subsets in other sections. For example: `[{foo,bar}]` and `[{foo,bas}]` both contain \"foo\"." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigEmptySection", + "shortDescription": { + "text": "Empty section" + }, + "fullDescription": { + "text": "Reports sections that do not contain any EditorConfig properties.", + "markdown": "Reports sections that do not contain any EditorConfig properties." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigShadowingOption", + "shortDescription": { + "text": "Overriding property" + }, + "fullDescription": { + "text": "Reports properties that override the same properties defined earlier in the file. For example: '[*.java]\nindent_size=4\n[{*.java,*.js}]\nindent_size=2' The second section includes the same files as '[*.java]' but also sets indent_size to value 2. Thus the first declaration 'indent_size=4'will be ignored.", + "markdown": "Reports properties that override the same properties defined earlier in the file.\n\nFor example:\n\n\n [*.java]\n indent_size=4\n [{*.java,*.js}]\n indent_size=2\n\nThe second section includes the same files as `[*.java]` but also sets indent_size to value 2. Thus the first declaration `indent_size=4`will be ignored." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigListAcceptability", + "shortDescription": { + "text": "Unexpected value list" + }, + "fullDescription": { + "text": "Reports lists of values that are used in properties in which lists are not supported. In this case, only a single value can be specified.", + "markdown": "Reports lists of values that are used in properties in which lists are not supported. In this case, only a single value can be specified." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigPatternEnumerationRedundancy", + "shortDescription": { + "text": "Unnecessary braces" + }, + "fullDescription": { + "text": "Reports pattern lists that are either empty '{}' or contain just one pattern, for example '{foo}'. The braces are needed only if there are two and more, for example: '{foo,bar}'", + "markdown": "Reports pattern lists that are either empty `{}` or contain just one pattern, for example `{foo}`. The braces are needed only if there are two and more, for example: `{foo,bar}`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigReferenceCorrectness", + "shortDescription": { + "text": "Invalid reference" + }, + "fullDescription": { + "text": "Reports identifiers that are either unknown or have a wrong type.", + "markdown": "Reports identifiers that are either unknown or have a wrong type." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigPairAcceptability", + "shortDescription": { + "text": "Unexpected key-value pair" + }, + "fullDescription": { + "text": "Reports key-value pairs that are not allowed in the current context.", + "markdown": "Reports key-value pairs that are not allowed in the current context." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigNoMatchingFiles", + "shortDescription": { + "text": "No matching files" + }, + "fullDescription": { + "text": "Reports sections with wildcard patterns that do not match any files under the directory in which the '.editorconfig' file is located.", + "markdown": "Reports sections with wildcard patterns that do not match any files under the directory in which the `.editorconfig` file is located." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigWildcardRedundancy", + "shortDescription": { + "text": "Redundant wildcard" + }, + "fullDescription": { + "text": "Reports wildcards that become redundant when the “**” wildcard is used in the same section. The “**” wildcard defines a broader set of files than any other wildcard. That is why, any other wildcard used in the same section has no affect and can be removed.", + "markdown": "Reports wildcards that become redundant when the \"\\*\\*\" wildcard is used in the same section.\n\n\nThe \"\\*\\*\" wildcard defines a broader set of files than any other wildcard.\nThat is why, any other wildcard used in the same section has no affect and can be removed." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigHeaderUniqueness", + "shortDescription": { + "text": "EditorConfig section is not unique" + }, + "fullDescription": { + "text": "Reports sections that define the same file pattern as other sections.", + "markdown": "Reports sections that define the same file pattern as other sections." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigValueCorrectness", + "shortDescription": { + "text": "Invalid property value" + }, + "fullDescription": { + "text": "Reports property values that do not meet value restrictions. For example, some properties may be only “true” or “false”, others contain only integer numbers etc. If a value has a limited set of variants, use code completion to see all of them.", + "markdown": "Reports property values that do not meet value restrictions. For example, some properties may be only \"true\" or \"false\", others contain only integer numbers etc. If a value has a limited set of variants, use code completion to see all of them." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigCharClassLetterRedundancy", + "shortDescription": { + "text": "Duplicate character class letter" + }, + "fullDescription": { + "text": "Reports wildcard patterns in the EditorConfig section that contain a duplicate character in the character class, for example '[aa]'.", + "markdown": "Reports wildcard patterns in the EditorConfig section that contain a duplicate character in the character class, for example `[aa]`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "EditorConfigUnusedDeclaration", + "shortDescription": { + "text": "Unused declaration" + }, + "fullDescription": { + "text": "Reports unused declarations. Such declarations can be removed.", + "markdown": "Reports unused declarations. Such declarations can be removed." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "EditorConfig", + "index": 32, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "org.jetbrains.plugins.gradle", + "version": "223.8787", + "rules": [ + { + "id": "ForeignDelegate", + "shortDescription": { + "text": "Possibly misplaced call to Gradle method" + }, + "fullDescription": { + "text": "Detects possibly misplaced calls to Gradle methods. Gradle buildscripts comprise a lot of nested closures, making the code structure similar to a markup language. Due to the behavior of Groovy, the methods that you can write in the outer closures are also available in the inner ones. Such methods may have no meaning when written outside their scope. Sometimes it may be hard to detect this situation. This inspection aims to detect such methods. Example: 'repositories {\n // the delegate of 'repositories' has method 'exclusiveContent', which can be written here\n maven {\n // the delegate of 'maven' has method 'content', which can be written here\n // but 'exclusiveContent' is also available\n exclusiveContent {} // reports 'exclusiveContent'\n }\n}'", + "markdown": "Detects possibly misplaced calls to Gradle methods.\nGradle buildscripts comprise a lot of nested closures, making the code structure similar to a markup language. Due to the behavior of Groovy, the methods that you can write in the outer closures are also available in the inner ones. Such methods may have no meaning when written outside their scope. \nSometimes it may be hard to detect this situation. This inspection aims to detect such methods.\n\n**Example:**\n\n\n repositories {\n // the delegate of 'repositories' has method 'exclusiveContent', which can be written here\n maven {\n // the delegate of 'maven' has method 'content', which can be written here\n // but 'exclusiveContent' is also available\n exclusiveContent {} // reports 'exclusiveContent'\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Gradle/Probable bugs", + "index": 42, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IncorrectPluginDslStructure", + "shortDescription": { + "text": "Plugin DSL structure" + }, + "fullDescription": { + "text": "Detects disallowed statements before 'plugins {}' block. Due to the limitations of Gradle Plugin DSL, only a restricted set of Groovy statements is available before ''plugins {}'' block. The only options are ''buildscript {}'', ''pluginManagement {}'' and other ''plugins {}''. See Gradle documentation Example: 'import foo.bar.Baz\nplugins {} // reports 'plugins'\nplugins {\n foo() // reporst 'foo'\n id 'java'\n}'", + "markdown": "Detects disallowed statements before 'plugins {}' block.\nDue to the limitations of Gradle Plugin DSL, only a restricted set of Groovy statements is available before '`plugins {}`' block. The only options are '`buildscript {}`', '`pluginManagement {}`' and other '`plugins {}`'. \n[See Gradle documentation](https://docs.gradle.org/current/userguide/plugins.html#plugins_dsl_limitations)\n\n**Example:**\n\n\n import foo.bar.Baz\n plugins {} // reports 'plugins'\n plugins {\n foo() // reporst 'foo'\n id 'java'\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Gradle/Validity issues", + "index": 47, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BintrayPublishingPlugin", + "shortDescription": { + "text": "Bintray publishing plugin may stop working on May 1st, 2021" + }, + "fullDescription": { + "text": "Detects usages of Gradle plugin 'com.jfrog.bintray'. The plugin is used for publishing build results to Bintray. Publishing to Bintray service is disabled.", + "markdown": "Detects usages of Gradle plugin `com.jfrog.bintray`.\nThe plugin is used for publishing build results to Bintray.\nPublishing to\n[Bintray](https://www.jfrog.com/confluence/display/BT/Welcome+to+JFrog+Bintray) service is disabled." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Gradle/Probable bugs", + "index": 42, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DependencyNotationArgument", + "shortDescription": { + "text": "Unrecognized dependency notation" + }, + "fullDescription": { + "text": "Detects incorrect dependency notations. The following types/formats are supported by Gradle: Instances of 'Dependency'; 'String' or 'CharSequence' values, for example ''org.gradle:gradle-core:1.0''; Maps, for example '[group: 'org.gradle', name: 'gradle-core', version: '1.0']'; FileCollections, for example 'files('some.jar', 'someOther.jar')'; Projects, for example 'project(':some:project:path')'; 'ClassPathNotation', for example 'gradleApi()'; Lists of dependency notations, for example '['org.gradle:gradle-core:1.0']'; (Gradle 7.0+) Version catalog accessors, for example 'libs.groovy.core'. See Gradle documentation Example: 'dependencies {\n implementation(1) // reports '1'\n}'", + "markdown": "Detects incorrect dependency notations.\nThe following types/formats are supported by Gradle:\n\n* Instances of `Dependency`;\n* `String` or `CharSequence` values, for example `'org.gradle:gradle-core:1.0'`;\n* Maps, for example `[group: 'org.gradle', name: 'gradle-core', version: '1.0']`;\n* FileCollections, for example `files('some.jar', 'someOther.jar')`;\n* Projects, for example `project(':some:project:path')`;\n* `ClassPathNotation`, for example `gradleApi()`;\n* Lists of dependency notations, for example `['org.gradle:gradle-core:1.0']`;\n* (Gradle 7.0+) [Version catalog accessors](https://docs.gradle.org/current/userguide/platforms.html), for example `libs.groovy.core`.\n\n[See Gradle documentation](https://docs.gradle.org/current/userguide/declaring_dependencies.html#sec:dependency-types)\n\n**Example:**\n\n\n dependencies {\n implementation(1) // reports '1'\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Gradle/Probable bugs", + "index": 42, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DeprecatedConfigurations", + "shortDescription": { + "text": "Deprecated configurations" + }, + "fullDescription": { + "text": "Detects usage of configuration methods that were deprecated. Configuration methods may be deprecated because of two possible reasons: The Gradle API has evolved, so old method choices should be avoided; Some plugin provides a better version of the deprecated configuration method. Most likely there will be an alternative for the deprecated method. Example: 'plugins {\n id 'java'\n}\n\ndependencies {\n archive 'org.gradle.api:gradle:1.0' // reports 'archive'\n}'", + "markdown": "Detects usage of configuration methods that were deprecated.\nConfiguration methods may be deprecated because of two possible reasons:\n\n* The Gradle API has evolved, so old method choices should be avoided;\n* Some plugin provides a better version of the deprecated configuration method.\n\nMost likely there will be an alternative for the deprecated method.\n\n**Example:**\n\n\n plugins {\n id 'java'\n }\n\n dependencies {\n archive 'org.gradle.api:gradle:1.0' // reports 'archive'\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Gradle/Validity issues", + "index": 47, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MultipleRepositoryUrls", + "shortDescription": { + "text": "Multiple repository urls" + }, + "fullDescription": { + "text": "Reports the usage of multiple URLs per repository (maven or ivy) block. The problem is that only one URL can be picked up for the repository, the other URLs will be ignored.", + "markdown": "Reports the usage of multiple URLs per repository (maven or ivy) block. The problem is that only one URL can be picked up for the repository, the other URLs will be ignored." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Gradle/Probable bugs", + "index": 42, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JCenterRepository", + "shortDescription": { + "text": "Builds will no longer be able to resolve artifacts from JCenter after February 1st, 2022" + }, + "fullDescription": { + "text": "Detects usages of the JCenter repository to resolve dependencies. Builds will no longer be able to resolve artifacts from JCenter after February 1st, 2022.", + "markdown": "Detects usages of the JCenter repository to resolve dependencies. Builds will no longer be able to resolve artifacts from JCenter after February 1st, 2022." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Gradle/Probable bugs", + "index": 42, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConfigurationAvoidance", + "shortDescription": { + "text": "Configuration avoidance" + }, + "fullDescription": { + "text": "(Gradle 4.9+) Detects usage of API that interacts with tasks eagerly. Eager interaction with tasks implies some invonveniences: The user should manually set up all dependencies between tasks; In the configuration phase, all the tasks accessed via the eager API become configured, even if they are not executed afterwards. It results in performance degradation. Eventually, the eager API will be deprecated in favor of the lazy one. See Gradle documentation for migration guide. Example: 'task foo { // reports 'task', suggests replacing it with 'task.register'\n // ...\n}'", + "markdown": "(Gradle 4.9+) Detects usage of API that interacts with tasks eagerly.\nEager interaction with tasks implies some invonveniences:\n\n* The user should manually set up all dependencies between tasks;\n* In the [configuration phase](https://docs.gradle.org/current/userguide/build_lifecycle.html#sec:build_phases), all the tasks accessed via the eager API become configured, even if they are not executed afterwards. It results in performance degradation.\n\nEventually, the eager API will be deprecated in favor of the lazy one. \n[See Gradle documentation for migration guide.](https://docs.gradle.org/current/userguide/task_configuration_avoidance.html)\n\n**Example:**\n\n\n task foo { // reports 'task', suggests replacing it with 'task.register'\n // ...\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Gradle/Best practises", + "index": 123, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "Lombook Plugin", + "version": "223.8787", + "rules": [ + { + "id": "RedundantSlf4jDefinition", + "shortDescription": { + "text": "@Slf4j" + }, + "fullDescription": { + "text": "Reports explicitly defined Slf4j Loggers. The '@Slf4j' annotation can be used instead.", + "markdown": "Reports explicitly defined *Slf4j* Loggers. The `@Slf4j` annotation can be used instead." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Lombok/Redundant definitions", + "index": 56, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantModifiersUtilityClassLombok", + "shortDescription": { + "text": "@UtilityClass modifiers" + }, + "fullDescription": { + "text": "Reports unneeded modifiers for classes annotated with '@UtilityClass'.", + "markdown": "Reports unneeded modifiers for classes annotated with `@UtilityClass`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Lombok/Redundant modifiers", + "index": 86, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantModifiersValueLombok", + "shortDescription": { + "text": "@Value modifiers" + }, + "fullDescription": { + "text": "Reports unneeded modifiers for classes annotated with '@Value'.", + "markdown": "Reports unneeded modifiers for classes annotated with `@Value`." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Lombok/Redundant modifiers", + "index": 86, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SpringQualifierCopyableLombok", + "shortDescription": { + "text": "@Qualifier not copyable by lombok" + }, + "fullDescription": { + "text": "Reports Spring '@Qualifier' annotations on class fields that are ignored by the corresponding Lombok '@RequiredArgsConstructor' and '@AllArgsConstructor' annotations. The generated constructors will not receive the '@Qualifier' annotation without a 'lombok.copyableAnnotations' definition inside the 'lombok.config' file.", + "markdown": "Reports Spring `@Qualifier` annotations on class fields that are ignored by the corresponding Lombok `@RequiredArgsConstructor` and `@AllArgsConstructor` annotations. The generated constructors will not receive the `@Qualifier` annotation without a `lombok.copyableAnnotations` definition inside the `lombok.config` file." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Lombok", + "index": 55, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "Lombok", + "shortDescription": { + "text": "Lombok annotations" + }, + "fullDescription": { + "text": "Offers general inspections for Lombok annotations.", + "markdown": "Offers general inspections for Lombok annotations." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Lombok", + "index": 55, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantModifiersValLombok", + "shortDescription": { + "text": "Unnecessary final before 'val'" + }, + "fullDescription": { + "text": "Reports unneeded 'final' modifiers before 'val'.", + "markdown": "Reports unneeded `final` modifiers before `val`." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Lombok/Redundant modifiers", + "index": 86, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DeprecatedLombok", + "shortDescription": { + "text": "Deprecated Lombok annotations" + }, + "fullDescription": { + "text": "Reports deprecated Lombok annotations and suggests quick-fixes to replace them with the ones promoted to the main package.", + "markdown": "Reports deprecated Lombok annotations and suggests quick-fixes to replace them with the ones promoted to the main package." + }, + "defaultConfiguration": { + "enabled": true, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/Lombok", + "index": 55, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "TestNG-J", + "version": "223.8787", + "rules": [ + { + "id": "groupsTestNG", + "shortDescription": { + "text": "Undefined group name" + }, + "fullDescription": { + "text": "Reports undefined group names passed to the 'dependsOnGroups' or 'groups' attributes in the '@Test' annotation. The quick-fix adds an undefined name to a list of known groups. Use the Defined Groups field to define a comma-separated list of known groups.", + "markdown": "Reports undefined group names passed to the `dependsOnGroups` or `groups` attributes in the `@Test` annotation.\n\nThe quick-fix adds an undefined name to a list of known groups.\n\nUse the **Defined Groups** field to define a comma-separated list of known groups." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/TestNG", + "index": 71, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "JUnitTestNG", + "shortDescription": { + "text": "JUnit Test can be converted to TestNG" + }, + "fullDescription": { + "text": "Reports any JUnit-based test class that can be converted into TestNG based unit test. Example: 'import org.junit.Test;\nimport static org.junit.Assert.*;\n\npublic class ExampleTest {\n @Test\n public void testExample(){\n assertEquals(2 + 2, 4);\n }\n}' After the quick-fix is applied: 'import org.testng.Assert;\nimport org.testng.annotations.Test;\n\npublic class ExampleTest {\n @Test\n public void testExample(){\n Assert.assertEquals(4, 2 + 2);\n }\n}'", + "markdown": "Reports any JUnit-based test class that can be converted into TestNG based unit test.\n\nExample:\n\n\n import org.junit.Test;\n import static org.junit.Assert.*;\n\n public class ExampleTest {\n @Test\n public void testExample(){\n assertEquals(2 + 2, 4);\n }\n }\n\nAfter the quick-fix is applied:\n\n\n import org.testng.Assert;\n import org.testng.annotations.Test;\n\n public class ExampleTest {\n @Test\n public void testExample(){\n Assert.assertEquals(4, 2 + 2);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/TestNG", + "index": 71, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConvertJavadoc", + "shortDescription": { + "text": "TestNG Javadoc can be converted to annotations" + }, + "fullDescription": { + "text": "Asserts your TestNG tests with Javadoc annotations and converts them to JDK annotations. Example: '/**\n * @testng.before-test\n */\n public void sample() {}' After the quick-fix is applied: '@BeforeTest\n public void sample() {}'", + "markdown": "Asserts your TestNG tests with Javadoc annotations and converts them to JDK annotations.\n\nExample:\n\n\n /**\n * @testng.before-test\n */\n public void sample() {}\n\nAfter the quick-fix is applied:\n\n\n @BeforeTest\n public void sample() {}\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/TestNG", + "index": 71, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DataProviderReturnType", + "shortDescription": { + "text": "Invalid data provider return type" + }, + "fullDescription": { + "text": "Reports methods marked with '@DataProvider' annotation that doesn't return 'Object[][]' or 'Iterator'. If another type is returned, TestNG throws an exception. Example: 'public class TestNgTest {\n @DataProvider(name = \"Languages\")\n List<String> getData() {\n return List.of(\"Java\", \"Kotlin\");\n }\n\n @Test(dataProvider = \"Languages\")\n public void testData(String language) {\n System.out.println(language);\n }\n}'", + "markdown": "Reports methods marked with `@DataProvider` annotation that doesn't return `Object[][]` or `Iterator`. If another type is returned, TestNG throws an exception.\n\nExample:\n\n\n public class TestNgTest {\n @DataProvider(name = \"Languages\")\n List<String> getData() {\n return List.of(\"Java\", \"Kotlin\");\n }\n\n @Test(dataProvider = \"Languages\")\n public void testData(String language) {\n System.out.println(language);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Java/TestNG", + "index": 71, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ExpectedExceptionNeverThrownTestNG", + "shortDescription": { + "text": "Expected exception never thrown in test method body" + }, + "fullDescription": { + "text": "Reports checked exceptions expected by a TestNG test method that are never thrown inside the method body. Example: '@Test(expectedExceptions = Exception.class) // warning: Expected 'Exception' never thrown\n public void testEngineIsRunning() {\n assertTrue(engine.isRunning());\n }'", + "markdown": "Reports checked exceptions expected by a TestNG test method that are never thrown inside the method body.\n\n**Example:**\n\n\n @Test(expectedExceptions = Exception.class) // warning: Expected 'Exception' never thrown\n public void testEngineIsRunning() {\n assertTrue(engine.isRunning());\n }\n \n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/TestNG", + "index": 71, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UndeclaredTests", + "shortDescription": { + "text": "Undeclared test" + }, + "fullDescription": { + "text": "Reports test classes that are not registered in 'testing.xml'. This is often a mistake because such tests won't be executed.", + "markdown": "Reports test classes that are not registered in `testing.xml`. This is often a mistake because such tests won't be executed." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/TestNG", + "index": 71, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ConvertOldAnnotations", + "shortDescription": { + "text": "Old TestNG annotation @Configuration is used" + }, + "fullDescription": { + "text": "Reports TestNG 'org.testng.annotations.Configuration' annotations. It's better to configure a test suite with the modern '@BeforeXXX'/'@AfterXXX' annotations. Example: 'public class Test {\n @Configuration(beforeSuite = true, afterTest = true)\n public void afterBefore(){\n }\n }' After the quick-fix is applied: 'public class Test {\n @AfterTest()\n @BeforeSuite()\n public void afterBefore(){\n }\n }'", + "markdown": "Reports TestNG `org.testng.annotations.Configuration` annotations.\n\nIt's better to configure a test suite with the modern `@BeforeXXX`/`@AfterXXX` annotations.\n\nExample:\n\n\n public class Test {\n @Configuration(beforeSuite = true, afterTest = true)\n public void afterBefore(){\n }\n }\n\nAfter the quick-fix is applied:\n\n\n public class Test {\n @AfterTest()\n @BeforeSuite()\n public void afterBefore(){\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/TestNG", + "index": 71, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DuplicatedDataProviderNames", + "shortDescription": { + "text": "Duplicated data provider names" + }, + "fullDescription": { + "text": "Reports 'TestNG' data providers with equal names if 'org.testng.TestNGException' has occurred. Example: 'public class DuplicatedDataProviders {\n @DataProvider\n public Object[][] intTestData() { // duplicate 1\n return new Integer[][]{\n new Integer[]{1, 1},\n };\n }\n\n @DataProvider(name = \"intTestData\")\n public Object[][] someTestData() { // duplicate 2\n return new Integer[][]{\n new Integer[]{1, 1},\n };\n }\n\n @Test(dataProvider = \"intTestData\")\n public void testIsOK(Integer key, Integer value) {\n assertEquals(key, value);\n }\n }'", + "markdown": "Reports `TestNG` data providers with equal names if `org.testng.TestNGException` has occurred.\n\nExample:\n\n\n public class DuplicatedDataProviders {\n @DataProvider\n public Object[][] intTestData() { // duplicate 1\n return new Integer[][]{\n new Integer[]{1, 1},\n };\n }\n\n @DataProvider(name = \"intTestData\")\n public Object[][] someTestData() { // duplicate 2\n return new Integer[][]{\n new Integer[]{1, 1},\n };\n }\n\n @Test(dataProvider = \"intTestData\")\n public void testIsOK(Integer key, Integer value) {\n assertEquals(key, value);\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Java/TestNG", + "index": 71, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "dependsOnMethodTestNG", + "shortDescription": { + "text": "Illegal method name passed to 'dependsOnMethods'" + }, + "fullDescription": { + "text": "Reports illegal method names passed to the 'dependsOnMethods' attribute in the '@Test' annotation. A method name is considered illegal if it can't be resolved into a valid, accessible '@Test' annotated method in the current class or any of its parent classes. Example: 'public class SampleTest {\n @Test(dependsOnMethods = \"testSpellignError\")\n public void testSample() {}\n @Test\n public void testSpellingError(){}\n }'", + "markdown": "Reports illegal method names passed to the `dependsOnMethods` attribute in the `@Test` annotation.\n\nA method name is considered illegal if it can't be resolved into a valid, accessible `@Test` annotated method in the current class\nor any of its parent classes.\n\nExample:\n\n\n public class SampleTest {\n @Test(dependsOnMethods = \"testSpellignError\")\n public void testSample() {}\n @Test\n public void testSpellingError(){}\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/TestNG", + "index": 71, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MalformedDataProvider", + "shortDescription": { + "text": "Data provider problems" + }, + "fullDescription": { + "text": "Reports references to data provider methods that do not exist or are not accessible. Example: 'public class InstanceDataProviderFromForeignClass {\n // method data() doesn't exist in class A\n @Test(dataProvider = \"data\", dataProviderClass = A.class)\n public void test() {\n }\n}\nclass A { }' After the quick-fix is applied: '//the needed data() method is created in class A\nclass A {\n @DataProvider\n public Object[][] data() {\n return new Object[][]{};\n }\n}'", + "markdown": "Reports references to data provider methods that do not exist or are not accessible.\n\nExample:\n\n\n public class InstanceDataProviderFromForeignClass {\n // method data() doesn't exist in class A\n @Test(dataProvider = \"data\", dataProviderClass = A.class)\n public void test() {\n }\n }\n class A { }\n\nAfter the quick-fix is applied:\n\n\n //the needed data() method is created in class A\n class A {\n @DataProvider\n public Object[][] data() {\n return new Object[][]{};\n }\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Java/TestNG", + "index": 71, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "DevKit", + "version": "223.8787", + "rules": [ + { + "id": "PluginXmlCapitalization", + "shortDescription": { + "text": "Plugin.xml text capitalization" + }, + "fullDescription": { + "text": "Reports text capitalization problems in 'plugin.xml'. The following elements are checked: '' ', ' ', ' extension point properties annotated with 'org.jetbrains.annotations.Nls' specifying required 'capitalization' Please see Capitalization in IntelliJ Platform UI Guidelines for more information.", + "markdown": "Reports text capitalization problems in `plugin.xml`.\n\n\nThe following elements are checked:\n\n* ``\n* `, `\n* `, `\n* extension point properties annotated with `org.jetbrains.annotations.Nls` specifying required `capitalization`\n\n\nPlease see [Capitalization](https://jetbrains.design/intellij/text/capitalization/) in IntelliJ Platform UI Guidelines for more\ninformation." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Plugin descriptor", + "index": 73, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WorkspaceImplObsolete", + "shortDescription": { + "text": "Obsolete version of entity implementation" + }, + "fullDescription": { + "text": "Reports existence of the obsolete implementation for the entity. Verifies that existing implementation for entities has the same API version as described at 'com.intellij.workspaceModel.storage.CodeGeneratorVersions' from dependencies. Suggests regenerating implementation for the whole entities in the current module.", + "markdown": "Reports existence of the obsolete implementation for the entity.\n\n\nVerifies that existing implementation for entities has the same API version as described at `com.intellij.workspaceModel.storage.CodeGeneratorVersions` from dependencies.\n\n\nSuggests regenerating implementation for the whole entities in the current module." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Workspace model", + "index": 78, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseDPIAwareBorders", + "shortDescription": { + "text": "Use DPI-aware borders" + }, + "fullDescription": { + "text": "Reports usages of 'javax.swing.border.EmptyBorder' and 'JBUI.Borders.emptyXyz()' that can be simplified. The 'EmptyBorder' instances are not DPI-aware and can result in UI layout problems. Quick fix performs replacement with 'JBUI.Borders.empty()' or simplifies the expression. Example: // bad:\nBorder border1 = new EmptyBorder(1, 2, 3, 4);\nBorder border2 = new EmptyBorder(1, 2, 1, 2);\nBorder border3 = new EmptyBorder(1, 0, 0, 0);\n\n// good:\nBorder border1 = JBUI.Borders.empty(1, 2, 3, 4);\nBorder border2 = JBUI.Borders.empty(1, 2);\nBorder border3 = JBUI.Borders.emptyTop(1);", + "markdown": "Reports usages of `javax.swing.border.EmptyBorder` and `JBUI.Borders.emptyXyz()` that can be simplified.\n\n\nThe `EmptyBorder` instances are not DPI-aware and can result in UI layout problems.\n\n\nQuick fix performs replacement with `JBUI.Borders.empty()` or simplifies the expression.\n\nExample:\n\n```\n// bad:\nBorder border1 = new EmptyBorder(1, 2, 3, 4);\nBorder border2 = new EmptyBorder(1, 2, 1, 2);\nBorder border3 = new EmptyBorder(1, 0, 0, 0);\n\n// good:\nBorder border1 = JBUI.Borders.empty(1, 2, 3, 4);\nBorder border2 = JBUI.Borders.empty(1, 2);\nBorder border3 = JBUI.Borders.emptyTop(1);\n```" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NonDefaultConstructor", + "shortDescription": { + "text": "Non-default constructors for service and extension class" + }, + "fullDescription": { + "text": "Reports extension/service class having a non-default (empty) constructor. Other dependencies should be acquired when needed in corresponding methods only. Constructor having 'Project' for extension/service on the corresponding level is allowed.", + "markdown": "Reports extension/service class having a non-default (empty) constructor.\n\n\nOther dependencies should be acquired when needed in corresponding methods only.\nConstructor having `Project` for extension/service on the corresponding level is allowed." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PresentationAnnotation", + "shortDescription": { + "text": "Invalid icon path in @Presentation" + }, + "fullDescription": { + "text": "Reports invalid and deprecated value for 'icon' attribute in 'com.intellij.ide.presentation.Presentation' annotation.", + "markdown": "Reports invalid and deprecated value for `icon` attribute in `com.intellij.ide.presentation.Presentation` annotation." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseVirtualFileEquals", + "shortDescription": { + "text": "Use 'VirtualFile#equals(Object)'" + }, + "fullDescription": { + "text": "Reports comparing 'VirtualFile' instances using '=='. Replace with 'equals()' call.", + "markdown": "Reports comparing `VirtualFile` instances using `==`.\n\n\nReplace with `equals()` call." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnspecifiedActionsPlace", + "shortDescription": { + "text": "Unspecified action place" + }, + "fullDescription": { + "text": "Reports passing unspecified 'place' parameter for 'ActionManager.createActionToolbar()' and 'ActionManager.createActionPopupMenu()'. Specifying proper 'place' is required to distinguish Action's usage in 'update()/actionPerformed()' via 'AnActionEvent.getPlace()'. Examples: // bad:\nactionManager.createActionToolbar(\"\", group, false);\nactionManager.createActionToolbar(\"unknown\", group, false);\nactionManager.createActionPopupMenu(ActionPlaces.UNKNOWN, group);\n\n// good:\nactionManager.createActionToolbar(\"MyPlace\", group, false);\nactionManager.createActionPopupMenu(ActionPlaces.EDITOR_TOOLBAR, group);", + "markdown": "Reports passing unspecified `place` parameter for `ActionManager.createActionToolbar()` and `ActionManager.createActionPopupMenu()`.\n\n\nSpecifying proper `place` is required to distinguish Action's usage in `update()/actionPerformed()` via `AnActionEvent.getPlace()`.\n\n\nExamples:\n\n```\n// bad:\nactionManager.createActionToolbar(\"\", group, false);\nactionManager.createActionToolbar(\"unknown\", group, false);\nactionManager.createActionPopupMenu(ActionPlaces.UNKNOWN, group);\n\n// good:\nactionManager.createActionToolbar(\"MyPlace\", group, false);\nactionManager.createActionPopupMenu(ActionPlaces.EDITOR_TOOLBAR, group);\n```\n\n
    " + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ActionIsNotPreviewFriendly", + "shortDescription": { + "text": "Field blocks intention preview" + }, + "fullDescription": { + "text": "Reports fields in 'LocalQuickFix' and 'IntentionAction' implementations that prevent intention preview action from functioning properly. Additionally, excessive '@SafeFieldForPreview' annotations are reported on fields whose types are known to be safe. Intention preview is an IntelliJ platform feature that displays how quick-fix or intention action will change the current file when applied. To implement this in quick fixes, 'LocalQuickFix.generatePreview()' is called with a custom 'ProblemDescriptor' that points to the non-physical copy of current file. In intention actions, 'IntentionAction.generatePreview()' is called with the non-physical copy of current file and imaginary editor. Normally, these methods just delegate to 'LocalQuickFix.applyFix()' or 'IntentionAction.invoke()'. However, some quick-fixes may refer directly or indirectly to physical elements and use them for writing. As a result, preview won't work, as the quick-fix will attempt to update physical PSI instead of non-physical one. To avoid this, default implementation of 'generatePreview()' delegates only if all the instance fields of a quick fix or intention action class have safe types: primitives, Strings, etc. You may fix this problem in a number of ways: If the field does not actually store any PSI reference, or that PSI is used only for reading, you may annotate the field with '@SafeFieldForPreview'. You can also use '@SafeTypeForPreview' if the field type can never store any writable PSI reference. You may override 'getFileModifierForPreview()' method and create a copy of the quick-fix rebinding it to the non-physical file copy which is supplied as a parameter. Use 'PsiTreeUtil.findSameElementInCopy()' to find the corresponding PSI elements inside the supplied non-physical copy. Instead of storing PSI references in fields, try to extract all the necessary information from 'ProblemDescriptor.getPsiElement()' in quick fix or from the supplied file/editor in intention action. You may also inherit the abstract 'LocalQuickFixAndIntentionActionOnPsiElement' class and implement its 'invoke()' and 'isAvailable()' methods, which have 'startElement' and 'endElement' parameters. These parameters are automatically mapped to a non-physical file copy for you. You may override 'generatePreview()' method and provide completely custom preview behavior. For example, it's possible to display a custom HTML document instead of actual preview if your action does something besides modifying a current file. This inspection does not report if a custom implementation of 'getFileModifierForPreview()' or 'generatePreview()' exists. However, this doesn't mean that the implementation is correct and preview works. Please test. Also note that preview result is calculated in background thread, so you cannot start a write action during the preview or do any operation that requires a write action. Finally, no preview is generated automatically if 'startInWriteAction()' returns 'false'. In this case, having custom 'generatePreview()' implementation is desired. New in 2022.1", + "markdown": "Reports fields in `LocalQuickFix` and `IntentionAction` implementations that prevent intention preview action from functioning properly. Additionally, excessive `@SafeFieldForPreview` annotations are reported on fields whose types are known to be safe.\n\n\nIntention preview is an IntelliJ platform feature that displays how quick-fix or intention action\nwill change the current file when applied. To implement this in quick fixes,\n`LocalQuickFix.generatePreview()` is called with a custom `ProblemDescriptor`\nthat points to the non-physical copy of current file. In intention actions, `IntentionAction.generatePreview()`\nis called with the non-physical copy of current file and imaginary editor.\nNormally, these methods just delegate to `LocalQuickFix.applyFix()` or `IntentionAction.invoke()`.\nHowever, some quick-fixes may refer directly or indirectly to physical elements and use them for writing. As a result,\npreview won't work, as the quick-fix will attempt to update physical PSI instead of non-physical one.\nTo avoid this, default implementation of `generatePreview()` delegates only if all the\ninstance fields of a quick fix or intention action class have safe types: primitives, Strings, etc.\n\n\nYou may fix this problem in a number of ways:\n\n1. If the field does not actually store any PSI reference, or that PSI is used only for reading, you may annotate the field with `@SafeFieldForPreview`. You can also use `@SafeTypeForPreview` if the field type can never store any writable PSI reference.\n2. You may override `getFileModifierForPreview()` method and create a copy of the quick-fix rebinding it to the non-physical file copy which is supplied as a parameter. Use `PsiTreeUtil.findSameElementInCopy()` to find the corresponding PSI elements inside the supplied non-physical copy.\n3. Instead of storing PSI references in fields, try to extract all the necessary information from `ProblemDescriptor.getPsiElement()` in quick fix or from the supplied file/editor in intention action. You may also inherit the abstract `LocalQuickFixAndIntentionActionOnPsiElement` class and implement its `invoke()` and `isAvailable()` methods, which have `startElement` and `endElement` parameters. These parameters are automatically mapped to a non-physical file copy for you.\n4. You may override `generatePreview()` method and provide completely custom preview behavior. For example, it's possible to display a custom HTML document instead of actual preview if your action does something besides modifying a current file.\n\n\nThis inspection does not report if a custom implementation of `getFileModifierForPreview()`\nor `generatePreview()` exists. However, this doesn't mean that the implementation is correct and preview works.\nPlease test. Also note that preview result is calculated in background thread, so you cannot start a write action\nduring the preview or do any operation that requires a write action. Finally, no preview is generated automatically\nif `startInWriteAction()` returns `false`. In this case, having custom `generatePreview()`\nimplementation is desired.\n\nNew in 2022.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InspectionUsingGrayColors", + "shortDescription": { + "text": "Using new Color(a,a,a)" + }, + "fullDescription": { + "text": "Reports usages of 'java.awt.Color' to create gray colors. The Convert to 'Gray' quick fix replaces it using 'com.intellij.ui.Gray' constants instead. Examples: // bad:\nColor gray = new Color(37, 37, 37);\n\n// good:\nColor gray = Gray._37;", + "markdown": "Reports usages of `java.awt.Color` to create gray colors.\n\n\nThe **Convert to 'Gray'** quick fix replaces it using `com.intellij.ui.Gray` constants instead.\n\nExamples:\n\n```\n// bad:\nColor gray = new Color(37, 37, 37);\n\n// good:\nColor gray = Gray._37;\n```" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IntentionDescriptionNotFoundInspection", + "shortDescription": { + "text": "Intention description checker" + }, + "fullDescription": { + "text": "Reports intentions that are missing an HTML description file, 'before.template' file or 'after.template' file. These are shown in Settings | Editor | Intentions. The Create description file quick-fix creates a template HTML description file.", + "markdown": "Reports intentions that are missing an HTML description file, `before.template` file or `after.template` file. These are shown in [Settings \\| Editor \\| Intentions](settings://preferences.intentionPowerPack).\n\n\nThe **Create description file** quick-fix creates a template HTML description file." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Description file", + "index": 103, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PluginXmlDynamicPlugin", + "shortDescription": { + "text": "Plugin.xml dynamic plugin verification" + }, + "fullDescription": { + "text": "Reports dynamic plugin problems. Dynamic plugins can be installed, updated and uninstalled without restarting the IDE (supported in 2020.1 and later). Please see Dynamic Plugins for further reference. New in 2020.1", + "markdown": "Reports dynamic plugin problems.\n\n\nDynamic plugins can be installed, updated and uninstalled without restarting the IDE (supported in 2020.1 and later).\n\n\nPlease see [Dynamic Plugins](https://plugins.jetbrains.com/docs/intellij/dynamic-plugins.html?from=PluginXmlDynamicPlugin) for further reference.\n\nNew in 2020.1" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Plugin descriptor", + "index": 73, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ComponentRegistrationProblems", + "shortDescription": { + "text": "Component type mismatch" + }, + "fullDescription": { + "text": "Reports incorrect registration of plugin components (Actions and Components). The following problems are reported: Action/Component implementation class is abstract. Class is registered in plugin.xml as action but does not extend 'AnAction' class. Action class does not have a public no-argument constructor.", + "markdown": "Reports incorrect registration of plugin components (Actions and Components).\n\n\nThe following problems are reported:\n\n* Action/Component implementation class is abstract.\n* Class is registered in plugin.xml as action but does not extend `AnAction` class.\n* Action class does not have a public no-argument constructor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MissingRecentApi", + "shortDescription": { + "text": "Usage of IntelliJ API not available in older IDEs" + }, + "fullDescription": { + "text": "Reports usages of IntelliJ Platform API introduced in a version newer than the one specified in '' '@since-build' in 'plugin.xml'. Using such API may lead to incompatibilities of the plugin with older IDE versions. To avoid possible issues when running the plugin in older IDE versions, increase 'since-build' accordingly, or remove usages of this API. See Build Number Ranges in IntelliJ Platform Plugin SDK docs for more details. Configure the inspection: If '' '@since/until-build' attributes are not specified in 'plugin.xml', set Since/Until explicitly.", + "markdown": "Reports usages of IntelliJ Platform API introduced in a version *newer* than the one specified in `` `@since-build` in `plugin.xml`.\n\n\nUsing such API may lead to incompatibilities of the plugin with older IDE versions.\n\n\nTo avoid possible issues when running the plugin in older IDE versions, increase `since-build` accordingly,\nor remove usages of this API.\n\n\nSee [Build Number Ranges](https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html) in IntelliJ Platform Plugin SDK docs for more details.\n\nConfigure the inspection:\nIf `` `@since/until-build` attributes are not specified in `plugin.xml`, set **Since** /**Until** explicitly." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MissingAccessibleContext", + "shortDescription": { + "text": "Accessible context is missing" + }, + "fullDescription": { + "text": "Reports Swing components that do not provide accessibility context. This information is used by screen readers. Failing to provide it makes the component inaccessible for visually impaired users. Example: 'ListCellRenderer renderer = (list, val, index, sel, cell) -> {\n JPanel panel = new JPanel();\n return panel;\n };' To fix the problem, you should either call 'setAccessibleName()' on the returned 'JPanel' or override its 'getAccessibleContext()' method. The returned text should reflect the purpose of the component. For example, in the case of 'ListCellRenderer', this would be the text of the menu item.", + "markdown": "Reports Swing components that do not provide accessibility context.\n\n\nThis information is used by screen readers. Failing to provide it makes the component inaccessible for\nvisually impaired users.\n\n**Example:**\n\n ListCellRenderer renderer = (list, val, index, sel, cell) -> {\n JPanel panel = new JPanel();\n return panel;\n };\n\n\nTo fix the problem, you should either call `setAccessibleName()` on the returned `JPanel`\nor override its `getAccessibleContext()` method.\n\n\nThe returned text should reflect the purpose\nof the component. For example, in the case of `ListCellRenderer`, this would be the text of the menu\nitem." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseJBColor", + "shortDescription": { + "text": "Use Darcula aware JBColor" + }, + "fullDescription": { + "text": "Reports usages of 'java.awt.Color'. These are not aware of \"dark\" themes (e.g., bundled \"Darcula\") and might result in bad looking UI. Quick-fix replaces usages with 'JBColor', which defines \"dark\" color variant. Examples: // bad:\nColor darkGreen = new Color(12, 58, 27);\nColor blue = Color.BLUE;\n\n// good:\nColor darkGreen = new JBColor(12, 58, 27);\nColor blue = JBColor.BLUE;\nColor green = new JBColor(new Color(12, 58, 27), new Color(27, 112, 39));", + "markdown": "Reports usages of `java.awt.Color`.\n\n\nThese are not aware of \"dark\" themes (e.g., bundled \"Darcula\") and might result in bad looking UI.\n\n\nQuick-fix replaces usages with `JBColor`, which defines \"dark\" color variant.\n\nExamples:\n\n```\n// bad:\nColor darkGreen = new Color(12, 58, 27);\nColor blue = Color.BLUE;\n\n// good:\nColor darkGreen = new JBColor(12, 58, 27);\nColor blue = JBColor.BLUE;\nColor green = new JBColor(new Color(12, 58, 27), new Color(27, 112, 39));\n```" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PluginXmlExtensionRegistration", + "shortDescription": { + "text": "Plugin.xml extension registration" + }, + "fullDescription": { + "text": "Reports problems with extension registration in 'plugin.xml'. The following problems are reported: Missing 'language' declaration. If the extension does not target a specific language, use quick fix to create an explicit declaration for \"any language\". Inspections: missing attributes Services: redundant 'serviceInterface' declaration 'com.intellij.stubElementTypeHolder' without 'externalIdPrefix', see Stub Indexes New in 2022.3", + "markdown": "Reports problems with extension registration in `plugin.xml`.\n\n\nThe following problems are reported:\n\n* Missing `language` declaration. If the extension does not target a specific language, use quick fix to create an explicit declaration for \"any language\".\n* Inspections: missing attributes\n* Services: redundant `serviceInterface` declaration\n* `com.intellij.stubElementTypeHolder` without `externalIdPrefix`, see [Stub Indexes](https://plugins.jetbrains.com/docs/intellij/stub-indexes.html?from=?from=DevkitPluginXmlInspectionDescription)\n\n
    \n\nNew in 2022.3" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Plugin descriptor", + "index": 73, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UElementAsPsi", + "shortDescription": { + "text": "UElement as PsiElement usage" + }, + "fullDescription": { + "text": "Reports usage of UAST 'UElement' as 'PsiElement'. The 'PsiElement' obtained this way is ambiguous. To obtain \"physical\" 'PsiElement' use 'UElementKt.getSourcePsiElement()', for 'PsiElement' that \"emulates\" behaviour of Java-elements ('PsiClass', 'PsiMethod', etc.) use 'UElementKt.getAsJavaPsiElement()'. See UAST - Unified Abstract Syntax Tree in SDK Docs.", + "markdown": "Reports usage of UAST `UElement` as `PsiElement`.\n\n\nThe `PsiElement` obtained this way is ambiguous.\n\n\nTo obtain \"physical\" `PsiElement` use `UElementKt.getSourcePsiElement()`,\nfor `PsiElement` that \"emulates\" behaviour of Java-elements (`PsiClass`, `PsiMethod`, etc.)\nuse `UElementKt.getAsJavaPsiElement()`.\n\n\nSee [UAST - Unified Abstract Syntax Tree](https://plugins.jetbrains.com/docs/intellij/uast.html) in SDK Docs." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MissingActionUpdateThread", + "shortDescription": { + "text": "ActionUpdateThread is missing" + }, + "fullDescription": { + "text": "Reports actions, action groups and other 'ActionUpdateThreadAware that implicitly state the deprecated and costly ActionUpdateThread.OLD_EDT mode. When an action or an action group defines its own update method, IntelliJ Platform tries to mimic the old synchronous way of calling update and getChildren methods in the UI thread and supply it with all the data in AnActionEvent.dataContext. To do that, it caches all the possible data on a background thread beforehand even if it is not needed. Provide one of the two new modes ActionUpdateThread.EDT or ActionUpdateThread.BGT by overriding the getActionUpdateThread method. See ActionUpdateThread documentation for more information.'", + "markdown": "Reports actions, action groups and other `ActionUpdateThreadAware``\nthat implicitly state the deprecated and costly ``ActionUpdateThread.OLD_EDT`` mode.\n\n`\n\n\nWhen an action or an action group defines its own `update` method, IntelliJ Platform tries to mimic\nthe old synchronous way of calling `update` and `getChildren` methods in the UI thread and\nsupply it with all the data in `AnActionEvent.dataContext`.\nTo do that, it caches all the possible data on a background thread beforehand even if it is not needed.\n`\n`\n\n\nProvide one of the two new modes `ActionUpdateThread.EDT` or `ActionUpdateThread.BGT`\nby overriding the `getActionUpdateThread` method.\n`\n`\n\n\nSee `ActionUpdateThread` documentation for more information.\n`\n``\n`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PluginXmlI18n", + "shortDescription": { + "text": "Plugin.xml i18n verification" + }, + "fullDescription": { + "text": "Reports hardcoded texts in 'plugin.xml'. Using texts defined in resource bundles allows supporting multiple languages in the IDE. The following elements are checked: ', ' '' known extension points having 'bundle/key' alternative", + "markdown": "Reports hardcoded texts in `plugin.xml`.\n\n\nUsing texts defined in resource bundles allows supporting multiple languages in the IDE.\n\n\nThe following elements are checked:\n\n* `, `\n* ``\n* known extension points having `bundle/key` alternative" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Plugin descriptor", + "index": 73, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UsePrimitiveTypes", + "shortDescription": { + "text": "Use 'PsiType#equals(Object)' with primitive types" + }, + "fullDescription": { + "text": "Reports comparing 'PsiPrimitiveType' instances using '=='. Primitive types should be compared with 'equals' as Java 8 type annotations are also applicable for them. Replace with 'equals()' call.", + "markdown": "Reports comparing `PsiPrimitiveType` instances using `==`.\n\n\nPrimitive types should be compared with `equals` as Java 8 type annotations are also applicable for them.\n\n\nReplace with `equals()` call." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "QuickFixGetFamilyNameViolation", + "shortDescription": { + "text": "QuickFix's getFamilyName() implementation must not depend on a specific context" + }, + "fullDescription": { + "text": "Reports 'QuickFix#getFamilyName()' using contextual information. This method must not use any non-static information.", + "markdown": "Reports `QuickFix#getFamilyName()` using contextual information.\n\n\nThis method must not use any non-static information." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseCouple", + "shortDescription": { + "text": "Use Couple instead of Pair" + }, + "fullDescription": { + "text": "Reports usages of 'Pair' replaceable by 'Couple'. Quick-fix performs replacement.", + "markdown": "Reports usages of `Pair` replaceable by `Couple`.\n\n\nQuick-fix performs replacement." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UsePluginIdEquals", + "shortDescription": { + "text": "Use 'PluginId#equals(Object)'" + }, + "fullDescription": { + "text": "Reports comparing 'PluginId' instances using '=='. Replace with 'equals()' call.", + "markdown": "Reports comparing `PluginId` instances using `==`.\n\n\nReplace with `equals()` call." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "StatefulEp", + "shortDescription": { + "text": "Stateful extension" + }, + "fullDescription": { + "text": "Reports extensions and quick-fixes holding potentially leaking state. Keeping references to 'PsiElement', 'PsiReference', or 'Project' instances can result in memory leaks. Ideally, these should be stateless. For quick-fix, see 'LocalQuickFixOnPsiElement' as a convenient base class.", + "markdown": "Reports extensions and quick-fixes holding potentially leaking state.\n\n\nKeeping references to `PsiElement`, `PsiReference`, or `Project` instances can result in memory leaks.\n\n\nIdeally, these should be stateless.\nFor quick-fix, see `LocalQuickFixOnPsiElement` as a convenient base class." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IncorrectParentDisposable", + "shortDescription": { + "text": "Incorrect parentDisposable parameter" + }, + "fullDescription": { + "text": "Reports using 'Application' or 'Project' as a parent 'Disposable' in plugin code. Such usages will lead to plugins not being unloaded correctly. Please see Choosing a Disposable Parent in SDK Docs.", + "markdown": "Reports using `Application` or `Project` as a parent `Disposable` in plugin code.\n\n\nSuch usages will lead to plugins not being unloaded correctly.\nPlease see [Choosing a\nDisposable Parent](https://plugins.jetbrains.com/docs/intellij/disposers.html?from=IncorrectParentDisposable#choosing-a-disposable-parent) in SDK Docs." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DevKitPropertiesQuotesValidation", + "shortDescription": { + "text": "Quotes validation in properties files" + }, + "fullDescription": { + "text": "Reports wrong number of quotes around parameter in property value. If parameters are present in the property value, then the value will be passed as a pattern to 'java.text.MessageFormat'. This means that single quotes are used for escaping. Thus to keep a quote visible, it must be duplicated: ''{0}'' → '{0}' '''{0}''' → ''$value$'' When using choice format, nested formats are evaluated as formats themselves, and second double quotes are required. When passing '1': '{0, choice, 0#no|#1''{0}'' file}' → '{0} files' '{0, choice, 0#no|#1''''{0}'''' file}' → ''$number_of_files$' files'", + "markdown": "Reports wrong number of quotes around parameter in property value.\n\n\nIf parameters are present in the property value, then the value will be passed as a pattern to `java.text.MessageFormat`.\nThis means that single quotes are used for escaping. Thus to keep a quote visible, it must be duplicated:\n\n* `'{0}'` → `{0}`\n* `''{0}''` → `'$value$'`\n\n\nWhen using choice format, nested formats are evaluated as formats themselves, and second double quotes are required.\nWhen passing `1`:\n\n* `{0, choice, 0#no|#1''{0}'' file}` → `{0} files`\n* `{0, choice, 0#no|#1''''{0}'''' file}` → `'$number_of_files$' files`" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit", + "index": 72, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "SerializableCtor", + "shortDescription": { + "text": "Non-default constructor in serializable class" + }, + "fullDescription": { + "text": "Reports non-default constructor in serializable classes. The platform's 'IonObjectSerializer' requires specifying '@PropertyMapping' explicitly. Quick-fix generates necessary '@PropertyMapping' annotation for the constructor.", + "markdown": "Reports non-default constructor in serializable classes.\n\n\nThe platform's `IonObjectSerializer` requires specifying `@PropertyMapping` explicitly.\n\n\nQuick-fix generates necessary `@PropertyMapping` annotation for the constructor." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PsiElementConcatenation", + "shortDescription": { + "text": "Using PsiElement string representation to generate new expression is incorrect" + }, + "fullDescription": { + "text": "Reports direct usage of 'PsiElement' and 'PsiType' in strings. When building strings for 'PsiJavaParserFacade.createExpressionFromText()' (or similar methods), 'PsiElement.getText()' should be used instead.", + "markdown": "Reports direct usage of `PsiElement` and `PsiType` in strings.\n\n\nWhen building strings for `PsiJavaParserFacade.createExpressionFromText()` (or similar methods), `PsiElement.getText()` should be used\ninstead." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ComponentNotRegistered", + "shortDescription": { + "text": "Component/Action not registered" + }, + "fullDescription": { + "text": "Reports plugin components and actions that are not registered in a 'plugin.xml' descriptor. This eases developing new components when using the \"Create Class\" intention and helps keep track of potentially obsolete components. Provided quick-fix to register the component adds necessary registration in 'plugin.xml' descriptor. Configure the inspection: Use the Check Actions option to turn off the check for Actions, as they may be intentionally created and registered dynamically. Use the Ignore non-public classes option to ignore abstract and non-public classes.", + "markdown": "Reports plugin components and actions that are not registered in a `plugin.xml` descriptor.\n\n\nThis eases developing new components when using the \"Create Class\" intention and helps keep track of potentially obsolete components.\n\n\nProvided quick-fix to register the component adds necessary registration in `plugin.xml` descriptor.\n\nConfigure the inspection:\n\n* Use the **Check Actions** option to turn off the check for Actions, as they may be intentionally created and registered dynamically.\n* Use the **Ignore non-public classes** option to ignore abstract and non-public classes." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnsafeReturnStatementVisitor", + "shortDescription": { + "text": "Unsafe return statements visitor" + }, + "fullDescription": { + "text": "Reports unsafe use of 'JavaRecursiveElementVisitor.visitReturnStatement()'. Processing 'PsiReturnStatement's even if they belong to another 'PsiClass' or 'PsiLambdaExpression' is a bug in most cases, and a visitor most probably should implement 'visitClass()' and 'visitLambdaExpression()' methods.", + "markdown": "Reports unsafe use of `JavaRecursiveElementVisitor.visitReturnStatement()`.\n\n\nProcessing `PsiReturnStatement`s\neven if they belong to another `PsiClass` or `PsiLambdaExpression` is a bug in most cases, and a visitor most\nprobably should implement `visitClass()` and `visitLambdaExpression()` methods." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnresolvedPluginConfigReference", + "shortDescription": { + "text": "Unresolved plugin configuration reference" + }, + "fullDescription": { + "text": "Reports unresolved references to plugin configuration elements. Extensions Referencing extension with an unknown 'id' might result in errors at runtime. The following extension points are supported: 'com.intellij.advancedSetting' in resource bundle 'advanced.setting.*' key 'com.intellij.experimentalFeature' in 'Experiments.isFeatureEnabled()/setFeatureEnabled()' 'com.intellij.notificationGroup' in 'Notification' constructor and 'NotificationGroupManager.getNotificationGroup()' 'com.intellij.registryKey' in 'Registry' methods 'key' parameter 'com.intellij.toolWindow' in resource bundle 'toolwindow.stripe.*' key Extension Point Extension point name referencing its corresponding '' declaration in 'plugin.xml'. 'com.intellij.openapi.extensions.ExtensionPointName' constructor and 'create()' 'com.intellij.openapi.extensions.ProjectExtensionPointName' constructor 'com.intellij.openapi.util.KeyedExtensionCollector' and inheritors constructor", + "markdown": "Reports unresolved references to plugin configuration elements.\n\n#### Extensions\n\n\nReferencing extension with an unknown `id` might result in errors at runtime.\n\n\nThe following extension points are supported:\n\n* `com.intellij.advancedSetting` in resource bundle `advanced.setting.*` key\n* `com.intellij.experimentalFeature` in `Experiments.isFeatureEnabled()/setFeatureEnabled()`\n* `com.intellij.notificationGroup` in `Notification` constructor and `NotificationGroupManager.getNotificationGroup()`\n* `com.intellij.registryKey` in `Registry` methods `key` parameter\n* `com.intellij.toolWindow` in resource bundle `toolwindow.stripe.*` key\n\n#### Extension Point\n\n\nExtension point name referencing its corresponding `` declaration in `plugin.xml`.\n\n* `com.intellij.openapi.extensions.ExtensionPointName` constructor and `create()`\n* `com.intellij.openapi.extensions.ProjectExtensionPointName` constructor\n* `com.intellij.openapi.util.KeyedExtensionCollector` and inheritors constructor\n\n
    " + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UseDPIAwareInsets", + "shortDescription": { + "text": "Use DPI-aware insets" + }, + "fullDescription": { + "text": "Reports usages of 'java.awt.Insets' and 'JBUI.insetsXyz()' that can be simplified. The 'Insets' instances are not DPI-aware and can result in UI layout problems. Quick fix performs replacement with 'JBUI.insets()' or simplifies the expression. Example: // bad:\nInsets insets1 = new Insets(1, 2, 3, 4);\nInsets insets2 = new Insets(1, 2, 1, 2);\nInsets insets3 = new Insets(1, 0, 0, 0);\n\n// good:\nInsets insets1 = JBUI.insets(1, 2, 3, 4);\nInsets insets2 = JBUI.insets(1, 2);\nInsets insets3 = JBUI.insetsTop(1);", + "markdown": "Reports usages of `java.awt.Insets` and `JBUI.insetsXyz()` that can be simplified.\n\n\nThe `Insets` instances are not DPI-aware and can result in UI layout problems.\n\n\nQuick fix performs replacement with `JBUI.insets()` or simplifies the expression.\n\nExample:\n\n```\n// bad:\nInsets insets1 = new Insets(1, 2, 3, 4);\nInsets insets2 = new Insets(1, 2, 1, 2);\nInsets insets3 = new Insets(1, 0, 0, 0);\n\n// good:\nInsets insets1 = JBUI.insets(1, 2, 3, 4);\nInsets insets2 = JBUI.insets(1, 2);\nInsets insets3 = JBUI.insetsTop(1);\n```" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UndesirableClassUsage", + "shortDescription": { + "text": "Undesirable class usage" + }, + "fullDescription": { + "text": "Reports usages of undesirable classes (mostly Swing components). Quick-fix offers replacement with recommended IntelliJ Platform replacement.", + "markdown": "Reports usages of undesirable classes (mostly Swing components).\n\n\nQuick-fix offers replacement with recommended IntelliJ Platform replacement." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PluginXmlValidity", + "shortDescription": { + "text": "Plugin.xml validity" + }, + "fullDescription": { + "text": "Reports problems in 'plugin.xml'. Invalid configuration can lead to problems at runtime.", + "markdown": "Reports problems in `plugin.xml`.\n\n\nInvalid configuration can lead to problems at runtime." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Plugin descriptor", + "index": 73, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InspectionDescriptionNotFoundInspection", + "shortDescription": { + "text": "Inspection description checker" + }, + "fullDescription": { + "text": "Reports inspections that are missing an HTML description file, i.e. a file containing a text like this. The Create description file quick-fix creates a template HTML description file.", + "markdown": "Reports inspections that are missing an HTML description file, i.e. a file containing a text like this.\n\n\nThe **Create description file** quick-fix creates a template HTML description file." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Description file", + "index": 103, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "LeakableMapKey", + "shortDescription": { + "text": "Map key may leak" + }, + "fullDescription": { + "text": "Reports using 'Language' or 'FileType' as a map key in plugin code. Such usages might lead to inability to unload the plugin properly. Please consider using 'String' as keys instead. See Dynamic Plugins in SDK Docs for more information.", + "markdown": "Reports using `Language` or `FileType` as a map key in plugin code.\n\n\nSuch usages might lead to inability to unload the plugin properly.\n\n\nPlease consider using `String` as keys instead.\n\n\nSee [Dynamic\nPlugins](https://plugins.jetbrains.com/docs/intellij/dynamic-plugins.html) in SDK Docs for more information." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "PostfixTemplateDescriptionNotFound", + "shortDescription": { + "text": "Postfix template description checker" + }, + "fullDescription": { + "text": "Reports postfix templates missing an HTML description file, 'before.template' file or 'after.template' file. These are shown in Settings | Editor | General | Postfix Completion. The Create description file quick-fix creates a template HTML description file.", + "markdown": "Reports postfix templates missing an HTML description file, `before.template` file or `after.template` file. These are shown in [Settings \\| Editor \\| General \\| Postfix Completion](settings://reference.settingsdialog.IDE.editor.postfix.templates).\n\n\nThe **Create description file** quick-fix creates a template HTML description file." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Description file", + "index": 103, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnsafeVfsRecursion", + "shortDescription": { + "text": "Unsafe VFS recursion" + }, + "fullDescription": { + "text": "Reports usage of 'VirtualFile.getChildren()' inside recursive methods. This may cause endless loops when iterating over cyclic symlinks. Use 'VfsUtilCore.visitChildrenRecursively()' instead. 'void processDirectory(VirtualFile dir) {\n for (VirtualFile file : dir.getChildren()) { // bad\n if (!file.isDirectory()) {\n processFile(file);\n } else {\n processDirectory(file); // recursive call\n }\n }\n}'\n 'void processDirectory(VirtualFile dir) {\n VfsUtilCore.visitChildrenRecursively(dir, new VirtualFileVisitor() { // good\n @Override\n public boolean visitFile(@NotNull VirtualFile file) {\n if (!file.isDirectory()) {\n processFile(file);\n }\n return true;\n }\n });\n}'", + "markdown": "Reports usage of `VirtualFile.getChildren()` inside recursive methods.\n\n\nThis may cause endless loops when iterating over cyclic symlinks.\nUse `VfsUtilCore.visitChildrenRecursively()` instead.\n\n\n void processDirectory(VirtualFile dir) {\n for (VirtualFile file : dir.getChildren()) { // bad\n if (!file.isDirectory()) {\n processFile(file);\n } else {\n processDirectory(file); // recursive call\n }\n }\n }\n\n\n void processDirectory(VirtualFile dir) {\n VfsUtilCore.visitChildrenRecursively(dir, new VirtualFileVisitor() { // good\n @Override\n public boolean visitFile(@NotNull VirtualFile file) {\n if (!file.isDirectory()) {\n processFile(file);\n }\n return true;\n }\n });\n }\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FileEqualsUsage", + "shortDescription": { + "text": "File.equals() usage" + }, + "fullDescription": { + "text": "Reports usages of 'java.io.File.equals()/hashCode()/compareTo()' methods. These do not honor case-insensitivity on macOS. Use 'com.intellij.openapi.util.io.FileUtil.filesEquals()/fileHashCode()/compareFiles()' methods instead.", + "markdown": "Reports usages of `java.io.File.equals()/hashCode()/compareTo()` methods.\n\n\nThese do not honor case-insensitivity on macOS.\n\n\nUse `com.intellij.openapi.util.io.FileUtil.filesEquals()/fileHashCode()/compareFiles()` methods instead." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Code", + "index": 83, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WorkspaceImplAbsent", + "shortDescription": { + "text": "Absent entity implementation" + }, + "fullDescription": { + "text": "Reports absent of implementation for the entity. Verifies that each entity in the project has the implementation. Suggests generation implementation for the whole entities in the current module.", + "markdown": "Reports absent of implementation for the entity.\n\n\nVerifies that each entity in the project has the implementation.\n\n\nSuggests generation implementation for the whole entities in the current module." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Plugin DevKit/Workspace model", + "index": 78, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.properties", + "version": "223.8787", + "rules": [ + { + "id": "UseEllipsisInPropertyInspection", + "shortDescription": { + "text": "Three dot characters instead of the ellipsis" + }, + "fullDescription": { + "text": "Reports three \"dot\" characters which are used instead of the ellipsis character for UTF-8 properties files.", + "markdown": "Reports three \"dot\" characters which are used instead of the ellipsis character for UTF-8 properties files." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Properties files", + "index": 31, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AlphaUnsortedPropertiesFile", + "shortDescription": { + "text": "Properties file or resource bundle is alphabetically unsorted" + }, + "fullDescription": { + "text": "Reports alphabetically unsorted resource bundles or .properties files.", + "markdown": "Reports alphabetically unsorted resource bundles or .properties files." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "INFO" + } + }, + "relationships": [ + { + "target": { + "id": "Properties files", + "index": 31, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "TrailingSpacesInProperty", + "shortDescription": { + "text": "Trailing spaces in property" + }, + "fullDescription": { + "text": "Reports properties whose keys or values end with a whitespace.", + "markdown": "Reports properties whose keys or values end with a whitespace." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Properties files", + "index": 31, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "UnusedProperty", + "shortDescription": { + "text": "Unused property" + }, + "fullDescription": { + "text": "Reports properties that are not referenced outside of the .properties file they are contained in.", + "markdown": "Reports properties that are not referenced outside of the .properties file they are contained in." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Properties files", + "index": 31, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "WrongPropertyKeyValueDelimiter", + "shortDescription": { + "text": "Property key/value delimiter doesn't match code style settings" + }, + "fullDescription": { + "text": "Reports properties in which key or value delimiters do not match code style settings.", + "markdown": "Reports properties in which key or value delimiters do not match code style settings." + }, + "defaultConfiguration": { + "enabled": false, + "level": "note", + "parameters": { + "ideaSeverity": "WEAK WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Properties files", + "index": 31, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DuplicatePropertyInspection", + "shortDescription": { + "text": "Duplicate property" + }, + "fullDescription": { + "text": "Reports duplicate property keys with different values, duplicate keys, or duplicate property values. Example: 'property1=value;\nproperty2=value;' The Options list allows selecting the area in which the inspection should search for duplicates.", + "markdown": "Reports duplicate property keys with different values, duplicate keys, or duplicate property values.\n\nExample:\n\n\n property1=value;\n property2=value;\n\nThe **Options** list allows selecting the area in which the inspection should search for duplicates." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "Properties files", + "index": 31, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "XPathView", + "version": "223.8787", + "rules": [ + { + "id": "XsltUnusedDeclaration", + "shortDescription": { + "text": "Unused variable or parameter" + }, + "fullDescription": { + "text": "Reports local variables and parameters that are never used.", + "markdown": "Reports local variables and parameters that are never used." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "XSLT", + "index": 77, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "RedundantTypeConversion", + "shortDescription": { + "text": "Redundant type conversion" + }, + "fullDescription": { + "text": "Reports unnecessary type conversions. Type conversions are unnecessary when the argument type of a 'string()', 'number()', or 'boolean()' function is already the same as the function's return type or if the expected expression type is 'any'. Suggests removing the unnecessary conversion.", + "markdown": "Reports unnecessary type conversions. Type conversions are unnecessary when the argument type of a `string()`, `number()`, or `boolean()` function is already the same as the function's return type or if the expected expression type is `any`. Suggests removing the unnecessary conversion." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "XPath", + "index": 107, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "IndexZeroUsage", + "shortDescription": { + "text": "XPath predicate with index 0" + }, + "fullDescription": { + "text": "Reports usages of '0' in a predicate index or in a comparison with the function 'position()'. Such usage is almost always a bug because in XPath, the index starts at '1', not at '0'. Example: '//someelement[position() = 0]' or '//something[0]'", + "markdown": "Reports usages of `0` in a predicate index or in a comparison with the function `position()`. Such usage is almost always a bug because in XPath, the index starts at `1`, *not* at `0`.\n\n**Example:**\n\n\n //someelement[position() = 0] or //something[0]\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "XPath", + "index": 107, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "CheckNodeTest", + "shortDescription": { + "text": "Unknown element or attribute name" + }, + "fullDescription": { + "text": "Reports names of elements or attributes that are used in an XPath-expression but are missing in the associated XML files and are not defined in the referenced schemas. Such names are often the result of typos and would otherwise probably only be discovered at runtime. Example: '' If the 'h' is bound to the XHTML namespace, the inspection will report this part of the 'match' expression as an unknown element name because the correct name of the element is \"textarea\".", + "markdown": "Reports names of elements or attributes that are used in an XPath-expression but are missing in the associated XML files and are not defined in the referenced schemas. Such names are often the result of typos and would otherwise probably only be discovered at runtime.\n\n**Example:**\n\n\n \n\n\nIf the `h` is bound to the XHTML namespace, the inspection will report this part of the `match` expression as an\nunknown element name because the correct name of the element is \"textarea\"." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "XPath", + "index": 107, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XsltDeclarations", + "shortDescription": { + "text": "Incorrect declaration" + }, + "fullDescription": { + "text": "Reports duplicate declarations and illegal identifiers in XSLT variables, parameters, and named templates:", + "markdown": "Reports duplicate declarations and illegal identifiers in XSLT variables, parameters, and named templates:" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "XSLT", + "index": 77, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XsltVariableShadowing", + "shortDescription": { + "text": "Shadowed variable" + }, + "fullDescription": { + "text": "Reports shadowed XSLT variables.", + "markdown": "Reports shadowed XSLT variables." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "XSLT", + "index": 77, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "HardwiredNamespacePrefix", + "shortDescription": { + "text": "Hardcoded namespace prefix" + }, + "fullDescription": { + "text": "Reports comparisons of the 'name()' function with a string that contains a colon (':'). Such usages usually indicate a hardcoded namespace prefix in the comparison. As a result, the code will break when run against XML that uses another prefix for the same namespace. Example: '...'", + "markdown": "Reports comparisons of the `name()` function with a string that contains a colon (`:`). Such usages usually indicate a hardcoded namespace prefix in the comparison. As a result, the code will break when run against XML that uses another prefix for the same namespace.\n\n**Example:**\n\n\n ...\n" + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "XPath", + "index": 107, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "XsltTemplateInvocation", + "shortDescription": { + "text": "Incorrect template invocation" + }, + "fullDescription": { + "text": "Reports missing arguments, passing arguments that are not declared, and passing arguments for parameters more than once in named XSLT template invocations. Parameters declared with a default value are optional and will not be reported as missing.", + "markdown": "Reports missing arguments, passing arguments that are not declared, and passing arguments for parameters more than once in named XSLT template invocations.\n\n\nParameters declared with a default value are optional and will not be reported as missing." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "XSLT", + "index": 77, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "ImplicitTypeConversion", + "shortDescription": { + "text": "Implicit type conversion" + }, + "fullDescription": { + "text": "Reports implicit conversions between the predefined XPath-types 'STRING', 'NUMBER', 'BOOLEAN', and 'NODESET'. Helps to write XSLT scripts that are more expressive about types and prevents subtle bugs: Example: '' is not the same as '' The first test checks whether the element \"foo\" exists ('count(foo) > 0)'; the latter one however is only true if the element actually contains any text ('string-length(foo) > 0'). Suggests making the type conversion more explicit. Use the following options to configure the inspection: Enable or disable implicit conversions between certain types Always report explicit conversions that do not result in the actually expected type, for example, '' Ignore conversion from 'NODESET' to 'BOOLEAN' by using the 'string()' function as a shortcut for writing 'string-length() > 0'.", + "markdown": "Reports implicit conversions between the predefined XPath-types `STRING`, `NUMBER`, `BOOLEAN`, and `NODESET`. Helps to write XSLT scripts that are more expressive about types and prevents subtle bugs:\n\n**Example:**\n\n\n \n\nis not the same as\n\n\n \n\n\nThe first test checks whether the element \"foo\" exists (`count(foo) > 0)`; the latter one however is only\ntrue if the element actually contains any text (`string-length(foo) > 0`). Suggests making\nthe type conversion more explicit.\n\n\nUse the following options to configure the inspection:\n\n* Enable or disable implicit conversions between certain types\n* Always report explicit conversions that do not result in the actually expected type, for example, ``\n* Ignore conversion from `NODESET` to `BOOLEAN` by using the `string()` function as a shortcut for writing `string-length() > 0`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "XPath", + "index": 107, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "com.intellij.uiDesigner", + "version": "223.8787", + "rules": [ + { + "id": "NoLabelFor", + "shortDescription": { + "text": "No label for component" + }, + "fullDescription": { + "text": "Reports components that do not have any static text and do not have any label marked with 'setLabelFor' for this component. Components that do not have static text include edit fields and combo boxes. Such components cannot be activated with a keyboard shortcut. The quick-fix for this inspection allows you to automatically associate an adjacent label with the problematic component.", + "markdown": "Reports components that do not have any static text and do not have any label marked with `setLabelFor` for this component.\n\nComponents that do not have static text include edit fields and combo boxes.\nSuch components cannot be activated with a keyboard shortcut. The quick-fix for this inspection\nallows you to automatically associate an adjacent label with the problematic component." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "UI form", + "index": 84, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "InvalidPropertyKeyForm", + "shortDescription": { + "text": "Invalid property key in a UI form" + }, + "fullDescription": { + "text": "Reports unresolved references to .properties files.", + "markdown": "Reports unresolved references to .properties files." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "UI form", + "index": 84, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "MissingMnemonic", + "shortDescription": { + "text": "Missing mnemonics" + }, + "fullDescription": { + "text": "Reports focusable components with the 'text' property or labels with the assigned 'labelFor' property that do not have a mnemonic character. The quick-fix assigns a unique mnemonic to such a component.", + "markdown": "Reports focusable components with the `text` property or labels with the assigned `labelFor` property that do not have a mnemonic character. The quick-fix assigns a unique mnemonic to such a component." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "UI form", + "index": 84, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "OneButtonGroup", + "shortDescription": { + "text": "Button group with one button" + }, + "fullDescription": { + "text": "Reports 'ButtonGroup' instances that contain only one 'JRadioButton'.", + "markdown": "Reports `ButtonGroup` instances that contain only one `JRadioButton`." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "UI form", + "index": 84, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NoScrollPane", + "shortDescription": { + "text": "Scrollable component not in JScrollPane" + }, + "fullDescription": { + "text": "Reports 'Scrollable' components, except for 'JTextField', that are not placed in 'JScrollPane'. The quick-fix surrounds the problematic component with a scroll pane.", + "markdown": "Reports `Scrollable` components, except for `JTextField`, that are not placed in `JScrollPane`. The quick-fix surrounds the problematic component with a scroll pane." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "UI form", + "index": 84, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "FormSpellChecking", + "shortDescription": { + "text": "Typo in a UI form" + }, + "fullDescription": { + "text": "Reports typos and misspelling in your UI forms (for example, in a 'JLabel' text or 'JPanel' title) and fixes them with one click.", + "markdown": "Reports typos and misspelling in your UI forms (for example, in a `JLabel` text or `JPanel` title) and fixes them\nwith one click." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "UI form", + "index": 84, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "DuplicateMnemonic", + "shortDescription": { + "text": "Duplicate mnemonics" + }, + "fullDescription": { + "text": "Reports components that have duplicated mnemonic characters. The quick-fix assigns a unique mnemonic character to each of the components.", + "markdown": "Reports components that have duplicated mnemonic characters.\n\nThe quick-fix assigns a unique mnemonic character to each of the components." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "UI form", + "index": 84, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "I18nForm", + "shortDescription": { + "text": "Hardcoded string literal in a UI form" + }, + "fullDescription": { + "text": "Reports any instances of hardcoded strings in your UI forms. Hardcoded string literals are usually errors in an internationalized environment. This inspection does not report empty strings and strings consisting of only whitespace. The quick-fix transforms a string literal into a reference to a property in a resource bundle.", + "markdown": "Reports any instances of hardcoded strings in your UI forms.\n\nHardcoded string literals are usually errors in\nan internationalized environment.\nThis inspection does not report empty strings and strings consisting of only whitespace.\n\nThe quick-fix transforms a string literal\ninto a reference to a property in a resource bundle." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "UI form", + "index": 84, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "NoButtonGroup", + "shortDescription": { + "text": "Radio button not in a group" + }, + "fullDescription": { + "text": "Reports 'JRadioButton' components that are not placed in 'ButtonGroup'. A quick-fix is available to group radio buttons placed in adjacent grid cells.", + "markdown": "Reports `JRadioButton` components that are not placed in `ButtonGroup`. A quick-fix is available to group radio buttons placed in adjacent grid cells." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "UI form", + "index": 84, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "BoundFieldAssignment", + "shortDescription": { + "text": "Assignment to UI-bound field" + }, + "fullDescription": { + "text": "Reports assignments to fields which are bound to components in UI Designer forms. Such assignments will cause the component setup code generated by UI Designer for such fields to be ignored.", + "markdown": "Reports assignments to fields which are bound to components in UI Designer forms.\n\nSuch assignments will cause the component setup code generated by UI Designer\nfor such fields to be ignored." + }, + "defaultConfiguration": { + "enabled": false, + "level": "warning", + "parameters": { + "ideaSeverity": "WARNING" + } + }, + "relationships": [ + { + "target": { + "id": "UI form", + "index": 84, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "org.intellij.qodana", + "version": "223.8787", + "rules": [ + { + "id": "JavaAnnotator", + "shortDescription": { + "text": "Java annotator" + }, + "fullDescription": { + "text": "Allows viewing the problems reported by the Java annotator: compilation problems, unresolved by IDEA references, and so on.", + "markdown": "Allows viewing the problems reported by the Java annotator: compilation problems, unresolved by IDEA references, and so on." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 44, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "KotlinAnnotator", + "shortDescription": { + "text": "Kotlin annotator" + }, + "fullDescription": { + "text": "Allows viewing the problems reported by the Kotlin annotator: compilation problems, references unresolved by the IDE, and so on.", + "markdown": "Allows viewing the problems reported by the Kotlin annotator: compilation problems, references unresolved by the IDE, and so on." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 44, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "QodanaServiceMessage", + "shortDescription": { + "text": "Qodana service message" + }, + "fullDescription": { + "text": "Reports the Qodana service messages such as suspending a particular inspection due to a large number of reported problems.", + "markdown": "Reports the Qodana service messages such as suspending a particular inspection due to a large number of reported problems." + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "General", + "index": 44, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + }, + { + "name": "AntSupport", + "version": "223.8787", + "rules": [ + { + "id": "AntMissingPropertiesFileInspection", + "shortDescription": { + "text": "Missing properties file" + }, + "fullDescription": { + "text": "Reports missing .properties files.", + "markdown": "|------------------------------------|\n| Reports missing .properties files. |" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Ant", + "index": 94, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AntResolveInspection", + "shortDescription": { + "text": "Ant references resolve problems" + }, + "fullDescription": { + "text": "Reports unresolved references on properties and custom type definitions that cannot be resolved.", + "markdown": "|--------------------------------------------------------------------------------------------------|\n| Reports unresolved references on properties and custom type definitions that cannot be resolved. |" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Ant", + "index": 94, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + }, + { + "id": "AntDuplicateTargetsInspection", + "shortDescription": { + "text": "Duplicate targets" + }, + "fullDescription": { + "text": "Reports duplicate 'targets' in the current build file.", + "markdown": "|--------------------------------------------------------|\n| Reports duplicate `targets` in the current build file. |" + }, + "defaultConfiguration": { + "enabled": false, + "level": "error", + "parameters": { + "ideaSeverity": "ERROR" + } + }, + "relationships": [ + { + "target": { + "id": "Ant", + "index": 94, + "toolComponent": { + "name": "QDJVMC" + } + }, + "kinds": [ + "superset" + ] + } + ] + } + ], + "language": "en-US", + "contents": [ + "localizedData", + "nonLocalizedData" + ], + "isComprehensive": false + } + ] + }, + "invocations": [ + { + "exitCode": 0, + "toolExecutionNotifications": [ + { + "message": { + "text": "Reporting from [] 'sanity' inspections was suspended due to high problems count." + }, + "level": "error" + } + ], + "executionSuccessful": true + } + ], + "language": "en-US", + "versionControlProvenance": [ + { + "repositoryUri": "https://github.com/JavierSegoviaCordoba/semver-gradle-plugin.git", + "revisionId": "d4e66d8d570a2333ba9bad0a2f09cb9f218c7063", + "branch": "main", + "properties": { + "repoUrl": "https://github.com/JavierSegoviaCordoba/semver-gradle-plugin.git", + "lastAuthorName": "Javier Segovia Córdoba", + "vcsType": "Git", + "lastAuthorEmail": "javier@segoviacordoba.com" + } + } + ], + "results": [ + { + "ruleId": "PackageDirectoryMismatch", + "kind": "fail", + "level": "error", + "message": { + "text": "Package directive does not match the file location", + "markdown": "Package directive does not match the file location" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/resources/gradle-features/build cache clean v1_0_0/src/main/kotlin/Main.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 1, + "startColumn": 1, + "charOffset": 0, + "charLength": 24, + "snippet": { + "text": "package com.example.main" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 1, + "startColumn": 1, + "charOffset": 0, + "charLength": 38, + "snippet": { + "text": "package com.example.main\n\nfun main() {" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "f344ff258d50cd3f4e67f91f677cbda876724b51af8674919cff626a7b5e031c" + }, + "properties": { + "ideaSeverity": "ERROR", + "tags": [ + "kotlin" + ] + } + }, + { + "ruleId": "PackageDirectoryMismatch", + "kind": "fail", + "level": "error", + "message": { + "text": "Package directive does not match the file location", + "markdown": "Package directive does not match the file location" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/resources/gradle-features/configuration cache clean v1_0_0/src/main/kotlin/Main.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 1, + "startColumn": 1, + "charOffset": 0, + "charLength": 24, + "snippet": { + "text": "package com.example.main" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 1, + "startColumn": 1, + "charOffset": 0, + "charLength": 38, + "snippet": { + "text": "package com.example.main\n\nfun main() {" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "527addce8d84abedbb0a4b4a6d4c84f041243e08d3918424f2ff2fa676124aaf" + }, + "properties": { + "ideaSeverity": "ERROR", + "tags": [ + "kotlin" + ] + } + }, + { + "ruleId": "UnstableApiUsage", + "kind": "fail", + "level": "warning", + "message": { + "text": "'getTags()' is marked unstable with @Incubating", + "markdown": "'getTags()' is marked unstable with @Incubating" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/build.gradle.kts", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 27, + "startColumn": 37, + "charOffset": 908, + "charLength": 4, + "snippet": { + "text": "tags" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 25, + "startColumn": 1, + "charOffset": 710, + "charLength": 309, + "snippet": { + "text": " implementationClass =\n \"com.javiersc.semver.project.gradle.plugin.SemverProjectPlugin\"\n tags.set(\n listOf(\n \"semver\"," + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "2ad8fbba5ec089697d2aa0fe68466214a2924a0349508ffa3a9808032c75f39b" + }, + "properties": { + "ideaSeverity": "WARNING", + "tags": [ + "kotlin" + ] + } + }, + { + "ruleId": "UnstableApiUsage", + "kind": "fail", + "level": "warning", + "message": { + "text": "'getTags()' is marked unstable with @Incubating", + "markdown": "'getTags()' is marked unstable with @Incubating" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-gradle-plugin/build.gradle.kts", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 23, + "startColumn": 37, + "charOffset": 839, + "charLength": 4, + "snippet": { + "text": "tags" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 21, + "startColumn": 1, + "charOffset": 656, + "charLength": 294, + "snippet": { + "text": " implementationClass =\n \"com.javiersc.semver.gradle.plugin.SemverPlugin\"\n tags.set(\n listOf(\n \"semver\"," + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-gradle-plugin", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "b2e2e7e0229ed3200d668e1c17e002d9144ae2108b4919488166805f28f56ed6" + }, + "properties": { + "ideaSeverity": "WARNING", + "tags": [ + "kotlin" + ] + } + }, + { + "ruleId": "UnstableApiUsage", + "kind": "fail", + "level": "warning", + "message": { + "text": "'org.gradle.api.provider.ValueSource' is marked unstable with @Incubating", + "markdown": "'org.gradle.api.provider.ValueSource' is marked unstable with @Incubating" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 25, + "startColumn": 46, + "charOffset": 1363, + "charLength": 11, + "snippet": { + "text": "ValueSource" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 23, + "startColumn": 1, + "charOffset": 1285, + "charLength": 163, + "snippet": { + "text": "import org.gradle.kotlin.dsl.of\n\ninternal abstract class VersionValueSource : ValueSource {\n\n override fun obtain(): String =" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "7cbfbefc9f1a8d18641eb9b55cabc81f4315809cdc202810e4543b1e7fae6f5c" + }, + "properties": { + "ideaSeverity": "WARNING", + "tags": [ + "kotlin" + ] + } + }, + { + "ruleId": "UnstableApiUsage", + "kind": "fail", + "level": "warning", + "message": { + "text": "'of(org.gradle.api.provider.ProviderFactory, kotlin.reflect.KClass>, org.gradle.api.Action>)' is marked unstable with @Incubating", + "markdown": "'of(org.gradle.api.provider.ProviderFactory, kotlin.reflect.KClass\\>, org.gradle.api.Action\\>)' is marked unstable with @Incubating" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 83, + "startColumn": 31, + "charOffset": 4008, + "charLength": 2, + "snippet": { + "text": "of" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 81, + "startColumn": 1, + "charOffset": 3918, + "charLength": 296, + "snippet": { + "text": "\n fun register(project: Project): Provider =\n project.providers.of(VersionValueSource::class) { valueSourceSpec ->\n val gitDir = project.provider { project.semverExtension.gitDir.get().asFile }\n valueSourceSpec.parameters.gitDir.set(gitDir)" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "1b04e2152ae793d0e28c38218dbed8589ff599719f8f2d532e637fca7fd4e188" + }, + "properties": { + "ideaSeverity": "WARNING", + "tags": [ + "kotlin" + ] + } + }, + { + "ruleId": "UnstableApiUsage", + "kind": "fail", + "level": "warning", + "message": { + "text": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSourceSpec' marked with @Incubating", + "markdown": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSourceSpec' marked with @Incubating" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 85, + "startColumn": 33, + "charOffset": 4185, + "charLength": 10, + "snippet": { + "text": "parameters" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 83, + "startColumn": 1, + "charOffset": 3978, + "charLength": 379, + "snippet": { + "text": " project.providers.of(VersionValueSource::class) { valueSourceSpec ->\n val gitDir = project.provider { project.semverExtension.gitDir.get().asFile }\n valueSourceSpec.parameters.gitDir.set(gitDir)\n val commitsMaxCount: Int =\n project.commitsMaxCount.orNull ?: project.semverExtension.commitsMaxCount.get()" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "5fed42982ab0153f22638fd0d6fa1c3f6fa26e9e980877c9b7610cc17c3bed23" + }, + "properties": { + "ideaSeverity": "WARNING", + "tags": [ + "kotlin" + ] + } + }, + { + "ruleId": "UnstableApiUsage", + "kind": "fail", + "level": "warning", + "message": { + "text": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSourceSpec' marked with @Incubating", + "markdown": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSourceSpec' marked with @Incubating" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 88, + "startColumn": 33, + "charOffset": 4390, + "charLength": 10, + "snippet": { + "text": "parameters" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 86, + "startColumn": 1, + "charOffset": 4215, + "charLength": 416, + "snippet": { + "text": " val commitsMaxCount: Int =\n project.commitsMaxCount.orNull ?: project.semverExtension.commitsMaxCount.get()\n valueSourceSpec.parameters.commitsMaxCount.set(commitsMaxCount)\n valueSourceSpec.parameters.projectTagPrefix.set(project.projectTagPrefix.get())\n valueSourceSpec.parameters.tagPrefixProperty.set(project.tagPrefixProperty.get())" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "d1cb5959590c4a42d3ac401e25db18c6fe27ceea162bd81e91f3bc108bb95a3d" + }, + "properties": { + "ideaSeverity": "WARNING", + "tags": [ + "kotlin" + ] + } + }, + { + "ruleId": "UnstableApiUsage", + "kind": "fail", + "level": "warning", + "message": { + "text": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSourceSpec' marked with @Incubating", + "markdown": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSourceSpec' marked with @Incubating" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 89, + "startColumn": 33, + "charOffset": 4470, + "charLength": 10, + "snippet": { + "text": "parameters" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 87, + "startColumn": 1, + "charOffset": 4258, + "charLength": 464, + "snippet": { + "text": " project.commitsMaxCount.orNull ?: project.semverExtension.commitsMaxCount.get()\n valueSourceSpec.parameters.commitsMaxCount.set(commitsMaxCount)\n valueSourceSpec.parameters.projectTagPrefix.set(project.projectTagPrefix.get())\n valueSourceSpec.parameters.tagPrefixProperty.set(project.tagPrefixProperty.get())\n valueSourceSpec.parameters.stageProperty.set(project.stageProperty.orNull)" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "7d445d0f8db76398019ca9dab58642cabe506f986dd9dc7c6d011132f4d62c41" + }, + "properties": { + "ideaSeverity": "WARNING", + "tags": [ + "kotlin" + ] + } + }, + { + "ruleId": "UnstableApiUsage", + "kind": "fail", + "level": "warning", + "message": { + "text": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSourceSpec' marked with @Incubating", + "markdown": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSourceSpec' marked with @Incubating" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 90, + "startColumn": 33, + "charOffset": 4566, + "charLength": 10, + "snippet": { + "text": "parameters" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 88, + "startColumn": 1, + "charOffset": 4358, + "charLength": 455, + "snippet": { + "text": " valueSourceSpec.parameters.commitsMaxCount.set(commitsMaxCount)\n valueSourceSpec.parameters.projectTagPrefix.set(project.projectTagPrefix.get())\n valueSourceSpec.parameters.tagPrefixProperty.set(project.tagPrefixProperty.get())\n valueSourceSpec.parameters.stageProperty.set(project.stageProperty.orNull)\n valueSourceSpec.parameters.scopeProperty.set(project.scopeProperty.orNull)" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "9c77ee8026a95af935332ba41303cadbcc8c2da79502c31627d74313f5b5a28a" + }, + "properties": { + "ideaSeverity": "WARNING", + "tags": [ + "kotlin" + ] + } + }, + { + "ruleId": "UnstableApiUsage", + "kind": "fail", + "level": "warning", + "message": { + "text": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSourceSpec' marked with @Incubating", + "markdown": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSourceSpec' marked with @Incubating" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 91, + "startColumn": 33, + "charOffset": 4664, + "charLength": 10, + "snippet": { + "text": "parameters" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 89, + "startColumn": 1, + "charOffset": 4438, + "charLength": 469, + "snippet": { + "text": " valueSourceSpec.parameters.projectTagPrefix.set(project.projectTagPrefix.get())\n valueSourceSpec.parameters.tagPrefixProperty.set(project.tagPrefixProperty.get())\n valueSourceSpec.parameters.stageProperty.set(project.stageProperty.orNull)\n valueSourceSpec.parameters.scopeProperty.set(project.scopeProperty.orNull)\n valueSourceSpec.parameters.creatingSemverTag.set(project.isCreatingSemverTag)" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "eb9db4470e9ddad4429c94b50f32cf52403b70c19ba49b5f6b6b41de05fb3dfd" + }, + "properties": { + "ideaSeverity": "WARNING", + "tags": [ + "kotlin" + ] + } + }, + { + "ruleId": "UnstableApiUsage", + "kind": "fail", + "level": "warning", + "message": { + "text": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSourceSpec' marked with @Incubating", + "markdown": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSourceSpec' marked with @Incubating" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 92, + "startColumn": 33, + "charOffset": 4755, + "charLength": 10, + "snippet": { + "text": "parameters" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 90, + "startColumn": 1, + "charOffset": 4534, + "charLength": 465, + "snippet": { + "text": " valueSourceSpec.parameters.tagPrefixProperty.set(project.tagPrefixProperty.get())\n valueSourceSpec.parameters.stageProperty.set(project.stageProperty.orNull)\n valueSourceSpec.parameters.scopeProperty.set(project.scopeProperty.orNull)\n valueSourceSpec.parameters.creatingSemverTag.set(project.isCreatingSemverTag)\n valueSourceSpec.parameters.checkClean.set(project.checkCleanProperty.get())" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "91cd34e2f8309ceba1698d6efd658918f8f2d53c612ca3ec29883bb2f512d023" + }, + "properties": { + "ideaSeverity": "WARNING", + "tags": [ + "kotlin" + ] + } + }, + { + "ruleId": "UnstableApiUsage", + "kind": "fail", + "level": "warning", + "message": { + "text": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSourceSpec' marked with @Incubating", + "markdown": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSourceSpec' marked with @Incubating" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 93, + "startColumn": 33, + "charOffset": 4846, + "charLength": 10, + "snippet": { + "text": "parameters" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 91, + "startColumn": 1, + "charOffset": 4632, + "charLength": 381, + "snippet": { + "text": " valueSourceSpec.parameters.stageProperty.set(project.stageProperty.orNull)\n valueSourceSpec.parameters.scopeProperty.set(project.scopeProperty.orNull)\n valueSourceSpec.parameters.creatingSemverTag.set(project.isCreatingSemverTag)\n valueSourceSpec.parameters.checkClean.set(project.checkCleanProperty.get())\n }" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "4c5c10324e02efee6fecb6e00f3300acef282b5596578dfbdf7d5ae565b19786" + }, + "properties": { + "ideaSeverity": "WARNING", + "tags": [ + "kotlin" + ] + } + }, + { + "ruleId": "UnstableApiUsage", + "kind": "fail", + "level": "warning", + "message": { + "text": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSourceSpec' marked with @Incubating", + "markdown": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSourceSpec' marked with @Incubating" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 94, + "startColumn": 33, + "charOffset": 4940, + "charLength": 10, + "snippet": { + "text": "parameters" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 92, + "startColumn": 1, + "charOffset": 4723, + "charLength": 296, + "snippet": { + "text": " valueSourceSpec.parameters.scopeProperty.set(project.scopeProperty.orNull)\n valueSourceSpec.parameters.creatingSemverTag.set(project.isCreatingSemverTag)\n valueSourceSpec.parameters.checkClean.set(project.checkCleanProperty.get())\n }\n }" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "7a21bea99d77c9b855f177c239695feb3e05c4b26d5709ae193d25604576bcef" + }, + "properties": { + "ideaSeverity": "WARNING", + "tags": [ + "kotlin" + ] + } + }, + { + "ruleId": "UnstableApiUsage", + "kind": "fail", + "level": "warning", + "message": { + "text": "'org.gradle.api.provider.ValueSourceParameters' is marked unstable with @Incubating", + "markdown": "'org.gradle.api.provider.ValueSourceParameters' is marked unstable with @Incubating" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 69, + "startColumn": 33, + "charOffset": 3510, + "charLength": 21, + "snippet": { + "text": "ValueSourceParameters" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 67, + "startColumn": 1, + "charOffset": 3467, + "charLength": 144, + "snippet": { + "text": " }\n\n internal interface Params : ValueSourceParameters {\n val gitDir: Property\n val commitsMaxCount: Property" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "0e4d7ee17f8f02c2ca3703fc448699edd00c175dc12b087151e944b7059129a0" + }, + "properties": { + "ideaSeverity": "WARNING", + "tags": [ + "kotlin" + ] + } + }, + { + "ruleId": "UnstableApiUsage", + "kind": "fail", + "level": "warning", + "message": { + "text": "Overridden method 'obtain()' is declared in unstable interface 'org.gradle.api.provider.ValueSource' marked with @Incubating", + "markdown": "Overridden method 'obtain()' is declared in unstable interface 'org.gradle.api.provider.ValueSource' marked with @Incubating" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 27, + "startColumn": 18, + "charOffset": 1430, + "charLength": 6, + "snippet": { + "text": "obtain" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 25, + "startColumn": 1, + "charOffset": 1318, + "charLength": 247, + "snippet": { + "text": "internal abstract class VersionValueSource : ValueSource {\n\n override fun obtain(): String =\n with(parameters) {\n val isSamePrefix: Boolean = tagPrefixProperty.get() == projectTagPrefix.get()" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "07449591c18d309473d95e4460263bcb5b0a005a2bc0f053943d4ceaff793ede" + }, + "properties": { + "ideaSeverity": "WARNING", + "tags": [ + "kotlin" + ] + } + }, + { + "ruleId": "UnstableApiUsage", + "kind": "fail", + "level": "warning", + "message": { + "text": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSource' marked with @Incubating", + "markdown": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSource' marked with @Incubating" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 28, + "startColumn": 14, + "charOffset": 1462, + "charLength": 10, + "snippet": { + "text": "parameters" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 26, + "startColumn": 1, + "charOffset": 1412, + "charLength": 154, + "snippet": { + "text": "\n override fun obtain(): String =\n with(parameters) {\n val isSamePrefix: Boolean = tagPrefixProperty.get() == projectTagPrefix.get()\n" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "032018c9d46926f60ddef95f1915f2871d2b5ce050c5f8349a4dcab3814d974d" + }, + "properties": { + "ideaSeverity": "WARNING", + "tags": [ + "kotlin" + ] + } + }, + { + "ruleId": "UnstableApiUsage", + "kind": "fail", + "level": "warning", + "message": { + "text": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSource' marked with @Incubating", + "markdown": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSource' marked with @Incubating" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 33, + "startColumn": 30, + "charOffset": 1648, + "charLength": 10, + "snippet": { + "text": "parameters" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 31, + "startColumn": 1, + "charOffset": 1567, + "charLength": 182, + "snippet": { + "text": " fun cache() =\n GitCache(\n gitDir = parameters.gitDir.get(),\n maxCount = parameters.commitsMaxCount,\n )" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "db7c57ff6f3d2272547cf1413ad69fca3d44696555a57e03a20b57647a1b359f" + }, + "properties": { + "ideaSeverity": "WARNING", + "tags": [ + "kotlin" + ] + } + }, + { + "ruleId": "UnstableApiUsage", + "kind": "fail", + "level": "warning", + "message": { + "text": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSource' marked with @Incubating", + "markdown": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSource' marked with @Incubating" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 34, + "startColumn": 32, + "charOffset": 1704, + "charLength": 10, + "snippet": { + "text": "parameters" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 32, + "startColumn": 1, + "charOffset": 1593, + "charLength": 157, + "snippet": { + "text": " GitCache(\n gitDir = parameters.gitDir.get(),\n maxCount = parameters.commitsMaxCount,\n )\n" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "e14e945473d664eb418b501e5ecbe0a11642c34ad76ac764726060d407846da3" + }, + "properties": { + "ideaSeverity": "WARNING", + "tags": [ + "kotlin" + ] + } + }, + { + "ruleId": "UnstableApiUsage", + "kind": "fail", + "level": "warning", + "message": { + "text": "'getTags()' is marked unstable with @Incubating", + "markdown": "'getTags()' is marked unstable with @Incubating" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-settings-gradle-plugin/build.gradle.kts", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 26, + "startColumn": 37, + "charOffset": 857, + "charLength": 4, + "snippet": { + "text": "tags" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 24, + "startColumn": 1, + "charOffset": 657, + "charLength": 311, + "snippet": { + "text": " implementationClass =\n \"com.javiersc.semver.settings.gradle.plugin.SemverSettingsPlugin\"\n tags.set(\n listOf(\n \"semver\"," + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-settings-gradle-plugin", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "96363570368939d75c288cc9644e6eb39691ef3447d54b6c1fda0b3b4b58ab98" + }, + "properties": { + "ideaSeverity": "WARNING", + "tags": [ + "kotlin" + ] + } + } + ], + "automationDetails": { + "id": "project/qodana/2023-03-11", + "guid": "d8997c3d-8e2a-4f51-9210-b7cfece4be0d", + "properties": { + "jobUrl": "https://github.com/JavierSegoviaCordoba/semver-gradle-plugin/actions/runs/4393523897" + } + }, + "newlineSequences": [ + "\r\n", + "\n" + ], + "properties": { + "qodana.sanity.results": [ + { + "ruleId": "KotlinAnnotator", + "kind": "fail", + "level": "error", + "message": { + "text": "'val Project.libs: LibrariesForLibs' can't be called in this context by implicit receiver. Use the explicit one if necessary", + "markdown": "'val Project.libs: LibrariesForLibs' can't be called in this context by implicit receiver. Use the explicit one if necessary" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/build.gradle.kts", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 2, + "startColumn": 11, + "charOffset": 20, + "charLength": 4, + "snippet": { + "text": "libs" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 1, + "startColumn": 1, + "charOffset": 0, + "charLength": 52, + "snippet": { + "text": "plugins {\n alias(libs.plugins.javiersc.hubdle)\n}\n" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "4af512dd10cae837ccd4595376ba2fcee47fea8c7ed06bcd6ebd5df3ae7525fe" + }, + "properties": { + "ideaSeverity": "ERROR" + } + }, + { + "ruleId": "KotlinAnnotator", + "kind": "fail", + "level": "error", + "message": { + "text": "'val Project.libs: LibrariesForLibs' can't be called in this context by implicit receiver. Use the explicit one if necessary", + "markdown": "'val Project.libs: LibrariesForLibs' can't be called in this context by implicit receiver. Use the explicit one if necessary" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-gradle-plugin/build.gradle.kts", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 1, + "startColumn": 17, + "charOffset": 16, + "charLength": 4, + "snippet": { + "text": "libs" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 1, + "startColumn": 1, + "charOffset": 0, + "charLength": 57, + "snippet": { + "text": "plugins { alias(libs.plugins.javiersc.hubdle) }\n\nhubdle {" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-gradle-plugin", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "cb043cac0a4dfa7d778c0f9c72e142e094f61ca37bb141a23f6e383e43c9816d" + }, + "properties": { + "ideaSeverity": "ERROR" + } + }, + { + "ruleId": "KotlinAnnotator", + "kind": "fail", + "level": "error", + "message": { + "text": "'val Project.libs: LibrariesForLibs' can't be called in this context by implicit receiver. Use the explicit one if necessary", + "markdown": "'val Project.libs: LibrariesForLibs' can't be called in this context by implicit receiver. Use the explicit one if necessary" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "build.gradle.kts", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 2, + "startColumn": 11, + "charOffset": 20, + "charLength": 4, + "snippet": { + "text": "libs" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 1, + "startColumn": 1, + "charOffset": 0, + "charLength": 52, + "snippet": { + "text": "plugins {\n alias(libs.plugins.javiersc.hubdle)\n}\n" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "768f58dc7db158d486d6cdd347641d1f603fd5848a3addd6f429584cf941db65" + }, + "properties": { + "ideaSeverity": "ERROR" + } + }, + { + "ruleId": "KotlinAnnotator", + "kind": "fail", + "level": "error", + "message": { + "text": "'val Project.libs: LibrariesForLibs' can't be called in this context by implicit receiver. Use the explicit one if necessary", + "markdown": "'val Project.libs: LibrariesForLibs' can't be called in this context by implicit receiver. Use the explicit one if necessary" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-settings-gradle-plugin/build.gradle.kts", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 2, + "startColumn": 11, + "charOffset": 20, + "charLength": 4, + "snippet": { + "text": "libs" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 1, + "startColumn": 1, + "charOffset": 0, + "charLength": 52, + "snippet": { + "text": "plugins {\n alias(libs.plugins.javiersc.hubdle)\n}\n" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-settings-gradle-plugin", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "9ec13dd2ce1cbb499c0fcfba422ac8a20cc3641b3b593a6ff1d9339fdeeea354" + }, + "properties": { + "ideaSeverity": "ERROR" + } + } + ], + "qodana.promo.results": [ + { + "ruleId": "FunctionName", + "kind": "fail", + "level": "note", + "message": { + "text": "Function name '`stage and scope`' may contain only letters and digits", + "markdown": "Function name ```stage and scope``` may contain only letters and digits" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/PropertiesTest.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 31, + "startColumn": 9, + "charOffset": 802, + "charLength": 17, + "snippet": { + "text": "`stage and scope`" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 29, + "startColumn": 1, + "charOffset": 783, + "charLength": 110, + "snippet": { + "text": "\n @Test\n fun `stage and scope`() {\n runPropertyTestsBasedOnResourceDirectory(\"stage+scope\")\n }" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "f782e6ee45aa92325959a273e7137f0770714d71b25fe640b34cc0d55f79dba6" + }, + "properties": { + "ideaSeverity": "WEAK WARNING" + } + }, + { + "ruleId": "FunctionName", + "kind": "fail", + "level": "note", + "message": { + "text": "Function name '`multi project test`' may contain only letters and digits", + "markdown": "Function name ```multi project test``` may contain only letters and digits" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-settings-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/settings/gradle/plugin/MultiProjectTest.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 11, + "startColumn": 9, + "charOffset": 300, + "charLength": 20, + "snippet": { + "text": "`multi project test`" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 9, + "startColumn": 1, + "charOffset": 281, + "charLength": 153, + "snippet": { + "text": "\n @Test\n fun `multi project test`() {\n gradleTestKitTest(\"multi-project\") {\n val git = Git.init().setDirectory(projectDir).call()" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-settings-gradle-plugin.testFunctional", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "e3eb2818732639eaa013f00b4eef3ed618da8fb378eaed618f7fb64ef3771ce5" + }, + "properties": { + "ideaSeverity": "WEAK WARNING" + } + }, + { + "ruleId": "FunctionName", + "kind": "fail", + "level": "note", + "message": { + "text": "Function name '`configuration cache clean v1_0_0`' should not contain underscores", + "markdown": "Function name ```configuration cache clean v1_0_0``` should not contain underscores" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 38, + "startColumn": 9, + "charOffset": 1150, + "charLength": 34, + "snippet": { + "text": "`configuration cache clean v1_0_0`" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 36, + "startColumn": 1, + "charOffset": 1131, + "charLength": 162, + "snippet": { + "text": "\n @Test\n fun `configuration cache clean v1_0_0`() {\n gradleTestKitTest(\"gradle-features/configuration cache clean v1_0_0\") {\n beforeTest()" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "6c000e38bd388f78b56867dca3f98690f824fd10356bc7abc18c181f845c8c13" + }, + "properties": { + "ideaSeverity": "WEAK WARNING" + } + }, + { + "ruleId": "FunctionName", + "kind": "fail", + "level": "note", + "message": { + "text": "Function name '`android build cache clean v1_0_0`' should not contain underscores", + "markdown": "Function name ```android build cache clean v1_0_0``` should not contain underscores" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 22, + "startColumn": 9, + "charOffset": 750, + "charLength": 34, + "snippet": { + "text": "`android build cache clean v1_0_0`" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 20, + "startColumn": 1, + "charOffset": 731, + "charLength": 162, + "snippet": { + "text": "\n @Test\n fun `android build cache clean v1_0_0`() {\n gradleTestKitTest(\"gradle-features/android build cache clean v1_0_0\") {\n beforeTest()" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "8327ae2db52cde46095b2f4b2cc804ffa414b0f4f412633a979e1f78bdc56527" + }, + "properties": { + "ideaSeverity": "WEAK WARNING" + } + }, + { + "ruleId": "FunctionName", + "kind": "fail", + "level": "note", + "message": { + "text": "Function name '`project isolation clean v1_0_0`' should not contain underscores", + "markdown": "Function name ```project isolation clean v1_0_0``` should not contain underscores" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 46, + "startColumn": 9, + "charOffset": 1405, + "charLength": 32, + "snippet": { + "text": "`project isolation clean v1_0_0`" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 44, + "startColumn": 1, + "charOffset": 1386, + "charLength": 154, + "snippet": { + "text": "\n @Test\n fun `project isolation clean v1_0_0`() {\n gradleTestKitTest(\"gradle-features/project isolation clean v1_0_0\") { beforeTest() }\n }" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "df6ec63578875d75856cd4210f672adfa08bc609596fab2f14eadefbded72b85" + }, + "properties": { + "ideaSeverity": "WEAK WARNING" + } + }, + { + "ruleId": "FunctionName", + "kind": "fail", + "level": "note", + "message": { + "text": "Function name '`build cache clean v1_0_0`' should not contain underscores", + "markdown": "Function name ```build cache clean v1_0_0``` should not contain underscores" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 30, + "startColumn": 9, + "charOffset": 958, + "charLength": 26, + "snippet": { + "text": "`build cache clean v1_0_0`" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 28, + "startColumn": 1, + "charOffset": 939, + "charLength": 146, + "snippet": { + "text": "\n @Test\n fun `build cache clean v1_0_0`() {\n gradleTestKitTest(\"gradle-features/build cache clean v1_0_0\") {\n beforeTest()" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "82568917e459a44f20e0f387b5f9fe1581dbbb2719b9f2b71f66613660aa1b81" + }, + "properties": { + "ideaSeverity": "WEAK WARNING" + } + }, + { + "ruleId": "FunctionName", + "kind": "fail", + "level": "note", + "message": { + "text": "Function name '`android configuration cache clean v1_0_0`' should not contain underscores", + "markdown": "Function name ```android configuration cache clean v1_0_0``` should not contain underscores" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/GradleFeaturesTest.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 14, + "startColumn": 9, + "charOffset": 479, + "charLength": 42, + "snippet": { + "text": "`android configuration cache clean v1_0_0`" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 12, + "startColumn": 1, + "charOffset": 460, + "charLength": 178, + "snippet": { + "text": "\n @Test\n fun `android configuration cache clean v1_0_0`() {\n gradleTestKitTest(\"gradle-features/android configuration cache clean v1_0_0\") {\n beforeTest()" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "0e2be8cf3e97477aa05ebfa6a780bb372e89b512a6769b4fb12f1d0dc4cbaeac" + }, + "properties": { + "ideaSeverity": "WEAK WARNING" + } + }, + { + "ruleId": "FunctionName", + "kind": "fail", + "level": "note", + "message": { + "text": "Function name '`no clean createSemverTag should fail`' may contain only letters and digits", + "markdown": "Function name ```no clean createSemverTag should fail``` may contain only letters and digits" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/VersionBuildDirTest.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 73, + "startColumn": 9, + "charOffset": 2567, + "charLength": 38, + "snippet": { + "text": "`no clean createSemverTag should fail`" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 71, + "startColumn": 1, + "charOffset": 2548, + "charLength": 229, + "snippet": { + "text": "\n @Test\n fun `no clean createSemverTag should fail`() {\n gradleTestKitTest(\"version-build-dir/no-clean-with-no-tag-current-commit (dirty)\") {\n projectDir.generateInitialCommitAddVersionTagAndAddNewCommit()" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "a41a8aa745c5d175c97ac48939aaa36d3be4e4aa5aa5c5ada921e5a189047cdc" + }, + "properties": { + "ideaSeverity": "WEAK WARNING" + } + }, + { + "ruleId": "FunctionName", + "kind": "fail", + "level": "note", + "message": { + "text": "Function name '`clean v1_0_0`' should not contain underscores", + "markdown": "Function name ```clean v1_0_0``` should not contain underscores" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/VersionBuildDirTest.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 12, + "startColumn": 9, + "charOffset": 423, + "charLength": 14, + "snippet": { + "text": "`clean v1_0_0`" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 10, + "startColumn": 1, + "charOffset": 404, + "charLength": 174, + "snippet": { + "text": "\n @Test\n fun `clean v1_0_0`() {\n gradleTestKitTest(\"version-build-dir/clean v1_0_0\") {\n projectDir.generateInitialCommitAddVersionTagAndAddNewCommit()" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "d9d1ef87dd02ac6c5d73f53110161872083be73b4eba7a6b3db0cfca07be63bf" + }, + "properties": { + "ideaSeverity": "WEAK WARNING" + } + }, + { + "ruleId": "FunctionName", + "kind": "fail", + "level": "note", + "message": { + "text": "Function name '`no clean without tag in current commit - dirty`' may contain only letters and digits", + "markdown": "Function name ```no clean without tag in current commit - dirty``` may contain only letters and digits" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/VersionBuildDirTest.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 49, + "startColumn": 9, + "charOffset": 1677, + "charLength": 48, + "snippet": { + "text": "`no clean without tag in current commit - dirty`" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 47, + "startColumn": 1, + "charOffset": 1658, + "charLength": 239, + "snippet": { + "text": "\n @Test\n fun `no clean without tag in current commit - dirty`() {\n gradleTestKitTest(\"version-build-dir/no-clean-with-no-tag-current-commit (dirty)\") {\n projectDir.generateInitialCommitAddVersionTagAndAddNewCommit()" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "79de7de4bb0981922e90ee7874dda38269dad956a0d1224815fae88f1b3334fa" + }, + "properties": { + "ideaSeverity": "WEAK WARNING" + } + }, + { + "ruleId": "FunctionName", + "kind": "fail", + "level": "note", + "message": { + "text": "Function name '`clean without tag in current commit - hash`' may contain only letters and digits", + "markdown": "Function name ```clean without tag in current commit - hash``` may contain only letters and digits" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/VersionBuildDirTest.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 38, + "startColumn": 9, + "charOffset": 1312, + "charLength": 44, + "snippet": { + "text": "`clean without tag in current commit - hash`" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 36, + "startColumn": 1, + "charOffset": 1293, + "charLength": 231, + "snippet": { + "text": "\n @Test\n fun `clean without tag in current commit - hash`() {\n gradleTestKitTest(\"version-build-dir/clean-with-no-tag-current-commit (hash)\") {\n projectDir.generateInitialCommitAddVersionTagAndAddNewCommit()" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "1909860cd0e4d050df0797549a601473034f27adc244d83c7e525ab1a7921b38" + }, + "properties": { + "ideaSeverity": "WEAK WARNING" + } + }, + { + "ruleId": "FunctionName", + "kind": "fail", + "level": "note", + "message": { + "text": "Function name '`clean v1_0_0 configuration phase`' should not contain underscores", + "markdown": "Function name ```clean v1_0_0 configuration phase``` should not contain underscores" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/testFunctional/kotlin/com/javiersc/semver/project/gradle/plugin/VersionBuildDirTest.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 24, + "startColumn": 9, + "charOffset": 817, + "charLength": 34, + "snippet": { + "text": "`clean v1_0_0 configuration phase`" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 22, + "startColumn": 1, + "charOffset": 798, + "charLength": 214, + "snippet": { + "text": "\n @Test\n fun `clean v1_0_0 configuration phase`() {\n gradleTestKitTest(\"version-build-dir/clean v1_0_0 configuration phase\") {\n projectDir.generateInitialCommitAddVersionTagAndAddNewCommit()" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "d5a1ef3c0728f50113647a9c6d4c9b78bdfb3cee87812d138562b869ef597974" + }, + "properties": { + "ideaSeverity": "WEAK WARNING" + } + }, + { + "ruleId": "MemberVisibilityCanBePrivate", + "kind": "fail", + "level": "note", + "message": { + "text": "Property 'commitsInCurrentBranchRevCommit' could be private", + "markdown": "Property 'commitsInCurrentBranchRevCommit' could be private" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 59, + "startColumn": 5, + "charOffset": 2007, + "charLength": 8, + "snippet": { + "text": "internal" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 57, + "startColumn": 1, + "charOffset": 1996, + "charLength": 157, + "snippet": { + "text": " }\n\n internal val commitsInCurrentBranchRevCommit: List by lazy {\n git.log().setMaxCount(maxCount?.get() ?: -1).call().toList()\n }" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "2f27d2e7bebcd8f5cc69f90f0fdbfe22af393d951753f9f26a38abe436fd7790" + }, + "properties": { + "ideaSeverity": "WEAK WARNING" + } + }, + { + "ruleId": "MemberVisibilityCanBePrivate", + "kind": "fail", + "level": "note", + "message": { + "text": "Property 'tagsInRepoRef' could be private", + "markdown": "Property 'tagsInRepoRef' could be private" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 62, + "startColumn": 5, + "charOffset": 2158, + "charLength": 8, + "snippet": { + "text": "internal" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 60, + "startColumn": 1, + "charOffset": 2079, + "charLength": 218, + "snippet": { + "text": " git.log().setMaxCount(maxCount?.get() ?: -1).call().toList()\n }\n internal val tagsInRepoRef: List by lazy { git.tagList().call() }\n\n internal val commitsInCurrentBranchHash: List by lazy {" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "0a82bf4f0ba0a2ece7081305605071db33d5df1f75599962778ae1f23056a0e9" + }, + "properties": { + "ideaSeverity": "WEAK WARNING" + } + }, + { + "ruleId": "MemberVisibilityCanBePrivate", + "kind": "fail", + "level": "note", + "message": { + "text": "Function 'lastVersionTagInCurrentBranch' could be private", + "markdown": "Function 'lastVersionTagInCurrentBranch' could be private" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 173, + "startColumn": 5, + "charOffset": 6583, + "charLength": 8, + "snippet": { + "text": "internal" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 171, + "startColumn": 1, + "charOffset": 6572, + "charLength": 176, + "snippet": { + "text": " }\n\n internal fun lastVersionTagInCurrentBranch(tagPrefix: String): GitRef.Tag? =\n versionTagsInCurrentBranchSortedByTimelineOrSemverOrder(tagPrefix).lastOrNull()\n" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "e5d6e45ddadeda88e6565d7e248cd92acbc3cf6834a99076730ae15537ac67cd" + }, + "properties": { + "ideaSeverity": "WEAK WARNING" + } + }, + { + "ruleId": "MemberVisibilityCanBePrivate", + "kind": "fail", + "level": "note", + "message": { + "text": "Function 'versionTagsSortedBySemver' could be private", + "markdown": "Function 'versionTagsSortedBySemver' could be private" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 157, + "startColumn": 5, + "charOffset": 5956, + "charLength": 8, + "snippet": { + "text": "internal" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 155, + "startColumn": 1, + "charOffset": 5941, + "charLength": 227, + "snippet": { + "text": " }\n\n internal fun versionTagsSortedBySemver(tagPrefix: String): List =\n versionTagsInCurrentBranch(tagPrefix).sortedBy { tag ->\n Version.safe(tag.name.removePrefix(tagPrefix)).getOrNull()" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "da0c2a24ad6ef36ea84eb0b69c90e4c00b1029bedae89b2150053b87002c824f" + }, + "properties": { + "ideaSeverity": "WEAK WARNING" + } + }, + { + "ruleId": "MemberVisibilityCanBePrivate", + "kind": "fail", + "level": "note", + "message": { + "text": "Function 'versionTagsInCurrentBranchSortedByTimelineOrSemverOrder' could be private", + "markdown": "Function 'versionTagsInCurrentBranchSortedByTimelineOrSemverOrder' could be private" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 162, + "startColumn": 5, + "charOffset": 6184, + "charLength": 8, + "snippet": { + "text": "internal" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 160, + "startColumn": 1, + "charOffset": 6169, + "charLength": 136, + "snippet": { + "text": " }\n\n internal fun versionTagsInCurrentBranchSortedByTimelineOrSemverOrder(\n tagPrefix: String\n ): List {" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "41956dc9f8619b0c5878589a69932efc86c69cffcc7512b4a10c93fffa6b5fda" + }, + "properties": { + "ideaSeverity": "WEAK WARNING" + } + }, + { + "ruleId": "MemberVisibilityCanBePrivate", + "kind": "fail", + "level": "note", + "message": { + "text": "Function 'tagsInCurrentCommit' could be private", + "markdown": "Function 'tagsInCurrentCommit' could be private" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 137, + "startColumn": 5, + "charOffset": 5063, + "charLength": 8, + "snippet": { + "text": "internal" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 135, + "startColumn": 1, + "charOffset": 5044, + "charLength": 148, + "snippet": { + "text": " }\n\n internal fun tagsInCurrentCommit(hash: String): List =\n tagsInCurrentBranch.filter { it.commit.hash == hash }\n" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "002e1b494705c1bccf90132a9bbba16edf369fa8f6082b000f00b0eaf350da69" + }, + "properties": { + "ideaSeverity": "WEAK WARNING" + } + }, + { + "ruleId": "MemberVisibilityCanBePrivate", + "kind": "fail", + "level": "note", + "message": { + "text": "Property 'tagName' could be private", + "markdown": "Property 'tagName' could be private" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 115, + "startColumn": 5, + "charOffset": 4223, + "charLength": 8, + "snippet": { + "text": "internal" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 113, + "startColumn": 1, + "charOffset": 4161, + "charLength": 145, + "snippet": { + "text": " lastVersionTagInCurrentBranch(tagPrefix)?.commit\n\n internal val Ref.tagName: String\n get() = name.substringAfter(\"refs/tags/\")\n" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "38bfc258ff0da49a105dd62c842a4b716ff9fe1c2cb2ae3e51d691091457afec" + }, + "properties": { + "ideaSeverity": "WEAK WARNING" + } + }, + { + "ruleId": "MemberVisibilityCanBePrivate", + "kind": "fail", + "level": "note", + "message": { + "text": "Function 'commitHash' could be private", + "markdown": "Function 'commitHash' could be private" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 107, + "startColumn": 5, + "charOffset": 3882, + "charLength": 8, + "snippet": { + "text": "internal" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 105, + "startColumn": 1, + "charOffset": 3871, + "charLength": 138, + "snippet": { + "text": " }\n\n internal fun commitHash(ref: Ref): String = commitHash(ref.objectId)\n\n internal fun commitHash(objectId: ObjectId): String =" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "af463b24da18b1515df7fea9e254fc809397792bd23ec600c51187bf81078249" + }, + "properties": { + "ideaSeverity": "WEAK WARNING" + } + }, + { + "ruleId": "MemberVisibilityCanBePrivate", + "kind": "fail", + "level": "note", + "message": { + "text": "Property 'commitsInCurrentBranchHash' could be private", + "markdown": "Property 'commitsInCurrentBranchHash' could be private" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 64, + "startColumn": 5, + "charOffset": 2234, + "charLength": 8, + "snippet": { + "text": "internal" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 62, + "startColumn": 1, + "charOffset": 2154, + "charLength": 213, + "snippet": { + "text": " internal val tagsInRepoRef: List by lazy { git.tagList().call() }\n\n internal val commitsInCurrentBranchHash: List by lazy {\n commitsInCurrentBranchRevCommit.map(RevCommit::getName)\n }" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "5166832e29f6e2273217d6acbb0a422050875cace9d13713687707f44a3b80a1" + }, + "properties": { + "ideaSeverity": "WEAK WARNING" + } + }, + { + "ruleId": "MemberVisibilityCanBePrivate", + "kind": "fail", + "level": "note", + "message": { + "text": "Property 'gitFiles' could be private", + "markdown": "Property 'gitFiles' could be private" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 40, + "startColumn": 5, + "charOffset": 1399, + "charLength": 8, + "snippet": { + "text": "internal" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 38, + "startColumn": 1, + "charOffset": 1388, + "charLength": 129, + "snippet": { + "text": " }\n\n internal val gitFiles: List = git.repository.directory.walkTopDown().toList()\n\n internal val isClean: Boolean" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "28fbc04f7cecea83d302ce752951e8e9d5a2e7e328cff48fc69459e7fc2ef976" + }, + "properties": { + "ideaSeverity": "WEAK WARNING" + } + }, + { + "ruleId": "MemberVisibilityCanBePrivate", + "kind": "fail", + "level": "note", + "message": { + "text": "Property 'tagsInCurrentBranch' could be private", + "markdown": "Property 'tagsInCurrentBranch' could be private" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 121, + "startColumn": 5, + "charOffset": 4457, + "charLength": 8, + "snippet": { + "text": "internal" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 119, + "startColumn": 1, + "charOffset": 4358, + "charLength": 213, + "snippet": { + "text": " get() = tagsInRepoRef.filter { ref -> commitHash(ref) in commitsInCurrentBranchHash }\n\n internal val tagsInCurrentBranch: List\n get() =\n tagsInCurrentBranchRef.map { ref ->" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "6ba52159f77535079b3802fecaa02e09ea059c11a069344cb591d469b04ba6db" + }, + "properties": { + "ideaSeverity": "WEAK WARNING" + } + }, + { + "ruleId": "MemberVisibilityCanBePrivate", + "kind": "fail", + "level": "note", + "message": { + "text": "Property 'tagsInCurrentBranchRef' could be private", + "markdown": "Property 'tagsInCurrentBranchRef' could be private" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 118, + "startColumn": 5, + "charOffset": 4311, + "charLength": 8, + "snippet": { + "text": "internal" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 116, + "startColumn": 1, + "charOffset": 4256, + "charLength": 196, + "snippet": { + "text": " get() = name.substringAfter(\"refs/tags/\")\n\n internal val tagsInCurrentBranchRef: List\n get() = tagsInRepoRef.filter { ref -> commitHash(ref) in commitsInCurrentBranchHash }\n" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "d1d4d777d429900cced7975b8a6c28d6748cf57da42690af9dd410e292e07ac1" + }, + "properties": { + "ideaSeverity": "WEAK WARNING" + } + }, + { + "ruleId": "MemberVisibilityCanBePrivate", + "kind": "fail", + "level": "note", + "message": { + "text": "Function 'commitHash' could be private", + "markdown": "Function 'commitHash' could be private" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 109, + "startColumn": 5, + "charOffset": 3956, + "charLength": 8, + "snippet": { + "text": "internal" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 107, + "startColumn": 1, + "charOffset": 3878, + "charLength": 195, + "snippet": { + "text": " internal fun commitHash(ref: Ref): String = commitHash(ref.objectId)\n\n internal fun commitHash(objectId: ObjectId): String =\n git.repository.parseCommit(objectId).toObjectId().name\n" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "14647184a4fc51f6ad4d773ed436829107de2c453abac739c8ac99da23527170" + }, + "properties": { + "ideaSeverity": "WEAK WARNING" + } + }, + { + "ruleId": "MemberVisibilityCanBePrivate", + "kind": "fail", + "level": "note", + "message": { + "text": "Function 'versionTagsInCurrentCommit' could be private", + "markdown": "Function 'versionTagsInCurrentCommit' could be private" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 140, + "startColumn": 5, + "charOffset": 5197, + "charLength": 8, + "snippet": { + "text": "internal" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 138, + "startColumn": 1, + "charOffset": 5130, + "charLength": 255, + "snippet": { + "text": " tagsInCurrentBranch.filter { it.commit.hash == hash }\n\n internal fun versionTagsInCurrentCommit(hash: String, tagPrefix: String): List =\n tagsInCurrentCommit(hash).filter { tag ->\n tag.name.startsWith(tagPrefix) &&" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "a9e4e31e452c8f20a9e04609dfa8fc405d5d50941279ac1dde48804ef1f07e9b" + }, + "properties": { + "ideaSeverity": "WEAK WARNING" + } + }, + { + "ruleId": "MemberVisibilityCanBePrivate", + "kind": "fail", + "level": "note", + "message": { + "text": "Property 'headRevCommit' could be private", + "markdown": "Property 'headRevCommit' could be private" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/internal/git/GitCache.kt", + "uriBaseId": "SRCROOT" + }, + "region": { + "startLine": 45, + "startColumn": 5, + "charOffset": 1567, + "charLength": 8, + "snippet": { + "text": "internal" + }, + "sourceLanguage": "kotlin" + }, + "contextRegion": { + "startLine": 43, + "startColumn": 1, + "charOffset": 1518, + "charLength": 186, + "snippet": { + "text": " get() = git.status().call().isClean\n\n internal val headRevCommit: RevCommit by lazy {\n RevWalk(git.repository).parseCommit(git.repository.resolve(Constants.HEAD))\n }" + } + } + }, + "logicalLocations": [ + { + "fullyQualifiedName": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "kind": "module" + } + ] + } + ], + "partialFingerprints": { + "equalIndicator/v1": "ba98339f74b645af424460e717a2372ed1a7708e0489aaf80495c86487787541" + }, + "properties": { + "ideaSeverity": "WEAK WARNING" + } + } + ], + "configProfile": "absent", + "deviceId": "200820300000000-3932-f0c5-1d0e-714296d476a3" + } + } + ] +} \ No newline at end of file diff --git a/reports-generated/code-quality/results/qodana.yaml b/reports-generated/code-quality/results/qodana.yaml new file mode 100644 index 00000000..bc36940e --- /dev/null +++ b/reports-generated/code-quality/results/qodana.yaml @@ -0,0 +1,2 @@ +version: "1.0" +linter: jetbrains/qodana-jvm-community:2022.3 diff --git a/reports-generated/code-quality/results/result-allProblems.json b/reports-generated/code-quality/results/result-allProblems.json new file mode 100644 index 00000000..b0f2910f --- /dev/null +++ b/reports-generated/code-quality/results/result-allProblems.json @@ -0,0 +1,621 @@ +{"version":"3","listProblem":[{ + "tool": "Code Inspection", + "category": "Java interop issues", + "type": "Package name does not match containing directory", + "tags": [ + "kotlin" + ], + "severity": "Critical", + "comment": "Package directive does not match the file location", + "detailsInfo": "Reports `package` directives that do not match the location of the file.\n\n\nWhen applying fixes, \"Move refactoring\" defaults are used to update usages of changed declarations, namely:\n\n* \"Search in comments and strings\"\n* \"Search for text occurrences\"", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/testFunctional/resources/gradle-features/build cache clean v1_0_0/src/main/kotlin/Main.kt", + "language": "kotlin", + "line": 1, + "offset": 1, + "length": 24, + "code": { + "startLine": 1, + "length": 24, + "offset": 0, + "surroundingCode": "package com.example.main\n\nfun main() {" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "inspectionName": "PackageDirectoryMismatch" + }, + "hash": "f344ff258d50cd3f4e67f91f677cbda876724b51af8674919cff626a7b5e031c" +},{ + "tool": "Code Inspection", + "category": "Java interop issues", + "type": "Package name does not match containing directory", + "tags": [ + "kotlin" + ], + "severity": "Critical", + "comment": "Package directive does not match the file location", + "detailsInfo": "Reports `package` directives that do not match the location of the file.\n\n\nWhen applying fixes, \"Move refactoring\" defaults are used to update usages of changed declarations, namely:\n\n* \"Search in comments and strings\"\n* \"Search for text occurrences\"", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/testFunctional/resources/gradle-features/configuration cache clean v1_0_0/src/main/kotlin/Main.kt", + "language": "kotlin", + "line": 1, + "offset": 1, + "length": 24, + "code": { + "startLine": 1, + "length": 24, + "offset": 0, + "surroundingCode": "package com.example.main\n\nfun main() {" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.testFunctional", + "inspectionName": "PackageDirectoryMismatch" + }, + "hash": "527addce8d84abedbb0a4b4a6d4c84f041243e08d3918424f2ff2fa676124aaf" +},{ + "tool": "Code Inspection", + "category": "JVM languages", + "type": "Unstable API Usage", + "tags": [ + "kotlin" + ], + "severity": "High", + "comment": "'getTags()' is marked unstable with @Incubating", + "detailsInfo": "Reports usages of an API marked with one of the annotations as unstable. Such an API may be changed or removed in future versions, breaking the code that uses it.\n\nThe annotations which are used to mark unstable APIs are shown in the list below.\n\nBy default, the inspection ignores usages of unstable APIs\nif their declarations are located in sources of the same project. In such cases it'll be possible to update the usages when you change APIs.\nHowever, it may be inconvenient if the project is big, so one can switch off the **Ignore API declared in this project** option to report\nthe usages of unstable APIs declared in both the project sources and libraries.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/build.gradle.kts", + "language": "kotlin", + "line": 27, + "offset": 37, + "length": 4, + "code": { + "startLine": 25, + "length": 4, + "offset": 198, + "surroundingCode": " implementationClass =\n \"com.javiersc.semver.project.gradle.plugin.SemverProjectPlugin\"\n tags.set(\n listOf(\n \"semver\"," + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin", + "inspectionName": "UnstableApiUsage" + }, + "hash": "2ad8fbba5ec089697d2aa0fe68466214a2924a0349508ffa3a9808032c75f39b" +},{ + "tool": "Code Inspection", + "category": "JVM languages", + "type": "Unstable API Usage", + "tags": [ + "kotlin" + ], + "severity": "High", + "comment": "'getTags()' is marked unstable with @Incubating", + "detailsInfo": "Reports usages of an API marked with one of the annotations as unstable. Such an API may be changed or removed in future versions, breaking the code that uses it.\n\nThe annotations which are used to mark unstable APIs are shown in the list below.\n\nBy default, the inspection ignores usages of unstable APIs\nif their declarations are located in sources of the same project. In such cases it'll be possible to update the usages when you change APIs.\nHowever, it may be inconvenient if the project is big, so one can switch off the **Ignore API declared in this project** option to report\nthe usages of unstable APIs declared in both the project sources and libraries.", + "sources": [ + { + "type": "file", + "path": "semver-gradle-plugin/build.gradle.kts", + "language": "kotlin", + "line": 23, + "offset": 37, + "length": 4, + "code": { + "startLine": 21, + "length": 4, + "offset": 183, + "surroundingCode": " implementationClass =\n \"com.javiersc.semver.gradle.plugin.SemverPlugin\"\n tags.set(\n listOf(\n \"semver\"," + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-gradle-plugin", + "inspectionName": "UnstableApiUsage" + }, + "hash": "b2e2e7e0229ed3200d668e1c17e002d9144ae2108b4919488166805f28f56ed6" +},{ + "tool": "Code Inspection", + "category": "JVM languages", + "type": "Unstable API Usage", + "tags": [ + "kotlin" + ], + "severity": "High", + "comment": "'org.gradle.api.provider.ValueSource' is marked unstable with @Incubating", + "detailsInfo": "Reports usages of an API marked with one of the annotations as unstable. Such an API may be changed or removed in future versions, breaking the code that uses it.\n\nThe annotations which are used to mark unstable APIs are shown in the list below.\n\nBy default, the inspection ignores usages of unstable APIs\nif their declarations are located in sources of the same project. In such cases it'll be possible to update the usages when you change APIs.\nHowever, it may be inconvenient if the project is big, so one can switch off the **Ignore API declared in this project** option to report\nthe usages of unstable APIs declared in both the project sources and libraries.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "language": "kotlin", + "line": 25, + "offset": 46, + "length": 11, + "code": { + "startLine": 23, + "length": 11, + "offset": 78, + "surroundingCode": "import org.gradle.kotlin.dsl.of\n\ninternal abstract class VersionValueSource : ValueSource {\n\n override fun obtain(): String =" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "UnstableApiUsage" + }, + "hash": "7cbfbefc9f1a8d18641eb9b55cabc81f4315809cdc202810e4543b1e7fae6f5c" +},{ + "tool": "Code Inspection", + "category": "JVM languages", + "type": "Unstable API Usage", + "tags": [ + "kotlin" + ], + "severity": "High", + "comment": "'of(org.gradle.api.provider.ProviderFactory, kotlin.reflect.KClass>, org.gradle.api.Action>)' is marked unstable with @Incubating", + "detailsInfo": "Reports usages of an API marked with one of the annotations as unstable. Such an API may be changed or removed in future versions, breaking the code that uses it.\n\nThe annotations which are used to mark unstable APIs are shown in the list below.\n\nBy default, the inspection ignores usages of unstable APIs\nif their declarations are located in sources of the same project. In such cases it'll be possible to update the usages when you change APIs.\nHowever, it may be inconvenient if the project is big, so one can switch off the **Ignore API declared in this project** option to report\nthe usages of unstable APIs declared in both the project sources and libraries.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "language": "kotlin", + "line": 83, + "offset": 31, + "length": 2, + "code": { + "startLine": 81, + "length": 2, + "offset": 90, + "surroundingCode": "\n fun register(project: Project): Provider =\n project.providers.of(VersionValueSource::class) { valueSourceSpec ->\n val gitDir = project.provider { project.semverExtension.gitDir.get().asFile }\n valueSourceSpec.parameters.gitDir.set(gitDir)" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "UnstableApiUsage" + }, + "hash": "1b04e2152ae793d0e28c38218dbed8589ff599719f8f2d532e637fca7fd4e188" +},{ + "tool": "Code Inspection", + "category": "JVM languages", + "type": "Unstable API Usage", + "tags": [ + "kotlin" + ], + "severity": "High", + "comment": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSourceSpec' marked with @Incubating", + "detailsInfo": "Reports usages of an API marked with one of the annotations as unstable. Such an API may be changed or removed in future versions, breaking the code that uses it.\n\nThe annotations which are used to mark unstable APIs are shown in the list below.\n\nBy default, the inspection ignores usages of unstable APIs\nif their declarations are located in sources of the same project. In such cases it'll be possible to update the usages when you change APIs.\nHowever, it may be inconvenient if the project is big, so one can switch off the **Ignore API declared in this project** option to report\nthe usages of unstable APIs declared in both the project sources and libraries.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "language": "kotlin", + "line": 85, + "offset": 33, + "length": 10, + "code": { + "startLine": 83, + "length": 10, + "offset": 207, + "surroundingCode": " project.providers.of(VersionValueSource::class) { valueSourceSpec ->\n val gitDir = project.provider { project.semverExtension.gitDir.get().asFile }\n valueSourceSpec.parameters.gitDir.set(gitDir)\n val commitsMaxCount: Int =\n project.commitsMaxCount.orNull ?: project.semverExtension.commitsMaxCount.get()" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "UnstableApiUsage" + }, + "hash": "5fed42982ab0153f22638fd0d6fa1c3f6fa26e9e980877c9b7610cc17c3bed23" +},{ + "tool": "Code Inspection", + "category": "JVM languages", + "type": "Unstable API Usage", + "tags": [ + "kotlin" + ], + "severity": "High", + "comment": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSourceSpec' marked with @Incubating", + "detailsInfo": "Reports usages of an API marked with one of the annotations as unstable. Such an API may be changed or removed in future versions, breaking the code that uses it.\n\nThe annotations which are used to mark unstable APIs are shown in the list below.\n\nBy default, the inspection ignores usages of unstable APIs\nif their declarations are located in sources of the same project. In such cases it'll be possible to update the usages when you change APIs.\nHowever, it may be inconvenient if the project is big, so one can switch off the **Ignore API declared in this project** option to report\nthe usages of unstable APIs declared in both the project sources and libraries.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "language": "kotlin", + "line": 88, + "offset": 33, + "length": 10, + "code": { + "startLine": 86, + "length": 10, + "offset": 175, + "surroundingCode": " val commitsMaxCount: Int =\n project.commitsMaxCount.orNull ?: project.semverExtension.commitsMaxCount.get()\n valueSourceSpec.parameters.commitsMaxCount.set(commitsMaxCount)\n valueSourceSpec.parameters.projectTagPrefix.set(project.projectTagPrefix.get())\n valueSourceSpec.parameters.tagPrefixProperty.set(project.tagPrefixProperty.get())" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "UnstableApiUsage" + }, + "hash": "d1cb5959590c4a42d3ac401e25db18c6fe27ceea162bd81e91f3bc108bb95a3d" +},{ + "tool": "Code Inspection", + "category": "JVM languages", + "type": "Unstable API Usage", + "tags": [ + "kotlin" + ], + "severity": "High", + "comment": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSourceSpec' marked with @Incubating", + "detailsInfo": "Reports usages of an API marked with one of the annotations as unstable. Such an API may be changed or removed in future versions, breaking the code that uses it.\n\nThe annotations which are used to mark unstable APIs are shown in the list below.\n\nBy default, the inspection ignores usages of unstable APIs\nif their declarations are located in sources of the same project. In such cases it'll be possible to update the usages when you change APIs.\nHowever, it may be inconvenient if the project is big, so one can switch off the **Ignore API declared in this project** option to report\nthe usages of unstable APIs declared in both the project sources and libraries.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "language": "kotlin", + "line": 89, + "offset": 33, + "length": 10, + "code": { + "startLine": 87, + "length": 10, + "offset": 212, + "surroundingCode": " project.commitsMaxCount.orNull ?: project.semverExtension.commitsMaxCount.get()\n valueSourceSpec.parameters.commitsMaxCount.set(commitsMaxCount)\n valueSourceSpec.parameters.projectTagPrefix.set(project.projectTagPrefix.get())\n valueSourceSpec.parameters.tagPrefixProperty.set(project.tagPrefixProperty.get())\n valueSourceSpec.parameters.stageProperty.set(project.stageProperty.orNull)" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "UnstableApiUsage" + }, + "hash": "7d445d0f8db76398019ca9dab58642cabe506f986dd9dc7c6d011132f4d62c41" +},{ + "tool": "Code Inspection", + "category": "JVM languages", + "type": "Unstable API Usage", + "tags": [ + "kotlin" + ], + "severity": "High", + "comment": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSourceSpec' marked with @Incubating", + "detailsInfo": "Reports usages of an API marked with one of the annotations as unstable. Such an API may be changed or removed in future versions, breaking the code that uses it.\n\nThe annotations which are used to mark unstable APIs are shown in the list below.\n\nBy default, the inspection ignores usages of unstable APIs\nif their declarations are located in sources of the same project. In such cases it'll be possible to update the usages when you change APIs.\nHowever, it may be inconvenient if the project is big, so one can switch off the **Ignore API declared in this project** option to report\nthe usages of unstable APIs declared in both the project sources and libraries.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "language": "kotlin", + "line": 90, + "offset": 33, + "length": 10, + "code": { + "startLine": 88, + "length": 10, + "offset": 208, + "surroundingCode": " valueSourceSpec.parameters.commitsMaxCount.set(commitsMaxCount)\n valueSourceSpec.parameters.projectTagPrefix.set(project.projectTagPrefix.get())\n valueSourceSpec.parameters.tagPrefixProperty.set(project.tagPrefixProperty.get())\n valueSourceSpec.parameters.stageProperty.set(project.stageProperty.orNull)\n valueSourceSpec.parameters.scopeProperty.set(project.scopeProperty.orNull)" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "UnstableApiUsage" + }, + "hash": "9c77ee8026a95af935332ba41303cadbcc8c2da79502c31627d74313f5b5a28a" +},{ + "tool": "Code Inspection", + "category": "JVM languages", + "type": "Unstable API Usage", + "tags": [ + "kotlin" + ], + "severity": "High", + "comment": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSourceSpec' marked with @Incubating", + "detailsInfo": "Reports usages of an API marked with one of the annotations as unstable. Such an API may be changed or removed in future versions, breaking the code that uses it.\n\nThe annotations which are used to mark unstable APIs are shown in the list below.\n\nBy default, the inspection ignores usages of unstable APIs\nif their declarations are located in sources of the same project. In such cases it'll be possible to update the usages when you change APIs.\nHowever, it may be inconvenient if the project is big, so one can switch off the **Ignore API declared in this project** option to report\nthe usages of unstable APIs declared in both the project sources and libraries.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "language": "kotlin", + "line": 91, + "offset": 33, + "length": 10, + "code": { + "startLine": 89, + "length": 10, + "offset": 226, + "surroundingCode": " valueSourceSpec.parameters.projectTagPrefix.set(project.projectTagPrefix.get())\n valueSourceSpec.parameters.tagPrefixProperty.set(project.tagPrefixProperty.get())\n valueSourceSpec.parameters.stageProperty.set(project.stageProperty.orNull)\n valueSourceSpec.parameters.scopeProperty.set(project.scopeProperty.orNull)\n valueSourceSpec.parameters.creatingSemverTag.set(project.isCreatingSemverTag)" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "UnstableApiUsage" + }, + "hash": "eb9db4470e9ddad4429c94b50f32cf52403b70c19ba49b5f6b6b41de05fb3dfd" +},{ + "tool": "Code Inspection", + "category": "JVM languages", + "type": "Unstable API Usage", + "tags": [ + "kotlin" + ], + "severity": "High", + "comment": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSourceSpec' marked with @Incubating", + "detailsInfo": "Reports usages of an API marked with one of the annotations as unstable. Such an API may be changed or removed in future versions, breaking the code that uses it.\n\nThe annotations which are used to mark unstable APIs are shown in the list below.\n\nBy default, the inspection ignores usages of unstable APIs\nif their declarations are located in sources of the same project. In such cases it'll be possible to update the usages when you change APIs.\nHowever, it may be inconvenient if the project is big, so one can switch off the **Ignore API declared in this project** option to report\nthe usages of unstable APIs declared in both the project sources and libraries.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "language": "kotlin", + "line": 92, + "offset": 33, + "length": 10, + "code": { + "startLine": 90, + "length": 10, + "offset": 221, + "surroundingCode": " valueSourceSpec.parameters.tagPrefixProperty.set(project.tagPrefixProperty.get())\n valueSourceSpec.parameters.stageProperty.set(project.stageProperty.orNull)\n valueSourceSpec.parameters.scopeProperty.set(project.scopeProperty.orNull)\n valueSourceSpec.parameters.creatingSemverTag.set(project.isCreatingSemverTag)\n valueSourceSpec.parameters.checkClean.set(project.checkCleanProperty.get())" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "UnstableApiUsage" + }, + "hash": "91cd34e2f8309ceba1698d6efd658918f8f2d53c612ca3ec29883bb2f512d023" +},{ + "tool": "Code Inspection", + "category": "JVM languages", + "type": "Unstable API Usage", + "tags": [ + "kotlin" + ], + "severity": "High", + "comment": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSourceSpec' marked with @Incubating", + "detailsInfo": "Reports usages of an API marked with one of the annotations as unstable. Such an API may be changed or removed in future versions, breaking the code that uses it.\n\nThe annotations which are used to mark unstable APIs are shown in the list below.\n\nBy default, the inspection ignores usages of unstable APIs\nif their declarations are located in sources of the same project. In such cases it'll be possible to update the usages when you change APIs.\nHowever, it may be inconvenient if the project is big, so one can switch off the **Ignore API declared in this project** option to report\nthe usages of unstable APIs declared in both the project sources and libraries.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "language": "kotlin", + "line": 93, + "offset": 33, + "length": 10, + "code": { + "startLine": 91, + "length": 10, + "offset": 214, + "surroundingCode": " valueSourceSpec.parameters.stageProperty.set(project.stageProperty.orNull)\n valueSourceSpec.parameters.scopeProperty.set(project.scopeProperty.orNull)\n valueSourceSpec.parameters.creatingSemverTag.set(project.isCreatingSemverTag)\n valueSourceSpec.parameters.checkClean.set(project.checkCleanProperty.get())\n }" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "UnstableApiUsage" + }, + "hash": "4c5c10324e02efee6fecb6e00f3300acef282b5596578dfbdf7d5ae565b19786" +},{ + "tool": "Code Inspection", + "category": "JVM languages", + "type": "Unstable API Usage", + "tags": [ + "kotlin" + ], + "severity": "High", + "comment": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSourceSpec' marked with @Incubating", + "detailsInfo": "Reports usages of an API marked with one of the annotations as unstable. Such an API may be changed or removed in future versions, breaking the code that uses it.\n\nThe annotations which are used to mark unstable APIs are shown in the list below.\n\nBy default, the inspection ignores usages of unstable APIs\nif their declarations are located in sources of the same project. In such cases it'll be possible to update the usages when you change APIs.\nHowever, it may be inconvenient if the project is big, so one can switch off the **Ignore API declared in this project** option to report\nthe usages of unstable APIs declared in both the project sources and libraries.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "language": "kotlin", + "line": 94, + "offset": 33, + "length": 10, + "code": { + "startLine": 92, + "length": 10, + "offset": 217, + "surroundingCode": " valueSourceSpec.parameters.scopeProperty.set(project.scopeProperty.orNull)\n valueSourceSpec.parameters.creatingSemverTag.set(project.isCreatingSemverTag)\n valueSourceSpec.parameters.checkClean.set(project.checkCleanProperty.get())\n }\n }" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "UnstableApiUsage" + }, + "hash": "7a21bea99d77c9b855f177c239695feb3e05c4b26d5709ae193d25604576bcef" +},{ + "tool": "Code Inspection", + "category": "JVM languages", + "type": "Unstable API Usage", + "tags": [ + "kotlin" + ], + "severity": "High", + "comment": "'org.gradle.api.provider.ValueSourceParameters' is marked unstable with @Incubating", + "detailsInfo": "Reports usages of an API marked with one of the annotations as unstable. Such an API may be changed or removed in future versions, breaking the code that uses it.\n\nThe annotations which are used to mark unstable APIs are shown in the list below.\n\nBy default, the inspection ignores usages of unstable APIs\nif their declarations are located in sources of the same project. In such cases it'll be possible to update the usages when you change APIs.\nHowever, it may be inconvenient if the project is big, so one can switch off the **Ignore API declared in this project** option to report\nthe usages of unstable APIs declared in both the project sources and libraries.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "language": "kotlin", + "line": 69, + "offset": 33, + "length": 21, + "code": { + "startLine": 67, + "length": 21, + "offset": 43, + "surroundingCode": " }\n\n internal interface Params : ValueSourceParameters {\n val gitDir: Property\n val commitsMaxCount: Property" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "UnstableApiUsage" + }, + "hash": "0e4d7ee17f8f02c2ca3703fc448699edd00c175dc12b087151e944b7059129a0" +},{ + "tool": "Code Inspection", + "category": "JVM languages", + "type": "Unstable API Usage", + "tags": [ + "kotlin" + ], + "severity": "High", + "comment": "Overridden method 'obtain()' is declared in unstable interface 'org.gradle.api.provider.ValueSource' marked with @Incubating", + "detailsInfo": "Reports usages of an API marked with one of the annotations as unstable. Such an API may be changed or removed in future versions, breaking the code that uses it.\n\nThe annotations which are used to mark unstable APIs are shown in the list below.\n\nBy default, the inspection ignores usages of unstable APIs\nif their declarations are located in sources of the same project. In such cases it'll be possible to update the usages when you change APIs.\nHowever, it may be inconvenient if the project is big, so one can switch off the **Ignore API declared in this project** option to report\nthe usages of unstable APIs declared in both the project sources and libraries.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "language": "kotlin", + "line": 27, + "offset": 18, + "length": 6, + "code": { + "startLine": 25, + "length": 6, + "offset": 112, + "surroundingCode": "internal abstract class VersionValueSource : ValueSource {\n\n override fun obtain(): String =\n with(parameters) {\n val isSamePrefix: Boolean = tagPrefixProperty.get() == projectTagPrefix.get()" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "UnstableApiUsage" + }, + "hash": "07449591c18d309473d95e4460263bcb5b0a005a2bc0f053943d4ceaff793ede" +},{ + "tool": "Code Inspection", + "category": "JVM languages", + "type": "Unstable API Usage", + "tags": [ + "kotlin" + ], + "severity": "High", + "comment": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSource' marked with @Incubating", + "detailsInfo": "Reports usages of an API marked with one of the annotations as unstable. Such an API may be changed or removed in future versions, breaking the code that uses it.\n\nThe annotations which are used to mark unstable APIs are shown in the list below.\n\nBy default, the inspection ignores usages of unstable APIs\nif their declarations are located in sources of the same project. In such cases it'll be possible to update the usages when you change APIs.\nHowever, it may be inconvenient if the project is big, so one can switch off the **Ignore API declared in this project** option to report\nthe usages of unstable APIs declared in both the project sources and libraries.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "language": "kotlin", + "line": 28, + "offset": 14, + "length": 10, + "code": { + "startLine": 26, + "length": 10, + "offset": 50, + "surroundingCode": "\n override fun obtain(): String =\n with(parameters) {\n val isSamePrefix: Boolean = tagPrefixProperty.get() == projectTagPrefix.get()\n" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "UnstableApiUsage" + }, + "hash": "032018c9d46926f60ddef95f1915f2871d2b5ce050c5f8349a4dcab3814d974d" +},{ + "tool": "Code Inspection", + "category": "JVM languages", + "type": "Unstable API Usage", + "tags": [ + "kotlin" + ], + "severity": "High", + "comment": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSource' marked with @Incubating", + "detailsInfo": "Reports usages of an API marked with one of the annotations as unstable. Such an API may be changed or removed in future versions, breaking the code that uses it.\n\nThe annotations which are used to mark unstable APIs are shown in the list below.\n\nBy default, the inspection ignores usages of unstable APIs\nif their declarations are located in sources of the same project. In such cases it'll be possible to update the usages when you change APIs.\nHowever, it may be inconvenient if the project is big, so one can switch off the **Ignore API declared in this project** option to report\nthe usages of unstable APIs declared in both the project sources and libraries.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "language": "kotlin", + "line": 33, + "offset": 30, + "length": 10, + "code": { + "startLine": 31, + "length": 10, + "offset": 81, + "surroundingCode": " fun cache() =\n GitCache(\n gitDir = parameters.gitDir.get(),\n maxCount = parameters.commitsMaxCount,\n )" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "UnstableApiUsage" + }, + "hash": "db7c57ff6f3d2272547cf1413ad69fca3d44696555a57e03a20b57647a1b359f" +},{ + "tool": "Code Inspection", + "category": "JVM languages", + "type": "Unstable API Usage", + "tags": [ + "kotlin" + ], + "severity": "High", + "comment": "'getParameters()' is declared in unstable interface 'org.gradle.api.provider.ValueSource' marked with @Incubating", + "detailsInfo": "Reports usages of an API marked with one of the annotations as unstable. Such an API may be changed or removed in future versions, breaking the code that uses it.\n\nThe annotations which are used to mark unstable APIs are shown in the list below.\n\nBy default, the inspection ignores usages of unstable APIs\nif their declarations are located in sources of the same project. In such cases it'll be possible to update the usages when you change APIs.\nHowever, it may be inconvenient if the project is big, so one can switch off the **Ignore API declared in this project** option to report\nthe usages of unstable APIs declared in both the project sources and libraries.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/main/kotlin/com/javiersc/semver/project/gradle/plugin/valuesources/VersionValueSource.kt", + "language": "kotlin", + "line": 34, + "offset": 32, + "length": 10, + "code": { + "startLine": 32, + "length": 10, + "offset": 111, + "surroundingCode": " GitCache(\n gitDir = parameters.gitDir.get(),\n maxCount = parameters.commitsMaxCount,\n )\n" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin.main", + "inspectionName": "UnstableApiUsage" + }, + "hash": "e14e945473d664eb418b501e5ecbe0a11642c34ad76ac764726060d407846da3" +},{ + "tool": "Code Inspection", + "category": "JVM languages", + "type": "Unstable API Usage", + "tags": [ + "kotlin" + ], + "severity": "High", + "comment": "'getTags()' is marked unstable with @Incubating", + "detailsInfo": "Reports usages of an API marked with one of the annotations as unstable. Such an API may be changed or removed in future versions, breaking the code that uses it.\n\nThe annotations which are used to mark unstable APIs are shown in the list below.\n\nBy default, the inspection ignores usages of unstable APIs\nif their declarations are located in sources of the same project. In such cases it'll be possible to update the usages when you change APIs.\nHowever, it may be inconvenient if the project is big, so one can switch off the **Ignore API declared in this project** option to report\nthe usages of unstable APIs declared in both the project sources and libraries.", + "sources": [ + { + "type": "file", + "path": "semver-settings-gradle-plugin/build.gradle.kts", + "language": "kotlin", + "line": 26, + "offset": 37, + "length": 4, + "code": { + "startLine": 24, + "length": 4, + "offset": 200, + "surroundingCode": " implementationClass =\n \"com.javiersc.semver.settings.gradle.plugin.SemverSettingsPlugin\"\n tags.set(\n listOf(\n \"semver\"," + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-settings-gradle-plugin", + "inspectionName": "UnstableApiUsage" + }, + "hash": "96363570368939d75c288cc9644e6eb39691ef3447d54b6c1fda0b3b4b58ab98" +}]} \ No newline at end of file diff --git a/reports-generated/code-quality/results/sanity.json b/reports-generated/code-quality/results/sanity.json new file mode 100644 index 00000000..7188f40f --- /dev/null +++ b/reports-generated/code-quality/results/sanity.json @@ -0,0 +1,125 @@ +{"version":"3","listProblem":[{ + "tool": "Code Inspection", + "category": "General", + "type": "Kotlin annotator", + "tags": [ + "Sanity" + ], + "severity": "Critical", + "comment": "'val Project.libs: LibrariesForLibs' can't be called in this context by implicit receiver. Use the explicit one if necessary", + "detailsInfo": "Allows viewing the problems reported by the Kotlin annotator: compilation problems, references unresolved by the IDE, and so on.", + "sources": [ + { + "type": "file", + "path": "semver-project-gradle-plugin/build.gradle.kts", + "language": "kotlin", + "line": 2, + "offset": 11, + "length": 4, + "code": { + "startLine": 1, + "length": 4, + "offset": 20, + "surroundingCode": "plugins {\n alias(libs.plugins.javiersc.hubdle)\n}\n" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-project-gradle-plugin", + "inspectionName": "KotlinAnnotator" + }, + "hash": "4af512dd10cae837ccd4595376ba2fcee47fea8c7ed06bcd6ebd5df3ae7525fe" +},{ + "tool": "Code Inspection", + "category": "General", + "type": "Kotlin annotator", + "tags": [ + "Sanity" + ], + "severity": "Critical", + "comment": "'val Project.libs: LibrariesForLibs' can't be called in this context by implicit receiver. Use the explicit one if necessary", + "detailsInfo": "Allows viewing the problems reported by the Kotlin annotator: compilation problems, references unresolved by the IDE, and so on.", + "sources": [ + { + "type": "file", + "path": "semver-gradle-plugin/build.gradle.kts", + "language": "kotlin", + "line": 1, + "offset": 17, + "length": 4, + "code": { + "startLine": 1, + "length": 4, + "offset": 16, + "surroundingCode": "plugins { alias(libs.plugins.javiersc.hubdle) }\n\nhubdle {" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-gradle-plugin", + "inspectionName": "KotlinAnnotator" + }, + "hash": "cb043cac0a4dfa7d778c0f9c72e142e094f61ca37bb141a23f6e383e43c9816d" +},{ + "tool": "Code Inspection", + "category": "General", + "type": "Kotlin annotator", + "tags": [ + "Sanity" + ], + "severity": "Critical", + "comment": "'val Project.libs: LibrariesForLibs' can't be called in this context by implicit receiver. Use the explicit one if necessary", + "detailsInfo": "Allows viewing the problems reported by the Kotlin annotator: compilation problems, references unresolved by the IDE, and so on.", + "sources": [ + { + "type": "file", + "path": "build.gradle.kts", + "language": "kotlin", + "line": 2, + "offset": 11, + "length": 4, + "code": { + "startLine": 1, + "length": 4, + "offset": 20, + "surroundingCode": "plugins {\n alias(libs.plugins.javiersc.hubdle)\n}\n" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project", + "inspectionName": "KotlinAnnotator" + }, + "hash": "768f58dc7db158d486d6cdd347641d1f603fd5848a3addd6f429584cf941db65" +},{ + "tool": "Code Inspection", + "category": "General", + "type": "Kotlin annotator", + "tags": [ + "Sanity" + ], + "severity": "Critical", + "comment": "'val Project.libs: LibrariesForLibs' can't be called in this context by implicit receiver. Use the explicit one if necessary", + "detailsInfo": "Allows viewing the problems reported by the Kotlin annotator: compilation problems, references unresolved by the IDE, and so on.", + "sources": [ + { + "type": "file", + "path": "semver-settings-gradle-plugin/build.gradle.kts", + "language": "kotlin", + "line": 2, + "offset": 11, + "length": 4, + "code": { + "startLine": 1, + "length": 4, + "offset": 20, + "surroundingCode": "plugins {\n alias(libs.plugins.javiersc.hubdle)\n}\n" + } + } + ], + "attributes": { + "module": "semver-gradle-plugin-project.semver-settings-gradle-plugin", + "inspectionName": "KotlinAnnotator" + }, + "hash": "9ec13dd2ce1cbb499c0fcfba422ac8a20cc3641b3b593a6ff1d9339fdeeea354" +}]} \ No newline at end of file diff --git a/reports-generated/code-quality/versions/VERSION_ID/TeamCity.css b/reports-generated/code-quality/versions/VERSION_ID/TeamCity.css new file mode 100644 index 00000000..f605204a --- /dev/null +++ b/reports-generated/code-quality/versions/VERSION_ID/TeamCity.css @@ -0,0 +1,131 @@ +/*This is a TeamCity global styles mock*/ + +/*body {*/ +/* background: #fff;*/ +/* margin: 0;*/ +/* line-height: 1.5em;*/ +/* color: #1f2326;*/ +/* text-rendering: optimizeLegibility;*/ +/* text-size-adjust: none;*/ +/*}*/ + +/* Needed for IE10 support */ +[hidden] { + display: none !important; +} + +body { + margin: 0; +} + +body, +input, +select, +button { + font-family: system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, + Cantarell, Droid Sans, Helvetica Neue, Arial, sans-serif; + font-size: 13px; + font-variant-numeric: tabular-nums; +} + +textarea { + font: normal 12px Menlo, 'Bitstream Vera Sans Mono', 'Ubuntu Mono', Consolas, 'Courier New', + Courier, monospace; +} + +img { + border: none; +} + +strong { + font-weight: bold; +} + +a { + color: #1564c2; + text-decoration: none; +} + +a:hover { + text-decoration: underline; + color: #1564c2; +} + +h2 { + margin: 0; + padding: 3px 18px 3px 0; + font-weight: normal; + font-size: 18px; + letter-spacing: 0; + color: #1f2326; +} + +h3 { + font-size: 100%; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +/* Normalize styling of form elements */ +form { + margin: 0; + padding: 0; +} + +input, +select, +textarea { + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +optgroup { + font-style: normal; + font-weight: bold; +} + +optgroup:disabled { + color: #999; +} + +input[type='text'], +input[type='password'], +input[type='search'], +textarea, +select[multiple] { + min-height: 20px !important; + margin: 0; + padding: 1px 3px; + line-height: 1.5em; + + border: 1px solid; + border-color: #888 #ccc #ccc; + + /*box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);*/ + font-size: 13px; +} + +input[type='radio'] { + margin-top: 0; + margin-bottom: 0; + margin-left: 0; + vertical-align: middle; + position: relative; +} + +input[type='checkbox'] { + bottom: 1px; +} + +input[type='radio'] { + bottom: 2px; +} + +input[disabled] { + background-color: #f9f9f9; + color: #999; + border-color: #ccc #ddd #ddd; +} diff --git a/reports-generated/code-quality/versions/VERSION_ID/css/QD-main.css b/reports-generated/code-quality/versions/VERSION_ID/css/QD-main.css new file mode 100644 index 00000000..25004f7f --- /dev/null +++ b/reports-generated/code-quality/versions/VERSION_ID/css/QD-main.css @@ -0,0 +1 @@ +@font-face{font-family:JetBrains Mono Bold;font-style:normal;font-weight:400;src:local("JetBrains Mono Bold"),url(../../versions/VERSION_ID/media/JetBrainsMono-Bold..woff) format("woff")}@font-face{font-family:JetBrains Mono Italic;font-style:normal;font-weight:400;src:local("JetBrains Mono Italic"),url(../../versions/VERSION_ID/media/JetBrainsMono-Italic..woff) format("woff")}@font-face{font-family:JetBrains Mono Medium;font-style:normal;font-weight:400;src:local("JetBrains Mono Medium"),url(../../versions/VERSION_ID/media/JetBrainsMono-Medium..woff) format("woff")}@font-face{font-family:JetBrains Mono Regular;font-style:normal;src:local("JetBrains Mono Regular"),url(../../versions/VERSION_ID/media/JetBrainsMono-Regular..woff) format("woff")}:root{--qd-header-height:54px;--qd-footer-height:100px;--qd-modal-padding:24px 28px 28px;--qd-dropdown-shadow:0px 2px 8px rgba(0,28,54,.1),0px 1px 2px rgba(0,28,54,.04);--qd-dialog-shadow:0px 4px 24px rgba(0,28,54,.1),0px 2px 6px rgba(0,28,54,.04);--qd-font-size-base:14px;--qd-font-size-smaller:12px;--qd-outline:4px solid var(--qd-color-blue-40);--qd-color-black:#1e2021;--qd-color-white-rgb:255,255,255;--qd-color-white:rgb(var(--qd-color-white-rgb));--qd-color-grey:#737577;--qd-color-light-grey:#999;--qd-color-lighter-grey:#dfe5eb;--qd-color-light-grey-5:hsla(0,0%,57%,.05);--qd-color-light-grey-ring:#f5f5f5;--qd-color-palegrey:#f6f6f9;--qd-color-blue:#0080e5;--qd-color-blue-15:rgba(25,138,243,.15);--qd-color-blue-20:rgba(25,138,243,.2);--qd-color-blue-40:#80c6ff;--qd-color-sea-blue:#1f7abe;--qd-color-dark-sea-blue:#032a58;--qd-color-dark-blue:#0070cc;--qd-color-darkest-blue:#175aae;--qd-color-dark-green:#4daa61;--qd-color-darkest-green:#2d7a27;--qd-color-palegray:#f6f6f9;--qd-color-ruby:#c22731;--qd-color-1-layer-rgb:var(--qd-color-white-rgb);--qd-color-1-layer:rgb(var(--qd-color-1-layer-rgb));--qd-color-1-layer-dark:#24272b;--qd-color-2-layer:var(--qd-color-white);--qd-color-3-layer:var(--qd-color-white);--qd-color-rose:#ffebec;--qd-color-red-100:#ff5862;--qd-color-red-80:rgba(255,88,98,.8);--qd-color-red-50:rgba(255,88,98,.5);--qd-color-red-12:rgba(255,88,98,.12);--qd-color-red-6:rgba(255,88,98,.06);--qd-color-bronze:#b25c00;--qd-color-orange-100:#fda332;--qd-color-orange-80:rgba(253,163,50,.8);--qd-color-orange-50:rgba(253,163,50,.5);--qd-color-orange-12:rgba(253,163,50,.12);--qd-color-yellow-100:#ffd121;--qd-color-yellow-80:rgba(255,209,33,.8);--qd-color-yellow-50:rgba(255,209,33,.5);--qd-color-yellow-12:rgba(255,209,33,.12);--qd-color-yellow-6:rgba(255,209,33,.06);--qd-color-warmgray-100:#b8b3ca;--qd-color-warmgray-80:rgba(184,179,202,.8);--qd-color-warmgray-50:rgba(184,179,202,.5);--qd-color-warmgray-12:rgba(184,179,202,.12);--qd-color-azure:#e8f4fd;--qd-color-skyblue-100:#45a5f4;--qd-color-skyblue-80:rgba(69,165,244,.8);--qd-color-skyblue-50:rgba(69,165,244,.5);--qd-color-skyblue-12:rgba(69,165,244,.12);--qd-color-skyblue-6:rgba(69,165,244,.06);--qd-color-palegreen:#eff8e6;--qd-color-lawngreen-100:#7dc634;--qd-color-lawngreen-80:rgba(125,198,52,.8);--qd-color-lawngreen-50:rgba(125,198,52,.5);--qd-color-lawngreen-12:rgba(125,198,52,.12);--qd-color-lawngreen-6:rgba(125,198,52,.06);--qd-color-lavender-6:rgba(134,146,251,.06);--qd-color-severity-critical:var(--qd-color-red-100);--qd-color-severity-high:var(--qd-color-orange-100);--qd-color-severity-moderate:var(--qd-color-yellow-100);--qd-color-severity-low:var(--qd-color-warmgray-100);--qd-color-severity-info:var(--qd-color-skyblue-100);--qd-color-severity-success:var(--qd-color-lawngreen-100);--qd-color-alert-line-severity-critical:var(--qd-color-red-12);--qd-color-alert-line-severity-high:var(--qd-color-orange-12);--qd-color-alert-line-severity-moderate:var(--qd-color-yellow-12);--qd-color-alert-line-severity-low:var(--qd-color-warmgray-12);--qd-color-alert-line-severity-info:var(--qd-color-skyblue-12);--qd-color-alert-line-severity-add:var(--qd-color-lawngreen-12);--qd-color-text-1:var(--qd-color-black);--qd-color-text-2:var(--qd-color-grey);--qd-color-text-3:var(--qd-color-grey);--qd-color-text-4:var(--qd-color-grey);--qd-color-text-5:var(--qd-color-light-grey);--qd-color-text-6:var(--qd-color-black);--qd-color-text-7:var(--qd-color-white);--qd-color-link:var(--ring-link-color);--qd-color-hover-link:var(--qd-color-dark-blue);--qd-color-focus-ring:var(--qd-color-blue);--qd-focus-box-shadow:inset 0 0 0 1px var(--qd-color-focus-ring),0 0 0 1px var(--qd-color-focus-ring);--qd-color-hover-list-item:var(--qd-color-skyblue-12);--qd-color-skeleton-1:#e8e8e8;--qd-color-skeleton-2:#f3f3f3;--qd-color-main-bg-rgb:var(--qd-color-white-rgb);--qd-color-main-bg:rgb(var(--qd-color-main-bg-rgb));--qd-color-dropdown-bg:var(--qd-color-white);--qd-color-sourcetabs-bg:hsla(0,0%,57%,.05);--qd-color-danger-entity:var(--qd-color-ruby);--qd-color-summary-tabs-border:var(--qd-color-lighter-grey);--qd-color-summary-tabs-bg:var(--qd-color-light-grey-5);--qd-color-summary-tabs-bg-active:var(--qd-color-white);--qd-color-summary-tabs-main-numbers:var(--qd-color-grey);--qd-color-summary-tabs-main-numbers-active:var(--qd-color-black);--qd-color-summary-tabs-text:var(--qd-color-grey);--qd-color-summary-tabs-text-active:var(--qd-color-grey);--qd-color-summary-tabs-text-disabled:var(--qd-color-lighter-grey);--qd-color-summary-tabs-positive:var(--qd-color-darkest-green);--qd-color-summary-tabs-positive-active:var(--qd-color-dark-green);--qd-color-summary-tabs-negative:var(--qd-color-red-80);--qd-color-summary-tabs-negative-active:var(--qd-color-red-100);--qd-color-summary-tabs-failed:var(--qd-color-orange-80);--qd-color-summary-tabs-failed-active:var(--qd-color-orange-100);--qd-color-checks-list-border:var(--qd-color-lighter-grey);--qd-color-select-button-disabled-text:var(--qd-color-light-grey);--qd-color-select-button-border:var(--qd-color-lighter-grey);--qd-color-input-bg:var(--qd-color-main-bg);--qd-color-input-border:var(--ring-borders-color);--qd-color-input-border-active:var(--qd-color-blue);--qd-color-input-border-hover:var(--ring-border-hover-color);--qd-color-input-placeholder:var(--qd-color-light-grey);--qd-color-input-search-icon:var(--qd-color-light-grey);--qd-color-input-disabled-bg:var(--ring-disabled-background-color);--qd-color-input-disabled-text:var(--qd-color-light-grey);--qd-color-input-disabled-border:var(--ring-border-disabled-color);--qd-color-input-error-border:var(--qd-color-ruby);--qd-color-input-label:var(--qd-color-grey);--qd-color-code-snippet-border:var(--qd-color-lighter-grey);--qd-color-border:var(--qd-color-lighter-grey);--qd-color-badge-blue-bg:rgba(75,155,230,.1);--qd-color-toggle-handle-on:var(--qd-color-white);--qd-color-toggle-handle-off:var(--qd-color-white);--qd-color-toggle-handle-disabled:var(--qd-color-white);--qd-color-toggle-bg-on:var(--qd-color-blue);--qd-color-toggle-bg-off:var(--qd-color-light-grey);--qd-color-toggle-bg-disabled:var(--qd-color-lighter-grey);--qd-color-toggle-label-disabled:var(--qd-color-light-grey);--qd-color-blurred-bg:hsla(0,0%,100%,.9);--qd-color-popup-gradient-start-bg:rgba(242,245,249,0);--qd-color-popup-gradient-end-bg:var(--qd-color-white);--qd-color-tooltip-bg:var(--qd-color-white);--qd-color-circle-message:var(--qd-color-light-grey);--qd-color-empty-rect-btn-border:var(--qd-color-lighter-grey);--qd-color-disabled-primary-rect-btn-bg:var(--qd-color-lighter-grey);--qd-color-disabled-primary-rect-btn-border:var(--qd-color-lighter-grey);--qd-color-disabled-primary-rect-btn:var(--qd-color-light-grey);--qd-color-button-bg:var(--qd-color-azure);--qd-color-button-border:var(--qd-color-lighter-grey);--qd-color-button-border-hover:var(--qd-color-blue-40);--qd-color-button-disabled-text:var(--qd-color-light-grey);--qd-color-button-disabled-border:var(--qd-color-lighter-grey);--qd-color-button-disabled-bg:var(--qd-color-light-grey-5);--qd-color-button-pressed-border:var(--qd-color-darkest-blue);--qd-color-button-clear:var(--qd-color-blue);--qd-color-button-clear-hover:var(--qd-color-dark-blue);--qd-color-button-clear-pressed:var(--qd-color-darkest-blue);--qd-color-button-icon-disabled:var(--qd-color-light-grey);--qd-color-button-danger-hover:var(--qd-color-red-100);--qd-color-button-clear-disabled:var(--qd-color-light-grey);--qd-color-checkbox-checkmark:var(--qd-color-black);--qd-color-checkbox-bg-checked:#d4edff;--qd-color-checkbox-bg:var(--qd-color-white);--qd-color-checkbox-border-checked:#80c6ff;--qd-color-checkbox-border:#bcd1e3;--qd-color-tree-select-chevron:var(--qd-color-light-grey);--qd-color-select-item-hover:var(--qd-color-skyblue-12);--qd-color-select-item-description:var(--qd-color-light-grey);--qd-color-select-search-icon:var(--qd-color-light-grey);--qd-color-select-search-text:var(--qd-color-grey);--qd-color-select-icon:var(--qd-color-light-grey);--qd-color-separator:var(--qd-color-lighter-grey);--qd-color-project-audit-header-line:var(--qd-color-lighter-grey);--qd-color-saved-filters-select-icon:var(--qd-color-light-grey);--qd-color-help-select-external-icon:var(--qd-color-light-grey);--qd-color-help-select-trigger-icon:var(--qd-color-light-grey);--qd-color-help-select-additional:var(--qd-color-light-grey);--qd-color-onboarding-tip-bg:var(--qd-color-black);--qd-color-onboarding-tip-content:var(--qd-color-lighter-grey);--qd-color-onboarding-tip-hide:var(--qd-color-grey);--qd-color-onboarding-tip-hide-hover:var(--qd-color-light-grey);--qd-color-onboarding-tip-next:var(--qd-color-blue);--qd-color-onboarding-tip-next-hover:var(--qd-color-dark-blue);--qd-color-project-setup-progressbar-bg:var(--qd-color-lighter-grey);--qd-color-project-setup-progressbar-bg-active:var(--qd-color-lawngreen-100);--qd-color-hover-checks-item:#ebf6ff;--qd-color-check-bg:var(--qd-color-white);--qd-color-check-sign-color:var(--qd-color-light-grey);--qd-color-tags-bg:var(--qd-color-skyblue-6);--qd-color-tags-bg-hover:var(--qd-color-blue-20);--qd-color-tags-bg-disabled:var(--qd-color-light-grey-5);--qd-color-tags-text:var(--qd-color-sea-blue);--qd-color-tags-text-hover:var(--qd-color-dark-sea-blue);--qd-color-tags-text-disabled:var(--qd-color-light-grey);--qd-color-tags-action-button:var(--qd-color-light-grey);--qd-color-tree-icon:rgba(154,167,176,.8);--qd-color-summary-hover:var(--qd-color-light-grey-5);--qd-color-green-label-bg:var(--qd-color-lawngreen-6);--qd-color-green-label-text:var(--qd-color-dark-green);--qd-color-blue-label-bg:var(--qd-color-skyblue-50);--qd-color-blue-label-bg-text:var(--qd-color-darkest-blue);--qd-color-code-inline-bg:var(--qd-color-light-grey-5);--qd-color-code-inline-border:var(--qd-color-lighter-grey);--qd-color-code-block-bg:var(--qd-color-light-grey-5);--qd-color-code-block-border:var(--qd-color-lighter-grey);--qd-icon-default-color:var(--qd-color-light-grey);--qd-icon-hover-color:var(--qd-color-blue);--qd-icon-active-color:var(--qd-color-blue);--qd-editor-icon-hover-color:var(--qd-color-blue-40);--qd-editor-icon-active-color:var(--qd-color-blue);--qd-code-deletion-row-bg:var(--qd-color-rose);--qd-code-addition-row-bg:var(--qd-color-palegreen);--qd-color-radio-button-bg:var(--qd-color-white-rgb);--qd-color-user-evaluation-bg:var(--qd-color-lighter-grey);--qd-color-user-evaluation-bg-hover:var(--qd-color-light-grey-5);--qd-color-feedback-button-bg:var(--qd-color-azure);--qd-color-feedback-button-bg-hover:var(--qd-color-blue-20);--qd-color-feedback-button-icon:var(--qd-color-skyblue-80);--qd-color-feedback-button-icon-hover:var(--qd-color-skyblue-100);--qd-hljs-color:#000;--qd-hljs-addition-color-bg:#baeeba;--qd-hljs-attribute-font-w:bold;--qd-hljs-attribute-color:#00f;--qd-hljs-bullet-color:#000;--qd-hljs-bullet-color-bg:#d0eded;--qd-hljs-bullet-font-s:italic;--qd-hljs-comment-color:grey;--qd-hljs-comment-font-s:italic;--qd-hljs-deletion-color-bg:#ffc8bd;--qd-hljs-deletion-color:inherit;--qd-hljs-doctag-text-dec:underline;--qd-hljs-emphasis-font-s:italic;--qd-hljs-formula-color:#000;--qd-hljs-formula-color-bg:#d0eded;--qd-hljs-formula-font-s:italic;--qd-hljs-keyword-font-w:bold;--qd-hljs-keyword-color:navy;--qd-hljs-link-font-w:normal;--qd-hljs-link-color:#00f;--qd-hljs-literal-font-w:bold;--qd-hljs-literal-color:navy;--qd-hljs-meta-color:olive;--qd-hljs-name-font-w:bold;--qd-hljs-name-color:navy;--qd-hljs-number-font-w:normal;--qd-hljs-number-color:#00f;--qd-hljs-quote-color:grey;--qd-hljs-quote-font-s:italic;--qd-hljs-regexp-font-w:normal;--qd-hljs-regexp-color:#00f;--qd-hljs-section-font-w:bold;--qd-hljs-section-color:navy;--qd-hljs-selector-class-font-w:bold;--qd-hljs-selector-class-color:navy;--qd-hljs-selector-id-font-w:bold;--qd-hljs-selector-id-color:navy;--qd-hljs-selector-tag-font-w:bold;--qd-hljs-selector-tag-color:navy;--qd-hljs-string-color:green;--qd-hljs-string-font-w:bold;--qd-hljs-strong-font-w:bold;--qd-hljs-subst-font-w:normal;--qd-hljs-subst-color:#000;--qd-hljs-symbol-color:#000;--qd-hljs-symbol-color-bg:#d0eded;--qd-hljs-symbol-font-s:italic;--qd-hljs-template-variable-color:#660e7a;--qd-hljs-title-font-w:normal;--qd-hljs-title-color:#000;--qd-hljs-type-font-w:bold;--qd-hljs-type-color:navy;--qd-hljs-variable-color:#660e7a}.bodyQodanaBlocks{--ring-link-hover-color:var(--qd-color-hover-link)}.bodyQodanaBlocks_dark{--qd-color-azure:#283643;--qd-color-rose:#3f2d32;--qd-color-cream:#3e3b2a;--qd-color-palegreen:#2f3a2c;--qd-color-palegrey-dark:#36383e;--qd-color-1-layer-rgb:36,39,43;--qd-color-1-layer:rgb(var(--qd-color-1-layer-rgb));--qd-color-2-layer:#2a2d32;--qd-color-3-layer:#303337;--qd-color-dt-light-grey40:rgba(95,95,95,.4);--qd-color-dt-sea-blue:#70b1e6;--qd-color-dt-darkest-blue:#529fff;--qd-color-main-bg-rgb:var(--qd-color-1-layer-rgb);--qd-color-main-bg:rgb(var(--qd-color-main-bg-rgb));--qd-color-text-1:var(--qd-color-lighter-grey);--qd-color-text-2:var(--qd-color-grey);--qd-color-text-3:var(--qd-color-light-grey);--qd-color-text-4:var(--qd-color-light-grey);--qd-color-text-5:var(--qd-color-light-grey);--qd-color-text-6:var(--qd-color-light-grey);--qd-color-text-7:var(--qd-color-light-grey-ring);--qd-color-link:var(--qd-color-dt-sea-blue);--qd-color-hover-link:var(--qd-color-dt-darkest-blue);--qd-color-dropdown-bg:var(--qd-color-2-layer);--qd-color-skeleton-1:#2f3238;--qd-color-skeleton-2:#3b3c3f;--qd-color-hover-checks-item:var(--qd-color-3-layer);--qd-color-summary-tabs-border:var(--qd-color-dt-light-grey40);--qd-color-summary-tabs-bg-active:var(--qd-color-main-bg);--qd-color-summary-tabs-main-numbers:var(--qd-color-light-grey);--qd-color-summary-tabs-main-numbers-active:var(--qd-color-lighter-grey);--qd-color-summary-tabs-text:var(--qd-color-light-grey);--qd-color-summary-tabs-text-active:var(--qd-color-lighter-grey);--qd-color-summary-tabs-text-disabled:var(--qd-color-grey);--qd-color-summary-tabs-positive:var(--qd-color-lawngreen-80);--qd-color-summary-tabs-positive-active:var(--qd-color-lawngreen-100);--qd-color-summary-tabs-failed:var(--qd-color-yellow-80);--qd-color-summary-tabs-failed-active:var(--qd-color-yellow-100);--qd-color-select-button-disabled-text:var(--qd-color-light-grey);--qd-color-select-button-border:var(--qd-color-dt-light-grey40);--qd-color-separator:var(--qd-color-2-layer);--qd-color-project-audit-header-line:var(--qd-color-dt-light-grey40);--qd-color-input-bg:var(--qd-color-main-bg);--qd-color-input-border:var(--ring-borders-color);--qd-color-input-border-hover:var(--ring-border-hover-color);--qd-color-input-disabled-bg:var(--ring-disabled-background-color);--qd-color-input-disabled-text:var(--qd-color-grey);--qd-color-input-disabled-border:var(--ring-border-disabled-color);--qd-color-input-error-border:var(--qd-color-red-100);--qd-color-input-placeholder:var(--qd-color-light-grey);--qd-color-input-search-icon:var(--ring-icon-color);--qd-color-sourcetabs-bg:var(--qd-color-3-layer);--qd-color-code-snippet-border:var(--qd-color-dt-light-grey40);--qd-color-border:var(--qd-color-dt-light-grey40);--qd-color-danger-entity:var(--qd-color-red-100);--qd-color-toggle-handle-on:var(--qd-color-white);--qd-color-toggle-handle-off:var(--qd-color-light-grey);--qd-color-toggle-handle-disabled:var(--qd-color-dt-light-grey40);--qd-color-toggle-bg-on:var(--qd-color-blue);--qd-color-toggle-bg-off:var(--qd-color-dt-light-grey40);--qd-color-toggle-bg-disabled:var(--qd-color-lighter-grey);--qd-color-toggle-label-disabled:var(--qd-color-light-grey);--qd-color-blurred-bg:rgba(95,95,95,.9);--qd-color-popup-gradient-start-bg:rgba(34,36,37,.24);--qd-color-popup-gradient-end-bg:var(--qd-color-2-layer);--qd-color-tooltip-bg:var(--qd-color-3-layer);--qd-color-circle-message:var(--qd-color-grey);--qd-color-empty-rect-btn-border:var(--qd-color-light-grey);--qd-color-disabled-primary-rect-btn-bg:var(--qd-color-light-grey);--qd-color-disabled-primary-rect-btn:var(--qd-color-grey);--qd-color-check-bg:var(--qd-color-3-layer);--qd-color-check-sign-color:var(--qd-color-light-grey);--qd-color-tags-bg:var(--qd-color-skyblue-6);--qd-color-tags-bg-hover:var(--qd-color-blue-20);--qd-color-tags-bg-disabled:var(--qd-color-dt-light-grey40);--qd-color-tags-text:var(--qd-color-dt-sea-blue);--qd-color-tags-text-hover:var(--qd-color-dt-darkest-blue);--qd-color-tags-text-disabled:var(--qd-color-grey);--qd-color-tags-action-button:var(--qd-color-grey);--qd-color-summary-hover:var(--qd-color-2-layer);--qd-color-checkbox-checkmark:var(--qd-color-blue);--qd-color-checkbox-bg-checked:transparent;--qd-color-checkbox-bg:var(--qd-color-3-layer);--qd-color-checkbox-border-checked:var(--qd-color-grey);--qd-color-checkbox-border:var(--qd-color-grey);--qd-color-tree-select-chevron:var(--qd-color-grey);--qd-color-select-item-hover:var(--qd-color-azure);--qd-color-select-search-icon:var(--qd-color-light-grey);--qd-color-select-search-text:var(--qd-color-grey);--qd-color-select-icon:var(--qd-color-grey);--qd-color-help-select-external-icon:var(--qd-color-light-grey);--qd-color-onboarding-tip-bg:var(--qd-color-blue);--qd-color-onboarding-tip-content:var(--qd-color-white);--qd-color-onboarding-tip-hide:var(--qd-color-darkest-blue);--qd-color-onboarding-tip-hide-hover:var(--qd-color-dark-sea-blue);--qd-color-onboarding-tip-next:var(--qd-color-dark-sea-blue);--qd-color-onboarding-tip-next-hover:var(--qd-color-black);--qd-color-project-setup-progressbar-bg:var(--qd-color-grey);--qd-color-checks-list-border:var(--qd-color-dt-light-grey40);--qd-color-radio-button-bg:var(--qd-color-1-layer-dark);--qd-color-user-evaluation-bg:var(--qd-color-dt-light-grey40);--qd-color-user-evaluation-bg-hover:var(--qd-color-3-layer);--qd-color-feedback-button-bg:var(--qd-color-blue-20);--qd-color-feedback-button-bg-hover:var(--qd-color-blue);--qd-color-feedback-button-icon:var(--qd-color-blue);--qd-color-feedback-button-icon-hover:var(--qd-color-white);--qd-color-green-label-text:var(--qd-color-lawngreen-100);--qd-color-blue-label-bg:var(--qd-color-skyblue-12);--qd-color-blue-label-text:var(--qd-color-dt-darkest-blue);--qd-color-button-bg:var(--qd-color-3-layer);--qd-color-button-border:var(--qd-color-dt-light-grey40);--qd-color-button-disabled-text:var(--qd-color-grey);--qd-color-button-disabled-border:var(--qd-color-light-grey-5);--qd-color-button-clear-pressed:var(--qd-color-dt-darkest-blue);--qd-color-button-icon-disabled:var(--qd-color-grey);--qd-color-button-danger-hover:var(--qd-color-red-80);--qd-icon-hover-color:var(--qd-color-dt-darkest-blue);--qd-icon-active-color:var(--qd-color-dt-darkest-blue);--qd-editor-icon-hover-color:var(--qd-color-dark-blue);--qd-editor-icon-active-color:var(--qd-color-dt-darkest-blue);--qd-hljs-color:#a9b7c6;--qd-hljs-addition-color-bg:#6a8759;--qd-hljs-attribute-font-w:normal;--qd-hljs-attribute-color:#6a8759;--qd-hljs-bullet-color:#6897bb;--qd-hljs-bullet-color-bg:#6897bb;--qd-hljs-bullet-font-s:normal;--qd-hljs-comment-font-s:normal;--qd-hljs-deletion-color-bg:var(--qd-color-2-layer);--qd-hljs-deletion-color:#cc7832;--qd-hljs-doctag-text-dec:none solid currentcolor;--qd-hljs-formula-color:inherit;--qd-hljs-formula-color-bg:transparent;--qd-hljs-formula-font-s:normal;--qd-hljs-keyword-font-w:normal;--qd-hljs-keyword-color:#cc7832;--qd-hljs-link-color:#629755;--qd-hljs-literal-font-w:inherit;--qd-hljs-literal-color:#6897bb;--qd-hljs-meta-color:#bbb529;--qd-hljs-name-font-w:inherit;--qd-hljs-name-color:#e8bf6a;--qd-hljs-number-font-w:inherit;--qd-hljs-number-color:#6897bb;--qd-hljs-quote-font-s:inherit;--qd-hljs-regexp-font-w:inherit;--qd-hljs-regexp-color:inherit;--qd-hljs-section-font-w:inherit;--qd-hljs-section-color:#ffc66d;--qd-hljs-selector-class-font-w:inherit;--qd-hljs-selector-class-color:#e8bf6a;--qd-hljs-selector-id-font-w:inherit;--qd-hljs-selector-id-color:#e8bf6a;--qd-hljs-selector-tag-font-w:inherit;--qd-hljs-selector-tag-color:#cc7832;--qd-hljs-string-color:#6a8759;--qd-hljs-string-font-w:inherit;--qd-hljs-subst-font-w:inherit;--qd-hljs-subst-color:inherit;--qd-hljs-symbol-color:#6897bb;--qd-hljs-symbol-color-bg:transparent;--qd-hljs-symbol-font-s:inherit;--qd-hljs-template-variable-color:#629755;--qd-hljs-title-font-w:inherit;--qd-hljs-title-color:#ffc66d;--qd-hljs-type-font-w:inherit;--qd-hljs-type-color:#ffc66d;--qd-hljs-variable-color:#629755;--qd-color-code-inline-bg:var(--qd-color-dt-light-grey40);--qd-color-code-inline-border:var(--qd-color-grey);--qd-color-code-block-bg:var(--qd-color-light-grey-5);--qd-color-code-block-border:var(--qd-color-grey);--qd-code-deletion-row-bg:var(--qd-color-rose);--qd-code-addition-row-bg:var(--qd-color-palegreen);--ring-link-color:var(--qd-color-link);--ring-link-hover-color:var(--qd-color-hover-link)}:root{--qd-popup-box-shadow:0px 10px 20px rgba(0,0,0,.06);--qd-border-radius:4px;--qd-border-radius-smaller:2px;--qd-font-family:-apple-system,system-ui,"SF Pro Display",BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Cantarell,Droid Sans,Helvetica Neue,Arial,sans-serif;--qd-code-font-family-regular:"JetBrains Mono Regular",system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Cantarell,Droid Sans,Helvetica Neue,Arial,sans-serif;--qd-code-font-family-bold:"JetBrains Mono Bold",system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Cantarell,Droid Sans,Helvetica Neue,Arial,sans-serif}.App_app__6Ra7L,body *{-webkit-font-feature-settings:normal;font-feature-settings:normal;-webkit-text-size-adjust:auto;-moz-text-size-adjust:auto;text-size-adjust:auto;font-variant-numeric:normal;text-rendering:auto}.App_app__6Ra7L{background:var(--qd-color-main-bg);color:var(--qd-color-text-1);font-family:var(--qd-font-family);font-size:14px;font-weight:400;line-height:normal;margin:0;transition:color .2s,background .2s}.App_appNotTeamCity__SCvyn.App_appNotTeamCity__SCvyn{min-height:100vh}.App_appNotTeamCity__SCvyn.App_appNotTeamCity__SCvyn>main{min-height:calc(100vh - var(--qd-header-height) - var(--qd-footer-height))}.App_errorTeamCity__CaDSF{padding-top:180px!important}.App_bgTransparent__Z7QCA{background:transparent!important}.App_cloudHelpMenu__84SV3{display:flex;height:0;justify-content:flex-end}.ErrorMessage_content__uByj8{display:inline-block;margin-left:50%;padding-top:30vh;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.ThemeMarker_themeMarker__1p\+8Q{height:0;position:absolute;visibility:hidden;width:0}.ReportErrorBoundary_error__13fn\+{color:var(--qd-color-text-2)}.CheckList_checks__67saT{margin-bottom:32px}.CheckList_container__FzIGa{border:1px solid var(--qd-color-checks-list-border);border-radius:4px;outline:none;padding-top:6px;transition:border .2s}.CheckList_last__\+2Ebf.CheckList_last__\+2Ebf>div{margin-bottom:25px}.CheckList_col__QVN1r{padding-left:0!important}.CheckList_group__NzB7b{margin-bottom:10px}.CheckList_hint__1TkLE{border:1px solid var(--qd-color-checks-list-border);border-radius:4px;color:var(--qd-color-grey);display:inline-flex;height:238px;justify-content:center;padding-top:50px;width:100%}.CheckList_hint__1TkLE .CheckList_search__iYaSW{display:block;max-width:300px;overflow-x:hidden;text-overflow:ellipsis}.CheckList_checksCount__sU8JQ{color:var(--qd-color-text-2);display:flex;white-space:nowrap}.CheckList_title__meOnQ.CheckList_title__meOnQ{display:block;margin-top:20px}.CheckList_controlsContainer__yNlHQ{align-items:center;display:flex}.CheckList_checksError__kxRrA{color:var(--qd-color-text-2);padding:20px 0 90px;text-align:center}.CheckListSkeleton_line__BtGXE{margin:12px 32px;width:inherit}.CheckListSkeleton_line__BtGXE:first-child{margin-top:10px}.CheckListSkeleton_line__BtGXE:last-child{margin-bottom:20px}.Inspection_island__hW4FN.Inspection_island__hW4FN{background:var(--qd-color-check-bg);border-color:var(--qd-color-border);box-shadow:none!important;display:block;margin:3px 11px 9px 18px;padding:0 0 16px;transition:background .2s,box-shadow .2s}.Inspection_copyIcon__e9p7T{color:var(--qd-color-lighter-grey);opacity:0;transition:opacity .2s,color .2s}.Inspection_island__hW4FN.Inspection_island__hW4FN:hover .Inspection_copyIcon__e9p7T{opacity:100%}.Inspection_island__hW4FN .Inspection_grid__iXly-{margin:0;padding:0 12px 0 7px}.Inspection_summary__x3xgR{margin-left:21px}.DetailsInfo_container__\+CsKc{border-top:1px solid var(--qd-color-border);color:var(--qd-color-text-1);font-family:var(--qd-font-family);font-size:12px;font-weight:400;line-height:20px;padding:10px 20px;transition:color .2s;transition:border .2s}pre+.DetailsInfo_buttonsGroup__PwtBk{margin-top:-.36rem}.DetailsInfo_container__\+CsKc ol{-webkit-margin-before:0;-webkit-margin-after:0;margin-block-end:0;margin-block-start:0;margin-left:1.1rem}.DetailsInfo_container__\+CsKc i{font-style:normal}.DetailsInfo_container__\+CsKc li{margin-left:-.039rem;margin-top:.55rem}.DetailsInfo_container__\+CsKc b{font-weight:400}.DetailsInfo_container__\+CsKc p{-webkit-margin-before:.4rem;-webkit-margin-after:0;margin-block-end:0;margin-block-start:.4rem}.DetailsInfo_container__\+CsKc a{color:var(--qd-color-link)!important}.DetailsInfo_container__\+CsKc pre[class*=code_rui_] code{background:var(--qd-color-code-block-bg);border:1px solid var(--qd-color-code-block-border);border-radius:4px;box-sizing:border-box;color:var(--qd-color-text-1);transition:color .2s,border .2s,background .2s}.DetailsInfo_container__\+CsKc span[class*=inline_rui_] code{background:var(--qd-color-code-inline-bg);border-radius:2px;outline:1px solid var(--qd-color-code-inline-border);padding:0 2px;transition:outline .2s,background .2s}.InspectionDetails_details__mG1oK.InspectionDetails_details__mG1oK{border-top:none;color:var(--qd-color-text-1);font-family:var(--qd-code-font-family-regular);line-height:18px;padding:0 16px;transition:color .2s}.InspectionDetails_disabled__cBmPH.InspectionDetails_details__mG1oK{color:var(--qd-color-text-2)}.InspectionDetails_details__mG1oK p{margin:0}.InspectionDetails_button__-S6VX.InspectionDetails_button__-S6VX,.InspectionDetails_button__-S6VX.InspectionDetails_button__-S6VX:hover{border:none;color:var(--qd-color-text-2);display:block;font-family:var(--qd-font-family);font-size:12px;height:16px;line-height:16px;margin:2px 0 0 16px;padding:0;text-align:start;transition:color .2s!important}.InspectionDetails_tag__lIWzo.InspectionDetails_tag__lIWzo{background:var(--qd-color-skyblue-6);border-radius:var(--qd-border-radius);color:var(--qd-color-tags-text);display:inline-block;font-size:12px;letter-spacing:.02em;line-height:14px;margin:12px 12px 0;padding:4px 8px;transition:color .2s,background .2s}.CopyButton_copyButton__XCSWW{align-items:center;background:transparent;border:none;cursor:pointer;display:flex;height:16px;justify-content:center;margin:0 0 0 6px;padding:0;width:16px}.CopyButton_copyIcon__PMbT7{color:var(--qd-color-light-grey)}.CopyButton_copyIcon__PMbT7,.bodyQodanaBlocks_dark .CopyButton_copyIcon__PMbT7{--qd-baseline-change-copy-button-hover-active-color:var(--qd-color-blue)}.CopyButton_copyButton__XCSWW:active .CopyButton_copyIcon__PMbT7,.CopyButton_copyButton__XCSWW:hover .CopyButton_copyIcon__PMbT7{color:var(--qd-baseline-change-copy-button-hover-active-color)}.CopyButton_copyButton__XCSWW:focus-visible{border-radius:var(--qd-border-radius);outline:var(--qd-outline)}.CopyButton_copied__\+au0G{align-items:center;background:var(--qd-color-palegreen);border-radius:var(--qd-border-radius);color:var(--qd-color-dark-green);display:inline-flex;margin-left:6px;padding:2px 8px;transition:background .2s}.CopyButton_copiedMark__nZEZP{margin-right:2px}.bodyQodanaBlocks_dark .CopyButton_copied__\+au0G{color:var(--qd-color-lawngreen-100)}.InspectionSummary_container__M3uEU{border-radius:var(--qd-border-radius);font-family:var(--qd-font-family);font-size:13px;font-weight:400;margin:7px 16px 0 11px;transition:color .2s}.InspectionSummary_open__UqfiK.InspectionSummary_container__M3uEU{margin:0;padding-top:5px}.InspectionSummary_button__WuKN6{background:transparent;border:none;cursor:pointer;display:block;outline:none;padding:0 16px;-webkit-user-select:text;user-select:text}.InspectionSummary_button__WuKN6:focus-visible{border-radius:var(--qd-border-radius);box-shadow:var(--qd-focus-box-shadow)}.InspectionSummary_caption__64p99{display:inline-block;margin:5px 0;width:100%}.InspectionSummary_open__UqfiK .InspectionSummary_caption__64p99{align-items:center;display:flex;margin-bottom:0}.InspectionSummary_close__VjUgg{margin-bottom:1px;margin-top:1px}.InspectionSummary_close__VjUgg:hover{background:var(--qd-color-hover-checks-item)}.InspectionSummary_displayName__BsZKT{color:var(--qd-color-text-1);text-align:left;transition:color .2s}.InspectionSummary_disable__RX-eh .InspectionSummary_displayName__BsZKT{color:var(--qd-color-text-2)}.InspectionSummary_open__UqfiK .InspectionSummary_displayName__BsZKT{font-weight:600;white-space:normal}.InspectionSummary_close__VjUgg .InspectionSummary_displayName__BsZKT{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.InspectionSummary_shortName__cCq2b{color:var(--qd-color-text-3);display:block;font-family:var(--qd-code-font-family-regular);font-size:12px;line-height:20px;text-align:left;transition:color .2s}.InspectionSummary_shortNameContainer__V0nu1{align-items:center;display:flex;margin:4px 0 12px}.InspectionSummary_badge__MUmJi.InspectionSummary_badge__MUmJi{background:rgba(82,180,110,.17);border:none;border-radius:3px;bottom:1px;color:rgba(82,180,110,.7);cursor:inherit;line-height:20px;margin:0 6px;position:relative;white-space:nowrap}.InspectionSummary_chevronContainer__xLTtz{white-space:nowrap}.InspectionSummary_tooltipPopup__hpS93.InspectionSummary_tooltipPopup__hpS93{background-color:var(--qd-color-tooltip-bg);border:none;color:var(--qd-color-text-1);padding:10px 12px}.InspectionSummary_iconContainer__gOwPI{display:inline-block;height:14px;padding:0 8px 0 5px;position:relative;top:2px;width:14px}.InspectionSummary_icon__mI2Vj{position:absolute}.InspectionSummary_icon__mI2Vj path{fill:var(--qd-color-text-3)}.InspectionSummary_toggle__irwlU{margin-left:auto;margin-right:6px;text-align:left;white-space:nowrap}.InspectionSummary_chevronDown__RacSW,.InspectionSummary_chevronUp__BZXEl{color:var(--qd-color-grey)}.InspectionSummary_chevronDown__RacSW{align-items:center;display:inline-flex;margin-left:auto;visibility:hidden}.InspectionSummary_close__VjUgg:hover .InspectionSummary_chevronDown__RacSW{visibility:inherit}.CollapsibleItem_sign__WqaQG.CollapsibleItem_sign__WqaQG{fill:var(--qd-color-check-sign-color);margin-right:9px;transition:fill .2s}.CollapsibleItem_container__3Pq2b{align-items:center;display:flex}.InspectionGroup_titleName__jky1n{color:var(--qd-color-text-1);overflow-x:hidden;text-overflow:ellipsis;transition:color .2s}.InspectionGroup_inspectionGroup__gWKM2.InspectionGroup_inspectionGroup__gWKM2{display:block;height:20px;margin-bottom:6px;margin-top:6px;padding-left:29px}.InspectionGroup_noToolInspectionGroup__tA8vx.InspectionGroup_noToolInspectionGroup__tA8vx{padding-left:13px}.Tool_tool__LbBQ4.Tool_tool__LbBQ4{display:block;font-family:var(--qd-font-family);height:16px;margin-bottom:6px;margin-top:6px;padding-left:13px}.Tool_count__F3yW3{color:var(--qd-color-text-2);font-size:12px;font-style:normal;font-weight:400;line-height:16px;margin-left:6px}.Tool_newCount__f\+4tG{color:var(--qd-color-darkest-green);margin-left:4px}.Controls_container__2E7cv{align-items:center;display:flex;font-family:var(--qd-font-family);margin:10px 0 12px}.Controls_buttonSelect__w7j6h.Controls_buttonSelect__w7j6h{height:28px;margin-right:8px;width:162px}.Controls_buttonSelect__w7j6h.Controls_buttonSelect__w7j6h>div>button{font-size:13px}.Controls_popup__wOOdS.Controls_popup__wOOdS{background-color:var(--qd-color-dropdown-bg);border:none;box-shadow:var(--qd-popup-box-shadow)}.Controls_popup__wOOdS.Controls_popup__wOOdS div[class*=ReactVirtualized]{outline:none}.Controls_popup__wOOdS.Controls_popup__wOOdS span{color:var(--qd-color-text-1)}.Controls_popup__wOOdS.Controls_popup__wOOdS span[class*=hover]{background-color:var(--qd-color-azure)}.Controls_search__033FK.Controls_search__033FK{margin-right:10px;width:338px}.Controls_search__033FK.Controls_search__033FK input{font-size:13px;height:24px;line-height:18px;min-height:24px}.Controls_promptParent__Jq7Rx{position:relative;right:348px;top:14px}.Controls_prompt__q42ob{background:var(--qd-color-dropdown-bg);border:initial;border-radius:var(--qd-border-radius);box-shadow:var(--qd-popup-box-shadow);box-sizing:border-box;color:var(--qd-color-text-2);font-size:13px;line-height:18px;padding:12px 15px 20px;position:absolute;width:338px;z-index:10}.EditableCode_code__RT9Wg{border:1px solid var(--qd-color-border);border-radius:var(--qd-border-radius);display:grid;overflow-x:auto;overflow-y:hidden;transition:border-color .2s,color .2s}.EditableCodeItem_lineContainer__7LJMB{align-items:center;display:flex;font-size:12px;line-height:20px;transition:background-color .2s}.EditableCodeItem_lineContainer__7LJMB:hover,.EditableCodeItem_lineContainer__7LJMB:hover .EditableCodeItem_lineGutter__0XEQp{background:var(--qd-color-azure)}.EditableCodeItem_lineGutter__0XEQp{background:var(--qd-color-main-bg);border-right:1px solid var(--qd-color-border);color:var(--qd-color-text-3);left:0;min-width:36px;padding-left:10px;position:-webkit-sticky;position:sticky;transition:background-color .2s,color .2s,border .2s}.EditableCodeItem_addition__cq7k8 .EditableCodeItem_lineGutter__0XEQp.EditableCodeItem_lineGutter__0XEQp,.EditableCodeItem_addition__cq7k8.EditableCodeItem_addition__cq7k8,.EditableCodeItem_addition__cq7k8.EditableCodeItem_addition__cq7k8:hover{background:var(--qd-code-addition-row-bg)}.EditableCodeItem_deletion__kS7pe .EditableCodeItem_lineGutter__0XEQp.EditableCodeItem_lineGutter__0XEQp,.EditableCodeItem_deletion__kS7pe.EditableCodeItem_deletion__kS7pe,.EditableCodeItem_deletion__kS7pe.EditableCodeItem_deletion__kS7pe:hover{background:var(--qd-code-deletion-row-bg)}.EditableCodeItem_rowNumber__CUca-{-webkit-user-select:none;user-select:none}.EditableCodeItem_lineContainer__7LJMB:hover .EditableCodeItem_hiddenNumber__SZttH{display:none}.EditableCodeItem_buttonGroup__4E3fr{display:none;margin-left:-4px}.EditableCodeItem_lineContainer__7LJMB:hover .EditableCodeItem_buttonGroup__4E3fr{align-items:center;-webkit-column-gap:1px;column-gap:1px;display:flex}.EditableCodeItem_button__sMWLC.EditableCodeItem_button__sMWLC{height:auto;line-height:0;padding:4px}.EditableCodeItem_button__sMWLC .EditableCodeItem_goToIcon__nIOFX.EditableCodeItem_goToIcon__nIOFX,.EditableCodeItem_button__sMWLC .EditableCodeItem_trashIcon__78Wa3.EditableCodeItem_trashIcon__78Wa3{color:var(--qd-editor-icon-active-color);line-height:0}.EditableCodeItem_button__sMWLC:hover .EditableCodeItem_goToIcon__nIOFX.EditableCodeItem_goToIcon__nIOFX,.EditableCodeItem_button__sMWLC:hover .EditableCodeItem_trashIcon__78Wa3.EditableCodeItem_trashIcon__78Wa3{color:var(--qd-editor-icon-hover-color)}.EditableCodeItem_lineGutter__0XEQp,.EditableCodeItem_line__jVnVd{font-family:var(--qd-code-font-family-regular)}.EditableCodeItem_line__jVnVd{color:var(--qd-color-text-1);margin:0;padding:0 10px 0 8px;transition:color .2s;width:100%}.EditableCodeItem_addition__cq7k8 .EditableCodeItem_reset__P1\+iW{background-image:linear-gradient(to right,transparent,var(--qd-color-palegreen) 25%);color:var(--qd-color-lawngreen-80)}.EditableCodeItem_deletion__kS7pe .EditableCodeItem_reset__P1\+iW{background-image:linear-gradient(to right,transparent,var(--qd-color-rose) 25%);color:var(--qd-color-red-80)}.EditableCodeItem_reset__P1\+iW{align-items:center;-webkit-column-gap:2px;column-gap:2px;display:flex;margin-right:15px;transition:background-color .2s,color .2s}.EditableCodeItem_button__sMWLC .EditableCodeItem_resetIcon__AOypW.EditableCodeItem_resetIcon__AOypW{color:var(--qd-color-light-grey);line-height:0}.EditableCodeItem_button__sMWLC:hover .EditableCodeItem_resetIcon__AOypW.EditableCodeItem_resetIcon__AOypW{color:var(--qd-color-blue)}.Profile_download__N6aQj{margin:10px 0}.Profile_prompt__l4Ejl{display:block;font-size:13px;line-height:18px;margin-top:10px}.Profile_resetButton__eDLVD.Profile_resetButton__eDLVD{margin-left:12px;padding:0;transition:color .2s}.Profile_resetButton__eDLVD.Profile_resetButton__eDLVD,.Profile_resetButton__eDLVD.Profile_resetButton__eDLVD:active,.Profile_resetButton__eDLVD.Profile_resetButton__eDLVD:hover{color:var(--qd-color-text-4)}.Profile_icon__Ahi3M{margin-left:7px}.Profile_icon__Ahi3M path{fill:var(--qd-color-text-1);transition:fill .2s}.Profile_warningIcon__wbUBD{margin-right:4px}.Profile_bold__IXAJn:before{content:" "}.Profile_bold__IXAJn{font-weight:500}.Profile_hint__MF9uN{color:var(--qd-color-text-4);display:block;margin-top:6px;transition:color .2s}.Profile_error__7MQ47{margin-top:10px}:root{--gap-size-big:15px;--min-container-width:691px}@media only screen and (min-width:64em){.ProfileSettings_excludedPathsContainer__0DdYu{padding-top:83px}}.ProfileSettings_gapRowBig__7\+sXa.ProfileSettings_gapRowBig__7\+sXa{margin-left:-15px;margin-left:calc(var(--gap-size-big)*-1);margin-right:-15px;margin-right:calc(var(--gap-size-big)*-1)}.ProfileSettings_gapRowBig__7\+sXa .ProfileSettings_gapColumnBig__oW-94{padding-left:15px;padding-left:var(--gap-size-big);padding-right:15px;padding-right:var(--gap-size-big)}.ProfileSettings_checksContainer__wQiXv,.ProfileSettings_profileContainer__3XY-y{min-width:691px;min-width:var(--min-container-width)}.ProfileSettings_profileContainer__3XY-y{overflow-x:hidden}.Notification_wrapper__6OJlL{border-left:4px solid;border-radius:var(--qd-border-radius);padding:8px 16px 12px 12px}.Notification_container__otjAn{display:flex;justify-content:space-between}.Notification_critical__ZIhFd{background-color:var(--qd-color-red-6);border-color:var(--qd-color-red-100)}.Notification_moderate__M9zfw{background-color:var(--qd-color-yellow-6);border-color:var(--qd-color-yellow-100)}.Notification_info__AJ8wz{background-color:var(--qd-color-lavender-6);border-color:var(--qd-color-skyblue-100)}.Notification_success__s-WdA{background-color:var(--qd-color-lawngreen-6);border-color:var(--qd-color-lawngreen-100)}.Notification_header__-w\+jp{font-weight:600;margin-bottom:4px}.Notification_header__-w\+jp.Notification_isCollapsed__EMsQa{margin-bottom:0}.Notification_leftContent__a1m88{flex:1 1}.Notification_rightContent__ZAYzL{display:flex;margin-left:16px}.Notification_controlsSpaceBetween__8XEPP{flex-direction:column}.Notification_controlsCenter__GJ5vg{align-items:center;flex-direction:row}.Notification_closeButton__8kNHL.Notification_closeButton__8kNHL{height:12px;margin-bottom:10px;margin-left:auto;margin-top:6px;padding:0;position:relative;width:12px}.Notification_closeButton__8kNHL svg{left:0;position:absolute;top:0}.Notification_iconButton__CkmaL{transition:color .2s}.Notification_iconButton__CkmaL:hover{color:var(--qd-color-blue)}.Notification_chevronButton__cmCup{align-items:center;display:flex;height:14px;justify-content:center;margin-top:3px;padding-left:0;padding-right:0;-webkit-transform:rotate(180deg);transform:rotate(180deg);width:14px}.Notification_chevronButton__cmCup.Notification_isCollapsed__EMsQa{-webkit-transform:rotate(0);transform:rotate(0)}.SanityProblemsNotification_actionButtons__nNvcO>:not(:first-child){margin-left:8px}.ConfigChangedNotification_codeContainer__kvLDB{align-items:center;display:inline-flex;flex-wrap:nowrap}.ConfigChangedNotification_code__qfRLz{background:var(--qd-color-skyblue-6);border:1px solid var(--qd-color-skyblue-6);border-radius:var(--qd-border-radius);color:var(--qd-color-blue);line-height:16px;padding:1px 6px;transition:color .2s}.bodyQodanaBlocks_dark .ConfigChangedNotification_code__qfRLz{color:var(--qd-color-dt-darkest-blue)}.ProfileChangedNotification_container__DKJEG{background-color:rgba(255,209,33,.12);border-radius:var(--qd-border-radius-smaller);padding:8px 16px}.ProfileChangedNotification_container__DKJEG:not(:last-child){margin-bottom:8px}.ProfileChangedNotification_warning__EbUu\+{align-items:center;display:flex;font-size:13px;justify-content:space-between}.ProfileChangedNotification_warningIcon__0MNk-{color:#efa331;padding-left:8px;vertical-align:-1px}.ProfileChangedNotification_warning__EbUu\+ .ProfileChangedNotification_warningIcon__0MNk-{padding:0 4px 0 0}.ProfileChangedNotification_detailsButton__lkDOW.ProfileChangedNotification_detailsButton__lkDOW{color:var(--qd-color-link);height:16px;line-height:16px;padding:1px 0 0}.ProfileChangedNotification_detailsButton__lkDOW.ProfileChangedNotification_detailsButton__lkDOW:active,.ProfileChangedNotification_detailsButton__lkDOW.ProfileChangedNotification_detailsButton__lkDOW:hover{color:var(--qd-color-hover-link);transition:color .2s}.ProfileChangedNotification_downloadButton__JtIqm{margin-top:8px}.SummaryTabs_tabsContainer__KI35V{display:flex;width:100%}.SummaryTabs_border__vqN-G{border-bottom:1px solid var(--qd-color-summary-tabs-border);flex-grow:1;transition:border-bottom-color .2s}.AlertIcon_alertIcon__OiyQz{color:var(--qd-color-summary-tabs-failed);transition:color .2s}.OverflowingText_ellipsis__V0OWZ{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.OverflowingText_tooltip__36gjW{background-color:var(--qd-color-tooltip-bg);border:none;color:var(--qd-color-text-1);font-size:12px;line-height:18px;max-width:283px;padding:8px 12px}:root{--qd-summary-tabs-padding:12px 16px;--qd-color-baseline-graph-hover:var(--qd-color-dark-blue)}.bodyQodanaBlocks_dark{--qd-color-baseline-graph-hover:var(--qd-color-dt-darkest-blue)}.Tab_wrapper__SqtDM{background-color:var(--qd-color-summary-tabs-bg);border:1px solid var(--qd-color-summary-tabs-border);border-radius:4px 4px 0 0;box-sizing:border-box;cursor:pointer;font-family:var(--qd-font-family);outline:none;padding:0;text-align:left;transition:opacity .2s,background-color .2s,border .2s}.Tab_wrapper__SqtDM:not(:first-child){margin-left:-1px}.Tab_ordinaryTabWidth__IRA3f{min-width:205px;width:205px}.Tab_active__xaygZ,.Tab_wrapper__SqtDM:focus,.Tab_wrapper__SqtDM:hover{background-color:var(--qd-color-summary-tabs-bg-active);border-bottom:1px solid var(--qd-color-main-bg)}.Tab_container__7kbrM{box-sizing:border-box;height:100%;padding:12px 16px;padding:var(--qd-summary-tabs-padding)}.Tab_title__R0c50{margin:0;overflow:hidden;padding:0;text-overflow:ellipsis;white-space:nowrap}.Tab_link__ErevY{color:var(--qd-color-link);transition:color .2s}.Tab_link__ErevY:hover{color:var(--qd-color-hover-link)}.Tab_secondaryTextColor__m0kuq{color:var(--qd-color-summary-tabs-text);transition:color .2s}.Tab_titleSkeleton__PfyNN{margin-bottom:5px;margin-top:5px}.Tab_active__xaygZ .Tab_secondaryTextColor__m0kuq,.Tab_wrapper__SqtDM:focus .Tab_secondaryTextColor__m0kuq,.Tab_wrapper__SqtDM:hover .Tab_secondaryTextColor__m0kuq{color:var(--qd-color-summary-tabs-text-active)}.Tab_statistics__4f15c{align-items:center;color:var(--qd-color-summary-tabs-main-numbers);display:flex;font-size:20px;font-weight:600;line-height:24px;margin:4px 0;transition:color .2s}.Tab_active__xaygZ .Tab_statistics__4f15c,.Tab_wrapper__SqtDM:focus .Tab_statistics__4f15c,.Tab_wrapper__SqtDM:hover .Tab_statistics__4f15c{color:var(--qd-color-summary-tabs-main-numbers-active)}.Tab_changes__3Loji{align-items:center;display:flex;font-size:14px;font-style:normal;font-weight:400;line-height:20px;margin-right:4px;max-width:60px;position:relative}.Tab_negativeColor__fbbou{color:var(--qd-color-summary-tabs-negative);transition:color .2s}.Tab_negativeColor__fbbou path{fill:var(--qd-color-summary-tabs-negative);transition:fill .2s}.Tab_attentionIconColor__s3LuH{color:var(--qd-color-ruby)}.Tab_active__xaygZ .Tab_negativeColor__fbbou,.Tab_wrapper__SqtDM:focus .Tab_negativeColor__fbbou,.Tab_wrapper__SqtDM:hover .Tab_negativeColor__fbbou{color:var(--qd-color-summary-tabs-negative-active)}.Tab_active__xaygZ .Tab_negativeColor__fbbou path,.Tab_wrapper__SqtDM:focus .Tab_negativeColor__fbbou path,.Tab_wrapper__SqtDM:hover .Tab_negativeColor__fbbou path{fill:var(--qd-color-summary-tabs-negative-active)}.Tab_positiveColor__b-BJF.Tab_positiveColor__b-BJF{color:var(--qd-color-summary-tabs-positive);transition:color .2s}.Tab_positiveColor__b-BJF path{fill:var(--qd-color-summary-tabs-positive);transition:fill .2s}.Tab_active__xaygZ .Tab_positiveColor__b-BJF,.Tab_wrapper__SqtDM:focus .Tab_positiveColor__b-BJF,.Tab_wrapper__SqtDM:hover .Tab_positiveColor__b-BJF{color:var(--qd-color-summary-tabs-positive-active)}.Tab_active__xaygZ .Tab_positiveColor__b-BJF path,.Tab_wrapper__SqtDM:focus .Tab_positiveColor__b-BJF path,.Tab_wrapper__SqtDM:hover .Tab_positiveColor__b-BJF path{fill:var(--qd-color-summary-tabs-positive-active)}.Tab_projectAuditAlertColor__hPwyL.Tab_projectAuditAlertColor__hPwyL{color:var(--qd-color-orange-50);transition:color .2s}.Tab_active__xaygZ .Tab_projectAuditAlertColor__hPwyL,.Tab_wrapper__SqtDM:focus .Tab_projectAuditAlertColor__hPwyL,.Tab_wrapper__SqtDM:hover .Tab_projectAuditAlertColor__hPwyL{color:var(--qd-color-orange-100)}.Tab_alertIconAlign__8dXKC.Tab_alertIconAlign__8dXKC{align-items:center;align-self:center;display:flex;height:16px;justify-content:center;width:16px}.Tab_active__xaygZ .Tab_alertColor__THVsd,.Tab_wrapper__SqtDM:focus .Tab_alertColor__THVsd,.Tab_wrapper__SqtDM:hover .Tab_alertColor__THVsd{color:var(--qd-color-summary-tabs-failed-active);transition:color .2s}.Tab_problemsChart__EOPlh path{stroke:var(--qd-color-red-80);transition:stroke .2s,opacity .2s}.Tab_active__xaygZ .Tab_problemsChart__EOPlh path,.Tab_wrapper__SqtDM:focus .Tab_problemsChart__EOPlh path,.Tab_wrapper__SqtDM:hover .Tab_problemsChart__EOPlh path{stroke:var(--qd-color-red-100)}.Tab_problemsChart__EOPlh circle{fill:var(--qd-color-red-80);transition:fill .2s,opacity .2s}.Tab_active__xaygZ .Tab_problemsChart__EOPlh circle,.Tab_wrapper__SqtDM:focus .Tab_problemsChart__EOPlh circle,.Tab_wrapper__SqtDM:hover .Tab_problemsChart__EOPlh circle{fill:var(--qd-color-red-100)}.Tab_baselineChart__0yfkj path{stroke:var(--qd-color-skyblue-80);transition:stroke .2s,opacity .2s}.Tab_active__xaygZ .Tab_baselineChart__0yfkj path,.Tab_wrapper__SqtDM:focus .Tab_baselineChart__0yfkj path,.Tab_wrapper__SqtDM:hover .Tab_baselineChart__0yfkj path{stroke:var(--qd-color-dark-blue);stroke:var(--qd-color-baseline-graph-hover)}.Tab_baselineChart__0yfkj circle{fill:var(--qd-color-skyblue-80);transition:fill .2s,opacity .2s}.Tab_active__xaygZ .Tab_baselineChart__0yfkj circle,.Tab_wrapper__SqtDM:focus .Tab_baselineChart__0yfkj circle,.Tab_wrapper__SqtDM:hover .Tab_baselineChart__0yfkj circle{fill:var(--qd-color-dark-blue);fill:var(--qd-color-baseline-graph-hover)}.Tab_tooltip__sBkPs.Tab_tooltip__sBkPs{background-color:var(--qd-color-tooltip-bg);color:var(--qd-color-text-1);font-size:14px;line-height:20px;max-width:300px;padding:8px 12px}.Tab_failedIconAlign__tmj9y{display:flex}.Counter_arrow__Uw3o3{margin-left:4px;position:relative}.Counter_mainNumber__3hdku.Counter_mainNumber__3hdku{color:inherit;display:block;margin-right:4px;max-width:100px}.Counter_comparingRow__SBj8X{display:flex}.Counter_comparingNumber__dceCT{margin-right:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.Counter_totalChangingNumber__UceLB{align-items:center;display:flex;font-size:14px;font-style:normal;font-weight:400;line-height:20px;margin-right:4px;max-width:60px;position:relative}.Counter_skeleton__hUG5U{margin-bottom:5px;margin-top:2px}.TabTitle_header__4LXzj{margin-bottom:4px;padding:0}:root{--qd-color-tooltip-border:var(--ring-line-color)}.bodyQodanaBlocks_dark{--qd-color-tooltip-border:rgba(var(--ring-line-color),0.1)}.ProblemsTabTooltip_popup__K4ths{background-color:var(--qd-color-tooltip-bg);border:1px solid var(--qd-color-tooltip-border);border-radius:var(--qd-border-radius);box-shadow:var(--qd-dropdown-shadow);box-sizing:border-box;padding:8px;width:300px}.ProblemsTabTooltip_button__S8X5E.ProblemsTabTooltip_button__S8X5E{height:20px;padding:0}.ProjectAuditTab_checkStatus__UAjk7{padding:2px 0 0}.MainContent_controlBar__a8Dmx{margin-top:12px;padding:0 5px 40px}.MainContent_reportBar__lAWEi{margin-top:28px}.MainContent_warningsContainer__dmFbO:not(:empty){margin-top:16px}.MainContent_warningsContainer__dmFbO>:not(:last-child){margin-bottom:12px}.BandAboveList_container__I1Qm1{grid-column-gap:16px;align-items:center;display:grid;grid-template-columns:auto auto 1fr auto;height:32px;margin-bottom:12px}.BandAboveList_searchGroup__8v6yK{display:flex}.BandAboveList_toggle__kJOyg{color:var(--qd-color-grey);display:inline-flex;font-size:13px;line-height:32px;margin-left:12px;transition:color .2s}.BandAboveList_selectLabel__KGXcv.BandAboveList_selectLabel__KGXcv{color:var(--qd-color-text-2)}.BandAboveList_searchInput__MyDM8{max-width:220px;min-width:100px;width:20vw}.BandAboveList_searchInputTC__6JCOs{border-color:var(--ring-borders-color);border-radius:var(--ring-border-radius);font-size:var(--ring-font-size-smaller);height:24px;line-height:14px;margin-top:6px}.BandAboveList_searchInputTC__6JCOs.BandAboveList_searchInputTC__6JCOs span{top:3px}.BandAboveList_searchInputTC__6JCOs.BandAboveList_searchInputTC__6JCOs button{top:-2px}.BandAboveList_searchInputTC__6JCOs input{font-size:var(--ring-font-size-smaller);height:23px;min-height:23px}.BandAboveList_hint__b0fb8{margin-right:20px}.TabsTC_tabs__rkQQD>div{margin-bottom:0!important}.TabsTC_count__MjhWu{color:var(--qd-color-text-2);display:inline-block;font-size:12px;font-weight:400;margin-left:3px}.TabsTC_tabs__rkQQD>div>button[class*=title_rui_]{line-height:32px!important}.TabsTC_tabs__rkQQD>div>button[class*=selected_rui_]{font-weight:700!important}.PromoWarning_container__TAlss{align-items:center;background:var(--qd-color-skyblue-6);border-radius:var(--qd-border-radius);display:flex;margin-bottom:4px;padding:12px 14px}.PromoWarning_icon__r-Rxq{height:12px;margin-right:8px;width:12px}.PromoWarning_icon__r-Rxq path{fill:#45a5f4}.PromoWarning_text__v8YQr{flex:2 1}.Header_row__z-Jzm{border-bottom:1px solid var(--qd-color-border);color:var(--qd-color-text-3);margin-left:0!important;margin-right:0!important;padding-right:23px;position:-webkit-sticky;position:sticky;top:0;transition:border-bottom .2s;vertical-align:middle;z-index:1}.Header_title__YHFDe.Header_title__YHFDe{height:16px;margin-right:5px}.Header_col__9DOFv.Header_col__9DOFv{padding:0}.ListBox_container__Sdsna{margin-bottom:5px;min-height:230px;padding-bottom:12px;width:100%}.ListBox_hint__WFaSJ{color:var(--qd-color-grey);margin-top:40px;max-width:none;overflow-x:hidden;text-align:center;text-overflow:ellipsis}.Hint_container__yilXM{align-items:center;color:var(--qd-color-text-4);cursor:pointer;display:inline-flex;font-size:12px;transition:color .2s}.Hint_icon__R1zdu{margin-left:3px;opacity:.8;padding-right:3px}.Hint_icon__R1zdu>path{fill:var(--qd-color-text-4);transition:fill .2s}.Hint_islandContainer__vOEeD{display:none;position:relative;right:1px;top:2px}.Hint_container__yilXM:hover .Hint_islandContainer__vOEeD.Hint_islandContainer__vOEeD{display:inline;display:initial}.Hint_island__XNBqM.Hint_island__XNBqM{background:var(--qd-color-dropdown-bg);border:0;border-radius:var(--qd-border-radius);box-shadow:var(--qd-popup-box-shadow);color:var(--qd-color-text-1);font-size:12px;line-height:17px;padding:8px 10px;position:absolute;width:190px}.Hint_title__HehiC{font-style:italic;font-weight:500}.SortIcon_letters__Wh2Jp path:nth-child(2),.SortIcon_letters__Wh2Jp path:nth-child(3),.SortIcon_numbers__Lb5wD path:first-child{fill:var(--qd-color-text-1);transition:fill .2s}.SortSelect_container__axSnr{bottom:18px;display:inline-block;position:relative;width:40px}.SortSelect_selectButton__eymwr.SortSelect_selectButton__eymwr{background:transparent;margin-left:3px;padding:0 5px;position:absolute}.SortSelect_selectButton__eymwr.SortSelect_selectButton__eymwr:active,.SortSelect_selectButton__eymwr.SortSelect_selectButton__eymwr:not(:focus){box-shadow:none}.SortSelect_popupContainer__qXDRO{position:relative;right:2px}.SortSelect_popup__fHl7z.SortSelect_popup__fHl7z{background:var(--qd-color-dropdown-bg);border:0;border-radius:var(--qd-border-radius);box-shadow:var(--qd-popup-box-shadow)!important;margin-top:4px}.SortSelect_list__B4Ext.SortSelect_list__B4Ext{width:60px}.SortSelect_list__B4Ext.SortSelect_list__B4Ext div[class*=ReactVirtualized]{outline:none}.SortSelect_list__B4Ext.SortSelect_list__B4Ext button{height:25px!important;padding:0 0 0 10px!important}.SortSelect_list__B4Ext.SortSelect_list__B4Ext button[class*=" hover_"],.SortSelect_list__B4Ext.SortSelect_list__B4Ext button[class^=hover_]{background:var(--qd-color-select-item-hover)}.Title_name__3cQIp{margin-left:16px}.Title_hint__k3gGo{align-items:center;color:var(--qd-color-text-4);display:inline-flex;font-size:12px;line-height:16px;margin-left:5px;transition:color .2s}.Title_checkAllLabel__tQYvk{display:none;visibility:hidden}.FileIcon_triangle__NV84L{position:absolute;right:-3px;top:5px}.FileIcon_triangle__NV84L path{fill:var(--qd-color-text-1);transition:fill .2s}.FileMarker_container__aTudO{display:inline-block;font-family:var(--qd-font-family)}.FileMarker_popupParent__DTU7I{position:relative;right:9px}.FileMarker_popup__HCVRl.FileMarker_popup__HCVRl{background-color:var(--qd-color-dropdown-bg);border:none;border-radius:var(--qd-border-radius);box-shadow:var(--qd-popup-box-shadow)}.FileMarker_button__6WOqN.FileMarker_button__6WOqN{background:transparent;border:none;box-shadow:none;color:var(--qd-color-tree-icon);padding:0}.FileMarker_list__RV9W4.FileMarker_list__RV9W4 button{color:var(--qd-color-text-1);font-family:var(--qd-font-family);font-size:13px;padding:0 9px!important}.FileMarker_list__RV9W4.FileMarker_list__RV9W4 button[class*=" hover_"],.FileMarker_list__RV9W4.FileMarker_list__RV9W4 button[class^=hover_]{background:var(--qd-color-hover-list-item)}.File_file__SKRKx{white-space:nowrap}.File_file__SKRKx:focus,.File_file__SKRKx:hover{background:var(--qd-color-hover-list-item);border-radius:var(--qd-border-radius);outline:none}.File_fileCheckbox__VuRH0:hover{border-radius:0;border-radius:initial}.File_button__nC1bQ.File_button__nC1bQ{height:36px;margin-right:3px;padding:0!important}.File_icon__FJz2h{color:#aeb9c0!important}.File_label__rROwd{background:transparent;border:none;color:var(--qd-color-text-1);cursor:pointer;display:inline-flex;line-height:36px;outline:none;padding:0 3px 0 5px;transition:color .2s;vertical-align:middle;width:100%}.File_description__vjyvE{color:var(--qd-color-text-3);flex:1 0;margin-left:10px}.File_description__vjyvE,.File_fileName__kJPNg{overflow:hidden;text-overflow:ellipsis}.File_fileCheckbox__VuRH0 .File_label__rROwd{width:calc(100% - 54px)}.File_cell__HYZ6z{margin-left:16px}.File_indentation__2Jmmm{margin-left:10px;margin-right:3px}.File_count__Ys1AY{color:var(--qd-color-grey);font-family:var(--qd-font-family);font-size:12px;font-weight:400;margin-left:4px;margin-top:1px;transition:color .2s}.IssueHead_checkBoxShowThings__JlnvN{clip:rect(0 0 0 0);height:0;position:absolute;width:0}.IssueHead_checkBoxShowThings__JlnvN:focus+label .IssueHead_gridProblem__z3S\+0{border-radius:var(--ring-border-radius);box-shadow:inset 0 0 0 1px var(--ring-border-hover-color),0 0 0 1px var(--ring-border-hover-color)}.IssueHead_clickable__2lxZ-{cursor:pointer}.IssueHead_text__pMiHJ{display:block;overflow:hidden;padding-right:8px;text-overflow:ellipsis;white-space:nowrap}.IssueHead_opened__TVnYB .IssueHead_text__pMiHJ{word-wrap:break-word;white-space:normal!important}.IssueHead_comment__FNj5A .IssueHead_text__pMiHJ{padding:0 24px 0 8px}.IssueHead_thirdCol__mXHiu{display:flex;justify-content:space-between}.IssueHead_thirdCol__mXHiu .IssueHead_button__HupEh{margin-right:9px}.IssueHead_gridProblem__z3S\+0.IssueHead_gridProblem__z3S\+0{color:var(--qd-color-text-1);font-family:var(--qd-font-family);font-weight:400;line-height:20px;padding-left:12px;padding-right:8px;transition:color .2s}.IssueHead_row__eaXwL{margin:0!important}.IssueHead_col__SRFpd.IssueHead_col__SRFpd{margin-bottom:7px!important;margin-top:7px!important;overflow-x:hidden;text-overflow:ellipsis;width:90%}.IssueHead_chevron__ToIAS{color:var(--qd-color-grey)}.IssueHead_label__f0V0x:not(.IssueHead_opened__TVnYB) .IssueHead_chevronIcon__rySNC{visibility:hidden}.IssueHead_label__f0V0x:hover .IssueHead_chevronIcon__rySNC{visibility:inherit!important}.IssueHead_commentExtraInfoContainer__wQP8c{margin-top:2px}.IssueHead_comment__FNj5A{flex-basis:0;flex-grow:1;max-width:100%}.IssueHead_button__HupEh{color:var(--qd-color-light-grey);padding:0}.IssueTag_tag__MB4TG.IssueTag_tag__MB4TG,.IssueTag_tag__MB4TG.IssueTag_tag__MB4TG:hover{background:var(--qd-color-tags-bg)!important;border-radius:var(--qd-border-radius);color:var(--qd-color-tags-text);font-size:11px;letter-spacing:.04em;line-height:14px;margin:0 5px 6px 0;padding:5px 6px;text-transform:uppercase;transition:background-color .2s,color .2s;width:auto}.IssueTag_tag__MB4TG.IssueTag_tag__MB4TG:hover{background:var(--qd-color-tags-bg-hover)!important;color:var(--qd-color-tags-text-hover)}.ClickableTooltip_parent__Hzu0n{float:right;position:relative;right:5px;top:11px}.ClickableTooltip_tooltip__ODWaV{word-wrap:break-word;background-color:var(--qd-color-tooltip-bg);border-radius:var(--qd-border-radius);box-shadow:0 10px 20px rgba(0,0,0,.06);color:var(--qd-color-text-1);font-family:var(--qd-font-family);font-size:13px;line-height:16px;overflow-y:auto;padding:8px 12px;position:absolute;white-space:normal!important;width:350px;z-index:10}.Score_container__ODMJT{display:inline-block;margin:0 0 15px 15px}.Score_link__N7JcA{color:var(--qd-color-sea-blue)!important}.Score_donut__nC6k8{margin-right:4px;position:relative;top:2px;-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.Score_hole__1-FsC{fill-opacity:0}.Score_ring__hbkp5{fill:transparent;stroke:var(--qd-color-lighter-grey);stroke-width:7}.Score_segment__vO6yT{fill:transparent;stroke-width:7;stroke-dashoffset:0;stroke:var(--qd-color-darkest-green)}.Score_value__cGfJU{color:var(--qd-color-text-3);font-size:14px;line-height:20px;transition:color .2s}.Score_tooltip__RDw0R{position:absolute}.SeverityIcon_tooltipPopup__xuDPS.SeverityIcon_tooltipPopup__xuDPS{background-color:var(--qd-color-tooltip-bg);border:none;color:var(--qd-color-text-1);padding:6px 10px}.SeverityIcon_icon__zytvx{margin-top:10px}.TaintGraphModal_title__rhSZE h1{font-size:14px;line-height:20px}.IssueDescription_container__MMHPI{display:flex;flex:1 1;flex-direction:column}.IssueDescription_details__saCBY.IssueDescription_details__saCBY{color:var(--qd-color-text-3)}.ActionButtons_buttons__lvWNo.ActionButtons_buttons__lvWNo{height:46px;margin:0;padding:10px 12px}.ExclusionFilterSelect_label__PLLn0.ExclusionFilterSelect_label__PLLn0{color:var(--qd-color-grey);font-size:var(--qd-font-size-base);line-height:20px;padding:0}.ExclusionFilterSelect_popup__4v1a5.ExclusionFilterSelect_popup__4v1a5{background-color:var(--qd-color-dropdown-bg);border:none;border-radius:var(--qd-border-radius);box-shadow:var(--qd-popup-box-shadow);font-family:var(--qd-font-family);max-width:270px;overflow:hidden;padding:5px 0 8px;width:270px}.ExclusionFilterSelect_list__cb0Ga{list-style:none;margin:0;max-width:350px;min-width:150px;padding:0}.ExclusionFilterSelect_itemBtn__8IDsN.ExclusionFilterSelect_itemBtn__8IDsN,.ExclusionFilterSelect_itemCust__fsBn0.ExclusionFilterSelect_itemCust__fsBn0{border-radius:0;color:var(--qd-color-text-1)!important;font-size:13px;height:32px;line-height:32px;overflow:hidden;padding:0 10px 0 16px;text-align:start;text-overflow:ellipsis;transition:none!important;white-space:nowrap;width:100%}.ExclusionFilterSelect_separator__1qKgc{border-bottom:1px solid var(--qd-color-separator);color:var(--qd-color-text-4);font-size:12px;line-height:16px;padding:0 10px 10px 16px}.ExclusionFilterSelect_chevron__35-q\+.ExclusionFilterSelect_chevron__35-q\+{margin-left:2px}.ExclusionFilterSelect_list__cb0Ga li:last-of-type .ExclusionFilterSelect_separator__1qKgc{border-bottom:none}.ExclusionFilterSelect_label__PLLn0.ExclusionFilterSelect_label__PLLn0.ExclusionFilterSelect_active__U9\+Rf,.ExclusionFilterSelect_label__PLLn0.ExclusionFilterSelect_label__PLLn0:hover{color:var(--qd-color-blue);transition:color .2s!important}.ExclusionFilterSelect_label__PLLn0.ExclusionFilterSelect_active__U9\+Rf .ExclusionFilterSelect_chevron__35-q\+,.ExclusionFilterSelect_label__PLLn0.ExclusionFilterSelect_label__PLLn0:hover .ExclusionFilterSelect_chevron__35-q\+{color:var(--qd-color-blue)}.ExclusionFilterSelect_itemBtn__8IDsN:hover.ExclusionFilterSelect_itemBtn__8IDsN:hover{background-color:var(--qd-color-select-item-hover)}.OpenInIDEWarning_popup__GTuNg.OpenInIDEWarning_popup__GTuNg{background-color:var(--qd-color-dropdown-bg);border:none;border-radius:var(--qd-border-radius);box-shadow:var(--qd-dropdown-shadow);color:var(--qd-color-text-1);font-family:var(--qd-font-family);font-size:14px;line-height:20px;margin-left:4px;padding:24px 28px 28px;transition:background-color .2s,color .2s;width:390px}.OpenInIDEWarning_title__bOBMH{font-size:20px;font-weight:600;line-height:24px}.OpenInIDEWarning_subtitle__EX830{margin:12px 0}.OpenInIDEWarning_item__fYHA-{align-items:center;display:flex;margin-bottom:12px}.OpenInIDEWarning_item__fYHA-:last-child{margin-bottom:0}.OpenInIDEWarning_icon__wjTjy{margin-right:8px}.OpenInIDEWarning_hint__5b759{color:var(--qd-color-text-3);font-size:var(--qd-font-size-smaller);line-height:16px;margin-top:12px}.OpenInIDEWarning_buttonContainer__pAbkN{margin-top:24px}.OpenProjectButton_buttonWithSelect__xVV85{--qd-open-project-button-border:1px solid var(--qd-color-border);--qd-open-project-button-active-bg:var(--qd-color-azure);background:var(--qd-color-main-bg);display:flex;flex-wrap:nowrap;margin-right:16px;transition:background-color .2s}.bodyQodanaBlocks_dark .OpenProjectButton_buttonWithSelect__xVV85{--qd-open-project-button-active-bg:var(--qd-color-2-layer)}.OpenProjectButton_button__4gGI1.OpenProjectButton_button__4gGI1{align-items:center;background:var(--qd-color-main-bg);border:var(--qd-open-project-button-border);border-radius:var(--qd-border-radius) 0 0 var(--qd-border-radius);box-shadow:none;box-sizing:border-box;color:var(--qd-color-text-1)!important;cursor:pointer;display:flex;flex-wrap:nowrap;font-family:var(--qd-font-family);font-size:14px;height:28px;line-height:26px;margin:0;padding-left:12px;padding-right:12px;transition:border-right .2s,color .2s,background-color .2s,border-color .2s;white-space:nowrap}.OpenProjectButton_button__4gGI1 svg{margin-right:4px}.OpenProjectButton_button__4gGI1 span{align-items:center;border-bottom:0!important;display:flex;flex-wrap:nowrap}.OpenProjectButton_button__4gGI1.OpenProjectButton_button__4gGI1:active,.OpenProjectButton_button__4gGI1.OpenProjectButton_button__4gGI1:hover{border-color:var(--qd-color-button-border-hover);text-decoration:none}.OpenProjectButton_button__4gGI1:active,.bodyQodanaBlocks_dark .OpenProjectButton_button__4gGI1:hover{background-color:var(--qd-open-project-button-active-bg)}.OpenProjectButton_button__4gGI1:focus-visible{border-radius:var(--qd-border-radius);outline:var(--qd-outline);outline-offset:0;z-index:1}.OpenProjectButton_selectContainer__h8QAc.OpenProjectButton_selectContainer__h8QAc{--qd-select-line-height:1}.OpenProjectButton_selectLabel__637Af.OpenProjectButton_selectLabel__637Af{align-items:center;border:var(--qd-open-project-button-border);border-left-color:transparent;border-radius:0 var(--qd-border-radius) var(--qd-border-radius) 0;display:inline-flex;height:28px!important;justify-content:center;margin-left:-1px;width:28px}.OpenProjectButton_selectLabel__637Af.OpenProjectButton_selectLabel__637Af.OpenProjectButton_selectLabel__637Af{transition:border-color .2s,color .2s!important}.OpenProjectButton_selectLabelOpened__TFCv-.OpenProjectButton_selectLabelOpened__TFCv-,.OpenProjectButton_selectLabel__637Af.OpenProjectButton_selectLabel__637Af.OpenProjectButton_selectLabel__637Af:hover,.OpenProjectButton_selectLabel__637Af:active{border-left:var(--qd-open-project-button-border);border-color:var(--qd-color-button-border-hover);transition:border-color .2s,color .2s!important}.OpenProjectButton_selectLabelOpened__TFCv-.OpenProjectButton_selectLabelOpened__TFCv-,.OpenProjectButton_selectLabel__637Af.OpenProjectButton_selectLabel__637Af:active,.bodyQodanaBlocks_dark .OpenProjectButton_selectLabel__637Af.OpenProjectButton_selectLabel__637Af:hover{background-color:var(--qd-open-project-button-active-bg)}.OpenProjectButton_selectLabel__637Af.OpenProjectButton_selectLabel__637Af:focus-visible{border-radius:var(--qd-border-radius);box-shadow:none;outline:var(--qd-outline)}.OpenProjectButton_button__4gGI1:disabled,.OpenProjectButton_selectLabel__637Af.OpenProjectButton_selectLabel__637Af:disabled{background:var(--qd-color-button-disabled-bg);border-color:var(--qd-color-button-disabled-border);color:var(--qd-color-button-disabled-text)!important;cursor:default;pointer-events:none}.OpenProjectButton_button__4gGI1:disabled svg,.OpenProjectButton_selectLabel__637Af.OpenProjectButton_selectLabel__637Af:disabled svg{opacity:.5;pointer-events:none}.OpenProjectButton_selectChevronIcon__X47Su.OpenProjectButton_selectChevronIcon__X47Su{align-items:center;box-sizing:border-box;display:flex;justify-content:center;margin:0!important}.OpenProjectButton_selectChevron__XkE9U.OpenProjectButton_selectChevron__XkE9U{color:var(--qd-color-light-grey);height:12px}.OpenProjectButton_selectList__CNqDk{min-width:95px}.OpenProjectButton_selectList__CNqDk li:last-child{margin-bottom:6px!important}.OpenProjectButton_selectList__CNqDk.OpenProjectButton_selectList__CNqDk li button{height:28px;line-height:28px}.OpenProjectButton_itemContainer__zaj61{padding-left:8px;padding-right:20px}.CodeSkeleton_line__JqeCC{border-top:1px solid var(--qd-color-border);transition:border .2s}.CodeSkeleton_codeLine__Waw9n{padding:4px 0}.CodeSkeleton_detailInfo__E\+cgN{padding:10px 20px}.CodeWrapper_messageInLine__OejRK{color:var(--ring-secondary-color);display:block;font-style:italic;padding-top:10px}.Code_grid__9Yk5Z{display:grid;margin-bottom:0;margin-top:0;overflow-x:auto}.Code_hljsContainer__s0UOb{margin-left:-10px}.hljs.hljs.hljs{background:var(--qd-color-main-bg);color:var(--qd-hljs-color)!important;display:block;overflow-x:auto;transition:color .2s,background .2s}.hljs-addition.hljs-addition.hljs-addition{background:var(--qd-hljs-addition-color-bg);transition:color .2s,background .2s}.hljs-attribute.hljs-attribute.hljs-attribute{color:var(--qd-hljs-attribute-color);font-weight:var(--qd-hljs-attribute-font-w);transition:color .2s,background .2s}.hljs-bullet.hljs-bullet.hljs-bullet{background:var(--qd-hljs-bullet-color-bg);color:var(--qd-hljs-bullet-color);font-style:var(--qd-hljs-bullet-font-s);transition:color .2s,background .2s}.hljs-comment.hljs-comment.hljs-comment{color:var(--qd-hljs-comment-color);font-style:var(--qd-hljs-comment-font-s);transition:color .2s,background .2s}.hljs-deletion.hljs-deletion.hljs-deletion{background:var(--qd-hljs-deletion-color-bg);color:var(--qd-hljs-deletion-color);transition:color .2s,background .2s}.hljs-doctag.hljs-doctag.hljs-doctag{-webkit-text-decoration:var(--qd-hljs-doctag-text-dec);text-decoration:var(--qd-hljs-doctag-text-dec);transition:color .2s,background .2s}.hljs-emphasis.hljs-emphasis.hljs-emphasis{font-style:var(--qd-hljs-emphasis-font-s);transition:color .2s,background .2s}.hljs-formula.hljs-formula.hljs-formula{background:var(--qd-hljs-formula-color-bg);color:var(--qd-hljs-formula-color);font-style:var(--qd-hljs-formula-font-s);transition:color .2s,background .2s}.hljs-keyword.hljs-keyword.hljs-keyword{color:var(--qd-hljs-keyword-color);font-weight:var(--qd-hljs-keyword-font-w);transition:color .2s,background .2s}.hljs-link.hljs-link.hljs-link{color:var(--qd-hljs-link-color);font-weight:var(--qd-hljs-link-font-w);transition:color .2s,background .2s}.hljs-literal.hljs-literal.hljs-literal{color:var(--qd-hljs-literal-color);font-weight:var(--qd-hljs-literal-font-w);transition:color .2s,background .2s}.hljs-meta.hljs-meta.hljs-meta{color:var(--qd-hljs-meta-color);transition:color .2s,background .2s}.hljs-name.hljs-name.hljs-name{color:var(--qd-hljs-name-color);font-weight:var(--qd-hljs-name-font-w);transition:color .2s,background .2s}.hljs-number.hljs-number.hljs-number{color:var(--qd-hljs-number-color);font-weight:var(--qd-hljs-number-font-w);transition:color .2s,background .2s}.hljs-quote.hljs-quote.hljs-quote{color:var(--qd-hljs-quote-color);font-style:var(--qd-hljs-quote-font-s);transition:color .2s,background .2s}.hljs-regexp.hljs-regexp.hljs-regexp{color:var(--qd-hljs-regexp-color);font-weight:var(--qd-hljs-regexp-font-w);transition:color .2s,background .2s}.hljs-section.hljs-section.hljs-section{color:var(--qd-hljs-section-color);font-weight:var(--qd-hljs-section-font-w);transition:color .2s,background .2s}.hljs-selector-class.hljs-selector-class.hljs-selector-class{color:var(--qd-hljs-selector-class-color);font-weight:var(--qd-hljs-selector-class-font-w);transition:color .2s,background .2s}.hljs-selector-id.hljs-selector-id.hljs-selector-id{color:var(--qd-hljs-selector-id-color);font-weight:var(--qd-hljs-selector-id-font-w);transition:color .2s,background .2s}.hljs-selector-tag.hljs-selector-tag.hljs-selector-tag{color:var(--qd-hljs-selector-tag-color);font-weight:var(--qd-hljs-selector-tag-font-w);transition:color .2s,background .2s}.hljs-string.hljs-string.hljs-string{color:var(--qd-hljs-string-color);font-weight:var(--qd-hljs-string-font-w);transition:color .2s,background .2s}.hljs-strong.hljs-strong.hljs-strong{font-weight:var(--qd-hljs-strong-font-w);transition:color .2s,background .2s}.hljs-subst.hljs-subst.hljs-subst{color:var(--qd-hljs-subst-color);font-weight:var(--qd-hljs-subst-font-w);transition:color .2s,background .2s}.hljs-symbol.hljs-symbol.hljs-symbol{background:var(--qd-hljs-symbol-color-bg);color:var(--qd-hljs-symbol-color);font-style:var(--qd-hljs-symbol-font-s);transition:color .2s,background .2s}.hljs-tag.hljs-tag.hljs-tag{transition:color .2s,background .2s}.hljs-template-variable.hljs-template-variable.hljs-template-variable{color:var(--qd-hljs-template-variable-color);transition:color .2s,background .2s}.hljs-title.hljs-title.hljs-title{color:var(--qd-hljs-title-color);font-weight:var(--qd-hljs-title-font-w);transition:color .2s,background .2s}.hljs-type.hljs-type.hljs-type{color:var(--qd-hljs-type-color);font-weight:var(--qd-hljs-type-font-w);transition:color .2s,background .2s}.hljs-variable.hljs-variable.hljs-variable{color:var(--qd-hljs-variable-color);transition:color .2s,background .2s}.CodeError_addedPart__9Ljb-,.CodeError_removedPart__zpOHr{border-radius:2px}.CodeError_removedPart__zpOHr{background:var(--qd-color-red-50)}.CodeError_addedPart__9Ljb-{background:var(--qd-color-palegreen50)}.CodeError_marker__Ko2zv{background:var(--qd-color-red-100);border-radius:2px;font-size:12px;line-height:16px;margin:0 3px 0 1px;padding:2px 6px}.CodeError_marker__Ko2zv,.CodeError_marker__Ko2zv span{color:var(--qd-color-white)!important}.CodeError_errorCode__htMMi.CodeError_errorCode__htMMi{display:inline-block;position:relative}.CodeError_waveLine__vbFUh{background-image:url(../../versions/VERSION_ID/media/line..svg);background-position:bottom;background-repeat:repeat-x;bottom:0;display:block;height:20px;left:0;pointer-events:none;position:absolute;right:0;top:0}.CodeLineNumber_number__KvV34,.CodeLineNumber_number__KvV34 span{background:transparent!important;color:var(--qd-color-grey)!important;display:inline-block;font-size:12px;font-style:normal;font-weight:400;line-height:20px;margin-left:2px;pointer-events:none;text-align:right;-webkit-user-select:none;user-select:none;vertical-align:top}.CodeLineNumber_single__oSnWx{width:15px}.CodeLineNumber_twoDigit__iuxLp{width:23px}.CodeLineNumber_threeDigit__vDN7Y{width:30px}.CodeLineNumber_fourDigit__g5u8A{width:38px}.Line_critical__9yJC\+,.Line_removed__Sw3H2{background-color:var(--qd-color-alert-line-severity-critical)!important}.Line_high__QWJuH{background-color:var(--qd-color-alert-line-severity-high)!important}.Line_moderate__Saz72{background-color:var(--qd-color-alert-line-severity-moderate)!important}.Line_low__aPnUs{background-color:var(--qd-color-alert-line-severity-low)!important}.Line_info__GppJ4{background-color:var(--qd-color-alert-line-severity-info)!important}.Line_added__pKQei{background-color:var(--qd-color-alert-line-severity-add)!important}.Line_line__fd9mA{display:inline-block;font-size:12px;height:20px;padding-right:14px;vertical-align:middle}.Line_line__fd9mA code{display:inline-block;font-family:JetBrains Mono Regular,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Cantarell,Droid Sans,Helvetica Neue,Arial,sans-serif;line-height:20px;overflow-x:visible;overflow-x:initial;padding-left:10px}.Line_part__8rZRD{display:inline-block}.Line_multiLineErr__rTuyV:before{content:" "}.PathButton_button__i3TUh.PathButton_button__i3TUh{color:var(--qd-color-blue);font-family:JetBrains Mono Regular,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Cantarell,Droid Sans,Helvetica Neue,Arial,sans-serif;font-size:13px;height:auto;margin:0 0 6px;padding:0;text-align:left;transition:color .2s!important;word-break:break-all}.PathButton_button__i3TUh.PathButton_button__i3TUh:hover{color:var(--qd-color-dark-blue)}.PathButton_disabled__7bQQb.PathButton_disabled__7bQQb{color:var(--qd-color-text-2)}.PathButton_icon__nOpeh.PathButton_icon__nOpeh{bottom:4px;margin-right:6px;position:relative;vertical-align:bottom}.SourceFile_root__mWIt9{box-sizing:border-box;display:flex;flex-direction:column;height:100%;padding:10px 12px 6px}.SourceFile_code__1aYNc{flex:1 1;overflow-y:auto}.Duplicates_duplicateBorder__FKDMl{border-bottom:1px solid var(--qd-color-code-snippet-border);border-left:1px solid var(--qd-color-code-snippet-border);transition:border .2s}.Duplicates_duplicateContainer__Bw6We{margin:0 -1px}.Duplicates_duplicates__gN-Oh.Duplicates_duplicates__gN-Oh{display:grid;grid-template-columns:50% 50%;grid-template-rows:auto}.SourceTypes_section__5TqRQ{border-top:1px solid var(--qd-color-border);transition:border .2s}.SourceTypes_sources__4Lrv6{display:flex;flex-direction:column;overflow:hidden}.SourceTypes_summary__tddu8{color:var(--qd-color-text-3);display:block;font-size:14px;line-height:20px;padding:10px 12px 6px;transition:border .2s}.SourceTypes_sourceFile__QCjkd{flex:1 1;overflow:hidden}.GluingChunks_root__ZtJpA{background-color:var(--qd-color-alert-line-severity-low);height:24px;width:100%}.GluingChunks_lineNumberPlaceholder__T3Lq4{text-align:center;width:24px}.Issue_root_withCheckbox__zFWMr>div{display:inline-block;vertical-align:top;width:calc(100% - 18px)}.Issue_root_withCheckbox__zFWMr .Issue_checkbox__nC0qq label{opacity:0}.Issue_checked__Tmgu6.Issue_checked__Tmgu6 label,.Issue_root_withCheckbox__zFWMr .Issue_checkbox__nC0qq label:focus-within,.Issue_root_withCheckbox__zFWMr:hover .Issue_checkbox__nC0qq label{opacity:1}.Issue_islandContainer_opened__ucd3w{overflow:hidden}.Issue_islandContainer_closed__9mSqN:focus-within,.Issue_islandContainer_closed__9mSqN:hover{background:var(--qd-color-hover-list-item);border-radius:var(--qd-border-radius);transition:none}.Issue_islandContainer_closed__9mSqN>div{border:1px solid transparent}.Issue_island__JFjmY.Issue_island__JFjmY{background-color:var(--qd-color-main-bg);border:1px solid var(--qd-color-border);box-shadow:none;box-sizing:border-box;display:flex;height:calc(100% - 4px);margin-bottom:4px;transition:background-color .2s,border .2s}.Issue_error__bbmNg{align-items:center;display:flex;height:26px;justify-content:center}.IssueCheckboxWrapped_checkbox__KpEdJ{display:inline-block;padding-top:10px;position:relative;width:18px}.IssueCheckboxWrapped_hiddenLabel__szJBn{display:none;visibility:hidden}.IssueCheckboxWrapped_tooltipPopup__VLi8N{background-color:var(--qd-color-tooltip-bg);border:none;color:var(--qd-color-text-1);margin-left:12px;margin-top:-1px;padding:8px 12px;width:260px}.IssueErrorBoundary_description__BlU4w{color:var(--qd-color-text-2);padding:0 0 20px 12px}.Marker_container__8AYpY{display:inline-block;font-family:var(--qd-font-family)}.Marker_button__woSmG.Marker_button__woSmG{background:transparent;border:none;box-shadow:none;color:var(--qd-color-tree-icon)!important;padding:0}.Marker_disable__Yowdt.Marker_disable__Yowdt{cursor:inherit}.Marker_list__xDvTz.Marker_list__xDvTz button{color:var(--qd-color-text-1);font-family:var(--qd-font-family);font-size:13px;padding:0 9px!important}.Marker_list__xDvTz.Marker_list__xDvTz button[class*=" hover_"],.Marker_list__xDvTz.Marker_list__xDvTz button[class^=hover_]{background:var(--qd-color-hover-list-item)}.Marker_popupParent__PuoI6{position:relative;right:9px}.Marker_popup__6uXVs.Marker_popup__6uXVs{background-color:var(--qd-color-dropdown-bg);border:none;border-radius:var(--qd-border-radius);box-shadow:var(--qd-popup-box-shadow);width:200px}.Marker_label__W40yt{display:inline-block;line-height:30px;margin-left:3px}.Marker_optionPic__aDtr1{float:right;line-height:30px}.ScopeIcon_testSourcesRoot__T2HyF.ScopeIcon_testSourcesRoot__T2HyF{color:rgba(98,181,67,.6)!important;padding-right:2px}.ScopeIcon_sourcesRoot__o8\+uT.ScopeIcon_sourcesRoot__o8\+uT{color:rgba(64,182,224,.6)!important;padding-right:2px}.ScopeIcon_default__n8pq-.ScopeIcon_default__n8pq-{color:rgba(154,167,176,.8)!important;padding-right:2px}.ScopeIcon_excluded__ebrOT.ScopeIcon_excluded__ebrOT{color:rgba(242,101,34,.6)!important;padding-right:2px}.ScopeIcon_imgWrapper__Rfdvj{display:inline-block;height:21px;position:relative;width:16px}.ScopeIcon_img__6fzj5{display:inline-flex;vertical-align:-4px}.ScopeIcon_resourcesRoot__V4dOq{padding-left:1px}.ScopeIcon_generateSourceRoot__N-nQ5{padding-left:1px;vertical-align:-3px}.ScopeIcon_triangle__UHeZU{position:absolute;right:-1px;top:6px}.ScopeIcon_triangle__UHeZU path{fill:var(--qd-color-text-1);transition:fill .2s}.Folder_folder__GThXc{align-items:center;display:flex;position:relative;white-space:nowrap}.Folder_folder__GThXc:hover{background:var(--qd-color-hover-list-item);border-radius:var(--qd-border-radius)}.Folder_folderCheckbox__P-Cm-:hover{border-radius:0;border-radius:initial}.Folder_button__d7adH.Folder_button__d7adH{color:var(--qd-color-text-1);height:36px;margin-right:3px;padding:0!important}.Folder_icon__cA1Sk{color:var(--qd-color-tree-select-chevron)!important}.Folder_label__O8IgW{background:transparent;border:none;color:var(--qd-color-text-1);cursor:pointer;display:inline-flex;font-weight:500;line-height:36px;outline:none;padding:0 3px 0 5px;transition:color .2s;vertical-align:middle;width:100%}.Folder_description__BLo7n{color:var(--qd-color-text-3);flex:1 0;margin-left:10px}.Folder_description__BLo7n,.Folder_folderName__yrphW{overflow:hidden;text-overflow:ellipsis}.Folder_checkable__szJWX{font-weight:400;width:calc(100% - 45px)}.Folder_count__mv5cp{color:var(--qd-color-grey);font-family:var(--qd-font-family);font-size:12px;font-weight:400;margin-left:4px;margin-top:1px;transition:color .2s}.Folder_checkboxWrapped__q954E{display:inline-block}.Folder_checkboxWrapped_absolute__UVym1{left:15px;position:absolute}.Group_title__CnHws{color:var(--qd-color-text-1);display:block;font-family:var(--qd-font-family);font-size:13px;font-weight:700;margin:12px 0 4px!important;max-width:100%;overflow-x:hidden;padding-left:12px;text-overflow:ellipsis;transition:color .2s;white-space:nowrap}.Group_notFound__7S1hb{color:var(--ring-dark-line-color)}.Group_toggle__XOxPR{margin-right:8px}.IssueList_container__k4Lfr{display:inline-block;margin-bottom:10px;width:100%}.IssueList_pager__Ijm4o{font-family:var(--qd-font-family);font-weight:400;margin-top:15px}.IssueList_pager__Ijm4o.IssueList_pager__Ijm4o button{color:var(--qd-color-link)}.IssueList_pager__Ijm4o.IssueList_pager__Ijm4o button:active,.IssueList_pager__Ijm4o.IssueList_pager__Ijm4o button:hover{color:var(--qd-color-hover-link)}.ListSkeleton_col__bAVgI{overflow:hidden;padding-left:13px}.ListSkeleton_container__OaeRV{margin-top:6px;padding-left:4px}.ListSkeleton_row__ZOmbF{margin:3px 0 5px;padding-left:2px}.ListSkeleton_row__ZOmbF~.ListSkeleton_row__ZOmbF{margin:0 0 6px}.ListSkeleton_skeletonAdjust__S2J-4{margin:1px 0 0 -5px}.ListSkeleton_last__ETPw0{margin-right:23px}.ProblemPage_controlBar__pqtJ-{padding-bottom:40px}.ProblemPage_button__\+kG69.ProblemPage_button__\+kG69{color:var(--qd-color-link);height:20px;padding:0}.ProblemPage_noBaselineText__PCrce{line-height:20px;padding-top:64px;text-align:center}.ProblemPage_moveToBaselineButton__7M2XY.ProblemPage_moveToBaselineButton__7M2XY{margin-top:20px}.Filters_filtersWrapper__2Ll\+a{overflow-x:hidden;width:100%}.Filters_locationFilters__QJq8x,.Filters_orderScope__Be6SR,.Filters_savedWrapper__Z8Tp2{margin-left:40px}.Filters_orderControls__7Oz0x,.Filters_orderScope__Be6SR,.Filters_saveFilters__JVydC{display:inline-block}.Filters_saveFilters__JVydC{margin-right:8px}.Filters_buttonsContainer__01ycp{margin-top:4px}.DraggableContainer_wrapper__7SYLh{border-radius:4px;display:flex;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.DraggableContainer_isDragged__DnS0J{box-shadow:var(--qd-popup-box-shadow)}.DraggableContainer_dragHandle__B5azU{height:10px;margin:0 8px 0 4px;outline:none;padding:12px 0 10px}.DraggableContainer_dragHandle__B5azU:focus{box-shadow:inset 0 0 0 1px var(--ring-border-hover-color),0 0 0 1px var(--ring-border-hover-color)}.GenericFilters_filterListReordering__mkKoz{margin-left:-18px}.GenericFilters_select__5UUyj{padding:7px 9px 7px 0}.GenericFilters_selectLabel__1dVn6.GenericFilters_selectLabel__1dVn6{font-size:14px;line-height:20px}.GenericFilters_reordering__mu2fO{color:var(--qd-color-text-1)!important}.HiddenProblemsSwitch_container__fBIpu{height:20px;padding:6px 0}.HiddenProblemsSwitch_select__p2gBA{display:inline-flex;margin-left:6px;overflow-x:hidden}.HiddenProblemsSwitch_list__kh1-y{min-width:175px}.HiddenProblemsSwitch_label__yC5WV.HiddenProblemsSwitch_label__yC5WV{color:var(--qd-color-text-1);font-size:14px;line-height:20px;transition:color .2s}.HiddenProblemsSwitch_turnedOff__Rt9dm .HiddenProblemsSwitch_label__yC5WV{color:var(--qd-color-grey)}.HiddenProblemsSwitch_disabled__L86Kz .HiddenProblemsSwitch_label__yC5WV{color:var(--qd-color-light-grey)}.RemoveModal_modal__PGhCW{margin:300px auto 0}.RemoveModal_title__saYOJ{color:var(--qd-color-text-1);font-size:18px;font-weight:700;line-height:24px;margin-bottom:16px;padding:0}.RemoveModal_buttonsGroup__UP6q7{margin-top:16px}.RemoveModal_primary__yWfwu.RemoveModal_primary__yWfwu{background:var(--qd-color-blue);margin-right:10px}.RemoveModal_secondary__-c1Gy.RemoveModal_secondary__-c1Gy{background-color:var(--qd-color-main-bg)!important;box-shadow:inset 0 0 0 1px var(--qd-color-empty-rect-btn-border)!important;color:var(--qd-color-text-1)!important;font-family:var(--qd-font-family);font-size:12px;font-weight:400;height:26px;line-height:20px;margin-right:8px;padding:3px 12px;transition:all .2s}.RemoveModal_secondary__-c1Gy.RemoveModal_secondary__-c1Gy:active,.RemoveModal_secondary__-c1Gy.RemoveModal_secondary__-c1Gy:hover{box-shadow:inset 0 0 0 1px var(--qd-color-blue-40)!important}.EmptySearchMessage_container__3lhyi{text-align:center}.EmptySearchMessage_message__WspSe{color:var(--qd-color-text-2);display:inline-block;margin:8px 0;padding:0 16px}.TreeWrapperFixedSize_rootContainer__zfwEG{display:flex;flex-direction:column;position:relative}.TreeWrapperFixedSize_scrollerContainer__Q0FjJ{flex:1 1 auto;overflow-x:hidden;overflow-y:auto}.TreeWrapperFixedSize_top__g0oq4{top:32px}.ButtonsWrapper_container__95Y7O{margin:8px 20px 4px 16px}.ButtonsWrapper_button__rDFJM.ButtonsWrapper_button__rDFJM{border:none;color:var(--qd-color-blue);font-family:var(--qd-font-family);font-size:13px;height:20px;line-height:20px;padding:0;text-align:start;transition:color .2s!important}.ButtonsWrapper_button__rDFJM.ButtonsWrapper_button__rDFJM:hover{color:var(--qd-color-dark-blue)}.ButtonsWrapper_message__1dhOh{color:var(--qd-color-text-4);font-family:var(--qd-font-family);font-size:13px;line-height:20px}.ButtonsWrapper_resetMarkers__hCGE5.ButtonsWrapper_resetMarkers__hCGE5{align-items:center;display:inline-flex;float:right}.ButtonsWrapper_tooltip__D0gKH.ButtonsWrapper_tooltip__D0gKH{background:var(--qd-color-dropdown-bg);border:0;border-radius:var(--qd-border-radius);box-shadow:var(--qd-popup-box-shadow);color:var(--qd-color-text-1);font-family:var(--qd-font-family);font-size:13px;height:60px;margin-left:10px;margin-top:-4px;padding:10px 12px;width:250px}.ButtonsWrapper_icon__z38ua{cursor:pointer;margin-left:4px;opacity:.8;padding-top:2px}.ButtonsWrapper_icon__z38ua>path{fill:var(--qd-color-text-4);transition:fill .2s}.Content_line__Ysn5B{border-top:1px solid var(--qd-color-border)}.InputWrapper_input__6Ztkx{font-family:var(--qd-font-family);margin-left:14px!important;padding:0!important;width:100%}.InputWrapper_input__6Ztkx.InputWrapper_input__6Ztkx input{color:var(--qd-color-text-1);width:calc(100% - 14px)}.InputWrapper_input__6Ztkx.InputWrapper_input__6Ztkx input::-webkit-input-placeholder{color:var(--qd-color-light-grey)}.InputWrapper_input__6Ztkx.InputWrapper_input__6Ztkx input::placeholder{color:var(--qd-color-light-grey)}.InputWrapper_input__6Ztkx.InputWrapper_input__6Ztkx svg{fill:var(--qd-color-light-grey)}.ScopeFilter_container__QVc1T{border-bottom:1px solid var(--qd-color-border);color:var(--qd-color-text-1);font-family:var(--qd-font-family);padding:10px 20px 12px 16px}.ScopeFilter_title__RFIcn{color:var(--qd-color-text-2);font-size:12px;font-style:normal;font-weight:400;letter-spacing:2px;line-height:16px;text-transform:uppercase}.ScopeFilter_options__vVS\+U{font-size:13px;line-height:32px;margin-top:6px}.ScopeFilter_option__I\+SUV{display:flex;justify-content:space-between}.ScopeFilter_toggleLabel__OlXod{cursor:pointer;display:inline-block;width:100%}.ScopeFilter_label__vRA-l{margin-left:5px}.InlineSelect_icon__nQfgG.InlineSelect_icon__nQfgG{height:0}.InlineSelect_icon__nQfgG.InlineSelect_icon__nQfgG svg{fill:var(--qd-color-text-1);transition:fill .2s}.InlineSelect_tooltipPopup__t9LmZ.InlineSelect_tooltipPopup__t9LmZ{background-color:var(--qd-color-tooltip-bg);border:none;color:var(--qd-color-text-1);max-width:750px;padding:6px 10px}.InlineSelect_inline__2\+HqK.InlineSelect_inline__2\+HqK:hover .InlineSelect_icon__nQfgG svg{fill:var(--qd-color-blue);transition:fill .2s}.InlineSelect_inline__2\+HqK.InlineSelect_inline__2\+HqK{color:var(--qd-color-text-1);font-family:var(--qd-font-family);font-size:14px;height:26px;padding:0!important;transition:color .2s}.InlineSelect_inline__2\+HqK.InlineSelect_inline__2\+HqK:hover{color:var(--qd-color-blue);transition:color .2s}.InlineSelect_closeButton__0psyA.InlineSelect_closeButton__0psyA{display:inline-block;padding:0!important}.InlineSelect_close__XH3Sx.InlineSelect_close__XH3Sx{color:var(--qd-color-light-grey)!important;padding-left:7px;transition:color .2s!important}.InlineSelect_close__XH3Sx.InlineSelect_close__XH3Sx:hover{color:var(--qd-color-blue)!important;transition:color .2s!important}.InlineSelect_disabled__rTgqx .InlineSelect_close__XH3Sx,.InlineSelect_disabled__rTgqx .InlineSelect_inline__2\+HqK{color:var(--qd-color-light-grey)!important}.TreeSelect_container__wwHDV{display:inline-block;margin-right:16px;white-space:nowrap}.TreeSelect_selectActive__XC9Lm.TreeSelect_selectActive__XC9Lm{color:var(--qd-color-blue);transition:color .2s}.TreeSelect_selectActive__XC9Lm.TreeSelect_selectActive__XC9Lm svg{fill:var(--qd-color-blue);transition:fill .2s}.TreeSelect_island__Okm06.TreeSelect_island__Okm06{background-color:var(--qd-color-dropdown-bg);border:none!important;border-radius:var(--qd-border-radius);box-shadow:var(--qd-popup-box-shadow);font-size:13px!important;max-height:551px;overflow:hidden;padding:0 0 8px!important;position:absolute;width:380px;z-index:5}.LocationFilters_wrapper__rJ020{margin-bottom:2px;overflow-x:hidden;width:100%}.LocationFilters_container__-MSRd{display:flex}.OrderControls_btn__ftQ67{margin-right:8px!important}.EditPopup_popup__qF4q0.EditPopup_popup__qF4q0{background-color:var(--qd-color-dropdown-bg);border:none;border-radius:var(--qd-border-radius);box-shadow:var(--qd-popup-box-shadow);margin-top:4px;padding:12px 16px 16px}.EditPopup_input__zyHxA.EditPopup_input__zyHxA{font-family:var(--qd-font-family)}.EditPopup_input__zyHxA.EditPopup_input__zyHxA input{color:var(--qd-color-text-1)}.EditPopup_buttons__7M5Vy{display:flex;margin-top:16px}.EditPopup_saveBtn__6rjra.EditPopup_saveBtn__6rjra{margin-right:8px}.EditPopup_deleteBtn__aA9hH.EditPopup_deleteBtn__aA9hH.EditPopup_deleteBtn__aA9hH{color:var(--qd-color-red-100);margin-left:auto;padding:0}.EditPopup_deleteBtn__aA9hH.EditPopup_deleteBtn__aA9hH.EditPopup_deleteBtn__aA9hH:hover{color:var(--qd-color-ruby)}.EditPopup_storybookEx__m7NLU{border:2px solid red}.SavedFiltersSelect_controls__XR5y1{align-items:center;display:flex}.SavedFiltersSelect_controlsWithClose__yzn32{padding-right:14px}.SavedFiltersSelect_triggerBtn__efNLt.SavedFiltersSelect_triggerBtn__efNLt{background-color:transparent;border:none;color:var(--qd-color-text-1);cursor:pointer;font-family:var(--qd-font-family);font-size:13px;font-weight:400;height:18px;line-height:18px;margin:0;padding:0;transition:color .2s}.SavedFiltersSelect_triggerBtn__efNLt.SavedFiltersSelect_active__AquCV,.SavedFiltersSelect_triggerBtn__efNLt:hover{color:var(--qd-color-blue);transition:color .2s}.SavedFiltersSelect_triggerBtnContent__yfLgF{align-items:center;display:flex}.SavedFiltersSelect_triggerBtnContent__yfLgF,.SavedFiltersSelect_triggerBtn__efNLt.SavedFiltersSelect_triggerBtn__efNLt{outline:none}.SavedFiltersSelect_triggerBtn__efNLt:focus>.SavedFiltersSelect_triggerBtnContent__yfLgF{border-radius:2px;box-shadow:var(--qd-focus-box-shadow)}.SavedFiltersSelect_triggerBtn__efNLt.SavedFiltersSelect_active__AquCV .SavedFiltersSelect_chevron__asay\+ svg,.SavedFiltersSelect_triggerBtn__efNLt.SavedFiltersSelect_active__AquCV .SavedFiltersSelect_starIcon__CWXfS svg,.SavedFiltersSelect_triggerBtn__efNLt:hover .SavedFiltersSelect_chevron__asay\+ svg,.SavedFiltersSelect_triggerBtn__efNLt:hover .SavedFiltersSelect_starIcon__CWXfS svg{fill:var(--qd-color-blue)}.SavedFiltersSelect_starIcon__CWXfS svg{fill:var(--qd-color-saved-filters-select-icon);transition:fill .2s}.SavedFiltersSelect_chevron__asay\+ svg{fill:var(--qd-color-text-1);transition:fill .2s}.SavedFiltersSelect_starIcon__CWXfS.SavedFiltersSelect_starIcon__CWXfS{display:inline-block;margin-right:4px}.SavedFiltersSelect_label__Eq4Uz{display:inline-block;max-width:300px;overflow:hidden;text-overflow:ellipsis;vertical-align:-4px;white-space:nowrap}.SavedFiltersSelect_chevron__asay\+.SavedFiltersSelect_chevron__asay\+{margin:0 4px 0 2px}.SavedFiltersSelect_chevron__asay\+.SavedFiltersSelect_chevron__asay\+ svg{height:14px}.SavedFiltersSelect_closeBtn__RWgW1{background-color:transparent;border:none;cursor:pointer;height:18px;margin:0;padding:0}.SavedFiltersSelect_closeBtn__RWgW1 svg{fill:var(--qd-color-light-grey);transition:fill .2s}.SavedFiltersSelect_closeBtn__RWgW1:hover svg{fill:var(--qd-color-grey);transition:fill .2s}.SavedFiltersSelect_closeBtnContent__06Vut,.SavedFiltersSelect_closeBtn__RWgW1{outline:none}.SavedFiltersSelect_closeBtn__RWgW1:focus>.SavedFiltersSelect_closeBtnContent__06Vut{border-radius:2px;box-shadow:var(--qd-focus-box-shadow)}.SavedFiltersSelect_popup__MRp3h.SavedFiltersSelect_popup__MRp3h{background-color:var(--qd-color-dropdown-bg);border:none;border-radius:var(--qd-border-radius);box-shadow:var(--qd-popup-box-shadow);margin-top:4px;min-width:180px}.SavedFiltersSelect_list__D7kWd{list-style:none;margin:4px 0 8px;padding:0}.SavedFiltersSelect_listItem__hrz\+c{display:flex;height:32px}.SavedFiltersSelect_listItem__hrz\+c:hover{background-color:var(--qd-color-select-item-hover)}.SavedFiltersSelect_itemBtn__oyYNP.SavedFiltersSelect_itemBtn__oyYNP{color:var(--qd-color-text-1);flex-grow:1;font-family:var(--qd-font-family);font-size:13px;height:32px;padding:0 0 0 16px;text-align:start}.SavedFiltersSelect_itemBtn__oyYNP.SavedFiltersSelect_itemBtn__oyYNP:hover{color:var(--qd-color-text-1)}.SavedFiltersSelect_editBtn__KfriY.SavedFiltersSelect_editBtn__KfriY{height:32px;opacity:0;padding:0 12px}.SavedFiltersSelect_editBtn__KfriY.SavedFiltersSelect_editBtn__KfriY svg{fill:var(--qd-color-blue-40);transition:fill .2s}.SavedFiltersSelect_editBtn__KfriY.SavedFiltersSelect_editBtn__KfriY:hover svg{fill:var(--qd-color-blue);transition:fill .2s}.SavedFiltersSelect_editBtn__KfriY:focus.SavedFiltersSelect_editBtn__KfriY:focus,.SavedFiltersSelect_listItem__hrz\+c:hover .SavedFiltersSelect_editBtn__KfriY{opacity:1}.SavedFiltersSelect_storybookEx__ClU2L{margin:40px 0 0 30px}.SavedFiltersWrapper_container__ByYYg{display:flex}.SavedFiltersWrapper_savedFilters__by2t\+{align-self:center;flex-shrink:0;margin-bottom:9px;margin-right:8px}@media (max-width:1100px){.SavedFiltersWrapper_container__ByYYg{flex-wrap:wrap}}.SaveFilters_button__vldj1.SaveFilters_button__vldj1{margin-left:4px;padding:0}.SaveFilters_button__vldj1 .SaveFilters_icon__23zpp.SaveFilters_icon__23zpp{color:var(--qd-color-light-grey)}.SaveFilters_button__vldj1:focus .SaveFilters_icon__23zpp.SaveFilters_icon__23zpp,.SaveFilters_button__vldj1:hover .SaveFilters_icon__23zpp.SaveFilters_icon__23zpp{color:var(--qd-color-blue)}.SaveFilters_button__vldj1[disabled] .SaveFilters_icon__23zpp.SaveFilters_icon__23zpp{color:var(--qd-color-lighter-grey)}.SaveFilters_icon__23zpp{transition:color .2s}.SaveFilters_tooltip__WUcMT.SaveFilters_tooltip__WUcMT{background-color:var(--qd-color-tooltip-bg);border:none;color:var(--qd-color-text-1);padding:6px 10px}.SelectedTags_tag__zgPSN{background:var(--qd-color-tags-bg);border-radius:var(--qd-border-radius);color:var(--qd-color-tags-text);display:inline-block;font-size:12px;line-height:14px;margin:0 5px 6px 0;padding:0 6px;transition:color .2s,background .2s}.SelectedTags_tag__zgPSN:hover{background:var(--qd-color-tags-bg-hover)!important;color:var(--qd-color-tags-text-hover)}.SelectedTags_button__69wow.SelectedTags_button__69wow{background:transparent;border-radius:0;border-radius:initial;box-shadow:none;padding-left:4px!important;padding-right:3px!important}.SelectedTags_icon__kuowP{color:var(--qd-color-tags-action-button)!important;transition:all .2s!important}.SelectedTags_tag__zgPSN:hover .SelectedTags_icon__kuowP{color:var(--qd-color-tags-text-hover)!important}.TagFilters_container__u3sMm{padding:6px 0}.TagFilters_title__i-wmS{color:var(--qd-color-text-1);display:inline-block;line-height:26px;margin:0 5px 0 0;transition:color .2s}.TagFilters_selectLabel__Eq\+ap.TagFilters_selectLabel__Eq\+ap.TagFilters_selectLabel__Eq\+ap{color:var(--qd-color-blue);display:inline-block;transition:color .2s}.TagFilters_selectLabel__Eq\+ap.TagFilters_selectLabel__Eq\+ap,.TagFilters_title__i-wmS{font-size:14px;line-height:20px}.TagFilters_selectLabel__Eq\+ap.TagFilters_selectLabel__Eq\+ap:active,.TagFilters_selectLabel__Eq\+ap.TagFilters_selectLabel__Eq\+ap:hover{color:var(--qd-color-dark-blue)}.bodyQodanaBlocks_dark .TagFilters_selectLabel__Eq\+ap.TagFilters_selectLabel__Eq\+ap:active,.bodyQodanaBlocks_dark .TagFilters_selectLabel__Eq\+ap.TagFilters_selectLabel__Eq\+ap:hover{color:var(--qd-color-dt-darkest-blue)}.TagFilters_selectContainer__SArfX.TagFilters_selectContainer__SArfX{display:inline-flex;overflow-x:hidden}.TagFilters_selectPopup__llzUS.TagFilters_selectPopup__llzUS{width:280px}.TagFilters_disabled__Rmb7j .TagFilters_selectLabel__Eq\+ap.TagFilters_selectLabel__Eq\+ap,.TagFilters_disabled__Rmb7j .TagFilters_title__i-wmS{color:var(--qd-color-select-button-disabled-text)}.FiltersSkeleton_container__0te5L{align-items:center;display:flex;height:100%;margin-left:40px}.FiltersSkeleton_row__QcaQd{height:34px}.FiltersSkeleton_buttonsRow__EL9M9{height:24px;margin-top:10px}.SunburstContainer_circle__qY7RL{flex-shrink:0}.VisualisedFilters_wrapper__m5UEm{display:flex;margin-top:24px}.VisualisedFilters_warningWrapper__8gy8r{min-height:63px;padding-bottom:12px}.VisualisedFilters_warningWrapper__8gy8r div[class*=warning]:nth-child(2){margin-top:12px}.VisualisedFilters_alignFilters__Z4apy{align-items:center;display:flex;height:100%}.ExcludeSanityModal_modal__6FJoN.ExcludeSanityModal_modal__6FJoN{margin-top:30vh}.ExcludeSanityModal_content__iTo0m{display:block;margin:16px 0 40px}.ExcludeSanityModal_profileName__8imne{font-weight:bolder}.ExportButton_title__OLZ-d{color:var(--qd-color-grey);font-size:12px;font-style:normal;font-weight:400;letter-spacing:2px;line-height:16px;margin-left:16px;margin-right:16px;margin-top:12px;text-transform:uppercase}.ExportButton_popup__KfZDx.ExportButton_popup__KfZDx{background-color:var(--qd-color-dropdown-bg);border:none;border-radius:var(--qd-border-radius);box-shadow:var(--qd-popup-box-shadow);color:var(--qd-color-grey);font-family:var(--qd-font-family);margin-top:4px}.ExportButton_items__JsZFp{list-style:none;margin:4px 0 0;padding:0}.ExportButton_items__JsZFp li:hover{background-color:var(--qd-color-select-item-hover)}.ExportButton_selectItem__EXApX{border:none!important;color:var(--qd-color-sea-blue);cursor:pointer;font-family:var(--qd-font-family)!important;font-size:13px!important;height:32px!important;line-height:32px!important;text-align:start!important;width:100%!important}.ExportButton_selectItem__EXApX:hover{color:var(--qd-color-sea-blue)}.ExportButton_selectItem__EXApX[disabled]{color:var(--qd-color-light-grey)!important}.ExportButton_separator__brJV8{border-bottom:1px solid var(--qd-color-border);margin:7px 0}.ExportButton_checkUnit__NOx\+w{padding:4px 16px}.ExportButton_hint__6sNKV{color:var(--qd-color-grey);font-size:12px;line-height:16px;min-width:190px}.ExportButton_footer__KYWa6{padding:1px 16px 20px}.ExportButton_helpIcon__U7w-i path{fill:var(--qd-color-help-select-trigger-icon)!important;transition:fill .2s!important}.ExportButton_helpBtn__omUfO:hover .ExportButton_helpIcon__U7w-i path{fill:var(--qd-color-blue)!important}.ExportButton_downloadButton__-wKQB{background-color:var(--qd-color-main-bg);box-shadow:inset 0 0 0 1px var(--qd-color-empty-rect-btn-border);color:var(--qd-color-text-1);height:26px;padding:0 8px;transition:all .2s}.ExportButton_downloadButton__-wKQB:hover,.ExportButton_downloadButton_isActive__dx6eD{box-shadow:inset 0 0 0 1px var(--qd-color-blue-40)}.ExportButton_icon__BhnmT path{fill:var(--qd-color-text-1)}.ExportButton_tooltipPopup__NKoKW.ExportButton_tooltipPopup__NKoKW{background-color:var(--qd-color-tooltip-bg);border:none;color:var(--qd-color-text-1);font-size:13px;line-height:18px;margin-left:15px;margin-top:-5px;padding:10px 12px}.Controls_container__jl7On{display:flex;justify-content:space-between}.Controls_controls__wxlqw{align-items:center;display:flex}.Controls_search__yrcEY{margin:0 16px 0 4px;width:240px}.Controls_buttonSelect__bS8Ht.Controls_buttonSelect__bS8Ht{height:28px;margin-right:8px;width:200px}.Controls_buttonSelect__bS8Ht.Controls_buttonSelect__bS8Ht>div>button{font-size:13px}.Controls_popup__p1j47.Controls_popup__p1j47{background-color:var(--qd-color-dropdown-bg);border:none;box-shadow:var(--qd-popup-box-shadow)}.Controls_popup__p1j47.Controls_popup__p1j47 div[class*=ReactVirtualized]{outline:none}.Controls_popup__p1j47.Controls_popup__p1j47 span{color:var(--qd-color-text-1)}.Controls_popup__p1j47.Controls_popup__p1j47 button[class*=hover]{background-color:var(--qd-color-azure)}.EmptyProjectAuditHint_skeleton__zeI9M{height:20px;margin:0 auto;width:300px}.EmptyProjectAuditHint_toggleInspectionSection__Pzh3f{margin:8px 0}.EmptyProjectAuditHint_alertMessage__RqsBL{color:var(--qd-color-text-2);line-height:20px;margin-top:16px}.DependencyTitle_container__Sov3k{position:relative}.DependencyTitle_homepageUrl__1CZr8,.DependencyTitle_name__mPQR4,.DependencyTitle_version__jj1r6{display:block;float:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.DependencyTitle_homepageUrl__1CZr8,.DependencyTitle_name__mPQR4{max-width:36%}.DependencyTitle_version__jj1r6{max-width:15%}.DependencyTitle_homepageUrl__1CZr8,.DependencyTitle_version__jj1r6{margin-left:5px}.DependencyTitle_homepageUrl__1CZr8{color:var(--qd-color-text-5);line-height:20px}.License_warningNone__ubscN,.License_warningUnknown__iqoVk{align-items:center;display:flex}.License_button__bBAeR,.License_link__s8Yc0{border:initial;height:20px;line-height:20px}.License_button__bBAeR.License_button__bBAeR{background:none;padding:0}.License_error__vfiVc.License_error__vfiVc,.License_warning__0eFAH.License_warning__0eFAH{color:var(--qd-color-bronze)!important;white-space:nowrap}.License_error__vfiVc.License_error__vfiVc{color:var(--qd-color-ruby)!important}.Dependency_container__BRYLv{border-color:var(--qd-color-border)}.Dependency_heading__Qjc5h{display:flex;padding:6px 20px}.Dependency_title__a56GV{box-sizing:border-box;display:block;flex:0 0 54%}.Dependency_transitive__fYI\+n .Dependency_title__a56GV{width:inherit}.Dependency_decorativePointer__ClRfW{border-bottom:1px solid var(--qd-color-border);border-left:1px solid var(--qd-color-border);bottom:4px;display:inline-block;float:left;height:16px;margin-right:4px;position:relative;transition:border .2s;width:8px}.Dependency_chevronDown__Lg1Aw .Dependency_chevron__VgbWk.Dependency_chevron__VgbWk{display:block;-webkit-transform:rotate(90deg);transform:rotate(90deg)}.Dependency_button__kZvzo{align-items:center;display:flex;float:left;height:20px;padding:0 6px 0 0}.Dependency_chevron__VgbWk.Dependency_chevron__VgbWk{color:var(--qd-color-text-1)}.Dependency_button__kZvzo:hover .Dependency_chevron__VgbWk.Dependency_chevron__VgbWk{color:var(--qd-color-blue)!important}.Module_header__4CTdt{background:var(--qd-color-light-grey-5);padding:8px 11px}.Module_header__4CTdt,.Module_tableHeader__bzCv\+{border-bottom:1px solid var(--qd-color-border);transition:border .2s}.Module_tableHeader__bzCv\+{color:var(--qd-color-text-2);display:flex;margin:12px 12px 4px;padding:0 8px 2px}.Module_tableHeader__bzCv\+ span:first-child{display:block;width:54%}.Module_table__XAxm0{border:1px solid var(--qd-color-border);border-radius:var(--qd-border-radius);margin-bottom:20px;transition:border .2s}.Module_title__1qyuX{font-family:var(--qd-code-font-family-regular);font-size:12px}.Module_name__EuWab{font-family:var(--qd-code-font-family-bold)}.LicenseRules_controls__Ng8GH{display:flex;justify-content:space-between;margin-top:16px}.LicenseRules_leftControls__QjSfY{display:flex}.LicenseRules_search__7wOeP.LicenseRules_search__7wOeP{background:var(--qd-drawer-background);height:28px;line-height:11px;margin-bottom:16px;width:230px}.LicenseRules_search__7wOeP.LicenseRules_search__7wOeP input{font-size:13px;height:24px;line-height:18px;min-height:24px}.LicenseRules_search__7wOeP.LicenseRules_search__7wOeP button{top:0!important}.LicenseRules_header__asFNv,.LicenseRules_list__xOjOU{grid-row-gap:12px;display:grid;grid-template-columns:1fr 1fr 1fr}.LicenseRules_header__asFNv{border-bottom:1px solid var(--qd-color-project-audit-header-line);color:var(--qd-color-text-2);font-size:12px;margin-bottom:12px;padding-bottom:2px}.LicenseRules_list__xOjOU{height:348px;overflow:auto}.LicenseRules_allowedLicenses__XCz0H>span,.LicenseRules_prohibitedLicenses__jCW0J>span{display:block;margin:6px 0}.LicenseRules_allowedLicenses__XCz0H>span:first-child,.LicenseRules_prohibitedLicenses__jCW0J>span:first-child{margin-top:0}.LicenseRules_allowedLicenses__XCz0H{color:var(--qd-color-darkest-green)}.LicenseRules_prohibitedLicenses__jCW0J{color:var(--qd-color-red-100)}.LicenseRules_buttonSelect__No8Fv.LicenseRules_buttonSelect__No8Fv{height:28px;margin-right:8px;width:150px}.LicenseRules_buttonSelect__No8Fv.LicenseRules_buttonSelect__No8Fv>div>button{font-size:13px}.LicenseRules_popup__mzQt3.LicenseRules_popup__mzQt3{background-color:var(--qd-color-dropdown-bg);border:none;box-shadow:var(--qd-popup-box-shadow)}.LicenseRules_popup__mzQt3.LicenseRules_popup__mzQt3 div[class*=ReactVirtualized]{outline:none}.LicenseRules_popup__mzQt3.LicenseRules_popup__mzQt3 span{color:var(--qd-color-text-1)}.LicenseRules_popup__mzQt3.LicenseRules_popup__mzQt3 button[class*=hover]{background-color:var(--qd-color-azure)}.ProjectAuditSummary_container__aKmhY{border:1px solid var(--qd-color-border);border-radius:var(--qd-border-radius);padding:16px 20px;transition:border .2s}.ProjectAuditSummary_licenseRulesButton__yhZhW{color:var(--qd-color-text-1);margin-top:16px;padding:0;-webkit-text-decoration:underline dashed var(--qd-color-border) 1px;text-decoration:underline dashed var(--qd-color-border) 1px;text-underline-offset:2px;transition:.2s}.ProjectAuditSummary_licenseRulesModal__Zd8jI{overflow:hidden}.LicenseDetails_description__qh4UL{display:block;margin:16px 0 0;transition:color .2s}.LicenseDetails_tables__Gwupc{align-items:flex-start;display:flex;margin-top:20px;transition:color .2s}.LicenseDetails_tables__Gwupc table{margin-right:40px}.LicenseDetails_tables__Gwupc:last-child{margin:0}.LicenseDetails_tables__Gwupc td{color:var(--qd-color-text-2);font-size:12px;line-height:16px;padding:3px 0}.LicenseDetails_caption__vxIFO{color:var(--qd-color-text-1);font-weight:500;padding-bottom:5px;text-align:left;transition:color .2s;white-space:nowrap}.LicenseDetails_link__bRvIs{display:block;margin:20px 0 10px}.ProjectLicense_licenseButton__dpf2t{color:var(--qd-color-text-1);height:auto;margin-bottom:4px;padding:0;text-align:left;-webkit-text-decoration:underline dashed var(--qd-color-border) 1px;text-decoration:underline dashed var(--qd-color-border) 1px;text-underline-offset:2px;transition:.2s}.ProjectLicense_licenseButton__dpf2t[disabled]{background:none;text-decoration:none}.ProjectLicense_popupContent__qsnoQ{height:100%}.ProjectLicense_alertIcon__2SwGx{color:var(--qd-color-orange-100)}.ProjectAudit_container__JxlNQ{grid-gap:20px;display:grid;grid-template-columns:repeat(4,1fr);margin-top:16px}.ProjectAudit_controls__fNh90{grid-column-end:5;grid-column-start:1}.ProjectAudit_dependencies__7SnTT{grid-column-end:4;grid-column-start:1}.ProjectAudit_summary__8KxxJ{grid-column-end:5;grid-column-start:4}.ProjectAudit_search__Ux0js{width:240px}.ProjectAudit_searchHint__kLHbE{color:var(--qd-color-text-2);display:flex;justify-content:center;margin-top:30px}.ProjectAudit_searchHint__kLHbE span{display:block;max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.Promo_modal__2sA3j.Promo_modal__2sA3j{max-height:90%;overflow:auto}.Promo_controlBar__xTtVq{padding:0 5px 40px}.PromoHeader_subtitle__1vo-0{color:var(--qd-color-text-2);display:block;margin:4px 0 0}.SanityModal_modal__KfOJF.SanityModal_modal__KfOJF{max-height:90%;overflow:auto}.SanityModal_controlBar__KbNkk{padding:0 5px 40px}.SanityModalHeader_subtitle__srQ9u{color:var(--qd-color-text-2);display:block;margin:4px 0 0}.Tip_popup__A3se4{background-color:var(--qd-color-onboarding-tip-bg);border:none;border-radius:6px;box-shadow:var(--qd-popup-box-shadow);box-sizing:border-box;color:var(--qd-color-onboarding-tip-content);font-family:var(--qd-font-family);padding:8px 16px;position:absolute;transition:background-color .2s,color .2s;z-index:4}.Tip_popup__A3se4.Tip_left__IzVsl:before,.Tip_popup__A3se4.Tip_right__pKkqW:before{content:"";height:8px;position:absolute;top:15px;-webkit-transform:rotate(45deg);transform:rotate(45deg);width:8px}.Tip_popup__A3se4.Tip_right__pKkqW:before{background:linear-gradient(45deg,var(--qd-color-onboarding-tip-bg) 50%,transparent 50%);left:-4px}.Tip_popup__A3se4.Tip_left__IzVsl:before{background:linear-gradient(45deg,transparent 50%,var(--qd-color-onboarding-tip-bg) 50%);right:-4px}.Tip_popup__A3se4 p{font-size:13px;line-height:18px;margin:0 0 6px}.Tip_popup__A3se4 div{display:flex;justify-content:space-between}.Tip_btn__k2gS3.Tip_btn__k2gS3{border:none;font-family:var(--qd-font-family);font-size:11px;height:18px;line-height:18px;margin:0;padding:0;text-transform:uppercase;transition:color .2s}.Tip_btn__k2gS3.Tip_hide__iS\+74{color:var(--qd-color-onboarding-tip-hide);transition:color .2s}.Tip_btn__k2gS3.Tip_hide__iS\+74:hover{color:var(--qd-color-onboarding-tip-hide-hover);transition:color .2s}.Tip_btn__k2gS3.Tip_next__51XN4{color:var(--qd-color-onboarding-tip-next);transition:color .2s}.Tip_btn__k2gS3.Tip_next__51XN4:hover{color:var(--qd-color-onboarding-tip-next-hover);transition:color .2s}.FilesBadge_container__RMv09{color:var(--qd-color-grey);font-family:var(--qd-font-family);font-size:14px;line-height:18px;white-space:nowrap}.FilesBadge_title__YDXOc{color:var(--qd-color-grey);display:inline-block;font-size:14px;font-weight:600;margin:0;padding:0}.FilesBadge_fileContainer__zbMzH{margin-left:8px}.FilesBadge_fileContainer__zbMzH~.FilesBadge_fileContainer__zbMzH{margin-left:16px}.FilesBadge_fileContainer__zbMzH img{margin-right:5px;vertical-align:-2px}.FilesBadge_number__T6xbM{color:var(--qd-color-ruby);font-size:12px;font-weight:500;margin-left:5px}.FilesBadge_diff__nhBkp{color:var(--qd-color-grey);margin-left:16px}.Preview_container__6J\+2m{color:var(--qd-color-grey);display:flex;margin:10px;overflow:hidden}.Preview_sunburstContainer__r\+ByE{flex-shrink:0}.Preview_circleMessage__S4F05 h2,.Preview_circleMessage__S4F05 p{color:var(--qd-color-grey)!important}.Preview_textContainer__cC1dL{margin-left:20px;position:relative}.Preview_centeredContainer__hWop-{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.Preview_summaryActive__6owqj{height:42px}.Preview_severityBox__Vwlfm{margin:0 0 21px;padding:0}.Preview_severityItem__\+gPGe{list-style:none}.Preview_severityItem__\+gPGe~.Preview_severityItem__\+gPGe{margin-top:9px}.SeverityBadge_container__RZPKC{align-items:center;display:flex;height:18px;line-height:18px}.SeverityBadge_icon__ZL2AA{height:14px;width:14px}.SeverityBadge_text__MqEW9{font-family:var(--qd-font-family);font-weight:400}.SeverityBadge_name__qXCyN{font-size:14px;margin:0 4px}.SeverityBadge_problems__9k0dC{color:var(--qd-color-ruby);font-size:12px;font-weight:500}.SeverityBadge_storybookWrapper__7QYYA{margin:5px;padding:0}.SeverityBadge_storybookWrapper__7QYYA li{list-style:none;margin:5px}.ToolsBadge_container__Q1CVC{color:var(--qd-color-text-2);font-family:var(--qd-font-family);font-size:14px;line-height:18px;margin-bottom:10px}.ToolsBadge_label__El0KN{color:var(--qd-color-grey);display:inline-block;font-size:14px;font-weight:600;margin:0 4px 0 0;padding:0}body{background:var(--qd-color-main-bg);color:var(--qd-color-text-1);font-family:var(--qd-font-family);font-size:14px;font-weight:400;line-height:20px;margin:0;transition:color .2s,background .2s}.CloudPromotionNotification_list__NYDS\+{margin-bottom:12px;margin-top:12px;padding-left:0}.CloudPromotionNotification_list__NYDS\+>.CloudPromotionNotification_listItem__gzUXq{list-style-type:none;margin:0;padding:0}.CloudPromotionNotification_container__vzxBP{margin-top:8px}.CloudPromotionNotification_button__b-hN8:hover{color:var(--ring-white-text-color);text-decoration:none}.HelpMenuItem_button__wRBFu{border:none!important;color:var(--qd-color-text-1)!important;cursor:pointer!important;font-family:var(--qd-font-family)!important;height:32px!important;line-height:32px!important;text-align:start!important;width:100%!important}.HelpMenuItem_button__wRBFu[disabled]{color:var(--qd-color-button-disabled-text)!important}.HelpMenuItem_link__IfWre{color:var(--qd-color-text-1)!important;display:block!important;font-style:normal!important;font-weight:400!important;line-height:32px!important;padding:0 16px!important;text-decoration:none!important}.HelpMenuItem_externalIcon__eZ-KD{padding:4px;vertical-align:-5px}.HelpMenu_triggerBtn__3h3P1{padding-top:1px!important}.HelpMenu_triggerIcon__Vjx-6 path{fill:var(--qd-color-help-select-trigger-icon)!important;transition:fill .2s!important}.HelpMenu_triggerBtn__3h3P1:hover .HelpMenu_triggerIcon__Vjx-6 path{fill:var(--qd-color-blue)!important}.HelpMenu_triggerIcon__Vjx-6.HelpMenu_disabled__WF4S0 path{fill:var(--qd-color-light-grey)!important}.HelpMenu_popup__DO1UG{background-color:var(--qd-color-dropdown-bg)!important;border:none!important;border-radius:var(--qd-border-radius)!important;box-shadow:var(--qd-popup-box-shadow)!important;font-family:var(--qd-font-family)!important;margin-top:4px!important;min-width:180px!important;padding-bottom:8px!important}.HelpMenu_popupPad__gUtR8{padding-bottom:16px!important}.HelpMenu_items__cOT57{list-style:none;margin:6px 0 0;padding:0}.HelpMenu_items__cOT57 li:hover,.HelpMenu_items__cOT57 li:hover .HelpMenu_externalIcon__0F-si{background-color:var(--qd-color-select-item-hover)}.HelpMenu_externalIcon__0F-si path{fill:var(--qd-color-help-select-external-icon)}.HelpMenu_tabSets__SGRTn{padding:0 16px}.HelpMenu_tabSetHeading__fZs3M{color:var(--qd-color-grey);font-size:12px;font-weight:400;letter-spacing:2px;line-height:16px;margin:8px 0 10px;padding:0;text-transform:uppercase}.HelpMenu_additional__ag4V5{color:var(--qd-color-help-select-additional);display:block;padding:12px 0 0 16px}.Standalone_pageWidth__6I61e{box-sizing:border-box;min-width:890px}.Standalone_promotion__V6-xO{margin-top:20px;padding-left:5px;padding-right:5px}.ReportOnboarding_root__1-HMh{--qd-project-setup-text-max-width:350px;display:flex;flex:1 1;flex-direction:column;padding:12px 0 28px}.ReportOnboarding_footer__f6yW2{color:var(--qd-color-text-3);flex-grow:0;flex-shrink:0;font-size:13px;margin-top:auto;padding:0 28px;transition:color .2s}.ReportOnboarding_additionalItem__otWqf>button{cursor:auto}.ReportOnboarding_additionalItem__otWqf.ReportOnboarding_additionalItem__otWqf:hover{background:none}.BaselineExample_root__TQL9K{display:flex}.BaselineExample_root_vertical__ifcwI{flex-direction:column}.BaselineExample_problemstabsContainer__A085I{display:flex;padding:0 0 1px 1px;pointer-events:none}.BaselineExample_problemstabsExplanation__gcQ5x{color:var(--qd-color-text-3);font-size:12px;line-height:16px;margin:4px 1px 0}.BaselineExample_arrowContainer__K1yx4{align-items:center;color:var(--qd-color-text-2);display:flex;justify-content:center;padding:0 8px 20px 5px}.BaselineExample_arrowContainer_vertical__Lk70p{justify-content:flex-start;padding:8px 0}.BaselineExample_problemsTab__mxpd3.BaselineExample_problemsTab__mxpd3,.BaselineExample_problemsTab__mxpd3.BaselineExample_problemsTab__mxpd3:hover{--qd-summary-tabs-padding:6px 10px;background-color:transparent;border-bottom:1px solid var(--qd-color-summary-tabs-border);cursor:default;min-width:135px;width:135px}.BaselineExample_totalClassName__5E8GM{font-size:14px;line-height:20px}.BaselineExample_totalChangingClassName__AHBQO{font-size:12px;font-weight:400;line-height:16px}.BaselineExample_negativeText__xL\+BT{color:var(--qd-color-summary-tabs-negative-active)}.BaselineExample_positiveText__hDWL6{color:var(--qd-color-summary-tabs-positive-active)}.BaselineExample_problemsTabHeader__QMomM.BaselineExample_problemsTabHeader__QMomM{color:var(--qd-color-text-3);font-size:10px;letter-spacing:1px;line-height:14px;padding:0}:root{--qd-knowledge-base-fade-gradient:linear-gradient(180deg,hsla(0,0%,100%,.19),#fff);--qd-knowledge-base-tabs-list-shadow-color:var(--qd-color-light-grey);--qd-knowledge-base-model-title-border-color:var(--qd-color-lighter-grey)}.bodyQodanaBlocks_dark{--qd-knowledge-base-fade-gradient:linear-gradient(180deg,rgba(36,39,43,.26) 0%,var(--qd-color-1-layer) 100%);--qd-knowledge-base-tabs-list-shadow-color:var(--qd-color-dt-light-grey40);--qd-knowledge-base-model-title-border-color:var(--qd-color-dt-light-grey40)}.KnowledgeBase_modalTitle__BYwQ\+{border-bottom-color:currentcolor;border-bottom-color:var(--qd-color-lighter-grey);border-bottom:1px solid var(--qd-knowledge-base-model-title-border-color);padding-bottom:16px;padding-left:28px;padding-right:28px}.KnowledgeBase_popup__Xqecf.KnowledgeBase_popup__Xqecf{overflow:auto;padding:20px 0 28px}.KnowledgeBase_contentWrapper__kSEhQ{box-sizing:border-box;display:flex;flex-direction:row;height:380px;overflow:auto;padding:12px 28px 0}.KnowledgeBase_content__1vDC9{padding-right:32px;width:557px}div.KnowledgeBase_exampleContainer__doU-l{padding-bottom:8px;padding-top:8px}.KnowledgeBase_paddedTop__8fHAo{margin-top:41px}.KnowledgeBase_contentContainer__OOJfe>h2{padding-bottom:4px;padding-top:0}.KnowledgeBase_contentContainer__OOJfe>p{margin-bottom:4px;margin-top:4px}.KnowledgeBase_fade__PL7C3{background:transparent;bottom:28px;box-sizing:border-box;height:51px;margin-left:28px;margin-right:28px;pointer-events:none;position:absolute;transition:background .2s!important;width:684px}.KnowledgeBase_fadeActive__pgDpy{background:linear-gradient(180deg,hsla(0,0%,100%,.19),#fff);background:var(--qd-knowledge-base-fade-gradient)}.KnowledgeBase_tabs__2WVrL{left:617px;line-height:16px;padding-top:28px;position:absolute}.KnowledgeBase_tabsList__H8-qI{box-shadow:1px 0 0 0 var(--qd-color-light-grey) inset;box-shadow:1px 0 0 0 var(--qd-knowledge-base-tabs-list-shadow-color) inset}.KnowledgeBase_tabsList__H8-qI>li:first-child>.KnowledgeBase_tab__im5CX{padding-top:3px}.KnowledgeBase_tabsList__H8-qI>li:last-child>.KnowledgeBase_tab__im5CX{padding-bottom:2px}.KnowledgeBase_tab__im5CX{color:var(--qd-color-text-3);padding:4px 0 4px 8px}.KnowledgeBase_tabSelected__EAfmB{border-left:2px solid var(--qd-color-blue);color:var(--qd-color-text-1);font-weight:400;padding-left:6px;text-shadow:none}.KnowledgeBase_tabContent__s2vwf{display:inline-block;height:16px}.ProjectSetup_paragraph__\+ISYc{margin:0 0 12px;max-width:var(--qd-project-setup-text-max-width)}.Baseline_list__df7St{list-style-type:none;margin:0;padding:0}.Baseline_list__df7St li{margin-bottom:22px}.Baseline_toggle__KYcwh{color:var(--qd-color-text-1);display:block;font-size:14px;font-weight:600;line-height:20px;margin-right:8px;margin-top:34px}.Baseline_toggleWrapper__8lwlc{display:flex}input.Baseline_radio__hTw3O{bottom:2px;height:14px;margin:0 8px 0 0;position:relative;vertical-align:middle;width:14px}.Baseline_toggleCheckedContent__r8qDG{padding-left:32px}.Baseline_radioContent__yerpR{padding-left:23px}.Baseline_secondaryText__x66Hd{color:var(--qd-color-text-3);margin-top:2px}.Baseline_codeContainer__jjEM0{border:1px solid var(--qd-color-lighter-grey);border-radius:4px;color:var(--qd-color-text-6);font-size:var(--qd-font-size-smaller);padding:8px 24px 12px 12px;position:relative}.bodyQodanaBlocks_dark .Baseline_codeContainer__jjEM0{border-color:var(--qd-color-dt-light-grey40)}.Baseline_code__peDMD{font-family:var(--qd-code-font-family-regular)}.Baseline_codeDescription__4hbX\+{margin-top:4px}.Baseline_copyButton__9a2lr{background:none;border:none;color:var(--qd-color-light-grey);cursor:pointer;margin:0;padding:0;position:absolute;right:8px;top:8px}.Baseline_copyButton__9a2lr:hover{color:var(--qd-color-blue)}.Baseline_copiedLabel__jIyzZ{align-items:center;color:var(--qd-color-darkest-green);display:flex;height:20px;padding:0 8px;position:absolute;right:25px;top:6px}.Baseline_copiedLabel__tag__S2HK7{background-color:var(--qd-color-warmgray-12);border-radius:20px;padding:2px 8px}.Baseline_baselineExampleContainer__xY4lM{padding:16px 0}.Baseline_radioLabel__HIz5l{font-size:13px;line-height:18px;white-space:nowrap}.Baseline_radioLabel_inactive__dKHwQ{color:var(--qd-color-light-grey)}.Baseline_putAllDescription__yU4-W{margin-bottom:16px;max-width:var(--qd-project-setup-text-max-width)}.ReadonlyCode_readonlyCode__gaZqw>pre{margin:0}.ReadonlyCode_addition__HAM40{background:var(--qd-code-addition-row-bg)}.ReadonlyCode_deletion__xlNuF{background:var(--qd-code-deletion-row-bg)}.FilesAndFolders_filestructureContainer__XwzmP{margin:0 -11px;overflow:hidden;width:calc(100% + 11px)}.FilesAndFolders_divider__TsoDu{border:none;border-bottom:1px solid var(--qd-color-border);height:0;margin:0;padding:0;width:100%}.FilesAndFolders_profileSettings__q71FX{box-sizing:border-box;padding-top:16px}.FilesAndFolders_profileSettings__q71FX .FilesAndFolders_title__rXEl\+{margin-bottom:8px}.Finish_buttonRow__-pCVB{margin-bottom:12px}.Finish_errorMessage__EcCwe{color:var(--qd-color-red-100)}.Finish_paragraph__HtLvO{margin-bottom:8px}.Finish_downloadButtonsContainer__t5gZe{margin-top:24px}.ManagePromoChecks_recommendedInspectionList__bITNR{list-style-type:none;margin:16px 0 0;max-width:400px;padding:0}:root{--qd-recommended-inspection-toggle-border-color:var(--qd-color-lighter-grey)}.bodyQodanaBlocks_dark{--qd-recommended-inspection-toggle-border-color:var(--qd-color-dt-light-grey40)}.RecommendedInspectionToggle_recommendedInspection__3yTca{display:flex;justify-content:space-between;padding:8px 0}.RecommendedInspectionToggle_recommendedInspection__3yTca:not(:last-child){border-bottom:1px solid var(--qd-recommended-inspection-toggle-border-color)}.RecommendedInspectionToggle_shortName__KxCnX{margin-bottom:2px;transition:color .2s}.RecommendedInspectionToggle_shortNameDisabled__mFvAO{color:var(--qd-color-text-2)}.RecommendedInspectionToggle_problemsCount__ySZmd{color:var(--qd-color-ruby);transition:color .2s}.bodyQodanaBlocks_dark .RecommendedInspectionToggle_problemsCount__ySZmd{color:var(--qd-color-red-100)}.RecommendedInspectionToggle_problemsCountDisabled__0aaTk.RecommendedInspectionToggle_problemsCountDisabled__0aaTk{color:var(--qd-color-red-80);opacity:.6}.RecommendedInspectionToggle_toggleColumn__pqkA3{flex-basis:95px;flex-grow:0;flex-shrink:0;top:1px}.Welcome_informationList__Fxk9z{-webkit-padding-start:0;margin-top:12px;padding-inline-start:0;padding-left:28px}.Welcome_informationList__Fxk9z li{margin-bottom:8px}.Progress_nav__b6cbn{--qd-progress-circle-size:13px;--qd-progress-row-width:25px;color:var(--qd-color-text-1)}.Progress_secondaryText__ASRGP{color:var(--qd-color-text-3)}.Progress_stepLabel__ZZ-ex{margin:0 0 5px}.Progress_bar__7ALyl{display:flex;margin:0 calc(var(--qd-progress-row-width)*-1);position:relative;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.Progress_step_previous__VQi5X{color:var(--qd-color-text-1)}.Progress_step_future__rTH4P{color:var(--qd-color-text-2)}.Progress_step__label__thenv{font-family:var(--qd-font-family);font-size:12px;overflow:hidden;text-align:center;text-overflow:ellipsis;transition:all 1s cubic-bezier(.075,.82,.165,1);white-space:nowrap;width:calc(var(--qd-progress-circle-size) + var(--qd-progress-row-width)*2)}.Progress_step__progressbar__l2R-e{align-items:center;display:flex;height:13px}.Progress_step__progressbar__left__bLp3G,.Progress_step__progressbar__right__r-GA-{height:4px;width:var(--qd-progress-row-width)}.Progress_step__progressbar__circle__ImmsI{align-items:center;border-radius:50%;display:flex;height:var(--qd-progress-circle-size);justify-content:center;width:var(--qd-progress-circle-size)}.Progress_step__progressbar__checkmark__4CNYd,.Progress_step__progressbar__circle__ImmsI{transition-delay:.4s;transition-duration:.5s}.Progress_step__progressbar__checkmark__4CNYd{opacity:0;transition-duration:.5s;transition-property:opacity;transition-timing-function:cubic-bezier(.075,.82,.165,1)}.Progress_step__progressbar__checkmark__4CNYd path{fill:var(--qd-color-white)}.Progress_step_previous__VQi5X .Progress_step__progressbar__checkmark__4CNYd{opacity:1;transition-delay:0s}.Progress_step__progressbar__circleBackground__mLdug{background-color:var(--qd-color-main-bg);border-radius:50%;height:var(--qd-progress-circle-size);width:var(--qd-progress-circle-size);z-index:1}.Progress_step__progressbar__circle__ImmsI,.Progress_step__progressbar__left_visible__kldni,.Progress_step__progressbar__right_visible__mpq1A{background-color:var(--qd-color-project-setup-progressbar-bg)}.Progress_step__progressbar__filling__u-d2v{bottom:4px;height:4px;left:0;margin:0 calc(var(--qd-progress-circle-size)/2 + var(--qd-progress-row-width));position:absolute;width:0;z-index:0}.Progress_step__progressbar__filling__u-d2v,.Progress_step_previous__VQi5X .Progress_step__progressbar__circle__ImmsI{background-color:var(--qd-color-project-setup-progressbar-bg-active);transition-delay:0s}.Progress_step_last__rv9ub .Progress_step__progressbar__circle__ImmsI{transition-delay:0s}.Progress_step__progressbar__filling__u-d2v{transition:width .5s}.DrawerContent_root__tbvWG{--qd-project-setup-text-max-width:350px;display:flex;flex:1 1;flex-direction:column;padding:16px 20px 28px 28px}.DrawerContent_progress__IuYHW{flex-grow:0;flex-shrink:0;margin:0 0 24px}.DrawerContent_popupContent__I1rtN{display:flex;flex:1 1;flex-direction:column;margin-top:8px}.DrawerContent_contentContainer__oWvYr{color:var(--qd-color-text-1);flex:1 1;overflow:hidden}.DrawerContent_footer__0gL-8{color:var(--qd-color-text-3);flex-grow:0;flex-shrink:0;font-size:13px;margin-top:auto;padding-right:8px;transition:color .2s}.DrawerContent_navigationButtons__hJDTW{flex-grow:0;flex-shrink:0;margin-bottom:28px;margin-top:28px}.DrawerContent_navigationButtons__hJDTW .DrawerContent_navigationButton__J73-o:not(:first-child){margin-left:8px}.ProjectKeyTabs_sourceTabsContainer__ZlIaA{margin-bottom:24px}.TeamCityPolicy_message__5rj1L{color:var(--qd-color-grey);display:block;margin-top:16px}.TeamCityPolicy_buttons__phLkX{margin-top:20px}.TeamCityPolicy_buttons__phLkX button:not(:first-child){margin-left:8px}.BuildSelect_errorContainer__YSO\+S{background-color:var(--qd-color-blurred-bg);bottom:0;left:0;position:fixed;right:0;top:0;z-index:2}.BuildSelect_selectWrapper__ZdN\+t{display:inline-block;position:relative;white-space:nowrap;z-index:4}.BuildSelect_select__06nj3{display:inline-block;margin-left:6px}.BuildSelect_selectButton__0Q8Da.BuildSelect_selectButton__0Q8Da{background-color:transparent;border:none;box-shadow:none;color:var(--qd-color-text-1);cursor:pointer;font-family:var(--qd-font-family);font-size:13px;line-height:24px;padding:0}.BuildSelect_selectButtonIcon__0x2Ok.BuildSelect_selectButtonIcon__0x2Ok{color:var(--qd-color-grey);margin-left:2px}.BuildSelect_popup__rGaYR.BuildSelect_popup__rGaYR{background:var(--qd-color-dropdown-bg);border:0;border-radius:var(--qd-border-radius);box-shadow:var(--qd-popup-box-shadow);overflow-y:auto;width:280px}.BuildSelect_list__A-bvJ.BuildSelect_list__A-bvJ button[class*=" hover_"],.BuildSelect_list__A-bvJ.BuildSelect_list__A-bvJ button[class^=hover_]{background-color:var(--qd-color-hover-list-item)}.BuildSelect_list__A-bvJ.BuildSelect_list__A-bvJ button{font-family:var(--qd-font-family);font-size:13px;line-height:20px;padding:4px 16px 8px!important}.BuildSelect_successBuildNumber__BWJ4N{color:var(--qd-color-darkest-green)}.BuildSelect_failedBuildNumber__2SecC{color:var(--qd-color-ruby)}.BuildSelect_greyNumber__WSgyL{color:var(--qd-color-grey)}.BuildSelect_disabled__32vN9 .BuildSelect_selectButtonIcon__0x2Ok.BuildSelect_selectButtonIcon__0x2Ok,.BuildSelect_disabled__32vN9.BuildSelect_disabled__32vN9,.BuildSelect_loading__pXfBr .BuildSelect_selectButton__0Q8Da.BuildSelect_selectButton__0Q8Da,.BuildSelect_loading__pXfBr.BuildSelect_loading__pXfBr{color:var(--qd-color-toggle-label-disabled);cursor:inherit}.ErrorComparisonMessage_container__rW1mb{color:var(--qd-color-ruby);font-size:13px;line-height:16px;margin-left:6px}.ErrorComparisonMessage_pic__7JVl7{margin-right:4px}.Branch_branchName__JdfR5{align-items:center;background-color:var(--qd-color-badge-blue-bg);border-radius:var(--qd-border-radius);color:var(--qd-color-blue);display:inline-flex;font-size:13px;line-height:20px;padding:1px 8px;text-align:center;transition:color .2s,background-color .2s}.SelectedBuild_container__vW7VI{margin-left:4px}.SelectedBuild_grey__qWPVq{color:var(--qd-color-grey)}.SelectedBuild_branch__HWAXX{margin-left:6px}.BuildItem_tip__WEwRz{color:var(--qd-color-light-grey);font-style:italic;margin-left:2px;margin-right:15px}.BuildItem_buildTip__\+3x9h{color:var(--qd-color-ruby);float:right}.BuildItem_failedBuildPic__WqujV{height:12px;padding-right:3px;position:relative;top:1px;width:12px}.BuildItem_branch__zNopA{margin-left:4px}.TeamCityControls_teamCityControls__\+YveP{display:flex;justify-content:space-between}.reset_container__gDmdn input[type=checkbox]{position:static!important;vertical-align:baseline!important;vertical-align:initial!important}.reset_container__gDmdn input[type=checkbox][class*=input_rui]{position:absolute!important} \ No newline at end of file diff --git a/reports-generated/code-quality/versions/VERSION_ID/css/QD-vendors.css b/reports-generated/code-quality/versions/VERSION_ID/css/QD-vendors.css new file mode 100644 index 00000000..db27ceea --- /dev/null +++ b/reports-generated/code-quality/versions/VERSION_ID/css/QD-vendors.css @@ -0,0 +1 @@ +.light_rui_e6f2,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}:root{--ring-loader-inline-stops:#ff00eb,#bd3bff,#008eff,#58ba00,#f48700,#ff00eb}.dark_rui_eb55{--ring-loader-inline-stops:#ff2eef,#d178ff,#289fff,#88d444,#ffe000,#ff2eef}@keyframes spin_rui_e6f2{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes pulse_rui_e6f2{0%{transform:scale(1)}to{transform:scale(1.41667)}}.loader_rui_e6f2,.ring-loader-inline{animation:spin_rui_e6f2 1s linear infinite;border-radius:8px;display:inline-block;overflow:hidden;position:relative;transform:rotate(0);vertical-align:-3px}.loader_rui_e6f2,.loader_rui_e6f2:after,.ring-loader-inline,.ring-loader-inline:after{transform-origin:50% 50%}.loader_rui_e6f2:after,.ring-loader-inline:after{animation:pulse_rui_e6f2 .85s cubic-bezier(.68,0,.74,.74) infinite alternate;background-image:conic-gradient(#ff00eb,#bd3bff,#008eff,#58ba00,#f48700,#ff00eb);background-image:conic-gradient(var(--ring-loader-inline-stops));content:"";display:block;height:16px;-webkit-mask-image:radial-gradient(8px,transparent 71.875%,#fff 0);-webkit-mask-image:radial-gradient(8px,transparent 71.875%,var(--ring-content-background-color) 71.875%);mask-image:radial-gradient(8px,transparent 71.875%,#fff 0);mask-image:radial-gradient(8px,transparent 71.875%,var(--ring-content-background-color) 71.875%);width:16px}.children_rui_e6f2{margin-left:4px}.light_rui_3588,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.trapButton_rui_3588{left:-9999px;position:absolute}.light_rui_7cd4,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.popup_rui_7cd4{background-color:#fff;background-color:var(--ring-popup-background-color);border:1px solid #dfe5eb;border:1px solid var(--ring-popup-border-color);border-radius:4px;border-radius:var(--ring-border-radius);box-shadow:0 2px 8px rgba(0,28,54,.1),0 1px 2px rgba(0,28,54,.04);box-shadow:var(--ring-popup-shadow);box-sizing:border-box;left:-100vw;overflow-y:auto;position:fixed;top:-100vh;z-index:5;z-index:var(--ring-overlay-z-index)}.hidden_rui_7cd4{display:none}.showing_rui_7cd4{opacity:0}.attached_rui_7cd4{border-top:0;border-top-left-radius:0;border-top-right-radius:0}.light_rui_6155,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.dark_rui_eb55,.ring-ui-theme-dark,:root.dark_rui_eb55{--ring-line-components:71,81,89;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:64,99,128;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:128,146,157;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:128,146,157;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:71,81,89;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:54,54,54;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:80,82,83;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:112,177,230;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-main-components:0,142,255;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,126,229;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:71,212,100;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-popup-border-components:0,42,76;--ring-popup-border-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.15);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:0,0,0;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-color:var(--ring-error-color);--ring-button-primary-border-components:128,198,255;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-hint-components:128,146,157;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:112,177,230;--ring-link-color:rgb(var(--ring-link-components));--ring-error-components:219,88,96;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:237,162,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:71,212,100;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:187,187,187;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-components:255,255,255;--ring-active-text-color:rgb(var(--ring-active-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:128,146,157;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:128,146,157;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:35,39,43;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:17,19,20;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:40,52,61;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:6,38,64;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:11,26,38;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:17,19,20;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:62,77,89;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:51,62,71;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:143,82,71;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:89,61,1;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:54,89,71;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:48,48,48;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:54,54,54;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:38,8,10;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-primary-background-components:0,126,229;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-components:43,43,43;--ring-code-background-color:rgb(var(--ring-code-background-components));--ring-code-components:169,183,198;--ring-code-color:rgb(var(--ring-code-components));--ring-code-meta-components:187,181,41;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:204,120,50;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:43,43,43;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-components:232,191,106;--ring-code-tag-color:rgb(var(--ring-code-tag-components));--ring-code-tag-font-weight:normal;--ring-code-field-components:152,118,170;--ring-code-field-color:rgb(var(--ring-code-tag-font-weight));--ring-code-attribute-components:186,186,186;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-components:104,151,187;--ring-code-number-color:rgb(var(--ring-code-number-components));--ring-code-string-components:106,135,89;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:68,113,82;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:101,110,118;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));color-scheme:dark}.light_rui_1d72,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.island_rui_1d72{background-color:#fff;background-color:var(--ring-content-background-color);border:1px solid #dfe5eb;border:1px solid var(--ring-line-color);border-radius:4px;border-radius:var(--ring-border-radius);box-shadow:0 1px 4px rgba(0,28,54,.1);box-shadow:0 1px 4px var(--ring-popup-shadow-color);display:flex;flex-direction:column}.header_rui_1d72,.withTransparentBottomBorder_rui_1d72{border-bottom:1px solid transparent;transition:border-bottom-color .1s}.header_rui_1d72{box-sizing:border-box;line-height:24px;padding:16px 32px 8px;width:100%}.withBottomBorder_rui_1d72.withBottomBorder_rui_1d72{border-bottom-color:#dfe5eb;border-bottom-color:var(--ring-popup-border-color);border-top-left-radius:4px;border-top-left-radius:var(--ring-border-radius);border-top-right-radius:4px;border-top-right-radius:var(--ring-border-radius)}.title_rui_1d72{color:#1f2326;color:var(--ring-heading-color);display:block;float:left;font-size:inherit;font-weight:700;margin:0;transform-origin:0 50%;word-break:break-word}.narrowIsland_rui_1d72 .header_rui_1d72{padding:0 16px}.content_rui_1d72{-webkit-overflow-scrolling:touch;display:flex;overflow:auto;position:relative;width:100%}.scrollableWrapper_rui_1d72{overflow:auto;padding:16px 32px;width:100%}.scrollableWrapper_rui_1d72:focus:not(.focus-visible){outline:none}.narrowIsland_rui_1d72 .scrollableWrapper_rui_1d72{padding:16px}.withoutPaddings_rui_1d72 .scrollableWrapper_rui_1d72{padding:0}.contentWithTopFade_rui_1d72:before{background:linear-gradient(0deg,hsla(0,0%,100%,0),#fff);background:linear-gradient(to top,hsla(0,0%,100%,0),var(--ring-content-background-color));content:"";display:block;height:24px;left:0;opacity:.8;pointer-events:none;position:absolute;width:100%;z-index:1;z-index:var(--ring-fixed-z-index)}.contentWithTopFade_rui_1d72:first-child:before{border-top-left-radius:4px;border-top-left-radius:var(--ring-border-radius);border-top-right-radius:4px;border-top-right-radius:var(--ring-border-radius)}.contentWithBottomFade_rui_1d72:after{background:linear-gradient(180deg,hsla(0,0%,100%,0),#fff);background:linear-gradient(to bottom,hsla(0,0%,100%,0),var(--ring-content-background-color));border-bottom-left-radius:4px;border-bottom-left-radius:var(--ring-border-radius);border-bottom-right-radius:4px;border-bottom-right-radius:var(--ring-border-radius);bottom:0;content:"";display:block;height:24px;left:0;opacity:.8;pointer-events:none;position:absolute;width:100%}.light_rui_381e,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.container_rui_381e{align-items:center;background-color:hsla(0,0%,100%,.4);bottom:0;display:flex;justify-content:center;left:0;overflow:auto;padding:32px 8px;position:fixed;right:0;top:0;z-index:5;z-index:var(--ring-overlay-z-index)}.innerContainer_rui_381e{display:flex;flex-direction:column;max-height:100%}.content_rui_381e{cursor:default;margin:auto;min-height:120px;overflow-wrap:break-word;position:relative;width:464px}.content_rui_381e .panel_rui_381e{background-color:transparent;border-top:none;margin-top:0;padding:16px 32px 32px}.content_rui_381e .panel_rui_381e button{margin-right:8px}.content_rui_381e.content_rui_381e{box-shadow:0 4px 24px rgba(0,28,54,.1),0 2px 6px rgba(0,28,54,.04);box-shadow:var(--ring-dialog-shadow)}.clickableOverlay_rui_381e{bottom:0;cursor:pointer;left:0;position:fixed;right:0;top:0}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.clickableOverlay_rui_381e:hover+* .closeIcon_rui_381e,.closeButton_rui_381e:hover .closeIcon_rui_381e{color:#ff008c;color:var(--ring-icon-hover-color)}}}.clickableOverlay_rui_381e:active+* .closeIcon_rui_381e,.closeButton_rui_381e:active .closeIcon_rui_381e{color:#0080e5;color:var(--ring-main-color)}.closeButton_rui_381e.closeButton_rui_381e{position:absolute}.closeButtonOutside_rui_381e{right:-32px;top:0}.closeButtonInside_rui_381e{right:8px;top:12px}.documentWithoutScroll_rui_381e{height:100%;overflow:hidden}.popupTarget_rui_381e{bottom:0;left:0;pointer-events:none;position:fixed;right:0;top:0;z-index:5;z-index:var(--ring-overlay-z-index)}.popupTarget_rui_381e>:not(.popupTarget_rui_381e){pointer-events:auto}.container_rui_381e .header_rui_1d72{font-size:24px;line-height:28px;padding-top:32px}.dense_rui_381e .header_rui_1d72{padding-top:16px}.dense_rui_381e .panel_rui_381e{padding-bottom:16px}.light_rui_365e,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.group_rui_365e>:not(:last-child){margin-right:8px}.light_rui_c963,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.loaderScreen_rui_c963{height:100%;position:absolute;text-align:center;vertical-align:middle;width:100%}.loaderScreen_rui_c963:before{content:"";display:inline-block;height:100%;vertical-align:middle}.loader_rui_c963{display:inline-block}.loaderWithoutSpacing_rui_c963 canvas{margin:0}@media (-moz-touch-enabled:0),(-ms-high-contrast:active_rui_0b90),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active_rui_0b90),(-ms-high-contrast:none),(hover:hover){.buttonGroup_rui_bbca .button_rui_0b90.button_rui_0b90:hover{border-radius:4px;border-radius:var(--ring-border-radius);box-shadow:inset 0 0 0 1px #80c6ff;box-shadow:inset 0 0 0 1px var(--ring-border-hover-color)}}}.light_rui_bbca,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}:root{--ring-button-group-default-z-index:1;--ring-button-group-disabled-z-index:0;--ring-button-group-active-z-index:2;--ring-button-group-hover-z-index:3;--ring-button-group-focus-z-index:4}.common_rui_bbca{display:inline-block;white-space:nowrap}.buttonGroup_rui_bbca{border-radius:4px;border-radius:var(--ring-border-radius);box-shadow:inset 0 0 0 1px #c5d1db;box-shadow:inset 0 0 0 1px var(--ring-borders-color);line-height:normal}.buttonGroup_rui_bbca .button_rui_0b90{--ring-button-group-button-border-color:var(--ring-borders-color);box-shadow:0 1px var(--ring-button-group-button-border-color) inset,0 -1px var(--ring-button-group-button-border-color) inset;position:relative;transition:none}.buttonGroup_rui_bbca .button_rui_0b90[disabled]{--ring-button-group-button-border-color:var(--ring-border-unselected-disabled-color)}.buttonGroup_rui_bbca .button_rui_0b90[disabled]:after,.buttonGroup_rui_bbca .button_rui_0b90[disabled]:before{background-color:#f5f5f5;background-color:var(--ring-disabled-background-color);bottom:0;box-shadow:inset 0 1px #e8e8e8,inset 0 -1px #e8e8e8;box-shadow:0 1px var(--ring-border-unselected-disabled-color) inset,0 -1px var(--ring-border-unselected-disabled-color) inset;content:"";position:absolute;top:0;width:4px;width:var(--ring-border-radius);z-index:0}.buttonGroup_rui_bbca .button_rui_0b90[disabled]:before{left:-4px;left:calc(var(--ring-border-radius)*-1)}.buttonGroup_rui_bbca .button_rui_0b90[disabled]:after{right:-4px;right:calc(var(--ring-border-radius)*-1)}.buttonGroup_rui_bbca>.button_rui_0b90:first-child,.buttonGroup_rui_bbca>:first-child .button_rui_0b90{box-shadow:0 1px var(--ring-button-group-button-border-color) inset,0 -1px var(--ring-button-group-button-border-color) inset,1px 0 var(--ring-button-group-button-border-color) inset}.buttonGroup_rui_bbca>.button_rui_0b90:first-child:before,.buttonGroup_rui_bbca>:first-child .button_rui_0b90:before{display:none}.buttonGroup_rui_bbca>.button_rui_0b90:last-child,.buttonGroup_rui_bbca>:last-child .button_rui_0b90{box-shadow:0 1px var(--ring-button-group-button-border-color) inset,0 -1px var(--ring-button-group-button-border-color) inset,-1px 0 var(--ring-button-group-button-border-color) inset}.buttonGroup_rui_bbca>.button_rui_0b90:last-child:after,.buttonGroup_rui_bbca>:last-child .button_rui_0b90:after{display:none}.buttonGroup_rui_bbca>.button_rui_0b90:only-child,.buttonGroup_rui_bbca>:only-child .button_rui_0b90{box-shadow:0 1px var(--ring-button-group-button-border-color) inset,0 -1px var(--ring-button-group-button-border-color) inset,-1px 0 var(--ring-button-group-button-border-color) inset,1px 0 var(--ring-button-group-button-border-color) inset}.buttonGroup_rui_bbca>.button_rui_0b90:only-child:before,.buttonGroup_rui_bbca>:only-child .button_rui_0b90:before{display:none}.buttonGroup_rui_bbca .button_rui_0b90.button_rui_0b90:active_rui_0b90{border-radius:4px;border-radius:var(--ring-border-radius);box-shadow:inset 0 0 0 1px #80c6ff;box-shadow:inset 0 0 0 1px var(--ring-border-hover-color)}.buttonGroup_rui_bbca .button_rui_0b90.button_rui_0b90.focus-visible{border-radius:4px;border-radius:var(--ring-border-radius);box-shadow:inset 0 0 0 1px #80c6ff,0 0 0 1px #80c6ff;box-shadow:inset 0 0 0 1px var(--ring-border-hover-color),0 0 0 1px var(--ring-border-hover-color)}.buttonGroup_rui_bbca .button_rui_0b90.button_rui_0b90.active_rui_0b90{border-radius:4px;border-radius:var(--ring-border-radius);box-shadow:inset 0 0 0 1px #0080e5;box-shadow:inset 0 0 0 1px var(--ring-main-color)}.buttonGroup_rui_bbca .button_rui_0b90.focus-visible.active_rui_0b90{border-radius:4px;border-radius:var(--ring-border-radius);box-shadow:inset 0 0 0 1px #0080e5,0 0 0 1px #80c6ff;box-shadow:inset 0 0 0 1px var(--ring-main-color),0 0 0 1px var(--ring-border-hover-color)}.buttonGroup_rui_bbca .button_rui_0b90.active_rui_0b90[disabled]{box-shadow:inset 0 0 0 1px #d4d4d4;box-shadow:inset 0 0 0 1px var(--ring-border-disabled-color)}.split_rui_bbca{position:relative;z-index:0}.common_rui_bbca .button_rui_0b90,.common_rui_bbca button_rui_0b90{border-radius:0}.split_rui_bbca .button_rui_0b90,.split_rui_bbca button_rui_0b90{margin:0 0 0 -1px}.caption_rui_bbca{font-size:14px;font-size:var(--ring-font-size);margin-right:8px}.caption_rui_bbca:empty{margin-right:0}.common_rui_bbca>.button_rui_0b90:first-child,.common_rui_bbca>:first-child .button_rui_0b90,.common_rui_bbca>button_rui_0b90:first-child{border-bottom-left-radius:4px;border-bottom-left-radius:var(--ring-border-radius);border-top-left-radius:4px;border-top-left-radius:var(--ring-border-radius);margin:0}.common_rui_bbca>.button_rui_0b90:last-child,.common_rui_bbca>:last-child .button_rui_0b90,.common_rui_bbca>button_rui_0b90:last-child{border-bottom-right-radius:4px;border-bottom-right-radius:var(--ring-border-radius);border-top-right-radius:4px;border-top-right-radius:var(--ring-border-radius)}.split_rui_bbca .primary_rui_0b90:not(:last-child){margin-right:1px}.split_rui_bbca .primary_rui_0b90:not(:first-child){margin-left:1px}.common_rui_bbca .button_rui_0b90{position:relative;z-index:1;z-index:var(--ring-button-group-default-z-index)}.common_rui_bbca .button_rui_0b90[disabled]{z-index:0;z-index:var(--ring-button-group-disabled-z-index)}.common_rui_bbca .button_rui_0b90:active_rui_0b90{z-index:2;z-index:var(--ring-button-group-active-z-index)}@media (-moz-touch-enabled:0),(-ms-high-contrast:active_rui_0b90),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active_rui_0b90),(-ms-high-contrast:none),(hover:hover){.common_rui_bbca .button_rui_0b90:hover{z-index:3;z-index:var(--ring-button-group-hover-z-index)}}}.common_rui_bbca .button_rui_0b90:focus{z-index:4;z-index:var(--ring-button-group-focus-z-index)}.common_rui_bbca .active_rui_0b90{z-index:2;z-index:var(--ring-button-group-active-z-index)}.common_rui_bbca .active_rui_0b90[disabled]{z-index:1;z-index:var(--ring-button-group-default-z-index)}.light_rui_b2a9,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.buttonSet_rui_b2a9{display:inline-block;font-size:0;position:relative;white-space:nowrap}.buttonSet_rui_b2a9 .button_rui_0b90{margin:0 8px 0 0}.buttonSet_rui_b2a9>.button_rui_0b90:last-child{margin-right:0}.light_rui_f4fc,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.buttonToolbar_rui_f4fc{display:inline-block;font-size:0;line-height:0;white-space:nowrap}.buttonToolbar_rui_f4fc>.buttonGroup_rui_f4fc,.buttonToolbar_rui_f4fc>.buttonToolbar_rui_f4fc,.buttonToolbar_rui_f4fc>.button_rui_0b90,.buttonToolbar_rui_f4fc>.ring-button-group,.buttonToolbar_rui_f4fc>.split_rui_f4fc,.buttonToolbar_rui_f4fc>button_rui_0b90{margin-right:8px}.buttonToolbar_rui_f4fc>:last-child{margin-right:0}.light_rui_1067,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.panel_rui_1067{border-top:1px solid #dfe5eb;border-top:1px solid var(--ring-popup-border-color);margin-top:16px;padding:16px 32px 32px;position:relative}.panel_rui_1067:empty{display:none}.panel_rui_1067 button{margin-right:8px}.light_rui_8468,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.contentLayout_rui_8468{display:flex;flex-flow:row nowrap;position:relative}.contentLayoutContent_rui_8468{align-self:flex-start;flex-grow:2;margin:0 32px;width:100%}.sidebarContainer_rui_8468{max-width:240px;min-width:240px}.sidebarContainerRight_rui_8468{order:1}.sidebar_rui_8468{box-sizing:border-box;height:100%;max-width:240px;min-width:240px;overflow:auto;padding-left:32px;padding-right:16px}.sidebarRight_rui_8468{padding-left:16px;padding-right:32px}.sidebarFixedTop_rui_8468{bottom:0;top:0}.sidebarFixedTop_rui_8468.sidebarFixedTop_rui_8468{position:fixed}.sidebarFixedBottom_rui_8468.sidebarFixedBottom_rui_8468{bottom:0;position:absolute;top:auto}.bottomMarker_rui_8468{bottom:0;position:absolute}@media (max-width:639px),(min-width:640px) and (max-width:959px){.contentLayoutResponsive_rui_8468 .contentLayoutContent_rui_8468{margin:0 16px}.contentLayoutResponsive_rui_8468 .sidebar_rui_8468{bottom:0;box-sizing:content-box;left:0;padding:0 16px;position:absolute;top:0}.contentLayoutResponsive_rui_8468 .sidebarFixedTop_rui_8468{position:fixed}.contentLayoutResponsive_rui_8468 .sidebarFixedBottom_rui_8468{top:auto}.contentLayoutResponsive_rui_8468 .sidebarRight_rui_8468{left:auto;right:0}.contentLayoutResponsive_rui_8468 .sidebarContainer_rui_8468{max-width:0;min-width:0}}@media (max-width:639px){.contentLayoutResponsive_rui_8468 .sidebar_rui_8468{max-width:none;min-width:0;width:80%}}.light_rui_9f76,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.dataListWrapper_rui_9f76{position:relative}.dataList_rui_9f76{margin:0}.dataList_rui_9f76,.itemContent_rui_9f76{list-style:none;padding:0}.title_rui_9f76{align-items:center;box-sizing:content-box;display:flex;height:32px;outline:none;padding:0 40px 2px 0}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.dataList_rui_9f76:not(.disabledHover_rui_9f76) .title_rui_9f76:hover{background-color:#ebf6ff;background-color:var(--ring-hover-background-color)}}.title_rui_9f76.titleSelected_rui_9f76{background-color:#d4edff;background-color:var(--ring-selected-background-color)}.title_rui_9f76.titleFocused_rui_9f76{background-color:#ebf6ff;background-color:var(--ring-hover-background-color);box-shadow:inset 2px 0 #0080e5;box-shadow:inset 2px 0 var(--ring-main-color)}.showMore_rui_9f76{color:#737577;color:var(--ring-secondary-color);font-size:12px;outline:none;padding:4px 60px}.boxes_rui_9f76{display:flex;min-width:24px}.checkboxBox_rui_9f76{width:24px}.collapseButton_rui_9f76{height:auto;left:-5px;line-height:inherit;padding:0 5px;top:1px}.collapseIcon_rui_9f76.collapseIcon_rui_9f76{color:#999;color:var(--ring-icon-secondary-color)}.loadingOverlay_rui_9f76{align-items:center;background-color:hsla(0,0%,100%,.5);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.showMoreLoader_rui_9f76{left:8px;top:1px}.light_rui_e0bd,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.clearfix_rui_e0bd:after{clear:both;content:"";display:block}.font_rui_e0bd{font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;font-family:var(--ring-font-family);font-size:14px;font-size:var(--ring-font-size);line-height:20px;line-height:var(--ring-line-height)}.font-lower_rui_e0bd{line-height:18px;line-height:var(--ring-line-height-lower)}.font-smaller_rui_e0bd{font-size:12px;font-size:var(--ring-font-size-smaller)}.font-smaller-lower_rui_e0bd{line-height:16px;line-height:var(--ring-line-height-lowest)}.font-larger-lower_rui_e0bd{font-size:15px;font-size:var(--ring-font-size-larger)}.font-larger_rui_e0bd{line-height:21px;line-height:var(--ring-line-height-taller)}.thin-font_rui_e0bd{font-family:Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;font-size:var(--ring-font-size);font-weight:100}.monospace-font_rui_e0bd{font-family:Menlo,Bitstream Vera Sans Mono,Ubuntu Mono,Consolas,Courier New,Courier,monospace;font-family:var(--ring-font-family-monospace);font-size:12px;font-size:var(--ring-font-size-smaller)}.ellipsis_rui_e0bd{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.resetButton_rui_e0bd{background-color:transparent;border:0;color:inherit;font:inherit;overflow:visible;padding:0;text-align:left}.resetButton_rui_e0bd::-moz-focus-inner{border:0;padding:0}:root{--ring-date-picker-hover-color:#b3dfff}.container_rui_e0bd{display:inline-block}.hoverable_rui_e0bd{cursor:pointer;transition:color .2s ease-out 0s}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.hoverable_rui_e0bd:hover{color:#ff008c;color:var(--ring-link-hover-color);transition:none}}}.datePicker_rui_e0bd.datePicker_rui_e0bd{padding-right:8px}.datePicker_rui_e0bd.datePicker_rui_e0bd.inline_rui_e0bd{padding:0}.datePicker_rui_e0bd.datePicker_rui_e0bd.sizeS_rui_e0bd{width:96px}.datePicker_rui_e0bd.datePicker_rui_e0bd.sizeM_rui_e0bd{width:240px}.datePicker_rui_e0bd.datePicker_rui_e0bd.sizeL_rui_e0bd{width:400px}.datePicker_rui_e0bd.datePicker_rui_e0bd.sizeFULL_rui_e0bd{width:100%}.datePicker_rui_e0bd.datePicker_rui_e0bd.sizeAUTO_rui_e0bd{max-width:100%}.displayDate_rui_e0bd{display:inline-block;min-width:88px;text-align:left}.displayDate_rui_e0bd.displayRange_rui_e0bd{min-width:176px}.clear_rui_e0bd{cursor:pointer;opacity:.3;transition:opacity .3s ease-out;transition:opacity var(--ring-ease)}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.datePicker_rui_e0bd:hover .clear_rui_e0bd{opacity:.5}.datePicker_rui_e0bd .clear_rui_e0bd:hover{opacity:1;transition:none}}}.datePopup_rui_e0bd{color:#1f2326;color:var(--ring-text-color);text-align:left;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:-moz-min-content;width:min-content}.datePopup_rui_e0bd *{box-sizing:border-box}.filterWrapper_rui_e0bd{display:flex;padding-left:16px}.calendarIcon_rui_e0bd{color:#b8d1e5;color:var(--ring-icon-color);margin-right:4px}.anchor_rui_e0bd{padding:0 8px;text-align:start;white-space:nowrap;width:100%}.inline_rui_e0bd .anchor_rui_e0bd{cursor:pointer;min-width:0;min-width:auto;padding:0}.anchorContent_rui_e0bd{align-items:baseline;display:flex}.chevronDownIcon_rui_e0bd{color:#999;color:var(--ring-icon-secondary-color);margin-left:auto}.fromInput_rui_e0bd{flex-basis:104px;flex-grow:0;flex-shrink:0;position:relative}.fromInputWithDivider_rui_e0bd:after{content:"—";line-height:30px;position:absolute;right:8px;top:0}.toInput_rui_e0bd{flex-basis:104px;flex-grow:1;flex-shrink:0;width:104px}.dateInput_rui_e0bd{flex-basis:88px;flex-grow:1;flex-shrink:0}.timeInputWithDivider_rui_e0bd{position:relative}.timeInputWithDivider_rui_e0bd:before{content:",";left:-8px;line-height:29px;position:absolute}.weekdays_rui_e0bd{color:#737577;color:var(--ring-secondary-color);height:32px;padding:5px 16px 0}.weekday_rui_e0bd.weekday_rui_e0bd{display:inline-block;text-align:center;text-transform:capitalize;width:24px}.weekend_rui_e0bd.weekend_rui_e0bd{color:#a90f1a;color:var(--ring-error-color)}.calendar_rui_e0bd{box-shadow:0 -1px #dfe5eb;box-shadow:0 -1px var(--ring-line-color);height:288px;overflow:hidden;position:relative;width:296px}.months_rui_e0bd.months_rui_e0bd{bottom:0;left:0;position:absolute;right:48px;top:0}.days_rui_e0bd{left:0;position:relative}.month_rui_e0bd.month_rui_e0bd{display:flex;flex-wrap:wrap;margin:16px;width:168px}.month_rui_e0bd.month_rui_e0bd>*{flex-shrink:0;height:24px;line-height:24px}.monthTitle_rui_e0bd{font-weight:700;padding-left:4px;text-align:left;text-transform:capitalize;width:96px}@supports (flex-basis:1px){.monthTitle_rui_e0bd{flex-basis:96px;width:auto}}.day_rui_e0bd.day_rui_e0bd{cursor:pointer;flex-basis:24px;margin:0;position:relative;text-align:center;transition:background-color .3s ease-out,color .3s ease-out;transition:background-color var(--ring-ease),color var(--ring-ease)}.day_rui_e0bd.day_rui_e0bd:after,.day_rui_e0bd.day_rui_e0bd:before{pointer-events:none}.between_rui_e0bd.between_rui_e0bd{background-color:#d4edff;background-color:var(--ring-selected-background-color);transition:none}.activeBetween_rui_e0bd.activeBetween_rui_e0bd{background-color:#b3dfff;background-color:var(--ring-date-picker-hover-color);transition:none}.current_rui_e0bd.current_rui_e0bd{background-color:#0080e5;background-color:var(--ring-main-color);border-radius:4px;border-radius:var(--ring-border-radius);color:#fff;color:var(--ring-white-text-color)}.active_rui_e0bd.active_rui_e0bd{background-color:#b3dfff;background-color:var(--ring-date-picker-hover-color);border-radius:4px;border-radius:var(--ring-border-radius);color:#ff008c;color:var(--ring-link-hover-color);transition:none}.disabled_rui_e0bd.disabled_rui_e0bd{color:#999;color:var(--ring-disabled-color);cursor:not-allowed}.from_rui_e0bd.from_rui_e0bd{border-radius:4px 0 0 4px;border-radius:var(--ring-border-radius) 0 0 var(--ring-border-radius)}.to_rui_e0bd.to_rui_e0bd{border-radius:0 4px 4px 0;border-radius:0 var(--ring-border-radius) var(--ring-border-radius) 0}.from_rui_e0bd.to_rui_e0bd{border-radius:4px;border-radius:var(--ring-border-radius)}.Monday_rui_e0bd{position:relative}.Monday_rui_e0bd:after,.Monday_rui_e0bd:before{content:"";height:100%;position:absolute;transition:background-color .3s ease-out;transition:background-color var(--ring-ease);width:16px}.Monday_rui_e0bd:before{right:100%}.Monday_rui_e0bd:after{bottom:100%;left:700%}.Monday_rui_e0bd.spread_rui_e0bd:after,.Monday_rui_e0bd.spread_rui_e0bd:before{background-color:#d4edff;background-color:var(--ring-selected-background-color);transition:none}.Monday_rui_e0bd.activeSpread_rui_e0bd:after,.Monday_rui_e0bd.activeSpread_rui_e0bd:before{background-color:#b3dfff;background-color:var(--ring-date-picker-hover-color);transition:none}.first_rui_e0bd{position:relative}.first_rui_e0bd:after,.first_rui_e0bd:before{content:"";height:64px;position:absolute;transition:background-color .3s ease-out;transition:background-color var(--ring-ease);width:184px;z-index:-1;z-index:var(--ring-invisible-element-z-index)}.first_rui_e0bd:before{bottom:0;right:100%}.first_rui_e0bd:after{bottom:100%;left:0}.first_rui_e0bd.Monday_rui_e0bd:after{height:40px}.first_rui_e0bd+.Tuesday_rui_e0bd{position:relative}.first_rui_e0bd+.Tuesday_rui_e0bd:before{content:"";height:100%;left:600%;position:absolute;top:-64px;transition:background-color .3s ease-out;transition:background-color var(--ring-ease);width:16px;z-index:-1;z-index:var(--ring-invisible-element-z-index)}.Friday_rui_e0bd:after,.Friday_rui_e0bd:before,.Saturday_rui_e0bd:after,.Saturday_rui_e0bd:before,.Sunday_rui_e0bd:after,.Sunday_rui_e0bd:before{height:40px}.spread_rui_e0bd+.Tuesday_rui_e0bd:before,.spread_rui_e0bd:after,.spread_rui_e0bd:before{background-color:#d4edff;background-color:var(--ring-selected-background-color);transition:none}.activeSpread_rui_e0bd+.Tuesday_rui_e0bd:before,.activeSpread_rui_e0bd:after,.activeSpread_rui_e0bd:before{background-color:#b3dfff;background-color:var(--ring-date-picker-hover-color);transition:none}.empty_rui_e0bd.empty_rui_e0bd{opacity:0;pointer-events:none}.today_rui_e0bd.today_rui_e0bd{font-weight:700;position:relative}.today_rui_e0bd:before{content:"•";font-size:12px;font-size:var(--ring-font-size-smaller);left:4px;position:absolute;top:0}.day_rui_e0bd>.today_rui_e0bd:before{left:0;text-align:center;top:4px;width:100%}.year_rui_e0bd.today_rui_e0bd:before{left:2px;top:-1px}.monthNames_rui_e0bd{background-color:#fff;background-color:var(--ring-content-background-color);bottom:0;box-shadow:-1px 0 #dfe5eb;box-shadow:-1px 0 var(--ring-line-color);position:absolute;right:0;top:0;width:48px}.monthName_rui_e0bd.monthName_rui_e0bd{height:24px;line-height:24px;padding-left:12px;position:relative;text-transform:capitalize;width:100%}.monthSlider_rui_e0bd.monthSlider_rui_e0bd{background-color:#0080e5;background-color:var(--ring-main-color);cursor:grab;height:48px;left:-1px;opacity:.17;position:absolute;right:0;width:calc(100% + 1px);z-index:1;z-index:var(--ring-fixed-z-index)}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.monthSlider_rui_e0bd:hover{opacity:.3}}}.dragging_rui_e0bd{cursor:grabbing;opacity:.35}.range_rui_e0bd{background-color:#0080e5;background-color:var(--ring-main-color);left:0;position:absolute;width:2px}.years_rui_e0bd{background-color:#fff;background-color:var(--ring-content-background-color);box-shadow:-1px 0 #dfe5eb;box-shadow:-1px 0 var(--ring-line-color);font-size:12px;font-size:var(--ring-font-size-smaller);position:absolute;right:0;top:0;width:48px}.year_rui_e0bd.year_rui_e0bd{color:#737577;color:var(--ring-secondary-color);height:32px;line-height:32px;position:relative;text-align:center;width:100%}.currentYear_rui_e0bd.currentYear_rui_e0bd{color:#1f2326;color:var(--ring-text-color);cursor:auto;transition:none}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.currentYear_rui_e0bd:hover{color:#1f2326;color:var(--ring-text-color)}}}.light_rui_13c4,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.dropdown_rui_13c4{display:inline-block}.anchor_rui_13c4.anchor_rui_13c4{font:inherit;margin:0 -3px;padding:0 3px}.chevron_rui_13c4{line-height:normal;margin-left:2px}.light_rui_c974,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.errorMessage_rui_c974{align-items:center;display:flex;flex-direction:row;height:100%;justify-content:center;margin:0 auto;max-width:600px}.title_rui_c974{font-size:21px}.description_rui_c974{font-size:15px}.content_rui_c974{color:#1f2326;color:var(--ring-text-color);flex-direction:column}.content_rui_c974>.title_rui_c974,.description_rui_c974{margin-bottom:16px}.icon_rui_c974{color:#999;color:var(--ring-icon-secondary-color);margin:0 16px 24px 0}.light_rui_fade,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.footer_rui_fade{border-top:1px solid #dfe5eb;border-top:1px solid var(--ring-line-color);box-sizing:border-box;font-size:12px;font-size:var(--ring-font-size-smaller);height:64px;margin:40px 32px 0;padding-top:16px;position:relative;text-align:center}.footerFloating_rui_fade{bottom:0;margin-bottom:8px;margin-left:0;margin-right:0;position:absolute;width:100%;z-index:1;z-index:var(--ring-fixed-z-index)}.column_rui_fade{position:absolute;width:33%}.columnItem_rui_fade{display:inline-block;margin:0;padding:0;vertical-align:top}.columnLeft_rui_fade{text-align:left}.columnCenter_rui_fade{left:33.6%}.columnCenter_rui_fade .line_rui_fade{text-align:left}.columnRight_rui_fade{right:0;text-align:right;top:16px}.line_rui_fade{line-height:16px;list-style:none;padding:0}.lineCenter_rui_fade{text-align:left}.light_rui_a74c,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.container-fluid_rui_a74c,.container_rui_a74c{margin-left:auto;margin-right:auto}.container-fluid_rui_a74c{min-width:320px;padding-left:16px;padding-right:16px}.row_rui_a74c{box-sizing:border-box;display:flex;flex:0 1 auto;flex-flow:row wrap;margin-left:-8px;margin-right:-8px}.row_rui_a74c.reverse_rui_a74c{flex-direction:row-reverse}.col_rui_a74c{margin-bottom:8px;margin-top:8px}.col_rui_a74c.reverse_rui_a74c{flex-direction:column-reverse}.col-xs-10_rui_a74c,.col-xs-11_rui_a74c,.col-xs-12_rui_a74c,.col-xs-1_rui_a74c,.col-xs-2_rui_a74c,.col-xs-3_rui_a74c,.col-xs-4_rui_a74c,.col-xs-5_rui_a74c,.col-xs-6_rui_a74c,.col-xs-7_rui_a74c,.col-xs-8_rui_a74c,.col-xs-9_rui_a74c,.col-xs-offset-0_rui_a74c,.col-xs-offset-10_rui_a74c,.col-xs-offset-11_rui_a74c,.col-xs-offset-12_rui_a74c,.col-xs-offset-1_rui_a74c,.col-xs-offset-2_rui_a74c,.col-xs-offset-3_rui_a74c,.col-xs-offset-4_rui_a74c,.col-xs-offset-5_rui_a74c,.col-xs-offset-6_rui_a74c,.col-xs-offset-7_rui_a74c,.col-xs-offset-8_rui_a74c,.col-xs-offset-9_rui_a74c,.col-xs_rui_a74c{box-sizing:border-box;flex:0 0 auto;padding-left:8px;padding-right:8px}.col-xs_rui_a74c{flex-basis:0;flex-grow:1;max-width:100%}.col-xs-1_rui_a74c{flex-basis:8.3333%;max-width:8.3333%}.col-xs-2_rui_a74c{flex-basis:16.6667%;max-width:16.6667%}.col-xs-3_rui_a74c{flex-basis:25%;max-width:25%}.col-xs-4_rui_a74c{flex-basis:33.3333%;max-width:33.3333%}.col-xs-5_rui_a74c{flex-basis:41.6667%;max-width:41.6667%}.col-xs-6_rui_a74c{flex-basis:50%;max-width:50%}.col-xs-7_rui_a74c{flex-basis:58.3333%;max-width:58.3333%}.col-xs-8_rui_a74c{flex-basis:66.6667%;max-width:66.6667%}.col-xs-9_rui_a74c{flex-basis:75%;max-width:75%}.col-xs-10_rui_a74c{flex-basis:83.3333%;max-width:83.3333%}.col-xs-11_rui_a74c{flex-basis:91.6667%;max-width:91.6667%}.col-xs-12_rui_a74c{flex-basis:100%;max-width:100%}.col-xs-offset-0_rui_a74c{margin-left:0}.col-xs-offset-1_rui_a74c{margin-left:8.3333%}.col-xs-offset-2_rui_a74c{margin-left:16.6667%}.col-xs-offset-3_rui_a74c{margin-left:25%}.col-xs-offset-4_rui_a74c{margin-left:33.3333%}.col-xs-offset-5_rui_a74c{margin-left:41.6667%}.col-xs-offset-6_rui_a74c{margin-left:50%}.col-xs-offset-7_rui_a74c{margin-left:58.3333%}.col-xs-offset-8_rui_a74c{margin-left:66.6667%}.col-xs-offset-9_rui_a74c{margin-left:75%}.col-xs-offset-10_rui_a74c{margin-left:83.3333%}.col-xs-offset-11_rui_a74c{margin-left:91.6667%}.start-xs_rui_a74c{justify-content:flex-start;text-align:start}.center-xs_rui_a74c{justify-content:center;text-align:center}.end-xs_rui_a74c{justify-content:flex-end;text-align:end}.top-xs_rui_a74c{align-items:flex-start}.middle-xs_rui_a74c{align-items:center}.baseline-xs_rui_a74c{align-items:baseline}.bottom-xs_rui_a74c{align-items:flex-end}.around-xs_rui_a74c{justify-content:space-around}.between-xs_rui_a74c{justify-content:space-between}.first-xs_rui_a74c{order:-1}.last-xs_rui_a74c{order:1}@media (min-width:640px) and (max-width:959px){.container_rui_a74c{width:656px}.col-sm-10_rui_a74c,.col-sm-11_rui_a74c,.col-sm-12_rui_a74c,.col-sm-1_rui_a74c,.col-sm-2_rui_a74c,.col-sm-3_rui_a74c,.col-sm-4_rui_a74c,.col-sm-5_rui_a74c,.col-sm-6_rui_a74c,.col-sm-7_rui_a74c,.col-sm-8_rui_a74c,.col-sm-9_rui_a74c,.col-sm-offset-0_rui_a74c,.col-sm-offset-10_rui_a74c,.col-sm-offset-11_rui_a74c,.col-sm-offset-12_rui_a74c,.col-sm-offset-1_rui_a74c,.col-sm-offset-2_rui_a74c,.col-sm-offset-3_rui_a74c,.col-sm-offset-4_rui_a74c,.col-sm-offset-5_rui_a74c,.col-sm-offset-6_rui_a74c,.col-sm-offset-7_rui_a74c,.col-sm-offset-8_rui_a74c,.col-sm-offset-9_rui_a74c,.col-sm_rui_a74c{box-sizing:border-box;flex:0 0 auto;padding-left:8px;padding-right:8px}.col-sm_rui_a74c{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-1_rui_a74c{flex-basis:8.3333%;max-width:8.3333%}.col-sm-2_rui_a74c{flex-basis:16.6667%;max-width:16.6667%}.col-sm-3_rui_a74c{flex-basis:25%;max-width:25%}.col-sm-4_rui_a74c{flex-basis:33.3333%;max-width:33.3333%}.col-sm-5_rui_a74c{flex-basis:41.6667%;max-width:41.6667%}.col-sm-6_rui_a74c{flex-basis:50%;max-width:50%}.col-sm-7_rui_a74c{flex-basis:58.3333%;max-width:58.3333%}.col-sm-8_rui_a74c{flex-basis:66.6667%;max-width:66.6667%}.col-sm-9_rui_a74c{flex-basis:75%;max-width:75%}.col-sm-10_rui_a74c{flex-basis:83.3333%;max-width:83.3333%}.col-sm-11_rui_a74c{flex-basis:91.6667%;max-width:91.6667%}.col-sm-12_rui_a74c{flex-basis:100%;max-width:100%}.col-sm-offset-0_rui_a74c{margin-left:0}.col-sm-offset-1_rui_a74c{margin-left:8.3333%}.col-sm-offset-2_rui_a74c{margin-left:16.6667%}.col-sm-offset-3_rui_a74c{margin-left:25%}.col-sm-offset-4_rui_a74c{margin-left:33.3333%}.col-sm-offset-5_rui_a74c{margin-left:41.6667%}.col-sm-offset-6_rui_a74c{margin-left:50%}.col-sm-offset-7_rui_a74c{margin-left:58.3333%}.col-sm-offset-8_rui_a74c{margin-left:66.6667%}.col-sm-offset-9_rui_a74c{margin-left:75%}.col-sm-offset-10_rui_a74c{margin-left:83.3333%}.col-sm-offset-11_rui_a74c{margin-left:91.6667%}.start-sm_rui_a74c{justify-content:flex-start;text-align:start}.center-sm_rui_a74c{justify-content:center;text-align:center}.end-sm_rui_a74c{justify-content:flex-end;text-align:end}.top-sm_rui_a74c{align-items:flex-start}.middle-sm_rui_a74c{align-items:center}.baseline-sm_rui_a74c{align-items:baseline}.bottom-sm_rui_a74c{align-items:flex-end}.around-sm_rui_a74c{justify-content:space-around}.between-sm_rui_a74c{justify-content:space-between}.first-sm_rui_a74c{order:-1}.last-sm_rui_a74c{order:1}}@media (min-width:960px) and (max-width:1199px){.container_rui_a74c{width:976px}.col-md-10_rui_a74c,.col-md-11_rui_a74c,.col-md-12_rui_a74c,.col-md-1_rui_a74c,.col-md-2_rui_a74c,.col-md-3_rui_a74c,.col-md-4_rui_a74c,.col-md-5_rui_a74c,.col-md-6_rui_a74c,.col-md-7_rui_a74c,.col-md-8_rui_a74c,.col-md-9_rui_a74c,.col-md-offset-0_rui_a74c,.col-md-offset-10_rui_a74c,.col-md-offset-11_rui_a74c,.col-md-offset-12_rui_a74c,.col-md-offset-1_rui_a74c,.col-md-offset-2_rui_a74c,.col-md-offset-3_rui_a74c,.col-md-offset-4_rui_a74c,.col-md-offset-5_rui_a74c,.col-md-offset-6_rui_a74c,.col-md-offset-7_rui_a74c,.col-md-offset-8_rui_a74c,.col-md-offset-9_rui_a74c,.col-md_rui_a74c{box-sizing:border-box;flex:0 0 auto;padding-left:8px;padding-right:8px}.col-md_rui_a74c{flex-basis:0;flex-grow:1;max-width:100%}.col-md-1_rui_a74c{flex-basis:8.3333%;max-width:8.3333%}.col-md-2_rui_a74c{flex-basis:16.6667%;max-width:16.6667%}.col-md-3_rui_a74c{flex-basis:25%;max-width:25%}.col-md-4_rui_a74c{flex-basis:33.3333%;max-width:33.3333%}.col-md-5_rui_a74c{flex-basis:41.6667%;max-width:41.6667%}.col-md-6_rui_a74c{flex-basis:50%;max-width:50%}.col-md-7_rui_a74c{flex-basis:58.3333%;max-width:58.3333%}.col-md-8_rui_a74c{flex-basis:66.6667%;max-width:66.6667%}.col-md-9_rui_a74c{flex-basis:75%;max-width:75%}.col-md-10_rui_a74c{flex-basis:83.3333%;max-width:83.3333%}.col-md-11_rui_a74c{flex-basis:91.6667%;max-width:91.6667%}.col-md-12_rui_a74c{flex-basis:100%;max-width:100%}.col-md-offset-0_rui_a74c{margin-left:0}.col-md-offset-1_rui_a74c{margin-left:8.3333%}.col-md-offset-2_rui_a74c{margin-left:16.6667%}.col-md-offset-3_rui_a74c{margin-left:25%}.col-md-offset-4_rui_a74c{margin-left:33.3333%}.col-md-offset-5_rui_a74c{margin-left:41.6667%}.col-md-offset-6_rui_a74c{margin-left:50%}.col-md-offset-7_rui_a74c{margin-left:58.3333%}.col-md-offset-8_rui_a74c{margin-left:66.6667%}.col-md-offset-9_rui_a74c{margin-left:75%}.col-md-offset-10_rui_a74c{margin-left:83.3333%}.col-md-offset-11_rui_a74c{margin-left:91.6667%}.start-md_rui_a74c{justify-content:flex-start;text-align:start}.center-md_rui_a74c{justify-content:center;text-align:center}.end-md_rui_a74c{justify-content:flex-end;text-align:end}.top-md_rui_a74c{align-items:flex-start}.middle-md_rui_a74c{align-items:center}.baseline-md_rui_a74c{align-items:baseline}.bottom-md_rui_a74c{align-items:flex-end}.around-md_rui_a74c{justify-content:space-around}.between-md_rui_a74c{justify-content:space-between}.first-md_rui_a74c{order:-1}.last-md_rui_a74c{order:1}}@media (min-width:1200px){.container_rui_a74c{width:1216px}.col-lg-10_rui_a74c,.col-lg-11_rui_a74c,.col-lg-12_rui_a74c,.col-lg-1_rui_a74c,.col-lg-2_rui_a74c,.col-lg-3_rui_a74c,.col-lg-4_rui_a74c,.col-lg-5_rui_a74c,.col-lg-6_rui_a74c,.col-lg-7_rui_a74c,.col-lg-8_rui_a74c,.col-lg-9_rui_a74c,.col-lg-offset-0_rui_a74c,.col-lg-offset-10_rui_a74c,.col-lg-offset-11_rui_a74c,.col-lg-offset-12_rui_a74c,.col-lg-offset-1_rui_a74c,.col-lg-offset-2_rui_a74c,.col-lg-offset-3_rui_a74c,.col-lg-offset-4_rui_a74c,.col-lg-offset-5_rui_a74c,.col-lg-offset-6_rui_a74c,.col-lg-offset-7_rui_a74c,.col-lg-offset-8_rui_a74c,.col-lg-offset-9_rui_a74c,.col-lg_rui_a74c{box-sizing:border-box;flex:0 0 auto;padding-left:8px;padding-right:8px}.col-lg_rui_a74c{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-1_rui_a74c{flex-basis:8.3333%;max-width:8.3333%}.col-lg-2_rui_a74c{flex-basis:16.6667%;max-width:16.6667%}.col-lg-3_rui_a74c{flex-basis:25%;max-width:25%}.col-lg-4_rui_a74c{flex-basis:33.3333%;max-width:33.3333%}.col-lg-5_rui_a74c{flex-basis:41.6667%;max-width:41.6667%}.col-lg-6_rui_a74c{flex-basis:50%;max-width:50%}.col-lg-7_rui_a74c{flex-basis:58.3333%;max-width:58.3333%}.col-lg-8_rui_a74c{flex-basis:66.6667%;max-width:66.6667%}.col-lg-9_rui_a74c{flex-basis:75%;max-width:75%}.col-lg-10_rui_a74c{flex-basis:83.3333%;max-width:83.3333%}.col-lg-11_rui_a74c{flex-basis:91.6667%;max-width:91.6667%}.col-lg-12_rui_a74c{flex-basis:100%;max-width:100%}.col-lg-offset-0_rui_a74c{margin-left:0}.col-lg-offset-1_rui_a74c{margin-left:8.3333%}.col-lg-offset-2_rui_a74c{margin-left:16.6667%}.col-lg-offset-3_rui_a74c{margin-left:25%}.col-lg-offset-4_rui_a74c{margin-left:33.3333%}.col-lg-offset-5_rui_a74c{margin-left:41.6667%}.col-lg-offset-6_rui_a74c{margin-left:50%}.col-lg-offset-7_rui_a74c{margin-left:58.3333%}.col-lg-offset-8_rui_a74c{margin-left:66.6667%}.col-lg-offset-9_rui_a74c{margin-left:75%}.col-lg-offset-10_rui_a74c{margin-left:83.3333%}.col-lg-offset-11_rui_a74c{margin-left:91.6667%}.start-lg_rui_a74c{justify-content:flex-start;text-align:start}.center-lg_rui_a74c{justify-content:center;text-align:center}.end-lg_rui_a74c{justify-content:flex-end;text-align:end}.top-lg_rui_a74c{align-items:flex-start}.middle-lg_rui_a74c{align-items:center}.baseline-lg_rui_a74c{align-items:baseline}.bottom-lg_rui_a74c{align-items:flex-end}.around-lg_rui_a74c{justify-content:space-around}.between-lg_rui_a74c{justify-content:space-between}.first-lg_rui_a74c{order:-1}.last-lg_rui_a74c{order:1}}.light_rui_1238,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}:root{--ring-header-link-color:var(--ring-link-color)}.dark_rui_eb55{--ring-header-link-color:var(--ring-text-color)}.header_rui_1238{align-items:center;background-color:#fff;background-color:var(--ring-navigation-background-color);box-sizing:border-box;color:#1f2326;color:var(--ring-text-color);display:flex;height:64px;line-height:61px;overflow:hidden}.header_rui_1238>*{box-sizing:border-box;display:inline-block;height:64px;padding:0 12px 3px}.header_rui_1238 .link_rui_d382{color:#0f5b99;color:var(--ring-link-color);color:var(--ring-header-link-color)}.header_rui_1238 .active_rui_d382{color:#1f2326;color:var(--ring-active-text-color)}.headerSpaced_rui_1238>:first-child{padding-left:32px}.headerSpaced_rui_1238>:last-child{padding-right:32px}.logo_rui_1238{align-items:center;color:#fff;color:var(--ring-navigation-background-color);display:inline-flex;height:64px;line-height:normal}.logo_rui_1238 svg{vertical-align:bottom}.tray_rui_1238{align-items:flex-end;margin-left:auto;padding:0 0 3px}.tray_rui_1238.tray_rui_1238{display:flex}.trayItemContent_rui_1238{height:61px}.icon_rui_1238{text-align:center;vertical-align:top;width:40px}.icon_rui_1238.icon_rui_1238{height:61px;line-height:61px;padding-top:4px}.main_rui_1238 svg{color:#0080e5;color:var(--ring-main-color)}.rotatable_rui_1238 svg{transform:rotate(0deg);transform-origin:50% 50%;transition:transform .3s ease-out}.rotated_rui_1238 svg{transform:rotate(90deg)}.profileEmpty_rui_1238{align-items:center;height:61px;padding-left:8px;vertical-align:bottom;width:auto}.profileEmpty_rui_1238.profileEmpty_rui_1238{display:inline-flex}.profile_rui_1238{cursor:pointer;height:61px}.avatarWrapper_rui_1238{line-height:0}.hasUpdates_rui_1238{position:relative}.hasUpdates_rui_1238:after{background-color:#ff008c;background-color:var(--ring-link-hover-color);border:1px solid #fff;border:1px solid var(--ring-white-text-color);border-radius:50%;content:"";display:block;height:8px;position:absolute;right:calc(15% - 5px);top:calc(15% - 5px);width:8px}.light_rui_e0d5,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.services_rui_e0d5{background-color:#fff;background-color:var(--ring-navigation-background-color);line-height:10px;max-width:402px;padding:32px 32px 24px}.active_rui_e0d5{font-weight:700}.item_rui_e0d5{box-sizing:border-box;color:#1f2326;color:var(--ring-active-text-color);display:inline-block;height:112px;line-height:normal;overflow-x:hidden;text-align:center;text-overflow:ellipsis;width:112px}.item_rui_e0d5:after{height:112px;vertical-align:middle}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.item_rui_e0d5:not(:hover),.item_rui_e0d5:visited:not(:hover){color:#1f2326;color:var(--ring-active-text-color)}}}.itemLogo_rui_e0d5{background-repeat:no-repeat;background-size:contain;display:inline-block;height:48px;margin:16px 0 9px;width:48px}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.activeItem_rui_e0d5:hover{color:#1f2326;color:var(--ring-active-text-color)}}}.line_rui_e0d5{background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.3),transparent);height:1px;margin:32px 0 16px}.itemStacked_rui_e0d5{display:inline-block;line-height:16px;margin-bottom:16px;text-decoration:none;width:100%}.itemStacked_rui_e0d5,.itemStacked_rui_e0d5:visited{color:#737577;color:var(--ring-secondary-color)}.itemStacked_rui_e0d5:last-child{margin-bottom:-24px}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.activeItemStacked_rui_e0d5:hover{color:#737577;color:var(--ring-secondary-color)}}}.light_rui_0b90,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.heightS_rui_0b90{--ring-button-height:24px;--ring-button-font-size:var(--ring-font-size-smaller)}.heightM_rui_0b90{--ring-button-height:28px;--ring-button-font-size:var(--ring-font-size)}.heightL_rui_0b90{--ring-button-height:32px;--ring-button-font-size:var(--ring-font-size)}.button_rui_0b90{background-color:#fff;background-color:var(--ring-content-background-color);border:0;border-radius:4px;border-radius:var(--ring-border-radius);box-shadow:inset 0 0 0 1px #c5d1db;box-shadow:inset 0 0 0 1px var(--ring-borders-color);box-sizing:border-box;color:#1f2326;color:var(--ring-text-color);cursor:pointer;display:inline-block;font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;font-family:var(--ring-font-family);font-size:var(--ring-button-font-size);height:var(--ring-button-height);line-height:var(--ring-button-height);margin:0;outline:0;padding:0 16px;position:relative;text-decoration:none;transition:color .3s ease-out,background-color .3s ease-out,box-shadow .3s ease-out;transition:color var(--ring-ease),background-color var(--ring-ease),box-shadow var(--ring-ease)}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.button_rui_0b90:hover{box-shadow:inset 0 0 0 1px #80c6ff;box-shadow:inset 0 0 0 1px var(--ring-border-hover-color);transition:none}}}.button_rui_0b90:active{background-color:#d4edff;background-color:var(--ring-selected-background-color);box-shadow:inset 0 0 0 1px #80c6ff;box-shadow:inset 0 0 0 1px var(--ring-border-hover-color);transition:none}.button_rui_0b90.focus-visible{box-shadow:inset 0 0 0 1px #80c6ff,0 0 0 1px #80c6ff;box-shadow:inset 0 0 0 1px var(--ring-border-hover-color),0 0 0 1px var(--ring-border-hover-color);transition:none}.button_rui_0b90.active_rui_0b90{background-color:#ebf6ff;background-color:var(--ring-hover-background-color);box-shadow:inset 0 0 0 1px #0080e5;box-shadow:inset 0 0 0 1px var(--ring-main-color);transition:none}.button_rui_0b90.active_rui_0b90.focus-visible{box-shadow:inset 0 0 0 2px #0080e5,0 0 0 1px #80c6ff;box-shadow:inset 0 0 0 2px var(--ring-main-color),0 0 0 1px var(--ring-border-hover-color)}.button_rui_0b90[disabled]{background-color:#f5f5f5;background-color:var(--ring-disabled-background-color);box-shadow:inset 0 0 0 1px #d4d4d4;box-shadow:inset 0 0 0 1px var(--ring-border-disabled-color);pointer-events:none}.button_rui_0b90.active_rui_0b90[disabled]{background-color:#e8e8e8;background-color:var(--ring-disabled-selected-background-color)}.button_rui_0b90.withIcon_rui_0b90[disabled],.button_rui_0b90[disabled]{color:#999;color:var(--ring-disabled-color)}.button_rui_0b90[disabled] .icon_rui_0b90{color:#d4d4d4;color:var(--ring-icon-disabled-color)}.button_rui_0b90::-moz-focus-inner{border:0;outline:0;padding:0}.withIcon_rui_0b90{color:#737577;color:var(--ring-secondary-color)}.primary_rui_0b90{background-color:#0080e5;background-color:var(--ring-main-color);box-shadow:none;color:#fff;color:var(--ring-white-text-color)}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.primary_rui_0b90:hover{background-color:#0070cc;background-color:var(--ring-main-hover-color);box-shadow:none;transition:none}}}.primary_rui_0b90.withIcon_rui_0b90,.primary_rui_0b90.withIcon_rui_0b90.active_rui_0b90,.primary_rui_0b90.withIcon_rui_0b90:active{color:#0080e5;color:var(--ring-action-link-color)}.primary_rui_0b90.active_rui_0b90,.primary_rui_0b90.focus-visible,.primary_rui_0b90:active{background-color:#1a98ff;background-color:var(--ring-button-primary-background-color)}.primary_rui_0b90.active_rui_0b90,.primary_rui_0b90:active{box-shadow:inset 0 0 0 1px #0062b2;box-shadow:inset 0 0 0 1px var(--ring-button-primary-border-color)}.primary_rui_0b90[disabled]{background-color:#f5f5f5;background-color:var(--ring-disabled-background-color);box-shadow:inset 0 0 0 1px #d4d4d4;box-shadow:inset 0 0 0 1px var(--ring-border-disabled-color)}.primary_rui_0b90.loader_rui_0b90[disabled]{color:#fff;color:var(--ring-white-text-color)}.primary_rui_0b90 .loaderBackground_rui_0b90{border-radius:4px;border-radius:var(--ring-border-radius);bottom:0;left:0;right:0;top:0}.primary_rui_0b90 .loaderBackground_rui_0b90:before{background-image:linear-gradient(90deg,#0080e5,#33a3ff 40%,#0080e5 80%);background-image:linear-gradient(to right,var(--ring-main-color),var(--ring-button-loader-background) 40%,var(--ring-main-color) 80%)}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.danger_rui_0b90:hover{box-shadow:inset 0 0 0 1px #db5860;box-shadow:inset 0 0 0 1px var(--ring-button-danger-hover-color);transition:none}}}.danger_rui_0b90,.danger_rui_0b90.text_rui_0b90,.danger_rui_0b90.text_rui_0b90.active_rui_0b90,.danger_rui_0b90.text_rui_0b90:active,.danger_rui_0b90.withIcon_rui_0b90,.danger_rui_0b90.withIcon_rui_0b90.active_rui_0b90,.danger_rui_0b90.withIcon_rui_0b90:active{color:#a90f1a;color:var(--ring-error-color)}.danger_rui_0b90.active_rui_0b90,.danger_rui_0b90:active{background-color:#ffe7e8;background-color:var(--ring-button-danger-active-color)}.danger_rui_0b90.active_rui_0b90,.danger_rui_0b90.focus-visible,.danger_rui_0b90:active{box-shadow:inset 0 0 0 1px #db5860;box-shadow:inset 0 0 0 1px var(--ring-button-danger-hover-color)}.danger_rui_0b90.focus-visible{transition:none}.text_rui_0b90.text_rui_0b90,.withIcon_rui_0b90.withIcon_rui_0b90{background-color:transparent;box-shadow:none}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.text_rui_0b90.text_rui_0b90:hover,.withIcon_rui_0b90.withIcon_rui_0b90:hover{transition:none}}}.text_rui_0b90.text_rui_0b90.active_rui_0b90,.text_rui_0b90.text_rui_0b90:active,.withIcon_rui_0b90.withIcon_rui_0b90.active_rui_0b90,.withIcon_rui_0b90.withIcon_rui_0b90:active{background-color:transparent;box-shadow:none}.text_rui_0b90.text_rui_0b90.focus-visible,.withIcon_rui_0b90.withIcon_rui_0b90.focus-visible{box-shadow:inset 0 0 0 2px #80c6ff;box-shadow:inset 0 0 0 2px var(--ring-border-hover-color)}.loader_rui_0b90.text_rui_0b90>.content_rui_0b90{animation-duration:1.2s;animation-iteration-count:infinite;animation-name:text-loading_rui_0b90}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.text_rui_0b90.text_rui_0b90:hover,.withIcon_rui_0b90:hover:not(.focus-visible){background-color:transparent;box-shadow:none}}}.text_rui_0b90{color:#0080e5;color:var(--ring-action-link-color)}.inline_rui_0b90{display:inline-block;font-size:14px;font-size:var(--ring-font-size);margin:0;padding:0}.withIcon_rui_0b90{padding:0 8px}.text_rui_0b90.active_rui_0b90,.text_rui_0b90:active{color:#ff008c;color:var(--ring-link-hover-color)}.withIcon_rui_0b90.active_rui_0b90,.withIcon_rui_0b90:active{color:#0080e5;color:var(--ring-action-link-color)}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.text_rui_0b90:hover,.withIcon_rui_0b90:hover{color:#ff008c;color:var(--ring-link-hover-color)}}}.icon_rui_0b90{color:inherit;line-height:normal}.icon_rui_0b90:not(:last-child){margin-right:4px}.withNormalIcon_rui_0b90 .icon_rui_0b90{color:#b8d1e5;color:var(--ring-icon-color);transition:color .3s ease-out;transition:color var(--ring-ease)}.withNormalIcon_rui_0b90.active_rui_0b90,.withNormalIcon_rui_0b90:active{color:#0080e5;color:var(--ring-main-color)}.withNormalIcon_rui_0b90.active_rui_0b90 .icon_rui_0b90,.withNormalIcon_rui_0b90:active .icon_rui_0b90{color:inherit;transition:none}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.withDangerIcon_rui_0b90:hover .icon_rui_0b90,.withNormalIcon_rui_0b90:hover .icon_rui_0b90{color:inherit;transition:none}}}.withDangerIcon_rui_0b90 .icon_rui_0b90,.withDangerIcon_rui_0b90:active .icon_rui_0b90{color:#db5860;color:var(--ring-icon-error-color)}.loader_rui_0b90{background-color:transparent;pointer-events:none;position:relative;z-index:0}.loaderBackground_rui_0b90{border-radius:2px;border-radius:var(--ring-border-radius-small);bottom:1px;left:1px;overflow:hidden;position:absolute;right:1px;top:1px;z-index:-1}.loaderBackground_rui_0b90:before{animation:progress_rui_0b90 1s linear infinite;background-image:linear-gradient(90deg,#fff,#d4edff 40%,#fff 80%);background-image:linear-gradient(to right,var(--ring-content-background-color),var(--ring-selected-background-color) 40%,var(--ring-content-background-color) 80%);background-repeat:repeat;background-size:64px;content:"";display:block;height:100%;width:calc(100% + 64px)}.delayed_rui_0b90 .content_rui_0b90:after{content:"…"}.short_rui_0b90{padding:0;width:32px}.dropdownIcon_rui_0b90{color:#999;color:var(--ring-icon-secondary-color);line-height:normal;margin-left:2px;margin-right:-2px;transition:color .3s ease-out;transition:color var(--ring-ease)}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.button_rui_0b90:hover .dropdownIcon_rui_0b90{color:#0080e5;color:var(--ring-main-color);transition:none}}}@keyframes progress_rui_0b90{0%{transform:translateX(-64px)}to{transform:translateX(0)}}@keyframes text-loading_rui_0b90{50%{opacity:.5}}.light_rui_e356,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.heightS_rui_e356{--ring-button-height:24px;--ring-button-font-size:var(--ring-font-size-smaller)}.heightM_rui_e356{--ring-button-height:28px;--ring-button-font-size:var(--ring-font-size)}.heightL_rui_e356{--ring-button-height:32px;--ring-button-font-size:var(--ring-font-size)}.button_rui_e356{background-color:#fff;background-color:var(--ring-content-background-color);border:0;border-radius:4px;border-radius:var(--ring-border-radius);box-shadow:inset 0 0 0 1px #c5d1db;box-shadow:inset 0 0 0 1px var(--ring-borders-color);box-sizing:border-box;color:#1f2326;color:var(--ring-text-color);cursor:pointer;display:inline-block;font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;font-family:var(--ring-font-family);font-size:var(--ring-button-font-size);height:var(--ring-button-height);line-height:var(--ring-button-height);margin:0;outline:0;padding:0 16px;position:relative;text-decoration:none;transition:color .3s ease-out,background-color .3s ease-out,box-shadow .3s ease-out;transition:color var(--ring-ease),background-color var(--ring-ease),box-shadow var(--ring-ease)}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.button_rui_e356:hover{box-shadow:inset 0 0 0 1px #80c6ff;box-shadow:inset 0 0 0 1px var(--ring-border-hover-color);transition:none}}}.button_rui_e356:active{background-color:#d4edff;background-color:var(--ring-selected-background-color);box-shadow:inset 0 0 0 1px #80c6ff;box-shadow:inset 0 0 0 1px var(--ring-border-hover-color);transition:none}.button_rui_e356.focus-visible{box-shadow:inset 0 0 0 1px #80c6ff,0 0 0 1px #80c6ff;box-shadow:inset 0 0 0 1px var(--ring-border-hover-color),0 0 0 1px var(--ring-border-hover-color);transition:none}.button_rui_e356.active_rui_e356{background-color:#ebf6ff;background-color:var(--ring-hover-background-color);box-shadow:inset 0 0 0 1px #0080e5;box-shadow:inset 0 0 0 1px var(--ring-main-color);transition:none}.button_rui_e356.active_rui_e356.focus-visible{box-shadow:inset 0 0 0 2px #0080e5,0 0 0 1px #80c6ff;box-shadow:inset 0 0 0 2px var(--ring-main-color),0 0 0 1px var(--ring-border-hover-color)}.button_rui_e356[disabled]{background-color:#f5f5f5;background-color:var(--ring-disabled-background-color);box-shadow:inset 0 0 0 1px #d4d4d4;box-shadow:inset 0 0 0 1px var(--ring-border-disabled-color);pointer-events:none}.button_rui_e356.active_rui_e356[disabled]{background-color:#e8e8e8;background-color:var(--ring-disabled-selected-background-color)}.button_rui_e356.withIcon_rui_e356[disabled],.button_rui_e356[disabled]{color:#999;color:var(--ring-disabled-color)}.button_rui_e356[disabled] .icon_rui_e356{color:#d4d4d4;color:var(--ring-icon-disabled-color)}.button_rui_e356::-moz-focus-inner{border:0;outline:0;padding:0}.withIcon_rui_e356{color:#737577;color:var(--ring-secondary-color)}.primary_rui_e356{background-color:#0080e5;background-color:var(--ring-main-color);box-shadow:none;color:#fff;color:var(--ring-white-text-color)}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.primary_rui_e356:hover{background-color:#0070cc;background-color:var(--ring-main-hover-color);box-shadow:none;transition:none}}}.primary_rui_e356.withIcon_rui_e356,.primary_rui_e356.withIcon_rui_e356.active_rui_e356,.primary_rui_e356.withIcon_rui_e356:active{color:#0080e5;color:var(--ring-action-link-color)}.primary_rui_e356.active_rui_e356,.primary_rui_e356.focus-visible,.primary_rui_e356:active{background-color:#1a98ff;background-color:var(--ring-button-primary-background-color)}.primary_rui_e356.active_rui_e356,.primary_rui_e356:active{box-shadow:inset 0 0 0 1px #0062b2;box-shadow:inset 0 0 0 1px var(--ring-button-primary-border-color)}.primary_rui_e356[disabled]{background-color:#f5f5f5;background-color:var(--ring-disabled-background-color);box-shadow:inset 0 0 0 1px #d4d4d4;box-shadow:inset 0 0 0 1px var(--ring-border-disabled-color)}.primary_rui_e356.loader_rui_e356[disabled]{color:#fff;color:var(--ring-white-text-color)}.primary_rui_e356 .loaderBackground_rui_e356{border-radius:4px;border-radius:var(--ring-border-radius);bottom:0;left:0;right:0;top:0}.primary_rui_e356 .loaderBackground_rui_e356:before{background-image:linear-gradient(90deg,#0080e5,#33a3ff 40%,#0080e5 80%);background-image:linear-gradient(to right,var(--ring-main-color),var(--ring-button-loader-background) 40%,var(--ring-main-color) 80%)}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.danger_rui_e356:hover{box-shadow:inset 0 0 0 1px #db5860;box-shadow:inset 0 0 0 1px var(--ring-button-danger-hover-color);transition:none}}}.danger_rui_e356,.danger_rui_e356.text_rui_e356,.danger_rui_e356.text_rui_e356.active_rui_e356,.danger_rui_e356.text_rui_e356:active,.danger_rui_e356.withIcon_rui_e356,.danger_rui_e356.withIcon_rui_e356.active_rui_e356,.danger_rui_e356.withIcon_rui_e356:active{color:#a90f1a;color:var(--ring-error-color)}.danger_rui_e356.active_rui_e356,.danger_rui_e356:active{background-color:#ffe7e8;background-color:var(--ring-button-danger-active-color)}.danger_rui_e356.active_rui_e356,.danger_rui_e356.focus-visible,.danger_rui_e356:active{box-shadow:inset 0 0 0 1px #db5860;box-shadow:inset 0 0 0 1px var(--ring-button-danger-hover-color)}.danger_rui_e356.focus-visible{transition:none}.text_rui_e356.text_rui_e356,.withIcon_rui_e356.withIcon_rui_e356{background-color:transparent;box-shadow:none}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.text_rui_e356.text_rui_e356:hover,.withIcon_rui_e356.withIcon_rui_e356:hover{transition:none}}}.text_rui_e356.text_rui_e356.active_rui_e356,.text_rui_e356.text_rui_e356:active,.withIcon_rui_e356.withIcon_rui_e356.active_rui_e356,.withIcon_rui_e356.withIcon_rui_e356:active{background-color:transparent;box-shadow:none}.text_rui_e356.text_rui_e356.focus-visible,.withIcon_rui_e356.withIcon_rui_e356.focus-visible{box-shadow:inset 0 0 0 2px #80c6ff;box-shadow:inset 0 0 0 2px var(--ring-border-hover-color)}.loader_rui_e356.text_rui_e356>.content_rui_e356{animation-duration:1.2s;animation-iteration-count:infinite;animation-name:text-loading_rui_e356}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.text_rui_e356.text_rui_e356:hover,.withIcon_rui_e356:hover:not(.focus-visible){background-color:transparent;box-shadow:none}}}.text_rui_e356{color:#0080e5;color:var(--ring-action-link-color)}.inline_rui_e356{display:inline-block;font-size:14px;font-size:var(--ring-font-size);margin:0;padding:0}.withIcon_rui_e356{padding:0 8px}.text_rui_e356.active_rui_e356,.text_rui_e356:active{color:#ff008c;color:var(--ring-link-hover-color)}.withIcon_rui_e356.active_rui_e356,.withIcon_rui_e356:active{color:#0080e5;color:var(--ring-action-link-color)}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.text_rui_e356:hover,.withIcon_rui_e356:hover{color:#ff008c;color:var(--ring-link-hover-color)}}}.icon_rui_e356{color:inherit;line-height:normal}.icon_rui_e356:not(:last-child){margin-right:4px}.withNormalIcon_rui_e356 .icon_rui_e356{color:#b8d1e5;color:var(--ring-icon-color);transition:color .3s ease-out;transition:color var(--ring-ease)}.withNormalIcon_rui_e356.active_rui_e356,.withNormalIcon_rui_e356:active{color:#0080e5;color:var(--ring-main-color)}.withNormalIcon_rui_e356.active_rui_e356 .icon_rui_e356,.withNormalIcon_rui_e356:active .icon_rui_e356{color:inherit;transition:none}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.withDangerIcon_rui_e356:hover .icon_rui_e356,.withNormalIcon_rui_e356:hover .icon_rui_e356{color:inherit;transition:none}}}.withDangerIcon_rui_e356 .icon_rui_e356,.withDangerIcon_rui_e356:active .icon_rui_e356{color:#db5860;color:var(--ring-icon-error-color)}.loader_rui_e356{background-color:transparent;pointer-events:none;position:relative;z-index:0}.loaderBackground_rui_e356{border-radius:2px;border-radius:var(--ring-border-radius-small);bottom:1px;left:1px;overflow:hidden;position:absolute;right:1px;top:1px;z-index:-1}.loaderBackground_rui_e356:before{animation:progress_rui_e356 1s linear infinite;background-image:linear-gradient(90deg,#fff,#d4edff 40%,#fff 80%);background-image:linear-gradient(to right,var(--ring-content-background-color),var(--ring-selected-background-color) 40%,var(--ring-content-background-color) 80%);background-repeat:repeat;background-size:64px;content:"";display:block;height:100%;width:calc(100% + 64px)}.delayed_rui_e356 .content_rui_e356:after{content:"…"}.short_rui_e356{padding:0;width:32px}.dropdownIcon_rui_e356{color:#999;color:var(--ring-icon-secondary-color);line-height:normal;margin-left:2px;margin-right:-2px;transition:color .3s ease-out;transition:color var(--ring-ease)}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.button_rui_e356:hover .dropdownIcon_rui_e356{color:#0080e5;color:var(--ring-main-color);transition:none}}}@keyframes progress_rui_e356{0%{transform:translateX(-64px)}to{transform:translateX(0)}}@keyframes text-loading_rui_e356{50%{opacity:.5}}.outerContainer_rui_e356{--ring-input-icon-offset:20px;--ring-input-padding-inline:8px}.borderless_rui_e356{--ring-input-padding-inline:0px}.container_rui_e356{font-size:14px;font-size:var(--ring-font-size);line-height:20px;line-height:var(--ring-line-height);position:relative}.container_rui_e356,.container_rui_e356 *{box-sizing:border-box}.input_rui_e356{--ring-input-padding-start:var(--ring-input-padding-inline);--ring-input-padding-end:var(--ring-input-padding-inline);background:transparent;border:1px solid #c5d1db;border:1px solid var(--ring-borders-color);border-radius:4px;border-radius:var(--ring-border-radius);caret-color:#0080e5;caret-color:var(--ring-main-color);color:#1f2326;color:var(--ring-text-color);font:inherit;margin:0;outline:none;padding:var(--ring-input-padding-block) var(--ring-input-padding-end) var(--ring-input-padding-block) var(--ring-input-padding-start);transition:border-color .3s ease-out;transition:border-color var(--ring-ease);width:100%}[dir=rtl] .input_rui_e356{padding-left:var(--ring-input-padding-end);padding-right:var(--ring-input-padding-start)}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.input_rui_e356:hover{border-color:#80c6ff;border-color:var(--ring-border-hover-color);transition:none}}}.error_rui_e356 .input_rui_e356{border-color:#db5860;border-color:var(--ring-icon-error-color)}.input_rui_e356:focus{border-color:#0080e5;border-color:var(--ring-main-color);transition:none}.input_rui_e356[disabled]{-webkit-text-fill-color:#999;-webkit-text-fill-color:var(--ring-disabled-color);background-color:#f5f5f5;background-color:var(--ring-disabled-background-color);border-color:#d4d4d4;border-color:var(--ring-border-disabled-color);color:#999;color:var(--ring-disabled-color)}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.input_rui_e356:-webkit-autofill:hover{-webkit-transition:background-color 50000s ease-in-out 0s;transition:background-color 50000s ease-in-out 0s}}}.input_rui_e356:-webkit-autofill,.input_rui_e356:-webkit-autofill:focus{-webkit-transition:background-color 50000s ease-in-out 0s;transition:background-color 50000s ease-in-out 0s}.borderless_rui_e356 .input_rui_e356{border-color:transparent}.withIcon_rui_e356 .input_rui_e356{--ring-input-padding-start:calc(var(--ring-input-padding-inline) + var(--ring-input-icon-offset))}.clearable_rui_e356 .input_rui_e356{--ring-input-padding-end:calc(var(--ring-input-padding-inline) + var(--ring-input-icon-offset))}.icon_rui_e356{color:#999;color:var(--ring-icon-secondary-color);left:var(--ring-input-padding-inline);pointer-events:none;position:absolute;top:calc(var(--ring-input-padding-block) + 1px)}[dir=rtl] .icon_rui_e356{left:auto;right:8px}.clear_rui_e356{height:auto;line-height:inherit;padding-right:0;position:absolute;right:var(--ring-input-padding-inline);top:calc(var(--ring-input-padding-block) + 2px)}.empty_rui_e356 .clear_rui_e356{display:none}[dir=rtl] .clear_rui_e356{left:8px;right:auto}textarea.input_rui_e356{box-sizing:border-box;overflow:hidden;resize:none}.label_rui_e356{color:#737577;color:var(--ring-secondary-color);display:block;font-size:12px;font-size:var(--ring-font-size-smaller);line-height:16px;line-height:var(--ring-line-height-lowest);margin-bottom:4px}.disabledLabel_rui_e356{color:#999;color:var(--ring-disabled-color)}.input_rui_e356::-moz-placeholder{color:#999;color:var(--ring-disabled-color)}.input_rui_e356::placeholder{color:#999;color:var(--ring-disabled-color)}.input_rui_e356::-webkit-search-cancel-button{-webkit-appearance:none}.errorText_rui_e356{color:#a90f1a;color:var(--ring-error-color);font-size:12px;font-size:var(--ring-font-size-smaller);line-height:16px;line-height:var(--ring-line-height-lowest);margin-top:4px}.sizeS_rui_e356{width:96px}.sizeM_rui_e356{width:240px}.sizeL_rui_e356{width:400px}.sizeFULL_rui_e356{width:100%}.heightS_rui_e356{--ring-input-padding-block:1px}.heightM_rui_e356{--ring-input-padding-block:3px}.heightL_rui_e356{--ring-input-padding-block:5px}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.filterWithTagsFocused_rui_531d.filterWithTagsFocused_rui_531d:hover{border-color:#0080e5;border-color:var(--ring-main-color)}}}.light_rui_531d,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.filterWithTags_rui_531d{border:1px solid #c5d1db;border:1px solid var(--ring-borders-color);border-radius:4px;border-radius:var(--ring-border-radius);margin:16px 8px 0;overflow:hidden;padding:3px;text-align:left}.filterWithTags_rui_531d .filterWrapper_rui_531d{border-bottom:none;padding-left:0;padding-right:0}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.filterWithTags_rui_531d:hover{border-color:#80c6ff;border-color:var(--ring-border-hover-color)}}}.filterWithTagsFocused_rui_531d{border-color:#0080e5;border-color:var(--ring-main-color)}.filterWithTagsInput_rui_531d{border:none;padding:0}.filter_rui_531d{flex-grow:1;width:0}.filterWrapper_rui_531d{border-bottom:1px solid #c5d1db;border-bottom:1px solid var(--ring-borders-color);display:flex;margin:0;padding-left:44px;padding-right:8px;position:relative}[dir=rtl] .filterWrapper_rui_531d{padding-left:8px;padding-right:44px}.filterIcon_rui_531d{color:#b8d1e5;color:var(--ring-icon-color);left:16px;position:absolute;top:7px}[dir=rtl] .filterIcon_rui_531d{left:auto;right:16px}.bottomLine_rui_531d{text-align:center}.message_rui_531d{display:inline-block;margin:8px 0;padding:0 16px}.selectAll_rui_531d{display:flex;justify-content:space-between;padding:8px 16px 0}.light_rui_d990,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.checkbox_rui_d990{color:#1f2326;color:var(--ring-text-color);display:inline-block;outline:none;position:relative;text-align:left}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.checkbox_rui_d990:hover .cell_rui_d990{border-color:#80c6ff;border-color:var(--ring-border-hover-color);transition:background-color .3s ease-out;transition:background-color var(--ring-ease)}}}.cell_rui_d990{background-color:#fff;background-color:var(--ring-content-background-color);border:1px solid #c5d1db;border:1px solid var(--ring-borders-color);border-radius:2px;border-radius:var(--ring-border-radius-small);box-sizing:border-box;display:inline-block;height:14px;pointer-events:none;position:relative;top:-2px;transition:border-color .3s ease-out,background-color .3s ease-out,box-shadow .3s ease-out;transition:border-color var(--ring-ease),background-color var(--ring-ease),box-shadow var(--ring-ease);-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:14px}.icon_rui_d990.icon_rui_d990{color:#fff;color:var(--ring-white-text-color);height:16px;opacity:0;position:absolute;width:16px}.icon_rui_d990.icon_rui_d990 svg{left:0;position:absolute;top:0}.check_rui_d990{left:-1px;top:-1px}.minus_rui_d990{left:2px;opacity:0;top:1px}.input_rui_d990{cursor:pointer;height:100%;left:0;margin:0;opacity:0;position:absolute;top:0;width:100%}.input_rui_d990:checked+.cell_rui_d990,.input_rui_d990:indeterminate+.cell_rui_d990{background-color:#0080e5;background-color:var(--ring-main-color);border-color:transparent}.input_rui_d990:checked+.cell_rui_d990 .check_rui_d990{opacity:1}.input_rui_d990.focus-visible+.cell_rui_d990,.input_rui_d990.focus_rui_d990+.cell_rui_d990{border-color:#80c6ff;border-color:var(--ring-border-hover-color);box-shadow:0 0 0 1px #80c6ff;box-shadow:0 0 0 1px var(--ring-border-hover-color);transition:background-color .3s ease-out;transition:background-color var(--ring-ease)}.input_rui_d990:indeterminate+.cell_rui_d990 .minus_rui_d990{opacity:1}.input_rui_d990[disabled]{pointer-events:none}.input_rui_d990[disabled][disabled]+.cell_rui_d990{background-color:#f5f5f5;background-color:var(--ring-disabled-background-color);border-color:#e8e8e8;border-color:var(--ring-border-unselected-disabled-color)}.input_rui_d990[disabled]:checked+.cell_rui_d990,.input_rui_d990[disabled]:indeterminate+.cell_rui_d990{border-color:#d4d4d4;border-color:var(--ring-border-disabled-color)}.input_rui_d990[disabled]:checked+.cell_rui_d990 .check_rui_d990,.input_rui_d990[disabled]:indeterminate+.cell_rui_d990 .minus_rui_d990{color:#d4d4d4;color:var(--ring-border-disabled-color)}.input_rui_d990:indeterminate:indeterminate+.cell_rui_d990 .check_rui_d990{opacity:0;transition:none}.input_rui_d990[disabled]~.label_rui_d990{color:#999;color:var(--ring-disabled-color)}.label_rui_d990{line-height:normal;margin-left:8px}.light_rui_2d39,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.icon_rui_2d39{fill:currentColor;display:inline-block}.glyph_rui_2d39{display:inline-flex;margin-left:-1px;margin-right:-1px;pointer-events:none}.glyph_rui_2d39[width="10"]{vertical-align:-1px}.glyph_rui_2d39[width="14"]{margin-left:0;margin-right:-2px;vertical-align:-3px}.glyph_rui_2d39[width="16"]{vertical-align:-3px}.glyph_rui_2d39[width="20"]{vertical-align:-2px}.glyph_rui_2d39.compatibilityMode_rui_2d39{height:16px;margin-left:0;margin-right:0;width:16px}@media screen and (-webkit-min-device-pixel-ratio:0){.glyph_rui_2d39{width:auto}}.gray_rui_2d39{color:#999;color:var(--ring-icon-secondary-color)}.hover_rui_2d39{color:#ff008c;color:var(--ring-icon-hover-color)}.green_rui_2d39{color:#59a869;color:var(--ring-icon-success-color)}.magenta_rui_2d39{color:#ff008c;color:var(--ring-link-hover-color)}.red_rui_2d39{color:#db5860;color:var(--ring-icon-error-color)}.blue_rui_2d39{color:#0080e5;color:var(--ring-main-color)}.white_rui_2d39{color:#fff;color:var(--ring-white-text-color)}.loading_rui_2d39{animation-duration:1.2s;animation-iteration-count:infinite;animation-name:icon-loading_rui_2d39}@keyframes icon-loading_rui_2d39{0%{transform:scale(1)}50%{opacity:.5;transform:scale(.9)}to{transform:scale(1)}}.clearfix_rui_8bff:after{clear:both;content:"";display:block}.font_rui_8bff{font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;font-family:var(--ring-font-family);font-size:14px;font-size:var(--ring-font-size);line-height:20px;line-height:var(--ring-line-height)}.font-lower_rui_8bff{line-height:18px;line-height:var(--ring-line-height-lower)}.font-smaller_rui_8bff{font-size:12px;font-size:var(--ring-font-size-smaller)}.font-smaller-lower_rui_8bff{line-height:16px;line-height:var(--ring-line-height-lowest)}.font-larger-lower_rui_8bff{font-size:15px;font-size:var(--ring-font-size-larger)}.font-larger_rui_8bff{line-height:21px;line-height:var(--ring-line-height-taller)}.thin-font_rui_8bff{font-family:Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;font-size:var(--ring-font-size);font-weight:100}.monospace-font_rui_8bff{font-family:Menlo,Bitstream Vera Sans Mono,Ubuntu Mono,Consolas,Courier New,Courier,monospace;font-family:var(--ring-font-family-monospace);font-size:12px;font-size:var(--ring-font-size-smaller)}.ellipsis_rui_8bff{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.resetButton_rui_8bff{background-color:transparent;border:0;color:inherit;font:inherit;overflow:visible;padding:0;text-align:left}.resetButton_rui_8bff::-moz-focus-inner{border:0;padding:0}.light_rui_93ef,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.list_rui_93ef{border-radius:4px;border-radius:var(--ring-border-radius);line-height:normal;position:relative;z-index:1}.simpleInner_rui_93ef{overflow:auto}.scrolling_rui_93ef{pointer-events:none}.separator_rui_93ef{border-top:1px solid #dfe5eb;border-top:1px solid var(--ring-line-color);color:#737577;color:var(--ring-secondary-color);display:block;font-size:12px;font-size:var(--ring-font-size-smaller);line-height:18px;line-height:var(--ring-line-height-lower);margin-top:8px;min-height:8px;padding:0 16px 1px;text-align:right;white-space:nowrap}.separator_first_rui_93ef{border:none;margin-top:0;padding-top:0}.item_rui_93ef{box-sizing:border-box;display:block;font-size:14px;font-size:var(--ring-font-size);outline:none;text-align:left;text-decoration:none;vertical-align:bottom;white-space:nowrap;width:100%}.item_rui_93ef.item_rui_93ef{line-height:24px;padding:3px 16px 5px}.itemContainer_rui_93ef{position:relative}.compact_rui_93ef{line-height:16px}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.error_rui_93ef:hover{color:#a90f1a;color:var(--ring-error-color)}}}.error_rui_93ef{cursor:default}.error_rui_93ef,.error_rui_93ef:focus,.error_rui_93ef:visited{color:#a90f1a;color:var(--ring-error-color)}.add_rui_93ef{line-height:32px;padding:8px 16px}.top_rui_93ef{align-items:baseline;display:flex;flex-direction:row}.left_rui_93ef{align-self:center;flex-shrink:0}.label_rui_93ef{flex-grow:1;flex-shrink:1;overflow:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap}[dir=rtl] .label_rui_93ef{direction:ltr;text-align:right}.description_rui_93ef{color:#737577;color:var(--ring-secondary-color);flex-shrink:100;font-size:12px;font-size:var(--ring-font-size-smaller);font-weight:400;line-height:16px;line-height:var(--ring-line-height-lowest);overflow:hidden;padding-left:8px;text-align:right;text-overflow:ellipsis;white-space:nowrap}.right_rui_93ef{align-items:center;align-self:center;display:flex;flex-direction:row;flex-shrink:0}.details_rui_93ef{color:#737577;color:var(--ring-secondary-color);font-size:12px;font-size:var(--ring-font-size-smaller);line-height:16px;line-height:var(--ring-line-height-lowest);margin-bottom:6px;white-space:normal}.padded_rui_93ef{margin-left:20px}.hint_rui_93ef.hint_rui_93ef{background-color:#f7f9fa;background-color:var(--ring-sidebar-background-color);border-top:1px solid #dfe5eb;border-top:1px solid var(--ring-line-color);font-size:12px;font-size:var(--ring-font-size-smaller);margin-bottom:0}.action_rui_93ef{color:#1f2326;color:var(--ring-text-color);cursor:pointer}.actionLink_rui_93ef.actionLink_rui_93ef{transition:none}.hover_rui_93ef:not(.error_rui_93ef){background-color:#d4edff;background-color:var(--ring-selected-background-color)}.icon_rui_93ef{background-position:50%;background-repeat:no-repeat;background-size:contain;display:inline-block;height:20px;margin-left:16px;width:20px}.highlight_rui_93ef{color:#ff008c;color:var(--ring-link-hover-color)}.service_rui_93ef{color:#737577;color:var(--ring-secondary-color)}.glyph_rui_93ef{color:#999;color:var(--ring-icon-secondary-color);float:left;margin-right:8px;width:20px}.avatar_rui_93ef{height:20px;-o-object-fit:cover;object-fit:cover;-o-object-position:center;object-position:center;top:0}.rightGlyph_rui_93ef{float:right;margin-left:16px;margin-right:0}.checkboxContainer_rui_93ef{height:20px;left:19px;margin-right:8px;position:absolute;top:7px;width:20px}.compact_rui_93ef .checkboxContainer_rui_93ef{height:16px;top:0;width:16px}.title_rui_93ef{display:block;margin-bottom:6px;margin-top:10px;padding:8px 16px 0;text-align:left}[dir=rtl] .title_rui_93ef{direction:ltr;text-align:right}.title_first_rui_93ef{margin-top:0}.text_rui_93ef{color:#737577;color:var(--ring-secondary-color);font-size:12px;font-size:var(--ring-font-size-smaller);letter-spacing:1.5px;text-transform:uppercase}.fade_rui_93ef{background:linear-gradient(180deg,hsla(0,0%,100%,0),#fff);background:linear-gradient(to bottom,hsla(0,0%,100%,0),var(--ring-content-background-color));bottom:0;height:24px;pointer-events:none;position:absolute;width:100%}.disabled_rui_93ef{color:#999;color:var(--ring-disabled-color);pointer-events:none}.light_rui_d22e,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.heightS_rui_d22e{--ring-button-height:24px;--ring-button-font-size:var(--ring-font-size-smaller)}.heightM_rui_d22e{--ring-button-height:28px;--ring-button-font-size:var(--ring-font-size)}.heightL_rui_d22e{--ring-button-height:32px;--ring-button-font-size:var(--ring-font-size)}.button_rui_d22e{background-color:#fff;background-color:var(--ring-content-background-color);border:0;border-radius:4px;border-radius:var(--ring-border-radius);box-shadow:inset 0 0 0 1px #c5d1db;box-shadow:inset 0 0 0 1px var(--ring-borders-color);box-sizing:border-box;color:#1f2326;color:var(--ring-text-color);cursor:pointer;display:inline-block;font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;font-family:var(--ring-font-family);font-size:var(--ring-button-font-size);height:var(--ring-button-height);line-height:var(--ring-button-height);margin:0;outline:0;padding:0 16px;position:relative;text-decoration:none;transition:color .3s ease-out,background-color .3s ease-out,box-shadow .3s ease-out;transition:color var(--ring-ease),background-color var(--ring-ease),box-shadow var(--ring-ease)}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.button_rui_d22e:hover{box-shadow:inset 0 0 0 1px #80c6ff;box-shadow:inset 0 0 0 1px var(--ring-border-hover-color);transition:none}}}.button_rui_d22e:active{background-color:#d4edff;background-color:var(--ring-selected-background-color);box-shadow:inset 0 0 0 1px #80c6ff;box-shadow:inset 0 0 0 1px var(--ring-border-hover-color);transition:none}.button_rui_d22e.focus-visible{box-shadow:inset 0 0 0 1px #80c6ff,0 0 0 1px #80c6ff;box-shadow:inset 0 0 0 1px var(--ring-border-hover-color),0 0 0 1px var(--ring-border-hover-color);transition:none}.button_rui_d22e.active_rui_d22e{background-color:#ebf6ff;background-color:var(--ring-hover-background-color);box-shadow:inset 0 0 0 1px #0080e5;box-shadow:inset 0 0 0 1px var(--ring-main-color);transition:none}.button_rui_d22e.active_rui_d22e.focus-visible{box-shadow:inset 0 0 0 2px #0080e5,0 0 0 1px #80c6ff;box-shadow:inset 0 0 0 2px var(--ring-main-color),0 0 0 1px var(--ring-border-hover-color)}.button_rui_d22e[disabled]{background-color:#f5f5f5;background-color:var(--ring-disabled-background-color);box-shadow:inset 0 0 0 1px #d4d4d4;box-shadow:inset 0 0 0 1px var(--ring-border-disabled-color);pointer-events:none}.button_rui_d22e.active_rui_d22e[disabled]{background-color:#e8e8e8;background-color:var(--ring-disabled-selected-background-color)}.button_rui_d22e.withIcon_rui_d22e[disabled],.button_rui_d22e[disabled]{color:#999;color:var(--ring-disabled-color)}.button_rui_d22e[disabled] .icon_rui_d22e{color:#d4d4d4;color:var(--ring-icon-disabled-color)}.button_rui_d22e::-moz-focus-inner{border:0;outline:0;padding:0}.withIcon_rui_d22e{color:#737577;color:var(--ring-secondary-color)}.primary_rui_d22e{background-color:#0080e5;background-color:var(--ring-main-color);box-shadow:none;color:#fff;color:var(--ring-white-text-color)}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.primary_rui_d22e:hover{background-color:#0070cc;background-color:var(--ring-main-hover-color);box-shadow:none;transition:none}}}.primary_rui_d22e.withIcon_rui_d22e,.primary_rui_d22e.withIcon_rui_d22e.active_rui_d22e,.primary_rui_d22e.withIcon_rui_d22e:active{color:#0080e5;color:var(--ring-action-link-color)}.primary_rui_d22e.active_rui_d22e,.primary_rui_d22e.focus-visible,.primary_rui_d22e:active{background-color:#1a98ff;background-color:var(--ring-button-primary-background-color)}.primary_rui_d22e.active_rui_d22e,.primary_rui_d22e:active{box-shadow:inset 0 0 0 1px #0062b2;box-shadow:inset 0 0 0 1px var(--ring-button-primary-border-color)}.primary_rui_d22e[disabled]{background-color:#f5f5f5;background-color:var(--ring-disabled-background-color);box-shadow:inset 0 0 0 1px #d4d4d4;box-shadow:inset 0 0 0 1px var(--ring-border-disabled-color)}.primary_rui_d22e.loader_rui_d22e[disabled]{color:#fff;color:var(--ring-white-text-color)}.primary_rui_d22e .loaderBackground_rui_d22e{border-radius:4px;border-radius:var(--ring-border-radius);bottom:0;left:0;right:0;top:0}.primary_rui_d22e .loaderBackground_rui_d22e:before{background-image:linear-gradient(90deg,#0080e5,#33a3ff 40%,#0080e5 80%);background-image:linear-gradient(to right,var(--ring-main-color),var(--ring-button-loader-background) 40%,var(--ring-main-color) 80%)}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.danger_rui_d22e:hover{box-shadow:inset 0 0 0 1px #db5860;box-shadow:inset 0 0 0 1px var(--ring-button-danger-hover-color);transition:none}}}.danger_rui_d22e,.danger_rui_d22e.text_rui_d22e,.danger_rui_d22e.text_rui_d22e.active_rui_d22e,.danger_rui_d22e.text_rui_d22e:active,.danger_rui_d22e.withIcon_rui_d22e,.danger_rui_d22e.withIcon_rui_d22e.active_rui_d22e,.danger_rui_d22e.withIcon_rui_d22e:active{color:#a90f1a;color:var(--ring-error-color)}.danger_rui_d22e.active_rui_d22e,.danger_rui_d22e:active{background-color:#ffe7e8;background-color:var(--ring-button-danger-active-color)}.danger_rui_d22e.active_rui_d22e,.danger_rui_d22e.focus-visible,.danger_rui_d22e:active{box-shadow:inset 0 0 0 1px #db5860;box-shadow:inset 0 0 0 1px var(--ring-button-danger-hover-color)}.danger_rui_d22e.focus-visible{transition:none}.text_rui_d22e.text_rui_d22e,.withIcon_rui_d22e.withIcon_rui_d22e{background-color:transparent;box-shadow:none}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.text_rui_d22e.text_rui_d22e:hover,.withIcon_rui_d22e.withIcon_rui_d22e:hover{transition:none}}}.text_rui_d22e.text_rui_d22e.active_rui_d22e,.text_rui_d22e.text_rui_d22e:active,.withIcon_rui_d22e.withIcon_rui_d22e.active_rui_d22e,.withIcon_rui_d22e.withIcon_rui_d22e:active{background-color:transparent;box-shadow:none}.text_rui_d22e.text_rui_d22e.focus-visible,.withIcon_rui_d22e.withIcon_rui_d22e.focus-visible{box-shadow:inset 0 0 0 2px #80c6ff;box-shadow:inset 0 0 0 2px var(--ring-border-hover-color)}.loader_rui_d22e.text_rui_d22e>.content_rui_d22e{animation-duration:1.2s;animation-iteration-count:infinite;animation-name:text-loading_rui_d22e}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.text_rui_d22e.text_rui_d22e:hover,.withIcon_rui_d22e:hover:not(.focus-visible){background-color:transparent;box-shadow:none}}}.text_rui_d22e{color:#0080e5;color:var(--ring-action-link-color)}.inline_rui_d22e{display:inline-block;font-size:14px;font-size:var(--ring-font-size);margin:0;padding:0}.withIcon_rui_d22e{padding:0 8px}.text_rui_d22e.active_rui_d22e,.text_rui_d22e:active{color:#ff008c;color:var(--ring-link-hover-color)}.withIcon_rui_d22e.active_rui_d22e,.withIcon_rui_d22e:active{color:#0080e5;color:var(--ring-action-link-color)}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.text_rui_d22e:hover,.withIcon_rui_d22e:hover{color:#ff008c;color:var(--ring-link-hover-color)}}}.icon_rui_d22e{color:inherit;line-height:normal}.icon_rui_d22e:not(:last-child){margin-right:4px}.withNormalIcon_rui_d22e .icon_rui_d22e{color:#b8d1e5;color:var(--ring-icon-color);transition:color .3s ease-out;transition:color var(--ring-ease)}.withNormalIcon_rui_d22e.active_rui_d22e,.withNormalIcon_rui_d22e:active{color:#0080e5;color:var(--ring-main-color)}.withNormalIcon_rui_d22e.active_rui_d22e .icon_rui_d22e,.withNormalIcon_rui_d22e:active .icon_rui_d22e{color:inherit;transition:none}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.withDangerIcon_rui_d22e:hover .icon_rui_d22e,.withNormalIcon_rui_d22e:hover .icon_rui_d22e{color:inherit;transition:none}}}.withDangerIcon_rui_d22e .icon_rui_d22e,.withDangerIcon_rui_d22e:active .icon_rui_d22e{color:#db5860;color:var(--ring-icon-error-color)}.loader_rui_d22e{background-color:transparent;pointer-events:none;position:relative;z-index:0}.loaderBackground_rui_d22e{border-radius:2px;border-radius:var(--ring-border-radius-small);bottom:1px;left:1px;overflow:hidden;position:absolute;right:1px;top:1px;z-index:-1}.loaderBackground_rui_d22e:before{animation:progress_rui_d22e 1s linear infinite;background-image:linear-gradient(90deg,#fff,#d4edff 40%,#fff 80%);background-image:linear-gradient(to right,var(--ring-content-background-color),var(--ring-selected-background-color) 40%,var(--ring-content-background-color) 80%);background-repeat:repeat;background-size:64px;content:"";display:block;height:100%;width:calc(100% + 64px)}.delayed_rui_d22e .content_rui_d22e:after{content:"…"}.short_rui_d22e{padding:0;width:32px}.dropdownIcon_rui_d22e{color:#999;color:var(--ring-icon-secondary-color);line-height:normal;margin-left:2px;margin-right:-2px;transition:color .3s ease-out;transition:color var(--ring-ease)}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.button_rui_d22e:hover .dropdownIcon_rui_d22e{color:#0080e5;color:var(--ring-main-color);transition:none}}}@keyframes progress_rui_d22e{0%{transform:translateX(-64px)}to{transform:translateX(0)}}@keyframes text-loading_rui_d22e{50%{opacity:.5}}.queryAssist_rui_d22e{--ring-input-icon-offset:20px;--ring-input-padding-inline:8px;--ring-input-padding-block:1px;align-items:center;border:1px solid #c5d1db;border:1px solid var(--ring-borders-color);border-radius:4px;border-radius:var(--ring-border-radius);box-sizing:border-box;display:flex;font-size:14px;font-size:var(--ring-font-size);line-height:20px;line-height:var(--ring-line-height);min-height:calc(var(--ring-input-padding-inline)*3);padding:var(--ring-input-padding-block) var(--ring-input-padding-inline);position:relative;transition:border-color .3s ease-out;transition:border-color var(--ring-ease)}.queryAssist_rui_d22e *{box-sizing:border-box}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.queryAssist_rui_d22e:hover{border-color:#80c6ff;border-color:var(--ring-border-hover-color);transition:none}}}.queryAssist_rui_d22e:focus-within{border-color:#0080e5;border-color:var(--ring-main-color);transition:none}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.queryAssist_rui_d22e:-webkit-autofill:hover{-webkit-transition:background-color 50000s ease-in-out 0s;transition:background-color 50000s ease-in-out 0s}}}.queryAssist_rui_d22e:-webkit-autofill,.queryAssist_rui_d22e:-webkit-autofill:focus{-webkit-transition:background-color 50000s ease-in-out 0s;transition:background-color 50000s ease-in-out 0s}.error_rui_d22e .queryAssist_rui_d22e{border-color:#db5860;border-color:var(--ring-icon-error-color)}.queryAssistDisabled_rui_d22e{-webkit-text-fill-color:#999;-webkit-text-fill-color:var(--ring-disabled-color);background-color:#f5f5f5;background-color:var(--ring-disabled-background-color);border-color:#d4d4d4;border-color:var(--ring-border-disabled-color);color:#999;color:var(--ring-disabled-color)}.huge_rui_d22e{--ring-input-padding-block:5px;border-right:0;max-height:calc(var(--ring-input-padding-inline)*4);padding:0 0 0 var(--ring-input-padding-inline)}.huge_rui_d22e .actions_rui_d22e{padding-right:var(--ring-input-padding-inline)}.huge_rui_d22e .placeholder_rui_d22e{padding-left:0}[dir=rtl] .huge_rui_d22e{border:1px solid #c5d1db;border:1px solid var(--ring-borders-color);padding:0 var(--ring-input-padding-inline) 0 0}[dir=rtl] .huge_rui_d22e .actions_rui_d22e{padding:0 var(--ring-input-padding-inline)}.input_rui_d22e{background:transparent;caret-color:#0080e5;caret-color:var(--ring-main-color);color:#1f2326;color:var(--ring-text-color);cursor:text;flex-grow:1;font:inherit;margin:0;outline:none;overflow:hidden;scrollbar-width:none;transition:border-color .3s ease-out;transition:border-color var(--ring-ease);white-space:nowrap}.letter-text_rui_d22e{color:#b25c00;color:var(--ring-warning-color)}.letter-field-name_rui_d22e,.letterDefault_rui_d22e{color:#1f2326;color:var(--ring-text-color)}.letter-field-value_rui_d22e{color:#0f5b99;color:var(--ring-link-color)}.letter-operator_rui_d22e{color:#737577;color:var(--ring-secondary-color)}.letter-error_rui_d22e{border-bottom:1px solid #db5860;border-bottom:1px solid var(--ring-icon-error-color);padding-bottom:1px}.highlight_rui_d22e{font-weight:600}.service_rui_d22e{color:#737577;color:var(--ring-secondary-color)}.placeholder_rui_d22e{color:#999;color:var(--ring-disabled-color);display:block;overflow:hidden;padding-left:calc(var(--ring-input-padding-inline)*3 - var(--ring-input-padding-block));pointer-events:none;position:absolute;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - var(--ring-input-padding-inline)*4)}[dir=rtl] .placeholder_rui_d22e{padding-right:calc(var(--ring-input-padding-inline)*3 - var(--ring-input-padding-block));text-align:right}.letter_rui_d22e{display:inline}.actions_rui_d22e{align-items:center;display:inline-flex;height:100%;justify-content:center;line-height:inherit;max-height:calc(var(--ring-input-padding-inline)*2);padding-left:var(--ring-input-padding-inline)}[dir=rtl] .actions_rui_d22e{padding:0 var(--ring-input-padding-inline) 0 0}.icon_rui_d22e{color:#999;color:var(--ring-icon-secondary-color);padding-right:var(--ring-input-padding-inline)}[dir=rtl] .icon_rui_d22e{padding:0 0 0 var(--ring-input-padding-inline)}.rightSearchButton_rui_d22e{border:1px solid #c5d1db;border:1px solid var(--ring-borders-color);border-radius:4px;border-radius:var(--ring-border-radius);border-bottom-left-radius:0;border-top-left-radius:0;color:#999;color:var(--ring-icon-secondary-color);cursor:pointer;padding:5px 9px;transition:border-color .3s ease-out;transition:border-color var(--ring-ease)}.queryAssist_rui_d22e.queryAssist_rui_d22e:focus-within .rightSearchButton_rui_d22e{border-color:#0080e5;border-color:var(--ring-main-color);transition:none}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.queryAssist_rui_d22e:hover .rightSearchButton_rui_d22e{border-color:#80c6ff;border-color:var(--ring-border-hover-color);transition:none}}.clear_rui_d22e{padding-right:0;top:1px}[dir=rtl] .clear_rui_d22e{padding-left:0;padding-right:var(--ring-input-padding-inline)}.loaderOnTheRight_rui_d22e{left:auto;right:1px}.input_rui_d22e::-webkit-scrollbar{display:none}.withoutGlass_rui_d22e{padding-left:0}[dir=rtl] .withoutGlass_rui_d22e{padding-right:0}.light_rui_370b,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.radio_rui_370b{color:#1f2326;color:var(--ring-text-color);display:block;outline:none;position:relative;text-align:left}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.radio_rui_370b:hover .circle_rui_370b{border-color:#80c6ff;border-color:var(--ring-border-hover-color);transition:none}}}.circle_rui_370b{background-color:#fff;background-color:var(--ring-content-background-color);border:1px solid #c5d1db;border:1px solid var(--ring-borders-color);border-radius:8px;box-sizing:border-box;display:inline-block;height:16px;pointer-events:none;position:relative;top:-2px;transition:border-color .3s ease-out,box-shadow .3s ease-out;transition:border-color var(--ring-ease),box-shadow var(--ring-ease);-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:16px}.circle_rui_370b:after{background-color:#0080e5;background-color:var(--ring-main-color);border-radius:4px;content:"";height:8px;left:3px;opacity:0;position:absolute;top:3px;transform:scale(0);transition:opacity .15s ease-out,transform .15s ease-out;transition:opacity var(--ring-fast-ease),transform var(--ring-fast-ease);width:8px}.input_rui_370b{cursor:pointer;height:100%;left:0;margin:0;opacity:0;position:absolute;top:0;width:100%}.input_rui_370b[disabled]+.circle_rui_370b{background-color:#f5f5f5;background-color:var(--ring-disabled-background-color);border-color:#e8e8e8;border-color:var(--ring-border-unselected-disabled-color)}.input_rui_370b:checked+.circle_rui_370b{border-color:#0080e5;border-color:var(--ring-main-color)}.input_rui_370b:checked+.circle_rui_370b:after{opacity:1;transform:scale(1);transition:none}.input_rui_370b.focus_rui_370b+.circle_rui_370b,.input_rui_370b:focus+.circle_rui_370b{border-color:#80c6ff;border-color:var(--ring-border-hover-color);box-shadow:0 0 0 1px #80c6ff;box-shadow:0 0 0 1px var(--ring-border-hover-color)}.input_rui_370b[disabled]{pointer-events:none}.input_rui_370b[disabled]:checked+.circle_rui_370b{border-color:#d4d4d4;border-color:var(--ring-border-disabled-color)}.input_rui_370b[disabled]:checked+.circle_rui_370b:after{background-color:#d4d4d4;background-color:var(--ring-border-disabled-color)}.input_rui_370b[disabled]~.label_rui_370b{color:#999;color:var(--ring-disabled-color)}.label_rui_370b{line-height:32px;margin-left:8px}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.row_rui_23fe:hover .dragHandle_rui_23fe{opacity:1}}}.light_rui_23fe,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.tableWrapper_rui_23fe{position:relative}.table_rui_23fe{border-spacing:0;width:100%}.userSelectNone_rui_23fe{-webkit-user-select:none;-moz-user-select:none;user-select:none}.headerCell_rui_23fe{box-sizing:border-box;color:#737577;color:var(--ring-secondary-color);font-weight:400;height:24px;padding-right:40px;text-align:left;white-space:nowrap}.headerCell_rui_23fe:first-child{padding-left:32px}.headerCell_rui_23fe:last-child{padding-right:32px;width:100%}.headerCell_rui_23fe:first-child:only-child{max-width:none;width:auto}.headerCell_rui_23fe.headerCellSorted_rui_23fe{font-weight:700}.headerCell_rui_23fe.headerCellSortable_rui_23fe{cursor:pointer}.headerCell_rui_23fe .sorter_rui_23fe{display:none;margin-left:6px;position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none}.headerCell_rui_23fe.headerCellSortable_rui_23fe .sorter_rui_23fe{display:inline-block}.sortedUp_rui_23fe .icon_rui_23fe{transform:rotate(180deg);transform-origin:center 53%}.caption_rui_23fe{border-bottom:none;color:#1f2326;color:var(--ring-text-color);font-size:14px;font-size:var(--ring-font-size);font-weight:700;line-height:18px;line-height:var(--ring-line-height-lower);padding-bottom:6px;padding-top:8px;text-transform:capitalize}.tableHead_rui_23fe:after{width:100%}.subHeaderFixed_rui_23fe:after,.tableHead_rui_23fe:after{background-color:#dfe5eb;background-color:var(--ring-line-color);content:"";height:1px;position:absolute}.subHeaderFixed_rui_23fe:after{top:24px}.subHeader_rui_23fe:after{left:32px;right:32px}.subHeaderFixed_rui_23fe{background-color:#fff;background-color:var(--ring-content-background-color);opacity:.9;position:fixed;top:0;z-index:1;z-index:var(--ring-fixed-z-index)}.subHeaderFixed_rui_23fe:after{left:0;right:0}.row_rui_23fe{line-height:30px;outline:none}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.table_rui_23fe:not(.disabledHover_rui_23fe) .row_rui_23fe:hover{background-color:#ebf6ff;background-color:var(--ring-hover-background-color)}}}.rowSelected_rui_23fe{background-color:#d4edff;background-color:var(--ring-selected-background-color)}.rowFocused_rui_23fe{background-color:#ebf6ff;background-color:var(--ring-hover-background-color)}.rowFocused_rui_23fe .cell_rui_23fe:first-child{box-shadow:inset 2px 0 #0080e5;box-shadow:inset 2px 0 var(--ring-main-color)}.loadingOverlay_rui_23fe{align-items:center;background-color:hsla(0,0%,100%,.5);background-color:var(--ring-table-loader-background-color);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.cell_rui_23fe{box-sizing:content-box;color:#1f2326;color:var(--ring-text-color);height:32px;min-width:0;padding:0 40px 0 0}.cell_rui_23fe:first-child{padding-left:32px}.cell_rui_23fe:last-child{max-width:0;padding-right:32px;width:100%}.cell_rui_23fe:first-child{max-width:616px;min-width:296px}.cell_rui_23fe:first-child:only-child{max-width:none;width:auto}.cellUnlimited_rui_23fe{width:100%}.cellRight_rui_23fe{text-align:right}.metaColumn_rui_23fe{float:left;height:16px;padding-right:2px;position:relative}.metaColumn_rui_23fe.headerMetaColumn_rui_23fe{padding-top:1px}.dragHandle_rui_23fe{cursor:grab;left:-16px;opacity:0;top:-3px}.dragHandle_rui_23fe.dragHandle_rui_23fe{height:35px;padding:0;position:absolute}.dragHandle_rui_23fe.visibleDragHandle_rui_23fe{opacity:1}.rowCollapseExpandButton_rui_23fe{padding-left:7px;padding-right:4px}.draggingRow_rui_23fe{background-color:#ebf6ff;background-color:var(--ring-hover-background-color);z-index:5;z-index:var(--ring-overlay-z-index)}.draggingRow_rui_23fe .dragHandle_rui_23fe{cursor:grabbing;opacity:1}.draggingRow_rui_23fe .dragHandle_rui_23fe svg{color:#0080e5;color:var(--ring-main-color)}.tableMessage_rui_23fe{color:#737577;color:var(--ring-secondary-color);padding:16px 32px;padding:calc(var(--ring-unit)*2) calc(var(--ring-unit)*4)}.light_rui_aa34,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}:root{--ring-selected-tab-color:var(--ring-text-color)}.dark_rui_eb55{--ring-selected-tab-color:var(--ring-main-color)}.titles_rui_aa34{box-shadow:inset 0 -1px 0 0 #dfe5eb;box-shadow:inset 0 -1px 0 0 var(--ring-line-color);display:inline-block;margin-bottom:16px}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.title_rui_aa34.collapsed_rui_aa34:hover,.title_rui_aa34.selected_rui_aa34:hover{box-shadow:inset 0 -2px 0 0 #1f2326;box-shadow:inset 0 -2px 0 0 var(--ring-text-color);color:inherit}.title_rui_aa34:hover:not(.collapsed_rui_aa34),.title_rui_aa34:hover:not(.selected_rui_aa34){box-shadow:inset 0 -1px 0 0 #ff008c;box-shadow:inset 0 -1px 0 0 var(--ring-link-hover-color);color:#ff008c;color:var(--ring-link-hover-color);outline-style:none}}}.title_rui_aa34{background:none;border:none;border-radius:0;color:inherit;cursor:pointer;display:inline-block;line-height:32px;padding:0;position:relative}.title_rui_aa34.collapsed_rui_aa34:active,.title_rui_aa34.selected_rui_aa34:active{box-shadow:inset 0 -2px 0 0 #1f2326;box-shadow:inset 0 -2px 0 0 var(--ring-text-color);color:inherit}.title_rui_aa34:active:not(.collapsed_rui_aa34),.title_rui_aa34:active:not(.selected_rui_aa34){box-shadow:inset 0 -1px 0 0 #ff008c;box-shadow:inset 0 -1px 0 0 var(--ring-link-hover-color);color:#ff008c;color:var(--ring-link-hover-color);outline-style:none}.title_rui_aa34.focus-visible{box-shadow:inset 0 -2px 0 0 #0080e5;box-shadow:inset 0 -2px 0 0 var(--ring-main-color);color:#0080e5;color:var(--ring-main-color)}.title_rui_aa34[disabled]{pointer-events:none}.title_rui_aa34.titleLegacy_rui_aa34{display:inline-flex;flex-direction:column}.title_rui_aa34+.title_rui_aa34{margin-left:24px}.title_rui_aa34[disabled]{color:#999;color:var(--ring-disabled-color)}.selected_rui_aa34{box-shadow:inset 0 -2px 0 0 #1f2326;box-shadow:inset 0 -2px 0 0 var(--ring-text-color);box-shadow:inset 0 -2px 0 0 var(--ring-selected-tab-color);color:#1f2326;color:var(--ring-active-text-color);cursor:default;font-weight:700;outline:none}.visible_rui_aa34{bottom:0;left:0;position:absolute;right:0;text-align:center;top:0}.container_rui_aa34{display:flex;flex-direction:column}.hiddenBold_rui_aa34,.hidden_rui_aa34{display:flex;visibility:hidden}.hiddenBold_rui_aa34{font-weight:700;height:0}.hiddenRegular_rui_aa34{display:flex;font-weight:400;height:0;visibility:hidden}.tabCounter_rui_aa34{color:#737577;color:var(--ring-secondary-color);font-size:12px;font-weight:400;line-height:19px;padding-left:8px}.autoCollapseContainer_rui_aa34{position:relative}.autoCollapse_rui_aa34{display:inline-flex;max-width:100%;overflow:hidden;position:relative;visibility:hidden}.autoCollapse_rui_aa34 .title_rui_aa34{flex-shrink:0}.rendered_rui_aa34.adjusted_rui_aa34{overflow:visible;visibility:visible}.measure_rui_aa34{height:0;left:0;margin:0;opacity:0;overflow:hidden;pointer-events:none;position:absolute;top:0}.morePopup_rui_aa34{display:flex;flex-direction:column}.collapsed_rui_aa34.collapsed_rui_aa34{border-bottom:none;box-shadow:none;width:100%}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.collapsed_rui_aa34.collapsed_rui_aa34:hover{box-shadow:none}}}.collapsed_rui_aa34.collapsed_rui_aa34[disabled]{color:#999;color:var(--ring-disabled-color)}.collapsed_rui_aa34 .hidden_rui_aa34,.collapsed_rui_aa34 .visible_rui_aa34{text-align:left}.chevron_rui_aa34{padding-left:4px}.morePopupBeforeEnd_rui_aa34.morePopupBeforeEnd_rui_aa34.morePopupBeforeEnd_rui_aa34{padding:0}.morePopupBeforeEnd_rui_aa34~div{display:none}.light_rui_a03e,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.avatar_rui_a03e{border-radius:4px;border-radius:var(--ring-border-radius);display:inline-block;-o-object-fit:cover;object-fit:cover;-o-object-position:center;object-position:center}.subavatar_rui_a03e{border:1px solid #fff;border:1px solid var(--ring-content-background-color);left:27px;position:absolute;top:15px}.empty_rui_a03e{border:1px solid #c5d1db;border:1px solid var(--ring-borders-color);box-sizing:border-box;display:inline-block}.light_rui_d382,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.link_rui_d382:hover{color:#ff008c;color:var(--ring-link-hover-color);text-decoration:none;transition:none}}}.link_rui_d382{color:#0f5b99;color:var(--ring-link-color);cursor:pointer;text-decoration:none;transition:color .15s ease-out;transition:color var(--ring-fast-ease)}.link_rui_d382.hover_rui_d382{color:#ff008c;color:var(--ring-link-hover-color);transition:none}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.link_rui_d382:hover .inner_rui_d382{border-width:0;border-bottom:2px solid;border-image-slice:0 0 100% 0;border-image-source:linear-gradient(currentcolor 50%,transparent 0)}}}.link_rui_d382.active_rui_d382{color:inherit}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.link_rui_d382.compatibilityUnderlineMode_rui_d382:hover{text-decoration:underline}.link_rui_d382.compatibilityUnderlineMode_rui_d382:hover .inner_rui_d382{border:none}.link_rui_d382.pseudo_rui_d382:hover{text-decoration:none}.link_rui_d382.pseudo_rui_d382:hover .inner_rui_d382{border:none}}}.link_rui_d382{outline:none}.link_rui_d382.focus-visible{box-shadow:0 0 0 2px #80c6ff;box-shadow:0 0 0 2px var(--ring-border-hover-color)}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.link_rui_d382:hover .inner_rui_d382{border-bottom-width:1px}}}}.text_rui_d382{border-radius:4px;border-radius:var(--ring-border-radius)}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.inherit_rui_d382:not(:hover){color:inherit}}}.pseudo_rui_d382{background:transparent;border:0;font:inherit;margin:0;padding:0;text-align:left}.pseudo_rui_d382::-moz-focus-inner{border:0;padding:0}.light_rui_4b7d,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.badge_rui_4b7d{background-color:#fff;background-color:var(--ring-content-background-color);border:1px solid #dfe5eb;border:1px solid var(--ring-line-color);border-radius:4px;border-radius:var(--ring-border-radius);box-sizing:border-box;color:#737577;color:var(--ring-secondary-color);cursor:default;display:inline-block;font-size:12px;font-size:var(--ring-font-size-smaller);font-style:normal;font-weight:400;height:20px;line-height:17px;padding:0 8px;vertical-align:baseline}.badge_rui_4b7d.gray_rui_4b7d{background-color:#e6ecf2;background-color:var(--ring-tag-background-color);color:#1f2326;color:var(--ring-text-color)}.badge_rui_4b7d.valid_rui_4b7d{color:#0c7523;color:var(--ring-success-color)}.badge_rui_4b7d.disabled_rui_4b7d,.badge_rui_4b7d.invalid_rui_4b7d{color:#a90f1a;color:var(--ring-error-color)}.light_rui_6e59,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.userCardSpaced_rui_6e59{padding:16px}.userInformationContainer_rui_6e59{align-items:center;display:flex}.userInformation_rui_6e59{color:#1f2326;color:var(--ring-text-color);font-size:13px;line-height:18px;padding-left:12px;text-align:left}.userName_rui_6e59{font-size:16px;font-weight:600}.userNameInfo_rui_6e59,.userName_rui_6e59{display:inline-block;margin-bottom:3px;margin-right:4px}.userActiveStatus_rui_6e59{background-color:#999;background-color:var(--ring-icon-secondary-color);border-radius:50%;display:inline-block;height:8px;margin-right:4px;width:8px}.userActiveStatus_rui_6e59.online_rui_6e59{background-color:#59a869;background-color:var(--ring-icon-success-color)}.light_rui_159b,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.dialog_rui_159b.dialog_rui_159b{max-width:400px;width:auto}.content_rui_159b{align-items:center;display:flex;flex-direction:column;margin:16px 0}.button_rui_159b{margin-top:8px;width:200px}.firstButton_rui_159b{margin-top:32px}.title_rui_159b.title_rui_159b{font-weight:100;margin-bottom:8px;margin-top:0;text-align:center}.logo_rui_159b{height:96px;margin-bottom:12px;-o-object-fit:contain;object-fit:contain;width:96px}@media (max-height:400px){.logo_rui_159b{height:32px;width:32px}}.error_rui_159b{color:#a90f1a;color:var(--ring-error-color);text-align:center}.light_rui_ea70,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.iFrame_rui_ea70{border:none;overflow:hidden}.dialogContent_rui_ea70{width:auto}.nonOpaqueLoader_rui_ea70{background-color:#fff;background-color:var(--ring-content-background-color)}.fallbackLinkContainer_rui_ea70{padding:8px;position:absolute;right:0;top:0}.light_rui_601b,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.ring-avatar-editor{height:40px;padding:1px;position:relative;text-align:center;width:40px}.ring-avatar-editor:after{content:"";display:inline-block;height:40px;vertical-align:middle;width:0}.ring-avatar-editor_right{float:right}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.ring-avatar-editor:hover:not(:disabled):not(.ring-avatar-editor_controlled){border:1px solid #ff008c;border:1px solid var(--ring-link-hover-color);padding:0}.ring-avatar-editor:hover:not(:disabled):not(.ring-avatar-editor_controlled) .ring-avatar-editor__icon{visibility:visible}.ring-avatar-editor:hover:not(:disabled):not(.ring-avatar-editor_controlled) .ring-avatar-editor__img{outline:0}.ring-avatar-editor:hover:not(:disabled):not(.ring-avatar-editor_controlled):before{background-color:rgba(0,0,0,.8);content:"";height:100%;left:0;position:absolute;top:0;width:100%}}}.ring-avatar-editor__img{cursor:pointer;max-height:40px;max-width:40px;vertical-align:middle}.ring-avatar-editor__file-input{left:-10000px;position:absolute;visibility:hidden}.ring-avatar-editor__icon{color:#fff;color:var(--ring-content-background-color);left:0;line-height:14px;position:absolute;top:10px;visibility:hidden;width:100%}.ring-avatar-editor__frame{border:1px solid #999;border:1px solid var(--ring-disabled-color);cursor:pointer;display:inline-block;padding:0;vertical-align:top}.ring-avatar-editor__remove{display:inline-block;margin-left:16px;vertical-align:top}.light_rui_91a4,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.breadcrumb_rui_91a4{font-size:0;margin:20px 0 24px}.header_rui_91a4{margin-bottom:0}.breadcrumbSmall_rui_91a4 .breadcrumbElement_rui_91a4{display:inline-block;font-size:14px;font-size:var(--ring-font-size);height:16px;line-height:14px}.breadcrumbElement_rui_91a4 .breadcrumb_rui_91a4{display:inline}.breadcrumbElement_rui_91a4{display:inline-block;font-size:24px;height:24px;line-height:28px;text-decoration:none}.breadcrumbElement_rui_91a4>span{display:inline-block}.breadcrumbElement_rui_91a4.active_rui_91a4,.breadcrumb_rui_91a4 .active_rui_91a4{cursor:default}.elementDescription_rui_91a4{display:inline-block;font-size:14px;font-size:var(--ring-font-size);line-height:16px;overflow:hidden;padding-left:16px;position:relative;text-overflow:ellipsis;top:2px;white-space:nowrap;width:400px}.separatorIcon_rui_91a4{color:#d4d4d4;color:var(--ring-icon-disabled-color);margin:-14px 2px 0}.buttonGroup_rui_1fbf{font-size:0;line-height:0}.light_rui_2cda,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.description_rui_2cda{font-size:14px;font-size:var(--ring-font-size);margin-top:8px}.light_rui_f45d,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.dockedPanel_rui_f45d{border-top:none;margin-top:32px;padding-left:0}.fixed_rui_f45d.fixed_rui_f45d{background-color:#fff;background-color:var(--ring-content-background-color);border-top:1px solid #dfe5eb;border-top:1px solid var(--ring-popup-border-color);bottom:0;left:0;margin-left:0;padding-bottom:12px;padding-left:32px;padding-top:12px;position:fixed;right:0;top:auto;width:100%;z-index:2}.editableHeading_rui_0870{align-items:center;display:flex;min-width:0}.editableHeading_rui_0870.fullSize_rui_0870{width:100%}.editableHeading_rui_0870.isEditing_rui_0870{gap:8px}.headingWrapperButton_rui_0870{background:inherit;border:none;border-radius:4px;border-radius:var(--ring-border-radius);color:inherit;cursor:pointer;font-size:inherit;margin:0;max-width:100%;min-width:0;padding:0;text-align:inherit}.headingWrapperButton_rui_0870:focus{outline:1px solid #80c6ff;outline:1px solid var(--ring-border-hover-color)}.disabled_rui_0870 .headingWrapperButton_rui_0870:focus{outline:none}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.headingWrapperButton_rui_0870:hover{background-color:#ebf6ff;background-color:var(--ring-hover-background-color)}}}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.disabled_rui_0870 .headingWrapperButton_rui_0870:hover{background-color:transparent;background-color:initial;cursor:auto}}.heading_rui_0870{-webkit-line-clamp:1;-webkit-box-orient:vertical;border-radius:4px;border-radius:var(--ring-border-radius);display:-webkit-box;overflow:hidden}.multiline_rui_0870 .heading_rui_0870{-webkit-line-clamp:3}.heading_rui_0870.heading_rui_0870,.heading_rui_0870.heading_rui_0870:first-child{line-height:28px;margin:6px 0}.input_rui_0870{background-color:transparent;border:none;border-bottom:1px solid #c5d1db;border-bottom:1px solid var(--ring-borders-color);caret-color:#0080e5;caret-color:var(--ring-main-color);color:#1f2326;color:var(--ring-heading-color);font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;font-family:var(--ring-font-family);font-weight:700;line-height:28px;margin-bottom:2px;outline:none;padding:6px 0 3px}.input_rui_0870::-moz-placeholder{color:#999;color:var(--ring-disabled-color)}.input_rui_0870::placeholder{color:#999;color:var(--ring-disabled-color)}.input_rui_0870:focus{border-bottom-color:#0080e5;border-bottom-color:var(--ring-main-color);border-bottom-width:2px;margin-bottom:1px}.input_rui_0870[disabled]{background-color:transparent;background-color:initial}.error_rui_0870 .input_rui_0870{border-bottom-color:#db5860;border-bottom-color:var(--ring-icon-error-color);border-bottom-width:2px;margin-bottom:1px}.button_rui_0870{margin:6px 0}.errorText_rui_0870{color:#a90f1a;color:var(--ring-error-color);font-size:12px;font-size:var(--ring-font-size-smaller);line-height:16px;line-height:var(--ring-line-height-lowest);margin:4px 0}.level1_rui_0870{font-size:24px}.level2_rui_0870{font-size:20px}.level3_rui_0870{font-size:14px}.sizeS_rui_0870{max-width:96px}.sizeM_rui_0870{max-width:240px}.sizeL_rui_0870{max-width:400px}.sizeFULL_rui_0870{max-width:100%}.light_rui_b075,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.errorBubblePopup_rui_b075{border:none;box-shadow:none;margin-left:2px;overflow:visible}.errorBubbleWrapper_rui_b075{display:inline-block}.errorBubble_rui_b075{border:1px solid #dfe5eb;border:1px solid var(--ring-popup-border-color);border-radius:4px;border-radius:var(--ring-border-radius);box-shadow:0 2px 8px rgba(0,28,54,.1),0 1px 2px rgba(0,28,54,.04);box-shadow:var(--ring-popup-shadow);box-sizing:border-box;color:#a90f1a;color:var(--ring-error-color);font-size:12px;line-height:22px;min-height:24px;padding-left:16px;padding-right:16px;white-space:nowrap}.errorBubble_rui_b075,.errorBubble_rui_b075:before{background:#fff;background:var(--ring-popup-background-color)}.errorBubble_rui_b075:before{border:1px solid #dfe5eb;border:1px solid var(--ring-popup-border-color);border-right:none;border-top:none;content:"";display:block;height:8px;left:-4px;position:absolute;top:8px;transform:rotate(45deg);width:8px}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.ring-island__header-button:hover{background:#ebf6ff linear-gradient(0deg,#ebf6ff,#fff);background:var(--ring-hover-background-color) linear-gradient(to top,var(--ring-hover-background-color),var(--ring-content-background-color))}}}.ring-island{background-color:#fff;background-color:var(--ring-content-background-color);border:1px solid #dfe5eb;border-color:var(--ring-line-color);border-radius:4px;border-radius:var(--ring-border-radius);box-shadow:0 1px 4px rgba(0,28,54,.1);box-shadow:0 1px 4px var(--ring-popup-shadow-color);color:#1f2326;color:var(--ring-text-color);font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;font-family:var(--ring-font-family);font-size:14px;font-size:var(--ring-font-size);min-width:198px}.ring-island_stack-right{border-bottom-right-radius:0;border-right:none;border-top-right-radius:0;box-shadow:none}.ring-island_stack-left{border-bottom-left-radius:0;border-top-left-radius:0;box-shadow:none}.ring-island__header{background-color:#fff;background-color:var(--ring-content-background-color);border-bottom:1px solid #dfe5eb;border-bottom:1px solid var(--ring-line-color);border-top-left-radius:4px;border-top-left-radius:var(--ring-border-radius);border-top-right-radius:4px;border-top-right-radius:var(--ring-border-radius);line-height:22px;min-height:22px}.ring-island__header-btn,.ring-island__header-button{border-left:1px solid #999;border-left:1px solid var(--ring-disabled-color);color:#737577;color:var(--ring-secondary-color);cursor:pointer;float:right;font-size:12px;font-size:var(--ring-font-size-smaller);padding:0 15px;text-shadow:#fff 0 0 1px;text-shadow:var(--ring-white-text-color) 0 0 1px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ring-island__header-btn{background:#ebf6ff linear-gradient(0deg,#ebf6ff,#fff);background:var(--ring-hover-background-color) linear-gradient(to top,var(--ring-hover-background-color),var(--ring-content-background-color))}.ring-island__header-btn,.ring-island__header-button:active{background:#fff none;background:var(--ring-content-background-color) none;box-shadow:inset 0 0 4px 0 #fff;box-shadow:0 0 4px 0 var(--ring-content-background-color) inset}.ring-island__header-btn,.ring-island__header-button:last-child{border-top-right-radius:3px}.ring-island__title{display:block;float:left;font-weight:700;padding:0 32px}.ring-island__content{margin:16px 32px}.light_rui_f3db,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.container_rui_f3db{display:inline}.message_rui_f3db{background-color:#fff;background-color:var(--ring-popup-background-color);color:#1f2326;color:var(--ring-active-text-color);max-width:320px;overflow:visible;padding:12px 12px 16px 40px;text-align:left}.icon_rui_f3db{left:12px;position:absolute;top:10px}.title_rui_f3db{font-weight:400;margin:0}.description_rui_f3db{color:#1f2326;color:var(--ring-text-color);font-size:12px;font-size:var(--ring-font-size-smaller);line-height:16px;line-height:var(--ring-line-height-lowest);margin:4px 0 0}.button_rui_f3db{margin-top:12px}.tail_rui_f3db{background-color:#fff;background-color:var(--ring-popup-background-color);border-color:transparent transparent #dfe5eb #dfe5eb;border-color:transparent transparent var(--ring-popup-border-color) var(--ring-popup-border-color);border-style:solid;border-width:1px;box-sizing:border-box;height:11px;position:absolute;transform-origin:0 0;width:11px}.light_rui_b890,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.title_rui_b890{font-weight:600}.error_rui_b890{word-wrap:break-word;color:#1f2326;color:var(--ring-text-color);line-height:16px;margin-top:4px}.light_rui_1028,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.ring-permission-hide{display:none!important}.light_rui_5875,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}:root{--ring-progress-bar-background-color:rgba(0,0,0,.2);--ring-progress-bar-line-background-color:hsla(0,0%,100%,.6)}.dark_rui_eb55{--ring-progress-bar-background-color:hsla(0,0%,100%,.3);--ring-progress-bar-line-background-color:hsla(0,0%,100%,.4)}.progressBar_rui_5875{background-color:rgba(0,0,0,.2);background-color:var(--ring-progress-bar-background-color);border-radius:2px;height:4px;margin-bottom:4px;overflow:hidden;position:relative;z-index:1}.globalMode_rui_5875{background:transparent;position:absolute;top:0;width:100%}.line_rui_5875{background-color:#0080e5;background-color:var(--ring-main-color);border-radius:2px;color:#fff;color:var(--ring-content-background-color);float:left;height:100%;line-height:4px;text-align:center;transition:width .6s ease;width:0}.line_rui_5875:after{animation:progress-bar_rui_5875 2.5s linear infinite;background-image:linear-gradient(90deg,transparent,hsla(0,0%,100%,.6),transparent);background-image:linear-gradient(to right,transparent,var(--ring-progress-bar-line-background-color),transparent);background-repeat:no-repeat;bottom:0;content:"";left:0;position:absolute;right:0;top:0}@keyframes progress-bar_rui_5875{0%{transform:translateX(-100%)}to{transform:translateX(100%)}}.light_rui_1ac8,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.ring-save-field{display:inline-block}.ring-save-field .ring-save-field__button{margin-left:8px;vertical-align:top}.light_rui_ed4d,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.ring-input{--ring-input-padding-block:1px;--ring-input-padding-inline:8px;--ring-input-padding-start:var(--ring-input-padding-inline);--ring-input-padding-end:var(--ring-input-padding-inline);background:transparent;border:1px solid #c5d1db;border:1px solid var(--ring-borders-color);border-radius:4px;border-radius:var(--ring-border-radius);box-sizing:border-box;caret-color:#0080e5;caret-color:var(--ring-main-color);color:#1f2326;color:var(--ring-text-color);font:inherit;font-size:14px;font-size:var(--ring-font-size);line-height:20px;line-height:var(--ring-line-height);margin:0;outline:none;padding:var(--ring-input-padding-block) var(--ring-input-padding-end) var(--ring-input-padding-block) var(--ring-input-padding-start);transition:border-color .3s ease-out;transition:border-color var(--ring-ease);width:100%}[dir=rtl] .ring-input{padding-left:var(--ring-input-padding-end);padding-right:var(--ring-input-padding-start)}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.ring-input:hover{border-color:#80c6ff;border-color:var(--ring-border-hover-color);transition:none}}}.error_rui_ed4d .ring-input{border-color:#db5860;border-color:var(--ring-icon-error-color)}.ring-input:focus{border-color:#0080e5;border-color:var(--ring-main-color);transition:none}[disabled].ring-input{-webkit-text-fill-color:#999;-webkit-text-fill-color:var(--ring-disabled-color);background-color:#f5f5f5;background-color:var(--ring-disabled-background-color);border-color:#d4d4d4;border-color:var(--ring-border-disabled-color);color:#999;color:var(--ring-disabled-color)}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.ring-input:-webkit-autofill:hover{-webkit-transition:background-color 50000s ease-in-out 0s;transition:background-color 50000s ease-in-out 0s}}}.ring-input:-webkit-autofill,.ring-input:-webkit-autofill:focus{-webkit-transition:background-color 50000s ease-in-out 0s;transition:background-color 50000s ease-in-out 0s}.ring-input_error{border-color:#db5860;border-color:var(--ring-icon-error-color)}.ring-input_filter-popup{min-width:200px;width:100%}.ring-input.ring-input:disabled,.ring-input.ring-input[disabled],.ring-input.ring-input_disabled{-webkit-text-fill-color:#999;-webkit-text-fill-color:var(--ring-disabled-color);background-color:#f5f5f5;background-color:var(--ring-disabled-background-color);border-color:#d4d4d4;border-color:var(--ring-border-disabled-color);color:#999;color:var(--ring-disabled-color)}textarea.ring-input{box-sizing:border-box;min-height:64px;resize:none}.ring-input::-moz-placeholder{color:#999;color:var(--ring-disabled-color)}.ring-input::placeholder{color:#999;color:var(--ring-disabled-color)}.ring-error-bubble{background:#fff;background:var(--ring-popup-background-color);border:1px solid #dfe5eb;border:1px solid var(--ring-popup-border-color);border-radius:4px;border-radius:var(--ring-border-radius);box-shadow:0 2px 8px rgba(0,28,54,.1),0 1px 2px rgba(0,28,54,.04);box-shadow:var(--ring-popup-shadow);box-sizing:border-box;color:#a90f1a;color:var(--ring-error-color);display:none;font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;font-family:var(--ring-font-family);font-size:12px;left:calc(100% + 2px);line-height:22px;min-height:24px;padding-left:16px;padding-right:16px;position:absolute;top:0;white-space:nowrap;z-index:2}.ring-error-bubble.active{display:inline-block}.ring-error-bubble:before{background:#fff;background:var(--ring-popup-background-color);border:1px solid #dfe5eb;border:1px solid var(--ring-popup-border-color);border-right:none;border-top:none;content:"";display:block;height:8px;left:-5px;position:absolute;top:7px;transform:rotate(45deg);width:8px;z-index:-1;z-index:var(--ring-invisible-element-z-index)}.ring-error-bubble_material{background:transparent none;border:0;box-shadow:none;padding-left:8px}.ring-error-bubble_material:before{display:none}.ring-form__control .ring-error-bubble{top:1px}.ring-error-bubble-wrapper{position:relative}.light_rui_f7ed,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.ring-form{color:#1f2326;color:var(--ring-text-color);font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;font-family:var(--ring-font-family);font-size:14px;font-size:var(--ring-font-size)}.ring-form_white-bg{background:#fff;background:var(--ring-content-background-color)}.ring-form_border{border:1px solid #999;border:1px solid var(--ring-disabled-color);border-radius:2px}.ring-form_rows .ring-form__label{float:none;max-width:none}.ring-form_rows.ring-form__control{margin-left:0;width:336px}.ring-form__wrap{margin-bottom:0;padding:24px 32px 0}.ring-form__header{min-height:13px;padding-bottom:16px}.ring-form__control__description{color:#737577;color:var(--ring-secondary-color);display:block;font-size:12px;font-size:var(--ring-font-size-smaller);line-height:16px!important;max-width:900px;padding-top:4px}.ring-form__title-img{border:0;float:left;height:32px}.ring-form__title{display:block;font-weight:700;margin-bottom:8px}.ring-form__main-title{color:#1f2326;color:var(--ring-text-color);font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;font-family:var(--ring-font-family);font-size:19px}.ring-form__title_separated{margin:24px 0}.ring-form__group{margin:16px 0;position:relative}.ring-form__group:first-child{margin-top:0}.ring-form__group:after{clear:both;content:"";display:block}.ring-form__group_united{padding-bottom:0}.ring-form__group .ring_form__group{padding-left:16px;padding-top:0}.ring-form__group .ring_form__group .ring-form__control{margin-left:144px}.ring-form__group_nested{padding-left:16px;padding-top:0}.ring-form__group_nested .ring-form__control{margin-left:144px}.ring-form__label{display:inline-block;float:left;line-height:16px;max-width:144px;padding-top:4px;position:relative;top:0;vertical-align:top}.ring-form__label .ring-checkbox__label,.ring-form__label .ring-radio-btn__label{top:-2px}.ring-form__label_title{font-weight:700}.ring-form__control{line-height:24px;margin-left:160px;min-height:24px;position:relative;vertical-align:top;width:auto}.ring-form__control_text:after{content:"";display:inline-block;height:24px;vertical-align:middle}.ring-form__control_secondary{left:216px;position:absolute;top:8px}.ring-form__control_on{color:#0c7523;color:var(--ring-success-color)}.ring-form__control_off{color:#737577;color:var(--ring-secondary-color)}.ring-form__control-link{position:relative;top:6px}.ring-form__control_small{margin-left:128px!important}.ring-form__info{line-height:20px;margin-bottom:-6px;margin-left:160px;width:680px}.ring-form__control__part{margin-right:8px}.ring-form__group_short{padding-bottom:0;padding-top:4px}.ring-form__group_short:last-child{padding-bottom:8px}.ring-form__group_short.ring-form__control{margin-left:24px}.ring-form_small .ring-form__label{max-width:96px}.ring-form_small .ring-form__control{margin-left:128px}.light_rui_0b63,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.dialogContainer_rui_0b63{display:flex;flex-direction:column;min-height:auto;position:relative}.dialogContainer_rui_0b63 .ring-form__group:last-child{margin-bottom:0}.dialogContainer_rui_0b63 .ring-form{width:100%}.wide_rui_0b63.wide_rui_0b63{max-width:600px;width:600px}.autoWidth_rui_0b63.autoWidth_rui_0b63{max-width:100%;width:auto}.header_rui_0b63.header_rui_0b63{cursor:move;font-size:24px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.inSidebar_rui_0b63 .header_rui_0b63{cursor:default;padding-top:0;-webkit-user-select:text;-moz-user-select:text;user-select:text}.inSidebar_rui_0b63 .ring-form{width:auto}.scrollableWrapper_rui_0b63.scrollableWrapper_rui_0b63{overflow:visible;padding-top:24px;width:auto}.content_rui_0b63.content_rui_0b63{overflow:visible}.error_rui_0b63{word-wrap:break-word;color:#a90f1a;color:var(--ring-error-color);max-width:360px}.footer_rui_0b63{font-size:0;height:auto;padding:16px 32px 32px;text-align:left}.footerDescription_rui_0b63{font-size:12px;font-size:var(--ring-font-size-smaller);margin-bottom:16px}.footerItems_rui_0b63{white-space:nowrap}.footerItem_rui_0b63{display:inline-block}.footerItem_rui_0b63:not(:first-child){margin-left:8px}.errorText_rui_d15a{height:auto}.clear_rui_d15a.clear_rui_d15a{position:absolute}.light_rui_992b,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.shortcuts-hint{margin-bottom:16px;width:900px}.shortcuts-hint__dialog{width:auto}.shortcuts-hint__popup-header{padding-left:8px}.shortcuts-hint__columns{-moz-column-count:2;column-count:2;line-height:20px;margin-top:24px}.shortcuts-hint__table{border-collapse:separate;border-spacing:0 8px;display:table}.shortcuts-hint__shortcuts-column{min-width:32px}.shortcuts-hint__shortcut-block{display:table-row-group}.shortcuts-hint__shortcut-block:not(:first-child):before{content:"";display:block;height:4px}.shortcuts-hint__search-input-wrapper{position:relative;width:240px}.shortcuts-hint__search-icon{color:#999;color:var(--ring-disabled-color);height:16px;padding:3px 4px 3px 5px;position:absolute;right:0;top:-1px;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:16px}.shortcuts-hint__table-row,.shortcuts-hint__table-title{display:table-row}.shortcuts-hint__shortcut-cell{display:table-cell;max-width:176px;padding-right:8px;text-align:right}.shortcuts-hint__shortcut{color:#737577;color:var(--ring-secondary-color);font-family:monospace;white-space:nowrap}.shortcuts-hint__hint,.shortcuts-hint__shortcuts-title{display:table-cell;padding-left:8px}.shortcuts-hint__shortcuts-title{color:#737577;color:var(--ring-secondary-color);font-size:12px;letter-spacing:1.5px;text-transform:uppercase}.shortcuts-hint__key-spacer{padding:0 8px}.light_rui_c440,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.ringIconDefaultColor_rui_c440 .ring-icon,.ringIconDefaultColor_rui_c440 rg-icon{color:#999;color:var(--ring-icon-secondary-color)}.iconMarginFix_rui_c440.iconMarginFix_rui_c440{margin-right:0}.transcludeSpacer_rui_c440:not(:empty){margin-left:4px}.buttonWithoutIcon_rui_c440 .iconNg_rui_c440{display:none}.narrowRight_rui_c440{padding-right:12px}.clearfix_rui_4cd4:after{clear:both;content:"";display:block}.font_rui_4cd4{font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;font-family:var(--ring-font-family);font-size:14px;font-size:var(--ring-font-size);line-height:20px;line-height:var(--ring-line-height)}.font-lower_rui_4cd4{line-height:18px;line-height:var(--ring-line-height-lower)}.font-smaller_rui_4cd4{font-size:12px;font-size:var(--ring-font-size-smaller)}.font-smaller-lower_rui_4cd4{line-height:16px;line-height:var(--ring-line-height-lowest)}.font-larger-lower_rui_4cd4{font-size:15px;font-size:var(--ring-font-size-larger)}.font-larger_rui_4cd4{line-height:21px;line-height:var(--ring-line-height-taller)}.thin-font_rui_4cd4{font-family:Segoe UI,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;font-size:var(--ring-font-size);font-weight:100}.monospace-font_rui_4cd4{font-family:Menlo,Bitstream Vera Sans Mono,Ubuntu Mono,Consolas,Courier New,Courier,monospace;font-family:var(--ring-font-family-monospace);font-size:12px;font-size:var(--ring-font-size-smaller)}.ellipsis_rui_4cd4{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.resetButton_rui_4cd4{background-color:transparent;border:0;color:inherit;font:inherit;overflow:visible;padding:0;text-align:left}.resetButton_rui_4cd4::-moz-focus-inner{border:0;padding:0}@keyframes show-sidebar_rui_4cd4{0%{right:-100%}to{right:0}}.ring-sidebar{background:#fff;background:var(--ring-content-background-color);border:1px solid #dfe5eb;border:1px solid var(--ring-line-color);border-right-width:0;box-sizing:border-box;height:100%;overflow:hidden;padding-top:16px;position:fixed;right:-100%;top:0;transition:right .5s ease,visibility .5s;visibility:hidden;width:464px;z-index:4}.ring-sidebar_active{animation:show-sidebar_rui_4cd4 .5s 1;box-shadow:-1px 0 2px 0 rgba(0,42,76,.15);overflow:auto;right:0;visibility:visible}.ring-sidebar_active .ring-sidebar__i{transform:rotate(180deg);transition:.5s ease-in}.ring-sidebar__toggle-icon{color:#999;color:var(--ring-icon-secondary-color)}.ring-sidebar__avatar{float:left;height:48px;-o-object-fit:contain;object-fit:contain;padding:0 16px 0 32px;width:48px}.ring-sidebar__title{color:#1f2326;color:var(--ring-heading-color);font-size:20px;line-height:24px;margin:0;padding-left:32px;vertical-align:middle}.ring-sidebar__title .tag-flag{vertical-align:bottom}.ring-sidebar__avatar~.ring-sidebar__title{margin-bottom:42px}.ring-sidebar__section{margin-top:24px;padding:0 16px 0 32px;position:relative}.ring-sidebar__section-title{display:inline-block;font-weight:700}.ring-sidebar__section-text,.ring-sidebar__section-title{color:#1f2326;color:var(--ring-text-color);font-size:14px;font-size:var(--ring-font-size)}.ring-sidebar__section-text{line-height:24px}.ring-sidebar__section-text_multiline{line-height:normal;padding:4px 0 5px}.ring-sidebar__section-roster{margin-top:8px}.ring-sidebar__section-icon{color:#999;color:var(--ring-icon-secondary-color);display:block;font-size:12px;left:0;position:absolute;text-align:center;width:32px}.ring-sidebar__empty{margin-top:32px;text-align:center}.ring-sidebar__empty-icon{color:#999;color:var(--ring-disabled-color);font-size:100px}.ring-sidebar__empty-description{color:#1f2326;color:var(--ring-text-color);font-size:12px;line-height:18px;margin-top:16px;padding-top:4px}.light_rui_2db7,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.pager_rui_2db7{-webkit-user-select:none;-moz-user-select:none;user-select:none}.links_rui_2db7{margin-bottom:16px}.link_rui_2db7{display:inline-block;margin-right:16px}.linkDisabled_rui_2db7{color:#737577;color:var(--ring-secondary-color)}.ring-table__toolbar{background:inherit}.ring-table__toolbar-controls{background:inherit;display:block;min-height:24px;padding:16px 32px;position:relative;white-space:normal}.ring-table__toolbar-controls.ring-table__toolbar-controls_fixed{left:0;position:fixed;right:0;top:0;z-index:2;z-index:calc(var(--ring-fixed-z-index) + 1)}.ring-table{background-color:transparent;border-collapse:collapse;border-spacing:0;font-size:14px;font-size:var(--ring-font-size);width:100%}.ring-table__header{background-color:#f7f9fa;background-color:var(--ring-sidebar-background-color);display:table-row}.ring-table__header-checkbox{display:inline-block;left:-2px;position:relative;top:1px}.ring-table__title{border-bottom:1px solid #dfe5eb;border-bottom:1px solid var(--ring-line-color);border-top:1px solid #f7f9fa;border-top:1px solid var(--ring-sidebar-background-color);color:#1f2326;color:var(--ring-text-color);display:table-cell;font-size:12px;font-size:var(--ring-font-size-smaller);font-weight:400;line-height:23px;padding:0 8px;position:relative;text-align:left;white-space:nowrap}.ring-table__title.ring-table__title_active{font-weight:700}.ring-table__title:first-child{padding-left:32px}.ring-table__title:after{background-color:#f7f9fa;background-color:var(--ring-sidebar-background-color);bottom:0;content:normal;display:block;position:absolute;right:0;top:-1px;width:1px}.ring-table__title_border:after{content:""}.ring-table__title_nested{padding-left:40px}.ring-table__title_nested.ring-table__header-checkbox{left:-26px}.ring-table__toggle{color:#dfe5eb;color:var(--ring-line-color);cursor:pointer;display:inline-block;font-size:14px;height:9px;margin-left:16px;padding-bottom:21px;position:relative;top:9px;width:12px}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.ring-table__toggle:hover{color:#1f2326;color:var(--ring-text-color)}}}.ring-table__toggle-icon{float:right}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.ring-table__toggle-icon:hover{color:#ff008c;color:var(--ring-link-hover-color)}}}.ring-table__column-inline-avatar{display:inline-block;vertical-align:middle}.ring-table__column-inline-avatar-img{margin:-6px 8px}.ring-table__column_selector{min-width:24px;padding:0!important;text-align:center}.ring-table__selector{display:inline-block;margin:0 0 0 4px}.ring-table__column{border-bottom-style:solid;border-collapse:collapse;border-color:#dfe5eb;border-color:var(--ring-line-color);border-top-style:solid;border-width:1px;display:table-cell;padding:6px 8px;vertical-align:middle;white-space:nowrap}.ring-table__column:last-child{width:100%}.ring-table__column:first-child{padding-left:32px}.ring-table__column.ring-table__column_gap{background-color:#dfe5eb;background-color:var(--ring-line-color);border-bottom-color:transparent!important}.ring-table__column.ring-table__column_toggle{padding:0;text-align:right;vertical-align:top;width:16px}.ring-table__column_right{text-align:right}.ring-table__column_gray{color:#737577;color:var(--ring-secondary-color)}.ring-table__column_snuggle-right{padding-right:0}.ring-table__column_snuggle-left{padding-left:0}.ring-table__column_align-right{text-align:right}.ring-table__column_gap{padding-left:16px!important}.ring-table__column-title{font-weight:700}.ring-table__column_wide{min-width:80px}.ring-table__column_limited{max-width:400px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ring-table__column_unlimited{max-width:1px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.ring-table__column_narrow{min-width:24px;padding:0!important}.ring-table__column-list:not(:last-child):after{content:", "}.ring-table__row{display:table-row;height:40px;width:100%}.ring-table__row .ring-table__row_ghost{background-color:#fff;background-color:var(--ring-content-background-color)}.ring-table__row .ring-table__row_implicit{opacity:.5}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.ring-table__row:hover{background-color:#f7f9fa;background-color:var(--ring-sidebar-background-color)}.ring-table__row:hover .ring-table__column_gap{background-color:#dfe5eb;background-color:var(--ring-line-color)}.ring-table__row .ring-table__row_unselectable:hover{background-color:transparent;background-color:initial}}}.ring-table__row .ring-table__row_active-checked,.ring-table__row .ring-table__row_checked{background-color:#d4edff;background-color:var(--ring-selected-background-color)}.ring-table__row .ring-table__row_active.ring-table__column{border-color:#0080e5;border-color:var(--ring-main-color);border-top-style:double}.ring-table__row .ring-table__row_active.ring-table__column_gap{border-color:#dfe5eb;border-color:var(--ring-line-color);border-top-style:none}.ring-table__row .ring-table__row_active.sidebar__btn{visibility:visible}.ring-table__group{display:table-row-group}.ring-table__description{color:#737577;color:var(--ring-secondary-color);font-size:12px;font-size:var(--ring-font-size-smaller);margin-left:8px}.ring-table__avatar{height:27px;width:24px}.ring-table__avatar-img{height:24px;width:24px}.ring-table__header_sticky{display:none;position:fixed;top:0;width:auto;z-index:1;z-index:var(--ring-fixed-z-index)}.table__pager{padding:32px}.table__pager-links{margin-bottom:16px}.table__pager-link{display:inline-block;margin-right:32px}.table__pager-link_disabled{color:#737577;color:var(--ring-secondary-color)}.table__pager-select{display:inline-block;float:right}.light_rui_47a4,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}@keyframes rotation-keyframes_rui_47a4{to{transform:rotate(1turn)}}.canvas_rui_47a4{display:block;margin:16px auto;pointer-events:none}.animate_rui_47a4{animation:rotation-keyframes_rui_47a4 36s linear infinite}.text_rui_47a4{font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;font-family:var(--ring-font-family);font-size:14px;font-size:var(--ring-font-size);line-height:20px;line-height:var(--ring-line-height);text-align:center}.light_rui_64ba,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.tooltip_rui_64ba{color:#1f2326;color:var(--ring-text-color);max-width:400px;padding:8px;text-align:left}.long_rui_64ba{font-size:12px;font-size:var(--ring-font-size-smaller);line-height:16px;line-height:var(--ring-line-height-lowest);padding:8px 12px}.light_rui_6f30,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.text_rui_6f30{color:#1f2326;color:var(--ring-text-color)}.info_rui_6f30{color:#737577;color:var(--ring-secondary-color)}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.select_rui_11de:hover .icons_rui_11de,.select_rui_11de:hover .value_rui_11de{color:#0080e5;color:var(--ring-main-color);transition:none}}}.light_rui_11de,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.select_rui_11de{color:#1f2326;color:var(--ring-text-color);display:inline-block;position:relative;white-space:nowrap}.toolbar_rui_11de{border-top:1px solid #dfe5eb;border-top:1px solid var(--ring-line-color)}.button_rui_11de{padding:0;text-align:left;width:100%}[dir=rtl] .button_rui_11de{direction:ltr;text-align:right}.toolbar_rui_11de .button_rui_11de{height:32px;margin:8px 0}.button_rui_11de.buttonSpaced_rui_11de{padding:0 16px}.icons_rui_11de{bottom:0;color:#999;color:var(--ring-icon-secondary-color);line-height:normal;position:absolute;right:5px;top:0;transition:color .3s ease-out;transition:color var(--ring-ease)}.inputMode_rui_11de .icons_rui_11de{font-size:14px;font-size:var(--ring-font-size)}.selectedIcon_rui_11de{background-position:50%;background-repeat:no-repeat;background-size:contain;display:inline-block;height:16px;margin:0 4px;position:relative;top:3px;width:16px}.clearIcon_rui_11de{padding:0 3px;vertical-align:-2px}.sizeS_rui_11de{width:96px}.sizeM_rui_11de{width:240px}.sizeL_rui_11de{width:400px}.sizeFULL_rui_11de{width:100%}.sizeAUTO_rui_11de{max-width:100%}.buttonMode_rui_11de{cursor:pointer;position:relative}.value_rui_11de{background:transparent;border:none;border-bottom:1px solid #c5d1db;border-bottom:1px solid var(--ring-borders-color);box-sizing:border-box;color:#1f2326;color:var(--ring-text-color);cursor:pointer;display:inline-block;height:33px;outline:none;padding:0 0 3px;text-align:left;transition:color .3s ease-out,border-color .3s ease-out;transition:color var(--ring-ease),border-color var(--ring-ease);vertical-align:top;width:100%}.value_rui_11de:focus{border-color:#0080e5;border-color:var(--ring-main-color)}.value_rui_11de.open_rui_11de,.value_rui_11de:active{border-color:transparent}.value_rui_11de::-moz-focus-inner{border:0;outline:0;padding:0}.buttonContainer_rui_11de{font-size:14px;font-size:var(--ring-font-size);position:relative}.buttonValue_rui_11de{display:block;padding-left:8px;text-align:left;vertical-align:-8px;width:100%}.buttonValueOpen_rui_11de.buttonValueOpen_rui_11de,.buttonValue_rui_11de.focus-visible{box-shadow:inset 0 0 0 1px #0080e5;box-shadow:inset 0 0 0 1px var(--ring-main-color)}.heightS_rui_11de .buttonValue_rui_11de{font-size:14px;font-size:var(--ring-font-size)}.label_rui_11de{color:#737577;color:var(--ring-secondary-color);position:relative}.buttonValueOpen_rui_11de+.icons_rui_11de,.focus-visible+.icons_rui_11de,.open_rui_11de,.open_rui_11de+.icons_rui_11de,.value_rui_11de:focus,.value_rui_11de:focus+.icons_rui_11de{color:#0080e5;color:var(--ring-main-color);transition:none}.disabled_rui_11de{color:#999;color:var(--ring-disabled-color);pointer-events:none}.disabled_rui_11de .value_rui_11de{border-bottom-style:dashed;color:#999;color:var(--ring-disabled-color)}.avatar_rui_11de{margin-right:4px;vertical-align:-5px}.popup_rui_11de{max-width:320px;min-width:240px}.chevron_rui_11de.chevron_rui_11de{color:inherit;padding:0 3px;transition:none;vertical-align:-1px}.chevronIcon_rui_11de.chevronIcon_rui_11de{color:inherit;transition:none}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.tagAngled_rui_2f49:hover:before,.tag_rui_2f49:hover{background-color:#d3dae0;background-color:var(--ring-tag-hover-background-color);transition:none}}}.light_rui_2f49,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.tag_rui_2f49{border:none;border-radius:4px;border-radius:var(--ring-border-radius);box-sizing:border-box;color:#1f2326;color:var(--ring-text-color);cursor:pointer;display:inline-flex;font-size:12px;height:20px;line-height:20px;line-height:var(--ring-line-height);max-width:100%;padding:0 8px;position:relative;vertical-align:top;z-index:1}.tagAngled_rui_2f49:before,.tag_rui_2f49{background-color:#e6ecf2;background-color:var(--ring-tag-background-color);transition:background-color .3s ease-out;transition:background-color var(--ring-ease)}.withRemove_rui_2f49{padding-right:22px}.container_rui_2f49{display:inline-block;margin-right:4px;max-width:calc(100% - 4px);position:relative;white-space:nowrap}.focused_rui_2f49,.tag_rui_2f49.focus-visible{box-shadow:0 0 0 2px #80c6ff;box-shadow:0 0 0 2px var(--ring-border-hover-color);outline:none;position:relative}.focused_rui_2f49,.focused_rui_2f49.tagAngled_rui_2f49:before,.tagAngled_rui_2f49.focus-visible:before,.tag_rui_2f49.focus-visible{background-color:#d3dae0;background-color:var(--ring-tag-hover-background-color);transition:none}.tagAngled_rui_2f49{border-bottom-left-radius:0;border-top-left-radius:0;margin-bottom:-5px!important;margin-left:8px;padding-left:4px}.tagAngled_rui_2f49:before{border:none;box-sizing:border-box;content:"";height:12px;left:0;position:absolute;top:0;transform:scaleY(1.177) rotate(45deg);transform-origin:0 0;width:12px;z-index:-1}.tagAngled_rui_2f49.focused_rui_2f49,.tagAngled_rui_2f49:focus{box-shadow:inset 0 0 0 1px #80c6ff,0 0 0 1px #80c6ff;box-shadow:0 0 0 1px var(--ring-border-hover-color) inset,0 0 0 1px var(--ring-border-hover-color)}.tagAngled_rui_2f49:focus:before{box-shadow:inset 1px -1px #80c6ff,-.8px .8px 0 .5px #80c6ff;box-shadow:1px -1px var(--ring-border-hover-color) inset,-.8px .8px 0 .5px var(--ring-border-hover-color)}.disabled_rui_2f49.tagAngled_rui_2f49:before,.disabled_rui_2f49.tag_rui_2f49{background-color:#f5f5f5;background-color:var(--ring-disabled-background-color);color:#999;color:var(--ring-disabled-color);pointer-events:none}.remove_rui_2f49{height:auto;line-height:16px;padding:0 4px;position:absolute;right:0;top:2px;z-index:1}.icon_rui_2f49,.removeIcon_rui_2f49.removeIcon_rui_2f49{color:#999;color:var(--ring-icon-secondary-color)}.icon_rui_2f49{margin-right:6px}.icon_rui_2f49 svg{vertical-align:-3px}.avatarContainer_rui_2f49{border-bottom-left-radius:4px;border-bottom-left-radius:var(--ring-border-radius);border-top-left-radius:4px;border-top-left-radius:var(--ring-border-radius);box-sizing:border-box;display:inline-block;height:20px;margin-left:-8px;margin-right:4px;overflow:hidden;vertical-align:top;width:20px}.customIcon_rui_2f49{margin-right:4px;max-height:16px;max-width:16px;vertical-align:bottom}.avatarIcon_rui_2f49{margin-right:-4px;-o-object-fit:contain;object-fit:contain;-o-object-position:center;object-position:center;width:20px}.light_rui_1a67,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.tagsInput_rui_1a67{--ring-input-icon-offset:20px;--ring-input-padding-inline:3px;font-size:14px;font-size:var(--ring-font-size);line-height:20px;line-height:var(--ring-line-height)}.tagsInput_rui_1a67,.tagsInput_rui_1a67 *{box-sizing:border-box}.tagsInputDisabled_rui_1a67{color:#999;color:var(--ring-disabled-color);pointer-events:none}.tagsInputDisabled_rui_1a67 .input_rui_e356{background-color:transparent}.tagsInputFocused_rui_1a67{border-color:#0080e5;border-color:var(--ring-main-color)}.tagsList_rui_1a67{--ring-input-padding-start:var(--ring-input-padding-inline);--ring-input-padding-end:var(--ring-input-padding-inline);background:transparent;border:1px solid #c5d1db;border:1px solid var(--ring-borders-color);border-radius:4px;border-radius:var(--ring-border-radius);caret-color:#0080e5;caret-color:var(--ring-main-color);color:#1f2326;color:var(--ring-text-color);cursor:text;font:inherit;margin:0;outline:none;padding:var(--ring-input-padding-block) var(--ring-input-padding-end) var(--ring-input-padding-block) var(--ring-input-padding-start);transition:border-color .3s ease-out;transition:border-color var(--ring-ease);width:100%}[dir=rtl] .tagsList_rui_1a67{padding-left:var(--ring-input-padding-end);padding-right:var(--ring-input-padding-start)}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.tagsList_rui_1a67:hover{border-color:#80c6ff;border-color:var(--ring-border-hover-color);transition:none}}}.tagsList_rui_1a67:focus-within{border-color:#0080e5;border-color:var(--ring-main-color);transition:none}.tagsSelect_rui_1a67 .outerContainer_rui_e356{--ring-input-padding-block:0}.tagsSelect_rui_1a67 .container_rui_e356{line-height:18px;line-height:calc(var(--ring-line-height) - 2px)}.light_rui_773f,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.toggle_rui_773f{cursor:pointer}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){.toggle_rui_773f:hover .switch_rui_773f{background-color:#80c6ff;background-color:var(--ring-border-hover-color);transition:none}}}.toggle_rui_773f.disabled_rui_773f{pointer-events:none}.label_rui_773f{margin-left:8px}.leftLabel_rui_773f{margin-right:8px}.switchWrapper_rui_773f{display:inline-block;position:relative}.input_rui_773f{height:100%;left:0;margin:0;opacity:0;position:absolute;top:0;width:100%}.switch_rui_773f{background-color:#b8d1e5;background-color:var(--ring-icon-color);display:block;height:100%;position:relative;transition:background-color .3s cubic-bezier(.23,1,.32,1);width:100%}.input_rui_773f:focus+.switch_rui_773f{box-shadow:inset 0 0 0 1px #80c6ff,0 0 0 1px #80c6ff;box-shadow:inset 0 0 0 1px var(--ring-border-hover-color),0 0 0 1px var(--ring-border-hover-color)}.switch_rui_773f:before{background-color:#fff;background-color:var(--ring-content-background-color);border-radius:6px;content:"";height:12px;left:0;position:absolute;top:2px;transform:translateX(2px);transition:transform .3s cubic-bezier(.23,1,.32,1);width:12px}.input_rui_773f:checked+.switch_rui_773f{background-color:#0080e5;background-color:var(--ring-main-color)}@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){@media (-moz-touch-enabled:0),(-ms-high-contrast:active),(-ms-high-contrast:none),(hover:hover){:checked:hover+.switch_rui_773f{background-color:#0070cc;background-color:var(--ring-main-hover-color)}}}.size16_rui_773f .switchWrapper_rui_773f{height:16px;vertical-align:-3px;width:24px}.size16_rui_773f .switch_rui_773f{border-radius:8px}.size16_rui_773f .switch_rui_773f:before{border-radius:6px;height:12px;width:12px}.size16_rui_773f .input_rui_773f:checked+:before{transform:translateX(10px)}.size14_rui_773f .switchWrapper_rui_773f{height:14px;vertical-align:-2px;width:24px}.size14_rui_773f .switch_rui_773f{border-radius:7px}.size14_rui_773f .switch_rui_773f:before{border-radius:5px;height:10px;width:10px}.size14_rui_773f .input_rui_773f:checked+:before{transform:translateX(12px)}.size20_rui_773f .switchWrapper_rui_773f{height:20px;vertical-align:-5px;width:32px}.size20_rui_773f .switch_rui_773f{border-radius:10px}.size20_rui_773f .switch_rui_773f:before{border-radius:8px;height:16px;width:16px}.size20_rui_773f .input_rui_773f:checked+:before{transform:translateX(14px)}.input_rui_773f[disabled]+:after{background-image:linear-gradient(45deg,transparent,transparent 37.5%,hsla(0,0%,100%,.9) 0,hsla(0,0%,100%,.9) 50%,transparent 0,transparent 87.5%,hsla(0,0%,100%,.9) 0,hsla(0,0%,100%,.9));background-repeat:repeat;background-size:4px 4px;border-radius:8px;content:"";height:100%;left:0;position:absolute;top:0;width:100%}.paleSwitch_rui_773f.paleSwitch_rui_773f{background-color:#cfdbe5;background-color:var(--ring-pale-control-color)}.input_rui_773f:checked+.paleSwitch_rui_773f{background-color:#80c6ff;background-color:var(--ring-border-hover-color)}.light_rui_aae4,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.ring-tooltip-ng{max-width:400px;padding:8px;text-align:left}.ring-tooltip-ng__hint-icon{color:#b8d1e5;color:var(--ring-icon-color);cursor:pointer;margin-left:8px;position:relative;top:-2px}.ring-tooltip-ng_open .ring-tooltip-ng__hint-icon{color:#ff008c;color:var(--ring-link-hover-color)}.light_rui_2b32,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.alert_rui_2b32{align-items:baseline;background-color:#fff;background-color:var(--ring-popup-background-color);border-radius:4px;border-radius:var(--ring-border-radius);box-shadow:0 2px 8px rgba(0,28,54,.1),0 1px 2px rgba(0,28,54,.04);box-shadow:var(--ring-popup-shadow);box-sizing:border-box;display:flex;font-size:14px;font-size:var(--ring-font-size);line-height:40px;margin:8px auto;min-height:40px;padding:0 16px;pointer-events:auto;position:relative;transition:transform .3s ease-out,margin-bottom .3s ease-out,opacity .3s ease-out;white-space:nowrap}.alertInline_rui_2b32{margin:8px}.error_rui_2b32{word-wrap:break-word;color:#db5860;color:var(--ring-icon-error-color)}.icon_rui_2b32{margin-right:8px}.caption_rui_2b32{color:#1f2326;color:var(--ring-active-text-color);line-height:20px;margin:12px 0;max-width:calc(100% - 40px);overflow:hidden;white-space:normal}.caption_rui_2b32 .link_rui_d382,.caption_rui_2b32 .ring-link{color:#0080e5;color:var(--ring-main-color)}.caption_rui_2b32.withCloseButton_rui_2b32{margin-right:40px}.badge_rui_2b32{margin-left:8px;vertical-align:baseline}.loader_rui_2b32{margin-right:8px;top:2px}.close_rui_2b32.close_rui_2b32{font-size:0;line-height:0;margin:4px;padding:8px;position:absolute;right:0;top:2px}@keyframes show_rui_2b32{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes shaking_rui_2b32{10%,90%{transform:translateX(-1px)}20%,80%{transform:translateX(2px)}30%,50%,70%{transform:translateX(-4px)}40%,60%{transform:translateX(4px)}}.animationOpen_rui_2b32{animation-duration:.3s;animation-name:show_rui_2b32}.animationClosing_rui_2b32{opacity:0;z-index:-1;z-index:var(--ring-invisible-element-z-index)}.animationShaking_rui_2b32{animation-duration:.5s;animation-name:shaking_rui_2b32}.light_rui_a9a3,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.alertContainer_rui_a9a3{align-items:flex-end;bottom:8px;display:flex;flex-direction:column;overflow:visible;pointer-events:none;position:fixed;right:16px;z-index:6;z-index:var(--ring-alert-z-index)}.alertInContainer_rui_a9a3{margin-top:0;max-width:400px;min-width:240px}.light_rui_7185,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.code_rui_7185{margin:16px 0}.code_rui_7185 code{background-color:#f7f9fa;background-color:var(--ring-sidebar-background-color);border-radius:4px;border-radius:var(--ring-border-radius);display:block;font-family:Menlo,Bitstream Vera Sans Mono,Ubuntu Mono,Consolas,Courier New,Courier,monospace;font-family:var(--ring-font-family-monospace);font-size:12px;font-size:var(--ring-font-size-smaller);line-height:16px;line-height:var(--ring-line-height-lowest);padding:12px 16px 16px}.inline_rui_7185 code{display:inline-block;padding:0 4px}.softWrap_rui_7185 code{white-space:pre-wrap}.highlightContainer_rui_6e02.hljs{color:#000;color:var(--ring-code-color);display:block;overflow-x:auto}.highlightContainer_rui_6e02 .hljs-subst,.highlightContainer_rui_6e02 .hljs-title{color:#000;color:var(--ring-code-color);font-weight:400}.highlightContainer_rui_6e02 .hljs-comment,.highlightContainer_rui_6e02 .hljs-quote{color:#707070;color:var(--ring-code-comment-color);font-style:italic}.highlightContainer_rui_6e02 .hljs-meta{color:#707070;color:var(--ring-code-meta-color)}.highlightContainer_rui_6e02 .hljs-tag{background:#efefef;background:var(--ring-code-tag-background-color);box-shadow:0 1px #efefef,0 -1px #efefef;box-shadow:0 1px var(--ring-code-tag-background-color),0 -1px var(--ring-code-tag-background-color)}.highlightContainer_rui_6e02 .hljs-keyword,.highlightContainer_rui_6e02 .hljs-literal,.highlightContainer_rui_6e02 .hljs-section,.highlightContainer_rui_6e02 .hljs-type{color:navy;color:var(--ring-code-keyword-color);font-weight:700}.highlightContainer_rui_6e02 .hljs-name,.highlightContainer_rui_6e02 .hljs-selector-class,.highlightContainer_rui_6e02 .hljs-selector-id,.highlightContainer_rui_6e02 .hljs-selector-pseudo{color:navy;color:var(--ring-code-tag-color);font-weight:700;font-weight:var(--ring-code-tag-font-weight)}.highlightContainer_rui_6e02 .hljs-selector-tag{color:navy;color:var(--ring-code-keyword-color);font-weight:700;font-weight:var(--ring-code-tag-font-weight)}.highlightContainer_rui_6e02 .hljs-attr{color:#660e7a;color:var(--ring-code-field-color);font-weight:700}.highlightContainer_rui_6e02 .hljs-attribute,.highlightContainer_rui_6e02 .hljs-tag>.hljs-attr{color:#00f;color:var(--ring-code-attribute-color);font-weight:700;font-weight:var(--ring-code-tag-font-weight)}.highlightContainer_rui_6e02 .hljs-link,.highlightContainer_rui_6e02 .hljs-number,.highlightContainer_rui_6e02 .hljs-regexp{color:#00f;color:var(--ring-code-number-color);font-weight:400}.highlightContainer_rui_6e02 .hljs-string{color:#007a00;color:var(--ring-code-string-color);font-weight:700}.highlightContainer_rui_6e02 .hljs-doctag{text-decoration:underline}.highlightContainer_rui_6e02 .hljs-template-variable,.highlightContainer_rui_6e02 .hljs-variable{color:#660e7a;color:var(--ring-code-field-color)}.highlightContainer_rui_6e02 .hljs-addition{background:#aadeaa;background:var(--ring-code-addition-color)}.highlightContainer_rui_6e02 .hljs-deletion{background:#c8c8c8;background:var(--ring-code-deletion-color)}.highlightContainer_rui_6e02 .hljs-emphasis{font-style:italic}.highlightContainer_rui_6e02 .hljs-strong{font-weight:700}.light_rui_4b24,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.heading_rui_4b24{margin-top:20px;margin-top:var(--ring-line-height)}.heading_rui_4b24:first-child{margin-top:0}h1.heading_rui_4b24,h2.heading_rui_4b24{color:#1f2326;color:var(--ring-heading-color);margin-bottom:8px}h1.heading_rui_4b24{font-size:24px;line-height:28px}h2.heading_rui_4b24{font-size:20px;line-height:24px}h3.heading_rui_4b24{font-size:inherit;line-height:inherit;margin-bottom:0}h4.heading_rui_4b24{font-size:12px;font-weight:400;letter-spacing:1px;line-height:16px;margin-bottom:1px;text-transform:uppercase}.caps_rui_4b24{letter-spacing:2px;text-transform:uppercase}.light_rui_e3b3,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.inline_rui_e3b3,.inline_rui_e3b3 p{display:inline}.markdown_rui_e3b3 blockquote,.markdown_rui_e3b3 ol,.markdown_rui_e3b3 p,.markdown_rui_e3b3 pre,.markdown_rui_e3b3 ul{margin:0}.markdown_rui_e3b3 blockquote:not(:first-child),.markdown_rui_e3b3 li,.markdown_rui_e3b3 p:not(:first-child),.markdown_rui_e3b3 pre:not(:first-child){margin-top:10px}.markdown_rui_e3b3 li blockquote:not(:first-child),.markdown_rui_e3b3 li p:not(:first-child),.markdown_rui_e3b3 li pre:not(:first-child){margin-top:6px}.markdown_rui_e3b3 hr{border:none;border-bottom:1px solid #dfe5eb;border-bottom:1px solid var(--ring-line-color);margin:10px 0}.markdown_rui_e3b3 blockquote{box-shadow:inset 2px 0 0 #dfe5eb;box-shadow:inset 2px 0 0 var(--ring-line-color);color:#737577;color:var(--ring-secondary-color);font-size:12px;line-height:18px;padding:0 0 0 16px}.markdown_rui_e3b3 ul{padding:0 0 0 16px}.markdown_rui_e3b3 ol{font-feature-settings:"tnum";font-variant-numeric:tabular-nums;list-style-position:inside;padding:0}.markdown_rui_e3b3 ul{list-style-type:none}.light_rui_a19e,:root{--ring-unit:8px;--ring-line-components:223,229,235;--ring-line-color:rgb(var(--ring-line-components));--ring-borders-components:197,209,219;--ring-borders-color:rgb(var(--ring-borders-components));--ring-icon-components:184,209,229;--ring-icon-color:rgb(var(--ring-icon-components));--ring-icon-secondary-components:153,153,153;--ring-icon-secondary-color:rgb(var(--ring-icon-secondary-components));--ring-border-disabled-components:212,212,212;--ring-border-disabled-color:rgb(var(--ring-border-disabled-components));--ring-border-unselected-disabled-components:232,232,232;--ring-border-unselected-disabled-color:rgb(var(--ring-border-unselected-disabled-components));--ring-icon-disabled-components:212,212,212;--ring-icon-disabled-color:rgb(var(--ring-icon-disabled-components));--ring-border-hover-components:128,198,255;--ring-border-hover-color:rgb(var(--ring-border-hover-components));--ring-icon-hover-components:var(--ring-link-hover-color);--ring-icon-hover-color:var(--ring-link-hover-color);--ring-main-components:0,128,229;--ring-main-color:rgb(var(--ring-main-components));--ring-action-link-components:var(--ring-main-components);--ring-action-link-color:rgb(var(--ring-main-components));--ring-main-hover-components:0,112,204;--ring-main-hover-color:rgb(var(--ring-main-hover-components));--ring-icon-error-components:219,88,96;--ring-icon-error-color:rgb(var(--ring-icon-error-components));--ring-icon-warning-components:237,162,0;--ring-icon-warning-color:rgb(var(--ring-icon-warning-components));--ring-icon-success-components:89,168,105;--ring-icon-success-color:rgb(var(--ring-icon-success-components));--ring-pale-control-components:207,219,229;--ring-pale-control-color:rgb(var(--ring-pale-control-components));--ring-popup-border-components:0,28,54;--ring-popup-border-color:var(--ring-line-color);--ring-popup-shadow-components:rgba(var(--ring-popup-border-components),0.1);--ring-popup-shadow-color:rgba(var(--ring-popup-border-components),0.1);--ring-popup-secondary-shadow-color:rgba(var(--ring-popup-border-components),0.04);--ring-message-shadow-color:rgba(var(--ring-popup-border-components),0.3);--ring-pinned-shadow-components:115,117,119;--ring-pinned-shadow-color:rgb(var(--ring-pinned-shadow-components));--ring-button-danger-hover-components:var(--ring-icon-error-color);--ring-button-danger-hover-color:var(--ring-icon-error-color);--ring-button-primary-border-components:0,98,178;--ring-button-primary-border-color:rgb(var(--ring-button-primary-border-components));--ring-popup-shadow:0 2px 8px var(--ring-popup-shadow-color),0 1px 2px var(--ring-popup-secondary-shadow-color);--ring-dialog-shadow:0 4px 24px var(--ring-popup-shadow-color),0 2px 6px var(--ring-popup-secondary-shadow-color);--ring-search-components:102,158,204;--ring-search-color:rgb(var(--ring-search-components));--ring-hint-components:64,99,128;--ring-hint-color:rgb(var(--ring-hint-components));--ring-link-components:15,91,153;--ring-link-color:rgb(var(--ring-link-components));--ring-link-hover-components:255,0,140;--ring-link-hover-color:rgb(var(--ring-link-hover-components));--ring-error-components:169,15,26;--ring-error-color:rgb(var(--ring-error-components));--ring-warning-components:178,92,0;--ring-warning-color:rgb(var(--ring-warning-components));--ring-success-components:12,117,35;--ring-success-color:rgb(var(--ring-success-components));--ring-text-components:31,35,38;--ring-text-color:rgb(var(--ring-text-components));--ring-active-text-color:var(--ring-text-color);--ring-white-text-components:255,255,255;--ring-white-text-color:rgb(var(--ring-white-text-components));--ring-heading-color:var(--ring-text-color);--ring-secondary-components:115,117,119;--ring-secondary-color:rgb(var(--ring-secondary-components));--ring-disabled-components:153,153,153;--ring-disabled-color:rgb(var(--ring-disabled-components));--ring-content-background-components:255,255,255;--ring-content-background-color:rgb(var(--ring-content-background-components));--ring-popup-background-components:255,255,255;--ring-popup-background-color:rgb(var(--ring-popup-background-components));--ring-sidebar-background-components:247,249,250;--ring-sidebar-background-color:rgb(var(--ring-sidebar-background-components));--ring-selected-background-components:212,237,255;--ring-selected-background-color:rgb(var(--ring-selected-background-components));--ring-hover-background-components:235,246,255;--ring-hover-background-color:rgb(var(--ring-hover-background-components));--ring-navigation-background-components:255,255,255;--ring-navigation-background-color:rgb(var(--ring-navigation-background-components));--ring-tag-background-components:230,236,242;--ring-tag-background-color:rgb(var(--ring-tag-background-components));--ring-tag-hover-background-components:211,218,224;--ring-tag-hover-background-color:rgb(var(--ring-tag-hover-background-components));--ring-removed-background-components:255,213,203;--ring-removed-background-color:rgb(var(--ring-removed-background-components));--ring-warning-background-components:250,236,205;--ring-warning-background-color:rgb(var(--ring-warning-background-components));--ring-added-background-components:216,240,216;--ring-added-background-color:rgb(var(--ring-added-background-components));--ring-disabled-background-components:245,245,245;--ring-disabled-background-color:rgb(var(--ring-disabled-background-components));--ring-disabled-selected-background-components:232,232,232;--ring-disabled-selected-background-color:rgb(var(--ring-disabled-selected-background-components));--ring-button-danger-active-components:255,231,232;--ring-button-danger-active-color:rgb(var(--ring-button-danger-active-components));--ring-button-loader-background-components:51,163,255;--ring-button-loader-background:rgb(var(--ring-button-loader-background-components));--ring-button-primary-background-components:26,152,255;--ring-button-primary-background-color:rgb(var(--ring-button-primary-background-components));--ring-table-loader-background-color:rgba(var(--ring-content-background-components),0.5);--ring-code-background-color:var(--ring-content-background-color);--ring-code-components:0,0,0;--ring-code-color:rgb(var(--ring-code-components));--ring-code-comment-components:112,112,112;--ring-code-comment-color:rgb(var(--ring-code-comment-components));--ring-code-meta-components:112,112,112;--ring-code-meta-color:rgb(var(--ring-code-meta-components));--ring-code-keyword-components:0,0,128;--ring-code-keyword-color:rgb(var(--ring-code-keyword-components));--ring-code-tag-background-components:239,239,239;--ring-code-tag-background-color:rgb(var(--ring-code-tag-background-components));--ring-code-tag-color:var(--ring-code-keyword-color);--ring-code-tag-font-weight:bold;--ring-code-field-components:102,14,122;--ring-code-field-color:rgb(var(--ring-code-field-components));--ring-code-attribute-components:0,0,255;--ring-code-attribute-color:rgb(var(--ring-code-attribute-components));--ring-code-number-color:var(--ring-code-attribute-color);--ring-code-string-components:0,122,0;--ring-code-string-color:rgb(var(--ring-code-string-components));--ring-code-addition-components:170,222,170;--ring-code-addition-color:rgb(var(--ring-code-addition-components));--ring-code-deletion-components:200,200,200;--ring-code-deletion-color:rgb(var(--ring-code-deletion-components));--ring-border-radius:4px;--ring-border-radius-small:2px;--ring-font-size-larger:15px;--ring-font-size:14px;--ring-font-size-smaller:12px;--ring-line-height-taller:21px;--ring-line-height:20px;--ring-line-height-lower:18px;--ring-line-height-lowest:16px;--ring-ease:0.3s ease-out;--ring-fast-ease:0.15s ease-out;--ring-font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif;--ring-font-family-monospace:Menlo,"Bitstream Vera Sans Mono","Ubuntu Mono",Consolas,"Courier New",Courier,monospace;--ring-invisible-element-z-index:-1;--ring-fixed-z-index:1;--ring-overlay-z-index:5;--ring-alert-z-index:6}.agreementDialog_rui_a19e{padding-bottom:80px}.dialogContent_rui_a19e{width:600px}@media (max-width:639px){.dialogContent_rui_a19e{width:90vw}}.suggestion_rui_a19e{font-size:12px;padding-bottom:8px;white-space:nowrap}.remindLaterButton_rui_a19e{float:right}.container,.container-fluid{margin-left:auto;margin-right:auto}.container-fluid{padding-left:2rem;padding-right:2rem}.row{box-sizing:border-box;display:flex;flex:0 1 auto;flex-direction:row;flex-wrap:wrap;margin-left:-.5rem;margin-right:-.5rem}.row.reverse{flex-direction:row-reverse}.col.reverse{flex-direction:column-reverse}.col-xs,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-offset-0,.col-xs-offset-1,.col-xs-offset-10,.col-xs-offset-11,.col-xs-offset-12,.col-xs-offset-2,.col-xs-offset-3,.col-xs-offset-4,.col-xs-offset-5,.col-xs-offset-6,.col-xs-offset-7,.col-xs-offset-8,.col-xs-offset-9{box-sizing:border-box;flex:0 0 auto;padding-left:.5rem;padding-right:.5rem}.col-xs{flex-basis:0;flex-grow:1;max-width:100%}.col-xs-1{flex-basis:8.33333333%;max-width:8.33333333%}.col-xs-2{flex-basis:16.66666667%;max-width:16.66666667%}.col-xs-3{flex-basis:25%;max-width:25%}.col-xs-4{flex-basis:33.33333333%;max-width:33.33333333%}.col-xs-5{flex-basis:41.66666667%;max-width:41.66666667%}.col-xs-6{flex-basis:50%;max-width:50%}.col-xs-7{flex-basis:58.33333333%;max-width:58.33333333%}.col-xs-8{flex-basis:66.66666667%;max-width:66.66666667%}.col-xs-9{flex-basis:75%;max-width:75%}.col-xs-10{flex-basis:83.33333333%;max-width:83.33333333%}.col-xs-11{flex-basis:91.66666667%;max-width:91.66666667%}.col-xs-12{flex-basis:100%;max-width:100%}.col-xs-offset-0{margin-left:0}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-11{margin-left:91.66666667%}.start-xs{justify-content:flex-start;text-align:start}.center-xs{justify-content:center;text-align:center}.end-xs{justify-content:flex-end;text-align:end}.top-xs{align-items:flex-start}.middle-xs{align-items:center}.bottom-xs{align-items:flex-end}.around-xs{justify-content:space-around}.between-xs{justify-content:space-between}.first-xs{order:-1}.last-xs{order:1}@media only screen and (min-width:48em){.container{width:49rem}.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-offset-0,.col-sm-offset-1,.col-sm-offset-10,.col-sm-offset-11,.col-sm-offset-12,.col-sm-offset-2,.col-sm-offset-3,.col-sm-offset-4,.col-sm-offset-5,.col-sm-offset-6,.col-sm-offset-7,.col-sm-offset-8,.col-sm-offset-9{box-sizing:border-box;flex:0 0 auto;padding-left:.5rem;padding-right:.5rem}.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-1{flex-basis:8.33333333%;max-width:8.33333333%}.col-sm-2{flex-basis:16.66666667%;max-width:16.66666667%}.col-sm-3{flex-basis:25%;max-width:25%}.col-sm-4{flex-basis:33.33333333%;max-width:33.33333333%}.col-sm-5{flex-basis:41.66666667%;max-width:41.66666667%}.col-sm-6{flex-basis:50%;max-width:50%}.col-sm-7{flex-basis:58.33333333%;max-width:58.33333333%}.col-sm-8{flex-basis:66.66666667%;max-width:66.66666667%}.col-sm-9{flex-basis:75%;max-width:75%}.col-sm-10{flex-basis:83.33333333%;max-width:83.33333333%}.col-sm-11{flex-basis:91.66666667%;max-width:91.66666667%}.col-sm-12{flex-basis:100%;max-width:100%}.col-sm-offset-0{margin-left:0}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-11{margin-left:91.66666667%}.start-sm{justify-content:flex-start;text-align:start}.center-sm{justify-content:center;text-align:center}.end-sm{justify-content:flex-end;text-align:end}.top-sm{align-items:flex-start}.middle-sm{align-items:center}.bottom-sm{align-items:flex-end}.around-sm{justify-content:space-around}.between-sm{justify-content:space-between}.first-sm{order:-1}.last-sm{order:1}}@media only screen and (min-width:64em){.container{width:65rem}.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-offset-0,.col-md-offset-1,.col-md-offset-10,.col-md-offset-11,.col-md-offset-12,.col-md-offset-2,.col-md-offset-3,.col-md-offset-4,.col-md-offset-5,.col-md-offset-6,.col-md-offset-7,.col-md-offset-8,.col-md-offset-9{box-sizing:border-box;flex:0 0 auto;padding-left:.5rem;padding-right:.5rem}.col-md{flex-basis:0;flex-grow:1;max-width:100%}.col-md-1{flex-basis:8.33333333%;max-width:8.33333333%}.col-md-2{flex-basis:16.66666667%;max-width:16.66666667%}.col-md-3{flex-basis:25%;max-width:25%}.col-md-4{flex-basis:33.33333333%;max-width:33.33333333%}.col-md-5{flex-basis:41.66666667%;max-width:41.66666667%}.col-md-6{flex-basis:50%;max-width:50%}.col-md-7{flex-basis:58.33333333%;max-width:58.33333333%}.col-md-8{flex-basis:66.66666667%;max-width:66.66666667%}.col-md-9{flex-basis:75%;max-width:75%}.col-md-10{flex-basis:83.33333333%;max-width:83.33333333%}.col-md-11{flex-basis:91.66666667%;max-width:91.66666667%}.col-md-12{flex-basis:100%;max-width:100%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-11{margin-left:91.66666667%}.start-md{justify-content:flex-start;text-align:start}.center-md{justify-content:center;text-align:center}.end-md{justify-content:flex-end;text-align:end}.top-md{align-items:flex-start}.middle-md{align-items:center}.bottom-md{align-items:flex-end}.around-md{justify-content:space-around}.between-md{justify-content:space-between}.first-md{order:-1}.last-md{order:1}}@media only screen and (min-width:75em){.container{width:76rem}.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-offset-0,.col-lg-offset-1,.col-lg-offset-10,.col-lg-offset-11,.col-lg-offset-12,.col-lg-offset-2,.col-lg-offset-3,.col-lg-offset-4,.col-lg-offset-5,.col-lg-offset-6,.col-lg-offset-7,.col-lg-offset-8,.col-lg-offset-9{box-sizing:border-box;flex:0 0 auto;padding-left:.5rem;padding-right:.5rem}.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-1{flex-basis:8.33333333%;max-width:8.33333333%}.col-lg-2{flex-basis:16.66666667%;max-width:16.66666667%}.col-lg-3{flex-basis:25%;max-width:25%}.col-lg-4{flex-basis:33.33333333%;max-width:33.33333333%}.col-lg-5{flex-basis:41.66666667%;max-width:41.66666667%}.col-lg-6{flex-basis:50%;max-width:50%}.col-lg-7{flex-basis:58.33333333%;max-width:58.33333333%}.col-lg-8{flex-basis:66.66666667%;max-width:66.66666667%}.col-lg-9{flex-basis:75%;max-width:75%}.col-lg-10{flex-basis:83.33333333%;max-width:83.33333333%}.col-lg-11{flex-basis:91.66666667%;max-width:91.66666667%}.col-lg-12{flex-basis:100%;max-width:100%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-11{margin-left:91.66666667%}.start-lg{justify-content:flex-start;text-align:start}.center-lg{justify-content:center;text-align:center}.end-lg{justify-content:flex-end;text-align:end}.top-lg{align-items:flex-start}.middle-lg{align-items:center}.bottom-lg{align-items:flex-end}.around-lg{justify-content:space-around}.between-lg{justify-content:space-between}.first-lg{order:-1}.last-lg{order:1}}.ReactVirtualized__Table__headerRow{font-weight:700;text-transform:uppercase}.ReactVirtualized__Table__headerRow,.ReactVirtualized__Table__row{align-items:center;display:flex;flex-direction:row}.ReactVirtualized__Table__headerTruncatedText{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ReactVirtualized__Table__headerColumn,.ReactVirtualized__Table__rowColumn{margin-right:10px;min-width:0}.ReactVirtualized__Table__rowColumn{text-overflow:ellipsis;white-space:nowrap}.ReactVirtualized__Table__headerColumn:first-of-type,.ReactVirtualized__Table__rowColumn:first-of-type{margin-left:10px}.ReactVirtualized__Table__sortableHeaderColumn{cursor:pointer}.ReactVirtualized__Table__sortableHeaderIconContainer{align-items:center;display:flex}.ReactVirtualized__Table__sortableHeaderIcon{fill:currentColor;flex:0 0 24px;height:1em;width:1em} \ No newline at end of file diff --git a/reports-generated/code-quality/versions/VERSION_ID/favicon.ico b/reports-generated/code-quality/versions/VERSION_ID/favicon.ico new file mode 100644 index 00000000..ec9f6721 Binary files /dev/null and b/reports-generated/code-quality/versions/VERSION_ID/favicon.ico differ diff --git a/reports-generated/code-quality/versions/VERSION_ID/js/QD-main.js b/reports-generated/code-quality/versions/VERSION_ID/js/QD-main.js new file mode 100644 index 00000000..3b922b13 --- /dev/null +++ b/reports-generated/code-quality/versions/VERSION_ID/js/QD-main.js @@ -0,0 +1 @@ +var QodanaUI;!function(){var e={90667:function(e,t,n){"use strict";var r,o=n(22491),a=["title","titleId"];function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function c(e,t){var n=e.title,c=e.titleId,s=l(e,a);return o.createElement("svg",i({width:12,height:13,fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":c},s),n?o.createElement("title",{id:c},n):null,r||(r=o.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M11.945 2.472a.158.158 0 0 1 .018.222l-7.429 8.794a.597.597 0 0 1-.882.039L.046 7.92a.158.158 0 0 1 0-.222l.53-.53a.15.15 0 0 1 .211 0l3.03 3.029a.298.298 0 0 0 .44-.019l6.904-8.172a.15.15 0 0 1 .211-.018l.573.483Z",fill:"currentColor"})))}var s=o.forwardRef(c);t.Z=s},63209:function(e,t,n){"use strict";var r,o=n(22491),a=["title","titleId"];function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function c(e,t){var n=e.title,c=e.titleId,s=l(e,a);return o.createElement("svg",i({width:12,height:14,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":c},s),n?o.createElement("title",{id:c},n):null,r||(r=o.createElement("path",{d:"M11.62 0H3.747C2 0 1 1.29 1 2.825v9.11h1.414V3.389c0-1.389.586-2 1.69-2h7.515V0Zm1.657 2.573H5.345c-.834 0-1.723.877-1.723 1.697v10.033c0 .82.889 1.697 1.723 1.697h7.932c.835 0 1.723-.877 1.723-1.697V4.27c0-.82-.889-1.697-1.723-1.697Zm.307 11.235a.8.8 0 0 1-.8.8H5.838a.8.8 0 0 1-.8-.8V4.765a.8.8 0 0 1 .8-.8h6.944a.8.8 0 0 1 .8.8v9.043Z",fill:"currentColor"})))}var s=o.forwardRef(c);t.Z=s},52368:function(e,t,n){"use strict";var r,o=n(22491),a=["title","titleId"];function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function c(e,t){var n=e.title,c=e.titleId,s=l(e,a);return o.createElement("svg",i({width:10,height:12,viewBox:"0 0 10 10",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":c},s),n?o.createElement("title",{id:c},n):null,r||(r=o.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.475 0.75V6.95175L2.3585 4.83525L1.616 5.5785L5 8.9625L8.38475 5.5785L7.64225 4.83525L5.525 6.95175V0.75H4.475ZM0.5 9.801V11.1517L9.4985 11.1502V9.7995L0.5 9.801Z",fill:"#1F2326"})))}var s=o.forwardRef(c);t.Z=s},79858:function(e,t,n){"use strict";var r,o=n(22491),a=["title","titleId"];function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function c(e,t){var n=e.title,c=e.titleId,s=l(e,a);return o.createElement("svg",i({width:10,height:10,viewBox:"0 0 10 10",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":c},s),n?o.createElement("title",{id:c},n):null,r||(r=o.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M0.800001 0C0.358173 0 0 0.358172 0 0.8V9.2C0 9.64183 0.358172 10 0.8 10H9.2C9.64183 10 10 9.64183 10 9.2V5.11405C10 5.05882 9.95523 5.01405 9.9 5.01405H8.85C8.79477 5.01405 8.75 5.05882 8.75 5.11405V8.35C8.75 8.57091 8.57091 8.75 8.35 8.75H1.65C1.42909 8.75 1.25 8.57091 1.25 8.35V1.65C1.25 1.42909 1.42909 1.25 1.65 1.25H4.76158C4.81681 1.25 4.86158 1.20523 4.86158 1.15V0.1C4.86158 0.0447716 4.81681 0 4.76158 0H0.800001ZM7.21634 0.168889L8.12499 1.125L3.0136 5.86689C2.97203 5.90545 2.97081 5.97082 3.0109 6.01091L3.80602 6.80604C3.84439 6.8444 3.90634 6.84517 3.94565 6.80778L8.99999 2L9.83014 2.78919C9.89382 2.84974 9.99904 2.80459 9.99904 2.71671V0.2C9.99904 0.0895429 9.90949 0 9.79904 0H7.28883C7.20096 0 7.15581 0.105195 7.21634 0.168889Z",fill:"#999999"})))}var s=o.forwardRef(c);t.Z=s},96826:function(e,t,n){"use strict";var r,o=n(22491),a=["title","titleId"];function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function c(e,t){var n=e.title,c=e.titleId,s=l(e,a);return o.createElement("svg",i({width:12,height:12,viewBox:"0 0 12 12",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":c},s),n?o.createElement("title",{id:c},n):null,r||(r=o.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M6 0.75C3.10051 0.75 0.75 3.10051 0.75 6C0.75 8.8995 3.10051 11.25 6 11.25C8.8995 11.25 11.25 8.8995 11.25 6C11.25 4.60761 10.6969 3.27226 9.71231 2.28769C8.72774 1.30312 7.39239 0.75 6 0.75ZM5.865 3.08999C6.39901 3.07674 6.92369 3.23152 7.365 3.53249C7.77663 3.83556 8.00559 4.32739 7.9725 4.83749C7.9818 5.15529 7.88988 5.46783 7.71 5.72999C7.53595 5.94074 7.337 6.12962 7.1175 6.29249L6.825 6.50999C6.6808 6.6173 6.57338 6.76664 6.5175 6.93749C6.47365 7.05997 6.45577 7.19023 6.465 7.31999H5.3325C5.32123 7.03198 5.36449 6.74443 5.46 6.47249C5.58375 6.22623 5.76995 6.01676 6 5.86499L6.3525 5.63249C6.44285 5.56602 6.52144 5.4849 6.585 5.39249C6.6936 5.25047 6.75167 5.07626 6.75 4.89749C6.75229 4.69663 6.692 4.50004 6.5775 4.33499C6.41394 4.14504 6.16629 4.04935 5.9175 4.07999C5.65516 4.06066 5.40186 4.1802 5.25 4.39499C5.10965 4.58469 5.02873 4.81178 5.0175 5.04749H3.87C3.84624 4.39646 4.1504 3.77687 4.68 3.39749C5.03774 3.18442 5.4488 3.07775 5.865 3.08999ZM6.5475 9.15748H5.3325V7.97998H6.5475V9.15748ZM2.05129 7.62908C2.71374 9.22442 4.2726 10.263 6 10.26C8.35102 10.2559 10.2559 8.35104 10.26 6.00001C10.263 4.27261 9.2244 2.71375 7.62907 2.0513C6.03373 1.38885 4.19639 1.75348 2.97493 2.97494C1.75347 4.1964 1.38884 6.03375 2.05129 7.62908Z",fill:"#6F7881"})))}var s=o.forwardRef(c);t.Z=s},6948:function(e,t,n){"use strict";var r,o=n(22491),a=["title","titleId"];function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function c(e,t){var n=e.title,c=e.titleId,s=l(e,a);return o.createElement("svg",i({width:19,height:16,viewBox:"0 0 19 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":c},s),n?o.createElement("title",{id:c},n):null,r||(r=o.createElement("path",{d:"M16 14L18.5981 11H13.4019L16 14Z",fill:"#1F2326"})))}var s=o.forwardRef(c);t.Z=s},26073:function(e,t,n){"use strict";n.r(t),n.d(t,{renderApp:function(){return Jv}});var r=n(50189),o=n(53782),a=n(22491),i=n(92418),l=(n(53267),n(6597),n(33591)),c=n(11026),s=n(67859),u=n(59065),d=[{baseline:"registered",id:"qd.pages.open",version:2},{baseline:"registered",id:"qd.pages.filter",version:1},{baseline:"registered",id:"qd.pages.onboarding",version:1},{baseline:"registered",id:"qd.pages.openModal",version:1},{baseline:"registered",id:"qd.pages.selectTab",version:1},{baseline:"registered",id:"qd.pages.clicks",version:1}],p=n(16199),m=n(88085),f=n(32935),h=n(85086),v=n(91218),g=n(80759),b=n(81839),_=n(3372),y=n(1270),C=n(58499),E=n(59460),x=n(93191),w=n(92387),k=(0,m.Uo)({trace:!0}),S=[f.Z,function(e){return function(t){return function(n){if(t(n),n.type===g.IX){var r=n.meta.projectKey,o=(0,v.mI)(e.getState()).info.exclusionFilters;(0,y.m8)("".concat(h.mp.exclusionFilters).concat((0,y.n$)(r)),o)}if(n.type!==b.VI&&n.type!==b.XL&&n.type!==b.iH){if(n.type===_.J){var a=n.meta.projectKey,i=(0,v.mI)(e.getState()).profile.changedContent;(0,y.m8)("".concat(h.mp.profileChanges).concat((0,y.n$)(a)),i)}}else{var l=n.meta.projectKey,c=(0,v.mI)(e.getState()).marker.options.user;(0,y.m8)("".concat(h.mp.scopes).concat((0,y.n$)(l)),c)}}}},function(e){return function(t){return function(n){switch(t(n),n.type){case g.bL:case x.fP:case x.bs:case x.TE:var r=n[g.R8];if("promo"===r)return;var o=(0,v.mI)(e.getState()).info.problemsTabFilters[r],a=o.locationFilters,i=o.genericFilters;n.type===g.bL?(0,C.jX)(E.D.locationFilters,JSON.stringify(a)):(0,C.jX)(E.D.genericFilters,JSON.stringify(i));break;case g.xK:var l=(0,v.mI)(e.getState()).info.showingBaseline;(0,C.jX)(E.D.showingBaseline,"".concat(l))}}}},function(){return function(e){return function(t){e(t),t.type===w.c&&(0,C.jX)(E.D.orderedLevels,JSON.stringify(t.orderedLevels))}}}],j=n(44334),N=function(e){var t=e.children,n=e.store;return a.createElement(j.zt,{store:n},t)},Z=(n(52924),n(7516)),P=n(51564),O=n(8628),T=n(13621),L=n(46167),I=n(19246),A=n(39994),B=n(39376),q=(0,L.P1)([function(e){return(0,I.xU)(e.getData)},function(e){return(0,I.N8)(e.getData)},B.d3],(function(e,t,n){return!n&&!t||e})),F=(0,L.P1)([q,function(e){return(0,A.tq)(e.inspections)}],(function(e,t){return e||t})),M=n(27937),R=n(11092),D=n(27791),H=n(14597),z=n(12186);function V(e,t){return{languages:t,type:z._F,meta:{projectKey:e}}}function W(e,t){return{modules:t,type:z.FX,meta:{projectKey:e}}}function U(e,t){return{translators:t,type:z.Nk,meta:{projectKey:e}}}function K(e,t){return{licenses:t,type:z.un,meta:{projectKey:e}}}function G(e,t){return{licenseRules:t,type:z.XU,meta:{projectKey:e}}}function Q(e){return{type:z.f_,meta:{projectKey:e}}}function J(e){return X.apply(this,arguments)}function X(){return X=(0,D.Z)((0,R.Z)().mark((function e(t){return(0,R.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",fetch(t).then((function(e){return e.json()})).then((function(e){return e.languages})));case 1:case"end":return e.stop()}}),e)}))),X.apply(this,arguments)}var Y=n(649),$=n(60726),ee=function(e,t){var n=[];if(Array.isArray(e.modules)){var r=new Map;e.modules.forEach((function(e){var t=r.get(e.languageLevel);if(t){var n=[].concat((0,Y.Z)(t),[e.name]);r.set(e.languageLevel,n)}else r.set(e.languageLevel,[e.name])})),r.forEach((function(e,r){n.push({language:"".concat(t," ").concat(r),components:e})}))}else"string"===typeof e.level&&n.push({language:"".concat(t," ").concat(e.level),components:[]});return n};function te(e,t){return ne.apply(this,arguments)}function ne(){return ne=(0,D.Z)((0,R.Z)().mark((function e(t,n){var r,o,a,i;return(0,R.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=[],o=(0,$.Z)(n),e.prev=2,i=(0,R.Z)().mark((function e(){var n,o,i;return(0,R.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=a.value,o="PHP"===n?"PHP Interpreter.json":"".concat(n,".json"),i=void 0,e.prev=3,e.next=6,t(o);case 6:i=e.sent,e.next=13;break;case 9:return e.prev=9,e.t0=e.catch(3),console.warn("File missing: ".concat(o,", an error occurred while trying to download a file.")),e.abrupt("return","continue");case 13:if(i){e.next=16;break}return console.warn("File missing: ".concat(o)),e.abrupt("return","continue");case 16:return e.prev=16,e.next=19,fetch(i).then((function(e){return e.json()})).then((function(e){(Array.isArray(e.modules)&&e.modules.length>0||"string"===typeof e.languageLevel)&&r.push.apply(r,(0,Y.Z)(ee(e,n)))}));case 19:e.next=24;break;case 21:e.prev=21,e.t1=e.catch(16),console.warn("File missing: ".concat(o,", an error occurred while trying to download a file from ").concat(i,"."));case 24:case"end":return e.stop()}}),e,null,[[3,9],[16,21]])})),o.s();case 5:if((a=o.n()).done){e.next=12;break}return e.delegateYield(i(),"t0",7);case 7:if("continue"!==e.t0){e.next=10;break}return e.abrupt("continue",10);case 10:e.next=5;break;case 12:e.next=17;break;case 14:e.prev=14,e.t1=e.catch(2),o.e(e.t1);case 17:return e.prev=17,o.f(),e.finish(17);case 20:return e.abrupt("return",r);case 21:case"end":return e.stop()}}),e,null,[[2,14,17,20]])}))),ne.apply(this,arguments)}function re(e,t){return oe.apply(this,arguments)}function oe(){return oe=(0,D.Z)((0,R.Z)().mark((function e(t,n){var r,o,a,i;return(0,R.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=[],o=(0,$.Z)(n),e.prev=2,i=(0,R.Z)().mark((function e(){var n,o,i;return(0,R.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=a.value,o="".concat(n,".json"),i=void 0,e.prev=3,e.next=6,t(o);case 6:i=e.sent,e.next=13;break;case 9:return e.prev=9,e.t0=e.catch(3),console.warn("File missing: ".concat(o,", an error occurred while trying to download a file.")),e.abrupt("return","continue");case 13:if(i){e.next=16;break}return console.warn("File missing: ".concat(o)),e.abrupt("return","continue");case 16:return e.prev=16,e.next=19,fetch(i).then((function(e){return e.json()})).then((function(e){"string"===typeof e.level&&r.push({name:n,version:e.level})}));case 19:e.next=24;break;case 21:e.prev=21,e.t1=e.catch(16),console.warn("File missing: ".concat(o,", an error occurred while trying to download a file from ").concat(i,"."));case 24:case"end":return e.stop()}}),e,null,[[3,9],[16,21]])})),o.s();case 5:if((a=o.n()).done){e.next=12;break}return e.delegateYield(i(),"t0",7);case 7:if("continue"!==e.t0){e.next=10;break}return e.abrupt("continue",10);case 10:e.next=5;break;case 12:e.next=17;break;case 14:e.prev=14,e.t1=e.catch(2),o.e(e.t1);case 17:return e.prev=17,o.f(),e.finish(17);case 20:return e.abrupt("return",r);case 21:case"end":return e.stop()}}),e,null,[[2,14,17,20]])}))),oe.apply(this,arguments)}function ae(e,t){return function(){var n=(0,D.Z)((0,R.Z)().mark((function n(r){var o,a,i,l,c,s,u,d,p;return(0,R.Z)().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return o=te(t,H.J3).then((function(t){return r(W(e,t))})),a=re(t,H.rY).then((function(t){return r(U(e,t))})),n.next=4,t("ProjectFingerprint.json");case 4:return i=n.sent,l=i?J(i).then((function(t){return r(V(e,t))})):Promise.resolve(),n.next=8,t(H.Z$.licenses);case 8:return c=n.sent,s=c?fetch(c).then((function(e){return e.json()})).then((function(t){return r(K(e,t))})):Promise.resolve(),n.next=12,t(H.Z$.rules);case 12:return u=n.sent,d=u?fetch(u).then((function(e){return e.json()})).then((function(t){return r(G(e,t))})).catch((function(){return console.warn("fetchProjectAuditData: Can't load ".concat(H.Z$.rules))})):Promise.resolve(),p=[l,s,o,d,a],n.abrupt("return",Promise.allSettled(p).then((function(){return r(Q(e))})));case 16:case"end":return n.stop()}}),n)})));return function(e){return n.apply(this,arguments)}}()}var ie=n(90122),le=n(26645);function ce(e){return{type:le.Tq,meta:{projectKey:e}}}function se(e){return{type:le.wY,meta:{projectKey:e}}}function ue(e,t){return{data:t,type:le.OX,meta:{projectKey:e}}}function de(e,t,n){var r,o=arguments.length>3&&void 0!==arguments[3]&&arguments[3],a=n.buildsId,i=n.comparisonChecks,l=Object.keys(null!==(r=t["tools inspection"])&&void 0!==r?r:{}),c=null!==a&&void 0!==a&&a.current&&null!==a&&void 0!==a&&a.previous?"".concat(i,"¤tBuild=").concat(a.current,"&previousBuild=").concat(a.previous):"";return function(r){!o&&""!==c&&n.buildsId?r(me(e,c,t,n)):l.length>0&&r(fe(e,l,n.getFile))}}var pe={headers:{accept:"application/json"},credentials:"include"},me=function(e,t,n,r){return function(o){return o(ce(e)),fetch(t,pe).then((function(e){return e.json()})).then((function(e){for(var t=[],n=0,r=Object.keys(e);n1&&void 0!==arguments[1]?arguments[1]:"include",n=arguments.length>2?arguments[2]:void 0;return function(r){return fetch(e,{credentials:t}).then((function(e){return e.json()})).then((function(e){return he(e.modules)})).then((function(e){return r((0,ge.IO)(n,e,!0))})).catch((function(){return r((0,ge.wO)(n))}))}},_e=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"include",r=(0,y.fp)("".concat(h.mp.scopes).concat((0,y.n$)(e)));return r?function(o){return o((0,ge.IO)(e,r,!1)),o(be(t,n,e)).then((function(e){return{idea:e,user:r}}))}:function(r){return r(be(t,n,e)).then((function(e){return{idea:e}}))}},ye=n(85864);function Ce(e,t){return{source:t,type:ye.oC,meta:{projectKey:e}}}function Ee(e){return{type:ye.Yt,meta:{projectKey:e}}}function xe(e,t){return{reason:t,type:ye.dB,meta:{projectKey:e}}}function we(e,t,n){return{compareWithBuildId:n,currentBuildId:t,type:ye.tF,meta:{projectKey:e}}}function ke(e,t){return{buildId:Number(t),type:ye.FZ,meta:{projectKey:e}}}function Se(e,t){return{paths:t,type:ye.Sb,meta:{projectKey:e}}}var je=n(28151),Ne=n(95146),Ze=n(87131),Pe=n(35449),Oe=function(e,t){var n=(0,Ze.Gv)(e.trim()),r=(0,y.fp)("".concat(h.mp.profileHash).concat((0,y.n$)(t)));return function(o){if(n!==r)(0,y.m8)("".concat(h.mp.profileHash).concat((0,y.n$)(t)),n),(0,y.m8)("".concat(h.mp.profileChangedNotificationClosed).concat((0,y.n$)(t)),!1),"undefined"!==typeof r&&o(function(e){return function(t){t((0,M.mE)(e,[])),t((0,ge.kQ)(e,[]));var n="".concat(h.mp.exclusionFilters).concat((0,y.n$)(e));(0,y.m8)(n,[]),t((0,Pe.R)(e,{paths:[],includedChecks:[],excludedChecks:[]}))}}(t));else{var a=function(e){var t={excludedChecks:[],includedChecks:[],paths:[]},n=(0,y.fp)("".concat(h.mp.profileChanges).concat((0,y.n$)(e)));return n&&(t=n),t}(t);o((0,Pe.R)(t,a))}var i=e.split("\n").filter((function(e){return""!==e})).join("\n");o((0,Pe.Z)(t,i))}},Te=n(24601),Le=function(e,t){return function(n){if(e)return fetch(e,{credentials:(0,Te.a)()}).then((function(e){if(200!==e.status)throw Error("The file could not be read");return e})).then((function(e){return e.text()})).then((function(e){return n(Oe(e,t))}))}};function Ie(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"include";return{credentials:e,headers:{"Content-Type":"application/json;charset=UTF-8",accept:"application/json"},method:"GET"}}var Ae=n(17033);function Be(e,t){return{isVisible:t,meta:{projectKey:e},type:Ae.n}}function qe(e,t){return{data:t,type:Ae.I,meta:{projectKey:e}}}var Fe=n(91100),Me=n(71651);function Re(e,t){return{data:t,type:Me.g,meta:{projectKey:e}}}function De(e){return{type:Me.L,meta:{projectKey:e}}}var He,ze=402,Ve=function(e,t,n,r,o,a){var i=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"include",c=o?"".concat(n,"&").concat(o):n,s=null!==r&&void 0!==r?r:Ie(i),u=t?"file":"controller";return function(n){return n(Ce(e,u)),fetch(c,s).then((function(e){if(e.status===ze)throw e;return e.json()})).then((function(t){n(Ee(e)),n((0,M.m4)(e,t,u))})).then((function(){"undefined"!==typeof a&&n(We(e,a.buildProblems,i))})).catch((function(r){if(r instanceof Response)r.status===ze&&(n(xe(e,l.jD.file)),n(xe(e,l.jD.remoteComparison)));else if(t)n(xe(e,l.jD.file));else if(n(xe(e,l.jD.remoteComparison)),"undefined"!==typeof a){var o=$e(e,a,a.buildsId,l.jD.remoteComparison,i);return n(o())}}))}},We=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"include";return function(r){return fetch(t,{credentials:n}).then((function(e){return e.json()})).then((function(t){return r((0,M.jC)(e,t))})).catch((function(e){return console.warn(e)}))}},Ue=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"include";return function(r){return fetch(t,{credentials:n}).then((function(e){return e.json()})).then((function(t){return r(Re(e,t)),t})).catch((function(){return r(De(e))}))}},Ke=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"include";return function(r){return t?fetch(t,{credentials:n,headers:{Accept:"application/json"}}).then((function(e){return e.json()})).then((function(t){return r((0,Fe.G)(e,t))})).catch((function(e){return console.error(e)})):Promise.resolve()}},Ge=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"include";return function(r){return t?fetch(t,{credentials:n}).then((function(e){return e.json()})).then((function(t){return r(qe(e,t))})).catch((function(){return console.warn("receivingData: Can't load ".concat(t))})):Promise.resolve()}},Qe=function(e,t,n,r,o){var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"include";return function(i){i(ke(e,n));var l="currentBuild=".concat(t,"&previousBuild=").concat(n);return i(Ve(e,!1,r,Ie(),l,o,a))}},Je=function(e){var t=[],n=(0,y.fp)("".concat(h.mp.exclusionFilters).concat((0,y.n$)(e)));return Array.isArray(n)&&(t=n),t},Xe=function(e){var t=!1,n=(0,y.fp)("".concat(h.mp.comparison).concat((0,y.n$)(e)));"string"===typeof n&&(t="on"===n);var r=(0,C.Gr)(E.D.comparing);return null!==r&&(t=Boolean(r)),t},Ye=Number((0,C.Gr)(E.D.comparedBuildId)),$e=function(e,t,n,r){var o,a,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"include",c=null!==(o=null===n||void 0===n?void 0:n.current)&&void 0!==o?o:"",s=null!==(a=null===n||void 0===n?void 0:n.previous)&&void 0!==a?a:"";Ye>0&&(s=String(Ye));var u=""!==c,d=""!==s,p=r!==l.jD.remoteComparison&&r!==l.jD.localComparison,m="file";d&&u&&p&&(m="compare");var f={compare:function(){return Qe(e,c,s,t.comparisonProblems,t,i)},file:function(){return Ve(e,!0,t.buildProblems,void 0,void 0,void 0,i)}};return f[m]},et=n(78625);!function(e){e.analysisResults="qodana.sarif.json",e.buildProblems="result-allProblems.json",e.buildProblemsLite="result-allProblemsLite.json",e.comparisonChecks="qodana-api/v1/comparison/descriptions.html",e.comparisonProblems="qodana-api/v1/comparison/builds-lite.html",e.metaInformation="metaInformation.json",e.profile="qodana.yaml",e.projectAudit="projectStructure",e.projectStructure="projectStructure/Code_Inspection.json",e.promo="promo.json",e.sanity="sanity.json"}(He||(He={}));function tt(e,t,n){var o=(0,T.TL)(),i=(0,a.useContext)(u.Il).environment;(0,a.useEffect)((function(){(0,Te.B)("cloud"===i?"omit":"include");var a=(0,r.Z)((0,r.Z)({},function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:et.au,n=arguments.length>2?arguments[2]:void 0,o=arguments.length>3?arguments[3]:void 0,a="undefined"===typeof n?{}:(0,r.Z)({},n),i=a.prefix,c=void 0===i?"":i;if(e===l.qA.TeamCity&&o)c="qodana-api/v1/resource.html?projectKey=".concat(t,"¤tBuild=").concat(o,"&path=Build_Results/");else{var s=(0,C.tF)("url"),u=(0,C.tF)("id");null!==s&&null!==u&&(c="".concat(s,"/").concat(u,"/results/"))}return(0,ie.Q$)(a,"comparisonProblems")||(a.comparisonProblems="".concat(He.comparisonProblems,"?projectKey=").concat(t)),(0,ie.Q$)(a,"comparisonChecks")||(a.comparisonChecks="".concat(He.comparisonChecks,"?projectKey=").concat(t)),(0,ie.Q$)(a,"analysisResults")||(a.analysisResults="".concat(c).concat(He.analysisResults)),(0,ie.Q$)(a,"buildProblems")||(a.buildProblems="".concat(c).concat(He.buildProblems)),(0,ie.Q$)(a,"buildProblemsLite")||(a.buildProblemsLite="".concat(c).concat(He.buildProblemsLite)),(0,ie.Q$)(a,"getBuildsInfo")||(a.getBuildsInfo=""),(0,ie.Q$)(a,"previousBuildProblems")||(a.previousBuildProblems=""),(0,ie.Q$)(a,"metaInformation")||(a.metaInformation="".concat(c).concat(He.metaInformation)),(0,ie.Q$)(a,"projectStructure")||(a.projectStructure="".concat(c).concat(He.projectStructure)),(0,ie.Q$)(a,"profile")||(a.profile="".concat(c).concat(He.profile)),(0,ie.Q$)(a,"sanity")||(a.sanity="".concat(c).concat(He.sanity)),(0,ie.Q$)(a,"promo")||(a.promo="".concat(c).concat(He.promo)),(0,ie.Q$)(a,"projectAuditGetFile")||(a.projectAuditGetFile=function(e){return"".concat(c).concat(He.projectAudit,"/").concat(e)}),(0,ie.Q$)(a,"getFile")||(a.getFile=function(e){return"".concat(c).concat(e)}),"undefined"!==typeof a.buildsId&&("undefined"!==typeof a.buildsId.current&&"undefined"!==typeof a.buildsId.previous||delete a.buildsId),a}(i,e,t,null===n||void 0===n?void 0:n.current)),{},{buildsId:n});o(function(e,t,n){var r,o,a,i,l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"include",c=null!==(r=null===(o=e.buildsId)||void 0===o?void 0:o.current)&&void 0!==r?r:"",s=null!==(a=null===(i=e.buildsId)||void 0===i?void 0:i.previous)&&void 0!==a?a:"",u="undefined"!==typeof c;Ye>0&&(s=String(Ye));var d=$e(t,e,e.buildsId,n,l);return function(r){var o;r((0,je.b)(t)),r(Se(t,e)),r(Ue(t,e.metaInformation,l)).then((function(e){return o=e})).then((function(){return r(_e(t,e.projectStructure,l))})).then((function(){return Je(t)})).then((function(e){return r((0,M.mE)(t,e))})).then((function(){return r((0,M.K3)(t,Xe(t)))})).then((function(){return r(Ke(t,e.sanity))})).then((function(){return r(d(t))})).then((function(){var n,a;"undefined"!==typeof o&&(r(de(t,o,e)),(0,Ne.R)(null===(n=o)||void 0===n||null===(a=n.attributes)||void 0===a?void 0:a.deviceId))})).then((function(){return r(ae(t,e.projectAuditGetFile))})).then((function(){return r(Le(e.profile,t))})).then((function(){return r(Ge(t,e.promo))})),""!==e.getBuildsInfo&&u&&!n&&r(we(t,c,s))}}(a,e,void 0,"cloud"===i?"omit":"include"))}),[n,i,t,e,o])}var nt="App_app__6Ra7L",rt="App_appNotTeamCity__SCvyn",ot="App_errorTeamCity__CaDSF",at="App_bgTransparent__Z7QCA",it=n(87019),lt=n(62994),ct=n(71894),st=n.n(ct),ut=n(14274),dt=n(41328),pt="ErrorMessage_content__uByj8",mt=a.memo((function(e){var t=e.className,n=void 0===t?"":t,r=e.title,o=void 0===r?"Something went wrong":r;return a.createElement("div",{className:st()(pt,n)},a.createElement(it.V1,null,"\ud83d\ude41 Error: ",o),a.createElement(it.xv,null,"Please, try to build again later or\xa0",a.createElement(lt.ZP,{"data-qd-clickable":dt.vf.errorMessageLink,href:ut.ZW,title:"Open external resource"},"create an issue in Youtrack.")))})),ft=n(8879),ht="ThemeMarker_themeMarker__1p+8Q";function vt(){var e=(0,a.useContext)(ft.Ni);return a.createElement("div",{className:ht,"data-qd-test-theme":"".concat(e.theme,"-theme")})}var gt,bt=n(64649),_t=n(73204),yt=n(39881),Ct=n(95572),Et=n(89467),xt=function(){var e=(0,T.CG)(v.L7),t=(0,a.useContext)(u.Il).environment,n=(0,a.useContext)(u.pg).problemsListDefaultTab,r=(0,T.CB)(F),o=(0,T.qr)();(0,a.useEffect)((function(){if(!r){var e=(0,v.mI)(o.getState()),a=e.metaInf,i=(0,yt.XI)(e.info),l=(0,yt.Ne)(i),c=l.selectNewProblemsCount,s=l.selectAppliedExclusionProblems,u=c(e),d=s(e),p=(0,yt.gJ)(e),m=a.tools.filter((function(e){return Ct.Tk.includes(e)})).sort();(0,Et.X6)({allProblemsCount:d.length,comparing:p,environment:t,newProblemsCount:u,tab:n,tools:m.join(", "),toolsCount:a.tools.length})}}),[r,o,n,e,t])},wt=n(3946),kt=n(83792),St=n(2410),jt=n(69917),Nt=n(815),Zt={excluded:[],generateSourcesRoot:[],resourcesRoot:[],sourcesRoot:[],testResourcesRoot:[],testSourcesRoot:[]};!function(e){e.all="All inspections",e.disabled="Disabled",e.enabled="Enabled",e.new="New"}(gt||(gt={}));var Pt=function(e,t){var n,r=[],o=new Map,a=new Map,i=(0,$.Z)(t);try{for(i.s();!(n=i.n()).done;){var l=n.value;if(e.includes(l.shortName)){var c,s=null!==(c=a.get(l.group))&&void 0!==c?c:[];a.set(l.group,[].concat((0,Y.Z)(s),[l.displayName]))}var u,d=null!==(u=o.get(l.group))&&void 0!==u?u:[];o.set(l.group,[].concat((0,Y.Z)(d),[l.displayName]))}}catch(p){i.e(p)}finally{i.f()}return a.forEach((function(e,t){var n;if((null===(n=o.get(t))||void 0===n?void 0:n.length)===e.length)r.push({category:"category",name:t});else{var a=e.map((function(e){return{category:"type",name:e}}));r=[].concat((0,Y.Z)(r),(0,Y.Z)(a))}})),r},Ot=n(40331),Tt=n(88596),Lt=(n(13337),n(31832)),It=n(42571);function At(){var e=(0,T.CG)(v.L7),t=(0,T.TL)(),n=(0,Nt.G)(),o=(0,T.CB)(jt.oB),a=(0,T.CB)(jt.fC),i=(0,T.CB)((function(e){return(0,A.DP)(e.inspections)})),l=(0,T.CB)((function(e){return e.profile.changedContent})),c=function(e){var t=e.filter((function(e){return!o.includes(e)})),r=Pt(t,i);n(r,It.W.type)},s=function(n){return t((0,Pe.R)(e,n))};return function(e,t){var n=e.shortName,i=e.enabled,u=a.includes(n),d=o.includes(n),p=l.excludedChecks.filter((function(e){return e!==n})),m=l.includedChecks.filter((function(e){return e!==n})),f=l.excludedChecks.length!==p.length,h=l.includedChecks.length!==m.length;if(t&&d){var v={excludedChecks:[].concat((0,Y.Z)(l.excludedChecks),[n])};c(p),i||(v.includedChecks=[].concat((0,Y.Z)(l.includedChecks),[n])),s((0,r.Z)((0,r.Z)({},l),v))}else t&&!f||!t&&u?s((0,r.Z)((0,r.Z)({},l),{},{includedChecks:[].concat((0,Y.Z)(l.includedChecks),[n])})):!t&&h?s((0,r.Z)((0,r.Z)({},l),{},{includedChecks:m})):t&&f?(s((0,r.Z)((0,r.Z)({},l),{},{excludedChecks:p})),c(p)):t||h||(s((0,r.Z)((0,r.Z)({},l),{},{excludedChecks:[].concat((0,Y.Z)(l.excludedChecks),[n])})),c([].concat((0,Y.Z)(l.excludedChecks),[n])))}}var Bt,qt=function(e){return e.replace(/[\-\[\]\/{}()*+?.\\^$|]/g,"\\$&")},Ft="CheckList_checks__67saT",Mt="CheckList_container__FzIGa",Rt="CheckList_last__+2Ebf",Dt="CheckList_hint__1TkLE",Ht="CheckList_search__iYaSW",zt="CheckList_checksCount__sU8JQ",Vt="CheckList_title__meOnQ",Wt="CheckList_controlsContainer__yNlHQ",Ut="CheckList_checksError__kxRrA",Kt=n(10829),Gt="CheckListSkeleton_line__BtGXE",Qt=function(e){return a.createElement("div",{className:e.className},(0,Y.Z)(Array(7)).map((function(e,t){return a.createElement(Kt.O,{height:32,key:t,className:Gt})})))},Jt=n(25773),Xt=n(76976),Yt="Inspection_island__hW4FN",$t="Inspection_copyIcon__e9p7T",en="Inspection_summary__x3xgR",tn=n(80487),nn=n(62729),rn="InspectionDetails_details__mG1oK",on="InspectionDetails_disabled__cBmPH",an="InspectionDetails_button__-S6VX",ln="InspectionDetails_tag__lIWzo",cn=function(e){var t=e.description,n=e.language,r=e.enabled,o=e.updateHeight,i=e.index,l=(0,a.useState)(!1),s=(0,c.Z)(l,2),u=s[0],d=s[1],p=t&&t.length>75,m=p&&!u?"".concat(t.slice(0,75).trim(),"..."):t;return a.createElement(a.Fragment,null,m&&a.createElement(nn.e,{"data-qd-test":kt.b.checkDetailsInfo,className:st()((0,bt.Z)({},on,!r),rn),content:m}),p&&a.createElement(tn.ZP,{onClick:function(){o&&o(i),d(!u)},className:an,text:!0},u?"Less":"More..."),n&&a.createElement("span",{"data-qd-test":kt.b.checkTag,className:ln},n))},sn=n(44379),un=n(21091),dn=n(43834),pn=n(94074),mn=["title","titleId"];function fn(){return fn=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function vn(e,t){var n=e.title,r=e.titleId,o=hn(e,mn);return a.createElement("svg",fn({width:14,height:14,viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":r},o),n?a.createElement("title",{id:r},n):null,Bt||(Bt=a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12.5689 4.64147C11.2406 1.50372 7.61987 0.03634 4.48212 1.36459C4.47774 1.36634 4.47424 1.36809 4.46987 1.36984C3.68587 1.69709 2.97887 2.18709 2.39612 2.80572L3.48374 3.85922C5.21887 1.96046 8.16412 1.82746 10.0637 3.56171C11.9625 5.29684 12.0955 8.24209 10.3612 10.1417C9.90012 10.6457 9.33399 11.043 8.70224 11.3046L9.29724 12.7063C12.421 11.3763 13.8831 7.77222 12.5689 4.64147ZM3.96851 10.896L3.48376 10.539L2.76189 11.4822L3.23789 11.848C4.12864 12.5077 5.18476 12.9076 6.28901 13.0038L6.87526 13.0633L6.99339 11.8733L6.40714 11.8226C5.52514 11.7421 4.68164 11.4218 3.96851 10.896ZM2.06537 7.05473C2.06537 6.64523 2.11612 6.23661 2.21762 5.84023L2.36199 5.26186L1.21487 4.96436L1.06174 5.54186C0.791367 6.61636 0.814992 7.74336 1.12999 8.80561L1.29974 9.37523L2.43899 9.02698L2.26924 8.45736C2.13274 8.00236 2.06449 7.52986 2.06537 7.05473Z",fill:"#1F2326",fillOpacity:.4})))}var gn,bn=a.forwardRef(vn),_n=n(93063),yn=n(90667),Cn=n(63209),En="CopyButton_copyButton__XCSWW",xn="CopyButton_copyIcon__PMbT7",wn="CopyButton_copied__+au0G",kn="CopyButton_copiedMark__nZEZP",Sn=function(e){var t=e.text,n=e.isTextCopied,r=e.iconClassName,o=e.onClick;return a.createElement(a.Fragment,null,n?a.createElement("div",{className:wn},a.createElement(yn.Z,{className:kn}),a.createElement("span",{className:it.wu.smallText},"Copied")):a.createElement("button",{className:En,onClick:function(e){e.stopPropagation(),function(e){var t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.style.position="absolute",t.style.left="-9999px",document.body.appendChild(t),t.select(),document.execCommand("copy"),document.body.removeChild(t)}(t),o(!0)}},a.createElement(Cn.Z,{className:st()(xn,r)})))},jn="InspectionSummary_container__M3uEU",Nn="InspectionSummary_open__UqfiK",Zn="InspectionSummary_button__WuKN6",Pn="InspectionSummary_caption__64p99",On="InspectionSummary_close__VjUgg",Tn="InspectionSummary_displayName__BsZKT",Ln="InspectionSummary_disable__RX-eh",In="InspectionSummary_shortName__cCq2b",An="InspectionSummary_shortNameContainer__V0nu1",Bn="InspectionSummary_badge__MUmJi",qn="InspectionSummary_tooltipPopup__hpS93",Fn="InspectionSummary_iconContainer__gOwPI",Mn="InspectionSummary_icon__mI2Vj",Rn="InspectionSummary_toggle__irwlU";!function(e){e.old="Old",e.switched="Switched",e.created="Created"}(gn||(gn={}));var Dn,Hn=function(e){var t,n=e.changeStateOpenItems,r=e.enabled,o=e.index,i=e.item,l=e.onChange,s=e.search,u=e.showingDetails,d=e.showingNew,p=e.showingPrompt,m=void 0!==p&&p,f=(0,a.useState)(!1),h=(0,c.Z)(f,2),v=h[0],g=h[1],b=(0,a.useState)(!1),_=(0,c.Z)(b,2),y=_[0],C=_[1],E=(0,a.useCallback)((function(){return n(o)}),[o,n]),x=(0,a.useCallback)((function(e){return(0,pn.d)(e,E)}),[E]),w=(0,a.useCallback)((function(){l(!r)}),[l,r]),k=(0,a.useCallback)((function(e){e.preventDefault(),e.stopPropagation()}),[]);return a.createElement("div",{className:st()(jn,(t={},(0,bt.Z)(t,Nn,u),(0,bt.Z)(t,On,!u),(0,bt.Z)(t,Ln,!r),t))},a.createElement("span",{"data-qd-clickable":dt.vf.checkListCheck,"data-qd-test":kt.b.checkListCheck,className:Zn,onClick:E,onKeyDown:x,role:"button",tabIndex:-1},a.createElement("span",{className:Pn},a.createElement(_n.q,{"data-qd-test":kt.b.checkName,className:st()(Tn,it.wu.text),line:i.displayName,search:s}),i.status===gn.created&&d&&a.createElement(sn.Z,{className:Bn},Lt.oN.new),u&&a.createElement(a.Fragment,null,a.createElement(Sn,{isTextCopied:v,onClick:g,text:i.displayName,iconClassName:$t}),a.createElement("span",{className:Rn},m&&a.createElement(un.Z,{popupProps:{className:qn},title:"Will be applied after you download and refresh qodana.yaml"},a.createElement("span",{className:Fn},a.createElement(bn,{className:Mn}))),a.createElement("span",{onClick:k,onKeyDown:k},a.createElement(dn.Z,{defaultChecked:r,htmlProps:{"aria-label":'Toggle "'.concat(i.shortName,'"'),"data-qd-clickable":dt.vf.checkListCheckEnabledToggle,"data-qd-test":kt.b.checkToggle},label:{text:r?"Enabled":"Disabled",position:"r"},onChange:w}))))),u&&a.createElement("div",{className:An},a.createElement("span",{"data-qd-test":kt.b.checkShortName,className:In},"ID: ",a.createElement(_n.q,{line:i.shortName,search:e.search})),a.createElement(Sn,{isTextCopied:y,onClick:C,text:i.shortName,iconClassName:$t}))))},zn=a.memo(Hn),Vn=function(e){var t,n=e.item,r=e.showingDetails,o=e.showingPrompt,i=e.updateHeight,l=e.index,c=void 0===l?0:l,s=(0,a.useMemo)((function(){return n.enabled!==o}),[n.enabled,o]),u=r?Xt.ZP:"div";return a.createElement(u,{className:st()((t={},(0,bt.Z)(t,Yt,r),(0,bt.Z)(t,en,!r),t))},a.createElement(zn,(0,Jt.Z)({},e,{enabled:s,index:c})),r&&a.createElement(cn,{index:c,updateHeight:i,description:n.description,enabled:s,language:n.language}))},Wn=a.memo(Vn),Un=["title","titleId"];function Kn(){return Kn=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Qn(e,t){var n=e.title,r=e.titleId,o=Gn(e,Un);return a.createElement("svg",Kn({width:9,height:2,viewBox:"0 0 13 2",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":r},o),n?a.createElement("title",{id:r},n):null,Dn||(Dn=a.createElement("path",{d:"M0.601461 1.91284C0.270092 1.91405 0.00146484 1.64641 0.00146484 1.31504L0.00146484 0.715039C0.00146484 0.383668 0.270092 0.114055 0.601461 0.112841L11.4014 0.0732654C11.7328 0.0720512 12.0014 0.339696 12.0014 0.671067V1.27107C12.0014 1.60244 11.7328 1.87205 11.4014 1.87327L0.601461 1.91284Z"})))}var Jn,Xn=a.forwardRef(Qn),Yn=["title","titleId"];function $n(){return $n=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function tr(e,t){var n=e.title,r=e.titleId,o=er(e,Yn);return a.createElement("svg",$n({width:9,height:9,viewBox:"0 0 12 12",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":r},o),n?a.createElement("title",{id:r},n):null,Jn||(Jn=a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M5.69834 0.00102652C5.36693 0.00161256 5.09772 0.27075 5.09706 0.602154L5.08835 5.09281L0.602448 5.10058C0.27097 5.10116 0.00175933 5.3703 0.00117329 5.70171L1.21297e-06 6.30137C-0.000658079 6.63277 0.267527 6.90103 0.598932 6.90045L5.0849 6.89268L5.07618 11.4009C5.07553 11.7323 5.34371 12.0006 5.67512 12L6.2747 11.999C6.60611 11.9984 6.87532 11.7292 6.87598 11.3978L6.8847 6.8896L11.3973 6.88184C11.7287 6.88125 11.9979 6.61212 11.9985 6.28071L11.9997 5.68105C12.0004 5.34964 11.7322 5.08139 11.4008 5.08197L6.88814 5.08974L6.89686 0.599078C6.89752 0.267674 6.62933 -0.000585079 6.29793 9.58366e-07L5.69834 0.00102652Z"})))}var nr,rr=a.forwardRef(tr),or="CollapsibleItem_sign__WqaQG",ar="CollapsibleItem_container__3Pq2b",ir=["isOpened","className","onClick","children"],lr=function(e){var t=e.isOpened,n=e.className,r=e.onClick,i=e.children,l=(0,o.Z)(e,ir);return a.createElement(tn.ZP,(0,Jt.Z)({className:n,inline:!0,onClick:r,text:!0},l),a.createElement("div",{className:ar},t?a.createElement(Xn,{className:or}):a.createElement(rr,{className:or}),i))},cr="InspectionGroup_titleName__jky1n",sr="InspectionGroup_inspectionGroup__gWKM2",ur="InspectionGroup_noToolInspectionGroup__tA8vx",dr=a.memo((function(e){var t=e.group,n=e.isOpened,r=e.search,o=e.hasToolHeading,i=e.onClick,l=t.name;return a.createElement(lr,{isOpened:n,onClick:function(){return i(l)},key:l,className:st()(sr,(0,bt.Z)({},ur,!o)),"data-qd-clickable":dt.vf.checkListInspectionGroup,"data-qd-test":kt.b.checksInspectionGroupBtn},a.createElement(_n.q,{className:st()(cr,it.wu.text,it.wu.subtitle),line:l,search:r}))})),pr="Tool_tool__LbBQ4",mr="Tool_count__F3yW3",fr="Tool_newCount__f+4tG",hr=a.memo((function(e){var t=e.item,n=e.index,r=e.search,o=e.showingNew,i=e.isOpened,l=e.onClick,c=t.checksCount,s=t.tool,u=t.newChecksCount,d=(0,a.useCallback)((function(){return l(t.tool)}),[t.tool,l]);return a.createElement(lr,{isOpened:i,onClick:d,key:n,"data-qd-clickable":dt.vf.checkListTool,"data-qd-test":kt.b.checksToolBtn,className:pr},a.createElement(_n.q,{className:it.wu.heading3,line:s,search:r}),a.createElement("span",{className:mr},c," inspections"),u>0&&o&&a.createElement("span",{className:fr}," +",u," new"))})),vr=function(e,t,n){return t.includes(e)?""===n:""!==n},gr=a.memo((function(e){var t=e.search,n=e.inspections,r=e.showingNew,o=void 0!==r&&r,i=e.excludedChecks,l=e.includedChecks,s=e.isError,u=void 0!==s&&s,d=e.isLoading,p=void 0!==d&&d,m=At(),f=(0,a.useState)([]),h=(0,c.Z)(f,2),v=h[0],g=h[1],b=(0,a.useState)([]),_=(0,c.Z)(b,2),y=_[0],C=_[1],E=(0,a.useState)([]),x=(0,c.Z)(E,2),w=x[0],k=x[1],S=(0,a.useState)([]),j=(0,c.Z)(S,2),N=j[0],Z=j[1],P=(0,a.useState)(),O=(0,c.Z)(P,2),T=O[0],L=O[1],I=(0,a.useRef)(null),A=(0,a.useMemo)((function(){return qt(t)}),[t]),B=(0,a.useMemo)((function(){return function(e){var t,n=new Map,r=(0,$.Z)(e);try{for(r.s();!(t=r.n()).done;){var o=t.value,a=o.tool,i=o.group;if("string"===typeof a){var l=n.get(a);if(l){l.checksCount+=1,"Created"===o.status&&(l.newChecksCount+=1);var c=l.items.get(i);c?l.items.set(i,[].concat((0,Y.Z)(c),[o])):l.items.set(i,[o])}else{var s=new Map;s.set(i,[o]),n.set(a,{checksCount:1,items:s,newChecksCount:"Created"===o.status?1:0})}}}}catch(u){r.e(u)}finally{r.f()}return n}(n)}),[n]),q=B.size>1,F=new Tt.t1({defaultHeight:32,fixedWidth:!0}),M=function(e){var t;F.clear(e,0),null===I||void 0===I||null===(t=I.current)||void 0===t||t.recomputeRowHeights(e)},R=function(e){M(e),N.includes(e)?Z(N.filter((function(t){return t!==e}))):Z([].concat((0,Y.Z)(N),[e]))},D=(0,a.useCallback)((function(e){y.includes(e)?C(y.filter((function(t){return t!==e}))):C([].concat((0,Y.Z)(y),[e])),Z([]),k([])}),[y]),H=(0,a.useCallback)((function(e){w.includes(e)?k(w.filter((function(t){return t!==e}))):k([].concat((0,Y.Z)(w),[e])),Z([])}),[w]),z=(0,a.useCallback)((function(){0===T&&L(void 0)}),[T]);(0,a.useMemo)((function(){var e=[];B.forEach((function(n,r){var o=n.checksCount,a=n.newChecksCount;e.push({tool:r,type:"tool",newChecksCount:a,checksCount:o}),vr(r,y,t)&&n.items.forEach((function(n,r){var o=vr(r,w,t);e.push({name:r}),o&&e.push.apply(e,(0,Y.Z)(n))}))})),g(e)}),[B,y,t,w]),(0,a.useEffect)((function(){L(0),C(B.size>0&&""===t?[B.keys().next().value]:[]),Z([]),k([])}),[B,t]);var V=function(e){var n=e.key,r=e.index,c=e.style,s=e.parent,u=v[r];return a.createElement(Tt.Z8,{key:n,parent:s,cache:F,columnIndex:0,rowIndex:r},a.createElement("div",{style:c,className:r===v.length-1?Rt:""},"type"in u?function(e,n){return q?a.createElement(hr,{item:e,index:n,search:A,isOpened:vr(e.tool,y,t),showingNew:o,onClick:D}):null}(u,r):"group"in u?function(e,t){var n=function(e,t,n){return-1!==t.indexOf(e)||-1!==n.indexOf(e)}(e.shortName,i,l),r=N.includes(t);return a.createElement(Wn,{changeStateOpenItems:R,index:t,item:e,key:e.shortName,onChange:function(t){return m(e,t)},search:A,showingDetails:r,showingNew:o,showingPrompt:n,updateHeight:M})}(u,r):a.createElement(dr,{group:u,isOpened:vr(u.name,w,t),search:A,onClick:H,hasToolHeading:q})))};return p?a.createElement(Qt,{className:Mt}):u?a.createElement("div",{className:st()(Mt,Ut)},"Unfortunately we couldn\u2019t show checks due to problems on our side. Please report us in"," ",a.createElement(lt.ZP,{href:ut.ZW},"YouTrack")):a.createElement("div",{className:Mt},a.createElement(wt.u,{className:Ut,wrappedComponentName:"checks"},0===n.length&&""!==t&&a.createElement("span",{className:Dt},Lt.BX.list,' "',a.createElement("span",{className:Ht},t),'"'),0!==n.length&&a.createElement(Tt.qj,{disableHeight:!0},(function(e){var t=e.width;return a.createElement(Tt.aV,{ref:I,height:332,onScroll:z,rowCount:v.length,rowHeight:F.rowHeight,rowRenderer:V,scrollToIndex:T,width:t})}))))})),br=n(51626),_r=function(e,t){var n=Object.entries(t).find((function(t){return t[1]===e}));return n?n[0]:void 0},yr={container:"Controls_container__2E7cv",buttonSelect:"Controls_buttonSelect__w7j6h",popup:"Controls_popup__wOOdS",search:"Controls_search__033FK",promptParent:"Controls_promptParent__Jq7Rx",prompt:"Controls_prompt__q42ob"},Cr=a.memo((function(e){var t=e.disabled,n=void 0!==t&&t,r=e.search,o=e.groups,i=e.selectedGroup,l=e.onChangeSearch,s=e.onChangeGroup,u=(0,a.useState)(!1),d=(0,c.Z)(u,2),p=d[0],m=d[1],f=(0,a.useCallback)((function(){return m(!0)}),[]),h=(0,a.useCallback)((function(){return m(!1)}),[]),v=(0,a.useCallback)((function(e){if(e){var t=_r(e.key,gt);t&&s(gt[t])}}),[s]);return a.createElement("section",{className:yr.container,"data-qd-clickable":dt.vf.checkListControls},a.createElement("div",{className:yr.selectContainer,"data-qd-test":kt.b.checksFilter},a.createElement(br.Z,{disabled:n,className:yr.buttonSelect,data:o,minWidth:160,onSelect:v,popupClassName:yr.popup,selected:{label:i,key:i},type:br.Z.Type.BUTTON})),a.createElement(ft.xP,{disabled:n,"aria-label":"search by checks",className:yr.search,htmlProps:{"data-qd-test":kt.b.checksSearch},onBlur:h,onChange:l,onFocus:f,placeholder:Lt.CI.checksSearch,value:r}),""===r&&p&&a.createElement("div",{className:yr.promptParent},a.createElement(Xt.ZP,{className:yr.prompt},a.createElement("span",null,"You may use ",a.createElement("i",null,"tag:")," to search by tags"))))})),Er=function(e,t){var n,r=(0,$.Z)(t);try{for(r.s();!(n=r.n()).done;){var o=n.value;if(o&&o.toLowerCase().includes(e))return!0}}catch(a){r.e(a)}finally{r.f()}return!1},xr=a.memo((function(e){var t=e.isLoading,n=void 0!==t&&t,r=e.isError,o=void 0!==r&&r,i=e.excludedChecks,l=e.group,s=e.includedChecks,u=e.inspections,d=e.onChangeGroup,p=e.onChangeSearch,m=e.search,f=e.showingNew,h=e.toolsArtifactsPath,v=(0,a.useState)(u),g=(0,c.Z)(v,2),b=g[0],_=g[1],y=(0,a.useState)(u),C=(0,c.Z)(y,2),E=C[0],x=C[1],w=(0,a.useMemo)((function(){var e=[],t=[],n=[];return u.forEach((function(r){("Created"===r.status||r.enabled&&"Switched"===r.status)&&n.push(r),r.enabled?t.push(r):e.push(r)})),{onlyDisabled:e,onlyEnabled:t,onlyNew:n}}),[u]),k=w.onlyDisabled,S=w.onlyEnabled,j=w.onlyNew,N=f&&j.length>0?wr:0===k.length?[wr[0]]:[wr[0],wr[2],wr[3]];return(0,a.useEffect)((function(){var e=function(e,t){if(""!==t){var n=t.toLowerCase();return 0===t.indexOf("tag:")?(n=t.slice(4,t.length).trim().toLowerCase(),e.filter((function(e){var t;return null===(t=e.language)||void 0===t?void 0:t.toLowerCase().includes(n)}))):e.filter((function(e){var t,r,o=[e.displayName,e.group,e.shortName,null!==(t=e.description)&&void 0!==t?t:"",null!==(r=e.tool)&&void 0!==r?r:""];return Er(n,o)}))}return e}(E,m);_(e)}),[E,m]),(0,a.useEffect)((function(){var e=[];switch(l){case gt.all:e=u;break;case gt.disabled:e=k;break;case gt.new:e=j;break;case gt.enabled:e=S}_(e),x(e)}),[l,j,S,k,u]),a.createElement("div",{className:Ft},a.createElement(it.sB,{className:Vt},"Applied checks"),a.createElement("div",{className:Wt},a.createElement(Cr,{disabled:n||o,groups:N,onChangeGroup:d,onChangeSearch:p,search:m,selectedGroup:l}),a.createElement("span",{className:zt},b.length," inspection",1===b.length?"":"s","\xa0found")),a.createElement(gr,{excludedChecks:i,includedChecks:s,inspections:b,isLoading:n,isError:o,search:m,showingNew:f,toolsArtifactsPath:h}))})),wr=[{key:gt.all,label:gt.all,rgItemType:Ot.Z.ListProps.Type.CUSTOM,template:a.createElement("span",{"data-qd-test":kt.b.checksFilter},gt.all)},{key:gt.new,label:gt.new,rgItemType:Ot.Z.ListProps.Type.CUSTOM,template:a.createElement("span",{"data-qd-test":kt.b.checksFilter},gt.new)},{key:gt.disabled,label:gt.disabled,rgItemType:Ot.Z.ListProps.Type.CUSTOM,template:a.createElement("span",{"data-qd-test":kt.b.checksFilter},gt.disabled)},{key:gt.enabled,label:gt.enabled,rgItemType:Ot.Z.ListProps.Type.CUSTOM,template:a.createElement("span",{"data-qd-test":kt.b.checksFilter},gt.enabled)}],kr=n(11704),Sr="EditableCode_code__RT9Wg",jr=n(43929),Nr=n.n(jr),Zr=n(98409),Pr=n.n(Zr),Or=["title","titleId"];function Tr(){return Tr=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ir(e,t){var n=e.title,r=e.titleId,o=Lr(e,Or);return a.createElement("svg",Tr({width:10,height:10,viewBox:"0 0 10 10",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":r},o),n?a.createElement("title",{id:r},n):null,nr||(nr=a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M0.974609 0.5H2.02461V8.975H10.4996V10.025H0.974609V0.5ZM8.62464 1.625L7.49964 0.5H10.4996V3.5L9.37464 2.375L4.12464 7.625L3.37464 6.875L8.62464 1.625Z",fill:"currentColor"})))}var Ar,Br=a.forwardRef(Ir),qr=["title","titleId"];function Fr(){return Fr=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Rr(e,t){var n=e.title,r=e.titleId,o=Mr(e,qr);return a.createElement("svg",Fr({width:13,height:11,viewBox:"0 0 11 9",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":r},o),n?a.createElement("title",{id:r},n):null,Ar||(Ar=a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M3.33408 0.932983L4.07733 1.67548L2.75958 2.99248L8.74158 2.98948C9.87633 2.98948 10.7988 3.91198 10.7988 5.04523V6.51748C10.7988 7.65223 9.87633 8.57548 8.74158 8.57548H5.24883V7.52473H8.74158C9.29583 7.52473 9.74883 7.07398 9.74883 6.51748V5.04523C9.74883 4.49098 9.29583 4.03948 8.74158 4.03948L2.76033 4.04248L4.10883 5.39098L3.36633 6.13423L0.750328 3.51823L3.33408 0.932983Z",fill:"currentColor"})))}var Dr,Hr=a.forwardRef(Rr),zr="EditableCodeItem_lineContainer__7LJMB",Vr="EditableCodeItem_lineGutter__0XEQp",Wr="EditableCodeItem_addition__cq7k8",Ur="EditableCodeItem_deletion__kS7pe",Kr="EditableCodeItem_rowNumber__CUca-",Gr="EditableCodeItem_hiddenNumber__SZttH",Qr="EditableCodeItem_buttonGroup__4E3fr",Jr="EditableCodeItem_button__sMWLC",Xr="EditableCodeItem_goToIcon__nIOFX",Yr="EditableCodeItem_trashIcon__78Wa3",$r="EditableCodeItem_line__jVnVd",eo="EditableCodeItem_reset__P1+iW",to="EditableCodeItem_resetIcon__AOypW",no=function(e){var t,n=e.line,r=e.lineNumber,o=e.onGoToClick,i=e.onDelete,l=e.onReset,c=n.addition,s=n.deletion;return a.createElement("div",{"data-qd-test":kt.b.editableCodeLine,className:st()(zr,(t={},(0,bt.Z)(t,Wr,c),(0,bt.Z)(t,Ur,s),t))},a.createElement("div",{className:Vr},a.createElement("div",{className:st()(Kr,(0,bt.Z)({},Gr,n.actionsEnabled))},r),a.createElement("div",{className:Qr},n.actionsEnabled&&a.createElement(a.Fragment,null,a.createElement(tn.zx,{className:Jr,icon:Nr(),iconSize:12,iconClassName:Yr,iconSuppressSizeWarning:!0,onClick:function(e){e.nativeEvent.stopImmediatePropagation(),i&&n.key&&i(n.key)},title:"Delete"}),"check"===n.type&&a.createElement(tn.zx,{className:Jr,iconClassName:Xr,icon:Br,onClick:function(e){e.nativeEvent.stopImmediatePropagation(),o&&n.key&&o(n.key)},title:"Go to inspection"})))),a.createElement("pre",{className:$r},n.content),(s||c)&&a.createElement("span",{className:eo,"data-qd-test":kt.b.editableCodeReset},a.createElement("span",null,c?"Added":"Removed"),a.createElement(tn.zx,{onClick:function(e){e.nativeEvent.stopImmediatePropagation(),l&&n.key&&l(n.key,n.type)},className:Jr,icon:c?Pr():Hr,iconClassName:to,iconSize:12,title:c?"Remove":"Restore"})))},ro=function(e){var t=e.htmlProps,n=e.lines,r=e.onGoToClick,o=e.onDelete,i=e.onReset;return a.createElement("div",(0,Jt.Z)({className:Sr},t),n.map((function(e,t){return a.createElement(no,{key:t,line:e,lineNumber:t+1,onGoToClick:r,onDelete:o,onReset:i})})))},oo="Profile_download__N6aQj",ao="Profile_prompt__l4Ejl",io="Profile_bold__IXAJn",lo="Profile_hint__MF9uN",co="Profile_error__7MQ47",so=function(e){var t=e.isShowingWarningAboutChanges,n=void 0!==t&&t,r=e.onGoToClick,o=e.onDelete,i=e.onReset,l=e.onResetAll,s=e.lines,u=e.linesWithDiff,d=(0,a.useState)("diff"),p="source"===(0,c.Z)(d,1)[0]?s:u;return a.createElement(a.Fragment,null,a.createElement(it.sB,null,"Profile configuration"),a.createElement(wt.u,{className:co,wrappedComponentName:"qodana.yaml"},a.createElement("p",{className:oo},a.createElement(kr.n,{"data-qd-clickable":dt.vf.profileDownloadBtn,variant:"primary"}),n&&a.createElement(a.Fragment,null,a.createElement(ft.zx,{"data-qd-test":kt.b.profileReset,"data-qd-clickable":dt.vf.profileResetBtn,onClick:l,variant:"clear"},"Reset all changes"),a.createElement("span",{className:ao},"To apply the changes, download",a.createElement("span",{className:io},"qodana.yaml"),", put it to the root folder of you project and restart Qodana. You also may reset the changes."))),a.createElement(ro,{htmlProps:uo,lines:p,onGoToClick:r,onDelete:o,onReset:i}),a.createElement("span",{className:lo},"Hover over an inspection or excluded item to see more options.")))},uo={"data-qd-clickable":dt.vf.profileEditableCode,"data-qd-test":kt.b.profileEditableCode},po="ProfileSettings_gapRowBig__7+sXa",mo="ProfileSettings_gapColumnBig__oW-94",fo="ProfileSettings_checksContainer__wQiXv",ho="ProfileSettings_profileContainer__3XY-y",vo=function(e){var t=e.excludedChecks,n=e.group,r=e.includedChecks,o=e.inspections,i=e.isErrorChecks,l=e.isLoadingChecks,c=e.isShowingWarningAboutChanges,s=e.lines,u=e.linesWithDiff,d=e.onChangeGroup,p=e.onGoToClick,m=e.onDelete,f=e.onResetAll,h=e.onResetProfileLine,v=e.profileRef,g=e.search,b=e.setSearch,_=e.showingNew;return a.createElement("article",null,a.createElement("div",{className:st()("row",po)},a.createElement("section",{className:st()("col-sm-12 col-md-9",mo,fo)},a.createElement(xr,{excludedChecks:t,group:n,includedChecks:r,inspections:o,isError:i,isLoading:l,onChangeGroup:d,onChangeSearch:b,search:g,showingNew:_}))),a.createElement("section",{ref:v,className:st()("row",po)},a.createElement("div",{className:st()("col-sm-12 col-md-9",mo,ho)},a.createElement(so,{isShowingWarningAboutChanges:c,lines:s,linesWithDiff:u,onGoToClick:p,onDelete:m,onReset:h,onResetAll:f}))))},go=a.memo(vo),bo=(0,j.$j)((0,_t.t)((function(e){return{exclusionFilters:(0,St.q)(e),inspections:(0,A.DP)(e.inspections),markers:e.marker.options,changedContent:e.profile.changedContent,fileExcludedChecks:(0,jt.oB)(e),fileIncludedChecks:(0,jt.fC)(e),isErrorChecks:e.inspections.failed,isLoadingChecks:(0,A.tq)(e.inspections),isShowingWarningAboutChanges:(0,jt.BL)(e),lines:(0,jt.C_)(e),linesWithDiff:(0,jt.$t)(e)}})),(function(e){return{updateChangedContent:function(t,n){return e((0,Pe.R)(t,n))},updateMarkers:function(t,n){return e((0,ge.IO)(t,n,!1))}}}))((function(e){var t=e.changedContent,n=e.exclusionFilters,o=e.fileExcludedChecks,i=e.fileIncludedChecks,l=e.inspections,s=e.isErrorChecks,u=e.isLoadingChecks,d=e.isShowingWarningAboutChanges,p=e.lines,m=e.linesWithDiff,f=e.markers,h=e.profileRef,g=e.showingNew,b=e.updateChangedContent,_=e.updateMarkers,y=(0,T.CG)(v.L7),C=(0,Nt.G)(),E=(0,a.useState)(gt.all),x=(0,c.Z)(E,2),w=x[0],k=x[1],S=(0,a.useState)(""),j=(0,c.Z)(S,2),N=j[0],Z=j[1],P=(0,a.useCallback)((function(e){k(gt.all),Z(e)}),[]),O=(0,a.useCallback)((function(e){_&&e&&_(y,e)}),[y,_]);return a.createElement(go,{excludedChecks:t.excludedChecks,group:w,includedChecks:t.includedChecks,inspections:l,isErrorChecks:s,isLoadingChecks:u,isShowingWarningAboutChanges:d,lines:p,linesWithDiff:m,onChangeGroup:k,onGoToClick:P,onDelete:function(e){i.includes(e)?b(y,(0,r.Z)((0,r.Z)({},t),{},{includedChecks:[].concat((0,Y.Z)(t.includedChecks),[e])})):o.includes(e)?b(y,(0,r.Z)((0,r.Z)({},t),{},{excludedChecks:[].concat((0,Y.Z)(t.excludedChecks),[e])})):b(y,(0,r.Z)((0,r.Z)({},t),{},{paths:[].concat((0,Y.Z)(t.paths),[e])}))},onResetAll:function(){var e=f&&(0,r.Z)((0,r.Z)({},f.user),{},{excluded:[]});O(e),b(y,(0,r.Z)((0,r.Z)({},t),{},{excludedChecks:[],includedChecks:[],paths:[]})),C([],It.W.resetMultiple)},onResetProfileLine:function(e,o){if("path"===o){var a=t.paths.filter((function(t){return t!==e}));b(y,(0,r.Z)((0,r.Z)({},t),{},{paths:a}));var i=function(e,t){var n=t?(0,r.Z)({},t):Zt;return Object.keys(n).forEach((function(t){var r=t;n[r]=n[r].filter((function(t){return t!==e}))})),n}(e,null===f||void 0===f?void 0:f.user),c=n.filter((function(e){return"path"!==e.category}));c.push({category:"path",name:a}),C(c,It.W.path),O(i)}if("check"===o){var s=t.includedChecks.filter((function(t){return t!==e})),u=t.excludedChecks.filter((function(t){return t!==e}));b(y,(0,r.Z)((0,r.Z)({},t),{},{includedChecks:s,excludedChecks:u}));var d=Pt(u,l);C(d,It.W.type)}},profileRef:h,search:N,setSearch:Z,showingNew:g})})),_o=bo,yo=function(e){var t=e.profileRef,n=e.showingNew;return a.createElement("section",{"data-qd-test":kt.b.summaryChecks},a.createElement(_o,{profileRef:t,showingNew:n}))},Co=n(82996),Eo=n(94144),xo=n(50627),wo=n(65837),ko=["title","titleId"];function So(){return So=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function No(e,t){var n=e.title,r=e.titleId,o=jo(e,ko);return a.createElement("svg",So({width:14,height:14,viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":r},o),n?a.createElement("title",{id:r},n):null,Dr||(Dr=a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M0.904289 12.2226C0.865237 12.2617 0.865237 12.325 0.904289 12.364L1.63916 13.0989C1.67821 13.138 1.74153 13.138 1.78058 13.0989L7.00207 7.87743L12.2236 13.099C12.2626 13.138 12.326 13.138 12.365 13.099L13.0999 12.3641C13.1389 12.325 13.1389 12.2617 13.0999 12.2227L7.87837 7.00114L13.0996 1.77985C13.1387 1.7408 13.1387 1.67748 13.0996 1.63843L12.3648 0.903557C12.3257 0.864504 12.2624 0.864504 12.2234 0.903557L7.00207 6.12484L1.78082 0.903588C1.74177 0.864535 1.67845 0.864535 1.6394 0.903588L0.904525 1.63846C0.865473 1.67751 0.865473 1.74083 0.904525 1.77988L6.12578 7.00114L0.904289 12.2226Z",fill:"currentColor"})))}var Zo=a.forwardRef(No),Po=n(58051),Oo=n.n(Po),To={wrapper:"Notification_wrapper__6OJlL",container:"Notification_container__otjAn",critical:"Notification_critical__ZIhFd",moderate:"Notification_moderate__M9zfw",info:"Notification_info__AJ8wz",success:"Notification_success__s-WdA",header:"Notification_header__-w+jp",isCollapsed:"Notification_isCollapsed__EMsQa",leftContent:"Notification_leftContent__a1m88",rightContent:"Notification_rightContent__ZAYzL",controlsSpaceBetween:"Notification_controlsSpaceBetween__8XEPP",controlsCenter:"Notification_controlsCenter__GJ5vg",closeButton:"Notification_closeButton__8kNHL",iconButton:"Notification_iconButton__CkmaL",chevronButton:"Notification_chevronButton__cmCup"},Lo=function(e){var t=e.buttonText,n=e.buttonTemplate,r=e.className,o=e.textTemplate,i=e.type,l=e.title,s=e.onClose,u=e.onButtonClick,d=e.children,p=e.collapsible,m=void 0!==p&&p,f=e.onCollapseChange,h=e.isCollapsed,v=void 0!==h&&h,g=(0,a.useState)(v),b=(0,c.Z)(g,2),_=b[0],y=b[1];return a.createElement("div",{className:st()(To.wrapper,r,To[i]),"data-qd-test":e["data-qd-test"]},d||a.createElement("div",{className:st()(To.container,it.wu.text)},a.createElement("div",{className:To.leftContent},a.createElement("header",{className:st()(To.header,(0,bt.Z)({},To.isCollapsed,_))},l),!_&&a.createElement("div",{className:To.text},o)),a.createElement("div",{className:st()(To.rightContent,s||m?To.controlsSpaceBetween:To.controlsCenter)},s&&!m&&a.createElement(tn.ZP,{className:st()(To.closeButton,To.iconButton),onClick:s,icon:Zo}),m&&a.createElement(tn.ZP,{className:st()(To.chevronButton,To.iconButton,(0,bt.Z)({},To.isCollapsed,_)),onClick:function(){f&&f(!_),y((function(e){return!e}))},icon:Oo()}),n&&!t&&a.createElement("div",null,n),!!t&&a.createElement(ft.zx,{size:"S",onClick:u},t))))},Io=function(e){var t=e.onClose,n=(0,j.I0)(),r=(0,T.CG)(v.L7);return a.createElement(Lo,{type:"info",textTemplate:Lt._l.promo,title:"Wait! There\u2019s more!",buttonTemplate:a.createElement(ft.zx,{onClick:function(){return n(Be(r,!0))},size:"S",variant:"primary"},"Explore problems"),onClose:t})},Ao=n(62473),Bo=n.n(Ao),qo=n(33543),Fo="SanityProblemsNotification_actionButtons__nNvcO",Mo=function(e){var t=e.onClose,n=(0,T.CB)(wo.b).length,r=(0,qo.n)(),o=(0,c.Z)(r,2)[1],i=a.createElement("span",null,"Qodana detected\xa0",a.createElement(it.KI,{semibold:!0},n," ",Bo()("problem",n)),"\xa0showing that analysis could be incorrect. This is how you can handle such problems:",a.createElement("ul",null,a.createElement("li",null,"Make sure that you installed and configured all required dependencies, and the source code was generated properly. If needed, reconfigure the project and run Qodana again."),a.createElement("li",null,"In case the detected problems are not suspicious, please check the docs to come up with the next steps. Otherwise, just ignore them."),a.createElement("li",null,"If the detected problems are suspicious, please report them to us using YouTrack.")),a.createElement("div",{className:Fo},a.createElement(ft.zx,{variant:"primary",size:"S",onClick:function(){return o(!0)}},"Explore problems")));return a.createElement(Lo,{title:"We\u2019ve faced unexpected problems",type:"critical",textTemplate:i,onClose:t})},Ro=n(23742),Do="ConfigChangedNotification_codeContainer__kvLDB",Ho="ConfigChangedNotification_code__qfRLz",zo="--baseline ",Vo=(0,_t.t)((function(e){return{baselineDiff:(0,yt.kV)(e)}})),Wo=(0,j.$j)(Vo)((function(e){var t=e.baselineDiff,n=t.addedProblems,r=t.removedProblems,o=(0,a.useState)(),i=(0,c.Z)(o,2),l=i[0],s=i[1],u=(0,a.useState)(!1),d=(0,c.Z)(u,2),p=d[0],m=d[1];if(n+r===0)return null;var f=[];n>0&&f.push("added ".concat(n," ").concat(Bo()("problems",n))),r>0&&f.push("removed ".concat(r," ").concat(Bo()("problems",r))),f=f.flatMap((function(e,t,n){return t>0&&t0&&t===n.length-1?[", and ",e]:[e]}));var h="Baseline changed: ".concat(f.join(""));return a.createElement(Lo,{"data-qd-test":kt.b.baselineChangedNotification,type:"moderate",title:h,textTemplate:a.createElement(a.Fragment,null,l||a.createElement(a.Fragment,null,"To apply the changes, download the file, put it to your project root folder, and run Qodana using the following parameter:"," ",a.createElement("div",{className:Do},a.createElement("code",{className:st()(it.wu.monoText,Ho)},zo),a.createElement(Sn,{text:zo,isTextCopied:p,onClick:m})))),buttonTemplate:a.createElement(Ro.Z,{size:"S",onError:s,label:"Download \u2018sarif\u2019 report with baseline"})})})),Uo="ProfileChangedNotification_detailsButton__lkDOW",Ko="ProfileChangedNotification_downloadButton__JtIqm",Go=function(e){var t=e.onDetailsClick,n=(0,T.TL)(),r=(0,T.CG)(v.L7),o=(0,T.CB)(jt.BL),i=(0,T.CB)(xo.WA),l=(0,T.CB)(F);(0,a.useEffect)((function(){var e=(0,y.fp)("".concat(h.mp.profileChangedNotificationClosed).concat((0,y.n$)(r)));l||null==e||n((0,Co.iV)(r,e))}),[n,r,i,l,o]);if(!o||i)return null;var c=a.createElement(a.Fragment,null,a.createElement("div",null,"You have new changes in qodana.yaml. To apply them manually download the file, put it to the root folder of your project, and restart Qodana.\xa0",a.createElement(tn.zx,{className:Uo,"data-qd-clickable":dt.vf.profileSettingsDetailsBtn,onClick:t,text:!0},"Details")),a.createElement(kr.n,{className:Ko,size:"S"}));return a.createElement(Lo,{type:"moderate",title:"Configuration changed",textTemplate:c,onClose:function(){(0,y.m8)("".concat(h.mp.profileChangedNotificationClosed).concat((0,y.n$)(r)),!0),n((0,Co.iV)(r,!0))}})},Qo=n(86827),Jo=(0,j.$j)((0,_t.t)((function(e){return{promoProblems:Eo.U.selectInitialProblems(e),showSanityProblemsNotification:(0,wo.z)(e),isSanityProblemsNotificationClosed:(0,xo.ty)(e),isLoadingStageOne:q(e)}})),{setSanityProblemsNotificationClosed:Co.Uc})((function(e){var t=e.selectedTab,n=e.goToChecks,r=e.promoProblems,o=e.showSanityProblemsNotification,i=e.isSanityProblemsNotificationClosed,l=e.isLoadingStageOne,s=e.setSanityProblemsNotificationClosed,u=t===Qo.BA.problems,d=(0,a.useState)(0!==r.length&&u),p=(0,c.Z)(d,2),m=p[0],f=p[1],g=u&&!1===i&&o,b=(0,T.CG)(v.L7);(0,a.useEffect)((function(){var e=(0,y.fp)("".concat(h.mp.sanityProblemsNotificationClosed).concat((0,y.n$)(b)))||!1;l||s(b,e)}),[b,i,l,s]);return a.createElement(a.Fragment,null,a.createElement(Wo,null),a.createElement(Go,{onDetailsClick:n}),g&&a.createElement(Mo,{onClose:function(){(0,y.m8)("".concat(h.mp.sanityProblemsNotificationClosed).concat((0,y.n$)(b)),!0),s(b,!0)}}),m&&!g&&a.createElement(Io,{onClose:function(){f(!1)}}))})),Xo=n(90927),Yo=n(64617),$o=n(72511),ea=n(4099),ta=n(80155),na=n(95722),ra=n(68121),oa=Qo.BA.checks,aa=function(e){var t=e.isLoading,n=e.increment,r=e.decrement,o=e.checks,i=(0,Qo.gC)(),l=i.onSelect,s=i.activeURL,u=i.compareBuilds,d=(0,ea.H)(oa,l),p=d.onPressKeyHandler,m=d.selectTabHandler,f=(0,Xo.k)(),h=(0,c.Z)(f,2),v=h[0],g=h[1],b=(0,Ze.hD)("".concat(e.categories),3),_="In ".concat(b," ").concat(Bo()("category",e.categories));return a.createElement("button",{onClick:m,onKeyPress:p,className:st()(na.Z.wrapper,na.Z.ordinaryTabWidth,(0,bt.Z)({},na.Z.active,s===oa)),"data-qd-clickable":dt.vf.tabChecks,"data-qd-test":kt.b.summaryChecks},a.createElement("div",{className:na.Z.container,"data-qd-onboarding":u?Yo.D.summaryChecksWithComparison:Yo.D.summaryChecksNoComparison},a.createElement(ra.J,null,"Checks"),a.createElement("div",{className:na.Z.statistics},a.createElement(ta.A,{compareMode:u,comparativeIncrement:n,comparativeDecrement:r,total:o,moreIsBetter:!0,isLoading:t}),e.warningText&&a.createElement(un.Z,{title:e.warningText,popupProps:{className:na.Z.tooltip},className:na.Z.alertIconAlign},a.createElement($o.z,{className:na.Z.alertColor}))),t?a.createElement(Kt.O,{className:na.Z.skeleton,width:160,height:17}):u?a.createElement(un.Z,{title:g?"Total checks: ".concat(o):""},a.createElement(it.xv,{ref:v,className:st()(na.Z.title,na.Z.secondaryTextColor)},"Total checks: ",o)):a.createElement(un.Z,{popupProps:{className:na.Z.tooltip},title:g?_:""},a.createElement(it.KI,{ref:v,className:st()(na.Z.title,na.Z.secondaryTextColor)},_))))},ia=(0,j.$j)((0,_t.t)((function(e){return{diff:(0,A.gv)(e.inspections),enabledInspections:(0,A.EP)(e.inspections),isLoading:(0,A.tq)(e.inspections),showWarning:(0,jt.BL)(e),profileChangedNotificationClosed:(0,xo.WA)(e)}})))((function(e){var t=e.diff,n=e.enabledInspections,r=e.isLoading,o=e.showWarning,i=e.profileChangedNotificationClosed,l=new Set;n.map((function(e){return l.add(e.group)}));var c=l.size,s=o&&i?Lt.OU:void 0;return a.createElement(aa,{increment:t.increment,decrement:t.decrement,isLoading:r,categories:c,checks:n.length,warningText:s})}));ia.displayName="ConnectedChecksTabWrapper";var la=ia,ca=n(50220),sa=(0,j.$j)((0,_t.t)((function(e){return{added:yt.vV.selectNewProblemsCount(e),compareBuilds:e.info.showingNew,count:yt.vV.selectAppliedExclusionProblems(e).length,fixed:yt.vV.selectFixedProblemsCount(e),isLoading:!e.info.processed,sanityProblemNotificationClosed:e.notifications.sanityProblemsNotificationClosed,sanityProblemsNotificationShow:(0,wo.z)(e)}})))((function(e){var t=e.added,n=e.compareBuilds,r=e.count,o=e.isLoading,i=e.fixed,l=e.sanityProblemsNotificationShow,c=e.sanityProblemNotificationClosed,s=n?Yo.D.summaryProblemsWithComparison:Yo.D.summaryProblemsNoComparison,u=l&&!!c;return a.createElement(ca.X,{added:t,fixed:i,isLoading:o,title:n?"New problems":"Actual problems",total:r,url:Qo.BA.problems,showAttention:u,"data-qd-clickable":dt.vf.tabProblems,"data-qd-onboarding":s,statisticsTestAnchor:kt.b.summaryProblems})}));sa.displayName="ConnectedProblemsTabWrapper";var ua,da,pa=sa;!function(e){e.dependencies="Libraries/Packages",e.main="Project license",e.rules="License rules",e.modules="Modules",e.translators="Translators",e.languages="Languages"}(ua||(ua={})),function(e){e.prohibited="Prohibited",e.uncategorized="Uncategorized",e.unknown="Unknown",e.none="None"}(da||(da={}));var ma=new Set(Object.values(da)),fa=function(e){var t=e.tags;return(void 0===t?[]:t).some((function(e){return ma.has(e.type)}))},ha="ProjectAuditTab_checkStatus__UAjk7",va=Qo.BA.projectAudit,ga=(0,it.Ym)("h3",(function(){return st()(ha,it.wu.heading2)})),ba=function(e){var t=e.isLoading,n=void 0!==t&&t,r=e.suspiciousLicensesCount,o=(0,Qo.gC)(),i=o.onSelect,l=o.activeURL,s=(0,ea.H)(va,i),u=s.onPressKeyHandler,d=s.selectTabHandler,p=(0,Xo.k)(),m=(0,c.Z)(p,2),f=m[0],h=m[1],v=(0,Ze.hD)("".concat(r),3),g=function(){return 1===r?"".concat(v," suspicious license"):r?"".concat(v," suspicious licenses"):"No suspicious licenses"};return a.createElement("button",{onClick:d,onKeyPress:u,className:st()(na.Z.wrapper,na.Z.ordinaryTabWidth,(0,bt.Z)({},na.Z.active,l===va)),"data-qd-clickable":dt.vf.tabProjectAudit,"data-qd-test":kt.b.summaryProjectAudit},a.createElement("div",{className:na.Z.container,"data-qd-onboarding":Yo.D.summaryProjectAudit},a.createElement(ra.J,null,"Project audit"),a.createElement("div",{className:na.Z.statistics},n?a.createElement(Kt.O,{className:na.Z.titleSkeleton,width:70,height:19}):void 0===r?a.createElement(it.xv,{className:na.Z.secondaryTextColor},"Use license audit to check license compatibility"):r>0?a.createElement(ga,{className:na.Z.projectAuditAlertColor},"Not passed"):a.createElement(ga,{className:na.Z.positiveColor},"Passed")),n?a.createElement(Kt.O,{width:160,height:17}):void 0!==r&&a.createElement(un.Z,{popupProps:{className:na.Z.tooltip},title:h?g():""},a.createElement(it.KI,{ref:f,className:st()(na.Z.title,na.Z.secondaryTextColor)},g()))))},_a=(0,j.$j)((0,_t.t)((function(e){return{isLoading:!e.projectAudit.processed,licenses:e.projectAudit.licenses}})))((function(e){var t,n=e.isLoading,r=e.licenses;if(r){t=0;var o,i=(0,$.Z)(r.dependencies);try{for(i.s();!(o=i.n()).done;){t+=o.value.licenses.filter(fa).length}}catch(l){i.e(l)}finally{i.f()}t+=r.licenses.filter(fa).length}return a.createElement(ba,{isLoading:n,suspiciousLicensesCount:t})}));_a.displayName="ConnectedProjectAuditTabsWrapper";var ya=_a,Ca=(0,j.$j)((0,_t.t)((function(e){return{compareBuilds:e.info.showingNew,count:yt.oJ.selectAppliedExclusionProblemsCount(e),diff:(0,yt.kV)(e),isLoading:!e.info.processed,newProblems:yt.oJ.selectNewProblemsCount(e)}})))((function(e){var t=e.compareBuilds,n=e.count,r=e.diff,o=e.isLoading,i=e.newProblems,c=(0,a.useContext)(u.bC),s=t?Yo.D.summaryBaselineTabWithComparison:Yo.D.summaryBaselineTabNoComparison;return a.createElement(ca.X,{added:i,fixed:c===l.nn.Alpha?r.fixedProblems:void 0,isLoading:o,chartClassName:na.Z.baselineChart,title:"Baseline","data-qd-clickable":dt.vf.tabBaseline,"data-qd-onboarding":s,total:n,url:Qo.BA.baseline,statisticsTestAnchor:kt.b.summaryBaseline,warningText:r.addedProblems+r.removedProblems>0?Lt.g4:void 0})}));Ca.displayName="ConnectedBaselineTabWrapper";var Ea,xa=Ca,wa="MainContent_controlBar__a8Dmx",ka="MainContent_reportBar__lAWEi",Sa="MainContent_warningsContainer__dmFbO",ja=n(43990),Na=n(26602),Za=function(e,t){var n,r=(0,$.Z)(t.sources);try{for(r.s();!(n=r.n()).done;){var o=n.value;if(-1!=="".concat(o.path,"/").concat(o.file).toLowerCase().indexOf(e.toLowerCase()))return!0}}catch(a){r.e(a)}finally{r.f()}return!1},Pa=n(83491),Oa="BandAboveList_container__I1Qm1",Ta="BandAboveList_selectLabel__KGXcv",La="BandAboveList_searchInput__MyDM8",Ia="BandAboveList_searchInputTC__6JCOs",Aa="BandAboveList_hint__b0fb8",Ba=function(e){return e.length?e[0].toUpperCase()+e.slice(1):""},qa=n(34858),Fa=n(90852),Ma="TabsTC_tabs__rkQQD",Ra="TabsTC_count__MjhWu",Da=function(e){var t=e.disabled,n=void 0!==t&&t,r=e.onSelectTab,o=e.selected,i=e.options;return a.createElement(Fa.mQ,{className:Ma,selected:o,onSelect:function(e){var t=_r(e,l.yA);t&&r(l.yA[t])}},i.map((function(e){return a.createElement(Fa.OK,(0,Jt.Z)({disabled:n,id:e.id,key:e.id,title:a.createElement("span",{"data-qd-test":e.title===Lt.dT.files?kt.b.tabFiles:kt.b.tabProblems},e.title,!n&&a.createElement("span",{"data-qd-test":kt.b.tabCount,className:Ra},e.count))},e.htmlProps))})))},Ha=function(e){var t=e.filesAvailable,n=void 0===t||t,r=e.filesCount,o=void 0===r?0:r,i=e.isTeamCity,l=e.loading,s=e.onChangeTab,u=e.problemsAvailable,d=void 0===u||u,p=e.problemsCount,m=void 0===p?0:p,f=e.tab,h=(0,a.useState)(e.tab),v=(0,c.Z)(h,2),g=v[0],b=v[1],_=function(e){b(e),s(e)};(0,a.useEffect)((function(){return b(f)}),[f]);var y=[];return d&&y.push({count:m,htmlProps:{"data-qd-clickable":dt.vf.listTabProblems,"data-qd-test":kt.b.tabProblems},id:"problems",title:Lt.dT.problems}),n&&y.push({count:o,htmlProps:{"data-qd-clickable":dt.vf.listTabFiles,"data-qd-test":kt.b.tabFiles},id:"files",title:Lt.dT.files}),i?a.createElement(Da,{disabled:l,onSelectTab:_,options:y,selected:g}):a.createElement(qa.m,{disabled:l,onSelectTab:_,options:y,selected:g})},za=["title","titleId"];function Va(){return Va=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ua(e,t){var n=e.title,r=e.titleId,o=Wa(e,za);return a.createElement("svg",Va({viewBox:"0 0 10 11",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":r},o),n?a.createElement("title",{id:r},n):null,Ea||(Ea=a.createElement("path",{d:"M4.50781 7H5.49219V8.00781H4.50781V7ZM4.50781 2.99219H5.49219V5.99219H4.50781V2.99219ZM5 0.507812C4.09375 0.507812 3.25781 0.734375 2.49219 1.1875C1.72656 1.625 1.11719 2.22656 0.664062 2.99219C0.226562 3.75781 0.0078125 4.59375 0.0078125 5.5C0.0078125 6.15625 0.132812 6.79688 0.382812 7.42188C0.632812 8.03125 0.992188 8.57031 1.46094 9.03906C1.92969 9.50781 2.46875 9.86719 3.07812 10.1172C3.70312 10.3672 4.34375 10.4922 5 10.4922C5.65625 10.4922 6.28906 10.3672 6.89844 10.1172C7.52344 9.86719 8.07031 9.50781 8.53906 9.03906C9.00781 8.57031 9.36719 8.03125 9.61719 7.42188C9.86719 6.79688 9.99219 6.15625 9.99219 5.5C9.99219 4.84375 9.86719 4.21094 9.61719 3.60156C9.36719 2.97656 9.00781 2.42969 8.53906 1.96094C8.07031 1.49219 7.52344 1.13281 6.89844 0.882812C6.28906 0.632812 5.65625 0.507812 5 0.507812ZM5 9.50781C4.28125 9.50781 3.60938 9.32812 2.98438 8.96875C2.375 8.60938 1.89062 8.125 1.53125 7.51562C1.17188 6.89062 0.992188 6.21875 0.992188 5.5C0.992188 4.96875 1.09375 4.46094 1.29688 3.97656C1.5 3.47656 1.78906 3.03906 2.16406 2.66406C2.53906 2.28906 2.96875 2 3.45312 1.79688C3.95312 1.59375 4.46875 1.49219 5 1.49219C5.53125 1.49219 6.03906 1.59375 6.52344 1.79688C7.02344 2 7.46094 2.28906 7.83594 2.66406C8.21094 3.03906 8.5 3.47656 8.70312 3.97656C8.90625 4.46094 9.00781 4.96875 9.00781 5.5C9.00781 6.21875 8.82812 6.89062 8.46875 7.51562C8.10938 8.125 7.61719 8.60938 6.99219 8.96875C6.38281 9.32812 5.71875 9.50781 5 9.50781Z",fill:"#F34463"})))}var Ka,Ga,Qa,Ja=a.forwardRef(Ua),Xa="PromoWarning_container__TAlss",Ya="PromoWarning_icon__r-Rxq",$a="PromoWarning_text__v8YQr",ei=function(){return a.createElement("div",{className:Xa},a.createElement(Ja,{className:Ya}),a.createElement("span",{className:$a},"To apply the changes download qodana.yaml, put it to the root folder of you project and restart Qodana."),a.createElement(kr.n,null))},ti=function(e){var t,n=e.checkedProblemsCount,r=e.filesCount,o=e.groupBy,i=e.isTeamCity,l=e.isBaseline,c=void 0!==l&&l,s=e.loading,u=e.onChangeGroupBy,d=e.onChangeSearch,p=e.onChangeTab,m=e.onClickApply,f=e.problemsCount,h=e.search,v=e.showingGroupSelect,g=e.showingPromoWarning,b=e.showingPromoControls,_=e.showingBaselinesControls,y=e.tab,C=n>0&&"".concat(n," problem").concat(1!==n?"s":""," selected"),E=null!==(t=ni.find((function(e){return e.key===o})))&&void 0!==t?t:ni[1],x=(0,a.useCallback)((function(e){u(e[0].toLowerCase()+e.slice(1))}),[u]);return a.createElement(a.Fragment,null,a.createElement("div",{"data-qd-test":kt.b.bandAboveList,className:Oa},a.createElement(Ha,{filesAvailable:!b,filesCount:r,isTeamCity:i,loading:s,onChangeTab:p,problemsCount:f,tab:y}),a.createElement(ft.xP,{"aria-label":"search by issues",className:"".concat(La," ").concat(i?Ia:""),disabled:s,htmlProps:{"data-qd-clickable":dt.vf.listSearch,"data-qd-test":kt.b.listSearch},onChange:d,value:h}),v&&a.createElement("div",{"data-qd-test":kt.b.groupByContainer},a.createElement(Pa.P,{classNames:{label:Ta},selectName:"group by",disabled:s,options:ni,onSelect:x,selected:E.key})),_&&a.createElement("span",null,C&&a.createElement("span",{className:Aa,"data-qd-test":kt.b.selectedProblemsHint},C),a.createElement(ft.zx,{variant:"primary",onClick:m,"data-qd-test":kt.b.toggleBaselineProblemsButton,disabled:0===n},c?"Remove from baseline":"Move to baseline"))),g&&a.createElement(ei,null))},ni=[{key:"severity"},{key:l.nf.file},{key:l.nf.path},{key:"category"},{key:"type"},{key:"comment",label:"Problem name"}].map((function(e){var t=e.key,n=e.label;return{disabled:!1,key:t,label:n||Ba(t),template:a.createElement("span",{"data-qd-test":kt.b.groupByOption},n||Ba(t))}})),ri=n(96240),oi="Header_row__z-Jzm",ai="Header_title__YHFDe",ii="Header_col__9DOFv",li=a.memo((function(e){var t=e.listType,n=e.secondCol,r=e.showingOnlyTitle,o=e.thirdColumn,i=t===l.yA.problems?kt.b.problemListTableHeader:kt.b.fileListTableHeader;return a.createElement("div",{"data-qd-test":i},a.createElement(ri.X2,{className:st()(it.wu.text,oi)},a.createElement(ri.JX,{xs:!0,className:"".concat(ai," ").concat(ii)},e.children),!r&&n&&a.createElement(ri.JX,{className:ii,xs:3},n),!r&&o&&a.createElement(ri.JX,{className:ii,xs:2},o)))})),ci="ListBox_container__Sdsna",si="ListBox_hint__WFaSJ",ui=function(e){var t=e.hint,n=e.listType,r=e.title;return a.createElement("section",{style:e.style,className:ci},a.createElement(li,{listType:n,secondCol:e.secondCol,showingOnlyTitle:e.showingOnlyTitle,thirdColumn:e.thirdColumn},r),t&&a.createElement("div",{className:si},t),e.children)},di=n(75446),pi=n(96826),mi="Hint_container__yilXM",fi="Hint_icon__R1zdu",hi="Hint_islandContainer__vOEeD",vi="Hint_island__XNBqM",gi="Hint_title__HehiC",bi=function(e){var t=e.note;return a.createElement("div",{className:mi},a.createElement(pi.Z,{className:fi}),a.createElement("div",{className:hi},a.createElement(Xt.ZP,{className:vi},a.createElement("span",null,a.createElement("span",{className:gi},"Note:")," ",t))))},_i=n(68062),yi=["title","titleId"];function Ci(){return Ci=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function xi(e,t){var n=e.title,r=e.titleId,o=Ei(e,yi);return a.createElement("svg",Ci({width:32,height:11,viewBox:"0 0 32 11",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":r},o),n?a.createElement("title",{id:r},n):null,Ka||(Ka=a.createElement("path",{d:"M12.9102 6.41016V5.58984H17.9102L15.625 3.28516L16.2109 2.69922L19.5117 6L16.2109 9.30078L15.625 8.71484L17.9102 6.41016H12.9102Z",fill:"#6F7881"})),Ga||(Ga=a.createElement("path",{d:"M2.89453 9.1748C3.41504 9.1748 3.85091 9.014 4.20215 8.69238C4.55762 8.36654 4.73535 7.96663 4.73535 7.49268V6.95312L2.9707 7.06104C2.52637 7.09066 2.18148 7.19857 1.93604 7.38477C1.69482 7.57096 1.57422 7.82064 1.57422 8.13379C1.57422 8.44694 1.69482 8.69873 1.93604 8.88916C2.17725 9.07959 2.49674 9.1748 2.89453 9.1748ZM2.64697 10.1143C1.99105 10.1143 1.45996 9.93229 1.05371 9.56836C0.651693 9.20443 0.450684 8.72624 0.450684 8.13379C0.450684 7.56673 0.65804 7.11393 1.07275 6.77539C1.4917 6.43685 2.08203 6.24642 2.84375 6.2041L4.73535 6.09619V5.54395C4.73535 5.14193 4.6084 4.82666 4.35449 4.59814C4.10059 4.36963 3.74512 4.25537 3.28809 4.25537C2.86914 4.25537 2.52848 4.34847 2.26611 4.53467C2.00374 4.71663 1.83659 4.97266 1.76465 5.30273H0.698242C0.736328 4.71452 0.990234 4.2321 1.45996 3.85547C1.93392 3.47461 2.55176 3.28418 3.31348 3.28418C4.08789 3.28418 4.7015 3.47884 5.1543 3.86816C5.61133 4.25749 5.83984 4.78011 5.83984 5.43604V10H4.79248V8.86377H4.76709C4.5682 9.2404 4.2762 9.54297 3.89111 9.77148C3.50602 10 3.09131 10.1143 2.64697 10.1143Z",fill:"#1F2326"})),Qa||(Qa=a.createElement("path",{d:"M25.5776 10V9.21289L29.2339 4.3252V4.30615H25.584V3.39844H30.4844V4.20459L26.8535 9.07324V9.09229H30.5034V10H25.5776Z",fill:"#1F2326"})))}var wi,ki,Si,ji=a.forwardRef(xi),Ni=["title","titleId"];function Zi(){return Zi=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Oi(e,t){var n=e.title,r=e.titleId,o=Pi(e,Ni);return a.createElement("svg",Zi({width:33,height:11,viewBox:"0 0 33 11",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":r},o),n?a.createElement("title",{id:r},n):null,wi||(wi=a.createElement("path",{d:"M3.65625 10.1523C2.8776 10.1523 2.2111 9.93652 1.65674 9.50488C1.10238 9.07324 0.755371 8.49772 0.615723 7.77832H1.77734C1.90007 8.19303 2.13281 8.52734 2.47559 8.78125C2.81836 9.03092 3.21615 9.15576 3.66895 9.15576C4.43066 9.15576 5.021 8.82568 5.43994 8.16553C5.86312 7.50114 6.08317 6.55957 6.1001 5.34082H6.09375H6.08105C5.88639 5.79362 5.55632 6.15755 5.09082 6.43262C4.62956 6.70345 4.10693 6.83887 3.52295 6.83887C2.6512 6.83887 1.92546 6.55111 1.3457 5.97559C0.770182 5.40007 0.482422 4.67855 0.482422 3.81104C0.482422 2.90544 0.787109 2.15853 1.39648 1.57031C2.01009 0.977865 2.78662 0.681641 3.72607 0.681641C4.41585 0.681641 5.02311 0.861491 5.54785 1.22119C6.07259 1.57666 6.47461 2.08236 6.75391 2.73828C7.05436 3.43229 7.20459 4.27441 7.20459 5.26465C7.20459 6.80924 6.89355 8.01107 6.27148 8.87012C5.64941 9.72493 4.77767 10.1523 3.65625 10.1523ZM3.71973 5.83594C4.32487 5.83594 4.82845 5.64339 5.23047 5.2583C5.63249 4.87321 5.8335 4.38867 5.8335 3.80469C5.8335 3.21647 5.63037 2.72135 5.22412 2.31934C4.8221 1.91309 4.32699 1.70996 3.73877 1.70996C3.15055 1.70996 2.65332 1.91097 2.24707 2.31299C1.84082 2.71077 1.6377 3.19743 1.6377 3.77295C1.6377 4.36963 1.83447 4.86263 2.22803 5.25195C2.62158 5.64128 3.11882 5.83594 3.71973 5.83594Z",fill:"#1F2326"})),ki||(ki=a.createElement("path",{d:"M28.9482 10.1523C27.8861 10.1523 27.0566 9.72917 26.46 8.88281C25.8675 8.03223 25.5713 6.87695 25.5713 5.41699C25.5713 3.96973 25.8696 2.8208 26.4663 1.97021C27.0672 1.1154 27.8945 0.687988 28.9482 0.687988C30.002 0.687988 30.825 1.11328 31.4175 1.96387C32.0142 2.81022 32.3125 3.95915 32.3125 5.41064C32.3125 6.87061 32.0163 8.02588 31.4238 8.87646C30.8314 9.72705 30.0062 10.1523 28.9482 10.1523ZM27.3042 8.15283C27.6935 8.82145 28.2415 9.15576 28.9482 9.15576C29.6549 9.15576 30.2008 8.82357 30.5859 8.15918C30.971 7.49056 31.1636 6.5765 31.1636 5.41699C31.1636 4.27441 30.9689 3.36882 30.5796 2.7002C30.1903 2.02734 29.6465 1.69092 28.9482 1.69092C28.25 1.69092 27.7041 2.02734 27.3105 2.7002C26.917 3.37305 26.7202 4.27653 26.7202 5.41064C26.7202 6.57015 26.9149 7.48421 27.3042 8.15283Z",fill:"#1F2326"})),Si||(Si=a.createElement("path",{d:"M12.9102 6.41016V5.58984H17.9102L15.625 3.28516L16.2109 2.69922L19.5117 6L16.2109 9.30078L15.625 8.71484L17.9102 6.41016H12.9102Z",fill:"#6F7881"})))}var Ti,Li,Ii,Ai=a.forwardRef(Oi),Bi=["title","titleId"];function qi(){return qi=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Mi(e,t){var n=e.title,r=e.titleId,o=Fi(e,Bi);return a.createElement("svg",qi({width:32,height:11,viewBox:"0 0 32 11",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":r},o),n?a.createElement("title",{id:r},n):null,Ti||(Ti=a.createElement("path",{d:"M12.9102 6.41016V5.58984H17.9102L15.625 3.28516L16.2109 2.69922L19.5117 6L16.2109 9.30078L15.625 8.71484L17.9102 6.41016H12.9102Z",fill:"#6F7881"})),Li||(Li=a.createElement("path",{d:"M0.577637 10V9.21289L4.23389 4.3252V4.30615H0.583984V3.39844H5.48438V4.20459L1.85352 9.07324V9.09229H5.50342V10H0.577637Z",fill:"#1F2326"})),Ii||(Ii=a.createElement("path",{d:"M27.8945 9.1748C28.415 9.1748 28.8509 9.014 29.2021 8.69238C29.5576 8.36654 29.7354 7.96663 29.7354 7.49268V6.95312L27.9707 7.06104C27.5264 7.09066 27.1815 7.19857 26.936 7.38477C26.6948 7.57096 26.5742 7.82064 26.5742 8.13379C26.5742 8.44694 26.6948 8.69873 26.936 8.88916C27.1772 9.07959 27.4967 9.1748 27.8945 9.1748ZM27.647 10.1143C26.991 10.1143 26.46 9.93229 26.0537 9.56836C25.6517 9.20443 25.4507 8.72624 25.4507 8.13379C25.4507 7.56673 25.658 7.11393 26.0728 6.77539C26.4917 6.43685 27.082 6.24642 27.8438 6.2041L29.7354 6.09619V5.54395C29.7354 5.14193 29.6084 4.82666 29.3545 4.59814C29.1006 4.36963 28.7451 4.25537 28.2881 4.25537C27.8691 4.25537 27.5285 4.34847 27.2661 4.53467C27.0037 4.71663 26.8366 4.97266 26.7646 5.30273H25.6982C25.7363 4.71452 25.9902 4.2321 26.46 3.85547C26.9339 3.47461 27.5518 3.28418 28.3135 3.28418C29.0879 3.28418 29.7015 3.47884 30.1543 3.86816C30.6113 4.25749 30.8398 4.78011 30.8398 5.43604V10H29.7925V8.86377H29.7671C29.5682 9.2404 29.2762 9.54297 28.8911 9.77148C28.506 10 28.0913 10.1143 27.647 10.1143Z",fill:"#1F2326"})))}var Ri,Di,Hi,zi=a.forwardRef(Mi),Vi=["title","titleId"];function Wi(){return Wi=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ki(e,t){var n=e.title,r=e.titleId,o=Ui(e,Vi);return a.createElement("svg",Wi({width:33,height:11,viewBox:"0 0 33 11",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":r},o),n?a.createElement("title",{id:r},n):null,Ri||(Ri=a.createElement("path",{d:"M3.94824 10.1523C2.88607 10.1523 2.05664 9.72917 1.45996 8.88281C0.867513 8.03223 0.571289 6.87695 0.571289 5.41699C0.571289 3.96973 0.869629 2.8208 1.46631 1.97021C2.06722 1.1154 2.89453 0.687988 3.94824 0.687988C5.00195 0.687988 5.82503 1.11328 6.41748 1.96387C7.01416 2.81022 7.3125 3.95915 7.3125 5.41064C7.3125 6.87061 7.01628 8.02588 6.42383 8.87646C5.83138 9.72705 5.00618 10.1523 3.94824 10.1523ZM2.3042 8.15283C2.69352 8.82145 3.24154 9.15576 3.94824 9.15576C4.65495 9.15576 5.20085 8.82357 5.58594 8.15918C5.97103 7.49056 6.16357 6.5765 6.16357 5.41699C6.16357 4.27441 5.96891 3.36882 5.57959 2.7002C5.19027 2.02734 4.64648 1.69092 3.94824 1.69092C3.25 1.69092 2.7041 2.02734 2.31055 2.7002C1.91699 3.37305 1.72021 4.27653 1.72021 5.41064C1.72021 6.57015 1.91488 7.48421 2.3042 8.15283Z",fill:"#1F2326"})),Di||(Di=a.createElement("path",{d:"M28.6562 10.1523C27.8776 10.1523 27.2111 9.93652 26.6567 9.50488C26.1024 9.07324 25.7554 8.49772 25.6157 7.77832H26.7773C26.9001 8.19303 27.1328 8.52734 27.4756 8.78125C27.8184 9.03092 28.2161 9.15576 28.6689 9.15576C29.4307 9.15576 30.021 8.82568 30.4399 8.16553C30.8631 7.50114 31.0832 6.55957 31.1001 5.34082H31.0938H31.0811C30.8864 5.79362 30.5563 6.15755 30.0908 6.43262C29.6296 6.70345 29.1069 6.83887 28.5229 6.83887C27.6512 6.83887 26.9255 6.55111 26.3457 5.97559C25.7702 5.40007 25.4824 4.67855 25.4824 3.81104C25.4824 2.90544 25.7871 2.15853 26.3965 1.57031C27.0101 0.977865 27.7866 0.681641 28.7261 0.681641C29.4159 0.681641 30.0231 0.861491 30.5479 1.22119C31.0726 1.57666 31.4746 2.08236 31.7539 2.73828C32.0544 3.43229 32.2046 4.27441 32.2046 5.26465C32.2046 6.80924 31.8936 8.01107 31.2715 8.87012C30.6494 9.72493 29.7777 10.1523 28.6562 10.1523ZM28.7197 5.83594C29.3249 5.83594 29.8285 5.64339 30.2305 5.2583C30.6325 4.87321 30.8335 4.38867 30.8335 3.80469C30.8335 3.21647 30.6304 2.72135 30.2241 2.31934C29.8221 1.91309 29.327 1.70996 28.7388 1.70996C28.1506 1.70996 27.6533 1.91097 27.2471 2.31299C26.8408 2.71077 26.6377 3.19743 26.6377 3.77295C26.6377 4.36963 26.8345 4.86263 27.228 5.25195C27.6216 5.64128 28.1188 5.83594 28.7197 5.83594Z",fill:"#1F2326"})),Hi||(Hi=a.createElement("path",{d:"M12.9102 6.41016V5.58984H17.9102L15.625 3.28516L16.2109 2.69922L19.5117 6L16.2109 9.30078L15.625 8.71484L17.9102 6.41016H12.9102Z",fill:"#6F7881"})))}var Gi,Qi,Ji,Xi=a.forwardRef(Ki),Yi=["title","titleId"];function $i(){return $i=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function tl(e,t){var n=e.title,r=e.titleId,o=el(e,Yi);return a.createElement("svg",$i({width:30,height:8,viewBox:"0 0 30 8",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":r},o),n?a.createElement("title",{id:r},n):null,Gi||(Gi=a.createElement("path",{d:"M11.9102 4.41016V3.58984H16.9102L14.625 1.28516L15.2109 0.699219L18.5117 4L15.2109 7.30078L14.625 6.71484L16.9102 4.41016H11.9102Z",fill:"#6F7881"})),Qi||(Qi=a.createElement("circle",{cx:4,cy:4,r:4,fill:"#FEDB5E"})),Ji||(Ji=a.createElement("circle",{cx:26,cy:4,r:4,fill:"#FA5067"})))}var nl,rl,ol,al=a.forwardRef(tl),il=["title","titleId"];function ll(){return ll=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function sl(e,t){var n=e.title,r=e.titleId,o=cl(e,il);return a.createElement("svg",ll({width:30,height:10,viewBox:"0 0 30 10",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":r},o),n?a.createElement("title",{id:r},n):null,nl||(nl=a.createElement("path",{d:"M11.9102 5.41016V4.58984H16.9102L14.625 2.28516L15.2109 1.69922L18.5117 5L15.2109 8.30078L14.625 7.71484L16.9102 5.41016H11.9102Z",fill:"#6F7881"})),rl||(rl=a.createElement("circle",{cx:4,cy:5,r:4,fill:"#FA5067"})),ol||(ol=a.createElement("circle",{cx:26,cy:5,r:4,fill:"#FEDB5E"})))}var ul=a.forwardRef(sl),dl="SortIcon_letters__Wh2Jp",pl="SortIcon_numbers__Lb5wD",ml=function(e){switch(e.sortType){case l.JN.alphabetically:return a.createElement(ji,{className:dl});case l.JN.reverseAlphabetically:return a.createElement(zi,{className:dl});case l.JN.severity:return a.createElement(ul,null);case l.JN.reverseSeverity:return a.createElement(al,null);case l.JN.count:return a.createElement(Ai,{className:pl});case l.JN.reverseCount:return a.createElement(Xi,{className:pl});default:return a.createElement(ul,null)}},fl="SortSelect_container__axSnr",hl="SortSelect_selectButton__eymwr",vl="SortSelect_popupContainer__qXDRO",gl="SortSelect_popup__fHl7z",bl="SortSelect_list__B4Ext",_l=a.memo((function(e){var t=e.htmlProps,n=void 0===t?{}:t,o=e.loading,i=void 0!==o&&o,l=e.onChangeSort,s=e.options,u=void 0===s?[]:s,d=e.sortedBy,p=(0,r.Z)({list:{},triggerBtn:{}},n),m=(0,a.useState)(!1),f=(0,c.Z)(m,2),h=f[0],v=f[1],g=u.map((function(e){return{key:e,label:a.createElement(ml,{sortType:e})}})),b=function(){return!i&&v(!h)};return a.createElement("div",{className:fl},h?a.createElement("div",{className:vl,style:{bottom:"".concat(25*u.indexOf(d)+10,"px")}},a.createElement(_i.ZP,{autoFocusFirst:!0,trapFocus:!0,onOutsideClick:b,className:gl},a.createElement("div",p.list,a.createElement(Ot.Z,{className:bl,activeIndex:u.indexOf(d),compact:!0,shortcuts:!0,data:g,onSelect:function(e){v(!1),"undefined"!==typeof l&&l(e.key)}})))):a.createElement(tn.zx,(0,Jt.Z)({className:hl,onClick:b},p.triggerBtn),a.createElement(ml,{sortType:d})))})),yl="Title_name__3cQIp",Cl="Title_hint__k3gGo",El="Title_checkAllLabel__tQYvk",xl=function(e){var t=e.duplicatesCount,n=void 0===t?0:t,r=e.sortedBy,o=e.name,i=e.loading,l=void 0!==i&&i,c=e.onChangeCheckbox,s=e.checked,u=e.showingBaselineControls,d=o===Lt.dT.files;return a.createElement("div",null,!d&&u&&a.createElement(di.Z,{labelClassName:El,label:"Select all","aria-label":"Select all",checked:s,onChange:c}),a.createElement("span",{className:yl},o),a.createElement(_l,{htmlProps:d?wl:kl,loading:l,onChangeSort:e.onChangeSort,options:d?Sl:jl,sortedBy:r}),n>0&&a.createElement("div",{className:Cl},n," duplicate",n>1?"s":"",a.createElement(bi,{note:Lt.wC.fileList})))},wl={list:{"data-qd-clickable":dt.vf.listSortSelectFiles},triggerBtn:{"aria-label":"open sort selector","data-qd-clickable":dt.vf.listOpenSortSelectFiles}},kl={list:{"data-qd-clickable":dt.vf.listSortSelectProblems},triggerBtn:{"aria-label":"open sort selector","data-qd-clickable":dt.vf.listOpenSortSelectProblems}},Sl=[l.JN.alphabetically,l.JN.reverseAlphabetically,l.JN.count,l.JN.reverseCount],jl=[l.JN.severity,l.JN.reverseSeverity,l.JN.alphabetically,l.JN.reverseAlphabetically],Nl=n(90577),Zl=n(75715),Pl=["isExpandable","projectStructure","plainArr","search"],Ol=function(e){var t=e.isExpandable,n=e.projectStructure,r=e.plainArr,i=e.search,l=void 0===i?"":i,c=(0,o.Z)(e,Pl),s=(0,Nl.V)(l,r,n,t);return a.createElement(Tt._K,null,(function(e){var n=e.height,r=e.scrollTop,o=e.isScrolling,i=e.onChildScroll;return a.createElement(Tt.qj,{disableHeight:!0},(function(e){var u=e.width;return a.createElement(Zl.m,(0,Jt.Z)({},c,{data:s,height:n,isScrolling:o,onChildScroll:i,scrollTop:r,width:u,search:l,isExpandable:t}))}))}))},Tl=function(e){var t,n=e.split(et.qk),r=n.shift(),o=[],a=(0,$.Z)(n);try{for(a.s();!(t=a.n()).done;){var i=t.value;o.push(r),r+="/".concat(i)}}catch(l){a.e(l)}finally{a.f()}return o.push(r),o},Ll=n(12328),Il=function(e){var t=e.projectStructure,n=e.sortedBy,r=e.search,o=e.openedPath,i=void 0===o?"":o,l=e.problemsTabName,c=(0,a.useMemo)((function(){return(0,Ll.c)(t,n)}),[t,n]),s=0===t.length,u=[];return""!==i&&(u=Tl(i)),s&&""===r?null:a.createElement(Ol,{focusedPath:i,openedFolders:u,problemsTabName:l,projectStructure:c,search:r,showingCount:!0,showingMarkers:!0})},Al=a.memo(Il),Bl=n(32906),ql=n(13864),Fl=n(85920),Ml="Group_title__CnHws",Rl="Group_notFound__7S1hb",Dl="Group_toggle__XOxPR",Hl=function(e){var t=e.name,n=e.search,r=e.onChangeToggle,o=e.selected;return a.createElement(ri.X2,{className:Ml},!!r&&a.createElement(ft.ZD,{className:Dl,onChange:function(){r&&r(t)},defaultChecked:o}),a.createElement("span",{"data-qd-test":kt.b.problemListGroupName,className:st()((0,bt.Z)({},Rl,""===t)),title:t},a.createElement(_n.q,{line:t,search:n})))},zl=function(e){var t=(0,C.Gr)(E.D.openedProblem,!1);return e.find((function(e){return e.hash===t}))},Vl=n(83488),Wl="IssueList_pager__Ijm4o",Ul=[5,10,25,50,100],Kl=Ul[2],Gl={"data-qd-test":kt.b.problemListItem},Ql=a.memo((function(e){var t=e.checkedProblems,n=e.enabledGroups,r=e.groupBy,o=e.moveOnFiles,i=e.onChangeCheckbox,l=e.onChangeToggle,s=e.problems,u=e.problemsTabName,d=e.search,p=e.showingActions,m=e.showingLinks,f=e.sortedBy,h=(0,a.useState)(Kl),v=(0,c.Z)(h,2),g=v[0],b=v[1],_=(0,a.useMemo)((function(){return(0,ql.SS)((0,ql.wh)(s,r,f))}),[s,r,f]),y=(0,a.useState)((function(){var e=zl(_);return e?Math.floor(_.indexOf(e)/g)+1:1})),x=(0,c.Z)(y,2),w=x[0],k=x[1],S=(0,a.useState)((function(){var e=zl(_);return e?[e]:[]})),j=(0,c.Z)(S,2),N=j[0],Z=j[1],P=function(e,t,n){return n.slice((e-1)*t,e*t)}(w,g,_),O=function(e,t){var n,r=new Map,o=(0,$.Z)(t);try{for(o.s();!(n=o.n()).done;){var a,i=n.value,l=(0,Vl.k)(e,i),c=null!==(a=r.get(l))&&void 0!==a?a:[];r.set(l,[].concat((0,Y.Z)(c),[i]))}}catch(s){o.e(s)}finally{o.f()}return Array.from(r.entries())}(r,P),T=function(e){N.includes(e)?(Z((function(t){return t.filter((function(t){return t!==e}))})),(0,C.jX)(E.D.openedProblem,"")):(Z((function(t){return[].concat((0,Y.Z)(t),[e])})),(0,C.jX)(E.D.openedProblem,"".concat(e.hash)))},L=(0,a.useRef)(!0);return(0,a.useEffect)((function(){L.current?L.current=!1:k(1)}),[r,_]),0===s.length&&""===d?null:a.createElement("article",null,O.map((function(e,r){return a.createElement(a.Fragment,{key:e[0]},a.createElement(Hl,{search:d,name:e[0],onChangeToggle:l,selected:n.includes(e[0])}),e[1].map((function(e,n){return a.createElement(Fl.Q,{checked:null===t||void 0===t?void 0:t.includes(e),htmlProps:Gl,key:e.hash,moveOnFiles:o,onChangeCheckbox:i,onToggleOpen:T,opened:N.includes(e),problem:e,problemsTabName:u,search:d,showingActions:p,showingLinks:m,showingOnboardingTip:0===r&&0===n,captionCompensateOffset:18})})))})),a.createElement(Bl.Z,{className:Wl,currentPage:w,onPageChange:k,onPageSizeChange:b,pageSize:g,pageSizes:Ul,total:_.length}))})),Jl=n(28781),Xl=n(20950),Yl="ListSkeleton_col__bAVgI",$l="ListSkeleton_container__OaeRV",ec="ListSkeleton_row__ZOmbF",tc="ListSkeleton_skeletonAdjust__S2J-4",nc="ListSkeleton_last__ETPw0",rc=function(e){var t=e.col1,n=e.col2,r=e.col3,o=e.rowsCount,i=[];i.push([(0,Jl.$)(180,400),0,0]);for(var l=1;l1})).length;M(e)}),[n]),0===x.length&&!u)return null;var R=n.length===t.length,D=0===n.length&&""!==S&&'No results matched with "'.concat(S,'"');return a.createElement("article",null,a.createElement("section",{ref:L},(u||!!x.length)&&a.createElement(ti,{checkedProblemsCount:t.length,filesCount:r,groupBy:o,isTeamCity:i,isBaseline:s,loading:u,onChangeGroupBy:f,onChangeSearch:g,onChangeTab:b,onClickApply:y,problemsCount:n.length,search:S,showingGroupSelect:T===l.yA.problems&&!N,showingPromoWarning:E.length>0,showingPromoControls:N,showingBaselinesControls:T===l.yA.problems&&P,tab:T})),a.createElement(ui,{hint:D,listType:T,secondCol:"Category",thirdColumn:A?"Type":"Problem type",title:a.createElement(xl,{checked:t.length>0&&R,duplicatesCount:A?0:F,loading:u,name:A?Lt.dT.problems:Lt.dT.files,onChangeCheckbox:h,onChangeSort:A?v:m,showingBaselineControls:P,sortedBy:O})},!u&&!A&&a.createElement("div",{"data-qd-clickable":dt.vf.listFiles},a.createElement(Al,{onChangeSort:m,openedPath:C,duplicatesCount:F,problemsTabName:w,projectStructure:k,search:S,sortedBy:O})),!u&&A&&a.createElement("div",{"data-qd-clickable":dt.vf.listProblems},a.createElement(Ql,{checkedProblems:t,groupBy:o,moveOnFiles:d,onChangeCheckbox:P?p:void 0,onChangeToggle:N?_:void 0,problems:n,problemsTabName:w,search:I,showingActions:!N,showingLinks:!N,sortedBy:O,enabledGroups:E})),u&&a.createElement(rc,{col1:!0,col2:3,col3:2,rowsCount:12})))})),ac=[],ic={includeFolderContentCount:!1,includePlainArray:!1,includeProblems:!0},lc=(0,j.$j)((function(e,t){var n=t.problemsTabName,r=void 0===n?(0,yt.XI)((0,v.mI)(e).info):n,o=(0,v.mI)(e),a=(0,yt.Ne)(r).selectFilteredArray;return{baseline:yt.oJ.selectAppliedExclusionProblems(o),baselineHashes:(0,yt.w5)(o),filteredArray:a(o),isBaseline:o.info.showingBaseline}}),{applyBaseline:M._P})((function(e){var t=e.filteredArray,n=e.initialGroupBy,o=void 0===n?l.nf.file:n,i=e.isBaseline,s=e.loading,d=void 0!==s&&s,p=e.onChangeEnabledGroup,m=e.problemsTabName,f=e.showingPromoControls,g=e.showingBaselineControls,b=e.baselineHashes,_=e.enabledGroups,C=void 0===_?ac:_,E=(0,a.useContext)(u.Il).environment,x=(0,T.CG)(v.L7),w=(0,a.useContext)(u.pg),k=(0,a.useContext)(u.pg).problemsListDefaultTab,S=E===l.qA.TeamCity,N=(0,j.I0)(),Z=(0,a.useState)([]),P=(0,c.Z)(Z,2),O=P[0],L=P[1];(0,a.useEffect)((function(){return L([])}),[i]);var I=f?l.yA.problems:k,A=(0,a.useState)({groupBy:o,openedPath:"",search:"",sortedFilesBy:l.JN.alphabetically,sortedProblemsBy:l.JN.severity,tab:I}),B=(0,c.Z)(A,2),q=B[0],F=B[1],R=(0,a.useMemo)((function(){return function(e,t,n,r){if(""===e)return t;var o=[];return r===l.yA.files?t.forEach((function(t){Za(e,t)&&o.push(t)})):function(){var r,a=e.toLowerCase(),i=(0,$.Z)(t);try{for(i.s();!(r=i.n()).done;){var l=r.value,c=l.comment,s=l.category,u=l.type,d=l.tags,p=void 0===d?[]:d;if(-1===c.toLowerCase().indexOf(a))if(-1===s.toLowerCase().indexOf(a))if(u&&-1!==(null===u||void 0===u?void 0:u.toLowerCase().indexOf(a)))o.push(l);else if(p.filter((function(e){return-1!==e.toLowerCase().indexOf(a)})).length>0)o.push(l);else{var m=void 0;if("file"===n||"path"===n)m=Za(e,l);else{var f=l[n];m="string"===typeof f&&-1!==f.toLowerCase().indexOf(a)}m&&o.push(l)}else o.push(l);else o.push(l)}}catch(h){i.e(h)}finally{i.f()}}(),o}(q.search.trim(),t,q.groupBy,q.tab)}),[q.search,q.tab,t,q.groupBy]),D=(0,Na.h)(R,ic),H=D.filesCount;return 0!==t.length||d?a.createElement(wt.u,{wrappedComponentName:"files"},a.createElement(oc,{checkedProblems:O,displayedProblems:R,enabledGroups:C,filesCount:H,groupBy:q.groupBy,isTeamCity:S,isBaseline:i,loading:d,moveOnFiles:function(e){return F((0,r.Z)((0,r.Z)({},q),{},{tab:l.yA.files,openedPath:e,search:""}))},onChangeCheckbox:function(e){O.includes(e)?L((function(t){return t.filter((function(t){return e!==t}))})):L((function(t){return[].concat((0,Y.Z)(t),[e])}))},onChangeFilesSort:function(e){return F((0,r.Z)((0,r.Z)({},q),{},{sortedFilesBy:e}))},onChangeGroupBy:function(e){return F((0,r.Z)((0,r.Z)({},q),{},{groupBy:e,search:""}))},onChangeProblemsSort:function(e){return F((0,r.Z)((0,r.Z)({},q),{},{sortedProblemsBy:e}))},onChangeSearch:function(e){return F((0,r.Z)((0,r.Z)({},q),{},{search:e}))},onChangeTab:function(e){F((0,r.Z)((0,r.Z)({},q),{},{tab:e,openedPath:"",search:""})),(0,Et.C9)({environment:E,tab:e}),w.persistSettings&&(0,y.m8)("".concat(h.mp.tab).concat((0,y.n$)(x)),e)},onChangeToggle:p,onClickApply:function(){var e=new Set(b);i?O.forEach((function(t){return e.delete(t.hash)})):O.forEach((function(t){return e.add(t.hash)})),N((0,M._P)(x,Array.from(e))),L([])},onChangeHeaderCheckbox:function(){L((function(e){return e.length0}))});S(e)}}),[h,Z]);var O=(0,a.useMemo)((function(){var e={};return b.forEach((function(t){e[t]={closeBtn:{"aria-label":"clear ".concat(t," filter"),"data-qd-clickable":Fc(t,"closeBtn")},list:{"data-qd-clickable":Fc(t,"list")},search:{"data-qd-clickable":Fc(t,"search")},triggerBtn:{"data-qd-clickable":Fc(t,"triggerBtn"),"data-qd-test":kt.b.genericFilter}}})),e}),[b]),L=(0,a.useCallback)((function(){P(!1)}),[]),I=(0,a.useCallback)((function(){P(!0)}),[]),A=(0,a.useCallback)((function(e,n){var r=k[n].options.find((function(t){return t.key===e}));if(r){var o=r.label;t(y,{group:n,name:o}),E&&(0,Et.bt)({environment:C,hide:!1,source:"filters",type:n})}else console.error("no such option: ",r)}),[y,t,C,k,E]),B=(0,a.useCallback)((function(e,t){var n=k[t].options.find((function(t){return t.key===e}));if(n){var r=n.label;p(y,{group:t,name:r}),E&&(0,Et.bt)({environment:C,hide:!1,source:"filters",type:t})}else console.error("no such option: ",n)}),[y,C,k,p,E]),q=(0,a.useCallback)((function(e){var t=(0,Ac.s)(g,e);m(y,t),E&&(0,Et.bt)({environment:C,type:e,hide:!1,source:"filters"})}),[y,m,C,g,E]),F=(0,a.useCallback)((function(e){var t=b.slice(),n=e.destination,r=e.source,o=e.draggableId;n&&(n.droppableId===r.droppableId&&n.index===r.index||(t.splice(r.index,1),t.splice(n.index,0,o),f(y,t)))}),[y,f,b]);return a.createElement(a.Fragment,null,l?a.createElement("div",null,b.map((function(e,t){return a.createElement(Pa.P,{classNames:{container:Tc},defaultSelectionLabel:"All",disabled:o||d,htmlProps:O[e],key:t,onOpen:I,onClose:L,onDeleteSelection:q,onDeselect:B,onSelect:A,options:k[e].options,search:k[e].options.length>5,selected:h[e].selected,selectName:e})}))):a.createElement(Cc.Z5,{onDragEnd:F},a.createElement(Cc.bK,{droppableId:"genericFilters"},(function(e){return a.createElement("div",(0,Jt.Z)({className:st()(_?Oc:""),ref:e.innerRef},e.droppableProps),b.map((function(e,t){return a.createElement(Zc,{index:t,key:t,level:e,reordering:_},a.createElement(Pa.P,{classNames:{container:Tc,label:st()(_?Ic:"",Lc)},defaultSelectionLabel:"All",disabled:o||d||_,htmlProps:O[e],onOpen:I,onClose:L,onDeleteSelection:q,onDeselect:B,onSelect:A,options:k[e].options,search:k[e].options.length>5,selected:h[e].selected,selectName:e}))})),e.placeholder)}))))}));Mc.displayName="ConnectedGenericFilters";var Rc,Dc=Mc,Hc=n(49886),zc="HiddenProblemsSwitch_container__fBIpu",Vc="HiddenProblemsSwitch_select__p2gBA",Wc="HiddenProblemsSwitch_list__kh1-y",Uc="HiddenProblemsSwitch_label__yC5WV",Kc="HiddenProblemsSwitch_turnedOff__Rt9dm",Gc="HiddenProblemsSwitch_disabled__L86Kz",Qc=n(41919),Jc={modal:"RemoveModal_modal__PGhCW",title:"RemoveModal_title__saYOJ",buttonsGroup:"RemoveModal_buttonsGroup__UP6q7",primary:"RemoveModal_primary__yWfwu",secondary:"RemoveModal_secondary__-c1Gy"},Xc=a.memo((function(e){var t=e.onAccept,n=e.onClose,r=e.showingContent;return a.createElement(Qc.A,{className:Jc.modal,height:182,onClose:n,opened:r,width:370},a.createElement("h2",{className:Jc.title},"Remove problems from hidden"),a.createElement("div",{className:Jc.content},"Are you sure you want to remove all problems from hidden and make them visible?",a.createElement("div",{className:Jc.buttonsGroup},a.createElement(tn.ZP,{className:Jc.primary,"data-qd-clickable":dt.vf.hiddenProblemsModalConfirm,onClick:t,primary:!0},"Yes, clear"),a.createElement(tn.ZP,{className:Jc.secondary,"data-qd-clickable":dt.vf.hiddenProblemsModalCancel,onClick:n,primary:!0,text:!0},"Cancel"))))})),Yc={changeShowingExcludedProblems:function(e,t){return(0,M.cf)(e,t)},changeExclusionFilters:function(e,t){return(0,M.mE)(e,t)}},$c=(0,j.$j)((function(e,t){var n=t.problemsTabName,r=(0,v.mI)(e);return{excludedDisplayType:r.info.excludedDisplayType,excludedProblems:(0,yt.Ne)(n).selectExcludedProblems(r),exclusionFilters:(0,St.q)(r)}}),Yc),es=[{label:"Show hidden problems",key:l.K4.include,disabled:!1},{disabled:!1,key:l.K4.onlyExcluded,label:"Only hidden problems"}],ts=$c((function(e){var t,n=e.changeExclusionFilters,r=e.changeShowingExcludedProblems,o=e.excludedDisplayType,i=e.excludedProblems,s=e.exclusionFilters,u=e.loading,d=(0,T.CG)(v.L7),p=(0,a.useState)(es[0].key),m=(0,c.Z)(p,2),f=m[0],h=m[1],g=(0,a.useState)(!1),b=(0,c.Z)(g,2),_=b[0],y=b[1],C=o!==l.K4.withoutExcluded,E=(0,a.useMemo)((function(){var e=i,t=s.filter((function(e){return"path"===e.category}));if("undefined"!==typeof t){var n=[];t.forEach((function(e){"undefined"!==typeof e&&Array.isArray(e.name)&&(n=[].concat((0,Y.Z)(n),(0,Y.Z)(e.name)))})),e=(0,Hc.IC)(n,e)}return 0!==e.length}),[i,s]),x=function(){return y(!_)};return E?a.createElement("div",{className:st()(zc,(t={},(0,bt.Z)(t,Kc,C),(0,bt.Z)(t,Gc,u),t))},a.createElement(dn.Z,{disabled:u,defaultChecked:C,htmlProps:{"data-qd-clickable":dt.vf.hiddenProblemsToggle},onChange:function(){o===l.K4.withoutExcluded?r(d,f):r(d,l.K4.withoutExcluded)}}),a.createElement(Pa.P,{classNames:{list:Wc,label:Uc,container:Vc},disabled:u,htmlProps:{list:{"data-qd-clickable":dt.vf.hiddenProblemsSelectFilter},specialBtn:{"data-qd-clickable":dt.vf.hiddenProblemsSelectUnhideAll},triggerBtn:{"data-qd-clickable":dt.vf.hiddenProblemsOpenSelectFilter,"data-qd-onboarding":Yo.D.hiddenProblemsToggle}},onSelect:function(e){r(d,e),h(e)},options:es,selected:f,showSelectedTooltip:!1,specialButton:{disabled:!1,label:"Remove all from hidden",onClick:x}}),a.createElement(Xc,{onAccept:function(){x();var e=s.filter((function(e){return"path"===e.category}));n(d,e)},onClose:x,showingContent:_})):null})),ns=n(29580),rs=n(22571),os=n(48882),as=n(94233),is=n(51004),ls="InlineSelect_icon__nQfgG",cs="InlineSelect_tooltipPopup__t9LmZ",ss="InlineSelect_inline__2+HqK",us="InlineSelect_closeButton__0psyA",ds="InlineSelect_close__XH3Sx",ps="InlineSelect_disabled__rTgqx",ms=a.memo((function(e){var t=e.buttonClassName,n=void 0===t?"":t,r=e.disabled,o=void 0!==r&&r,i=e.tags,l="".concat(Lt.Rz.locationFilters,": ");l=0===i.length?"".concat(l," All "):1===i.length?"".concat(l," ").concat(i[0].name," "):"".concat(l," ").concat(i.length," selected ");var c=i.map((function(e){return e.name})).join(", ");return a.createElement("div",{className:o?ps:""},a.createElement(tn.ZP,{className:"".concat(ss," ").concat(n),"data-qd-clickable":dt.vf.locationFiltersSelectBtn,"data-qd-test":kt.b.locationFilter,disabled:o,iconClassName:ls,onClick:e.clickOnInput,text:!0},a.createElement(un.Z,{title:i.length>1?c:"",popupProps:{className:cs},delay:Ct.gk},l),!o&&a.createElement(os.ZP,{glyph:as.r,className:ls,height:Ct.rW,suppressSizeWarning:!0})),i.length>0&&a.createElement(tn.ZP,{className:us,"data-qd-clickable":dt.vf.locationFiltersSelectCloseBtn,disabled:o,icon:is.r,iconClassName:ds,iconSize:Ct.vg,iconSuppressSizeWarning:!0,onClick:e.resetFilters,text:!0}))})),fs="TreeSelect_container__wwHDV",hs="TreeSelect_selectActive__XC9Lm",vs="TreeSelect_island__Okm06",gs=[],bs=function(e){var t=e.children,n=e.disabled,o=e.tags,i=(0,a.useState)({show:!1}),l=(0,c.Z)(i,2),s=l[0],u=l[1],d=a.createRef(),p=function(e){var t=e&&"marker"===e.target.getAttribute("data-qd-parent"),n=e&&e.target.closest("[data-qd-parent");t||n||u({show:!1})};(0,rs.o)(p,d);return a.createElement("div",{className:fs,onKeyDown:function(e){"Escape"===e.key&&p()},ref:d},a.createElement(ms,{buttonClassName:s.show?hs:"",resetFilters:function(){e.onChangeCheckbox(gs),p()},tags:o,disabled:n,clickOnInput:function(){return u((0,r.Z)((0,r.Z)({},s),{},{show:!s.show}))}}),s.show&&a.createElement(mc.ZP,null,a.createElement(Xt.ZP,{className:vs,"data-qd-clickable":dt.vf.locationFiltersContent},t)))},_s=a.memo(bs),ys=n(97382),Cs=n(18006),Es="LocationFilters_wrapper__rJ020",xs="LocationFilters_container__-MSRd",ws={applyLocationFilters:M.Nd,excludeScopes:ge.qV},ks=(0,j.$j)((function(e,t){var n=t.problemsTabName,r=(0,v.mI)(e),o=(0,yt.Ne)(n),a=o.selectLocationFilters,i=o.selectComparedProblems;return{excludedScopes:r.marker.excludedScopes,locationFilters:a(r),markers:r.marker.options,problems:i(r),problemsTabName:n}}),ws)((function(e){var t=(0,T.CG)(v.L7),n=(0,a.useContext)(u.Il).environment,r=(0,a.useContext)(xc.B)===xc.g.all,o=e.applyLocationFilters,i=e.excludeScopes,l=e.excludedScopes,c=e.className,s=e.disabled,d=void 0!==s&&s,p=e.loading,m=void 0!==p&&p,f=e.markers,h=e.problems,g=e.problemsTabName,b=e.locationFilters,_=(0,a.useMemo)((function(){return(0,Na.h)(h,Ss)}),[h]),y=_.plainArray,C=_.projectStructure,E=_.folderContentCount,x=(0,a.useCallback)((function(e){var a=function(e,t){var n,r=[],o=[],a=(0,$.Z)(t);try{for(a.s();!(n=a.n()).done;){var i=n.value,l=(0,ys.D)(i);Tl(l).forEach((function(n){if(-1===r.indexOf(n)){var a=t.filter((function(e){return 0===e.indexOf(n)})).length,i=e.get(n);i&&a===i.size&&o.push(n)}r.push(n)}))}}catch(p){a.e(p)}finally{a.f()}o.sort((function(e,t){return e.length-t.length}));var c=o;o.forEach((function(e){c=c.filter((function(t){return 0!==t.indexOf(e)||e===t}))}));var s=t;c.forEach((function(e){s=s.filter((function(t){return 0!==t.indexOf(e)}))}));var u=c.map((function(e){return{name:e,category:"path"}})),d=s.map((function(e){return{name:e,category:"file"}}));return[].concat((0,Y.Z)(u),(0,Y.Z)(d))}(E,e);!function(e){r&&(0,Et.bt)({environment:n,type:"location",hide:!1,source:"filters"}),o(t,e,g)}(a)}),[t,E,o,r,n,g]),w=(0,a.useCallback)((function(e){var o;o=l.includes(e)?l.filter((function(t){return t!==e})):[].concat((0,Y.Z)(l),[e]),r&&(0,Et.bt)({environment:n,type:"scope",hide:!0,source:"filters"}),i(t,o)}),[i,n,t,r,l]),k=(0,a.useMemo)((function(){return function(e,t){if(0===t.size)return[];var n=[];return e.forEach((function(e){if("path"===e.category){var r=t.get(e.name);if("undefined"!==typeof r){var o=Array.from(r);n=[].concat((0,Y.Z)(n),o)}}else n.push(e.name)})),n}(b,E)}),[b,E]),S=(0,a.useMemo)((function(){return function(e){var t,n=[],r=(0,$.Z)(Cs.O);try{for(r.s();!(t=r.n()).done;){var o=t.value;(0,ie.Q$)(e.user,o)&&e.user[o].length>0&&n.push(o),(0,ie.Q$)(e.idea,o)&&e.idea[o].length>0&&n.push(o)}}catch(a){r.e(a)}finally{r.f()}return Array.from(n)}(f)}),[f]);return a.createElement("div",{className:st()(Es,c)},a.createElement("div",{className:xs},a.createElement(_s,{disabled:d||m,onChangeCheckbox:x,tags:b},a.createElement(ns.V,{onChangeCheckbox:x,onScopeToggleChange:w,checked:k,scopes:S,plainArr:y,problemsTabName:g,projectStructure:C,excludedScopes:l,usagePlace:ns.e.locationFilters}))))})),Ss={includeFolderContentCount:!0,includePlainArray:!0,includeProblems:!1},js=n(34647),Ns="OrderControls_btn__ftQ67",Zs=a.memo((function(e){var t=e.className,n=void 0===t?"":t,r=e.disabled,o=e.handleCancel,i=e.handleDone,l=e.handleReorder,c=e.handleResetOrder,s=e.isDefaultOrder,u=e.isSavedOrder,d=e.reordering,p={clickable:dt.vf.orderControlsReorderBtn,handler:l,text:"Reorder"};!u&&d&&(p={clickable:dt.vf.orderControlsDoneBtn,handler:i,text:"Done"}),u&&d&&(p={clickable:dt.vf.orderControlsCancelBtn,handler:o,text:"Cancel"});var m=!u&&d?"primary":"secondary";return a.createElement("div",{className:n},a.createElement(js.z,{className:Ns,"data-qd-clickable":p.clickable,"data-qd-onboarding":Yo.D.reorder,"data-qd-test":kt.b.reorderButton,disabled:r,onClick:p.handler,size:"S",variant:m},p.text),!s&&d&&a.createElement(js.z,{className:Ns,"data-qd-clickable":dt.vf.orderControlsDefaultOrderBtn,disabled:r,onClick:c,size:"S"},"Back to default order"))})),Ps=n(90606),Os=n.n(Ps),Ts=n(33438),Ls=n(50047),Is="EditPopup_popup__qF4q0",As="EditPopup_input__zyHxA",Bs="EditPopup_buttons__7M5Vy",qs="EditPopup_saveBtn__6rjra",Fs="EditPopup_deleteBtn__aA9hH",Ms=function(e){var t=e.className,n=void 0===t?"":t,o=e.defaultValue,i=void 0===o?"":o,l=e.existingNames,s=void 0===l?[]:l,u=e.htmlProps,d=e.message,p=void 0===d?"Input name":d,m=e.onCloseAttempt,f=e.onDelete,h=e.onSave,v=e.open,g=(0,r.Z)({cancelBtn:{},deleteBtn:{},input:{},saveBtn:{}},u),b=(0,a.useState)(""),_=(0,c.Z)(b,2),y=_[0],C=_[1],E=(0,a.useState)(!1),x=(0,c.Z)(E,2),w=x[0],k=x[1];(0,a.useEffect)((function(){C(i)}),[i,v]),(0,a.useEffect)((function(){var e=y.trim();k(s.includes(e)&&e!==i),!v&&w&&(C(""),k(!1))}),[i,w,s,y,v]);var S=(0,a.useCallback)((function(e){C(e.target.value)}),[]),j=(0,a.useCallback)((function(e){var t=y.trim();"Enter"===e.key&&t&&!w&&(e.preventDefault(),h(t),C(""))}),[w,y,h]),N=(0,a.useCallback)((function(){var e=y.trim();e&&!w&&(h(e),C(""))}),[w,y,h]);return a.createElement(_i.ZP,{className:"".concat(Is," ").concat(n),hidden:!v,onCloseAttempt:m},a.createElement(mc.ZP,null,a.createElement(Ls.ZP,(0,Jt.Z)({autoFocus:!0,autoComplete:"off",className:As,error:w?"":void 0,label:w?"Name already exists":p,onChange:S,onKeyDown:j,value:y},g.input)),a.createElement("div",{className:Bs},a.createElement(ft.zx,(0,Jt.Z)({className:qs,disabled:w,onClick:N,variant:"primary",size:"S"},g.saveBtn),"Save"),a.createElement(ft.zx,(0,Jt.Z)({onClick:m,size:"S"},g.cancelBtn),"Cancel"),!!f&&a.createElement(ft.zx,(0,Jt.Z)({className:Fs,onClick:f,variant:"clear",size:"S"},g.deleteBtn),"Delete"))))},Rs="SavedFiltersSelect_controls__XR5y1",Ds="SavedFiltersSelect_controlsWithClose__yzn32",Hs="SavedFiltersSelect_triggerBtn__efNLt",zs="SavedFiltersSelect_active__AquCV",Vs="SavedFiltersSelect_triggerBtnContent__yfLgF",Ws="SavedFiltersSelect_chevron__asay+",Us="SavedFiltersSelect_label__Eq4Uz",Ks="SavedFiltersSelect_closeBtn__RWgW1",Gs="SavedFiltersSelect_closeBtnContent__06Vut",Qs="SavedFiltersSelect_popup__MRp3h",Js="SavedFiltersSelect_list__D7kWd",Xs="SavedFiltersSelect_listItem__hrz+c",Ys="SavedFiltersSelect_itemBtn__oyYNP",$s="SavedFiltersSelect_editBtn__KfriY",eu=function(e){var t=e.className,n=e.disabled,r=void 0!==n&&n,o=e.filterNames,i=e.onDelete,l=e.onEdit,s=e.onReset,u=e.onSelect,d=e.selectedKey,p=void 0===d?"":d,m=(0,a.useState)(!1),f=(0,c.Z)(m,2),h=f[0],v=f[1],g=(0,a.useState)(""),b=(0,c.Z)(g,2),_=b[0],y=b[1],C=o.map((function(e){return e.label})),E=o.find((function(e){return e.key===_})),x=(0,a.useCallback)((function(){v(!0)}),[]),w=(0,a.useCallback)((function(){v(!1)}),[]),k=(0,a.useCallback)((function(){v(!1),s()}),[s]),S=(0,a.useCallback)((function(e){var t=(0,Ts.p)(e.target,"LI","data-key");v(!1),u(t)}),[u]),j=(0,a.useCallback)((function(e){v(!1);var t=(0,Ts.p)(e.target,"LI","data-key");y(t)}),[]),N=(0,a.useCallback)((function(){y(""),v(!0)}),[]),Z=(0,a.useCallback)((function(){i(_),y(""),v(!0)}),[_,i]),P=(0,a.useCallback)((function(e){l(_,e),y(""),v(!0)}),[_,l]),O=(0,a.useMemo)((function(){return o.find((function(e){return e.key===p}))}),[o,p]);return a.createElement("div",{className:t||""},a.createElement("div",{className:"".concat(Rs," ").concat(O?Ds:"")},a.createElement("button",{className:"".concat(Hs," ").concat(h?zs:""),"data-qd-clickable":dt.vf.savedFiltersTriggerBtn,"data-qd-test":kt.b.savedFiltersTriggerBtn,disabled:r||h||!!_,onClick:r?void 0:x,tabIndex:0},a.createElement("span",{className:Vs,tabIndex:-1},a.createElement(it.xv,{className:Us,title:O?O.label:void 0},O?"Filter set applied: ".concat(O.label):"Saved Filters"),a.createElement(os.ZP,{glyph:Oo(),className:Ws,height:14,suppressSizeWarning:!0}))),Boolean(O)&&a.createElement("button",{className:Ks,"data-qd-clickable":dt.vf.savedFiltersResetBtn,"data-qd-test":kt.b.savedFiltersResetBtn,onClick:k,tabIndex:0},a.createElement("span",{className:Gs,tabIndex:-1},a.createElement(os.ZP,{glyph:Pr(),height:Ct.vg,suppressSizeWarning:!0})))),a.createElement(_i.ZP,{className:Qs,hidden:!h,onCloseAttempt:w},a.createElement(mc.ZP,null,a.createElement("ul",{className:Js},o.map((function(e){return a.createElement("li",{className:Xs,"data-key":e.key,key:e.key},a.createElement(tn.zx,{className:Ys,"data-qd-clickable":dt.vf.savedFiltersListItemBtn,"data-qd-test":kt.b.savedFiltersListItemBtn,onClick:S,text:!0},e.label),a.createElement(tn.zx,{className:$s,"data-qd-clickable":dt.vf.savedFiltersListEditBtn,icon:Os(),onClick:j}))}))))),a.createElement(Ms,{defaultValue:E?E.label:"",existingNames:C,htmlProps:tu,open:!!_,onCloseAttempt:N,onDelete:Z,onSave:P}))},tu={cancelBtn:{"data-qd-clickable":dt.vf.savedFiltersEditCancel},deleteBtn:{"data-qd-clickable":dt.vf.savedFiltersEditDelete},input:{"data-qd-clickable":dt.vf.savedFiltersEditInput},saveBtn:{"data-qd-clickable":dt.vf.savedFiltersEditSave}},nu="SavedFiltersWrapper_container__ByYYg",ru="SavedFiltersWrapper_savedFilters__by2t+",ou=(0,j.$j)((function(e,t){var n=t.problemsTabName,r=(0,v.mI)(e),o=(0,yt.Ne)(n),a=o.selectGenericFilters,i=o.selectLocationFilters;return{genericFilters:a(r),locationFilters:i(r)}}),(function(e,t){var n=t.problemsTabName;return{applyFilters:function(t,r,o){e((0,M.Nd)(t,r,n)),e((0,x.Bx)(t,o,n))}}}))((function(e){var t=e.appliedKey,n=e.applyFilters,o=e.className,i=void 0===o?"":o,l=e.genericFilters,c=e.filterSets,s=e.loading,d=void 0!==s&&s,p=e.locationFilters,m=e.setAppliedKey,f=e.setFilterSets,g=(0,T.CG)(v.L7),b=(0,a.useContext)(u.Il).environment,_=(0,a.useContext)(xc.B)===Ec.g3.all,C=c.map((function(e){return{key:e.key,label:e.label}}));(0,a.useEffect)((function(){var e,t="",n=(0,$.Z)(c);try{for(n.s();!(e=n.n()).done;){var r=e.value,o=(0,pc.An)(r.locationFilters,p),a=(0,ie.fK)(r.genericFilters,l);if(o&&a){t=r.key;break}}}catch(i){n.e(i)}finally{n.f()}m(t)}),[l,p,c,m]);var E=(0,a.useCallback)((function(){m(""),n(g,[],{}),_&&(0,Et.bt)({environment:b,hide:!1,source:"saved filters",type:"reset multiple"})}),[g,n,b,m,_]),x=(0,a.useCallback)((function(e){var t=c.find((function(t){return t.key===e}));t&&(n(g,t.locationFilters,t.genericFilters),_&&(0,Et.bt)({environment:b,hide:!1,source:"saved filters",type:"set multiple"}))}),[g,n,b,c,_]),w=(0,a.useCallback)((function(e){var t=c.filter((function(t){return t.key!==e}));(0,y.m8)("".concat(h.mp.savedFilters).concat((0,y.n$)(g)),t),f(t)}),[c,g,f]),k=(0,a.useCallback)((function(e,t){var n=c.map((function(n){return n.key===e?(0,r.Z)((0,r.Z)({},n),{},{label:t}):n}));(0,y.m8)("".concat(h.mp.savedFilters).concat((0,y.n$)(g)),n),f(n)}),[c,g,f]);return a.createElement("div",{className:"".concat(nu," ").concat(i)},!d&&!!c.length&&a.createElement(eu,{className:ru,filterNames:C,onDelete:w,onEdit:k,onReset:E,onSelect:x,selectedKey:t}))})),au=["title","titleId"];function iu(){return iu=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function cu(e,t){var n=e.title,r=e.titleId,o=lu(e,au);return a.createElement("svg",iu({width:10,height:12,viewBox:"0 0 10 12",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":r},o),n?a.createElement("title",{id:r},n):null,Rc||(Rc=a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M1.45833 0H8.51667H8.54167C9.34519 0.00468272 9.99545 0.67352 10 1.5V12L5 9.42857L0 12V1.5C0.00455264 0.67352 0.654811 0.00468272 1.45833 0ZM8.83331 1.49995C8.83331 1.33427 8.70273 1.19995 8.54165 1.19995H8.51665H1.43331C1.27223 1.19995 1.14165 1.33427 1.14165 1.49995V10.0714L4.47498 8.35709L4.99998 8.08281L5.49998 8.35709L8.83331 10.0714V1.49995Z",fill:"currentColor"})))}var su=a.forwardRef(cu),uu="SaveFilters_button__vldj1",du="SaveFilters_icon__23zpp",pu={className:"SaveFilters_tooltip__WUcMT"},mu=function(e){var t=e.className,n=void 0===t?"":t,r=e.disabled,o=void 0!==r&&r,i=e.existingNames,l=e.onSave,s=(0,a.useState)(!1),u=(0,c.Z)(s,2),d=u[0],p=u[1],m=(0,a.useCallback)((function(){p(!0)}),[]),f=(0,a.useCallback)((function(e){p(!1),l(e)}),[l]),h=(0,a.useCallback)((function(){p(!1)}),[]);return a.createElement("div",{className:n},a.createElement(un.Z,{title:"Save filters",popupProps:pu},a.createElement(tn.ZP,{"aria-label":"save filters","data-qd-clickable":dt.vf.saveFiltersBtn,"data-qd-onboarding":Yo.D.savedFilters,"data-qd-test":kt.b.saveFiltersAsBtn,className:uu,icon:su,iconClassName:du,disabled:o,onClick:m})),a.createElement(Ms,{existingNames:i,htmlProps:fu,message:"Filter set name",open:d,onCloseAttempt:h,onSave:f}))},fu={cancelBtn:{"data-qd-clickable":dt.vf.saveFiltersCancel,"data-qd-test":kt.b.saveFiltersCancel},input:{"data-qd-clickable":dt.vf.saveFiltersInput,"data-qd-test":kt.b.saveFiltersInput},saveBtn:{"data-qd-clickable":dt.vf.saveFiltersSave,"data-qd-test":kt.b.saveFiltersSave}},hu=n(36838),vu="SelectedTags_tag__zgPSN",gu="SelectedTags_button__69wow",bu="SelectedTags_icon__kuowP",_u=a.memo((function(e){var t=e.tags,n=e.onClick,r=function(e){return function(){return n(e)}};return a.createElement(a.Fragment,null,t.map((function(e){return a.createElement("div",{key:e,className:vu},e,a.createElement(tn.ZP,{className:gu,"data-qd-clickable":dt.vf.tagFilterDeselectTagBtn,onClick:r(e),text:!0},a.createElement(os.ZP,{glyph:Pr(),size:Ct.vg,suppressSizeWarning:!0,className:bu})))})))})),yu="TagFilters_container__u3sMm",Cu="TagFilters_title__i-wmS",Eu="TagFilters_selectLabel__Eq+ap",xu="TagFilters_selectContainer__SArfX",wu="TagFilters_selectPopup__llzUS",ku="TagFilters_disabled__Rmb7j",Su=(0,j.$j)((function(e,t){var n=t.problemsTabName,r=(0,v.mI)(e),o=(0,yt.Ne)(n),a=o.selectComparedProblems,i=o.selectRepresentedTagFilters;return{comparedProblems:a(r),tagFilters:i(r)}}),(function(e,t){var n=t.problemsTabName;return{applyFilters:function(t,r){return e((0,M.V_)(t,r,n))}}}))((function(e){var t=e.applyFilters,n=e.comparedProblems,r=e.tagFilters,o=e.loading,i=(0,T.CG)(v.L7),l=(0,a.useContext)(u.Il).environment,s=(0,a.useContext)(xc.B)===Ec.g3.all,d=(0,a.useState)([]),p=(0,c.Z)(d,2),m=p[0],f=p[1],h=(0,a.useMemo)((function(){return(0,hu.Y)(n).map((function(e){return{label:e,key:e,disabled:!1}}))}),[n]);return(0,a.useEffect)((function(){var e=h.filter((function(e){return-1===r.indexOf(e.label)}));f(e)}),[h,r]),0===h.length?null:a.createElement("div",{className:"".concat(yu," ").concat(o?ku:"")},a.createElement("span",{className:Cu},"Tags:"),a.createElement(_u,{tags:r,onClick:function(e){f([].concat((0,Y.Z)(m),[{label:e,key:e,disabled:!1}]));var n=r.filter((function(t){return t!==e}));t(i,n)}}),m.length>0&&a.createElement(Pa.P,{classNames:{container:xu,label:Eu,popup:wu},disabled:o,htmlProps:{list:{"data-qd-clickable":dt.vf.tagFilterAddTag},triggerBtn:{"data-qd-clickable":dt.vf.tagFilterOpenAddTagSelect,"data-qd-test":kt.b.tagFilter}},noChevron:!0,onSelect:function(e){s&&(0,Et.bt)({environment:l,type:"tag",hide:!1,source:"filters"});var n=[].concat((0,Y.Z)(r),[e]);t(i,n)},options:m,search:!0,selectName:"+ Add tag",showSelectedTooltip:!1}))})),ju=Su,Nu=(0,j.$j)((function(e,t){var n=t.problemsTabName,r=(0,v.mI)(e),o=(0,yt.Ne)(n),a=o.selectGenericFilters,i=o.selectLocationFilters,l=o.selectSunburstArray;return{genericFilters:a(r),locationFilters:i(r),orderedLevels:r.orderedLevels,sunburstArray:l(r)}}),{setOrderedLevels:w.r})((function(e){var t=e.disableReorder,n=void 0!==t&&t,o=e.disableSavedFilters,i=void 0!==o&&o,l=e.setOrderedLevels,s=e.genericFilters,u=e.loading,d=void 0!==u&&u,p=e.locationFilters,m=e.orderedLevels,f=e.problemsTabName,g=e.reorderState,b=e.setReorderState,_=e.sunburstArray,C=(0,T.CG)(v.L7),E=(0,a.useState)(""),x=(0,c.Z)(E,2),w=x[0],k=x[1],S=(0,a.useState)((0,y.fp)("".concat(h.mp.savedFilters).concat((0,y.n$)(C)))||[]),j=(0,c.Z)(S,2),N=j[0],Z=j[1],P=N.map((function(e){return e.label})),O=!(!Object.keys(s).length&&!p.length),L=(0,a.useCallback)((function(e){b((function(t){return(0,r.Z)((0,r.Z)({},t),{},{reordering:!1,triggeredByMouse:0!==e.detail})}))}),[b]),I=(0,a.useCallback)((function(e){b((function(t){return{reordering:!1,savedOrderedLevels:m,triggeredByMouse:0!==e.detail}}))}),[m,b]),A=(0,a.useCallback)((function(e){b((function(t){return(0,r.Z)((0,r.Z)({},t),{},{reordering:!0,triggeredByMouse:0!==e.detail})}))}),[b]),B=(0,a.useCallback)((function(){l(C,ja.rp)}),[C,l]),q=(0,a.useCallback)((function(e){var t={genericFilters:s,key:(0,Xl.Z)(),label:e,locationFilters:p},n=[].concat((0,Y.Z)(N),[t]);(0,y.m8)("".concat(h.mp.savedFilters).concat((0,y.n$)(C)),n),Z(n)}),[N,s,p,C]);return a.createElement("div",{"data-qd-test":kt.b.filtersContainer,className:fc},!i&&a.createElement(ou,{appliedKey:w,className:hc,filterSets:N,loading:d,setAppliedKey:k,setFilterSets:Z,problemsTabName:f}),a.createElement(ks,{className:vc,loading:d,problemsTabName:f}),a.createElement("div",{className:gc},a.createElement(mc.ZP,{disabled:!g.reordering||g.triggeredByMouse},a.createElement(Dc,{disabled:!_.length,disableReorder:n,loading:d,reordering:g.reordering,problemsTabName:f}),a.createElement(ju,{loading:d,problemsTabName:f}),a.createElement(ts,{loading:d,problemsTabName:f}),a.createElement("div",{className:yc},!g.reordering&&!i&&a.createElement(mu,{className:bc,disabled:d||!O||!!w,existingNames:P,onSave:q}),!n&&a.createElement(Zs,{className:_c,disabled:!_.length||d,handleCancel:L,handleDone:I,handleReorder:A,handleResetOrder:B,isDefaultOrder:(0,pc.Dv)(m,ja.rp),isSavedOrder:(0,pc.Dv)(m,g.savedOrderedLevels),reordering:g.reordering})))))})),Zu=Nu,Pu="FiltersSkeleton_container__0te5L",Ou="FiltersSkeleton_row__QcaQd",Tu="FiltersSkeleton_buttonsRow__EL9M9";function Lu(){return a.createElement("div",{className:Pu},a.createElement("div",null,a.createElement("div",{className:Ou},a.createElement(Kt.O,{width:150,height:20})),a.createElement("div",{className:Ou},a.createElement(Kt.O,{width:160,height:20})),a.createElement("div",{className:Ou},a.createElement(Kt.O,{width:100,height:20})),a.createElement("div",{className:Ou},a.createElement(Kt.O,{width:200,height:20})),a.createElement("div",{className:Ou},a.createElement(Kt.O,{width:175,height:20})),a.createElement("div",{className:Tu})))}var Iu=n(87920),Au=n(65133),Bu=n(9339),qu=n(80229),Fu=n(88841),Mu=n(89758),Ru="CircleMessage-module_circle__2-k48",Du="CircleMessage-module_textContainer__h1L7m",Hu="CircleMessage-module_primaryMessage__lAxW6",zu="CircleMessage-module_secondaryMessage__HCic6";(0,Mu.Z)(".CircleMessage-module_circle__2-k48 {\n\tfont-family: var(--qd-font-family);\n\tborder-radius: 50%;\n\tborder-color: var(--qd-color-circle-message);\n\tbox-sizing: border-box;\n\tposition: relative;\n\n\ttransition: border-color 0.2s;\n}\n\n.CircleMessage-module_textContainer__h1L7m {\n\ttext-align: center;\n\n\tposition: absolute;\n\tleft: 50%;\n\ttop: 50%;\n\ttransform: translate(-50%, -28%);\n}\n\n.CircleMessage-module_primaryMessage__lAxW6 {\n\twhite-space: nowrap;\n\tpadding: 0;\n}\n\n.CircleMessage-module_secondaryMessage__HCic6 {\n\tfont-style: normal;\n\tfont-weight: normal;\n\n\ttext-align: center;\n\tcolor: var(--qd-color-grey);\n\tmargin: 4px 0 0;\n\tline-height: 20px;\n}\n\n.CircleMessage-module_storybookDiv__2J-Dq {\n\tdisplay: flex;\n}\n\n.CircleMessage-module_storybookDiv__2J-Dq > div {\n\tmargin: 8px;\n}\n",{insertAt:"top"});var Vu=function(e){var t=e.className,n=void 0===t?"":t,r=e.color,o=void 0===r?"":r,a=e.primaryMessage,i=void 0===a?"0":a,l=e.secondaryMessage,c=void 0===l?"Nothing to display":l,s=e.size,u=s/50,d={borderColor:"".concat(o||null),borderStyle:"solid",borderWidth:"".concat(u,"px"),height:"".concat(s,"px"),width:"".concat(s,"px")},p={fontSize:"".concat((s-u)/20,"px"),height:"".concat((s-u)/3,"px"),width:"".concat((s-u)/1.4,"px")};return(0,Iu.jsx)("div",{className:"".concat(Ru," ").concat(n),style:d,children:(0,Iu.jsxs)("section",{className:Du,style:p,children:[(0,Iu.jsx)(Fu.H1,{className:Hu,children:i}),(0,Iu.jsx)("p",{className:zu,children:c})]})})},Wu=n(22951),Uu=n(91976),Ku=n(47169),Gu=n(67591),Qu=n(99492),Ju=n(27597),Xu=n(97503),Yu=n(57281),$u=n(99769),ed=n(54315),td=n(73210),nd=n(56794),rd=n(44956),od=function(e,t,n){return(0,qu.Z)().domain([1,n]).range([e,t])};function ad(e,t){var n="undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"===typeof e)return id(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return id(e,t)}(e))||t&&e&&"number"===typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,i=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return i=e.done,e},e:function(e){l=!0,a=e},f:function(){try{i||null==n.return||n.return()}finally{if(l)throw a}}}}function id(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n .CenterInfo-module_zoomOutText__HXZCX {\n\tborder-radius: 2px;\n\tbox-shadow: var(--qd-focus-box-shadow);\n}\n",{insertAt:"top"});var bd=n(66711),_d=(0,Fu.Ym)("div",(function(e){return e.count<9999999?bd.Z.accentText:bd.Z.heading1})),yd=function(e){var t=e.count,n=e.style,r=(0,Ze.hD)(t.toString(),3);return(0,Iu.jsx)(_d,{className:hd,count:t,style:n,children:r})},Cd=a.memo((function(e){var t=e.customMessage,n=e.diagramRadius,r=e.interactive,o=e.isLastLevel,i=e.level,l=e.nodes,c=e.numberColor,s=void 0===c?"#000":c,u=e.size,d=e.zoomOut,p=e["data-qd-test"],m=(0,a.useMemo)((function(){var e=2.15*u;return{fontSize:.22*u,height:1.6*u,left:n-e/2,top:n-u/2,width:e}}),[u,n]),f=new Set(l.map((function(e){return e.name}))),h=Array.from(f),v=h.join(", "),g=(0,a.useMemo)((function(){return l.map((function(e){return e.size})).reduce((function(e,t){return e+t}))}),[l]),b=(0,a.useCallback)((function(){d()}),[d]);return(0,Iu.jsxs)("div",{className:dd,"data-qd-test":p,style:m,children:[(0,Iu.jsx)(yd,{"data-qd-test":p?"".concat(p,"__problems-num"):void 0,style:{color:s},count:g}),!o&&(0,Iu.jsx)("div",{className:md,style:{marginTop:u/15},children:"none"!==i?(0,Iu.jsxs)("div",{title:(0,Ze.IL)(i)+": "+v,children:[(0,Iu.jsxs)("span",{children:[(0,Ze.IL)(i),":"]}),h.length>1?(0,Iu.jsxs)("span",{children:[" ",h.length]}):(0,Iu.jsx)("div",{className:fd,"data-qd-test":p?"".concat(p,"__filter-values"):void 0,children:v})]}):t&&(0,Iu.jsx)("div",{className:pd,title:t,children:t})}),r&&"none"!==i&&(0,Iu.jsx)("button",{"data-qd-test":p?"".concat(p,"__zoom-out-button"):void 0,className:vd,onClick:b,tabIndex:0,children:(0,Iu.jsx)("span",{className:gd,tabIndex:-1,children:"Zoom Out"})})]})}));function Ed(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function xd(e){for(var t=1;t=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,i=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return i=e.done,e},e:function(e){l=!0,a=e},f:function(){try{i||null==n.return||n.return()}finally{if(l)throw a}}}}function kd(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n20?20+.08*i:i,c=0;ca){var l=Math.max(Math.ceil(a/i)-3,0);return r.slice(0,l)?r.slice(0,l)+"...":""}return r}}],[{key:"countAvgCharSpaces",value:function(e,t){var n,r="bcdefghijklmmopqrstuvwxyzABCDMM",o=[],a=e.getContext("2d"),i=wd(t);try{for(i.s();!(n=i.n()).done;){var l=n.value,c=window.getComputedStyle(e.parentElement).getPropertyValue("font-family");a.font="".concat(l.fontSize,"px ").concat(c);var s=a.measureText(r).width,u=Math.ceil(s/r.length);o.push(xd(xd({},l),{},{avgCharWidth:u}))}}catch(d){i.e(d)}finally{i.f()}return o}}]),e}(),jd="SunburstCircles-module_diagram__Ixh3r",Nd="SunburstCircles-module_notInteractive__6gM-A",Zd="SunburstCircles-module_arc__3EQW3",Pd="SunburstCircles-module_pathWrapper__Ik-R5",Od="SunburstCircles-module_shadowedArc__lf5kW",Td="SunburstCircles-module_hoveredArc__bHXTx",Ld="SunburstCircles-module_hiddenArc__yTrjA",Id="SunburstCircles-module_middleLineArc__HTjYk",Ad="SunburstCircles-module_arcTextPath__cdH3d";function Bd(e){var t=function(){if("undefined"===typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"===typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=(0,Ju.Z)(e);if(t){var o=(0,Ju.Z)(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return(0,Qu.Z)(this,n)}}(0,Mu.Z)(".SunburstCircles-module_diagram__Ixh3r {\n\tfont-family: var(--qd-font-family);\n\tposition: relative;\n}\n\n.SunburstCircles-module_diagram__Ixh3r * {\n\ttext-align: center;\n}\n\n.SunburstCircles-module_notInteractive__6gM-A {\n\tpointer-events: none !important;\n}\n\n.SunburstCircles-module_arc__3EQW3 {\n\tfill-opacity: 0.9;\n\ttransition: fill-opacity 0.5s;\n\tcursor: pointer;\n}\n\n.SunburstCircles-module_pathWrapper__Ik-R5 {\n}\n\n.SunburstCircles-module_shadowedArc__lf5kW {\n\tfill-opacity: 0.5;\n}\n\n.SunburstCircles-module_hoveredArc__bHXTx {\n\tfill-opacity: 1;\n}\n\n.SunburstCircles-module_hiddenArc__yTrjA {\n\ttransition: fill-opacity 0.75s;\n\tfill-opacity: 0;\n\tpointer-events: none;\n}\n\n.SunburstCircles-module_middleLineArc__HTjYk {\n\tvisibility: hidden;\n}\n\n.SunburstCircles-module_arcTextPath__cdH3d {\n\tpointer-events: none;\n\tdominant-baseline: middle;\n\ttext-anchor: middle;\n\tfill: var(--qd-color-black);\n}\n",{insertAt:"top"});var qd=Object.freeze({in:0,inner:0,out:0}),Fd=function(e){(0,Gu.Z)(n,e);var t=Bd(n);function n(e){var r;return(0,Wu.Z)(this,n),r=t.call(this,e),(0,bt.Z)((0,Ku.Z)(r),"canvasRef",void 0),(0,bt.Z)((0,Ku.Z)(r),"centerWrapperRef",void 0),(0,bt.Z)((0,Ku.Z)(r),"containerRef",void 0),(0,bt.Z)((0,Ku.Z)(r),"svgWrapperRef",void 0),(0,bt.Z)((0,Ku.Z)(r),"sunburstId",void 0),(0,bt.Z)((0,Ku.Z)(r),"arcsScale",void 0),(0,bt.Z)((0,Ku.Z)(r),"fontSystem",void 0),(0,bt.Z)((0,Ku.Z)(r),"centerWrapper",void 0),(0,bt.Z)((0,Ku.Z)(r),"container",void 0),(0,bt.Z)((0,Ku.Z)(r),"currentDisplayedNodes",void 0),(0,bt.Z)((0,Ku.Z)(r),"centerMessage",void 0),(0,bt.Z)((0,Ku.Z)(r),"rootNode",void 0),(0,bt.Z)((0,Ku.Z)(r),"g",void 0),(0,bt.Z)((0,Ku.Z)(r),"svg",void 0),(0,bt.Z)((0,Ku.Z)(r),"tooltip",void 0),(0,bt.Z)((0,Ku.Z)(r),"zoomOut",(function(){r.props.handleClick(r.rootNode)})),(0,rd.eR)(),r.canvasRef=a.createRef(),r.centerWrapperRef=a.createRef(),r.containerRef=a.createRef(),r.svgWrapperRef=a.createRef(),r.fontSystem=new Sd,r.currentDisplayedNodes=r.props.currentNodes,r.centerMessage=r.props.centerMessage,r.rootNode=function(e){for(var t=e[0];t.depth>0;)t.parent&&(t=t.parent);return t}(r.props.currentNodes),r.sunburstId=(0,Xl.Z)(),r}return(0,Uu.Z)(n,[{key:"componentDidMount",value:function(){this.container=(0,ed.Z)(this.containerRef.current),this.centerWrapper=(0,ed.Z)(this.centerWrapperRef.current),this.fontSystem.countProperties(this.canvasRef.current,this.props.centerDiameter,this.props.orderedLevels.length,this.props.size),this.props.animateMount&&(this.container.style("opacity",0),this.animateContainerIn()),this.addTooltip(),this.createSunburst(),this.redrawOn(qd)}},{key:"componentDidUpdate",value:function(e){var t=this;if(e.orderedLevels!==this.props.orderedLevels&&this.fontSystem.countProperties(this.canvasRef.current,this.props.centerDiameter,this.props.orderedLevels.length,this.props.size),e.cookedData!==this.props.cookedData){this.runAnimatedDestructor((function(){t.animateContainerIn(),t.createSunburst(),t.rootNode=t.props.cookedData,t.redrawOn(qd)}))}else(function(e,t){if(e.length!==t.length)return!1;for(var n=0;n=o&&t.children.forEach((function(t){t.data.priority=t.parent.data.priority,t.data.color=t.parent.data.color,e(t)}))}}(e)}(n,0,t),this.createArcs(),r&&this.writeText(),this.svg.classed(Nd,!o),o&&this.setArcEventHandlers(),this.centerWrapper.style("pointer-events","none")}},{key:"addTooltip",value:function(){var e=this.svgWrapperRef.current;if(e&&e.parentElement){var t,n=e.parentElement.parentElement;this.tooltip=new ud.u(n,this.props.tooltipWidth,null===(t=this.props.testAttributes)||void 0===t?void 0:t.arcTooltip)}}},{key:"redrawOn",value:function(e){var t=this,n=this.props.currentNodes[0].depth,r=this.props.currentNodes[0].data.isLastLevel,o=this.g.selectAll("path");this.updateCenter(e),o.classed(Ld,(function(e){return Md(e,n,r)}));var a=this.props.currentNodes[0].children?this.props.currentNodes[0].y0:this.props.currentNodes[0].y0*this.props.currentNodes[0].y0,i=(0,Yu.Z)(this.arcsScale.y.domain(),[a,1]);this.svg.selectAll("path.".concat(Zd)).transition("redraw-main").delay(e.in).duration(e.inner).tween("arcsScale",(function(){return function(e){return t.arcsScale.y.domain(i(e))}})).attrTween("d",(function(e){return t.tweenData(e)})),this.props.displayArcsLabels&&this.rewriteText(e)}},{key:"updateCenter",value:function(e){var t=this;this.centerWrapper.transition("center-in").duration(e.in).style("opacity",0).style("pointer-events","auto").on("end",(function(){t.currentDisplayedNodes=t.props.currentNodes,t.centerMessage=t.props.centerMessage,t.forceUpdate(),t.centerWrapper.transition("center-out").delay(e.inner).duration(e.out).style("pointer-events","none").style("opacity",1)}))}},{key:"displayHover",value:function(){var e=this.props.hoveredNodes.map((function(e){return e.data.id}));this.g.selectAll("g path.".concat(Zd)).classed(Od,(function(t){return e.length&&!e.includes(t.data.id)})).classed(Td,(function(t){return e.includes(t.data.id)}))}},{key:"runAnimatedDestructor",value:function(e){var t=this;this.container.transition("all-disappear").duration(this.props.reappearPhases.out).style("opacity",0).on("end",(function(){if(t.svg){var n=t.svg.selectAll("*");null!==n&&n.remove()}e&&e()}))}},{key:"animateContainerIn",value:function(){this.container.transition("all-wait-appear").delay(this.props.reappearPhases.inner).duration(this.props.reappearPhases.in).style("opacity",this.props.disabled?.6:1)}},{key:"prepareGround",value:function(){this.setSvg(),this.setHoverCircle(),this.setGroup()}},{key:"setArcsScale",value:function(){var e=this.props.size/2-this.props.centerDiameter,t=(0,qu.Z)().domain([0,1]).range([0,2*Math.PI]).clamp(!0),n=(0,qu.Z)().domain([0,1]).range([this.props.centerDiameter,e+this.props.centerDiameter]);this.arcsScale={x:t,y:n}}},{key:"createArcs",value:function(){var e,t=this,n=this.props.cookedData.descendants();this.g.selectAll("g").data((function(){return"none"===n[0].data.group?n.slice(1):n})).enter().append("g").classed(Pd,!0).append("path").attr("d",(function(e){return t.generateArc(e)})).attr("id",(function(e){return"arc-".concat(t.sunburstId,"-").concat(e.data.id)})).attr("data-qd-test",null===(e=this.props.testAttributes)||void 0===e?void 0:e.arc).classed(Zd,!0).style("fill",(function(e){return e.data.color}))}},{key:"writeText",value:function(){var e,t=this,n=this.props.cookedData.descendants();this.g.selectAll("g").data((function(){return"none"===n[0].data.group?n.slice(1):n})).append("path").attr("d",(function(e){return t.setMiddleArcLine(e)})).classed(Id,!0).attr("id",(function(e){return"hidden-arc-".concat(t.sunburstId,"-").concat(e.data.id)})),this.g.selectAll("g").append("text").append("textPath").attr("data-qd-test",null===(e=this.props.testAttributes)||void 0===e?void 0:e.arcText).attr("startOffset","50%").attr("href",(function(e){return"#hidden-arc-".concat(t.sunburstId,"-").concat(e.data.id)})).classed(Ad,!0).attr("font-size","".concat(this.fontSystem.properties[0].fontSize,"px")).text((function(e){return t.fontSystem.sliceText(t.arcsScale,e,e.data.name)}))}},{key:"setArcEventHandlers",value:function(){var e=this,t=this.props,n=t.entitiesName,r=t.handleClick,o=t.handleMouseOver;this.g.selectAll("g path.".concat(Zd)).on("click",r).on("mouseover",o).on("mousemove",(function(t){var r=ld(t).reverse().slice(1).reduce((function(e,t){return"".concat(e," / ").concat(t.data.name)}),"").slice(2),o="".concat((0,Ze.hD)("".concat(t.data.size),3),"\t\t\t").concat(t.data.size>1?n.multiple:n.single);e.tooltip.mousemove(td.B,{text:r},{text:o,isBold:!0})})).on("mouseleave",this.tooltip.mouseleave),this.svg.on("mouseleave",(function(){e.tooltip.mouseleave(),o(null)})),this.svg.select("#hover-circle-".concat(this.sunburstId)).on("mouseleave",(function(){return o(null)}))}},{key:"generateArc",value:function(e){var t=this.arcsScale,n=t.x,r=t.y,o=this.props.currentNodes[0].depth,a=.5+.1*o;return(0,nd.Z)().startAngle((function(e){return n(e.x0)})).endAngle((function(e){return n(e.x1)})).innerRadius((function(e){return r(e.y0)+a})).outerRadius((function(e){return r(e.y1)-a})).padAngle(.02).padRadius((function(){return 50+15*o}))(e)}},{key:"setMiddleArcLine",value:function(e){var t=this.arcsScale,n=t.x,r=t.y,o=Math.PI/2,a=[n(e.x0)-o,n(e.x1)-o],i=Math.max(0,(r(e.y0)+r(e.y1))/2),l=(a[1]+a[0])/2,c=l>0&&l=0;o--){if("break"===r(o))break}for(var a=0;a=0;l--){if(h[_[l]]&&!h[_[l]].includes(i.data.name)){t[a]=null;break}i=i.parent}var c=t.filter((function(e){return e}));!Object.keys(h).length||c.length?z(c.length?c:[I]):z(Wd)}return null}),[I,h,_,z]);var U={animateMount:n,arcColors:r,centerDiameter:P,centerMessage:i,cookedData:I,currentNodes:D,disabled:s,displayArcsLabels:d,entitiesName:f,handleClick:V,handleMouseOver:W,hoveredNodes:q,interactive:g,numberColor:b,orderedLevels:_,reappearPhases:O,redrawPhases:T,size:S,tooltipWidth:j,testAttributes:Z};return D.length&&_.length?(0,Iu.jsx)(Fd,function(e){for(var t=1;t1?"s":""," are excluded. To apply the changes, download the\xa0",a.createElement("span",{className:tp},"qodana.yaml"),", put it to the root folder of your project and restart Qodana."),a.createElement(kr.n,{variant:"primary"}))}));np.displayName="ExcludeSanityModal";var rp=(0,j.$j)((0,_t.t)((function(e){var t=Eo.vV.selectAppliedExclusionProblems,n=Eo.vV.selectFixedProblems,r=Eo.vV.selectNewProblemsCount,o=Eo.HH.selectInitialAllProblems;return{allProblems:t(e),fixedProblems:n(e),newProblemsCount:r(e),sanityProblemsCount:o(e).length,showingNew:e.info.showingNew}}))),op=function(e){var t=e.goToChecks;return a.createElement(a.Fragment,null,"No problems found according to the\xa0",a.createElement(ft.zx,{onClick:t,className:sc,variant:"clear"},"checks"),"\xa0applied")},ap=rp((function(e){var t=e.allProblems,n=e.fixedProblems,r=e.goToChecks,o=e.loading,i=e.newProblemsCount,l=e.onChangeShowingSanityModal,c=e.sanityProblemsCount,s=e.showingNew,u=e.showingExcludeSanityModal,d=!1,p=!1,m=!1;o||(d=!!s&&(!!t.length&&!i&&!!n.length),p=!!s&&(!!t.length&&!i&&!n.length),m=s?!!i:!!t.length);var f=Ct.Xg;p&&(f=Ct.yr);var h=ja.mK.primary,v=a.createElement(op,{goToChecks:r});return(d||p)&&(h=ja.z6.primary,v=ja.z6.secondary),a.createElement(a.Fragment,null,a.createElement("div",{className:cc},a.createElement(Yd,{color:f,gotProblems:m,loading:o,primaryMessage:h,problemsTabName:"actual",secondaryMessage:v}),a.createElement(np,{onClose:l,opened:u,problemsCount:c})),a.createElement(lc,{problemsTabName:"actual",loading:o}))})),ip=(0,j.$j)((0,_t.t)((function(e){return{allProblemsHashes:(0,Eo.vV.selectInitialProblemsHashes)(e),baseline:Eo.oJ.selectAppliedExclusionProblems(e),currentBaselineProblemsHashes:(0,B.w5)(e)}})),(function(e){return{addAllProblemsToBaseline:function(t,n){return e((0,M._P)(t,n))}}}))((function(e){var t=e.loading,n=e.baseline,r=e.allProblemsHashes,o=e.addAllProblemsToBaseline,i=e.currentBaselineProblemsHashes,l=(0,T.CG)(v.L7);return t||0!==n.length?a.createElement(a.Fragment,null,a.createElement("div",{className:cc},a.createElement(Yd,{color:Ct.Xg,gotProblems:0!==n.length,primaryMessage:ja.GJ.primary,secondaryMessage:ja.GJ.secondary,loading:t,problemsTabName:"baseline"})),a.createElement(lc,{problemsTabName:"baseline",loading:t})):a.createElement("div",{className:uc},a.createElement("div",null,"You haven\u2019t set the Baseline yet.",a.createElement("br",null),"Using the Baseline feature you can hide problems which you\u2019re not going to solve in the nearest future. You can select problems",a.createElement("br",null),"you want to put to the baseline manually or move all actual problems to the baseline.\xa0",a.createElement(lt.ZP,{href:ut.pp},"Learn more")," in the Documentation."),a.createElement(ft.zx,{className:dc,variant:"primary",onClick:function(){o(l,[].concat((0,Y.Z)(r),(0,Y.Z)(Array.from(i))))}},"Move problems to baseline"))})),lp=n(62173),cp='\n\n\n \n \t\n \tLicenses export - Qodana\n \t\n\t\n \n $CONTENT\n \n\n';function sp(e,t,n){var r=1===e.size&&e.has("");switch(t){case"csv":case"html":var o=[];return o.push(["Dependency","License key","License name"]),r||o[0].unshift("Module path"),n&&(o[0]=o[0].concat("License homepage","License full text")),e.forEach((function(e,t){e.forEach((function(e){var a=(0,c.Z)(e,2),i=a[0];a[1].forEach((function(e){var a=[i.name,e.key,e.name||""];r||a.unshift(t),n&&(a=a.concat([e.homepageUrl||"",e.text||""])),o.push(a)}))}))})),"csv"===t?function(e){return e.map((function(e){return e.map((function(e){return'"'.concat(e.replace(/"/g,'""'),'"')})).join(",")})).join("\r\n")}(o):function(e){var t=(0,lp.Z)(e),n=t[0],r=t.slice(1),o="".concat(n.map((function(e){return"".concat(e,"")})).join(""),""),a="".concat(r.map((function(e){return"".concat(e.map((function(e){return function(e){var t=document.createTextNode(e),n=document.createElement("td"),r=document.createElement("pre");return r.appendChild(t),n.appendChild(r),n.outerHTML}(e)})).join(""),"")})).join("\n"),"");return cp.replace("$CONTENT","".concat(o).concat(a,"
    "))}(o);case"json":var a={};return e.forEach((function(e,t){var r={};e.forEach((function(e){var t=(0,c.Z)(e,2),o=t[0],a=t[1];return r[o.name]=a.map((function(e){return n?e:{key:e.key,name:e.name}}))})),a[t]=r})),r?JSON.stringify(a[""],void 0,2):JSON.stringify(a,void 0,2);default:throw new Error("Not implemented yet")}}var up,dp=n(52368),pp=["title","titleId"];function mp(){return mp=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function hp(e,t){var n=e.title,r=e.titleId,o=fp(e,pp);return a.createElement("svg",mp({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":r},o),n?a.createElement("title",{id:r},n):null,up||(up=a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M9.919 4.582H9.922C9.328 4.178 8.621 3.975 7.903 4.003C7.356 3.984 6.814 4.126 6.346 4.411C5.641 4.902 5.236 5.722 5.276 6.58H6.829C6.831 6.275 6.921 5.977 7.088 5.722C7.285 5.434 7.622 5.274 7.97 5.308C8.298 5.269 8.624 5.394 8.841 5.644C8.997 5.859 9.081 6.12 9.079 6.387C9.08 6.621 9.005 6.849 8.865 7.036C8.779 7.158 8.675 7.266 8.555 7.354L8.163 7.66C7.862 7.863 7.615 8.137 7.445 8.458C7.326 8.865 7.269 9.287 7.274 9.712H8.731C8.725 9.498 8.749 9.285 8.801 9.078C8.876 8.852 9.02 8.654 9.212 8.513L9.593 8.219C9.885 8.008 10.148 7.759 10.375 7.478C10.614 7.134 10.736 6.721 10.723 6.301C10.765 5.629 10.462 4.981 9.919 4.582ZM7.273 12H8.777V10.547H7.273V12ZM8 14.6C4.36 14.6 1.4 11.64 1.4 8C1.4 4.36 4.36 1.4 8 1.4C11.64 1.4 14.6 4.36 14.6 8C14.6 11.64 11.64 14.6 8 14.6ZM8 0C3.582 0 0 3.582 0 8C0 12.418 3.582 16 8 16C12.418 16 16 12.418 16 8C16 3.582 12.418 0 8 0Z",fill:"#4B9BE6"})))}var vp,gp=a.forwardRef(hp),bp="ExportButton_title__OLZ-d",_p="ExportButton_popup__KfZDx",yp="ExportButton_items__JsZFp",Cp="ExportButton_selectItem__EXApX",Ep="ExportButton_separator__brJV8",xp="ExportButton_checkUnit__NOx+w",wp="ExportButton_helpIcon__U7w-i",kp="ExportButton_helpBtn__omUfO",Sp="ExportButton_downloadButton__-wKQB",jp="ExportButton_downloadButton_isActive__dx6eD",Np="ExportButton_icon__BhnmT",Zp="ExportButton_tooltipPopup__NKoKW",Pp=function(){return a.createElement(gp,{width:11,height:11,viewBox:"0 0 16 16",className:wp})},Op=(0,j.$j)((0,_t.t)((function(e){return{comparisonModeAvailable:e.info.showingNew}})))((function(e){var t=e.comparisonModeAvailable,n=e.onExport,r=(0,a.useState)(!1),o=(0,c.Z)(r,2),i=o[0],l=o[1],s=(0,a.useState)(!1),u=(0,c.Z)(s,2),d=u[0],p=u[1],m=(0,a.useState)(!1),f=(0,c.Z)(m,2),h=f[0],v=f[1],g=(0,a.useCallback)((function(){return l((function(e){return!e}))}),[]),b=(0,a.useCallback)((function(){return l(!1)}),[]),_=(0,a.useCallback)((function(e){return p(e.currentTarget.checked)}),[]),y=(0,a.useCallback)((function(e){return v(e.currentTarget.checked)}),[]),C=function(e){return function(){var t=document.createElement("a");t.href="data:text/plain;charset=utf-8,".concat(encodeURIComponent(n(e,h))),t.download="licenses.".concat(e),t.click()}};return a.createElement("div",null,a.createElement(tn.zx,{className:"".concat(Sp," ").concat(i?jp:""),onClick:g,"data-test":"ExportButton__Button"},a.createElement(dp.Z,{className:Np})),a.createElement(_i.ZP,{"data-test":"ExportButton__Popup",className:_p,hidden:!i,onCloseAttempt:b},a.createElement(mc.ZP,null,a.createElement("section",null,a.createElement("div",{className:bp},"Export as"),a.createElement("ul",{className:yp},a.createElement("li",null,a.createElement(tn.zx,{className:Cp,onClick:C("html"),text:!0},"HTML")),a.createElement("li",null,a.createElement(tn.zx,{className:Cp,onClick:C("csv"),text:!0},"CSV")),a.createElement("li",null,a.createElement(tn.zx,{className:Cp,onClick:C("json"),text:!0},"JSON"))),a.createElement("div",{className:Ep}),t&&a.createElement("div",{className:xp},a.createElement(di.Z,{checked:d,onChange:_,disabled:!0,label:"Export in comparison mode"}),a.createElement(un.Z,{title:"Only new and absence licenses in the compared build will be downloaded. (Not available yet)",popupProps:{className:Zp}},a.createElement(tn.zx,{className:kp,icon:Pp}))),a.createElement("div",{className:xp},a.createElement(di.Z,{checked:h,onChange:y,label:"Export with comments"}),a.createElement(un.Z,{title:"The license list will include all additional data which were stored regarding the certain license.",popupProps:{className:Zp}},a.createElement(tn.zx,{className:kp,icon:Pp})))))))})),Tp="Controls_container__jl7On",Lp="Controls_controls__wxlqw",Ip="Controls_search__yrcEY",Ap="Controls_buttonSelect__bS8Ht",Bp="Controls_popup__p1j47",qp=function(e){var t=e.modules,n=e.onChangeToggle,r=e.onSelectOption,o=e.onChangeSearch,i=e.search,l=e.defaultSelectedOption,c=e.dependencies,s=(0,a.useMemo)((function(){var e=function(e){var t,n=[],r=(0,$.Z)(e);try{for(r.s();!(t=r.n()).done;){var o=t.value,a=o.licenses;a.length>0&&n.push([{name:"".concat(o.name," ").concat(o.version),homepageUrl:o.homepageUrl},a])}}catch(i){r.e(i)}finally{r.f()}return(new Map).set("",n)}(c);return function(t,n){return sp(e,t,n)}}),[c]);return a.createElement("div",{className:Tp},a.createElement("div",{className:Lp},a.createElement(br.Z,{className:Ap,data:t,minWidth:160,onSelect:function(e){e&&r(e)},popupClassName:Bp,selected:l,type:br.Z.Type.BUTTON}),a.createElement(ft.xP,{"aria-label":"search for module, license or resource",className:Ip,htmlProps:Fp,onChange:o,placeholder:"Search",value:i}),a.createElement(dn.Z,{htmlProps:Mp,onChange:n,label:Rp})),a.createElement("div",null,a.createElement(Op,{onExport:s})))},Fp={"data-qd-test":kt.b.projectAuditLicenseListSearch},Mp={"data-qd-test":kt.b.projectAuditLicenseListOnlyAlertedToggle},Rp={text:"Only alerted",position:"r"},Dp="EmptyProjectAuditHint_skeleton__zeI9M",Hp="EmptyProjectAuditHint_toggleInspectionSection__Pzh3f",zp="EmptyProjectAuditHint_alertMessage__RqsBL",Vp="CheckDependencyLicenses",Wp=function(){var e=At(),t=(0,T.CB)((function(e){return(0,A.tq)(e.inspections)})),n=(0,T.CB)((function(e){return(0,A.DP)(e.inspections)})),r=(0,T.CB)((function(e){return e.profile.changedContent})),o=r.includedChecks,i=r.excludedChecks,l=(0,a.useMemo)((function(){var e=n.find((function(e){return e.shortName===Vp}));return e?[e,i.includes(e.shortName)||o.includes(e.shortName)]:[void 0,!1]}),[n,i,o]),s=(0,c.Z)(l,2),u=s[0],d=s[1];return a.createElement("div",{className:zp},t&&a.createElement(Kt.O,{className:Dp}),!t&&u&&a.createElement(a.Fragment,null,"To get details about the main and third-party licenses Qodana, enable"," ",a.createElement("b",null,Vp)," inspection.",a.createElement("div",{className:Hp},d?a.createElement(a.Fragment,null,"Inspection will be applied after you download and refresh qodana.yaml"):a.createElement(js.z,{onClick:function(){u&&e(u,!0)}},"Enable inspection"))),!t&&!u&&"License audit for this project is not supported yet")},Up=n(91307),Kp=n.n(Up),Gp="DependencyTitle_container__Sov3k",Qp="DependencyTitle_name__mPQR4",Jp="DependencyTitle_version__jj1r6",Xp="DependencyTitle_homepageUrl__1CZr8",Yp=function(e){var t=e.name,n=e.homepageUrl,r=e.version,o=e.search,i=e.className,l=n?function(e){var t="https://",n="http://";return e.startsWith(t)?e.slice(t.length):e.startsWith(n)?e.slice(n.length):e}(n):"";return a.createElement("span",{className:st()(i,Gp)},a.createElement(it.xv,null,a.createElement(_n.q,{title:t,className:Qp,line:t,search:o})),"\xa0",a.createElement(it.xv,{title:r,className:Jp},r),"\xa0",n&&a.createElement(lt.ZP,{href:n,className:Xp},a.createElement(_n.q,{line:l,search:o})))},$p={warningNone:"License_warningNone__ubscN",warningUnknown:"License_warningUnknown__iqoVk",link:"License_link__s8Yc0",button:"License_button__bBAeR",warning:"License_warning__0eFAH",error:"License_error__vfiVc"},em=function(e){var t,n=e.value,r=e.search,o="UNKNOWN"===(t=n).key?"Custom":"NONE"===t.key?"None":t.key,i=n.homepageUrl,l=function(e,t){return fa(e)?e.tags&&e.tags[0].type===da.prohibited?t.error:t.warning:""}(n,$p),c=""!==l;return a.createElement(a.Fragment,null,i&&a.createElement(lt.ZP,{className:st()($p.link,l),"data-qd-test":kt.b.projectAuditLicensesThirdPartyLicense,href:i},a.createElement(_n.q,{search:r,line:o})),!i&&c&&a.createElement(js.z,{className:st()($p.button,l),"data-qd-test":kt.b.projectAuditLicensesThirdPartyLicense,disabled:!0,variant:"clear"},a.createElement(_n.q,{search:r,line:o})),!c&&!i&&a.createElement("span",{"data-qd-test":kt.b.projectAuditLicensesThirdPartyLicense},a.createElement(_n.q,{className:$p.text,search:r,line:o})))},tm=a.memo(em),nm={container:"Dependency_container__BRYLv",heading:"Dependency_heading__Qjc5h",title:"Dependency_title__a56GV",transitive:"Dependency_transitive__fYI+n",decorativePointer:"Dependency_decorativePointer__ClRfW",chevronDown:"Dependency_chevronDown__Lg1Aw",chevron:"Dependency_chevron__VgbWk",button:"Dependency_button__kZvzo"},rm=a.memo((function(e){var t,n=e.name,r=e.homepageUrl,o=e.licenses,i=e.version,l=e.search,s=e.dependencies,u=e.isTransitive,d=void 0!==u&&u,p=e.deep,m=void 0===p?0:p,f=(0,a.useState)(!1),h=(0,c.Z)(f,2),v=h[0],g=h[1],b=s&&s.length>0,_=(0,a.useMemo)((function(){if(d)return m<=1?{paddingLeft:"6px"}:{paddingLeft:19*(m-1)+6+"px"}}),[m,d]);return a.createElement(a.Fragment,null,a.createElement("div",{className:st()(nm.container,(t={},(0,bt.Z)(t,nm.open,v),(0,bt.Z)(t,nm.transitive,d),t))},a.createElement("div",{className:nm.heading},a.createElement("div",{className:nm.title,style:_},d&&a.createElement("div",{className:nm.decorativePointer}),b&&a.createElement(tn.zx,{className:st()(nm.button,(0,bt.Z)({},nm.chevronDown,v)),icon:Kp(),iconClassName:nm.chevron,iconSuppressSizeWarning:!0,onClick:function(){return g((function(e){return!e}))}}),a.createElement(Yp,{className:nm.dependencyTitle,version:i,homepageUrl:r,name:n,search:l})),a.createElement("div",null,o.map((function(e,t){return a.createElement(a.Fragment,{key:e.key},a.createElement(tm,{search:l,value:e}),t!==o.length-1&&", ")}))))),v&&s&&s.map((function(e){return a.createElement(rm,{key:"".concat(e.name,"_").concat(e.version),homepageUrl:e.homepageUrl,name:e.name,search:l,version:e.version,dependencies:e.dependencies,licenses:e.licenses,isTransitive:!0,deep:m+1})})))})),om="Module_header__4CTdt",am="Module_tableHeader__bzCv+",im="Module_table__XAxm0",lm="Module_title__1qyuX",cm="Module_name__EuWab",sm=function(e){var t=e.dependencies,n=e.name,r=e.search;return a.createElement("article",{className:im},a.createElement("div",{className:om},a.createElement(it.xv,{className:lm},Bo()("Dependency",t.length,!0)," in"," ",a.createElement(_n.q,{className:cm,line:n,search:r}))),a.createElement("div",{className:am},a.createElement(it.KI,null,"Dependency"),a.createElement(it.KI,null,"License")),a.createElement("div",null,t.map((function(e){return a.createElement(rm,{dependencies:e.dependencies,key:e.name,homepageUrl:e.homepageUrl,licenses:e.licenses,name:e.name,search:r,version:e.version})}))))},um=n(59822),dm=n(3523),pm={controls:"LicenseRules_controls__Ng8GH",leftControls:"LicenseRules_leftControls__QjSfY",search:"LicenseRules_search__7wOeP",header:"LicenseRules_header__asFNv",list:"LicenseRules_list__xOjOU",allowedLicenses:"LicenseRules_allowedLicenses__XCz0H",prohibitedLicenses:"LicenseRules_prohibitedLicenses__jCW0J",buttonSelect:"LicenseRules_buttonSelect__No8Fv",popup:"LicenseRules_popup__mzQt3"};!function(e){e.all="All",e.projectLicense="Project license"}(vp||(vp={}));var mm=[{label:vp.all,key:vp.all},{label:vp.projectLicense,key:vp.projectLicense}],fm=a.memo((function(e){var t=e.licenseRules,n=e.projectLicensesKeys,r=(0,a.useState)(""),o=(0,c.Z)(r,2),i=o[0],l=o[1],s=(0,a.useState)(mm[0]),u=(0,c.Z)(s,2),d=u[0],p=u[1],m=(0,a.useMemo)((function(){return t.filter((function(e){return n.includes(e.key)}))}),[n,t]),f=(0,a.useMemo)((function(){var e=d.key===vp.projectLicense?m:t;return""===i?e:function(e,t){var n=[];return t.forEach((function(t){if(t.key.toLowerCase().includes(e))n.push(t);else{var r=t.allowed.filter((function(t){return t.toLowerCase().includes(e)})),o=t.prohibited.filter((function(t){return t.toLowerCase().includes(e)}));(r.length>0||o.length>0)&&n.push({key:t.key,allowed:r,prohibited:o})}})),n}(i.toLowerCase(),e)}),[t,d,m,i]);return a.createElement(wt.u,{wrappedComponentName:ua.rules},a.createElement("div",{className:pm.controls},a.createElement("div",{className:pm.leftControls},a.createElement(br.Z,{className:pm.buttonSelect,data:mm,onSelect:function(e){e&&(p(e),l(""))},popupClassName:pm.popup,type:br.Z.Type.BUTTON,selected:d}),a.createElement(ft.xP,{"aria-label":"search by rules",placeholder:"Search",className:pm.search,onChange:l,value:i})),a.createElement(um.o,{onClick:function(){(0,dm.b)(t,"licenseRules.json")}},"Download license rules")),a.createElement("div",{className:pm.header},a.createElement("span",null,"Project license"),a.createElement("span",null,"Allowed licenses"),a.createElement("span",null,"Prohibited licenses")),a.createElement("div",{className:pm.list},f.map((function(e){return a.createElement(a.Fragment,{key:e.key},a.createElement(_n.q,{search:i,line:e.key,className:pm.key}),a.createElement("span",{className:pm.allowedLicenses},e.allowed.map((function(t){return a.createElement(_n.q,{search:i,line:t,key:"".concat(e.key,"_").concat(t)})}))),a.createElement("span",{className:pm.prohibitedLicenses},e.prohibited.map((function(t){return a.createElement(_n.q,{search:i,line:t,key:"".concat(e.key,"_").concat(t)})}))))}))))})),hm="ProjectAuditSummary_container__aKmhY",vm="ProjectAuditSummary_licenseRulesButton__yhZhW",gm="ProjectAuditSummary_licenseRulesModal__Zd8jI",bm="LicenseDetails_description__qh4UL",_m="LicenseDetails_tables__Gwupc",ym="LicenseDetails_caption__vxIFO",Cm="LicenseDetails_link__bRvIs",Em=function(e){var t=e.description,n=e.permissions,r=e.limitations,o=e.conditions,i=e.homepageUrl;return a.createElement(a.Fragment,null,t&&a.createElement(it.xv,{className:bm},t),a.createElement("div",{className:_m},n&&a.createElement("table",null,a.createElement("caption",{className:ym},a.createElement("span",{role:"img","aria-label":"check mark"},"\u2705")," ","Permissions"),a.createElement("tbody",null,n.map((function(e){return a.createElement("tr",{key:e},a.createElement("td",null,a.createElement(it.xv,null,e)))})))),r&&a.createElement("table",null,a.createElement("caption",{className:ym},a.createElement("span",{role:"img","aria-label":"stop sign"},"\u26d4\ufe0f")," ","Limitations"),a.createElement("tbody",null,r.map((function(e){return a.createElement("tr",{key:e},a.createElement("td",null,a.createElement(it.xv,null,e)))})))),o&&a.createElement("table",null,a.createElement("caption",{className:ym},a.createElement("span",{role:"img","aria-label":"warning"},"\u26a0\ufe0f")," ","Conditions"),a.createElement("tbody",null,o.map((function(e){return a.createElement("tr",{key:e},a.createElement("td",null,a.createElement(it.xv,null,e)))}))))),i&&a.createElement(lt.ZP,{href:i,className:Cm},"Open official documentation"))},xm={licenseButton:"ProjectLicense_licenseButton__dpf2t",popupContent:"ProjectLicense_popupContent__qsnoQ",alertIcon:"ProjectLicense_alertIcon__2SwGx"},wm=function(e){var t=e.license,n=(0,a.useState)(!1),r=(0,c.Z)(n,2),o=r[0],i=r[1],l=function(){return i((function(e){return!e}))},s=!t.description&&!t.permissions&&!t.conditions&&!t.limitations;return a.createElement("div",{className:xm.container},a.createElement(ft.zx,{disabled:s,variant:"clear",className:xm.licenseButton,onClick:l},t.name,fa(t)&&a.createElement(a.Fragment,null,"\xa0",a.createElement($o.z,{className:xm.alertIcon}))),a.createElement(ft.AB,{popupContentClassName:xm.popupContent,title:t.name,onClose:l,opened:o},a.createElement(Em,{conditions:t.conditions,description:t.description,homepageUrl:t.homepageUrl,limitations:t.limitations,permissions:t.permissions})))},km=function(e){var t=e.licenseRules,n=e.projectLicenses,r=(0,a.useState)(!1),o=(0,c.Z)(r,2),i=o[0],l=o[1],s=function(){return l((function(e){return!e}))},u=(0,a.useMemo)((function(){return n.map((function(e){return e.key}))}),[n]);return a.createElement("div",{className:hm},a.createElement(it.H2,null,"Project licenses"),n.map((function(e){return a.createElement(wm,{key:e.key,license:e})})),a.createElement("span",null,"\ud83d\udcd4\xa0",a.createElement(ft.zx,{variant:"clear",className:vm,onClick:s},"License rules")),a.createElement(ft.AB,{className:gm,title:"License rules",onClose:s,opened:i},a.createElement(fm,{projectLicensesKeys:u,licenseRules:t})))},Sm="ProjectAudit_container__JxlNQ",jm="ProjectAudit_controls__fNh90",Nm="ProjectAudit_dependencies__7SnTT",Zm="ProjectAudit_summary__8KxxJ",Pm="ProjectAudit_searchHint__kLHbE",Om=new Map,Tm=a.memo((function(e){var t=e.licenses,n=e.licenseRules,o=(0,a.useState)(""),i=(0,c.Z)(o,2),l=i[0],s=i[1],u=(0,a.useState)(!1),d=(0,c.Z)(u,2),p=d[0],m=d[1],f=(0,a.useState)(Om),h=(0,c.Z)(f,2),v=h[0],g=h[1],b=(0,a.useCallback)((function(){return m((function(e){return!e}))}),[]),_=!(null!==t&&void 0!==t&&t.dependencies.length)&&!(null!==t&&void 0!==t&&t.licenses.length),y=(0,a.useMemo)((function(){if(t){var e=function(e){var t,n=new Map,r=(0,$.Z)(e);try{for(r.s();!(t=r.n()).done;){var o=t.value,a=n.get(o.module);a?a.push(o):n.set(o.module,[o])}}catch(i){r.e(i)}finally{r.f()}return n}(t.dependencies);return g(e),e}return new Map}),[t]),C=(0,a.useMemo)((function(){var e=Array.from(y.keys()).map((function(e){return{key:e,label:"Module: ".concat(e)}}));return e.unshift({key:"all",label:"All modules"}),e}),[y]),E=(0,a.useMemo)((function(){return p?function(e){var t=new Map;return e.forEach((function(e,n){var r=e.filter((function(e){return e.licenses.some(fa)}));r.length>0&&t.set(n,r)})),t}(v):v}),[v,p]),x=(0,a.useMemo)((function(){return""!==l?function(e,t){var n=t.toLowerCase(),o=new Map;return e.forEach((function(e,t){if(t.toLowerCase().includes(n))o.set(t,e);else{var a,i=[],l=(0,$.Z)(e);try{for(l.s();!(a=l.n()).done;){var c=a.value;if(c.name.toLowerCase().includes(n))i.push(c);else{var s=c.licenses.filter((function(e){var t;return null===(t=e.name)||void 0===t?void 0:t.toLowerCase().includes(n)}));if(s.length>0){var u=(0,r.Z)((0,r.Z)({},c),{},{licenses:s});i.push(u)}}}}catch(d){l.e(d)}finally{l.f()}i.length>0&&o.set(t,i)}})),o}(E,l):E}),[E,l]);return _?a.createElement(Wp,null):a.createElement("article",{className:Sm,"data-qd-clickable":dt.vf.projectAudit},a.createElement("div",{className:jm},a.createElement(qp,{dependencies:t.dependencies,search:l,onChangeToggle:b,onSelectOption:function(e){var t;if("all"===e.key)t=y;else{var n,r=null!==(n=y.get(e.key))&&void 0!==n?n:[];(t=new Map).set(e.key,r)}g(t)},defaultSelectedOption:C[0],modules:C,onChangeSearch:s})),a.createElement("div",{className:Nm},""!==l&&y.size>0&&0===x.size&&a.createElement(it.xv,{className:Pm},'No results matched with "',a.createElement("span",null,l),'"'),Array.from(x).map((function(e){return a.createElement(sm,{search:l,key:e[0],name:e[0],dependencies:e[1]})}))),a.createElement("div",{className:Zm},a.createElement(km,{projectLicenses:t.licenses,licenseRules:n})))})),Lm=(0,j.$j)((0,_t.t)((function(e){return{exclusionFilters:(0,St.q)(e),languages:e.projectAudit.languages,licenseRules:e.projectAudit.licenseRules,licenses:e.projectAudit.licenses,modules:e.projectAudit.modules,processed:e.projectAudit.processed,translators:e.projectAudit.translators}})))((function(e){var t=e.modules,n=e.translators,r=e.languages,o=e.licenses,i=e.licenseRules;return e.processed?a.createElement(Tm,{languages:r,licenseRules:i,licenses:o,modules:t,translators:n}):null})),Im=(0,j.$j)((0,_t.t)((function(e){return{problemsTabName:(0,yt.XI)(e.info),showingBaseline:e.info.showingBaseline,showingNew:e.info.showingNew}})))((function(e){var t=e.loading,n=e.showingNew,r=e.showingBaseline,o=(0,j.I0)(),i=(0,T.CG)(v.L7),s=(0,a.useContext)(u.Il).environment===l.qA.Cloud,d=(0,a.useState)(r?Qo.BA.baseline:Qo.BA.problems),p=(0,c.Z)(d,2),m=p[0],f=p[1],h=(0,a.useState)(!1),g=(0,c.Z)(h,2),b=g[0],_=g[1],y=(0,a.useRef)(null);xt();var C=function(e){f(e),e===Qo.BA.problems&&r&&o((0,M.k9)(i)),e!==Qo.BA.baseline||r||o((0,M.k9)(i))},E=function(){var e;C(Qo.BA.checks),null===y||void 0===y||null===(e=y.current)||void 0===e||e.scrollIntoView({behavior:"smooth"})};return a.createElement("article",{className:st()((0,bt.Z)({},wa,!s))},a.createElement("div",{className:st()((0,bt.Z)({},ka,!s))},a.createElement(wt.u,{wrappedComponentName:"tabs"},a.createElement(Qo.g$,{activeURL:m,compareBuilds:n,onSelect:C},a.createElement(pa,null),a.createElement(xa,null),a.createElement(la,null),a.createElement(ya,null))),a.createElement("div",{className:Sa},a.createElement(Jo,{selectedTab:m,goToChecks:E})),m===Qo.BA.checks&&a.createElement(yo,{profileRef:y}),m===Qo.BA.problems&&a.createElement(ap,{goToChecks:E,loading:t,onChangeShowingSanityModal:function(){return _((function(e){return!e}))},showingExcludeSanityModal:b}),m===Qo.BA.baseline&&a.createElement(ip,{loading:t}),m===Qo.BA.projectAudit&&a.createElement(Lm,null)))})),Am=n(57365),Bm=n(22949),qm="Promo_modal__2sA3j",Fm="Promo_controlBar__xTtVq",Mm="PromoHeader_subtitle__1vo-0",Rm=function(){return a.createElement(a.Fragment,null,Lt.OB.promo,a.createElement(it.xv,{className:Mm},Lt.Pg.promo))},Dm=(0,j.$j)((0,_t.t)((function(e){return{changedContent:e.profile.changedContent,inspections:e.inspections.data,opened:e.promo.showingModal,problemsCount:e.promo.promoProblems.length}})),{setChangedProfileContent:Pe.R,changeShowingPromoModal:Be}),Hm=Dm((function(e){var t=e.changedContent,n=e.inspections,o=e.changeShowingPromoModal,i=e.opened,l=e.problemsCount,c=e.setChangedProfileContent,s=(0,T.CG)(v.L7),u=(0,a.useCallback)((function(){return o(s,!0)}),[s,o]),d=(0,a.useMemo)((function(){return{enabled:l>0,type:"normal",htmlProps:{"data-qd-clickable":dt.vf.helpMenuPromo},label:"Suggested inspections",click:u,before:["Documentation"],icon:"\ud83d\udd2e",description:"Try the inspections set we picked for you"}}),[l,u]);(0,O.i)(d,Am.X);var p=(0,a.useMemo)((function(){return n.filter((function(e){return(0,Bm.k)(e,t)})).map((function(e){return e.displayName}))}),[n,t]);return a.createElement(Qc.A,{className:qm,height:810,onClose:function(){return o(s,!1)},opened:i,title:a.createElement(Rm,null),width:1200},a.createElement("div",{className:Fm},a.createElement(Yd,{gotProblems:!0,loading:!1,problemsTabName:"promo"})),a.createElement(lc,{problemsTabName:"promo",initialGroupBy:"type",showingPromoControls:!0,showingBaselineControls:!1,enabledGroups:p,onChangeEnabledGroup:function(e){var o,a=t.includedChecks,i=n.find((function(t){return t.displayName===e}));i&&(o=(0,Bm.k)(i,t)?a.filter((function(e){return e!==i.shortName})):[].concat((0,Y.Z)(a),[i.shortName]),c(s,(0,r.Z)((0,r.Z)({},t),{},{includedChecks:o})))}}))})),zm=Hm,Vm="SanityModal_modal__KfOJF",Wm="SanityModal_controlBar__KbNkk",Um="SanityModalHeader_subtitle__srQ9u",Km=function(){return a.createElement(a.Fragment,null,"Unexpected problems",a.createElement(it.xv,{className:Um},"Please, look through the problems we\u2019ve faced during the analysis. If they\u2019re connected with the project configuration you have to reconfigure the project and run Qodana again."),a.createElement(it.xv,{className:Um},"You may ignore the problems \u2014 we\u2019ll exclude related paths from the analysis after you update"," ",a.createElement("b",null,"qodana.yaml")," in the profile."))},Gm=function(){var e=(0,qo.n)(),t=(0,c.Z)(e,2),n=t[0],r=t[1];return a.createElement(Qc.A,{className:Vm,height:810,onClose:function(){return r(!1)},opened:n,title:a.createElement(Km,null),width:1200},a.createElement("div",{className:Wm},a.createElement(Yd,{gotProblems:!0,loading:!1,problemsTabName:"sanity"})),a.createElement(lc,{problemsTabName:"sanity",initialGroupBy:"type",showingBaselineControls:!1}))},Qm="Tip_popup__A3se4",Jm="Tip_right__pKkqW",Xm="Tip_left__IzVsl",Ym="Tip_btn__k2gS3",$m="Tip_hide__iS+74",ef="Tip_next__51XN4",tf=function(e){var t=e.className,n=void 0===t?"":t,r=e.content,o=e.secondaryButton,i=e.primaryButton,l=e.targetElement,s=e.width,u=void 0===s?207:s,d=e.onTargetElementLost,p=(0,a.useState)(null),m=(0,c.Z)(p,2),f=m[0],h=m[1],v=(0,a.useState)(l.offsetTop),g=(0,c.Z)(v,2),b=g[0],_=g[1],y=(0,a.useState)(l.offsetLeft),C=(0,c.Z)(y,2),E=C[0],x=C[1],w=(0,a.useRef)(),k=(0,a.useCallback)((function(){l.isConnected?(x(l.offsetLeft),_(l.offsetTop),w.current=requestAnimationFrame(k)):d()}),[d,l]);(0,a.useEffect)((function(){return w.current=requestAnimationFrame(k),function(){w.current&&cancelAnimationFrame(w.current)}}),[k]);var S=l.getBoundingClientRect().width,j=(0,a.useMemo)((function(){if(f&&l.offsetParent&&f.offsetParent){var e=l.offsetParent.getBoundingClientRect(),t=f.offsetParent.getBoundingClientRect();return{left:e.left-t.left,top:e.top-t.top}}return{left:0,top:0}}),[l,f]),N="right"===(0,a.useMemo)((function(){return document.documentElement.clientWidth-(E+S+j.left)<=u?"left":"right"}),[j,E,S,u]),Z={left:N?j.left+E+S+8:j.left+E-(u+8),top:j.top+b+-9,width:u};return a.createElement("div",{className:st()(Qm,N?Jm:Xm,n),ref:h,style:Z},a.createElement("p",null,r),a.createElement("div",null,!!o&&a.createElement(tn.zx,{className:st()(Ym,$m),"data-qd-clickable":dt.vf.tipSecondaryButton,onClick:o.onClick,text:!0},o.label),!!i&&a.createElement(tn.zx,{className:st()(Ym,ef),"data-qd-clickable":dt.vf.tipPrimaryButton,onClick:i.onClick,text:!0},i.label)))},nf=n(90824);function rf(){return document.querySelectorAll("[data-qd-onboarding]").length}function of(){var e=(0,a.useContext)(u.pg).onboardingTips,t=(0,a.useContext)(u.Il).environment,n=(0,T.TL)(),r=(0,T.CG)(v.L7),o=(0,T.CB)(F),i=(0,T.CB)((function(e){return e.info.processed})),l=(0,T.CB)(wo.b).length,s=(0,Xo.XM)(),d=(0,a.useState)(-1),p=(0,c.Z)(d,2),m=p[0],f=p[1],g=(0,T.CB)((function(e){return e.onboarding.tips})),b=(0,a.useCallback)((function(e){return n((0,nf.F4)(r,e))}),[r,n]),_=(0,a.useCallback)((function(){n((0,nf.F4)(r,"init")),(0,Et.iL)({environment:t,source:"menu",type:"manual start"})}),[r,t,n]),C=(0,a.useMemo)((function(){return{enabled:e&&i,type:"normal",htmlProps:{"data-qd-clickable":dt.vf.helpMenuTips},label:"Show UI tips",click:_,before:["Suggested inspections"],icon:"\ud83d\udca1",description:"Explore a quick tour about how to use Qodana "}}),[_,e,i]);if((0,O.i)(C,Am.X),(0,a.useEffect)((function(){g||o||b((0,y.fp)(h.mp.onboardingTips)||"init")}),[g,b,o]),(0,a.useEffect)((function(){if("init"===g&&i&&-1===m){var e=setTimeout((function(){s.current&&rf()>0&&f(0)}),1e3);return function(){clearTimeout(e)}}}),[m,s,i,g]),(0,a.useEffect)((function(){"complete"!==g&&"hidden"!==g||0!==l||(((0,y.fp)(h.mp.onboardingHidden)||{}).projectSetup||n((0,nf.kB)(r,!0)))}),[r,g,n,l]),!e)return null;var E=function(){(0,y.m8)(h.mp.onboardingTips,"hidden"),f(-1),b("hidden"),(0,Et.iL)({environment:t,source:"tip",type:"hide"})},x="",w=null,k=document.querySelectorAll("[data-qd-onboarding]");-1!==m&&(x=k[m].getAttribute("data-qd-onboarding")||"",w=k[m]);var S=m+1===k.length,j=S?{label:"restart",onClick:function(){rf()>0&&(f(0),(0,Et.iL)({environment:t,source:"tip",type:"restart"}))}}:{label:"hide tips",onClick:E},N=S?{label:"got it!",onClick:function(){(0,y.m8)(h.mp.onboardingTips,"complete"),b("complete"),f(-1),(0,Et.iL)({environment:t,source:"tip",type:"got it"})}}:{label:"next tip",onClick:function(){var e=rf();e>0&&m0?a.createElement("span",{className:vf},"+".concat((0,Ze.hD)(r.toString(),3)," files in the full report")):"")},bf="Preview_container__6J+2m",_f="Preview_sunburstContainer__r+ByE",yf="Preview_circleMessage__S4F05",Cf="Preview_textContainer__cC1dL",Ef="Preview_centeredContainer__hWop-",xf="Preview_severityBox__Vwlfm",wf="Preview_severityItem__+gPGe",kf=n(85634),Sf="SeverityBadge_container__RZPKC",jf="SeverityBadge_icon__ZL2AA",Nf="SeverityBadge_text__MqEW9",Zf="SeverityBadge_name__qXCyN",Pf="SeverityBadge_problems__9k0dC",Of=function(e){var t=e.name,n=e.problemsCount;return a.createElement("div",{className:Sf},a.createElement("img",{alt:"severity icon",className:jf,"data-no-retina":!0,src:(0,kf.R)(t)}),a.createElement("div",{className:Nf},a.createElement("span",{className:Zf},t),a.createElement("span",{className:Pf},(0,Ze.hD)("".concat(n),3))))},Tf="ToolsBadge_container__Q1CVC",Lf="ToolsBadge_label__El0KN",If=function(e){var t=e.tools;return a.createElement("div",{className:Tf},a.createElement("h2",{className:Lf},"Tools:"),t.map((function(e,t,n){return a.createElement("span",{key:(0,Xl.Z)()},e,t===n.length-1?" ":", ")})))},Af=function(e){xt();var t=(0,T.CB)(yt.vV.selectAppliedExclusionProblems),n=e.errorMessage,r=void 0===n?"":n,o=e.loadingStageOne,i=(0,a.useMemo)((function(){var e=(0,sf.k)(t,ja.rp);return(0,sf.W)(e)}),[t]),l=(0,pc.gE)(t,"tool"),c=(0,pc.gE)(t,"severity"),s=function(e){var t,n={},r=(0,$.Z)(e);try{for(r.s();!(t=r.n()).done;){var o,a=t.value,i=(0,$.Z)(a.sources);try{for(i.s();!(o=i.n()).done;){var l=o.value,c="".concat(l.path,"/").concat(l.file);n[c]?n[c].count++:n[c]={count:1,fileName:l.file}}}catch(s){i.e(s)}finally{i.f()}}}catch(s){r.e(s)}finally{r.f()}return n}(t),u=(0,a.useMemo)((function(){for(var e=[],t=0,n=Object.keys(s);t0&&void 0!==arguments[0]&&arguments[0];try{(0,s.d)("init",{internal:e||void 0,productBuild:"1.0.0",productCode:"QD",recorderCode:"QD",recorderVersion:1,userInfo:ah()})}catch(t){console.error("f2, error detected:",t.message)}}(n):ih(),function(){ih()}}),[e,n])}function ch(e,t){var r=t.initOptions;(0,a.useEffect)((function(){return Promise.resolve().then(n.bind(n,47978)).then((function(t){var n=t.loadSentry,o=t.disableSentry;e?n(r):o()})).catch(console.error),function(){Promise.resolve().then(n.bind(n,47978)).then((function(e){(0,e.disableSentry)()})).catch(console.error)}}),[e,r])}function sh(e){var t=y.b?e:l.gK.alwaysOff,n=t===l.gK.alwaysOn||t===l.gK.alwaysOff;(0,a.useEffect)((function(){var t=e===l.gK.alwaysOn,n=e===l.gK.alwaysOff;(t||n)&&(0,y.yW)(h.mp.userAgreement)}),[e]);var r=(0,a.useState)((function(){var e=function(e){var t=(0,y.fp)(h.mp.userAgreement);return t===l.SG.accepted||e===l.gK.alwaysOn||t!==l.SG.declined&&e!==l.gK.alwaysOff&&null}(t);return null===e?Ec.g3.default:!0===e?Ec.g3.all:Ec.g3.off})),o=(0,c.Z)(r,2);return[o[0],o[1],n]}function uh(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=sh(e),o=(0,c.Z)(r,3),a=o[0],i=o[1],l=o[2],s=n.isStagingContext,u=void 0!==s&&s;return ch(a!==Ec.g3.off&&!!t,{initOptions:t}),lh(a===Ec.g3.all,{isStagingContext:u}),[a,i,l]}var dh=n(9958),ph=n(41757),mh=n(79858),fh="HelpMenuItem_button__wRBFu",hh="HelpMenuItem_link__IfWre",vh="HelpMenuItem_externalIcon__eZ-KD",gh=n(50071);function bh(e){var t=e.item,n=e.onRequestClose,r=(0,gh.n)(t.submenu);return a.createElement(a.Fragment,null,r.map((function(e){return a.createElement(_h,{key:e.id||e.label,item:e,onRequestClose:n})})))}function _h(e){var t=e.item,n=e.onRequestClose,r=function(){n(),t.click&&t.click()};return a.createElement(a.Fragment,null,"normal"===t.type?a.createElement("li",{"data-qd-test":kt.b.helpMenuItem},a.createElement(tn.zx,(0,Jt.Z)({className:fh,disabled:!1===t.enabled,onClick:r,text:!0},t.htmlProps),t.label)):"link"===t.type?a.createElement("li",{"data-qd-test":kt.b.helpMenuItem},a.createElement(lt.ZP,(0,Jt.Z)({className:hh,href:t.link,title:"Open external resource",onClick:r},t.htmlProps),t.label,a.createElement(mh.Z,{className:vh}))):"submenu"===t.type?a.createElement(bh,{item:t,onRequestClose:n}):null)}var yh,Ch="HelpMenu_triggerBtn__3h3P1",Eh="HelpMenu_triggerIcon__Vjx-6",xh="HelpMenu_disabled__WF4S0",wh="HelpMenu_popup__DO1UG",kh="HelpMenu_popupPad__gUtR8",Sh="HelpMenu_items__cOT57",jh="HelpMenu_tabSets__SGRTn",Nh="HelpMenu_tabSetHeading__fZs3M",Zh="HelpMenu_additional__ag4V5",Ph=function(e){var t=e.additionalInfo,n=e.disabled,r=void 0!==n&&n,o=e.items,i=e.tabSets,l=r||!o.length,s=(0,a.useState)(!1),u=(0,c.Z)(s,2),d=u[0],p=u[1],m=function(){return p(!1)},f=(0,a.useCallback)((function(){p((function(e){return!e}))}),[]),h=(0,a.useCallback)((function(){p(!1)}),[]);return a.createElement("section",null,a.createElement(tn.zx,{"aria-label":"help menu",className:Ch,"data-qd-clickable":dt.vf.helpMenuTrigger,"data-qd-test":kt.b.helpMenuBtn,disabled:l,icon:gp,iconClassName:"".concat(Eh," ").concat(l?xh:""),onClick:f}),a.createElement(_i.ZP,{className:"".concat(wh," ").concat(t||i?kh:""),hidden:!d,onCloseAttempt:h},a.createElement(mc.ZP,null,a.createElement("ul",{className:Sh,"data-qd-test":kt.b.helpMenuItems},o.map((function(e){return a.createElement(_h,{item:e,onRequestClose:m,key:(0,Xl.Z)()})}))),!!i&&a.createElement("div",{className:jh,"data-qd-test":kt.b.featureState},i.map((function(e){return a.createElement("div",{key:e.heading},a.createElement("h2",{className:Nh},e.heading),a.createElement(qa.m,e))}))),!!t&&a.createElement(it.KI,{className:Zh,"data-qd-test":kt.b.version},t))))};try{yh="9291"}catch(Xv){console.error("cannot get value from process.env")}var Oh="Qodana version: ".concat(yh),Th={"data-qd-test":kt.b.qodanaLogo},Lh={"data-qd-clickable":dt.vf.themeToggle,"data-qd-test":kt.b.themeToggle};function Ih(e){var t=e.featureState,n=e.onFeatureStateChange,r=e.className,o=(0,ph.a)("Help");(0,O.i)(et.JT);var i=[{disabled:!1,heading:"features state",onSelectTab:function(e){return n(e)},options:[{htmlProps:{"data-qd-clickable":dt.vf.helpMenuTabAlpha,"data-qd-test":kt.b.tabAlpha},id:l.nn.Alpha,title:l.nn.Alpha},{htmlProps:{"data-qd-clickable":dt.vf.helpMenuTabBeta,"data-qd-test":kt.b.tabBeta},id:l.nn.Beta,title:l.nn.Beta},{htmlProps:{"data-qd-clickable":dt.vf.helpMenuTabStable,"data-qd-test":kt.b.tabStable},id:l.nn.Stable,title:l.nn.Stable}],selected:t}],c=a.createElement(Ph,{additionalInfo:Oh,items:o,tabSets:i});return a.createElement(dh.x.Provider,{value:void 0},a.createElement(ft.h4,{className:st()(Kf.p.horizontalPadding,r),logoHtmlProps:Th,themeToggleHtmlProps:Lh,userControls:c}))}var Ah,Bh,qh,Fh=n(14723),Mh=function(e){var t=e.children,n=e.theme;return a.createElement(Fh.$,{theme:n,getTheme:function(){return(0,y.fp)(h.mp.theme)},saveTheme:function(e){return(0,y.m8)(h.mp.theme,e)}},t)};try{var Rh={NODE_ENV:"production",PUBLIC_URL:".",WDS_SOCKET_HOST:void 0,WDS_SOCKET_PATH:void 0,WDS_SOCKET_PORT:void 0,FAST_REFRESH:!0,REACT_APP_VERSION:"9291"};Ah=Rh.REACT_APP_FIREBASE_API_KEY,Bh=Rh.REACT_APP_FIREBASE_APP_ID,qh=Rh.REACT_APP_FIREBASE_MEASUREMENT_ID}catch(Xv){console.error("cannot get value from process.env")}var Dh,Hh={apiKey:Ah,appId:Bh,measurementId:qh},zh="Standalone_pageWidth__6I61e",Vh="Standalone_promotion__V6-xO",Wh=a.lazy((function(){return Promise.resolve().then(n.bind(n,30402))})),Uh=[];try{Dh={NODE_ENV:"production",PUBLIC_URL:".",WDS_SOCKET_HOST:void 0,WDS_SOCKET_PATH:void 0,WDS_SOCKET_PORT:void 0,FAST_REFRESH:!0,REACT_APP_VERSION:"9291"}.REACT_APP_FUSRA_STAGING}catch(Xv){console.error("cannot get value from process.env")}var Kh="true"===Dh;function Gh(e){var t=e.params,n=t.statLaunchConfig,o=t.projectKeys,i=void 0===o?[]:o,s=t.sentryOptions,d=t.isStagingContext,p=i[0]||et.au,m=uh(n,s,{isStagingContext:Kh||d}),f=(0,c.Z)(m,3),v=f[0],g=f[1],b=f[2],_=(0,a.useCallback)((function(){return(0,Et.Jn)({environment:t.environment,modal:l.nS.PolicySettings})}),[t.environment]),C=(0,a.useState)((function(){return(0,y.fp)(h.mp.featureState)||l.nn.Stable})),E=(0,c.Z)(C,2),x=E[0],w=E[1];(0,a.useEffect)((function(){(0,y.m8)(h.mp.featureState,x)}),[x]);var k=(0,a.useState)({onboardingTips:v!==Ec.g3.default||b,persistSettings:!0,problemsListDefaultTab:(0,y.fp)("".concat(h.mp.tab).concat((0,y.n$)(p)))||l.yA.problems,reorderFilters:!1}),S=(0,c.Z)(k,2),j=S[0],N=S[1];return(0,a.useEffect)((function(){N((function(e){return(0,r.Z)((0,r.Z)({},e),{},{onboardingTips:v!==Ec.g3.default||b})}))}),[v,b]),a.createElement(u.Ze,{value:j},a.createElement(xc.B.Provider,{value:v},a.createElement(Wf,{config:Hh},a.createElement(Mh,null,a.createElement(Ec.GC,{onAccept:function(e){g(e),(0,y.m8)(h.mp.userAgreement,e===Ec.g3.all?l.SG.accepted:l.SG.declined)},disabled:b,onSettingsPopupOpen:_}),a.createElement(Ih,{featureState:x,onFeatureStateChange:w,className:zh}),a.createElement("main",{className:st()(Kf.p.horizontalPadding,zh)},a.createElement("div",{className:Vh},a.createElement(Yf,null)),a.createElement(u.bC.Provider,{value:x},a.createElement(Rf,{afterContent:a.createElement(a.Suspense,{fallback:null},a.createElement(Wh,null)),environment:t.environment,paths:t.paths}))),a.createElement(ft.$_,{buttons:Uh,className:st()(Kf.p.horizontalPadding,zh),links:et.dk})))))}var Qh=n(13430),Jh=n(47478),Xh="ProjectKeyTabs_sourceTabsContainer__ZlIaA",Yh=function(e){var t=e.children,n=e.selected,r=e.onTabSelect,o=e.options,i=(0,a.useContext)(u.bC),s=(0,a.useMemo)((function(){return o.length>1?l.nn.Stable:i}),[o.length,i]),d=(0,a.useState)(n),p=(0,c.Z)(d,2),m=p[0],f=p[1],h=(0,a.useMemo)((function(){return o.map((function(e){return{id:e,title:e,tooltip:e}}))}),[o]);return a.createElement("div",null,o.length>1&&a.createElement("div",{className:Xh},a.createElement(Jh.r,{options:h,onSelectTab:function(e){f(e),r&&r(e)},selected:m})),a.createElement("div",null,a.createElement(u.bC.Provider,{value:s},t(m))))},$h="TeamCityPolicy_message__5rj1L",ev="TeamCityPolicy_buttons__phLkX";function tv(e){var t=e.statisticsNotConfigurable,n=e.onTelemtryLevelChange,r=(0,a.useContext)(xc.B),o=(0,Xo.qt)(r===Ec.g3.default),i=(0,c.Z)(o,3),s=i[0],u=i[1],d=i[2],p=(0,a.useCallback)((function(){(0,Et.Jn)({environment:l.qA.TeamCity,modal:l.nS.PolicySettings}),u()}),[u]),m=(0,a.useMemo)((function(){return{id:Ec.QQ,enabled:!0,visible:!t,label:"Policy settings",type:"normal",click:p,htmlProps:{"data-qd-clickable":"help-menu-policy-settings"},after:["Terms Of Use"]}}),[p,t]);return(0,P.iX)(m,P.Ud),t?null:a.createElement(ft.AB,{height:180,width:430,title:"Help us improve Qodana \u2728",opened:!t&&s},a.createElement("span",{className:$h},"We would like to collect anonymous data about your actions to better fit Qodana to your needs."),a.createElement("div",{className:ev},a.createElement(ft.zx,{onClick:function(){d(),n(Ec.g3.all)},variant:"primary"},"Accept"),a.createElement(ft.zx,{onClick:function(){d(),n(Ec.g3.off)}},"Decline")))}var nv,rv,ov="BuildSelect_errorContainer__YSO+S",av="BuildSelect_selectWrapper__ZdN+t",iv="BuildSelect_select__06nj3",lv="BuildSelect_selectButton__0Q8Da",cv="BuildSelect_selectButtonIcon__0x2Ok",sv="BuildSelect_popup__rGaYR",uv="BuildSelect_list__A-bvJ",dv="BuildSelect_successBuildNumber__BWJ4N",pv="BuildSelect_failedBuildNumber__2SecC",mv="BuildSelect_greyNumber__WSgyL",fv="BuildSelect_loading__pXfBr",hv="BuildSelect_disabled__32vN9",vv=n(79442),gv=n.n(vv),bv="ErrorComparisonMessage_container__rW1mb",_v="ErrorComparisonMessage_pic__7JVl7",yv=a.memo((function(){return a.createElement("span",{className:bv},a.createElement("img",{alt:"err","data-no-retina":!0,className:_v,src:gv()}),Lt._F)})),Cv=function(e){switch(e&&e.status){case nv.failure:return pv;case nv.success:return dv;case nv.unknown:return mv;default:return""}},Ev=n(16501),xv=n.n(Ev),wv="Branch_branchName__JdfR5",kv=a.memo((function(e){var t=e.name,n=e.className,r=void 0===n?"":n;return a.createElement("span",{title:t,className:"".concat(wv," ").concat(r)},a.createElement("img",{alt:"branch",src:xv(),"data-no-retina":!0}),t)})),Sv="SelectedBuild_container__vW7VI",jv="SelectedBuild_grey__qWPVq",Nv="SelectedBuild_branch__HWAXX",Zv=a.memo((function(e){var t=e.build,n=e.showingError,r=Cv(t);return a.createElement("span",{className:"".concat(Sv," ").concat(r," ").concat(n?jv:"")},"#",t&&t.number,t&&t.branchName&&a.createElement(kv,{className:Nv,name:t.branchName}))}));!function(e){e.failure="FAILURE",e.success="SUCCESS",e.unknown="UNKNOWN"}(nv||(nv={})),function(e){e.finished="finished"}(rv||(rv={}));var Pv=function(e){var t=e.builds,n=e.failedRequest,r=void 0!==n&&n,o=e.loading,i=e.onChangeToggle,l=e.onSelectBuildNumber,s=e.selectedBuild,u=e.showingNew,d=(0,a.useState)(!1),p=(0,c.Z)(d,2),m=p[0],f=p[1],h=r&&u&&!o,v=(0,a.useCallback)((function(e){l(e),f(!1),u||i()}),[i,l,u]),g=(0,a.useCallback)((function(){00&&-1!==o){var e=function(e,t){var n=e.find((function(e){return e.id===Number(t)}));return"undefined"!==typeof n?n:null}(Z,o);S(e)}}),[Z,o]),a.createElement(Ov,{builds:F,failedRequest:s,loading:p,onChangeToggle:B,onSelectBuildNumber:q,selectedBuild:k,showingNew:b})})),Dv="TeamCityControls_teamCityControls__+YveP";try{qv="9291"}catch(Xv){console.error("cannot get value from process.env")}var Hv="Qodana version: ".concat(qv);function zv(){var e=(0,T.CB)(q),t=(0,T.CB)(yt.gJ),n=(0,gh.n)(),r=(0,a.useMemo)((function(){return n.filter((function(e){return"Help"===e.id}))}),[n]);(0,O.i)(et.JT);var o=(0,a.useState)((function(){return(0,y.fp)(h.mp.featureState)||l.nn.Stable})),i=(0,c.Z)(o,2),s=i[0],u=i[1];(0,a.useEffect)((function(){(0,y.m8)(h.mp.featureState,s)}),[s]);var d=[{disabled:!1,heading:"features state",onSelectTab:function(e){return u(e)},options:[{htmlProps:{"data-qd-clickable":dt.vf.helpMenuTabAlpha,"data-qd-test":kt.b.tabAlpha},id:l.nn.Alpha,title:l.nn.Alpha},{htmlProps:{"data-qd-clickable":dt.vf.helpMenuTabBeta,"data-qd-test":kt.b.tabBeta},id:l.nn.Beta,title:l.nn.Beta},{htmlProps:{"data-qd-clickable":dt.vf.helpMenuTabStable,"data-qd-test":kt.b.tabStable},id:l.nn.Stable,title:l.nn.Stable}],selected:s}];return a.createElement("div",{className:Dv},a.createElement(Rv,{loading:e,showingNew:t}),a.createElement(Ph,{additionalInfo:Hv,disabled:e,items:r,tabSets:d}))}var Vv,Wv="reset_container__gDmdn",Uv=[];try{Vv={NODE_ENV:"production",PUBLIC_URL:".",WDS_SOCKET_HOST:void 0,WDS_SOCKET_PATH:void 0,WDS_SOCKET_PORT:void 0,FAST_REFRESH:!0,REACT_APP_VERSION:"9291"}.REACT_APP_FUSRA_STAGING}catch(Xv){console.error("cannot get value from process.env")}var Kv="true"===Vv;function Gv(e){var t=e.params,n=t.statLaunchConfig,o=t.projectKeys,i=void 0===o?Uv:o,s=t.paths,d=t.sentryOptions,p=t.isStagingContext,m=t.buildsId,f=uh(n,d,{isStagingContext:Kv||p}),v=(0,c.Z)(f,3),g=v[0],b=v[1],_=v[2],x=(0,y.fp)(h.mp.featureState)||l.nn.Stable;(0,a.useEffect)((function(){i.length>1||(0,y.m8)(h.mp.featureState,x)}),[x,i.length]);var w=(0,a.useState)({onboardingTips:g!==Ec.g3.default||_,persistSettings:i.length<2,problemsListDefaultTab:l.yA.problems,reorderFilters:!1}),k=(0,c.Z)(w,2),S=k[0],j=k[1];(0,a.useEffect)((function(){j((function(e){return(0,r.Z)((0,r.Z)({},e),{},{onboardingTips:g!==Ec.g3.default||_})}))}),[g,_]);var N=(0,a.useState)((function(){var e=(0,C.Gr)(E.D.projectKey,!1)||et.au;return i.includes(e)?e:i[0]||et.au})),Z=(0,c.Z)(N,1)[0];(0,a.useEffect)((function(){m||console.warn("WARNING: no buildsId provided")}),[m]);return a.createElement(u.Ze,{value:S},a.createElement(Mh,{theme:Qh.Q.light},a.createElement(xc.B.Provider,{value:g},a.createElement(Wf,{config:Hh},a.createElement(tv,{statisticsNotConfigurable:_,onTelemtryLevelChange:function(e){b(e),(0,y.m8)(h.mp.userAgreement,e===Ec.g3.all?l.SG.accepted:l.SG.declined)}}),a.createElement("main",{className:Wv},a.createElement(u.bC.Provider,{value:x},a.createElement(Yh,{selected:Z,options:i,onTabSelect:function(e){(0,C.Hn)(Object.values(E.D)),e&&(0,C.jX)(E.D.projectKey,e)}},(function(e){return a.createElement(Rf,{beforeContent:a.createElement(zv,null),buildsId:m,environment:l.qA.TeamCity,projectKey:e,paths:s})}))))))))}var Qv=["environment"],Jv=function(e,t){var n=document.getElementById(e);if(n)switch(t.environment){case l.qA.Preview:(0,i.render)(a.createElement(Df,{params:t}),n);break;case l.qA.GitHub:case l.qA.Standalone:var c=t.environment,s=(0,o.Z)(t,Qv);(0,i.render)(a.createElement(Gh,{params:(0,r.Z)({environment:c},s)}),n);break;case l.qA.TeamCity:(0,i.render)(a.createElement(Gv,{params:t}),n)}}},27937:function(e,t,n){"use strict";n.d(t,{K3:function(){return u},Nd:function(){return a},V_:function(){return i},_P:function(){return l},cf:function(){return d},jC:function(){return s},k9:function(){return p},m4:function(){return c},mE:function(){return m}});var r=n(64649),o=n(80759);function a(e,t,n){var a;return a={filters:t},(0,r.Z)(a,o.R8,n),(0,r.Z)(a,"type",o.bL),(0,r.Z)(a,"meta",{projectKey:e}),a}function i(e,t,n){var a;return a={tags:t},(0,r.Z)(a,o.R8,n),(0,r.Z)(a,"type",o.o4),(0,r.Z)(a,"meta",{projectKey:e}),a}function l(e,t){return{problemHashes:t,type:o.Xo,meta:{projectKey:e}}}function c(e,t,n){return{data:t,source:n,type:o.gb,meta:{projectKey:e}}}function s(e,t){return{data:t,type:o.Gt,meta:{projectKey:e}}}function u(e,t){return{showingNew:t,type:o.CH,meta:{projectKey:e}}}function d(e,t){return{displayType:t,type:o.Uk,meta:{projectKey:e}}}function p(e){return{type:o.xK,meta:{projectKey:e}}}function m(e,t){return{filters:t,type:o.IX,meta:{projectKey:e}}}},59881:function(e,t,n){"use strict";n.d(t,{IO:function(){return o},UA:function(){return a},kQ:function(){return i},qV:function(){return c},wO:function(){return l}});var r=n(81839);function o(e,t,n){return{data:t,meta:{projectKey:e},readFromFile:n,type:r.VI}}function a(e,t){return{meta:{projectKey:e},path:t,type:r.XL}}function i(e,t){return{meta:{projectKey:e},paths:t,type:r.iH}}function l(e){return{type:r.dB,meta:{projectKey:e}}}function c(e,t){return{type:r.rx,meta:{projectKey:e},scopes:t}}},82996:function(e,t,n){"use strict";n.d(t,{Dk:function(){return o},Uc:function(){return a},Zn:function(){return r},iV:function(){return i}});var r="SET_SANITY_PROBLEMS_NOTIFICATION_CLOSED",o="SET_PROFILE_CHANGED_NOTIFICATION_CLOSED";function a(e,t){return{type:r,closed:t,meta:{projectKey:e}}}function i(e,t){return{type:o,closed:t,meta:{projectKey:e}}}},90824:function(e,t,n){"use strict";n.d(t,{F4:function(){return c},Hp:function(){return l},UE:function(){return r},av:function(){return a},kB:function(){return i},qZ:function(){return o}});var r="SET_ONBOARDING_TIPS_STATE",o="SET_ONBOARDING_DRAWER_VISIBLE",a="SET_OPEN_IN_IDE_WARNING_VIEWED";function i(e,t){return{type:o,visible:t,meta:{projectKey:e}}}function l(e,t){return{type:a,viewed:t,meta:{projectKey:e}}}function c(e,t){return{type:r,state:t,meta:{projectKey:e}}}},35449:function(e,t,n){"use strict";n.d(t,{R:function(){return a},Z:function(){return o}});var r=n(3372);function o(e,t){return{fileContent:t,type:r.V,meta:{projectKey:e}}}function a(e,t){return{changedContent:t,meta:{projectKey:e},type:r.J}}},28151:function(e,t,n){"use strict";n.d(t,{b:function(){return a},j:function(){return o}});var r=n(56118),o=(0,r.PH)("report/initialize"),a=(0,r.PH)("report/open")},72511:function(e,t,n){"use strict";n.d(t,{z:function(){return C}});var r,o=n(8879),a=n(63486),i=n(71894),l=n.n(i),c=n(22491),s=["title","titleId"];function u(){return u=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function p(e,t){var n=e.title,o=e.titleId,a=d(e,s);return c.createElement("svg",u({width:14,height:13,viewBox:"0 0 14 13",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":o},a),n?c.createElement("title",{id:o},n):null,r||(r=c.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M7.74901 1.2337C7.40595 0.6555 6.59405 0.655499 6.25099 1.2337L0.131319 11.5478C-0.228285 12.1539 0.193099 12.9334 0.880333 12.9334H13.1197C13.8069 12.9334 14.2283 12.1539 13.8687 11.5478L7.74901 1.2337ZM6.7171 4.6826H7.40124C7.51585 4.6826 7.62538 4.73001 7.70402 4.81365C7.78267 4.89729 7.82347 5.00977 7.8168 5.12456L7.6369 8.21912C7.62403 8.43995 7.4418 8.61243 7.22134 8.61244H6.89701C6.67654 8.61243 6.49432 8.43995 6.48145 8.21912L6.30154 5.12456C6.29487 5.00977 6.33567 4.89729 6.41432 4.81365C6.49296 4.73001 6.60249 4.6826 6.7171 4.6826ZM7.05917 10.9919C6.64035 10.9919 6.30083 10.6401 6.30083 10.206C6.30083 9.7719 6.64035 9.42001 7.05917 9.42001C7.47798 9.42001 7.8175 9.7719 7.8175 10.206C7.8175 10.6401 7.47798 10.9919 7.05917 10.9919Z",fill:"currentColor"})))}var m,f=c.forwardRef(p),h=["title","titleId"];function v(){return v=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function b(e,t){var n=e.title,r=e.titleId,o=g(e,h);return c.createElement("svg",v({width:14,height:13,viewBox:"0 0 14 13",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":r},o),n?c.createElement("title",{id:r},n):null,m||(m=c.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M7.74901 1.2337C7.40595 0.6555 6.59405 0.655499 6.25099 1.2337L0.131319 11.5478C-0.228285 12.1539 0.193099 12.9334 0.880333 12.9334H13.1197C13.8069 12.9334 14.2283 12.1539 13.8687 11.5478L7.74901 1.2337ZM6.62549 3.0911C6.79702 2.802 7.20298 2.802 7.37451 3.0911L12.0264 10.9314C12.2062 11.2344 11.9955 11.6242 11.6519 11.6242H2.34811C2.00449 11.6242 1.7938 11.2344 1.9736 10.9314L6.62549 3.0911ZM6.6842 4.84461H7.31571C7.4215 4.84461 7.5226 4.88837 7.5952 4.96558C7.66779 5.04279 7.70545 5.14661 7.6993 5.25258L7.53324 8.10906C7.52136 8.31291 7.35315 8.47211 7.14965 8.47212H6.85027C6.64677 8.47211 6.47856 8.31291 6.46668 8.10906L6.30061 5.25258C6.29446 5.14661 6.33212 5.04279 6.40471 4.96558C6.47731 4.88837 6.57841 4.84461 6.6842 4.84461ZM6.99995 10.6686C6.61335 10.6686 6.29995 10.3437 6.29995 9.94306C6.29995 9.54238 6.61335 9.21756 6.99995 9.21756C7.38655 9.21756 7.69995 9.54238 7.69995 9.94306C7.69995 10.3437 7.38655 10.6686 6.99995 10.6686Z",fill:"currentColor"})))}var _=c.forwardRef(b),y="AlertIcon_alertIcon__OiyQz",C=function(e){var t=(0,c.useContext)(o.Ni),n=t.theme,r=t.systemTheme,i=(0,a._T)((0,a.t6)(n,r)),s=l()(e.className,y);return i?c.createElement(f,{className:s}):c.createElement(_,{className:s})}},62729:function(e,t,n){"use strict";n.d(t,{e:function(){return p}});var r=n(53782),o=n(25610),a=n(10829),i=n(28781),l=n(71894),c=n.n(l),s=n(22491),u="DetailsInfo_container__+CsKc",d=["content","className","loading"],p=function(e){var t=e.content,n=e.className,l=e.loading,p=(0,r.Z)(e,d),m=c()(u,n);return l?s.createElement("div",{className:m},s.createElement(a.O,{height:12,width:(0,i.$)(150,620)})):""!==t?s.createElement("div",p,s.createElement(o.Z,{className:m},t)):null}},59822:function(e,t,n){"use strict";n.d(t,{o:function(){return l}});var r=n(25773),o=n(8879),a=n(52368),i=n(22491),l=function(e){return i.createElement(o.zx,(0,r.Z)({icon:i.createElement(a.Z,null)},e))}},11704:function(e,t,n){"use strict";n.d(t,{n:function(){return m}});var r=n(25773),o=n(53782),a=n(22491),i=n(83792),l=n(13621),c=n(69917),s=n(59822),u=n(3523);function d(e){return e.push(""),e.join("\n")}var p=["label"],m=function(e){var t=e.label,n=void 0===t?"Download qodana.yaml":t,m=(0,o.Z)(e,p),f=(0,l.CB)(c.C_);return a.createElement(s.o,(0,r.Z)({"data-qd-test":i.b.profileDownloadBtn,onClick:function(){var e=function(e){for(var t=[],n=e.filter((function(e){return!e.deletion})).map((function(e){return e.content})),r=" - name: All paths:"===n.slice(-2).join(""),o=0;o0){var u,d=(0,fe.Z)(s.target);try{for(d.s();!(u=d.n()).done;){var p=u.value;n.push({group:"edges",data:{id:"".concat(s.name,"-").concat(p),source:s.name,target:p}})}}catch(m){d.e(m)}finally{d.f()}}}}catch(m){c.e(m)}finally{c.f()}}}}catch(m){o.e(m)}finally{o.f()}return n}(r)}),[r]);return c.createElement(b.AB,{height:600,width:700,opened:n,onClose:t,title:r.comment,titleClassName:ke},c.createElement(Ee,{elements:o}))},je=function(e){var t,n,r=e.offset,a=void 0===r?0:r,i=e.onChange,u=e.onClickTag,p=e.problem,f=e.showingOnboardingTip,R=e.search,D=e.showingContent,H=e.isUnknownError,z=(0,c.useContext)(w.bC),W=(0,y.qt)(!1),U=(0,s.Z)(W,3),K=U[0],G=U[1],Q=U[2],J=function(){K?Q():G()},X=(0,c.useCallback)((function(e){i&&(0,C.d)(e,i)}),[i]),Y=(0,c.useCallback)((function(){var e;!!(null===(e=window.getSelection())||void 0===e||!e.toString())&&i&&i()}),[i]),$=D&&z!==x.nn.Stable&&function(e){return e.sources.some((function(e){var t;return Array.isArray(null===(t=e.attributes)||void 0===t?void 0:t.markers)}))}(p);return c.createElement(c.Fragment,null,c.createElement("label",{className:l()(q,(t={},(0,o.Z)(t,P,D),(0,o.Z)(t,N,!!i),t)),onClick:Y,style:{width:"100% + ".concat(a,"px")}},c.createElement("input",{className:S,onKeyDown:X}),c.createElement(v.X2,{top:"xs",className:l()(j,I)},c.createElement(me,{severity:p.severity,showingOnboardingTip:f}),c.createElement("div",{"data-qd-test":E.b.problemCol,className:l()(A,O)},c.createElement(_.q,{className:Z,line:p.comment,search:R}),(null===p||void 0===p||null===(n=p.attributes)||void 0===n?void 0:n.importanceScore)&&c.createElement("div",{className:M},c.createElement(le,{score:Number(p.attributes.importanceScore)})),D&&"undefined"!==typeof u&&!!p.tags&&c.createElement(V,{className:M,data:p.tags,onClick:u})),!H&&c.createElement(c.Fragment,null,c.createElement("div",{"data-qd-test":E.b.problemCol,style:k(a,3),className:A},c.createElement(_.q,{className:Z,line:p.category,search:R})),c.createElement("div",{"data-qd-test":E.b.problemCol,style:k(a,2),className:l()(A,T)},c.createElement(_.q,{className:Z,line:p.type,search:R}),c.createElement("div",{className:B},$?c.createElement(b.zx,{variant:"clear",className:L,onClick:function(e){e.stopPropagation(),J()}},c.createElement(g.ZP,{glyph:h()})):c.createElement(g.ZP,{glyph:D?m():d(),className:F})))))),$&&c.createElement(Se,{problem:p,opened:K,onClose:J}))},Ne=c.memo(je),Ze=n(62729),Pe="IssueDescription_container__MMHPI",Oe="IssueDescription_details__saCBY",Te=n(649),Le=n(47478),Ie=n(78625),Ae=n(60012);function Be(e){var t=e.file,n=e.path;return t?""!==n?"".concat(n,"/").concat(t):t:n}var qe,Fe,Me,Re,De,He,ze,Ve,We="ActionButtons_buttons__lvWNo",Ue=n(50189),Ke=n(68062),Ge=n(33438),Qe=n(39018),Je=n(95572),Xe={label:"ExclusionFilterSelect_label__PLLn0",popup:"ExclusionFilterSelect_popup__4v1a5",list:"ExclusionFilterSelect_list__cb0Ga",itemCust:"ExclusionFilterSelect_itemCust__fsBn0",itemBtn:"ExclusionFilterSelect_itemBtn__8IDsN",separator:"ExclusionFilterSelect_separator__1qKgc",chevron:"ExclusionFilterSelect_chevron__35-q+",active:"ExclusionFilterSelect_active__U9+Rf"},Ye=c.memo((function(e){var t=e.options,n=void 0===t?[]:t,r=e.onSelect,a=(0,c.useState)(!1),i=(0,s.Z)(a,2),u=i[0],p=i[1],m=(0,c.useCallback)((function(){return p((function(e){return!e}))}),[]),f=(0,c.useCallback)((function(e){"Escape"===e.key&&p(!1)}),[]),h=(0,c.useCallback)((function(){return p(!1)}),[]),v=(0,c.useCallback)((function(e){var t=(0,Ge.p)(e.target,"LI","data-key");r(t),p(!1)}),[r]);return c.createElement("div",{onKeyDown:f},c.createElement(R.zx,{"data-qd-test":E.b.moreActionSelectBtn,className:l()(Xe.label,(0,o.Z)({},Xe.active,u)),onClick:m,text:!0},"More actions",c.createElement(g.ZP,{glyph:d(),className:Xe.chevron,height:Je.rW,suppressSizeWarning:!0})),c.createElement(Ke.ZP,{className:Xe.popup,hidden:!u,onCloseAttempt:h},c.createElement(Qe.ZP,null,c.createElement("ul",{className:Xe.list},n.map((function(e){return c.createElement("li",{className:Xe.listItem,"data-key":e.key,key:e.key},"CUSTOM"===e.type&&c.createElement("div",{className:Xe.itemCust},e.label),"BUTTON"===e.type&&c.createElement(R.zx,{"data-qd-test":E.b.moreActionOption,className:Xe.itemBtn,onClick:v,text:!0,title:e.label},e.label),"SEPARATOR"===e.type&&c.createElement("div",{className:Xe.separator},e.label))}))))))})),$e=c.memo((function(e){var t=e.category,n=e.excludedByField,r=e.fileName,o=e.line,a=e.onSelect,i=e.path,l=e.problemComment,s=e.sourceCode,u=e.type,d=void 0===u?"":u,p=(0,c.useCallback)((function(e){switch(e){case"category":a({category:e,name:t});break;case"path":a({category:e,name:i});break;case"type":a({category:e,name:d})}}),[a,d,t,i]),m=(0,c.useMemo)((function(){return[{key:"path",label:"Exclude path",type:"BUTTON"},{key:"type",label:"Hide type",type:"BUTTON"},{key:"category",label:"Hide category",type:"BUTTON"},{key:"not problem",label:c.createElement("span",null,"It\u2019s not a problem?\xa0",c.createElement(W.ZP,{href:(0,U.dK)(l,d,"".concat(i,"/").concat(r),o,s)},K.Q8.youtrackInFilter)),type:"CUSTOM"}]}),[r,o,i,l,s,d]),f=(0,c.useMemo)((function(){var e=[];if(""!==i&&!n){var r=m[0],o=et[0];e=[(0,Ue.Z)((0,Ue.Z)({},r),{},{label:"Exclude path \u201c".concat(i,"\u201d")}),o]}if(""!==d&&!n||"type"===n){var a=m[1];e.push((0,Ue.Z)((0,Ue.Z)({},a),{},{label:"".concat(n?"Enable":"Hide"," type \u201c").concat(d,"\u201d")}))}if(""!==t&&!n||"category"===n){var l=m[2];e=[].concat((0,Te.Z)(e),[(0,Ue.Z)((0,Ue.Z)({},l),{},{label:"".concat(n?"Enable":"Hide"," category \u201c").concat(t,"\u201d")})])}return n||e.push(et[1]),e=[].concat((0,Te.Z)(e),[m[3],et[2]])}),[i,n,d,t,m]);return c.createElement(Ye,{options:f,onSelect:p})})),et=[{key:"description 1",label:"The exclusion means a file or path will be not included in the analysis",type:"SEPARATOR"},{key:"description 2",label:"To skip all problems of a certain type or category and fix them later, hide the respective item from the problems list",type:"SEPARATOR"},{key:"description 3",label:"If you think the detected problem is a false positive, submit a ticket to Qodana team",type:"SEPARATOR"}],tt=n(90698),nt=n(83491),rt=n(44334),ot=n(87019),at=n(13621),it=n(41328),lt=n(90824),ct=n(85086),st=n(91218),ut=n(1270),dt=n(34647),pt=["title","titleId"];function mt(){return mt=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ht(e,t){var n=e.title,r=e.titleId,o=ft(e,pt);return c.createElement("svg",mt({width:20,height:20,viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":r},o),n?c.createElement("title",{id:r},n):null,qe||(qe=c.createElement("path",{d:"M13.4265 8.71303L3.80446 10.7254C3.55561 10.7669 3.30677 10.8084 3.05792 10.8913C2.29065 11.1196 1.62706 11.576 1.12936 12.2191C-1.7531 15.9533 1.33674 20.8494 5.75375 19.8743L16.3297 18.3391C17.4495 18.0902 18.4034 17.4263 19.0463 16.472C21.7836 12.3851 18.2375 7.30231 13.4265 8.71303Z",fill:"url(#paint0_linear)"})),Fe||(Fe=c.createElement("path",{d:"M8.13969 1.26547C6.95767 0.186689 5.21575 -0.331959 3.24572 0.22818C2.43697 0.477131 1.71117 0.975033 1.19274 1.65965C-0.777293 4.21139 -0.113703 7.28178 1.85633 8.85847L12.3908 17.6547C13.4484 18.3601 14.8171 18.6713 16.3309 18.3393C17.4507 18.0904 18.4046 17.4265 19.0474 16.4722C20.6649 14.0449 20.0843 11.2442 18.3216 9.68831L8.13969 1.26547Z",fill:"url(#paint1_linear)"})),Me||(Me=c.createElement("path",{d:"M4.59252 0.0207459C4.07409 0.0622377 3.61787 0.124475 3.2446 0.248951C2.43585 0.477156 1.71005 0.975057 1.19162 1.65967C-1.87747 5.64288 1.41973 10.8294 6.10633 9.79206L18.7145 5.04125C19.0878 4.95827 19.3988 4.75081 19.6062 4.41888C20.3942 3.23636 19.5855 1.80489 18.2998 1.80489L5.11095 0C4.92431 0 4.75841 -2.16397e-08 4.59252 0.0207459Z",fill:"url(#paint2_linear)"})),Re||(Re=c.createElement("path",{d:"M16.2262 3.77679H3.78394V16.2243H16.2262V3.77679Z",fill:"black"})),De||(De=c.createElement("path",{d:"M10.0047 13.8792H5.33887V14.6675H10.0047V13.8792Z",fill:"white"})),He||(He=c.createElement("path",{d:"M9.38311 10.1256L8.86468 9.66918C8.47067 9.91813 7.99372 10.0634 7.47529 10.0634C6.04443 10.0634 5.00757 8.98457 5.00757 7.67757V7.65683C5.00757 6.32909 6.04443 5.25031 7.49603 5.25031C8.94763 5.25031 9.96375 6.32909 9.96375 7.63608V7.65683C9.96375 8.15473 9.81859 8.61114 9.54901 8.98457L10.026 9.39948L9.38311 10.1256ZM8.11814 9.00531L7.35087 8.36219L7.99372 7.63608L8.76099 8.3207C8.84394 8.13399 8.88542 7.90578 8.88542 7.67757V7.65683C8.88542 6.86849 8.30478 6.18387 7.47529 6.18387C6.6458 6.18387 6.0859 6.82699 6.0859 7.63608V7.65683C6.0859 8.44517 6.66654 9.12979 7.49603 9.12979C7.72414 9.12979 7.93151 9.0883 8.11814 9.00531Z",fill:"white"})),ze||(ze=c.createElement("path",{d:"M10.7722 5.33344H12.5349C14.0072 5.33344 15.0026 6.32924 15.0026 7.65697V7.67772C15.0026 8.98471 13.9865 10.0013 12.5349 10.0013H10.7722V5.33344ZM11.7883 6.24625V9.06769H12.5141C13.3436 9.06769 13.9243 8.50756 13.9243 7.67772V7.65697C13.9243 6.82714 13.3644 6.24625 12.5141 6.24625H11.7883Z",fill:"white"})),Ve||(Ve=c.createElement("defs",null,c.createElement("linearGradient",{id:"paint0_linear",x1:-.396248,y1:15.7047,x2:15.9156,y2:13.3595,gradientUnits:"userSpaceOnUse"},c.createElement("stop",{offset:.1763,stopColor:"#FC7A26"}),c.createElement("stop",{offset:.6342,stopColor:"#FF318C"})),c.createElement("linearGradient",{id:"paint1_linear",x1:-2.77683,y1:-.244681,x2:20.4313,y2:16.9958,gradientUnits:"userSpaceOnUse"},c.createElement("stop",{stopColor:"#FF318C"}),c.createElement("stop",{offset:.3993,stopColor:"#B544C6"}),c.createElement("stop",{offset:.8741,stopColor:"#FF318C"})),c.createElement("linearGradient",{id:"paint2_linear",x1:-5.47056,y1:7.39653,x2:20.2548,y2:1.36577,gradientUnits:"userSpaceOnUse"},c.createElement("stop",{stopColor:"#FF318C"}),c.createElement("stop",{offset:.1996,stopColor:"#D73BAB"}),c.createElement("stop",{offset:.5147,stopColor:"#9D4AD8"}),c.createElement("stop",{offset:.7481,stopColor:"#7953F4"}),c.createElement("stop",{offset:.8723,stopColor:"#6B57FF"})))))}var vt,gt,bt=c.forwardRef(ht),_t=["title","titleId"];function yt(){return yt=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Et(e,t){var n=e.title,r=e.titleId,o=Ct(e,_t);return c.createElement("svg",yt({width:21,height:23,viewBox:"0 0 21 23",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":r},o),n?c.createElement("title",{id:r},n):null,vt||(vt=c.createElement("g",{clipPath:"url(#clip0)"},c.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M17.1445 15.8101L12.2715 18.5046V16.3643L17.1445 13.6698V15.8101Z",fill:"white"}),c.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M10.0129 22.5716L19.9981 16.9301V5.66351L10.0129 11.305V22.5716Z",fill:"#000001"}),c.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12.0991 17.3362V19.0265L16.4548 16.5679V14.8776L12.0991 17.3362Z",fill:"white"}),c.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M10.013 0.0492554L0.027832 5.66334V16.9299L10.013 22.5715V11.3049L19.9982 5.66334L10.013 0.0492554Z",fill:"url(#paint0_linear)"}))),gt||(gt=c.createElement("defs",null,c.createElement("linearGradient",{id:"paint0_linear",x1:.15433,y1:16.3615,x2:20.7844,y2:8.04892,gradientUnits:"userSpaceOnUse"},c.createElement("stop",{offset:.043,stopColor:"#FF8618"}),c.createElement("stop",{offset:.3817,stopColor:"#FF246E"}),c.createElement("stop",{offset:.9892,stopColor:"#AF1DF5"})),c.createElement("clipPath",{id:"clip0"},c.createElement("rect",{width:20.026,height:22.61,fill:"white"})))))}var xt,wt=c.forwardRef(Et),kt={popup:"OpenInIDEWarning_popup__GTuNg",title:"OpenInIDEWarning_title__bOBMH",subtitle:"OpenInIDEWarning_subtitle__EX830",item:"OpenInIDEWarning_item__fYHA-",icon:"OpenInIDEWarning_icon__wjTjy",hint:"OpenInIDEWarning_hint__5b759",buttonContainer:"OpenInIDEWarning_buttonContainer__pAbkN"},St=c.memo((function(e){var t=e.opened,n=e.onClose,r=e.onCloseForever;return c.createElement(Ke.ZP,{className:kt.popup,hidden:!t,onCloseAttempt:n,directions:[tt.Ns.RIGHT_BOTTOM,tt.Ns.RIGHT_TOP]},c.createElement("header",{className:kt.title},"Make sure everything is installed"),c.createElement("div",{className:kt.subtitle},"To open problems from Qodana report straight in an IDE you have to be sure:"),c.createElement("div",null,c.createElement("div",{className:kt.item},c.createElement(wt,{className:kt.icon}),"You have\xa0",c.createElement(W.ZP,{href:U.mH,title:"Open external resource"},"Toolbox app"),"\xa0installed."),c.createElement("div",{className:kt.item},c.createElement(bt,{className:kt.icon}),"You have\xa0",c.createElement(W.ZP,{href:U.iJ,title:"Open external resource"},"Qodana plugin"),"\xa0installed in IDE.")),c.createElement("div",{className:kt.hint},"\u201cOpen in IDE\u201d action works only if project is cloned from version control. It doesn\u2019t work with projects created locally."),c.createElement("footer",{className:kt.buttonContainer},c.createElement(dt.z,{className:kt.button,variant:"primary",size:"L",onClick:r},"Everything is installed!"),c.createElement(dt.z,{className:kt.button,variant:"clear",size:"L",onClick:n},"I\u2019ll come back later")))})),jt=["title","titleId"];function Nt(){return Nt=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Pt(e,t){var n=e.title,r=e.titleId,o=Zt(e,jt);return c.createElement("svg",Nt({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":r},o),n?c.createElement("title",{id:r},n):null,xt||(xt=c.createElement("path",{d:"M15.6952 7.28776L8.7079 0.302766C8.61234 0.206802 8.49877 0.130658 8.37372 0.0787017C8.24867 0.0267454 8.11459 0 7.97918 0C7.84377 0 7.70969 0.0267454 7.58464 0.0787017C7.45959 0.130658 7.34602 0.206802 7.25046 0.302766L5.80136 1.75641L7.64189 3.59325C7.85896 3.51972 8.09231 3.50862 8.31539 3.5612C8.53846 3.61379 8.7423 3.72795 8.9037 3.8907C9.06511 4.05345 9.1776 4.25825 9.22838 4.48179C9.27916 4.70534 9.26618 4.93865 9.19093 5.15519L10.9607 6.92539C11.2253 6.83409 11.5132 6.83627 11.7765 6.93157C12.0397 7.02686 12.2623 7.20952 12.4073 7.44909C12.5522 7.68866 12.6106 7.97068 12.5729 8.24814C12.5351 8.52559 12.4035 8.78173 12.1998 8.97386C11.9962 9.16599 11.7328 9.2825 11.4537 9.30398C11.1746 9.32546 10.8966 9.25061 10.6659 9.0919C10.4353 8.93319 10.266 8.70021 10.1863 8.43179C10.1066 8.16337 10.1212 7.87573 10.2278 7.6168L8.57464 5.96323V10.3158C8.82524 10.4405 9.02555 10.6474 9.14219 10.9019C9.25884 11.1564 9.28478 11.4432 9.21569 11.7145C9.1466 11.9858 8.98666 12.2252 8.76251 12.3929C8.53835 12.5605 8.26353 12.6463 7.98383 12.6359C7.70413 12.6255 7.43644 12.5196 7.22536 12.3357C7.01427 12.1518 6.87255 11.9012 6.8238 11.6255C6.77505 11.3498 6.82221 11.0657 6.95744 10.8206C7.09266 10.5755 7.30777 10.3841 7.56694 10.2783V5.88826C7.41713 5.82711 7.28093 5.73687 7.16621 5.62274C7.05149 5.50862 6.96052 5.37288 6.89857 5.22338C6.83661 5.07387 6.8049 4.91357 6.80526 4.75173C6.80563 4.58989 6.83806 4.42973 6.90068 4.2805L5.0893 2.46865L0.300603 7.2586C0.108112 7.45148 0 7.71288 0 7.98542C0 8.25796 0.108112 8.51936 0.300603 8.71224L7.29211 15.6972C7.38767 15.7932 7.50123 15.8693 7.62628 15.9213C7.75133 15.9733 7.88541 16 8.02082 16C8.15623 16 8.29031 15.9733 8.41536 15.9213C8.54041 15.8693 8.65398 15.7932 8.74954 15.6972L15.6994 8.7414C15.8919 8.54852 16 8.28712 16 8.01458C16 7.74204 15.8919 7.48064 15.6994 7.28776",fill:"#F05133"})))}var Ot=c.forwardRef(Pt),Tt=n(98831),Lt=n(53554),It=n(4274),At=n(94994),Bt=n(90966),qt=n(94240),Ft=n(51337),Mt=n(98090),Rt=n(34984),Dt={c:["clion"],"c#":["rider"],"c++":["clion"],coffeescript:["webstorm","phpstorm","idea","pycharm"],css:["webstorm","phpstorm","idea","pycharm"],dart:["webstorm","phpstorm","idea","pycharm"],"f#":["rider"],go:["goland","idea"],vgo:["goland","idea"],groovy:["idea"],html:["webstorm","phpstorm","idea","pycharm"],java:["idea"],javascript:["webstorm","phpstorm","idea","pycharm"],"jupyter notebook":["pycharm","idea"],kotlin:["idea"],"objective-c":["appcode"],php:["phpstorm","idea"],puppet:["rubymine","idea"],python:["pycharm","idea"],ruby:["rubymine","idea"],rust:["clion","idea"],scala:["idea"],swift:["appcode"],typescript:["webstorm","phpstorm","idea","pycharm"]},Ht={QDJVM:["idea"],QDJVMC:["idea"],QDJVME:["idea"],QDPY:["pycharm","idea"],QDAND:["idea"],QDJS:["webstorm","phpstorm","idea","pycharm"],QDPHP:["phpstorm","idea"],QDGO:["goland","idea"],QDRST:["clion","idea"],QDNET:["rider","idea"]},zt={appcode:{icon:Tt.Z,name:"AppCode",tag:"appcode"},clion:{icon:Lt.Z,name:"CLion",tag:"clion"},goland:{icon:It.Z,name:"GoLand",tag:"goland"},idea:{icon:At.Z,name:"IntelliJ IDEA",tag:"idea"},phpstorm:{icon:Bt.Z,name:"PhpStorm",tag:"php-storm"},pycharm:{icon:qt.Z,name:"PyCharm",tag:"pycharm"},rider:{icon:Ft.Z,name:"Rider",tag:"rd"},rubymine:{icon:Mt.Z,name:"RubyMine",tag:"rubymine"},webstorm:{icon:Rt.Z,name:"WebStorm",tag:"web-storm"}},Vt=function(e,t,n,r){var o=e,a=o.indexOf("@");return-1!==a&&(o="https://".concat(o.slice(a+1).replace(":","/"))),r&&(o+="/src/".concat(r)),t&&t!==x.rR.global&&(o+="/".concat(t)),n&&(o+="#lines-".concat(n)),o},Wt=function(e,t,n,r){var o=e;return e.includes("git@")&&(o=e.slice(4).replace(":","/"),o="https://".concat(o)),r&&(o+="/".concat(t&&t!==x.rR.global?"blob":"tree","/").concat(r)),t&&t!==x.rR.global&&(o+="/".concat(t)),n&&(o+="#L".concat(n)),o},Ut=function(e,t,n){var r,o,a=e.replace("git@git.",""),i=(a=a.replace("git.","")).split("/"),l=i[2],c=null!==(r=i[3])&&void 0!==r?r:"",s=null!==(o=i[4])&&void 0!==o?o:"";return a="https://".concat(l,"/p/").concat(c,"/repositories/").concat(s),t&&t!==x.rR.global&&(a+="/files/".concat(t)),n&&(a+="?line=".concat(n)),a},Kt=function(e){var t;if(!e)return"";if(e.sarifIdea&&"string"!==typeof e.sarifIdea)return null!==(t=e.sarifIdea.repositoryUri)&&void 0!==t?t:"";if(e.teamcityAgent&&"string"!==typeof e.teamcityAgent){var n=Object.values(e.teamcityAgent);if(n.length>0)return n[0]}else for(var r=0,o=Object.values(e);r4&&(e.includes("git@git.")||e.includes("git."));return n||t||r||o}(t.sarifIdea.repositoryUri)&&n.push({image:c.createElement(Ot,null),key:"VCS",label:"VCS"}),n}(f,a),v=(0,c.useState)(function(e,t){var n=(0,ut.fp)("".concat(ct.mp.fileDestination).concat((0,ut.n$)(t))),r=e.find((function(e){return e.key===n}));return n&&r?n:e[0].key}(h,d)),g=(0,s.Z)(v,2),b=g[0],_=g[1],y=(0,c.useState)(!1),C=(0,s.Z)(y,2),w=C[0],k=C[1];(0,c.useEffect)((function(){var e=(0,ut.fp)(ct.mp.onboardingHidden);null!==e&&void 0!==e&&e.openInIDE&&k(!1),p((0,lt.Hp)(d,!(null===e||void 0===e||!e.openInIDE)))}),[p,d,m]);var S=(0,c.useCallback)((function(){k(!1)}),[k]),j=(0,c.useCallback)((function(){var e=(0,Ue.Z)((0,Ue.Z)({},(0,ut.fp)(ct.mp.onboardingHidden)),{},{openInIDE:!0});(0,ut.m8)(ct.mp.onboardingHidden,e),p((0,lt.Hp)(d,!0)),S()}),[p,d,S]),N=(0,c.useCallback)((function(){k(!0)}),[k]),Z="VCS"===b?function(e,t,n){var r=Kt(n);".git"===r.slice(-4)&&(r=r.slice(0,r.length-4));var o="master";return null!==n&&void 0!==n&&n.sarifIdea&&"string"!==typeof n.sarifIdea&&(o=n.sarifIdea.branch),r.includes("@bitbucket.org")?Vt(r,e,t,o):r.includes("//github")||r.includes("@github")||r.includes("//gitlab")||r.includes("@gitlab")?Wt(r,e,t,o):Ut(r,e,t)}(o,null===i||void 0===i?void 0:i.line,a):function(e,t,n,r,o){var a="message=".concat(encodeURIComponent(n)),i="",l="";if(o&&"undefined"!==typeof o.sarifIdea&&"string"!==typeof o.sarifIdea){var c=o.sarifIdea,s=c.revisionId,u=c.repositoryUri;i="origin=".concat(u,"&marker_revision=").concat(s)}return e&&e!==x.rR.global&&r&&(l="path=".concat(e,":").concat(r.line,":").concat(r.offset,"&length=").concat(r.length)),"jetbrains://".concat(t,"/qodana/showMarker?").concat(i,"&").concat(l,"&").concat(a)}(o,b,u,i,a),P=(0,c.useCallback)((function(e){_(e),(0,ut.m8)("".concat(ct.mp.fileDestination).concat((0,ut.n$)(d)),e)}),[d]),O=function(){var e=h.find((function(e){return e.key===b}));return c.createElement(c.Fragment,null,e&&e.image&&e.image,K.rp.openFileIn," ",e&&e.label)};return""!==o&&o!==x.rR.global&&a?c.createElement("section",null,c.createElement(St,{opened:w,onCloseForever:j,onClose:S}),c.createElement("div",{className:l()(Qt,ot.wu.text)},m||"VCS"===b?c.createElement(W.ZP,{className:Jt,href:Z,title:"Open external resource",disabled:w},O()):c.createElement("button",{className:Jt,"data-qd-clickable":it.vf.openProjectButton,onClick:N,disabled:w},O()),c.createElement(nt.P,{disabled:w,classNames:ln,htmlProps:cn,directions:on,onSelect:P,options:h,showSelectedTooltip:!1,showDisabledChevron:!0}))):null},ln={itemContainer:rn,list:nn,chevronIcon:en,container:Xt,label:Yt,labelOpened:$t,chevron:tn},cn={triggerBtn:{"data-qd-test":E.b.openProjectSelectBtn,"data-qd-clickable":it.vf.openProjectInSelector}},sn=c.memo(an);function un(e){var t=e.category,n=e.excludedByField,r=e.excludeProblem,o=e.linter,a=e.problemComment,i=e.problemType,l=e.showingActions,s=e.source,u=e.vcs,d=s.file,p=s.line,m=s.code,f=s.path,h=Be(s);return c.createElement(v.X2,{className:We,middle:"xs",start:"xs"},c.createElement(sn,{language:s.language,linter:o,path:h,problemComment:a,source:s,vcs:u}),"undefined"!==typeof r&&l&&c.createElement($e,{category:t,excludedByField:n,fileName:d,line:p||0,onSelect:r,problemComment:a,sourceCode:(null===m||void 0===m?void 0:m.surroundingCode)||"",path:f,type:i}))}var dn=n(62646),pn=new(n.n(dn)()),mn=function(e,t,n,r){var o,a=[],i=t,l=e.split(/(\n+)/),c=0,s=(0,fe.Z)(l);try{for(s.s();!(o=s.n()).done;){var u=o.value,d=n+c;""!==u.trim()&&a.push({status:r,offset:d,length:u.length,line:i}),c+=u.length,"\n"===u&&(i+=1)}}catch(p){s.e(p)}finally{s.f()}return a};var fn,hn=n(10829),vn=n(28781),gn="CodeSkeleton_codeLine__Waw9n",bn=function(){var e=function(){return(0,vn.$)(150,620)};return c.createElement(c.Fragment,null,c.createElement(hn.O,{className:gn,height:12,width:e()}),c.createElement(hn.O,{className:gn,height:12,width:e()}),c.createElement(hn.O,{className:gn,height:12,width:e()}),c.createElement(hn.O,{className:gn,height:12,width:e()}),c.createElement(hn.O,{className:gn,height:12,width:e()}))},_n="CodeWrapper_messageInLine__OejRK",yn=c.lazy((function(){return Promise.resolve().then(n.bind(n,19925))})),Cn=function(e){var t=e.className,n=e.errors,r=e.severity,o=e.code,a=e.language,i=e.line,l=e.loading,s=void 0!==l&&l,u=e.underlineType,d=void 0===u?Ae.u.wave:u,p=!!o&&function(e){var t=!1;return"undefined"!==typeof e&&(t=!("undefined"===typeof e.offset||"undefined"===typeof e.length||"undefined"===typeof e.surroundingCode)),t}(o);return s?c.createElement(bn,null):p&&"undefined"!==typeof o?c.createElement(c.Suspense,{fallback:c.createElement(bn,null)},c.createElement(yn,{className:t,underlineType:d,code:o.surroundingCode,language:a,length:o.length,offset:o.offset,severity:r,startLine:o.startLine,errors:n})):"undefined"!==typeof i?c.createElement("span",{className:_n},"Problem was found in line ",i):null},En=c.memo(Cn),xn=["title","titleId"];function wn(){return wn=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Sn(e,t){var n=e.title,r=e.titleId,o=kn(e,xn);return c.createElement("svg",wn({width:12,height:16,viewBox:"0 0 12 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":r},o),n?c.createElement("title",{id:r},n):null,fn||(fn=c.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M0 2.18182C0 0.976834 0.967065 0 2.16 0H6.92369C7.14196 0 7.35076 0.0891844 7.50167 0.246878L11.778 4.71533C11.9205 4.86422 12 5.06236 12 5.26845V13.8182C12 15.0232 11.0329 16 9.84 16H2.16C0.967065 16 0 15.0232 0 13.8182V2.18182ZM2.16 1.35455C1.76236 1.35455 1.34 1.78016 1.34 2.18182V13.8182C1.34 14.2198 1.76236 14.6455 2.16 14.6455H9.84C10.2376 14.6455 10.66 14.2198 10.66 13.8182V5.86865L6.34 1.35455H2.16ZM3.6001 7.24219H8.4001V8.64219H3.6001V7.24219ZM8.4001 9.84219H3.6001V11.2422H8.4001V9.84219Z",fill:"#999999"})))}var jn=c.forwardRef(Sn),Nn=n(12587),Zn="PathButton_button__i3TUh",Pn="PathButton_disabled__7bQQb",On="PathButton_icon__nOpeh",Tn=c.memo((function(e){var t=e.active,n=e.path,r=e.onClick,a=e.maxLength,i=a?(0,Nn.I)(n,a):n,s=(0,c.useCallback)((function(){"undefined"!==typeof r&&r(n)}),[r,n]);return c.createElement(R.zx,{"data-qd-test":E.b.problemPathButton,className:l()(Zn,(0,o.Z)({},Pn,!t)),disabled:!t,onClick:s,text:!0,title:n,icon:jn,iconClassName:On},i)})),Ln="SourceFile_root__mWIt9",In="SourceFile_code__1aYNc",An=function(e){var t=e.className,n=e.children,r=e.onClickTag,o=e.pathButtonMaxLength,a=e.showingLinks,i=e.showingPath,s=e.filePath,u=e.tags;return c.createElement("div",{className:l()(Ln,t)},c.createElement("div",null,u&&r&&c.createElement("div",null,u.map((function(e){return c.createElement(H,{key:e,tag:e,onClick:r})}))),(a||i)&&s!==x.rR.global&&c.createElement(Tn,{active:a,onClick:e.moveOnFiles,path:s,maxLength:o})),c.createElement("div",{className:In},n))},Bn=c.memo(An),qn="Duplicates_duplicateBorder__FKDMl",Fn="Duplicates_duplicateContainer__Bw6We",Mn="Duplicates_duplicates__gN-Oh",Rn="SourceTypes_section__5TqRQ",Dn="SourceTypes_sources__4Lrv6",Hn="SourceTypes_summary__tddu8",zn="SourceTypes_sourceFile__QCjkd",Vn=c.memo((function(e){var t=e.problemComment,n=e.loading,o=e.severity,a=e.sourceProps,i=e.sources,u=e.onClickTag,d=e.linter,p=a.category,m=a.excludedByField,f=a.excludeProblem,h=a.showingActions,v=a.vcs,g=(0,c.useMemo)((function(){return function(e){return e.map((function(e,t){var n;return{id:"".concat(e.path,"/").concat(e.file,"_").concat(t),index:t,isIndex:null===(n=e.attributes)||void 0===n?void 0:n.isIndex,title:e.file,tooltip:"".concat(e.path,"/").concat(e.file)}}))}(i)}),[i]),b=(0,c.useMemo)((function(){return Math.floor(i.length/2)}),[i]),_=(0,c.useMemo)((function(){var e=g.filter((function(e){return e.isIndex}));return e.length>0?e:g.slice(b,g.length)}),[g,b]),y=(0,c.useMemo)((function(){var e=g.filter((function(e){return"boolean"===typeof e.isIndex&&!e.isIndex}));return e.length>0?e:g.slice(0,b)}),[g,b]),C=(0,c.useState)([i[y[0].index],i[_[0].index]]),E=(0,s.Z)(C,2),x=E[0],w=E[1],k=(0,c.useState)([y[0].id,_[0].id]),S=(0,s.Z)(k,2),j=S[0],N=S[1],Z=(0,c.useState)(),P=(0,s.Z)(Z,2),O=P[0],T=P[1];(0,c.useEffect)((function(){var e,t,n=null===(e=x[0])||void 0===e?void 0:e.code,r=null===(t=x[1])||void 0===t?void 0:t.code;if(2===x.length&&n&&r){var o=function(e,t,n,r){var o=[],a=[],i=pn.diff_main(n,r,!1);pn.diff_cleanupSemantic(i);var l,c="",s="",u=(0,fe.Z)(i);try{for(u.s();!(l=u.n()).done;){var d=l.value;if(-1===d[0]){var p=c.split("\n").length-1+e,m=mn(d[1],p,c.length,Ae.h.removed);o=[].concat((0,Te.Z)(o),(0,Te.Z)(m)),c+=d[1]}if(1===d[0]){var f=s.split("\n").length-1+t,h=mn(d[1],f,s.length,Ae.h.added);a=[].concat((0,Te.Z)(a),(0,Te.Z)(h)),s+=d[1]}0===d[0]&&(c+=d[1],s+=d[1])}}catch(v){u.e(v)}finally{u.f()}return{addedParts:a,removedParts:o}}(n.startLine,r.startLine,n.surroundingCode,r.surroundingCode),a=o.removedParts,i=o.addedParts;T([a,i])}}),[x]);var L=(0,c.useCallback)((function(e,t){var n=(0,Te.Z)(x),r=(0,Te.Z)(j),o=i.find((function(e,n){return"".concat(e.path,"/").concat(e.file,"_").concat(n)===t}));o&&(n[e]=o,w(n),r[e]=t,N(r))}),[j,i,x]);return c.createElement("div",{className:Rn},c.createElement("span",{className:Hn},"You have ",i.length," places with this code:"),c.createElement("div",{className:l()(Dn,Mn)},x.map((function(l,s){var g;return c.createElement("div",{key:l.path+Ie.qk+l.file,className:Fn},c.createElement(Le.r,{options:0===s?y:_,onSelectTab:function(e){return L(s,e)},selected:j[s]}),c.createElement(Bn,(0,r.Z)({},a,{className:qn,key:"".concat(l.path,"/").concat(l.file,"_").concat(s),onClickTag:u,pathButtonMaxLength:50,showingPath:!a.showingLinks&&i.length>1,filePath:Be(l),tags:null===(g=l.attributes)||void 0===g?void 0:g.tags}),c.createElement(En,{errors:O?O[s]:void 0,code:l.code,language:l.language,line:l.line,loading:n,underlineType:Ae.u.duplicates,severity:o})),0===s&&c.createElement(un,{category:p,excludedByField:m,excludeProblem:f,linter:d,problemComment:t,problemType:e.type,showingActions:h,source:l,vcs:v}))}))))})),Wn=c.memo((function(e){var t=e.problemComment,n=e.loading,o=e.linter,a=e.severity,i=e.sourceProps,s=e.sources,u=void 0===s?[]:s,d=i.category,p=i.excludedByField,m=i.excludeProblem,f=i.showingActions,h=i.vcs;return u.length?c.createElement("div",{className:l()(Dn,Rn)},u.map((function(l,s){return c.createElement(c.Fragment,{key:"".concat(l.path,"/").concat(l.file,"_").concat(s)},c.createElement(Bn,(0,r.Z)({},i,{showingPath:!0,filePath:Be(l)}),c.createElement(En,{code:l.code,language:l.language,line:l.line,loading:n,severity:a})),c.createElement(un,{linter:o,category:d,excludedByField:p,excludeProblem:m,problemComment:t,problemType:e.type,showingActions:f,source:l,vcs:h}))}))):null})),Un=n(53782),Kn="GluingChunks_root__ZtJpA",Gn="GluingChunks_lineNumberPlaceholder__T3Lq4",Qn=function(){return c.createElement("div",{className:Kn},c.createElement("div",{className:Gn},"..."))},Jn=n(35373),Xn=n.n(Jn)()((function(e){var t=[];if(!Array.isArray(e.markers))return[];var n,r=(0,fe.Z)(e.markers);try{for(r.s();!(n=r.n()).done;){var o=n.value,a=o.offset,i=o.length,l=o.line,c=o.name,s={position:a,name:c,line:l},u={position:a+i,name:c,line:l};t.push(s,u)}}catch(_){r.e(_)}finally{r.f()}t.sort((function(e,t){return e.position-t.position||e.name.localeCompare(t.name)}));for(var d=[],p=0,m=null,f=new Map,h=0,v=t;h0&&c.createElement(Qn,null),c.createElement(En,{errors:e.attributes&&Xn(e.attributes),code:e.code,language:e.language,line:e.line,loading:n,underlineType:Ae.u.markers,severity:r}))})))}));Yn.displayName="TaintGroupedSources";var $n=["category","excludedByField","excludeProblem","showingActions","vcs"],er=function(e){var t=e.problemComment,n=e.loading,o=e.severity,a=e.sourceProps,i=e.sources,l=e.linter,u=a.category,d=a.excludedByField,p=a.excludeProblem,m=a.showingActions,f=a.vcs,h=(0,Un.Z)(a,$n),v=(0,c.useMemo)((function(){var e={};return i.forEach((function(t){var n=[t.path,t.file].join(Ie.qk);e[n]||(e[n]=[]),e[n].push(t)})),e}),[i]),g=Object.entries(v).map((function(e){var t=(0,s.Z)(e,2),n=t[0];return{id:n,title:t[1][0].file,tooltip:n}})),b=(0,c.useState)(Object.keys(v)[0]),_=(0,s.Z)(b,2),y=_[0],C=_[1],E=v[y][0];return c.createElement("div",{className:Dn},c.createElement(Le.r,{options:g,onSelectTab:C,selected:y}),c.createElement(Bn,(0,r.Z)({className:zn,showingPath:!0,showingActions:m,filePath:Be(E)},h),c.createElement(Yn,{sources:v[y],loading:n,severity:o})),c.createElement(un,{category:u,excludedByField:d,excludeProblem:p,linter:l,problemComment:t,problemType:e.type,showingActions:m,source:v[y][0],vcs:f}))},tr=c.memo(er),nr=function(e){var t=e.detailsInfo,n=void 0===t?"":t,r=e.loading,o=e.problemComment,a=e.severity,i=e.sources,l=e.type,s=e.onClickTag,u=e.linter,d=i.some((function(e){return e.type===x.rR.duplicate})),p=i.some((function(e){return e.type===x.rR.taint})),m={category:e.category,excludeProblem:e.excludeProblem,excludedByField:e.excludedByField,moveOnFiles:e.moveOnFiles,showingActions:e.showingActions,showingLinks:e.showingLinks,vcs:e.vcs};return c.createElement(c.Fragment,null,c.createElement("div",{"data-qd-test":E.b.problemDescription,className:Pe},d&&c.createElement(Vn,{linter:u,loading:r,onClickTag:s,problemComment:o,severity:a,sourceProps:m,sources:i,type:l}),p&&c.createElement(tr,{linter:u,loading:r,problemComment:o,severity:a,sourceProps:m,sources:i,type:l}),!p&&!d&&c.createElement(Wn,{linter:u,loading:r,problemComment:o,severity:a,sourceProps:m,sources:i,type:l})),c.createElement(Ze.e,{"data-qd-test":E.b.problemDetailsInfo,loading:r,content:n,className:Oe}))},rr=c.memo(nr),or="Issue_root__YUO4D",ar="Issue_root_withCheckbox__zFWMr",ir="Issue_checkbox__nC0qq",lr="Issue_checked__Tmgu6",cr="Issue_islandContainer__2STy0",sr="Issue_islandContainer_opened__ucd3w",ur="Issue_islandContainer_closed__9mSqN",dr="Issue_island__JFjmY",pr=n(75446),mr=new Set(["Code Inspection","Qodana Intellij Linter(QDJVM)","Qodana Intellij Linter(QDJVMC)","Qodana Intellij Linter(QDJVME)","Qodana Intellij Linter(QDPY)","Qodana Intellij Linter(QDAND)","Qodana Intellij Linter(QDJS)","Qodana Intellij Linter(QDPHP)","Qodana Intellij Linter(QDGO)","Qodana Intellij Linter(QDRST)","Qodana Intellij Linter(IJCA)"]),fr="IssueCheckboxWrapped_checkbox__KpEdJ",hr="IssueCheckboxWrapped_hiddenLabel__szJBn",vr=function(e){var t=e.checked,n=e.tool,r=e.onChange,o=e.className;return c.createElement("span",{className:l()(fr,o)},function(e){return mr.has(e)}(n)?c.createElement(pr.Z,{"data-qd-test":E.b.problemCheckbox,labelClassName:hr,label:"select issue","aria-label":"select issue",checked:t,onChange:r}):c.createElement(ce.Z,{"data-qd-test":E.b.problemCheckboxTooltip,popupProps:gr,title:"".concat(K.k5.baselineNotSupprotedCheckbox," ").concat(n," tool.")},c.createElement(pr.Z,{"data-qd-test":E.b.problemCheckbox,labelClassName:hr,label:"select issue","aria-label":"select issue",checked:!1,disabled:!0})))},gr={className:"IssueCheckboxWrapped_tooltipPopup__VLi8N"},br=n(22951),_r=n(91976),yr=n(67591),Cr=n(94337),Er=n(84389),xr="IssueErrorBoundary_description__BlU4w",wr=function(e){(0,yr.Z)(n,e);var t=(0,Cr.Z)(n);function n(e){var r;return(0,br.Z)(this,n),(r=t.call(this,e)).state={hasError:!1},r}return(0,_r.Z)(n,[{key:"componentDidCatch",value:function(e){(0,Er.Tb)(e)}},{key:"render",value:function(){if(this.state.hasError){var e=this.props,t=e.offset,n=e.problem,r=e.showingContent,o=e.onChange;return c.createElement(c.Fragment,null,c.createElement(Ne,{showingOnboardingTip:!1,showingContent:r,isUnknownError:!0,onChange:o,offset:t,problem:(0,Ue.Z)((0,Ue.Z)({},n),{},{severity:x.zb.unknown,comment:"Unknown error"})}),r&&c.createElement("div",{className:xr},"Unfortunately we couldn\u2019t recognize the problem due to problems on our side. Please report us in ",c.createElement(W.ZP,{href:U.ZW},"YouTrack")))}return this.props.children}}],[{key:"getDerivedStateFromError",value:function(){return{hasError:!0}}}]),n}(c.Component),kr={},Sr=c.memo((function(e){var t,n=e.captionCompensateOffset,i=e.checked,s=void 0!==i&&i,u=e.className,d=e.detailsInfo,p=e.excludedByField,m=e.excludeProblem,f=e.htmlProps,h=void 0===f?kr:f,v=e.linter,g=e.loading,b=e.moveOnFiles,_=e.offset,y=e.onClickTag,C=e.onToggleOpen,E=e.opened,x=e.problem,w=e.search,k=e.showingActions,S=void 0===k||k,j=e.showingLinks,N=e.showingOnboardingTip,Z=void 0!==N&&N,P=e.sources,O=e.vcs,T=E?a.ZP:"div",L=!!e.onChangeCheckbox;return c.createElement("div",(0,r.Z)({className:l()(or,(0,o.Z)({},ar,L))},h),L&&c.createElement(vr,{className:l()(ir,(0,o.Z)({},lr,s)),checked:s,onChange:function(){e.onChangeCheckbox&&e.onChangeCheckbox(x)},tool:x.tool}),c.createElement("div",{className:l()(cr,(t={},(0,o.Z)(t,ur,!E),(0,o.Z)(t,sr,E),t))},c.createElement(T,{style:{marginLeft:"".concat(_,"px")},className:l()(u,(0,o.Z)({},dr,E))},c.createElement(wr,{problem:x,offset:_||n,showingContent:E,onChange:C},c.createElement(Ne,{offset:_||n,problem:x,search:w,showingOnboardingTip:Z,showingContent:E,onChange:C,onClickTag:y}),E&&c.createElement(rr,{category:x.category,detailsInfo:d,excludedByField:p,excludeProblem:m,linter:v,loading:g,moveOnFiles:b,onClickTag:y,problemComment:x.comment,severity:x.severity,showingActions:S,showingLinks:j,sources:P,type:x.type,vcs:O})))))})),jr=Sr},85920:function(e,t,n){"use strict";n.d(t,{Q:function(){return j}});var r=n(25773),o=n(50189),a=n(649),i=n(60726),l=n(11026),c=n(74059),s=n(95178),u=n(22491),d=n(44334),p=n(13621),m=n(27937),f=n(59881),h=n(35449),v=n(91218),g=n(39881),b=n(2410),_=n(8785),y=n(89467),C=n(59065),E=n(39994),x=n(90122),w=function(e,t,n){var r="",o=[];if((0,x.Q$)(e,"detailsInfo")&&(r=e.detailsInfo),Array.isArray(o)&&(o=e.sources),n&&(0===o.length||""===r)){var a=t&&t.find((function(t){return t.hash===e.hash}));"undefined"!==typeof a&&(r=a.detailsInfo,o=a.sources)}return{detailsInfo:r,sources:o}},k=n(23163),S={addExcludedPath:f.UA,applyTagFilters:m.V_,excludeProblem:m.mE,excludeScopes:f.qV,setChangedProfileContent:h.R},j=(0,d.$j)((function(e,t){var n=t.problemsTabName,r=(0,v.mI)(e);return{changedContent:r.profile.changedContent,excludedPaths:(0,_.Q_)(r.marker),excludedScopes:r.marker.excludedScopes,exclusionFilters:(0,b.q)(r),furtherInfo:r.info.initialArrayWithFurtherInfo,inspections:(0,E.DP)(r.inspections),markers:r.marker.options,problemsTabName:n,processedFurtherInfo:r.info.processedArrayWithFurtherInfo,selectedTags:(0,g.Ne)(n).selectRepresentedTagFilters(r),vcs:r.metaInf.vcs,linter:r.metaInf.linter}}),S)((function(e){var t=e.changedContent,n=e.excludedPaths,d=e.excludedScopes,m=e.exclusionFilters,f=e.furtherInfo,h=e.inspections,g=e.problem,b=e.problemsTabName,_=e.processedFurtherInfo,E=e.selectedTags,x=e.opened,S=(0,p.CG)(v.L7),j=(0,u.useContext)(C.Il).environment,N=(0,u.useContext)(s.B)===c.g3.all,Z=(0,u.useState)(),P=(0,l.Z)(Z,2),O=P[0],T=P[1],L=(0,u.useState)([]),I=(0,l.Z)(L,2),A=I[0],B=I[1],q=(0,u.useState)(""),F=(0,l.Z)(q,2),M=F[0],R=F[1],D=0===A.length&&""===M;(0,u.useEffect)((function(){B([]),R("")}),[g]),(0,u.useEffect)((function(){var e;if(x){var t,n=(0,i.Z)(m);try{for(n.s();!(t=n.n()).done;){var r=t.value;if("path"!==r.category&&r.name===g[r.category]){e=r.category;break}}}catch(o){n.e(o)}finally{n.f()}T(e)}}),[x,g,m]),(0,u.useEffect)((function(){if(x&&0===A.length&&""===M){var e=w(g,f,_);(e.sources.length>0||""!==e.detailsInfo)&&(B(e.sources),R(e.detailsInfo))}}),[A,M,x,g,f,_]);return u.createElement(k.Z,(0,r.Z)({},e,{detailsInfo:M,excludedByField:O,excludeProblem:function(r){if(N&&(0,y.bt)({environment:j,hide:!0,source:"problem area",type:"path"===r.category?"location":r.category}),"path"===r.category){var l=r.name;if(n.includes(l)){var c=[].concat((0,a.Z)(d),["excluded"]);e.excludeScopes(S,c)}else e.addExcludedPath(S,l)}else{var s=m.filter((function(e){return e.category!==r.category||e.name!==r.name}));s.length===m.length&&s.push(r);var u=function(e,t){var n,r=[],o=e.filter((function(e){return"path"!==e.category})).map((function(e){return e.name})),a=new Set(o),l=(0,i.Z)(t);try{for(l.s();!(n=l.n()).done;){var c=n.value;(a.has(c.group)||a.has(c.displayName))&&r.push(c.shortName)}}catch(s){l.e(s)}finally{l.f()}return r}(s,h);e.setChangedProfileContent(S,(0,o.Z)((0,o.Z)({},t),{},{excludedChecks:u})),e.excludeProblem(S,s)}},loading:D,onToggleOpen:function(){if(!x&&(0===A.length||""===M)){var t=w(g,f,_);B(t.sources),R(t.detailsInfo)}e.onToggleOpen(g)},onClickTag:function(t){if(N&&(0,y.bt)({environment:j,hide:!1,source:"filters",type:"tag"}),!E.includes(t)){var n=[].concat((0,a.Z)(E),[t]);e.applyTagFilters(S,n,b)}},sources:A}))}))},42571:function(e,t,n){"use strict";var r;n.d(t,{W:function(){return r}}),function(e){e.type="type",e.path="location",e.resetMultiple="reset multiple"}(r||(r={}))},39994:function(e,t,n){"use strict";n.d(t,{Hq:function(){return u},DP:function(){return p},EP:function(){return m},gv:function(){return f},tq:function(){return d}});var r=n(649),o=n(60726),a=n(50189),i=n(46167),l=function(e,t){var n,r=[],a=(0,o.Z)(e);try{var i=function(){var e=n.value;e.inspections.forEach((function(n){n.group=e.name,n.tool=t,r.push(n)}))};for(a.s();!(n=a.n()).done;)i()}catch(l){a.e(l)}finally{a.f()}return r},c=n(26645),s={data:[],failed:!1,processed:!1,requestWasMade:!1};function u(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:s,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case c.Tq:return(0,a.Z)((0,a.Z)({},e),{},{requestWasMade:!1});case c.OX:if(Array.isArray(t.data)){var n,i=[],u=(0,o.Z)(t.data);try{for(u.s();!(n=u.n()).done;){var d=n.value;i=[].concat((0,r.Z)(i),(0,r.Z)(l(d.groups,d.tool)))}}catch(m){u.e(m)}finally{u.f()}return(0,a.Z)((0,a.Z)({},e),{},{data:i,processed:!0,requestWasMade:!0})}var p=l(t.data.groups,t.data.tool);return(0,a.Z)((0,a.Z)({},e),{},{data:[].concat((0,r.Z)(e.data),(0,r.Z)(p)),processed:!0,requestWasMade:!0});case c.wY:return(0,a.Z)((0,a.Z)({},e),{},{failed:!0,requestWasMade:!0});default:return e}}var d=function(e){var t=e.failed,n=e.processed,r=e.requestWasMade;return!r||r&&!n&&!t},p=function(e){return e.data},m=(0,i.P1)(p,(function(e){return e.filter((function(e){return e.enabled}))})),f=((0,i.P1)(m,(function(e){return e.length})),(0,i.P1)(p,(function(e){return e.reduce((function(e,t){return t.enabled?"Created"!==t.status&&"Switched"!==t.status||++e.increment:"Switched"===t.status&&++e.decrement,e}),{increment:0,decrement:0})})))},26645:function(e,t,n){"use strict";n.d(t,{OX:function(){return o},Tq:function(){return a},wY:function(){return r}});var r="FAILURE_REQUEST_SUMMARY",o="PROCESSING_DATA_SUMMARY",a="REQUEST_DATA_SUMMARY"},26602:function(e,t,n){"use strict";n.d(t,{h:function(){return l}});var r,o=n(60726),a=n(78625),i=n(12328);!function(e){e.folder="folder",e.file="file"}(r||(r={}));var l=function(e,t){var n,l=t.includeProblems,u=t.includePlainArray,d=t.includeFolderContentCount,p=t.onlyFolders,m=[],f=[],h=0,v=new Map,g=c(u,f),b=s(d,v),_=(0,o.Z)(e);try{for(_.s();!(n=_.n()).done;){var y,C=n.value,E=(0,o.Z)(C.sources);try{var x=function(){var e,t=y.value,n=t.path.split(a.qk),i=m,c=0,s="",u=(0,o.Z)(n);try{var d=function(){var n,o,l,u=e.value;if(""===u)return"continue";s+=u;var d=i.find((function(e){return"folder"===e.type&&e.name===u})),m="".concat(t.path,"/").concat(t.file);if(null!==(n=d)&&void 0!==n&&n.problemsCount){var f;d.problemsCount+=1,null===(f=d.files)||void 0===f||f.add(m),d.files&&b(s,d.files)}else{var h=new Set([m]),v={content:[],level:c,name:u,path:s,problemsCount:1,type:r.folder};p||(v.files=h),i.push(v),g(u,s,r.folder),b(s,h),d=i.find((function(e){return e.type===r.folder&&e.name===u}))}i=null!==(o=null===(l=d)||void 0===l?void 0:l.content)&&void 0!==o?o:[],c++,s+=a.qk};for(u.s();!(e=u.n()).done;)d()}catch(x){u.e(x)}finally{u.f()}if(!p){var f,v,_=i.find((function(e){return e.type===r.file&&e.name===t.file}));if(l&&_&&(null===(f=_.problems)||void 0===f||!f.includes(C)))null===(v=_.problems)||void 0===v||v.push(C);if(!_){var E={content:[],level:c,name:t.file,path:t.path,type:r.file};l&&(E.problems=[C]),g(t.file,t.path,r.file),i.push(E),h+=1}}};for(E.s();!(y=E.n()).done;)x()}catch(w){E.e(w)}finally{E.f()}}}catch(w){_.e(w)}finally{_.f()}return(0,i.c)(m),u&&f.map((function(e){if(e.type!==r.file){var t=v.get(e.path);t&&(e.files=t)}return e})),{projectStructure:m,plainArray:f,filesCount:h,folderContentCount:v}},c=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1?arguments[1]:void 0;return function(n,r,o){e&&t.push({name:n,path:r,type:o})}},s=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1?arguments[1]:void 0;return function(n,r){e&&t.set(n,r)}}},12328:function(e,t,n){"use strict";n.d(t,{c:function(){return c},w:function(){return l}});var r=n(60726),o=n(95572),a=n(12766),i=n(33591),l=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.JN.severity;if(t===i.JN.severity)return e.sort((function(e,t){return o.iO.indexOf(e.severity)-o.iO.indexOf(t.severity)||(0,a.F)(t)-(0,a.F)(e)}));if(t===i.JN.reverseSeverity){var n=o.iO.slice().reverse();return e.sort((function(e,t){return n.indexOf(e.severity)-n.indexOf(t.severity)||(0,a.F)(t)-(0,a.F)(e)}))}return t===i.JN.alphabetically?e.sort((function(e,t){return e.comment.localeCompare(t.comment)||(0,a.F)(t)-(0,a.F)(e)})):t===i.JN.reverseAlphabetically?e.sort((function(e,t){return t.comment.localeCompare(e.comment)||(0,a.F)(t)-(0,a.F)(e)})):e},c=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.JN.alphabetically,n=s(t),o=function e(t){t.sort(n);var o,a=(0,r.Z)(t);try{for(a.s();!(o=a.n()).done;){e(o.value.content)}}catch(i){a.e(i)}finally{a.f()}};return o(e),e},s=function(e){return{alphabetically:function(e,t){return t.type.localeCompare(e.type)||e.name.localeCompare(t.name)},count:function(e,t){var n,r,o,a,i,l,c=null!==(n=null!==(r=null===t||void 0===t?void 0:t.problemsCount)&&void 0!==r?r:null===(o=t.problems)||void 0===o?void 0:o.length)&&void 0!==n?n:0,s=null!==(a=null!==(i=null===e||void 0===e?void 0:e.problemsCount)&&void 0!==i?i:null===(l=e.problems)||void 0===l?void 0:l.length)&&void 0!==a?a:0;return t.type.localeCompare(e.type)||c-s},reverseAlphabetically:function(e,t){return t.type.localeCompare(e.type)||t.name.localeCompare(e.name)},reverseCount:function(e,t){var n,r,o,a,i,l,c=null!==(n=null!==(r=null===t||void 0===t?void 0:t.problemsCount)&&void 0!==r?r:null===(o=t.problems)||void 0===o?void 0:o.length)&&void 0!==n?n:0,s=null!==(a=null!==(i=null===e||void 0===e?void 0:e.problemsCount)&&void 0!==i?i:null===(l=e.problems)||void 0===l?void 0:l.length)&&void 0!==a?a:0;return t.type.localeCompare(e.type)||s-c}}[e]}},19925:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return R}});var r=n(22951),o=n(91976),a=n(67591),i=n(94337),l=n(22491),c=n(11026),s=n(90122),u=n(71894),d=n.n(u),p=n(2564),m=n.n(p),f={Angular2:"TypeScript",AngularJS:"JavaScript","GWT JavaScript":"JavaScript",JSInJade:"JavaScript","ECMAScript 6":"JavaScript","ECMA Script Level 4":"JavaScript","JavaScript 1.5":"JavaScript","JavaScript 1.8":"JavaScript",TypeScript:"TypeScript",CoffeeScript:"CoffeeScript",VueJS:"JavaScript",MongoJSExt:"JavaScript","Flow JS":"JavaScript","JSX Harmony":"JSX","TypeScript JSX":"JSX","Nashorn JS":"JavaScript",CoffeeScriptLiterate:"CoffeeScript"},h=n(83792),v="Code_grid__9Yk5Z",g="Code_hljsContainer__s0UOb",b=function(e){var t=e.className,n=e.code,r=e.language,o=(0,l.useState)(),a=(0,c.Z)(o,2),i=a[0],s=a[1],u=(0,l.useState)(0),p=(0,c.Z)(u,2),f=p[0],b=p[1];(0,l.useEffect)((function(){return b((function(e){return e+1}))}),[n]),(0,l.useEffect)((function(){i&&m().highlightElement(i)}),[i]);var _=y(r);return l.createElement("div",{"data-qd-test":h.b.problemCode,key:f,className:d()(_,g,t),ref:s},l.createElement("pre",{className:v},n))},_=l.memo(b),y=function(e){return e&&(0,s.Q$)(f,e)?f[e]:e};var C=function(e,t,n){return n.split("").slice(e,t).join("").split("\n")},E=function(e,t,n){if("undefined"!==typeof n)return function(e,t){var n=C(0,e,t),r=n[n.length-1],o=r?r.length:e-n.join("\n").length;return"undefined"===typeof n?e:o}(n,e);var r=e.split("\n")[t];return r.length-r.trimStart().length},x=n(60726),w=n(33591),k=n(60012),S=n(64649),j="CodeError_addedPart__9Ljb-",N="CodeError_removedPart__zpOHr",Z="CodeError_marker__Ko2zv",P="CodeError_errorCode__htMMi",O="CodeError_waveLine__vbFUh",T=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;return e>=10?"rgba(250, 80, 103, 1)":"rgba(250, 80, 103, ".concat(.1*e,")")},L=l.memo((function(e){var t,n=e.linePart,r=e.marker,o=e.underlineType,a=e.status,i=e.opacity,c=o===k.u.wave,s=o===k.u.duplicates,u=o===k.u.markers?{background:T(i)}:void 0;return l.createElement(l.Fragment,null,r&&l.createElement("span",{className:Z},r),l.createElement("div",{className:d()(P,(t={},(0,S.Z)(t,j,a===k.h.added&&s),(0,S.Z)(t,N,a===k.h.removed&&s),t)),style:u},n,c&&l.createElement("span",{className:O})))})),I={number:"CodeLineNumber_number__KvV34",single:"CodeLineNumber_single__oSnWx",twoDigit:"CodeLineNumber_twoDigit__iuxLp",threeDigit:"CodeLineNumber_threeDigit__vDN7Y",fourDigit:"CodeLineNumber_fourDigit__g5u8A"},A=function(e,t){return e<=9?t.single:e<=99?t.twoDigit:e<=999?t.threeDigit:e<=9999?t.fourDigit:t.fiveDigit},B=l.memo((function(e){var t=e.count,n=e.lineNumber;return l.createElement("span",{className:"".concat(I.number," ").concat(A(t,I))},n)})),q={critical:"Line_critical__9yJC+",removed:"Line_removed__Sw3H2",high:"Line_high__QWJuH",moderate:"Line_moderate__Saz72",low:"Line_low__aPnUs",info:"Line_info__GppJ4",added:"Line_added__pKQei",line:"Line_line__fd9mA",part:"Line_part__8rZRD",multiLineErr:"Line_multiLineErr__rTuyV"},F=function(e){var t=e.additionalErrorData,n=e.count,r=e.lineNumber,o=e.lineParts,a=e.severity,i=e.status,c=e.underlineType,s=void 0===c?k.u.wave:c;if(1===o.length)return l.createElement("span",{"data-qd-test":h.b.problemCodeLine,className:q.line},r>0&&l.createElement(B,{count:n,lineNumber:r}),l.createElement("code",null,o[0]," \n"));var u="";return s===k.u.wave?u=function(e,t){switch(t){case w.zb.critical:return e.critical;case w.zb.high:return e.high;case w.zb.moderate:return e.moderate;case w.zb.low:return e.low;case w.zb.info:return e.info;default:return""}}(q,a):s===k.u.duplicates&&(u=i===k.h.added?q.added:q.removed),l.createElement("span",{"data-qd-test":h.b.problemCodeLine,className:"".concat(q.line," ").concat(u)},l.createElement(B,{count:n,lineNumber:r}),l.createElement("code",null,o.map((function(e,n){if(n%2!==0){var r,o,a,c=Math.floor(n/2);return t&&c=u[0]&&r<=u[1],f=E(i,r,p?a:void 0);return m&&-1!==f&&"number"===typeof c?(p||(c-=f),d=function(e,t,n){var r=n.split("");return[r.slice(0,e).join(""),r.slice(e,e+t).join(""),r.slice(e+t,r.length).join("")]}(f,c,e),c=c-(e.length-f)-1):d=[e],l.createElement(M,{count:o+s.length,key:"".concat(e,"_").concat(r),lineNumber:o+r,lineParts:d,severity:t,underlineType:n})}));return d}},{key:"getLinesWithMultipleErrors",value:function(){var e=this.props,t=e.errors,n=void 0===t?[]:t,r=e.startLine,o=void 0===r?1:r,a=e.code,i=e.underlineType,c=a.split(/\n/g),s=0,u=c.map((function(e,t){var r,a=[e],u=n.filter((function(e){return e.line===o+t}));u.sort((function(e,t){return e.offset-t.offset})),u.length>0&&(a=function(e,t,n){var r,o=[],a=0,i=(0,x.Z)(e);try{for(i.s();!(r=i.n()).done;){var l=r.value,c=l.offset-n,s=c+l.length;o.push(t.slice(a,c)),o.push(t.slice(c,s)),a=s}}catch(u){i.e(u)}finally{i.f()}return o.push(t.slice(a,t.length)),o}(u,e,s)),s=s+e.length+1;var d=null===(r=u[0])||void 0===r?void 0:r.status;return l.createElement(M,{additionalErrorData:u,count:o+c.length,key:"".concat(e,"_").concat(t),lineNumber:o+t,lineParts:a,status:d,underlineType:i})}));return u}}]),n}(l.PureComponent)},60012:function(e,t,n){"use strict";var r,o;n.d(t,{h:function(){return o},u:function(){return r}}),function(e){e.wave="wave",e.markers="markers",e.duplicates="duplicates"}(r||(r={})),function(e){e.added="added",e.removed="removed"}(o||(o={}))},32098:function(e,t,n){"use strict";n.d(t,{Q:function(){return r},s:function(){return o}});var r=function(e){for(var t=[],n=function(){var n=o[r];e[n].forEach((function(e){return t.push({category:n,name:e})}))},r=0,o=Object.keys(e);r0)return!0}return!1}),[r]);return(0,a.useEffect)((function(){if(m){var e=setTimeout((function(){return f(!1)}),4e3);return function(){return clearTimeout(e)}}}),[m]),a.createElement("div",{className:R},a.createElement(S.ZP,{className:D,"data-qd-clickable":"".concat(l,0===i?"-select-all":"-deselect-all"),"data-qd-test":0===i?L.b.locationFiltersSelectAll:L.b.locationFiltersDeselectAll,onClick:function(){0===i?e.selectAllItems():e.deselectAllItems()},text:!0},0===i?"Select all":"Deselect ".concat(i>10?"all":""," ").concat(Z()(n,i,!0))),a.createElement("div",{className:z},v&&!m&&a.createElement(a.Fragment,null,a.createElement(S.ZP,{className:D,"data-qd-clickable":"".concat(l,"-reset-changed-categories"),"data-qd-test":L.b.locationFiltersReset,onClick:function(){f(!0),u((0,B.IO)(s,G,!1)),u((0,T.R)(s,(0,k.Z)((0,k.Z)({},c),{},{paths:[]}))),h([],F.W.path)},text:!0},"Reset changed categories"),a.createElement(j.Z,{popupProps:{className:V},title:"Reset changed folder categories and use actual categories from an IDE."},a.createElement(O.Z,{className:W}))),m&&a.createElement("span",{className:H},"Changed categories have been reset")))})),J="Content_line__Ysn5B",X=n(12511),Y=n.n(X),$=n(50047),ee="InputWrapper_input__6Ztkx",te=function(e){var t=e.search,n=e.usagePlace;return a.createElement($.ZP,{autoFocus:!0,autoComplete:"off",borderless:!0,className:ee,"data-qd-clickable":"".concat(n,"-search-input"),icon:Y(),onChange:function(t){return e.onChangeInput(t.target.value)},placeholder:"Search file or folder",value:t})},ne=n(43834),re=n(93063),oe=n(87803),ae=n(81839),ie=n(18006),le="ScopeFilter_container__QVc1T",ce="ScopeFilter_title__RFIcn",se="ScopeFilter_options__vVS+U",ue="ScopeFilter_option__I+SUV",de="ScopeFilter_toggleLabel__OlXod",pe="ScopeFilter_label__vRA-l",me=a.memo((function(e){var t=e.search,n=e.options,r=e.unchecked,o=e.usagePlace,i=(0,a.useMemo)((function(){return(0,ie.o)(t,n)}),[t,n]),l=function(t){return function(){return e.onChange(t)}};return 0===i.length?null:a.createElement("section",{className:le,"data-qd-clickable":"".concat(o,"-scope-filter")},a.createElement("span",{className:ce},f.Rz.directoryExclusion),a.createElement("div",{className:se},i.map((function(t){return a.createElement("div",{key:t,className:ue},a.createElement("label",{className:de,onClick:l(t)},a.createElement(oe.R,{type:"option",scope:ae.se[t]}),a.createElement("span",{className:pe},a.createElement(re.q,{search:e.search,line:ae.se[t]}))),a.createElement(ne.Z,{defaultChecked:!r.includes(t),onChange:l(t)}))}))))})),fe=n(649),he=n(78625);!function(e){e.projectSetup="project-setup-step-files-folders",e.locationFilters="location-filters"}(r||(r={}));var ve=[],ge=a.memo((function(e){var t=e.checked,n=e.excludedScopes,r=void 0===n?[]:n,i=e.height,l=e.hideSearch,c=e.onChangeCheckbox,s=e.onScopeToggleChange,u=e.noCheckboxInheritance,d=e.onlyFolders,p=e.plainArr,m=e.problemsTabName,f=e.projectStructure,h=e.scopes,v=void 0===h?[]:h,g=e.usagePlace,b=(0,a.useState)(""),_=(0,o.Z)(b,2),y=_[0],C=_[1],E=(0,ie.o)(y,ie.O).length,x=(0,a.useCallback)((function(){return c(ve)}),[c]),k=(0,a.useCallback)((function(){c(d?function(e){return e.flatMap((function(e){var t=e.type,n=e.path,r=e.name;return"folder"===t?[n]:"file"===t?""===n?[r]:[[n,r].join(he.qk)]:[]}))}(f):function(e){var t=[];return e.forEach((function(e){"folder"===e.type&&"undefined"!==typeof e.files?t=[].concat((0,fe.Z)(t),(0,fe.Z)(Array.from(e.files))):"file"===e.type&&(""===e.path?t.push(e.name):t.push([e.path,e.name].join(he.qk)))})),t}(f))}),[f,c,d]),S="undefined"!==typeof i?i:519+E/10;return a.createElement(a.Fragment,null,!l&&a.createElement(a.Fragment,null,a.createElement(te,{usagePlace:g,search:y,onChangeInput:C}),a.createElement("div",{className:J})),a.createElement(w,{checkable:!0,checkedPath:t,isExpandable:""!==y,height:S,indent:""===y?5:0,onCheck:c,noCheckboxInheritance:u,onlyFolders:d,plainArr:p,problemsTabName:m,projectStructure:f,search:y,showingMarkers:!0,width:380,isScopeChangeEnable:!!s},a.createElement(a.Fragment,null,!!s&&a.createElement(me,{onChange:s,options:v,search:y,unchecked:r,usagePlace:g}),""===y&&f.length>0&&a.createElement(Q,{itemName:d?"folder":"file",deselectAllItems:x,selectAllItems:k,selectedCount:t.length,usagePlace:g}))),a.createElement("div",null))}));ge.displayName="Content"},18006:function(e,t,n){"use strict";n.d(t,{O:function(){return o},o:function(){return a}});var r=n(81839),o=Object.keys(r.se).filter((function(e){return"default"!==e})),a=function(e,t){return""===e?t:t.filter((function(t){return-1!==r.se[t].toLowerCase().indexOf(e.toLowerCase())}))}},36838:function(e,t,n){"use strict";n.d(t,{Y:function(){return r}});var r=function(e){var t=new Set;return e.forEach((function(e){Array.isArray(e.tags)&&e.tags.forEach((function(e){return t.add(e)}))})),Array.from(t)}},92387:function(e,t,n){"use strict";n.d(t,{c:function(){return r},r:function(){return o}});var r="SET_ORDERED_LEVELS",o=function(e,t){return{payload:t,type:r,meta:{projectKey:e}}}},4478:function(e,t,n){"use strict";n.d(t,{Ds:function(){return s},Nr:function(){return u},ay:function(){return c},sq:function(){return d},tg:function(){return p}});var r=n(50189),o=n(46167),a=n(14597),i=n(12186),l={languages:[],licenseRules:[],licenses:void 0,modules:[],processed:!1,translators:[]};function c(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:l,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case i._F:return(0,r.Z)((0,r.Z)({},e),{},{languages:t.languages});case i.XU:return(0,r.Z)((0,r.Z)({},e),{},{licenseRules:t.licenseRules});case i.un:return(0,r.Z)((0,r.Z)({},e),{},{licenses:t.licenses});case i.FX:return(0,r.Z)((0,r.Z)({},e),{},{modules:t.modules});case i.Nk:return(0,r.Z)((0,r.Z)({},e),{},{translators:t.translators});case i.f_:return(0,r.Z)((0,r.Z)({},e),{},{processed:!0});default:return e}}var s=function(e){return e.processed},u=function(e){return e.languages},d=function(e){return e.modules.reduce((function(e,t){return e+t.components.length}),0)},p=(0,o.P1)((function(e){return e.licenses}),(function(e){return(null===e||void 0===e?void 0:e.licenses.flatMap((function(e){return e.name?[e.name]:[]})))||[]}));(0,o.P1)(u,(function(e){return e.translators}),(function(e,t){var n=[];return e.length>0&&t.length>0&&t.forEach((function(t){var r=a.rf.get(t.name);r&&e.includes(r)&&n.push(t)})),n}))},12186:function(e,t,n){"use strict";n.d(t,{FX:function(){return i},Nk:function(){return l},XU:function(){return a},_F:function(){return r},f_:function(){return c},un:function(){return o}});var r="SET_LANGUAGES",o="SET_LICENSES",a="SET_LICENSE_RULES",i="SET_MODULES",l="SET_TRANSLATORS",c="SET_PROCESSED_PROJECT_AUDIT_DATA"},23742:function(e,t,n){"use strict";n.d(t,{Z:function(){return _}});var r=n(11026),o=n(22491),a=n(44334),i=n(83792),l=n(39881),c=n(73204),s=n(59822),u=n(11092),d=n(50189),p=n(27791),m=n(35373),f=n.n(m),h=n(24601),v=f()((function(e){return fetch(e,{credentials:(0,h.a)()}).then((function(e){return e.json()}))}));function g(){return(g=(0,p.Z)((0,u.Z)().mark((function e(t,n){var r,o;return(0,u.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.t0=Object,e.t1={},e.next=5,v(t);case 5:e.t2=e.sent,r=e.t0.assign.call(e.t0,e.t1,e.t2),e.next=12;break;case 9:throw e.prev=9,e.t3=e.catch(0),new Error("Unable to load or parse the file: ".concat(t));case 12:e.prev=12,r.runs=r.runs.map((function(e){return(0,d.Z)((0,d.Z)({},e),{},{results:e.results.filter((function(e){return n.has(e.partialFingerprints["equalIndicator/v1"])}))})})),e.next=19;break;case 16:throw e.prev=16,e.t4=e.catch(12),new Error("Unable to filter problems in the loaded file");case 19:(o=document.createElement("a")).href="data:text/plain;charset=utf-8,".concat(encodeURIComponent(JSON.stringify(r,void 0,2))),o.download="qodana.sarif.json",o.click();case 23:case"end":return e.stop()}}),e,null,[[0,9],[12,16]])})))).apply(this,arguments)}var b=(0,c.t)((function(e){return{analysisResultsPath:e.getData.paths.analysisResults,baselineMap:(0,l.XG)(e)}})),_=(0,a.$j)(b)((function(e){var t=e.analysisResultsPath,n=e.label,a=void 0===n?"Download":n,l=e.size,c=void 0===l?"L":l,u=e.baselineMap,d=e.onError,p=(0,o.useState)(!1),m=(0,r.Z)(p,2),f=m[0],h=m[1],v=t?function(){h(!0),function(e,t){return g.apply(this,arguments)}(t,u).catch((function(e){h(!1),d(e.message)})).finally((function(){h(!1)}))}:void 0;return t?o.createElement(s.o,{"data-qd-test":i.b.baselineDownloadBtn,"data-qd-clickable":e["data-qd-clickable"],onClick:v,disabled:f,size:c},a):o.createElement("span",null,"Path to qodana.sarif.json not defined")}))},86827:function(e,t,n){"use strict";n.d(t,{BA:function(){return r},g$:function(){return l},gC:function(){return s}});var r,o=n(22491),a="SummaryTabs_tabsContainer__KI35V",i="SummaryTabs_border__vqN-G";!function(e){e.checks="checks",e.problems="problems",e.projectAudit="project-audit",e.baseline="baseline"}(r||(r={}));var l=o.memo((function(e){var t=e.activeURL,n=e.compareBuilds,r=void 0!==n&&n,l=e.style,s=e.onSelect,u=e.children;return o.createElement(c.Provider,{value:{onSelect:s,activeURL:t,compareBuilds:r}},o.createElement("div",{style:l,className:a},u,o.createElement("div",{className:i})))})),c=(0,o.createContext)({activeURL:"",compareBuilds:!1,onSelect:function(){return null}});c.displayName="TabContext";var s=function(){var e=(0,o.useContext)(c);if(!e)throw new Error("useBuildTabs must be used within SummaryTabs component");return e}},80155:function(e,t,n){"use strict";n.d(t,{A:function(){return q}});var r,o=n(64649),a=n(10829),i=n(87019),l=n(71894),c=n.n(l),s=n(22491),u=["title","titleId"];function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function m(e,t){var n=e.title,o=e.titleId,a=p(e,u);return s.createElement("svg",d({width:8,height:12,viewBox:"0 0 8 12",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":o},a),n?s.createElement("title",{id:o},n):null,r||(r=s.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M3.68775 11.7056C3.84478 11.8669 4.10395 11.8669 4.26098 11.7056L7.61622 8.25895C7.94102 7.92531 7.94098 7.39367 7.61613 7.06007C7.2788 6.71366 6.72219 6.71366 6.38486 7.06008L4.82236 8.66467L4.82236 0.847996C4.82236 0.379661 4.4427 0 3.97436 0C3.50603 0 3.12637 0.379661 3.12637 0.847996L3.12637 8.66467L1.61475 7.11233C1.27742 6.76591 0.720803 6.76591 0.383477 7.11233C0.0586306 7.44592 0.0585921 7.97756 0.38339 8.31121L3.68775 11.7056Z",fill:"#0B8927"})))}var f,h=s.forwardRef(m),v=["title","titleId"];function g(){return g=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function _(e,t){var n=e.title,r=e.titleId,o=b(e,v);return s.createElement("svg",g({width:8,height:12,viewBox:"0 0 8 12",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":r},o),n?s.createElement("title",{id:r},n):null,f||(f=s.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M3.68775 0.294425C3.84478 0.133114 4.10395 0.133114 4.26098 0.294424L7.61622 3.74105C7.94102 4.07469 7.94098 4.60633 7.61613 4.93993C7.2788 5.28634 6.72219 5.28634 6.38486 4.93992L4.82236 3.33533L4.82236 11.152C4.82236 11.6203 4.4427 12 3.97436 12C3.50603 12 3.12637 11.6203 3.12637 11.152L3.12637 3.33533L1.61475 4.88767C1.27742 5.23409 0.720803 5.23409 0.383477 4.88767C0.0586306 4.55408 0.0585922 4.02244 0.38339 3.68879L3.68775 0.294425Z",fill:"#BA223D"})))}var y=s.forwardRef(_),C=n(87131),E=n(83792),x=n(11026),w=n(21091),k=n(90927),S="OverflowingText_ellipsis__V0OWZ",j={className:"OverflowingText_tooltip__36gjW"},N=function(e){var t=e.children,n=e.title,r=(0,k.k)(),o=(0,x.Z)(r,2),a=o[0],i=o[1],l="undefined"!==typeof n?n:t;return s.createElement(w.Z,{popupProps:j,title:i?l:void 0},s.createElement("span",{ref:a,className:S},t))},Z=n(95722),P="Counter_arrow__Uw3o3",O="Counter_mainNumber__3hdku",T="Counter_comparingRow__SBj8X",L="Counter_comparingNumber__dceCT",I="Counter_totalChangingNumber__UceLB",A="Counter_skeleton__hUG5U",B=function(e){return(0,C.hD)(e.toString(),3)},q=function(e){var t,n,r,l,u,d,p=e.arrowDown,m=void 0===p?h:p,f=e.arrowUp,v=void 0===f?y:f,g=e.compareMode,b=e.comparativeDecrement,_=void 0===b?0:b,C=e.comparativeIncrement,x=void 0===C?0:C,w=e.isLoading,k=e.moreIsBetter,S=void 0!==k&&k,j=e.total,q=e.totalClassName,F=e.totalChangingClassName,M=e.totalIncrement,R=void 0===M?0:M,D=e.totalDecrement,H=void 0===D?0:D,z=R-H,V=[j,z>0?"\u2193":z<0?"\u2191":""].join(" "),W=B(_),U=B(x),K=B(j);return w?s.createElement(a.O,{className:A,width:40,height:22}):g?_||x?s.createElement("div",{className:T},s.createElement("div",{className:c()(L,(u={},(0,o.Z)(u,Z.Z.positiveColor,S),(0,o.Z)(u,Z.Z.negativeColor,!S),u))},s.createElement(N,null,"+".concat(U))),s.createElement("div",{className:c()(L,(d={},(0,o.Z)(d,Z.Z.positiveColor,!S),(0,o.Z)(d,Z.Z.negativeColor,S),d))},s.createElement(N,null,"-".concat(W)))):s.createElement("div",{className:L},"Not changed"):s.createElement(s.Fragment,null,s.createElement("div",{"data-qd-test":E.b.mainTabsTotalCount,className:c()(q,i.wu.heading1,O)},s.createElement(N,{title:V},K)),0!==R?s.createElement("div",{className:c()(F,I,(t={},(0,o.Z)(t,Z.Z.positiveColor,S===R>0),(0,o.Z)(t,Z.Z.negativeColor,!S===R>0),t))},s.createElement(N,null,R>0&&"+",R),s.createElement(v,{className:c()(P,(n={},(0,o.Z)(n,Z.Z.positiveColor,S===R>0),(0,o.Z)(n,Z.Z.negativeColor,!S===R>0),n))})):null,0!==H?s.createElement("div",{className:c()(F,I,(r={},(0,o.Z)(r,Z.Z.positiveColor,!S===H>0),(0,o.Z)(r,Z.Z.negativeColor,S===H>0),r))},s.createElement(N,null,H>0&&"-",H),s.createElement(m,{className:c()(P,(l={},(0,o.Z)(l,Z.Z.positiveColor,!S===z>0),(0,o.Z)(l,Z.Z.negativeColor,S===z<0),l))})):null)}},50220:function(e,t,n){"use strict";n.d(t,{X:function(){return ne}});var r,o=n(25773),a=n(64649),i=n(11026),l=n(21091),c=n(10829),s=n(71894),u=n.n(s),d=n(22491),p=n(87019),m=n(90927),f=n(87131),h=["title","titleId"];function v(){return v=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function b(e,t){var n=e.title,o=e.titleId,a=g(e,h);return d.createElement("svg",v({width:14,height:14,viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":o},a),n?d.createElement("title",{id:o},n):null,r||(r=d.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12.6 7C12.6 10.0928 10.0928 12.6 7 12.6C3.90721 12.6 1.4 10.0928 1.4 7C1.4 3.90721 3.90721 1.4 7 1.4C10.0928 1.4 12.6 3.90721 12.6 7ZM14 7C14 10.866 10.866 14 7 14C3.13401 14 0 10.866 0 7C0 3.13401 3.13401 0 7 0C10.866 0 14 3.13401 14 7ZM6.20634 3.42176C6.30313 3.32277 6.43794 3.26667 6.57899 3.26667H7.42101C7.56206 3.26667 7.69687 3.32277 7.79366 3.42176C7.89045 3.52074 7.94067 3.65385 7.93247 3.7897L7.71105 7.45187C7.69521 7.71321 7.47093 7.91732 7.19959 7.91734H6.80042C6.52908 7.91732 6.3048 7.71321 6.28896 7.45187L6.06753 3.7897C6.05933 3.65385 6.10955 3.52074 6.20634 3.42176ZM7 10.7333C6.48453 10.7333 6.06667 10.3169 6.06667 9.80315C6.06667 9.28946 6.48453 8.87302 7 8.87302C7.51547 8.87302 7.93333 9.28946 7.93333 9.80315C7.93333 10.3169 7.51547 10.7333 7 10.7333Z",fill:"currentColor"})))}var _,y=d.forwardRef(b),C=n(72511),E=n(3395),x=n(19553),w=n(16507),k=n(80229),S=n(58414),j=n(54315),N=n(61187),Z=n(44956),P=n(50189),O=n(60726);!function(e){e[e.green=0]="green",e[e.red=1]="red"}(_||(_={}));var T=2,L=2,I=1,A=0,B="#FA5067",q="#6F7881",F="#D5DDE6",M=d.memo((function(e){var t=(0,d.useRef)(null),n=e.chartColor,r=void 0===n?"#4BB578":n,o=e.data,a=e.height,l=void 0===a?70:a,c=e.width,s=void 0===c?209:c,u=e.limitLine,p=e.className,m=void 0===p?"":p,f=e.showAbscissa,h=void 0!==f&&f,v=e.showAnimation,g=void 0!==v&&v,b=l+T+I,y=s+A+L;return(0,d.useEffect)((function(){if(1===o.length){o.unshift({date:-1,value:0})}var e=u?function(e,t){for(var n=JSON.parse(JSON.stringify(e)),r=0;rt||o.value>t&&a.valuet?_.red:_.green}}catch(a){r.e(a)}finally{r.f()}return _.red}(),a=0;a=t;e[a-1]&&e[a+1]&&i&&(o=_.red,r[r.length-1].value=e[a].value)}return[n,r]}(e,u),I=(0,i.Z)(L,2);v=I[0],C=I[1],p.append("line").attr("stroke",F).attr("x1",0).attr("y1",a(u)).attr("x2",s).attr("y2",a(u)).style("stroke-dasharray","2, 2"),p.append("text").attr("x",0).attr("y",a(u)-4).style("font-size","10px").style("fill",q).style("opacity","0.4").text("TC red build"),p.append("path").datum(C).join("path").style("opacity","100").attr("stroke",B).attr("stroke-width","1").attr("fill","none").attr("d",f)}var M=p.append("path").datum(v).join("path").style("opacity","100").attr("stroke",r).attr("stroke-width","1").attr("fill","none").attr("d",f),R=p.append("circle").data(e[e.length-1]?[e[e.length-1]]:[]).join("circle").attr("r",2).attr("cx",(function(e){return n(e.date)})).attr("cy",(function(e){return a(e.value)})).attr("fill",u&&e[e.length-1].value>=u?B:r);if(g){var D=function(e){return(0,Z.eR)().ease(w.SE).duration(e)},H=M.node().getTotalLength();M.attr("stroke-dashoffset",H).attr("stroke-dasharray",H).transition(D(1500)).attr("stroke-dashoffset",0),R.style("opacity",0).transition(D(1e3)).delay(1500).style("opacity",100)}})),d.createElement("svg",{ref:t})})),R=n(4099),D=n(86827),H=n(80155),z=n(95722),V=n(68121),W=n(68062),U=n(8879),K=n(88841),G=n(13621),Q=n(33543),J=n(65837),X="ProblemsTabTooltip_popup__K4ths",Y="ProblemsTabTooltip_button__S8X5E",$=[W.ZP.PopupProps.Directions.BOTTOM_RIGHT,W.ZP.PopupProps.Directions.BOTTOM_LEFT],ee=function(){var e=(0,Q.n)(),t=(0,i.Z)(e,2)[1],n=(0,G.CB)(J.b).length;return d.createElement(W.ZP,{className:X,directions:$},d.createElement(p.xv,null,"Qodana detected"," ",d.createElement("span",{className:K.wu.smallText_semibold},n)," problems showing that analysis could be incorrect.",d.createElement(U.zx,{onClick:function(){t(!0)},className:Y,variant:"clear"},"Open problems")))},te={className:z.Z.tooltip},ne=function(e){var t=e.active,n=e.added,r=void 0===n?0:n,s=e.showAttention,h=e.className,v=e.chartClassName,g=void 0===v?z.Z.problemsChart:v,b=e.counterProps,_=e.fixed,E=void 0===_?0:_,x=e.headerClassName,w=e.isLoading,k=e.statisticsTestAnchor,S=e.title,j=e.total,N=e.trend,Z=e.url,P=e.warningText,O=e["data-qd-clickable"],T=e["data-qd-onboarding"],L=(0,D.gC)(),I=L.onSelect,A=L.activeURL,B=L.compareBuilds,q=(0,R.H)(Z,I),F=q.onPressKeyHandler,W=q.selectTabHandler,U=(0,m.k)(),K=(0,i.Z)(U,2),G=K[0],Q=K[1],J=(0,m.qt)(),X=(0,i.Z)(J,3),Y=X[0],$=X[1],ne=X[2],re=(0,f.hD)("".concat(j),3);return d.createElement("button",{"data-qd-clickable":O,onClick:W,onKeyPress:F,className:u()(h,z.Z.wrapper,z.Z.ordinaryTabWidth,(0,a.Z)({},z.Z.active,Z&&A===Z||t))},d.createElement("div",{className:z.Z.container},d.createElement(V.J,{className:x},S),d.createElement("div",{className:z.Z.statistics,"data-qd-onboarding":T,"data-qd-test":k},d.createElement(H.A,(0,o.Z)({compareMode:B,comparativeDecrement:E,comparativeIncrement:r,isLoading:w,total:j,totalIncrement:r,totalDecrement:E},b)),s&&!w&&d.createElement("div",{onMouseEnter:$,onMouseLeave:ne},d.createElement(y,{className:z.Z.attentionIconColor}),Y&&d.createElement(ee,null)),P&&!w&&d.createElement(l.Z,{hidden:!1,className:z.Z.failedIconAlign,popupProps:te,title:P},d.createElement(C.z,{className:z.Z.alertColor}))),B&&(w?d.createElement(c.O,{className:z.Z.skeleton,width:160,height:17}):d.createElement(l.Z,{popupProps:te,title:Q?"Total: ".concat(re):""},d.createElement(p.KI,{ref:G,className:u()(z.Z.title,z.Z.secondaryTextColor)},"Total: ",re))),!!N&&N.length>0&&d.createElement(M,{data:N,className:g,showAbscissa:!1,showAnimation:!0,height:16,width:89})))}},68121:function(e,t,n){"use strict";n.d(t,{J:function(){return c}});var r=n(87019),o=n(71894),a=n.n(o),i=n(95722),l="TabTitle_header__4LXzj",c=(0,r.Ym)("h2",(function(){return a()(r.wu.heading3,l,i.Z.secondaryTextColor)}))},4099:function(e,t,n){"use strict";n.d(t,{H:function(){return o}});var r=n(22491),o=function(e,t){var n=(0,r.useCallback)((function(){return e?t(e):void 0}),[t,e]);return{onPressKeyHandler:(0,r.useCallback)((function(e){e.persist(),"Enter"!==e.key&&" "!==e.key||!n||n()}),[n]),selectTabHandler:n}}},87803:function(e,t,n){"use strict";n.d(t,{R:function(){return w}});var r=n(65970),o=n.n(r),a=n(48882),i=n(22491),l=n(6948),c=n(17287),s=n.n(c),u=n(97605),d=n.n(u),p=n(91930),m=n.n(p),f=n(81839),h="ScopeIcon_testSourcesRoot__T2HyF",v="ScopeIcon_sourcesRoot__o8+uT",g="ScopeIcon_default__n8pq-",b="ScopeIcon_excluded__ebrOT",_="ScopeIcon_imgWrapper__Rfdvj",y="ScopeIcon_img__6fzj5",C="ScopeIcon_resourcesRoot__V4dOq",E="ScopeIcon_generateSourceRoot__N-nQ5",x="ScopeIcon_triangle__UHeZU",w=i.memo((function(e){var t=e.scope,n=e.type,r=(0,i.useMemo)((function(){switch(t){case f.se.resourcesRoot:return i.createElement("img",{src:d(),className:"".concat(y," ").concat(C),alt:f.se.resourcesRoot});case f.se.testResourcesRoot:return i.createElement("img",{src:m(),className:y,alt:f.se.testResourcesRoot});case f.se.generateSourcesRoot:return i.createElement("img",{src:s(),className:"".concat(y," ").concat(E),alt:f.se.generateSourcesRoot});case f.se.testSourcesRoot:return i.createElement(a.ZP,{glyph:o(),className:h});case f.se.sourcesRoot:return i.createElement(a.ZP,{glyph:o(),className:v});case f.se.excluded:return i.createElement(a.ZP,{glyph:o(),className:b});default:return i.createElement(a.ZP,{glyph:o(),className:g})}}),[t]);return i.createElement("span",{className:_},"option"!==n&&i.createElement(l.Z,{className:x}),r)}))},22949:function(e,t,n){"use strict";n.d(t,{k:function(){return r}});var r=function(e,t){var n=e.enabled,r=t.includedChecks,o=t.excludedChecks;return!(n||!r.includes(e.shortName))||(!n||!o.includes(e.shortName))&&n}},17033:function(e,t,n){"use strict";n.d(t,{I:function(){return o},n:function(){return r}});var r="CHANGE_SHOWING_PROMO_MODAL",o="PROCESSING_PROMO_PROBLEMS"},3946:function(e,t,n){"use strict";n.d(t,{u:function(){return f}});var r=n(22951),o=n(91976),a=n(67591),i=n(94337),l=n(84389),c=n(71894),s=n.n(c),u=n(22491),d=n(62994),p=n(14274),m="ReportErrorBoundary_error__13fn+",f=function(e){(0,a.Z)(n,e);var t=(0,i.Z)(n);function n(e){var o;return(0,r.Z)(this,n),(o=t.call(this,e)).state={hasError:!1},o}return(0,o.Z)(n,[{key:"componentDidCatch",value:function(e){(0,l.Tb)(e)}},{key:"render",value:function(){if(this.state.hasError){var e=this.props,t=e.wrappedComponentName,n=e.className;return u.createElement("div",{className:s()(n,m)},"Unfortunately we couldn\u2019t show ",t.toLowerCase()," due to problems on our side. Please report us in ",u.createElement(d.ZP,{href:p.ZW},"YouTrack"))}return this.props.children}}],[{key:"getDerivedStateFromError",value:function(){return{hasError:!0}}}]),n}(u.Component)},30402:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return Pn}});var r,o,a=n(649),i=n(53782),l=n(50189),c=n(11026),s=n(57365),u=n(51564),d=n(62994),p=n(64649),m=n(87920),f=n(71894),h=n.n(f),v=n(39018),g=n(22491);function b(){return b=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function de(e,t){var n=e.title,r=e.titleId,o=ue(e,ce);return g.createElement("svg",se({width:5,height:8,fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":r},o),n?g.createElement("title",{id:r},n):null,D||(D=g.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M2.152 8 4.33 5.821l-.618-.618-1.123 1.123V.772h-.874v5.554L.618 5.229 0 5.847 2.152 8Z",fill:"#0B8927"})))}var pe,me=g.forwardRef(de),fe=["title","titleId"];function he(){return he=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ge(e,t){var n=e.title,r=e.titleId,o=ve(e,fe);return g.createElement("svg",he({width:5,height:8,fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":r},o),n?g.createElement("title",{id:r},n):null,pe||(pe=g.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"m2.152.771 2.178 2.18-.618.617-1.123-1.122V8h-.874V2.446L.618 3.542 0 2.924 2.152.771Z",fill:"#FF5862"})))}var be,_e=g.forwardRef(ge),ye=["title","titleId"];function Ce(){return Ce=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function xe(e,t){var n=e.title,r=e.titleId,o=Ee(e,ye);return g.createElement("svg",Ce({width:21,height:8,fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":r},o),n?g.createElement("title",{id:r},n):null,be||(be=g.createElement("path",{d:"M20.354 4.354a.5.5 0 0 0 0-.708L17.172.464a.5.5 0 1 0-.707.708L19.293 4l-2.828 2.828a.5.5 0 1 0 .707.708l3.182-3.182ZM0 4.5h20v-1H0v1Z"})))}var we,ke=g.forwardRef(xe),Se=["title","titleId"];function je(){return je=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ze(e,t){var n=e.title,r=e.titleId,o=Ne(e,Se);return g.createElement("svg",je({width:8,height:13,viewBox:"0 0 8 13",fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":r},o),n?g.createElement("title",{id:r},n):null,we||(we=g.createElement("path",{d:"M3.64645 12.3536C3.84171 12.5488 4.15829 12.5488 4.35355 12.3536L7.53553 9.17157C7.7308 8.97631 7.7308 8.65973 7.53553 8.46447C7.34027 8.2692 7.02369 8.2692 6.82843 8.46447L4 11.2929L1.17157 8.46447C0.976311 8.2692 0.659728 8.2692 0.464466 8.46447C0.269204 8.65973 0.269204 8.97631 0.464466 9.17157L3.64645 12.3536ZM3.5 0L3.5 12H4.5L4.5 0L3.5 0Z",fill:"#1E2021"})))}var Pe,Oe=g.forwardRef(Ze),Te=n(50220),Le="BaselineExample_root__TQL9K",Ie="BaselineExample_root_vertical__ifcwI",Ae="BaselineExample_problemstabsContainer__A085I",Be="BaselineExample_problemstabsExplanation__gcQ5x",qe="BaselineExample_arrowContainer__K1yx4",Fe="BaselineExample_arrowContainer_vertical__Lk70p",Me="BaselineExample_problemsTab__mxpd3",Re="BaselineExample_problemsTabHeader__QMomM",De={arrowDown:me,arrowUp:_e,totalChangingClassName:"BaselineExample_totalChangingClassName__AHBQO",totalClassName:"BaselineExample_totalClassName__5E8GM"},He=function(e){var t=e.orientation,n=void 0===t?"horizontal":t,r=e.isComparisonMode,o=void 0===r||r;return g.createElement("div",{className:h()(Le,(0,p.Z)({},Ie,"vertical"===n))},g.createElement("div",null,g.createElement("div",{className:Ae},g.createElement(Te.X,{counterProps:De,active:!0,headerClassName:Re,className:Me,title:"Actual problems",total:2}),g.createElement(Te.X,{counterProps:De,headerClassName:Re,active:!0,className:Me,title:"Baseline",total:4,added:1})),g.createElement("p",{className:Be},"2 new problems, no fixed, 1 added in baseline")),o&&g.createElement(g.Fragment,null,g.createElement("div",{className:h()(qe,(0,p.Z)({},Fe,"vertical"===n))},"horizontal"===n?g.createElement(ke,null):g.createElement(Oe,null)),g.createElement("div",null,g.createElement("div",{className:Ae},g.createElement(Te.X,{counterProps:De,headerClassName:Re,active:!0,className:Me,title:"New problems",total:1}),g.createElement(Te.X,{counterProps:De,active:!0,headerClassName:Re,className:Me,title:"Baseline",total:5,added:2,fixed:1})),g.createElement("p",{className:Be},"1 new problem, 2 added and 1 fixed in baseline"))))},ze={modalTitle:"KnowledgeBase_modalTitle__BYwQ+",popup:"KnowledgeBase_popup__Xqecf",contentWrapper:"KnowledgeBase_contentWrapper__kSEhQ",content:"KnowledgeBase_content__1vDC9",exampleContainer:"KnowledgeBase_exampleContainer__doU-l",paddedTop:"KnowledgeBase_paddedTop__8fHAo",contentContainer:"KnowledgeBase_contentContainer__OOJfe",fade:"KnowledgeBase_fade__PL7C3",fadeActive:"KnowledgeBase_fadeActive__pgDpy",tabs:"KnowledgeBase_tabs__2WVrL",tabsList:"KnowledgeBase_tabsList__H8-qI",tab:"KnowledgeBase_tab__im5CX",tabSelected:"KnowledgeBase_tabSelected__EAfmB",tabContent:"KnowledgeBase_tabContent__s2vwf"},Ve=function(){return g.createElement(g.Fragment,null,g.createElement(W.sB,null,"Baseline"),g.createElement("p",null,"Baseline is a snapshot of the codebase problems taken at a specific Qodana run and contained in the ",g.createElement("span",{className:W.wu.monoText},"qodana.sarif.json")," file."),g.createElement("p",null,"Using the baseline feature, you can compare your current code with its baseline state and see new, unchanged, and resolved problems."),g.createElement("div",{className:ze.exampleContainer},g.createElement(He,{isComparisonMode:!1})),g.createElement("p",null,g.createElement(d.ZP,{href:K.pp},"Learn more in documentation")," ",g.createElement(le.Z,null)))},We=n(33591),Ue=n(23163),Ke={category:"Unused symbols",comment:"Unused local variable 'idAnnot'. The value of the variable is overwritten immediately.",detailsInfo:"Reports the variables that are considered unused in the following cases:\n\n- The value of the variable is not used anywhere or is overwritten immediately.\n- The reference stored in the variable is not used anywhere or is overwritten immediately.",hash:"123456",severity:We.zb.high,sources:[{code:{length:8,offset:108,startLine:320,surroundingCode:" $mapping = $this->columnToArray($property->getName(), $columnAnnot); \n \n if ($idAnnot = $this->reader->getPropertyAnnotation($property, Mapping\\Id::class)) { \n $mapping['id'] = true; \n } "},file:"AnnotationDriver.php",path:"lib/Doctrine/ORM/Mapping/Driver",type:We.rR.example}],status:We.sB.old,tool:"Code Inspection",type:"Unused local variable"},Ge=function(e){e.stopPropagation(),e.preventDefault()},Qe=function(){var e=(0,g.useRef)(null);return(0,g.useEffect)((function(){var t=e;return t.current&&t.current.addEventListener("click",Ge,!0),function(){var e=t.current;null===e||void 0===e||e.removeEventListener("click",Ge,!0)}}),[e]),g.createElement("div",{ref:e},g.createElement(Ue.Z,{opened:!0,detailsInfo:Ke.detailsInfo,problem:Ke,showingLinks:!1,sources:Ke.sources,showingActions:!0}))},Je=function(){return g.createElement(g.Fragment,null,g.createElement(W.sB,null,"Inspections"),g.createElement("p",null,"Inspections are the Qodana components aimed for detecting software problems. Each inspection is responsible for detecting a specific type of problems."),g.createElement("div",{className:ze.exampleContainer},g.createElement(Qe,null)))},Xe=[{id:"baseline",title:"Baseline",ref:g.createRef(),content:g.createElement(Ve,null),dataQd:"report-onboarding__baseline"},{id:"inspections",title:"Inspections",ref:g.createRef(),content:g.createElement(Je,null),dataQd:"report-onboarding__inspections"}],Ye=n(8879),$e=n(73204),et=n(43834),tt=n(90667),nt=n(63209),rt=n(27937),ot=n(39881);!function(e){e.back="project-setup__back",e.complete="project-setup__complete",e.finishButtons="project-setup__finish__buttons",e.footer="project-setup__footer",e.informationList="project-setup__information-list",e.next="project-setup__next",e.progressHeader="project-setup__progress__header",e.projectStructure="project-setup__project-structure",e.baselineCodeSnippet="project-setup__tech-debt__code-snippet",e.baselineCodeSnippetCopyButton="project-setup__tech-debt__code-snippet__copy-button",e.baselinePutAll="project-setup__tech-debt__put-all"}(Pe||(Pe={}));var at,it="ProjectSetup_paragraph__+ISYc",lt="Baseline_list__df7St",ct="Baseline_toggle__KYcwh",st="Baseline_radio__hTw3O",ut="Baseline_toggleCheckedContent__r8qDG",dt="Baseline_radioContent__yerpR",pt="Baseline_secondaryText__x66Hd",mt="Baseline_codeContainer__jjEM0",ft="Baseline_code__peDMD",ht="Baseline_codeDescription__4hbX+",vt="Baseline_copyButton__9a2lr",gt="Baseline_copiedLabel__jIyzZ",bt="Baseline_copiedLabel__tag__S2HK7",_t="Baseline_baselineExampleContainer__xY4lM",yt="Baseline_radioLabel__HIz5l",Ct="Baseline_putAllDescription__yU4-W",Et=n(47086),xt=n(69917),wt=n(26602),kt=n(29580),St=n(59881),jt=n(8785),Nt="ReadonlyCode_readonlyCode__gaZqw",Zt="ReadonlyCode_addition__HAM40",Pt="ReadonlyCode_deletion__xlNuF",Ot=function(e){var t=e.lines;return g.createElement("div",{className:Nt},t.map((function(e,t){var n;return g.createElement("pre",{className:h()(W.wu.monoText,(n={},(0,p.Z)(n,Zt,e.addition),(0,p.Z)(n,Pt,e.deletion),n)),key:t},e.content)})))},Tt="FilesAndFolders_filestructureContainer__XwzmP",Lt="FilesAndFolders_divider__TsoDu",It="FilesAndFolders_profileSettings__q71FX",At="FilesAndFolders_title__rXEl+",Bt=[{height:0,fileStructureContainerHeight:221,codeContainerHeight:69},{height:768,fileStructureContainerHeight:265,codeContainerHeight:120},{height:864,fileStructureContainerHeight:330,codeContainerHeight:138},{height:970,fileStructureContainerHeight:442,codeContainerHeight:138}],qt=n(11704),Ft=n(23742),Mt="Finish_buttonRow__-pCVB",Rt="Finish_errorMessage__EcCwe",Dt="Finish_paragraph__HtLvO",Ht="Finish_downloadButtonsContainer__t5gZe",zt=function(e){var t=e.youtrackQdClickable,n=e.githubQdClickable;return g.createElement(g.Fragment,null,"If you have questions, contact us via"," ",g.createElement(d.ZP,{href:K.ZW,"data-qd-clickable":t},"YouTrack")," ","or"," ",g.createElement(d.ZP,{href:K.B0,"data-qd-clickable":n},"Github"))},Vt=n(35449),Wt=n(94144),Ut=n(60726),Kt="ManagePromoChecks_recommendedInspectionList__bITNR",Gt=n(62473),Qt=n.n(Gt),Jt=n(22949),Xt="RecommendedInspectionToggle_recommendedInspection__3yTca",Yt="RecommendedInspectionToggle_shortName__KxCnX",$t="RecommendedInspectionToggle_shortNameDisabled__mFvAO",en="RecommendedInspectionToggle_problemsCount__ySZmd",tn="RecommendedInspectionToggle_problemsCountDisabled__0aaTk",nn="RecommendedInspectionToggle_toggleColumn__pqkA3",rn=function(e){var t=e.inspection,n=e.problemsCount,r=e.onChange,o=e.profileContent,a=(0,Jt.k)(t,o);return g.createElement("li",{className:Xt},g.createElement("div",null,g.createElement("div",{className:h()(W.wu.subtitle,Yt,(0,p.Z)({},$t,!a))},t.shortName),g.createElement("div",{className:h()(en,W.wu.smallText,(0,p.Z)({},tn,!a))},n,"+ ",Qt()("problems",n))),g.createElement(Ye.ZD,{className:nn,defaultChecked:a,onChange:function(){return r(t,!a)},label:{text:a?"Enabled":"Disabled",position:"r"}}))},on=(0,z.$j)((0,$e.t)((function(e){return{changedContent:e.profile.changedContent,inspections:e.inspections.data,promoProblems:Wt.U.selectInitialProblems(e)}})),{setChangedProfileContent:Vt.R})((function(e){var t=e.inspections,n=e.promoProblems,r=e.changedContent,o=(0,X.CG)(G.L7),i=(0,g.useMemo)((function(){return function(e,t){var n,r=[],o=new Map,a=(0,Ut.Z)(e);try{for(a.s();!(n=a.n()).done;){var i=n.value,l="".concat(i.type,"_").concat(i.category),c=o.get(l);c?o.set(l,c+1):o.set(l,1)}}catch(f){a.e(f)}finally{a.f()}var s,u=(0,Ut.Z)(t);try{for(u.s();!(s=u.n()).done;){var d=s.value,p="".concat(d.displayName,"_").concat(d.group),m=o.get(p);m&&r.push({inspection:d,problemsCount:m})}}catch(f){u.e(f)}finally{u.f()}return r}(n,t)}),[n,t]),c=function(t,n){var i,c=r.includedChecks;i=n?[].concat((0,a.Z)(c),[t.shortName]):c.filter((function(e){return e!==t.shortName})),e.setChangedProfileContent(o,(0,l.Z)((0,l.Z)({},r),{},{includedChecks:i}))};return g.createElement(g.Fragment,null,g.createElement("p",{className:it},"Wow, there are some recommended inspections which could find additional problems. If you want to see these problems enable the inspections and then update the qodana.yaml in your project:"),g.createElement("ul",{className:Kt,"data-qd-clickable":Y.vf.projectSetupInspectionsContainer},i.map((function(e){var t=e.inspection,n=e.problemsCount;return g.createElement(rn,{inspection:t,key:t.shortName,onChange:c,problemsCount:n,profileContent:r})}))))})),an=n(4478),ln="Welcome_informationList__Fxk9z",cn=function(){var e=(0,X.CB)((function(e){return(0,an.sq)(e.projectAudit)})),t=(0,X.CB)((function(e){return(0,an.Nr)(e.projectAudit)})),n=(0,X.CB)((function(e){return(0,an.tg)(e.projectAudit)}));return g.createElement(g.Fragment,null,e>0&&g.createElement("li",null,"Modules: ",e),t.length>0&&g.createElement("li",null,"Languages: ",t.join(", ")),n.length>0&&g.createElement("li",null,"Licenses: ",n.join(", ")))};!function(e){e.welcome="step-welcome-summary",e.inspections="step-inspections",e.files="step-files-folders",e.baseline="step-baseline",e.finish="step-finish"}(at||(at={}));var sn,un=[{content:function(){var e=(0,X.CB)(ot.s),t=(0,X.CB)((function(e){return(0,an.Ds)(e.projectAudit)})),n=(0,g.useMemo)((function(){var t=(0,wt.h)(e,{includeFolderContentCount:!0});return[t.folderContentCount.size,t.filesCount]}),[e]),r=(0,c.Z)(n,2),o=r[0],a=r[1];return g.createElement(g.Fragment,null,g.createElement("p",{className:it},"Qodana\u2019ve already checked your project and got the following information:"),g.createElement("ul",{"data-qd-test":Pe.informationList,className:ln},g.createElement("li",null,o," ",Qt()("folder",o),", ",a," ",Qt()("file",a)," with problems"),t&&g.createElement(cn,null)))},footer:g.createElement(zt,{youtrackQdClickable:Y.vf.projectSetupSummaryFooterYouTrackLink,githubQdClickable:Y.vf.projectSetupSummaryFooterSlackLink}),key:at.welcome,progressLabel:"Project is checked",title:g.createElement(g.Fragment,null,"Welcome to Qodana"," ",g.createElement("span",{role:"img","aria-label":"Hello!"},"\ud83d\udc4b"))},{content:on,key:at.inspections,title:"Manage inspections",footer:g.createElement(zt,null)},{content:function(){var e=(0,X.CG)(G.L7),t=(0,X.CB)(ot.s),n=(0,z.I0)(),r=(0,X.CB)(xt.SY),o=(0,g.useState)(null),a=(0,c.Z)(o,2),i=a[0],l=a[1],s=(0,g.useMemo)((function(){return i?i.fileStructureContainerHeight-34:void 0}),[i]);(0,g.useLayoutEffect)((function(){var e=function(){l(function(e){for(var t=Bt.length-1;t>=0;t--){var n=Bt[t];if(e>=n.height)return n}return Bt[0]}(window.innerHeight))};return window.addEventListener("resize",e),e(),function(){return window.removeEventListener("resize",e)}}),[]);var u=(0,g.useMemo)((function(){return(0,wt.h)(t,{includePlainArray:!0,onlyFolders:!0,includeFolderContentCount:!0})}),[t]),d=(0,X.CB)((function(e){return(0,jt.Q_)(e.marker)}));return g.createElement(g.Fragment,null,g.createElement("p",{className:it},"If you don\u2019t want to check some files or folders in your project just mark them to exclude from the analysis."),g.createElement("div",{"data-qd-clickable":Y.vf.projectSetupFilesFolders,"data-qd-test":Pe.projectStructure,className:Tt,style:{height:null===i||void 0===i?void 0:i.fileStructureContainerHeight}},g.createElement(kt.V,{onlyFolders:!0,noCheckboxInheritance:!0,plainArr:u.plainArray,projectStructure:u.projectStructure,height:s,checked:d,onChangeCheckbox:function(t){n((0,St.kQ)(e,t))},problemsTabName:"actual",usagePlace:kt.e.projectSetup})),g.createElement("hr",{className:Lt}),r.length>0&&g.createElement("div",{className:It},g.createElement("div",{className:At},"Changes we\u2019ll write to qodana.yaml:"),g.createElement(Et.Q,{style:{height:null===i||void 0===i?void 0:i.codeContainerHeight}},g.createElement(Ot,{lines:r}))))},key:at.files,title:"Manage files & folders",footer:g.createElement(zt,null)},{key:at.baseline,title:"Add baseline",content:function(){var e=(0,g.useRef)(null),t=(0,X.CB)(ot.vV.selectAppliedExclusionProblems),n=(0,X.CB)(ot.oJ.selectAppliedExclusionProblems),r=(0,X.CB)(ot.sh),o=(0,X.CB)(ot.w5),a=(0,g.useState)(!1),i=(0,c.Z)(a,2),l=i[0],s=i[1],u=(0,z.I0)(),d=(0,g.useContext)(Q.bC),p=(0,X.CG)(G.L7),m=(0,g.useState)((function(){return 0===t.length&&n.length>0&&n.some((function(e){return!r.includes(e)}))})),f=(0,c.Z)(m,2),v=f[0],b=f[1],_=(0,g.useMemo)((function(){return 0===t.length&&(0===n.length||n.every((function(e){return r.includes(e)})))}),[t.length,n,r]),y=(0,g.useState)("static"),C=(0,c.Z)(y,2),E=C[0],x=C[1],w=g.createElement("div",{className:mt},g.createElement("code",{className:ft,"data-qd-test":Pe.baselineCodeSnippet,ref:e},"docker run -p 8080:8080 -v $(pwd):/data/baseline.sarif.json -v $(pwd):/data/project -v $(pwd)/res:/data/results/ jetbrains/qodana:latest --show-report --baseline=/data/baseline.sarif.json"),l&&g.createElement("div",{className:gt},g.createElement("div",{className:bt},g.createElement(tt.Z,null)," Copied")),g.createElement("button",{"data-qd-test":Pe.baselineCodeSnippetCopyButton,className:vt,onClick:function(){var t,n,r;if(e.current){if("undefined"!==typeof window){var o=document.createRange();o.selectNode(e.current),null===(t=window.getSelection())||void 0===t||t.removeAllRanges(),null===(n=window.getSelection())||void 0===n||n.addRange(o),document.execCommand("copy"),null===(r=window.getSelection())||void 0===r||r.removeAllRanges(),s(!0)}}else console.warn("codeRef.current is null or undefined")}},g.createElement(nt.Z,null)));return g.createElement(g.Fragment,null,g.createElement("p",{className:it},"Too many problems? Don\u2019t worry \u2014 fix them bit by bit using baseline. It works as a baseline and helps monitor problems quantity."),g.createElement(et.Z,{htmlProps:{"data-qd-clickable":Y.vf.projectSetupBaselineToggle,"data-qd-test":Pe.baselinePutAll},className:ct,defaultChecked:v,disabled:_,onChange:function(e){if(b(e),e){var n=new Set(o);t.forEach((function(e){n.add(e.hash)})),u((0,rt._P)(p,Array.from(n)))}else u((0,rt._P)(p,r.map((function(e){return e.hash}))))},label:{text:"Put all problems to baseline",position:"r"}}),g.createElement("div",{className:ut},g.createElement("p",{className:h()(pt,Ct,W.wu.smallText)},"We'll put all problems from the first run to the baseline and every run will compare the current state with the previous build or static problems set."),v&&g.createElement("div",null,g.createElement("form",{onSubmit:function(e){return e.preventDefault()}},d===We.nn.Alpha?g.createElement("ul",{className:lt},g.createElement("li",null,g.createElement("label",{className:yt},g.createElement("input",{className:st,checked:"static"===E,value:"static",type:"radio",name:"compare-with",onChange:function(e){return x(e.target.value)}}),"Compare baseline"),g.createElement("div",{className:dt},g.createElement("div",{className:h()(pt,W.wu.smallText)},"Each run will be compared to the baseline you set."),g.createElement("div",{className:_t},g.createElement(He,{orientation:"vertical"})),w,g.createElement("p",{className:h()(pt,ht,W.wu.smallText)},"Use this code in Docker step to set the baseline")))):w))))},footer:g.createElement(zt,null)},{content:function(){var e=(0,g.useState)(),t=(0,c.Z)(e,2),n=t[0],r=t[1];return g.createElement(g.Fragment,null,g.createElement("p",{className:Dt},"Congratulations! ",g.createElement("br",null)," Your Qodana is fine-tuned for the future work"," ",g.createElement("span",{role:"img","aria-label":"hands raised in celebration"},"\ud83d\ude4c")),g.createElement("p",{className:Dt},"To apply all settings please download this files, put them to the root folder of you project and restart Qodana."),g.createElement("div",{className:Ht,"data-qd-test":Pe.finishButtons},g.createElement("div",{className:Mt},g.createElement(qt.n,{label:"Download 'qodana.yaml' report","data-qd-clickable":Y.vf.projectSetupFinishDownloadQD})),g.createElement("div",{className:Mt},g.createElement(Ft.Z,{label:"Download 'sarif' report with baseline",onError:r,"data-qd-clickable":Y.vf.projectSetupFinishDownloadBaseline}),n?g.createElement("p",{className:Rt},n):null)))},footer:g.createElement(zt,{youtrackQdClickable:Y.vf.projectSetupFinishYouTrackLink,githubQdClickable:Y.vf.projectSetupFinishGithubDiscussionLink}),key:at.finish,progressLabel:g.createElement(g.Fragment,null,"All set"," ",g.createElement("span",{role:"img","aria-label":"OK hand sign"},"\ud83d\udc4c")),title:"Almost there!"}],dn=["title","titleId"];function pn(){return pn=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function fn(e,t){var n=e.title,r=e.titleId,o=mn(e,dn);return g.createElement("svg",pn({width:10,height:10,fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":r},o),n?g.createElement("title",{id:r},n):null,sn||(sn=g.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M9.954 1.37c.055.046.062.13.015.185L3.78 8.884a.497.497 0 0 1-.736.031L.038 5.911a.132.132 0 0 1 0-.185l.442-.442a.124.124 0 0 1 .176 0L3.18 7.808a.249.249 0 0 0 .368-.016L9.301.982a.124.124 0 0 1 .176-.015l.477.403Z",fill:"#fff"})))}var hn=g.forwardRef(fn),vn={nav:"Progress_nav__b6cbn",secondaryText:"Progress_secondaryText__ASRGP",stepLabel:"Progress_stepLabel__ZZ-ex",bar:"Progress_bar__7ALyl",step_previous:"Progress_step_previous__VQi5X",step_future:"Progress_step_future__rTH4P",step__label:"Progress_step__label__thenv",step__progressbar:"Progress_step__progressbar__l2R-e",step__progressbar__left:"Progress_step__progressbar__left__bLp3G",step__progressbar__right:"Progress_step__progressbar__right__r-GA-",step__progressbar__circle:"Progress_step__progressbar__circle__ImmsI",step__progressbar__checkmark:"Progress_step__progressbar__checkmark__4CNYd",step__progressbar__circleBackground:"Progress_step__progressbar__circleBackground__mLdug",step__progressbar__left_visible:"Progress_step__progressbar__left_visible__kldni",step__progressbar__right_visible:"Progress_step__progressbar__right_visible__mpq1A",step__progressbar__filling:"Progress_step__progressbar__filling__u-d2v",step_last:"Progress_step_last__rv9ub"},gn=function(e){var t=e.className,n=e.currentStepIndex,r=e.steps;return g.createElement("section",{className:h()(vn.nav,t)},g.createElement("header",null,g.createElement("span",{className:h()(W.wu.text,vn.secondaryText)},"Step ",n+1," from ",r.length),g.createElement("br",null),g.createElement(W.sB,{className:vn.stepLabel,"data-qd-test":Pe.progressHeader},r[n].label)),g.createElement("div",{className:vn.bar},g.createElement("div",{className:vn.step__progressbar__filling,style:{width:"".concat(100*n/r.length,"%")}}),r.map((function(e,t){var o,a=e.key;return g.createElement("div",{className:h()(vn.step,(o={},(0,p.Z)(o,vn.step_previous,tn),(0,p.Z)(o,vn.step_last,t===r.length-1),o)),key:a},g.createElement("div",{className:vn.step__progressbar},g.createElement("div",{className:h()(vn.step__progressbar__left,(0,p.Z)({},vn.step__progressbar__left_visible,t>0))}),g.createElement("div",{className:vn.step__progressbar__circleBackground},g.createElement("div",{className:vn.step__progressbar__circle},g.createElement(hn,{width:"7px",height:"7px",viewBox:"0 0 10 10",className:vn.step__progressbar__checkmark}))),g.createElement("div",{className:h()(vn.step__progressbar__right,(0,p.Z)({},vn.step__progressbar__right_visible,t0,C=a0&&void 0!==arguments[0]?arguments[0]:"",t=P();return ke.forEach((function(n,r){n.indexOf(e)>-1&&(t=r)})),t},we=function(e){return e.split(".").pop()},ke=new Map;ke.set(T(),["ane","ear","egg","jar","klib","swc","war","zip"]),ke.set(I(),["as","es","js2"]),ke.set(B(),["aj"]),ke.set(F(),["css"]),ke.set(H(),["uml"]),ke.set(V(),["dtd","elt","ent","mod"]),ke.set(U(),["htm","html","ng","sht","shtm","shtml"]),ke.set(G(),["idl"]),ke.set(Y(),["class"]),ke.set(J(),["java","snippet"]),ke.set(ee(),["js","cjs","es6","mjs"]),ke.set(oe(),["jspx","tagx"]),ke.set(ie(),["jsf","jsp","jspf","tag","tagf","xjsp"]),ke.set(ce(),["libd","mf"]),ke.set(ue(),["properties","schemas","handlers"]),ke.set(pe(),["regexp"]),ke.set(fe(),["xhtml"]),ke.set(be(),["yaml","yml"]),ke.set(ne(),["jsb2","jsb3","json","babelrc","eslintrc","prettierrc","stylelintrc","bowerrc","json5"]),ke.set(R(),["ascx","asp","aspx","android_data_binding","c","cc","cpp","h","hpp","cs","erl","doc","docx","hlp","mdb","odt","pdf","ppt","pptx","vsd","xls","xlsx","chm","hs","fx","pl","pm"]),ke.set(ve(),["ant","bpmn","fxml","jhm","jnlp","jrxml","plan","pom","rng","tld","wadl","wsdd","wsdl","xjb","xml","xsd","xsl","xslt","xul"]);var Se,je="FileMarker_container__aTudO",Ne="FileMarker_popupParent__DTU7I",Ze="FileMarker_popup__HCVRl",Pe="FileMarker_button__6WOqN",Oe="FileMarker_list__RV9W4",Te=function(e){var t=e.path,n=e.isExcluded,r=e.onChange,i=(0,a.useState)(!1),l=(0,o.Z)(i,2),c=l[0],s=l[1],u=function(){return s((function(e){return!e}))};return(0,a.useEffect)((function(){return s(!1)}),[t]),a.createElement("div",{className:je},a.createElement(d.ZP,{onClick:u,className:Pe,text:!0},a.createElement(Ee,{file:t})),c&&a.createElement("div",{className:Ne},a.createElement(N.ZP,{className:Ze,onEscPress:u,onOutsideClick:u},a.createElement("div",{"data-qd-parent":"marker"},a.createElement(j.Z,{renderOptimization:!1,className:Oe,shortcuts:!0,data:n?Le:Ie,onSelect:function(){r(t)}})))))},Le=[{label:"Cancel exclusion",key:"Cancel exclusion",disabled:!1}],Ie=[{label:"Mark as excluded",key:"Mark as excluded",disabled:!1}],Ae=(0,E.t)((function(e){return{changedContent:e.profile.changedContent,exclusionFilters:(0,x.q)(e)}})),Be={excludeProblem:C.mE,setChangedProfileContent:k.R},qe=(0,y.$j)(Ae,Be),Fe=function(e,t){var n,r=(0,b.Z)(t);try{for(r.s();!(n=r.n()).done;){var o=n.value;return"path"===o.category&&(o.name===e||Array.isArray(o.name)&&o.name.includes(e))}}catch(a){r.e(a)}finally{r.f()}return!1},Me=qe((function(e){var t=(0,S.CG)(w.L7),n=e.fileName,o=e.exclusionFilters,i=e.changedContent,l=e.setChangedProfileContent,c=e.excludeProblem,s=Fe(n,o);return a.createElement(Te,{onChange:function(e){var n=o.find((function(e){return"path"===e.category}));if("undefined"===typeof n&&(n={category:"path",name:[]}),Array.isArray(n.name)){n.name=s?n.name.filter((function(t){return t!==e})):[].concat((0,r.Z)(n.name),[e]);var a=o.filter((function(e){return"path"!==e.category}));a.push(n),l(t,(0,_.Z)((0,_.Z)({},i),{},{paths:n.name})),c(t,a)}},isExcluded:s,path:n})})),Re=function(e,t,n){if("ArrowRight"!==n.key||t||e(),"ArrowLeft"===n.key&&t&&e(),"ArrowDown"===n.key||"ArrowUp"===n.key){n.stopPropagation();var r=Array.from(document.querySelectorAll("button[name='leaf']")),o=r.indexOf(n.target);r["ArrowDown"===n.key?o===r.length-1?0:o+1:0===o?r.length-1:o-1].focus()}},De=n(20479),He="File_file__SKRKx",ze="File_fileCheckbox__VuRH0",Ve="File_button__nC1bQ",We="File_icon__FJz2h",Ue="File_label__rROwd",Ke="File_description__vjyvE",Ge="File_fileName__kJPNg",Qe="File_count__Ys1AY",Je=n(85920),Xe={"data-qd-test":f.b.fileListItemProblem},Ye=a.memo((function(e){var t=e.onChange,n=(0,a.useState)(!1),r=(0,o.Z)(n,2),i=r[0],l=r[1],c=(0,a.useCallback)((function(){l((function(e){return!e})),t()}),[t]);return a.createElement(Je.Q,{className:e.className,htmlProps:Xe,offset:12*(e.level+1),onToggleOpen:c,problem:e.item,problemsTabName:e.problemsTabName,opened:i,showingLinks:!1})})),$e=a.memo((function(e){var t=e.checkable,n=e.checkedItems,r=e.file,i=e.indent,l=void 0===i?0:i,s=e.level,b=void 0===s?0:s,_=e.listView,y=e.onChangeCheckbox,C=e.problemsTabName,E=e.showingCount,x=void 0!==E&&E,w=e.showingHint,k=e.updateCache,S=(0,a.useState)(!1),j=(0,o.Z)(S,2),N=j[0],Z=j[1],P="".concat(r.path).concat(""!==r.path?h.qk:"").concat(r.name),O=n.includes(P),T=e.search;""!==T&&(T=(0,De.L)(P,r.name,T));var L=function(){k(),Z(!N)},I=(0,a.useCallback)((function(){t?y(P):Z(!N),k()}),[t,y,P,N,k]),A=!!r.problems&&(0,g.w)(r.problems),B="".concat(_?16+l:b*Vt+((t?22:6)+l),"px");return a.createElement("div",null,a.createElement("div",{className:"".concat(He," ").concat(t?ze:""),"data-qd-test":f.b.fileListItemFile,style:{paddingLeft:B}},A&&a.createElement(d.zx,{className:Ve,iconClassName:We,icon:N?c():u(),onClick:L,onKeyDown:function(e){return Re(L,N,e)},name:"leaf"}),t&&a.createElement(p.Z,{checked:O,onChange:function(){y(P),k()}}),a.createElement(Me,{fileName:P}),a.createElement("button",{className:Ue,onClick:I,tabIndex:-1,title:"".concat(r.path,"/").concat(r.name)},a.createElement(m.q,{className:Ge,line:r.name,search:T}),_&&a.createElement("span",{className:Ke},(0,v.I)(r.path)),x&&A&&a.createElement("span",{className:Qe},A.length," ",w&&"problem".concat(1===A.length?"":"s")))),N&&A&&a.createElement("div",null,A.map((function(e,t){return a.createElement(Ye,{item:e,key:e.hash,level:b,problemIndex:t,problemsTabName:C,onChange:k})}))))})),et=n(64649),tt=n(71894),nt=n.n(tt),rt=n(22951),ot=n(91976),at=n(67591),it=n(94337),lt=n(59881),ct=n(8785),st=n(69917),ut=n(81839),dt=["testSourcesRoot","resourcesRoot","testResourcesRoot","generateSourcesRoot","sourcesRoot"],pt=n(54039),mt=n.n(pt),ft="Marker_container__8AYpY",ht="Marker_button__woSmG",vt="Marker_disable__Yowdt",gt="Marker_list__xDvTz",bt="Marker_popupParent__PuoI6",_t="Marker_popup__6uXVs",yt="Marker_label__W40yt",Ct="Marker_optionPic__aDtr1",Et=n(87803),xt=function(e){var t=e.type,n=e.disable,r=void 0!==n&&n,i=(0,a.useState)(!1),l=(0,o.Z)(i,2),c=l[0],s=l[1],u=function(){r||s(!c)},p=e.markers.map((function(e){return{key:e,label:a.createElement(a.Fragment,null,a.createElement(Et.R,{type:"option",scope:ut.se[e]}),a.createElement("span",{className:yt},ut.se[e]),t===e&&a.createElement(_e.ZP,{glyph:mt(),className:Ct}))}}));return a.createElement("div",{className:ft},a.createElement(d.ZP,{onClick:u,className:nt()(ht,(0,et.Z)({},vt,r)),text:!0},a.createElement(Et.R,{type:r?"option":"chooser",scope:ut.se[t]})),c&&a.createElement("div",{className:bt},a.createElement(N.ZP,{className:_t,onEscPress:u,onOutsideClick:u},a.createElement("div",{"data-qd-parent":"marker"},a.createElement(j.Z,{renderOptimization:!1,className:gt,shortcuts:!0,activeIndex:e.markers.indexOf(t),data:p,onSelect:function(t){s(!c),e.onSelectMarker(t.key)}})))))},wt=a.memo(xt),kt={setMarkers:lt.IO,excludeProblem:C.mE,setChangedProfileContent:k.R},St=(0,y.$j)((function(e,t){var n=t.inactive,r=void 0!==n&&n,o=(0,w.mI)(e);return{projectKey:(0,w.L7)(e),changedContent:o.profile.changedContent,inactive:r||!(0,ct.zf)(o.marker),markers:o.marker.options,profileExcludedPaths:(0,st.rG)(o)}}),kt),jt=function(e){(0,at.Z)(n,e);var t=(0,it.Z)(n);function n(){var e;(0,rt.Z)(this,n);for(var o=arguments.length,a=new Array(o),i=0;i0,N=e.search;""!==N&&(N=(0,De.L)(o.path,o.name,N));var Z=function(){return e.onChangeCheckbox(o.path,o.files)},P=function(){return e.updateOpened(o.path,o)},O=(0,a.useMemo)((function(){return function(e,t,n,r){var o=t.path;if(r&&e.find((function(e){return e===o})))return Se.checked;if(!r){var a,i=e.filter((function(e){return e===o||e.startsWith(o+h.qk)||o.startsWith(e+h.qk)}));if(!n&&i.length===(null===t||void 0===t||null===(a=t.files)||void 0===a?void 0:a.size))return Se.checked;if(!n&&i.length)return Se.indeterminate;if(n&&i.length)return Se.checked}return Se.unchecked}(s,o,n,r)}),[s,o,n,r]),T=g?16+E:w*Vt+6+E+(j?0:17);return r&&(T+=24),a.createElement("div",{className:nt()(Zt,(0,et.Z)({},Pt,l)),"data-qd-test":f.b.fileListItemFolder,style:{paddingLeft:T}},!g&&j&&a.createElement(d.zx,{className:Ot,iconClassName:Tt,icon:k?c():u(),onClick:P,onKeyDown:function(e){return Re(P,k,e)},name:"leaf"}),l&&a.createElement("div",{className:nt()(Ft,(0,et.Z)({},Mt,r))},a.createElement(p.Z,{checked:O===Se.checked,indeterminate:O===Se.indeterminate,onChange:Z})),i&&a.createElement(Nt,{path:o.path,inactive:!_}),a.createElement("button",{className:"".concat(Lt," ").concat(l?Bt:""),onClick:function(){return g?Z():P()},tabIndex:-1,title:o.path},a.createElement(m.q,{className:At,line:o.name,search:N}),g&&a.createElement("span",{className:It},(0,v.I)(function(e){var t=e.lastIndexOf(h.qk);return e.substring(0,t)}(o.path))),S&&a.createElement("span",{className:qt},o.problemsCount," ",y&&"problem".concat(1===o.problemsCount?"":"s"))))},Dt=function(e){var t=e.checkable,n=e.checked,r=e.expanded,o=e.indent,i=e.item,l=e.onlyFolders,c=e.problemsTabName,s=e.search,u=e.showingCount,d=e.showingMarkers,p=e.showActionMarker,m=void 0===p||p,f=e.index+i.level===0;return a.createElement(a.Fragment,null,"file"===i.type?a.createElement($e,{checkable:t,checkedItems:n,file:i,indent:o,level:i.level,listView:e.listView,onChangeCheckbox:e.updateChecked,search:s,showingCount:u,showingHint:f,problemsTabName:c,updateCache:e.updateCache}):a.createElement(Rt,{checkable:t,checkedItems:n,expanded:r,folder:i,indent:o,level:i.level,listView:e.listView,onChangeCheckbox:e.updateChecked,onlyFolders:l,noCheckboxInheritance:e.noCheckboxInheritance,search:s,showingCount:u,showingHint:f,showingMarkers:d,updateOpened:e.updateOpened,showActionMarker:m}))},Ht=a.memo(Dt),zt=function(e,t,n){return e?t.filter((function(e){return!e.startsWith(n+h.qk)})):t.filter((function(e){return e!==n}))},Vt=12,Wt={outline:"none"},Ut=function(e){var t=e.onlyFolders,n=e.search,l=e.checkedPath,c=void 0===l?[]:l,s=e.checkable,u=e.data,d=e.isExpandable,p=e.width,m=e.height,f=e.indent,h=e.problemsTabName,v=e.isScopeChangeEnable,g=void 0===v||v,b=e.openedFolders,_=void 0===b?[]:b,y=e.focusedPath,C=void 0===y?"":y,E=(0,a.useState)(c),x=(0,o.Z)(E,2),w=x[0],k=x[1],S=(0,a.useState)(_),j=(0,o.Z)(S,2),N=j[0],Z=j[1],P=(0,a.useState)(!1),O=(0,o.Z)(P,2),T=O[0],L=O[1],I=(0,a.useState)((function(){return new i.t1({defaultHeight:36,fixedWidth:!0})})),A=(0,o.Z)(I,1)[0],B=(0,a.useRef)(null),q=function(t,n){var o=function(e,t,n){var o=zt(!!n,e,t);return o.length===e.length&&(o=[].concat((0,r.Z)(e),n?(0,r.Z)(Array.from(n)):[t])),o}(w,t,n);k(o),e.onCheck&&e.onCheck(o)},F=function(e,t){var n=N.filter((function(t){return t!==e}));if(n.length===N.length){var o=function(e){var t=new Set;return t.add(e.path),e.content&&1===e.content.length&&function e(n){n.content&&1===n.content.length&&"folder"===n.type&&(t.add(n.path),t.add(n.content[0].path),e(n.content[0]))}(e.content[0]),Array.from(t)}(t);Z([].concat((0,r.Z)(N),(0,r.Z)(o)))}else{var a=n.filter((function(t){return 0!==t.indexOf(e)}));Z(a)}},M=(0,a.useCallback)((function(){var e;A.clearAll(),null===B||void 0===B||null===(e=B.current)||void 0===e||e.forceUpdateGrid()}),[A]);(0,a.useEffect)((function(){M()}),[N,u,M]),(0,a.useEffect)((function(){if(""!==C&&!T){var e=document.getElementById("qd-".concat(C));if(null!==e)new Promise((function(e){L(!0),e()})).then((function(){return e.scrollIntoView({block:"center"})})).then((function(){return e.tabIndex=-1})).then((function(){return e.focus()}))}}),[e,C,T]),(0,a.useEffect)((function(){!0===s&&c!==w&&k(c)}),[s,c,w]);var R=function(r,o,i){return a.createElement(Ht,{checkable:s,checked:w,expanded:o,index:i,indent:f,item:r,noCheckboxInheritance:e.noCheckboxInheritance,onlyFolders:t,listView:d,problemsTabName:h,search:n,showingCount:e.showingCount,showingMarkers:e.showingMarkers,updateCache:M,updateChecked:q,updateOpened:F,showActionMarker:g})},D=function e(t,r,o){var i=-1!==o.indexOf(t.path);if(""!==n&&"folder"===t.type&&Array.isArray(t.files)){var l,c=-1;null===(l=t.files)||void 0===l||l.forEach((function(e){var t=e.toLowerCase().lastIndexOf(n.toLowerCase());t>c&&(c=t)})),c+=n.length,t.path.lastIndexOf(t.name)+t.name.length<=c&&(i=!i)}return a.createElement("div",{key:r},R(t,i,r),i&&"content"in t&&t.content.map((function(t,n){return e(t,n,o)})))};return a.createElement(i.aV,{autoHeight:!0,height:m,isScrolling:e.isScrolling,onScroll:e.onChildScroll,ref:B,rowCount:u.length,rowHeight:d?36:A.rowHeight,rowRenderer:d?function(e){var t=e.key,n=e.index,r=e.style,o=u[n];return a.createElement("div",{key:t,style:r},R(o,!1,n))}:function(e){var t=e.key,n=e.index,r=e.style,o=e.parent,l=D(u[n],n,N);return a.createElement(i.Z8,{key:t,parent:o,cache:A,columnIndex:0,rowIndex:n},a.createElement("div",{key:t,style:r},l))},scrollTop:e.scrollTop,style:Wt,width:p})}},20479:function(e,t,n){"use strict";n.d(t,{L:function(){return i},n:function(){return a}});var r=n(60726),o=n(78625),a=function(e,t){return""===t||-1!==e.toLowerCase().indexOf(t.toLowerCase())},i=function(e,t,n){var a=n,i=t.toLowerCase(),l=e.toLowerCase(),c=n.toLowerCase(),s=l.lastIndexOf(i),u=l.lastIndexOf(c),d=u+n.length;if(d>s&&-1!==u&&u<=s&&(a=e.slice(s,d)),-1===u){var p,m=c.split(o.qk).reverse(),f=(0,r.Z)(m);try{for(f.s();!(p=f.n()).done;){var h=p.value;-1!==i.indexOf(h)&&(a=h)}}catch(v){f.e(v)}finally{f.f()}}return a}},90577:function(e,t,n){"use strict";n.d(t,{V:function(){return i}});var r=n(11026),o=n(22491),a=n(20479),i=function(e,t,n,i){var l=(0,o.useState)([]),c=(0,r.Z)(l,2),s=c[0],u=c[1];return(0,o.useEffect)((function(){u(i?t?t.filter((function(t){return(0,a.n)(t.name,e)})):[]:n)}),[e,t,i,n]),s}},78625:function(e,t,n){"use strict";n.d(t,{JT:function(){return i},au:function(){return c},bR:function(){return u},dk:function(){return l},o$:function(){return d},qk:function(){return s}});var r=n(7516),o=n(14274),a=n(41328),i=new r.G({id:"Help",label:"Help",submenu:[{label:"Documentation",link:o.K1,htmlProps:{"data-qd-clickable":a.vf.helpMenuHelp},type:"link"},{label:"Report an issue",link:o.ZW,htmlProps:{"data-qd-clickable":a.vf.helpMenuYoutrack},type:"link"},{label:"Terms Of Use",link:o.Zd,htmlProps:{"data-qd-clickable":a.vf.helpMenuTermsOfUse},type:"link"}]}),l=[{href:o.Zd,htmlProps:{"data-qd-clickable":a.vf.footerLinkTermsOfUse},label:"Terms Of Use"}],c="",s="/",u="ReportRelated",d="Build link"},59065:function(e,t,n){"use strict";n.d(t,{Il:function(){return a},Ze:function(){return c},bC:function(){return i},pg:function(){return l}});var r=n(22491),o=n(33591),a=(0,r.createContext)({environment:o.qA.Preview}),i=(0,r.createContext)(o.nn.Stable),l=(0,r.createContext)({onboardingTips:!0,persistSettings:!0,problemsListDefaultTab:o.yA.problems,reorderFilters:!1}),c=l.Provider},815:function(e,t,n){"use strict";n.d(t,{G:function(){return d}});var r=n(74059),o=n(95178),a=n(22491),i=n(59065),l=n(27937),c=n(89467),s=n(91218),u=n(13621);function d(){var e=(0,u.CG)(s.L7),t=(0,a.useContext)(i.Il).environment,n=(0,a.useContext)(o.B)===r.g3.all,d=(0,u.TL)();return function(r,o){if(d((0,l.mE)(e,r)),n&&o){var a={environment:t,hide:!0,source:"profile settings",type:o};(0,c.bt)(a)}}}},3523:function(e,t,n){"use strict";n.d(t,{$:function(){return o},b:function(){return r}});var r=function(e,t){var n=new Blob([JSON.stringify(e,null,2)],{type:"application/json"}),r=URL.createObjectURL(n);o(r,t)},o=function(e,t){var n=document.createElement("a");n.href=e,n.download=t,n.click(),n.remove()}},85634:function(e,t,n){"use strict";n.d(t,{R:function(){return v}});var r=n(37818),o=n.n(r),a=n(36407),i=n.n(a),l=n(34028),c=n.n(l),s=n(50619),u=n.n(s),d=n(42942),p=n.n(d),m=n(61878),f=n.n(m),h=n(33591),v=function(e){switch(e){case h.zb.critical:return o();case h.zb.high:return i();case h.zb.moderate:return p();case h.zb.low:return u();case h.zb.info:return c();case h.zb.unknown:return f();default:return""}}},12587:function(e,t,n){"use strict";n.d(t,{I:function(){return a}});var r=n(60726),o=n(78625),a=function(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:25,a=e.split(o.qk).reverse(),i=[],l=0,c=(0,r.Z)(a);try{for(c.s();!(t=c.n()).done;){var s=t.value;(l+=s.length)<=n&&i.push(s)}}catch(p){c.e(p)}finally{c.f()}if(0===i.length){var u=a.shift();"string"===typeof u&&i.push(u)}var d=i.reverse().join(o.qk);return d.length===e.length?e:".../".concat(d)}},95572:function(e,t,n){"use strict";n.d(t,{Tk:function(){return s},Xg:function(){return l},gk:function(){return i},iO:function(){return u},iT:function(){return d},rW:function(){return a},sV:function(){return p},vg:function(){return o},yr:function(){return c}});var r=n(33591),o=12,a=12,i=800,l="#4BB578",c="#FEDB5E",s=["Clone Finder","Code Inspection","License Audit","Vulnerabilities Search","Vulnerability Search"],u=[r.zb.critical,r.zb.high,r.zb.moderate,r.zb.low,r.zb.info],d="1.0",p="qodana.starter"},14274:function(e,t,n){"use strict";n.d(t,{B0:function(){return s},Hb:function(){return p},K1:function(){return r},N9:function(){return u},ZW:function(){return o},Zd:function(){return a},dK:function(){return f},iJ:function(){return c},mH:function(){return l},pp:function(){return d},xz:function(){return m},z1:function(){return i}});var r="https://www.jetbrains.com/help/qodana/getting-started.html",o="https://youtrack.jetbrains.com/newIssue?project=QD",a="https://www.jetbrains.com/legal/agreements/user.html",i="https://www.jetbrains.com/help/qodana/about-clone-finder.html#importance-score",l="https://www.jetbrains.com/toolbox-app/",c="https://plugins.jetbrains.com/plugin/16938-qodana",s="https://github.com/JetBrains/Qodana/discussions/48",u="https://qodana.cloud",d="https://www.jetbrains.com/help/qodana/qodana-baseline.html",p="https://blog.jetbrains.com/qodana/",m="https://twitter.com/qodana",f=function(e,t,n,r,o){return"https://youtrack.jetbrains.com/newIssue?project=QD&summary=It%20is%20not%20a%20problem%3A%20".concat(encodeURIComponent(e||""),"&description=**Inspection%3A**%20").concat(encodeURIComponent(t||""),"%0A**Problem%3A**%20").concat(encodeURIComponent(e||""),"%0A%0A**File%3A**%20").concat(encodeURIComponent(n||""),"%0A**Line%3A**%20").concat(encodeURIComponent(r||""),"%0A**Source%20code%3A**%0A%0A%60%60%60%0A").concat(encodeURIComponent(o||""),"%0A%60%60%60%0A%0A%0A%0A**Why%20it%20is%20not%20a%20problem%3F**%0A%E2%80%A6%0A%0A%0A%0A**Attach%20build%2C%20repository%20links%3A**%0A%0A%E2%80%A6")}},85086:function(e,t,n){"use strict";n.d(t,{mp:function(){return r},ry:function(){return o}});var r,o="qodana-storage.v1.";!function(e){e.comparison="comparison.v2.",e.exclusionFilters="exclusion-filters.v2.",e.featureState="feature-state.v1.",e.fileDestination="file-destination.v2.",e.onboardingHidden="user-seen-onboarding.v2.",e.onboardingTips="onboarding-tips.v1.",e.profileChanges="profile-changes.v2.",e.profileHash="profile-hash.v1.",e.savedFilters="saved-filters.v2.",e.scopes="scopes.v2.",e.tab="tab.v2.",e.theme="theme.v1.",e.userAgreement="policy-agreement.v1.",e.profileChangedNotificationClosed="profile-changed-notification-closed.v1.",e.sanityProblemsNotificationClosed="sanity-problems-notification-closed.v1.",e.isCloudPromotionNotificationViewed="is-cloud-promotion-notification-viewed.v1."}(r||(r={}))},64617:function(e,t,n){"use strict";n.d(t,{D:function(){return r}});var r={summaryProblemsWithComparison:"Difference in problem numbers compared to another build (before filtering)",summaryProblemsNoComparison:"Total number of problems before filtering",summaryBaselineTabNoComparison:"Number of problems you\u2019ve put in baseline to deal with them later",summaryBaselineTabWithComparison:"Difference in baseline problem numbers compared to another build",summaryChecksWithComparison:"Difference in enabled checks (inspections) compared to another build",summaryChecksNoComparison:"Total number of enabled checks (inspections)",summaryProjectAudit:"Project dependencies audit",sunburst:"Interactive sunburst diagram (click segment to filter)",savedFilters:"You can save filters for future usage",reorder:"Reorder filters and corresponding levels on the diagram",hiddenProblemsToggle:"Switch on the toggle to see previously hidden problems",problem:"Click the problem to see its detailed information"}},14597:function(e,t,n){"use strict";n.d(t,{J3:function(){return o},Z$:function(){return r},rY:function(){return a},rf:function(){return i}});var r,o=["Java"],a=["PHP Interpreter"],i=new Map([["PHP Interpreter","PHP"]]);!function(e){e.licenses="projectMetadata.json",e.rules="licenseRules.json"}(r||(r={}))},83792:function(e,t,n){"use strict";var r;n.d(t,{P:function(){return o},b:function(){return r}}),function(e){e.checksFilter="checks-filter",e.checksSearch="checks-search",e.checksToolBtn="checks-tool-button",e.checksInspectionGroupBtn="checks-inspection-group-button",e.featureState="feature-state",e.filtersContainer="filters-container",e.fileListItemFile="file-list-item-file",e.fileListItemFolder="file-list-item-folder",e.fileListItemProblem="file-list-item-problem",e.fileListTableHeader="file-list-table-header",e.genericFilter="generic-filter",e.groupByContainer="group-by-container",e.groupByOption="group-by-option",e.helpMenuBtn="help-menu-button",e.helpMenuItem="help-menu-item",e.helpMenuItems="help-menu-items",e.listSearch="list-search",e.locationFilter="location-filter",e.locationFiltersSelectAll="location-filters__select-all",e.locationFiltersDeselectAll="location-filters__deselect-all",e.locationFiltersReset="location-filters__reset",e.policyMessage="policy-message",e.policyMessageAcceptBtn="policy-message-accept-button",e.problemListTableHeader="problem-list-table-header",e.profileDownloadBtn="profile-download-button",e.profileEditableCode="profile-editable-code",e.projectAuditDependencyListSearch="project-audit-dependency-list-search",e.projectAuditDepsLibsVendor="project-audit-dependencies-libraries-vendor",e.projectAuditDepsLibsVersion="project-audit-dependencies-libraries-version",e.projectAuditDepsModulesComponent="project-audit-dependencies-modules-component",e.projectAuditDepsModulesLang="project-audit-dependencies-modules-language",e.projectAuditLicenseListSearch="project-audit-license-list-search",e.projectAuditLicenseListOnlyAlertedToggle="project-audit-license-list-only-alerted-toggle",e.projectAuditLicenseListLicenseCount="project-audit-license-list-license-count",e.projectAuditLicenseListHeader="project-audit-license-list-header",e.projectAuditLicensesThirdPartyLicense="project-audit-licenses-third-party-licence",e.projectAuditLicensesThirdPartySoftware="project-audit-licenses-third-party-software",e.projectAuditModulesListSearch="project-audit-modules-list-search",e.projectAuditTab="project-audit-tab",e.projectAuditValidationFormSearch="project-audit-validation-form-search",e.qodanaLogo="qodana-logo",e.reorderButton="reorder-button",e.saveFiltersAsBtn="save-filters-as-button",e.severityTooltip="severity-tooltip",e.summaryChecks="summary-checks",e.summaryProblems="summary-problems",e.summaryBaseline="summary-tech-debt",e.summaryProjectAudit="summary-project-audit",e.sunburstContainer="sunburst-container",e.sunburstCenterInfo="sunburst-center-info",e.sunburstArc="sunburst-arc",e.sunburstArcText="sunburst-arc-text",e.sunburstArcTooltip="sunburst-arc-tooltip",e.tabFiles="tab-files",e.tabProblems="tab-problems",e.tabAlpha="tab-alpha",e.tabBeta="tab-beta",e.tabStable="tab-stable",e.tagFilter="tag-filter",e.baselineChangedNotification="tech-debt-changed-notification",e.baselineDownloadBtn="tech-debt-download-btn",e.themeToggle="theme-toggle",e.selectedProblemsHint="selected-problems-hint",e.toggleBaselineProblemsButton="toggle-tech-debt-problems-button",e.version="version",e.saveFiltersInput="save-filters-input",e.saveFiltersCancel="save-filters-cancel",e.saveFiltersSave="save-filters-save",e.savedFiltersTriggerBtn="saved-filters-trigger-button",e.savedFiltersListItemBtn="saved-filters-list-item-button",e.savedFiltersResetBtn="saved-filters-reset-button",e.bandAboveList="band-above-list",e.tabCount="tab-count",e.problemListItem="problem-list-item",e.problemListGroupName="problem-list-group-name",e.openProjectSelectBtn="open-project-select-button",e.openProjectOption="open-project-option",e.moreActionSelectBtn="more-action-select-button",e.moreActionOption="more-action-option",e.problemCheckbox="problem-checkbox",e.problemCheckboxTooltip="problem-checkbox-tooltip",e.problemCode="problem-code",e.problemCodeLine="problem-code-line",e.problemCol="problem-col",e.problemDescription="problem-description",e.problemDetailsInfo="problem-details-info",e.problemPathButton="problem-path-button",e.problemTag="problem-tag",e.mainTabsTotalCount="main-tabs-total-count",e.buildSelectButton="build-select-button",e.buildSelectToggle="build-select-toggle",e.buildSelectError="build-select-error",e.profileReset="profile-reset",e.checkListCheck="check-list-check",e.checkName="check-name",e.checkToggle="check-toggle",e.checkShortName="check-short-name",e.checkTag="check-tag",e.checkDetailsInfo="check-details-info",e.editableCodeLine="editable-code-line",e.editableCodeReset="editable-code-reset"}(r||(r={}));var o={arc:r.sunburstArc,arcText:r.sunburstArcText,arcTooltip:r.sunburstArcTooltip,centerInfo:r.sunburstCenterInfo}},59460:function(e,t,n){"use strict";var r;n.d(t,{D:function(){return r}}),function(e){e.comparedBuildId="comparedBuildId",e.comparing="comparing",e.genericFilters="genericFilters",e.locationFilters="locationFilters",e.openedProblem="openedProblem",e.orderedLevels="orderedLevels",e.projectKey="projectKey",e.showingBaseline="showingBaseline"}(r||(r={}))},43990:function(e,t,n){"use strict";n.d(t,{D$:function(){return i},GJ:function(){return p},GZ:function(){return s},KF:function(){return l},NO:function(){return o},Xv:function(){return c},Z$:function(){return u},ZT:function(){return f},mK:function(){return d},nd:function(){return h},qh:function(){return a},rp:function(){return r},z6:function(){return m}});var r=["tool","severity","category","type"],o=280,a="S",i=700,l=1e3,c={multiple:"problems",single:"problem"},s="problems",u="problem",d={primary:"It seems all right \ud83d\udc4c",secondary:"No problems found according to the checks applied"},p={primary:"Keep up the pace \ud83d\udcaa",secondary:"Seems like you\u2019ve fixed all problems from the baseline"},m={primary:"Good job \ud83d\udc4d",secondary:"No new problems are found"},f="#F34463",h={main:{tool:{priority:2,values:{"Code Inspection":"#B2B9F7","Code inspection":"#B2B9F7","Vulnerabilities Search":"#AAE07F","Vulnerability Search":"#AAE07F",default:"#89E0D3"}},severity:{priority:4,values:{Critical:"#fa274f",High:"#ff9121",Info:"#6BB9F0",Low:"#D5DDE5",Moderate:"#fee225",default:"#9a9e9f"}},category:{priority:3,values:["#6C8EF9","#49DEE9"]},type:{priority:3,values:["#6C8EF9","#49DEE9"]}},fallback:"#6f7273"}},31832:function(e,t,n){"use strict";n.d(t,{BX:function(){return c},CI:function(){return p},OB:function(){return f},OU:function(){return b},Pg:function(){return h},Q8:function(){return d},Rz:function(){return l},_F:function(){return a},_l:function(){return v},dT:function(){return i},g4:function(){return g},k5:function(){return r},lL:function(){return o},oN:function(){return u},rp:function(){return m},wC:function(){return s}});var r,o="Compare with build",a="The build is unavailable. Try to compare with another build.";!function(e){e.score="Clone Finder uses a block-based bag-of-tokens approach to clone detection that applies different similarity thresholds depending on the function size and token length, thus yielding diverse relevant results shown as",e.baselineNotSupprotedCheckbox="For now, we don`t support baseline for problems found by the"}(r||(r={}));var i,l,c,s,u,d,p,m,f,h,v,g="You have fixed and new problems in the baseline.\nTo update the baseline download the file and put it into you project instead of the current one.",b="qodana.yaml was changed and required to be updated to apply the changes";!function(e){e.problems="Problems",e.files="Files",e.inspections="Checks"}(i||(i={})),function(e){e.locationFilters="Files and folders",e.directoryExclusion="Folder categories"}(l||(l={})),function(e){e.select="No options found",e.list="No results matched with"}(c||(c={})),function(e){e.openInVCS="The file should be opened in VCS page.",e.fileList="There could be more problems shown in total because of the duplicates in different files."}(s||(s={})),function(e){e.new="New",e.disable="Disabled"}(u||(u={})),function(e){e.scoreDocs="importance score",e.youtrackInFilter="Report an issue"}(d||(d={})),function(e){e.checksSearch="Inspection name, language, framework"}(p||(p={})),function(e){e.openFileIn="Open file in"}(m||(m={})),function(e){e.promo="Problems examples"}(f||(f={})),function(e){e.promo="Besides the configured inspections, a small portion of your files was checked using additional Qodana inspections. If you find them useful, you can add such inspections to your project\u2019s Qodana configuration."}(h||(h={})),function(e){e.promo="We\u2019ve discovered even more problems in your codebase. Explore Suggested Inspections and enable the corresponding checks if you find these problems important."}(v||(v={}))},49886:function(e,t,n){"use strict";n.d(t,{IC:function(){return g},KK:function(){return h},Nd:function(){return p},V_:function(){return f},bT:function(){return v},pZ:function(){return m}});var r=n(50189),o=n(649),a=n(60726),i=n(35373),l=n.n(i),c=n(78625),s=n(33591),u=n(97382),d=n(13864);function p(e,t){var n,r={},i=new Set,l=(0,a.Z)(e);try{var d=function(){var e=n.value;if(e.category===s.nf.file)r=t.find((function(t){return t.category===e.category&&t.name===(0,u.Q)(e.name)}));else{var l=t.filter((function(t){return t.category===s.nf.path&&t.name===e.name||t.name.startsWith(e.name+c.qk)})),d=[];l.forEach((function(e){return d.push.apply(d,(0,o.Z)(e.problems))})),r={category:s.nf.path,name:e.name,problems:d}}r&&(e.category!==s.nf.file?r.problems.forEach((function(e){return i.add(e)})):r.problems.forEach((function(t){var n,r=(0,a.Z)(t.sources);try{for(r.s();!(n=r.n()).done;){if(n.value.path===(0,u.D)(e.name)){i.add(t);break}}}catch(o){r.e(o)}finally{r.f()}})))};for(l.s();!(n=l.n()).done;)d()}catch(p){l.e(p)}finally{l.f()}return Array.from(i)}function m(e,t){var n,r=t,i=[],l=(0,d.Gp)(e,"category"),c=(0,a.Z)(l);try{for(c.s();!(n=c.n()).done;){var s=n.value;i=[];var u,p=(0,a.Z)(e);try{for(p.s();!(u=p.n()).done;){var m=u.value;if(m.category===s){var f=h(m.name,s,r);i=[].concat((0,o.Z)(i),(0,o.Z)(f))}}}catch(g){p.e(g)}finally{p.f()}r=i}}catch(g){c.e(g)}finally{c.f()}var v=new Set(r);return Array.from(v)}function f(e,t){var n=[];return t.forEach((function(t){if("undefined"!==typeof t.tags){var r,o=(0,a.Z)(t.tags);try{for(o.s();!(r=o.n()).done;){var i=r.value;if(e.includes(i))return void n.push(t)}}catch(f){o.e(f)}finally{o.f()}}var l,c=(0,a.Z)(t.sources);try{for(c.s();!(l=c.n()).done;){var s,u=l.value;if("undefined"!==typeof(null===(s=u.attributes)||void 0===s?void 0:s.tags)){var d,p=(0,a.Z)(u.attributes.tags);try{for(p.s();!(d=p.n()).done;){var m=d.value;if(e.includes(m))return void n.push(t)}}catch(f){p.e(f)}finally{p.f()}}}}catch(f){c.e(f)}finally{c.f()}})),n}function h(e,t,n){var r,o=[],i=(0,a.Z)(n);try{for(i.s();!(r=i.n()).done;){var l=r.value;l[t]===e&&o.push(l)}}catch(c){i.e(c)}finally{i.f()}return o}function v(e,t){var n,r=t,o=e.filter((function(e){return!e.include})),i=e.filter((function(e){return e.include})),l=(0,a.Z)(o);try{var c=function(){var e=n.value;if("path"===e.category){var t=Array.isArray(e.name)?e.name:[e.name];r=g(t,r)}else r=r.filter((function(t){var n=t[e.category]===e.name;if(n){var r,o=(0,a.Z)(i);try{for(o.s();!(r=o.n()).done;){var l=r.value;if(t[l.category]===l.name){n=!1;break}}}catch(c){o.e(c)}finally{o.f()}}return!n}))};for(l.s();!(n=l.n()).done;)c()}catch(s){l.e(s)}finally{l.f()}return r}function g(e,t){if(0===e.length)return t;var n=[],o=l()((function(t){return e.some((function(e){return t===e||t.startsWith(e)}))}));return t.forEach((function(e){var t=[];if(e.sources.forEach((function(e){var n=""!==e.path?c.qk:"",r="".concat(e.path).concat(n).concat(e.file);o(r)||t.push(e)})),e.sources.length!==t.length){if(t.length>0){if(1===t.length&&t[0].type===s.rR.duplicate)return;n.push((0,r.Z)((0,r.Z)({},e),{},{sources:t}))}}else n.push(e)})),n}},21867:function(e,t,n){"use strict";n.d(t,{j:function(){return p}});var r=n(50189),o=n(60726),a=n(65938),i=n.n(a),l=n(33591),c=n(97382),s=new(i())({removeAdditional:"failing"}),u=s.compile({$id:"/schemas/info/code",type:"object",properties:{length:{type:"integer"},offset:{type:"integer"},startLine:{type:"integer"},surroundingCode:{type:"string",minLength:1}},required:["length","offset","startLine","surroundingCode"]}),d=s.compile({$id:"/schemas/info/source",type:"object",properties:{attributes:{type:"object",required:[],nullable:!0},code:{$ref:"/schemas/info/code"},language:{type:"string",nullable:!0},length:{type:"number",minimum:1,nullable:!0},line:{type:"number",minimum:1,nullable:!0},offset:{type:"number",nullable:!0},path:{type:"string"},type:{type:"string",nullable:!1}},required:["path"]}),p=function(e){var t,n=(0,o.Z)(e);try{for(n.s();!(t=n.n()).done;){var a=t.value;""===a.comment&&(a.comment="Empty comment"),""===a.category&&(a.category="Empty category"),a.type&&""===a.type&&(a.type="Empty type"),a.sources=a.sources.map((function(e){var t=(0,r.Z)((0,r.Z)({},e),{},{code:e.code&&u(e.code)?e.code:void 0});return d(t)?t:{type:e.type,path:e.path}}));var i,s=(0,o.Z)(a.sources);try{for(s.s();!(i=s.n()).done;){var p=i.value,m=p.path;p.type===l.rR.module||p.type===l.rR.global?p.file=l.rR.global:(p.file=(0,c.Q)(m),p.path=(0,c.D)(m))}}catch(f){s.e(f)}finally{s.f()}}}catch(f){n.e(f)}finally{n.f()}return e}},83488:function(e,t,n){"use strict";n.d(t,{k:function(){return o}});var r=n(33591),o=function(e,t){var n;if(e!==r.nf.file&&e!==r.nf.path){var o;n=null!==(o=t[e])&&void 0!==o?o:""}else{var a=new Set;t.sources.forEach((function(t){var n=t.path,o=t.file,i=e===r.nf.file?o:n?"".concat(n,"/").concat(o):o;a.add(i)})),n=Array.from(a).sort().join(", ")}return n}},12766:function(e,t,n){"use strict";n.d(t,{F:function(){return i},p:function(){return a}});var r=["Info","Low","Moderate","High","Critical"],o=[].concat(r).reverse(),a=function(e){return{alphabetically:function(e,t){return e.comment.localeCompare(t.comment)||i(t)-i(e)},reverseAlphabetically:function(e,t){return t.comment.localeCompare(e.comment)||i(t)-i(e)},reverseSeverity:function(e,t){return o.indexOf(t.severity)-o.indexOf(e.severity)||i(t)-i(e)},severity:function(e,t){return r.indexOf(t.severity)-r.indexOf(e.severity)||i(t)-i(e)}}[e]},i=function(e){var t=e.attributes;return t&&t.importanceScore?Number(t.importanceScore):0}},56490:function(e,t,n){"use strict";n.d(t,{M:function(){return o}});var r=n(33591),o=function(e){var t;return e.status===r.sB.fixed||(null===(t=e.attributes)||void 0===t?void 0:t.baselineState)===r.iB.absent}},73204:function(e,t,n){"use strict";n.d(t,{t:function(){return o}});var r=n(91218),o=function(e){return function(t){var n=(0,r.mI)(t);return e(n)}}},13864:function(e,t,n){"use strict";n.d(t,{Gp:function(){return c},SS:function(){return m},Yi:function(){return s},wh:function(){return p}});var r=n(649),o=n(60726),a=n(33591),i=n(83488),l=n(12766);function c(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a.nf.file,r=new Set,l=(0,o.Z)(e);try{for(l.s();!(t=l.n()).done;){var c=t.value;r.add((0,i.k)(n,c))}}catch(s){l.e(s)}finally{l.f()}return Array.from(r)}function s(e,t){var n=[];return t.forEach((function(t){var r=new Map([]);t!==a.nf.file&&t!==a.nf.path?e.forEach((function(e){var n=r.get(e[t]);"undefined"===typeof n?r.set(e[t],[e]):n.push(e)})):e.forEach((function(e){var n,a=[],i=(0,o.Z)(e.sources);try{for(i.s();!(n=i.n()).done;){var l=n.value,c=l[t],s=r.get(c);"undefined"===typeof s?(r.set(l[t],[e]),a.push(c)):-1===a.indexOf(c)&&(s.push(e),a.push(c))}}catch(u){i.e(u)}finally{i.f()}})),r.forEach((function(e,r){n.push({category:t,name:r,problems:e})}))})),n}var u=["Info","Low","Moderate","High","Critical"],d=[].concat(u).reverse();function p(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a.nf.file,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"severity",r=[],o=new Map([]);if(n===a.JN.severity||n===a.JN.reverseSeverity){var c=n===a.JN.severity?u:d;e.forEach((function(e){var n=(0,i.k)(t,e),r=c.indexOf(e.severity),a=o.get(n);a?(a.problems.push(e),r>a.max?(a.max=r,a.count=1):r===a.max&&a.count++):o.set(n,{count:1,max:r,problems:[e]})})),o.forEach((function(e,t){r.push({count:e.count,max:e.max,name:t,problems:e.problems.sort((0,l.p)(n))})})),r.sort((function(e,t){return t.max-e.max||t.count-e.count}))}else e.forEach((function(e){var n=(0,i.k)(t,e),r=e.comment,a=o.get(n);a?(a.problems.push(e),1===a.max.localeCompare(r)?(a.max=r,a.count=1):0===a.max.localeCompare(r)&&a.count++):o.set(n,{count:1,max:r,problems:[e]})})),o.forEach((function(e,t){r.push({count:e.count,max:e.max,name:t,problems:e.problems.sort((0,l.p)(n))})})),n===a.JN.reverseAlphabetically?r.sort((function(e,t){return t.max.localeCompare(e.max)||t.count-e.count})):r.sort((function(e,t){return e.max.localeCompare(t.max)||t.count-e.count}));return r}var m=function(e){var t=[];return e.forEach((function(e){return t.push.apply(t,(0,r.Z)(e.problems))})),t}},13621:function(e,t,n){"use strict";n.d(t,{CB:function(){return c},CG:function(){return i},TL:function(){return a},qr:function(){return l}});var r=n(44334),o=n(91218),a=function(){return(0,r.I0)()},i=r.v9,l=r.oR,c=function(e){return e(i(o.mI))}},19246:function(e,t,n){"use strict";n.d(t,{Aw:function(){return c},N8:function(){return s},xU:function(){return u}});var r=n(50189),o=n(33591),a=n(85864),i=n(80759),l={comparedBuildId:-1,currentBuildId:-1,failedRequestController:!1,failedRequestFile:!1,paths:{},request:!1,requestWasMade:!1};function c(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:l,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case a.oC:var n="file"!==t.source&&e.failedRequestFile,c="controller"!==t.source&&e.failedRequestController;return(0,r.Z)((0,r.Z)({},e),{},{error:!1,failedRequestController:c,failedRequestFile:n,request:!0,requestWasMade:!1});case a.Yt:return(0,r.Z)((0,r.Z)({},e),{},{request:!1,requestWasMade:!0});case i.gb:return"file"===t.source?(0,r.Z)((0,r.Z)({},e),{},{failedRequestFile:!1,requestWasMade:!0}):"controller"===t.source?(0,r.Z)((0,r.Z)({},e),{},{failedRequestController:!1,requestWasMade:!0}):e;case a.dB:return t.reason===o.jD.remoteComparison?(0,r.Z)((0,r.Z)({},e),{},{failedRequestController:!0,request:!1,requestWasMade:!0}):t.reason===o.jD.file?(0,r.Z)((0,r.Z)({},e),{},{failedRequestFile:!0,request:!1,requestWasMade:!0}):e;case a.tF:return(0,r.Z)((0,r.Z)({},e),{},{comparedBuildId:Number(t.compareWithBuildId),currentBuildId:Number(t.currentBuildId)});case a.FZ:return(0,r.Z)((0,r.Z)({},e),{},{comparedBuildId:t.buildId});case a.Sb:return(0,r.Z)((0,r.Z)({},e),{},{paths:t.paths});default:return e}}var s=function(e){var t=e.failedRequestFile,n=e.failedRequestController;return t&&n},u=function(e){return e.request}},91218:function(e,t,n){"use strict";n.d(t,{m5:function(){return L},mI:function(){return I},L7:function(){return A}});var r=n(50189),o=n(64649),a=n(16199),i=n(28151),l=n(78625),c=n(39994),s=n(58499),u=n(59460),d=n(43990),p=n(92387);function m(){return(0,s.Gr)(u.D.orderedLevels,!0,!0,"[]")||d.rp}var f=n(4478),h=n(56118),v=n(21867),g=n(91100),b=(0,h.Lq)({showingModal:!1,sanityProblems:[]},(function(e){e.addCase(g.G,(function(e,t){var n,r=null!==(n=t.payload.listProblem)&&void 0!==n?n:[];t.payload.version&&"1"!==t.payload.version&&(r=(0,v.j)(r)),e.sanityProblems=r})),e.addCase(g.$,(function(e,t){e.showingModal=t.payload}))})),_=n(17033),y={showingModal:!1,promoProblems:[]};var C=n(8785),E=n(19246),x=n(39881),w=n(90122),k=n(71651),S={jobUrl:"",failed:!1,requestWasMade:!1,tools:[],totalProblemsCount:0,vcs:{}};var j=n(50627),N=n(90824),Z={tips:void 0,openInIDEWarningViewed:!1,showOnboarding:!1};var P=n(69917),O=(0,a.UY)({getData:E.Aw,info:x.MY,inspections:c.Hq,marker:C.rC,metaInf:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:S,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case k.g:var n=t.data,o=void 0,a={},i="",l=n?Object.keys(n["tools inspection"]||{}):[];if(n&&(0,w.Q$)(n,"attributes")){var c=n.attributes;c&&(0,w.Q$)(c,"vcs")&&(a=c.vcs),c&&(0,w.Q$)(c,"jobUrl")&&c.jobUrl&&(i=c.jobUrl)}return n&&n.linter&&(o=n.linter),(0,r.Z)((0,r.Z)({},e),{},{requestWasMade:!0,tools:l,totalProblemsCount:n.total,vcs:a,jobUrl:i,linter:o});case k.L:return(0,r.Z)((0,r.Z)({},e),{},{requestWasMade:!0,failed:!0});default:return e}},notifications:j.ee,orderedLevels:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:m(),t=arguments.length>1?arguments[1]:void 0;return t.type===p.c?t.payload:e},profile:P.Cn,projectAudit:f.ay,promo:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:y,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case _.n:var n=t.isVisible;return(0,r.Z)((0,r.Z)({},e),{},{showingModal:n});case _.I:var o=t.data.listProblem;return t.data.version&&"1"!==t.data.version&&(o=(0,v.j)(o)),(0,r.Z)((0,r.Z)({},e),{},{promoProblems:o});default:return e}},sanity:b,onboarding:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Z,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case N.UE:return(0,r.Z)((0,r.Z)({},e),{},{tips:t.state});case N.qZ:return(0,r.Z)((0,r.Z)({},e),{},{showOnboarding:t.visible});case N.av:return(0,r.Z)((0,r.Z)({},e),{},{openInIDEWarningViewed:t.viewed});default:return e}}});function T(){return{openedReportKey:l.au,reports:(0,o.Z)({},l.au,O(void 0,(0,i.j)()))}}var L=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:T(),t=arguments.length>1?arguments[1]:void 0,n=e;if(t.type===i.b.type&&(n=(0,r.Z)((0,r.Z)({},n),{},{openedReportKey:t.payload,reports:(0,r.Z)((0,r.Z)({},n.reports),{},(0,o.Z)({},t.payload,O(void 0,(0,i.j)())))})),t.meta&&"undefined"!==typeof t.meta.projectKey){var a=n.reports[t.meta.projectKey];return(0,r.Z)((0,r.Z)({},n),{},{reports:(0,r.Z)((0,r.Z)({},n.reports),{},(0,o.Z)({},t.meta.projectKey,O(a,t)))})}return n},I=function(e){return e.reports[e.openedReportKey]},A=function(e){return e.openedReportKey}},39881:function(e,t,n){"use strict";n.d(t,{vV:function(){return b.vV},oJ:function(){return b.oJ},MY:function(){return j},Ne:function(){return b.Ne},kV:function(){return k},sh:function(){return x},XG:function(){return w},w5:function(){return _.w5},XI:function(){return b.XI},s:function(){return _.s},gJ:function(){return _.gJ}});var r=n(64649),o=n(50189),a=n(58499),i=n(59460),l=n(21867),c=n(33591),s=n(85864),u=n(80759),d=n(71792),p=n(649),m=n(93191),f=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case m.fP:var n=t.filter,a=n.group,i=n.name;if(!e)return(0,r.Z)({},a,[i]);var l=e[a]?e[a].slice():[];return l.push(i),(0,o.Z)((0,o.Z)({},e),{},(0,r.Z)({},a,l));case m.TE:var c={};return Object.keys(t.filterObject).forEach((function(e){c[e]=(0,p.Z)(t.filterObject[e])})),c;case m.bs:var s=t.filter,u=s.group,d=s.name,f=[];if(!e)return{};e[u]&&(f=e[u].slice()).includes(d)&&f.splice(f.indexOf(d),1);for(var h={},v=0,g=Object.keys(e);v0&&void 0!==arguments[0]?arguments[0]:h(),t=arguments.length>1?arguments[1]:void 0;switch(t.type){case u.bL:if(t.filters){if((0,d.An)(e.locationFilters,t.filters))return e;var n=t.filters.sort((function(e,t){return e.name.localeCompare(t.name)}));return(0,o.Z)((0,o.Z)({},e),{},{locationFilters:n})}return e;case u.o4:var r=t.tags;return(0,o.Z)((0,o.Z)({},e),{},{tagFilters:r});default:var a=f(e.genericFilters,t);return a===e.genericFilters?e:(0,o.Z)((0,o.Z)({},e),{},{genericFilters:a})}}var g,b=n(94144),_=n(39376),y=n(60726),C=n(46167),E=n(56490);!function(e){e[e.added=0]="added",e[e.excluded=1]="excluded",e[e.removed=2]="removed",e[e.unchanged=3]="unchanged"}(g||(g={}));var x=(0,C.P1)(_.s,(function(e){return e.filter((function(e){var t,n;return(null===(t=e.attributes)||void 0===t?void 0:t.baselineState)===c.iB.unchanged||(null===(n=e.attributes)||void 0===n?void 0:n.baselineState)===c.iB.absent}))})),w=(0,C.P1)(b.oJ.selectAppliedExclusionProblems,(function(e){var t,n=new Map,r=(0,y.Z)(e);try{for(r.s();!(t=r.n()).done;){var o=t.value;n.set(o.hash,o)}}catch(a){r.e(a)}finally{r.f()}return n})),k=(0,C.P1)([x,b.oJ.selectAppliedExclusionProblems,_.w5],(function(e,t,n){var r,o=0,a=0,i=0,l=0,s=new Map,u=(0,y.Z)(e);try{for(u.s();!(r=u.n()).done;){var d,p=r.value;(null===(d=p.attributes)||void 0===d?void 0:d.baselineState)===c.iB.unchanged&&s.set(p.hash,n.has(p.hash)?g.excluded:g.removed),(0,E.M)(p)&&++l}}catch(b){u.e(b)}finally{u.f()}var m,f=(0,y.Z)(t);try{for(f.s();!(m=f.n()).done;){var h=m.value,v=h.hash;(0,E.M)(h)||(s.has(v)?s.set(v,g.unchanged):s.set(v,g.added))}}catch(b){f.e(b)}finally{f.f()}return s.forEach((function(e,t){switch(e){case g.added:++o;break;case g.removed:++i;break;case g.excluded:++a}})),{addedProblems:o,excludedProblems:a,fixedProblems:l,removedProblems:i}}));function S(){var e=!1,t=(0,a.Gr)(i.D.showingBaseline);return null!==t&&(e=Boolean(t)),{baselineProblemHashes:[],excludedDisplayType:c.K4.withoutExcluded,exclusionFilters:[],initialArray:[],initialArrayWithFurtherInfo:[],invalidFields:!1,problemsTabFilters:{actual:h("actual"),baseline:h("baseline"),promo:h("promo"),sanity:h("sanity")},processed:!1,processedArrayWithFurtherInfo:!1,showingBaseline:e,showingNew:!1}}function j(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:S(),t=arguments.length>1?arguments[1]:void 0;switch(t.type){case u.Xo:var n=t.problemHashes;return(0,o.Z)((0,o.Z)({},e),{},{baselineProblemHashes:n});case u.IX:var a=t.filters;return(0,o.Z)((0,o.Z)({},e),{},{excludedDisplayType:c.K4.withoutExcluded,exclusionFilters:a});case u.Uk:var i=t.displayType;return(0,o.Z)((0,o.Z)({},e),{},{excludedDisplayType:i});case u.xK:var d=e.showingBaseline,p=!d;return(0,o.Z)((0,o.Z)({},e),{},{showingBaseline:p});case s.Yt:return(0,o.Z)((0,o.Z)({},e),{},{processed:!1});case u.gb:if(0===t.data.listProblem.length)return(0,o.Z)((0,o.Z)({},e),{},{processed:!0});var m=t.data.listProblem;t.data.version&&"1"!==t.data.version&&(m=(0,l.j)(m));var f=m.flatMap((function(e){var t,n;return(null===(t=e.attributes)||void 0===t?void 0:t.baselineState)===c.iB.unchanged||(null===(n=e.attributes)||void 0===n?void 0:n.baselineState)===c.iB.absent?[e.hash]:[]})),h="file"===t.source&&!e.processedArrayWithFurtherInfo;return(0,o.Z)((0,o.Z)({},e),{},{baselineProblemHashes:f,initialArray:m,processed:!0,initialArrayWithFurtherInfo:h?m:e.initialArrayWithFurtherInfo,invalidFields:!1,processedArrayWithFurtherInfo:!!h||e.processedArrayWithFurtherInfo});case u.Gt:var g=t.data.listProblem;return t.data.version&&"1"!==t.data.version&&(g=(0,l.j)(g)),(0,o.Z)((0,o.Z)({},e),{},{initialArrayWithFurtherInfo:g,processedArrayWithFurtherInfo:!0});case u.CH:var _=t.showingNew;return(0,o.Z)((0,o.Z)({},e),{},{excludedDisplayType:c.K4.withoutExcluded,showingNew:_});default:var y=t,C=y[u.R8],E=void 0===C?(0,b.XI)(e):C,x=v(e.problemsTabFilters[E],t);return e.problemsTabFilters[E]===x?e:(0,o.Z)((0,o.Z)({},e),{},{problemsTabFilters:(0,o.Z)((0,o.Z)({},e.problemsTabFilters),{},(0,r.Z)({},E,x))})}}},2410:function(e,t,n){"use strict";n.d(t,{q:function(){return i}});var r=n(649),o=n(46167),a=n(8785),i=(0,o.P1)([function(e){return e.info.exclusionFilters},function(e){return(0,a.kW)(e.marker)}],(function(e,t){return[].concat((0,r.Z)(e),[{category:"path",name:t}])}))},39376:function(e,t,n){"use strict";n.d(t,{Ky:function(){return a},d3:function(){return c},d4:function(){return l},gJ:function(){return o},s:function(){return i},w5:function(){return s}});var r=n(46167),o=function(e){return e.info.showingNew},a=function(e){return e.info.excludedDisplayType},i=function(e){return e.info.initialArray},l=function(e){return e.orderedLevels},c=function(e){return e.info.processed},s=(0,r.P1)((function(e){return e.info.baselineProblemHashes}),(function(e){return new Set(e)}))},94144:function(e,t,n){"use strict";n.d(t,{vV:function(){return j},oJ:function(){return Z},Ne:function(){return S},U:function(){return N},HH:function(){return P},XI:function(){return O}});var r=n(60726),o=n(81842),a=n(46167),i=n(35373),l=n.n(i),c=n(71792),s=n(95572),u=n(43990),d=function(e,t,n,o){var a,i={},l=(0,r.Z)(e);try{for(l.s();!(a=l.n()).done;){var c=a.value,s=c[t],u=n&&n.length&&!n.includes(c)?0:c.size;i[s]=i[s]?i[s]+u:u}}catch(f){l.e(f)}finally{l.f()}if(o&&o[t]){var d,p=(0,r.Z)(o[t]);try{for(p.s();!(d=p.n()).done;){var m=d.value;i[m]||(i[m]=0)}}catch(f){p.e(f)}finally{p.f()}}return i},p=function(e,t,n){var o,a=m(e,n,t),i=[],l=(0,r.Z)(a);try{for(l.s();!(o=l.n()).done;){var c=o.value;t.includes(c.label)&&i.push(c.key)}}catch(s){l.e(s)}finally{l.f()}return{options:a,selected:i}},m=function(e,t,n){var o=Object.keys(e).map((function(n,r){return{description:e[n]||0,disabled:!1,key:"".concat(t,"-").concat(r,"-").concat(n.split(" ").join("-")),label:n}}));if("severity"===t){var a,i=[],l=(0,r.Z)(s.iO);try{var u=function(){var e=a.value,t=o.find((function(t){return t.label===e}));t&&i.push(t)};for(l.s();!(a=l.n()).done;)u()}catch(p){l.e(p)}finally{l.f()}return i}var d=[function(e){return n.includes(e.label)?-1:1},"label"].map((function(e){return{direction:1,criterion:e}}));return(0,c.P1)(o,d),o},f=n(32098),h=n(36838),v=n(49886),g=n(56490),b=n(13864),_=n(33591),y=n(65837),C=n(2410),E=n(39376),x=[_.nf.file,_.nf.path];function w(e,t,n){var r=n;switch(e){case _.K4.include:break;case _.K4.withoutExcluded:r=(0,v.bT)(t,r);break;case _.K4.onlyExcluded:var o=new Set((0,v.bT)(t,r).map((function(e){return e.hash})));r=r.filter((function(e){return!o.has(e.hash)}));break;default:throw new Error("Unknown excludedDisplayType")}if(e!==_.K4.withoutExcluded){var a=t.find((function(e){return"path"===e.category}));"undefined"!==typeof a&&Array.isArray(a.name)&&(r=(0,v.IC)(a.name,r))}return r}var k={actual:(0,a.P1)([E.s,E.w5],(function(e,t){return e.filter((function(e){return!t.has(e.hash)}))})),baseline:(0,a.P1)([E.s,E.w5],(function(e,t){return e.filter((function(e){return t.has(e.hash)}))})),promo:function(e){return e.promo.promoProblems},sanity:y.b},S=l()((function(e){var t=k[e],n=(0,a.P1)(t,(function(e){return e.filter((function(e){return!(0,g.M)(e)}))})),i=(0,a.P1)([n],(function(e){return e.map((function(e){return e.hash}))})),l=(0,a.P1)(t,(function(e){return e.filter((function(e){return(0,g.M)(e)}))})),c=(0,a.P1)([E.Ky,C.q,l],w),s=(0,a.P1)([E.Ky,C.q,n],w),m=(0,a.P1)(s,(function(e){return e.filter((function(e){return e.status===_.sB.new}))})),y=(0,a.P1)(s,(function(e){return e.length})),S=(0,a.P1)([E.gJ,s,m],(function(e,t,n){return e?n:t})),j=(0,a.P1)(S,(function(e){return(0,b.Yi)(e,x)})),N=function(t){return t.info.problemsTabFilters[e].locationFilters},Z=function(t){return t.info.problemsTabFilters[e].tagFilters},P=(0,a.P1)([S,j,N,Z],(function(e,t,n,r){var o=e;0!==n.length&&(o=(0,v.Nd)(n,t));var a=r;return 0!==a.length&&(o=(0,v.V_)(a,o)),o})),O=(0,a.P1)([P,E.d4],(function(e,t){var n=(0,o.k)(e,t);return(0,o.W)(n)})),T=(0,a.P1)([O],(function(e){var t,n={},o=(0,r.Z)(u.rp);try{for(o.s();!(t=o.n()).done;){var a=t.value;n[a]=d(e,a)}}catch(i){o.e(i)}finally{o.f()}return n})),L=(0,a.P1)([function(t){return t.info.problemsTabFilters[e].genericFilters},E.d4,T],(function(e,t,n){if(e)return e;var o,a={},i=(0,r.Z)(t);try{for(i.s();!(o=i.n()).done;){var l=o.value,c=Object.keys(n[l]);if(1!==c.length)break;a[l]=[c[0]]}}catch(s){i.e(s)}finally{i.f()}return a})),I=(0,a.P1)(L,(function(e){return(0,f.Q)(e)})),A=(0,a.P1)(Z,S,(function(e,t){var n=e;if(n.length>0){var r=(0,h.Y)(t);n=n.filter((function(e){return-1!==r.indexOf(e)}))}return n})),B=(0,a.P1)([P,I],(function(e,t){var n=e;return 0!==t.length&&(n=(0,v.pZ)(t,n)),n})),q=(0,a.P1)([n,C.q,E.gJ],(function(e,t,n){var r=new Set((0,v.bT)(t,e).map((function(e){return e.hash}))),o=e.filter((function(e){return!r.has(e.hash)}));return n&&(o=(0,v.KK)(_.sB.new,"status",o)),o}));return{selectAppliedExclusionProblems:s,selectAppliedExclusionProblemsCount:y,selectComparedProblems:S,selectExcludedProblems:q,selectFilteredArray:B,selectFiltersData:(0,a.P1)([L,O],(function(e,t){return function(e,t){var n,o={},a=(0,r.Z)(u.rp);try{var i=function(){var r=n.value,a=t.filter((function(t){for(var n=0,o=Object.keys(e);n0&&void 0!==arguments[0]?arguments[0]:u,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case s.rx:return(0,l.Z)((0,l.Z)({},e),{},{excludedScopes:t.scopes});case s.VI:var n=t.readFromFile,r=void 0!==n&&n;return(0,l.Z)((0,l.Z)({},e),{},{options:(0,l.Z)((0,l.Z)({},e.options),{},(0,i.Z)({},r?"idea":"user",t.data)),projectStructureFileProcessed:r||e.projectStructureFileProcessed,readFromFile:r});case s.XL:var c=t.path,d=e.options,p=d.idea,m=d.user;return p.excluded.includes(c)||m.excluded.includes(c)?e:(0,l.Z)((0,l.Z)({},e),{},{options:(0,l.Z)((0,l.Z)({},e.options),{},{user:(0,l.Z)((0,l.Z)({},m),{},{excluded:[].concat((0,a.Z)(m.excluded),[c])})})});case s.iH:var f,h=t.paths,v=e.options,g=v.idea,b=v.user,_=new Set(h),y=(0,o.Z)(g.excluded);try{for(y.s();!(f=y.n()).done;){var C=f.value;_.has(C)&&_.delete(C)}}catch(E){y.e(E)}finally{y.f()}return(0,l.Z)((0,l.Z)({},e),{},{options:(0,l.Z)((0,l.Z)({},e.options),{},{user:(0,l.Z)((0,l.Z)({},b),{},{excluded:Array.from(_)})})});case s.dB:return(0,l.Z)((0,l.Z)({},e),{},{projectStructureFileFailed:!0});default:return e}}var p=function(e){return e.projectStructureFileProcessed||e.projectStructureFileFailed},m=function(e){return e.options},f=(0,c.P1)(m,(function(e){var t=e.user,n=e.idea;return[].concat((0,a.Z)(n.excluded),(0,a.Z)(t.excluded))})),h=(0,c.P1)([function(e){return e.excludedScopes},m],(function(e,t){for(var n=[],o=0,i=Object.values(t);o0&&void 0!==arguments[0]?arguments[0]:a,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case o.Zn:return(0,r.Z)((0,r.Z)({},e),{},{sanityProblemsNotificationClosed:t.closed});case o.Dk:return(0,r.Z)((0,r.Z)({},e),{},{profileChangedNotificationClosed:t.closed});default:return e}}var l=function(e){return e.notifications.sanityProblemsNotificationClosed},c=function(e){return e.notifications.profileChangedNotificationClosed}},69917:function(e,t,n){"use strict";n.d(t,{Cn:function(){return E},oB:function(){return j},rG:function(){return N},fC:function(){return S},C_:function(){return O},$t:function(){return P},SY:function(){return T},BL:function(){return x}});var r=n(649),o=n(50189),a=n(46167),i=n(40097),l=n(81839),c=n(3372),s=n(95572),u="exclude",d="include",p=function(e,t,n,r){var o=e.get(t);if(o)if((0,i.xw)(o)){var a=o.items.filter((function(e){if((0,i._N)(e)){var t=e.get(n);return!!t&&(!(null!==r&&void 0!==r&&r.excludedValue)||t!==r.excludedValue)&&(!(null!==r&&void 0!==r&&r.includedValue)||t===r.includedValue)}return!1}));if(a&&a.length>0)return a}else{if((0,i._N)(o))throw new Error("not implemented yet");if((0,i.jF)(o))throw new Error("not implemented yet");if((0,i.vG)(o))throw new Error("not implemented yet")}},m={version:s.iT,profile:{name:s.sV}};function f(e,t){if(!t)return!1;if(!t.has(e))return!1;var n=t.get(e);return(0,i.xw)(n)&&0===n.items.length}function h(e){return(0,i.xw)(e)&&e.flow&&e.items.length>0}var v=function(e,t,n,r){var o=!0;r&&function(e){if(e.has(d)||e.has(u)){if(h(e.get(d)))return!0;if(h(e.get(u)))return!0}return!1}(r)&&(o=!1);var a=r?(0,i.wL)((0,i.Pz)(r)):(0,i.wL)((0,i.Pz)(m)),l=e.paths.length>0,c=e.excludedChecks.length>0,s=e.includedChecks.length>0,v=function(e,t,n){var r=new Set(t),o=[];e.items.forEach((function(e,t){((0,i._N)(e)&&n&&r.has(e.get(n))||(0,i.jF)(e)&&r.has(e.value))&&o.push(t)})),o.length>0&&o.reverse().forEach((function(t){e.deleteIn([t])}))};if(l||c||s){if(s){a.has(d)||a.add(new i.sO(d,new i.wr));var g=a.get(d);n||v(g,e.includedChecks,"name");var b=new Set(t.includedChecks);e.includedChecks.forEach((function(e){b.has(e)||g.add({name:e})})),0!==g.items.length||f(d,r)?o&&g.flow&&g.items.length>0&&(g.flow=void 0):a.delete(d)}if(l||c){a.has(u)||a.add(new i.sO(u,new i.wr));var _=a.get(u);if(e.excludedChecks.length){n||v(_,e.excludedChecks,"name");var y=new Set(t.excludedChecks);e.excludedChecks.forEach((function(e){y.has(e)||_.add({name:e})}))}if(e.paths.length){var C=p(a,u,"name",{includedValue:"All"});if(C){if((0,i._N)(C[0])){var E=C[0].get("paths"),x=0===E.items.length;n||v(E,e.paths);var w=new Set(t.paths);e.paths.forEach((function(e){w.has(e)||E.add(e)})),0!==E.items.length||x?o&&E.flow&&E.items.length>0&&(E.flow=void 0):function(e){(0,i.Vn)(e,{Map:function(e,t,n){return t.has("name")&&"All"===t.get("name")?i.Vn.REMOVE:n.length>0?i.Vn.SKIP:void 0}})}(_)}}else _.add({name:"All",paths:e.paths})}0!==_.items.length||f(u,r)?o&&_.flow&&_.items.length>0&&(_.flow=void 0):a.delete(u)}}return a},g=[{sectionName:u,subsectionIncludeTest:/^\s*-\s[a-zA-Z]+:\s*All/i,type:"path",lineTest:/^\s*-\s(?![a-zA-Z]+:\s*)(.+)/i,profileContentLinesSelector:function(e){return e.paths}},{sectionName:u,subsectionIncludeTest:/^\s*-\s[a-zA-Z]+:\s*[a-zA-Z]+/i,subsectionExcludeTest:/^\s*-?\s?paths:/i,type:"check",lineTest:/^\s*-\s+name:\s*(.*)/i,profileContentLinesSelector:function(e){return e.excludedChecks}},{sectionName:d,subsectionIncludeTest:/^\s*-\s[a-zA-Z]+:\s*[a-zA-Z]+/i,type:"check",lineTest:/^\s*-\s+name:\s*(.*)/i,profileContentLinesSelector:function(e){return e.includedChecks}}],b=function(e,t,n){for(var o=[],a=/^([a-zA-z]+):/i,i=/^\s*-\s[a-zA-z]+:/i,l=void 0,c=!1,s=[],u=void 0,d=!1,p=new Set(g.map((function(e){return e.sectionName}))),m=function(){u&&o.push.apply(o,(0,r.Z)(function(e,t,n,r,o,a){return e.map((function(e){var i={content:e,type:a},l=t.exec(e);if(l){var c=l[1].replace(/(\s+#\s+.+)*$/,"");i.key=c;var s=r.includes(c),u=n.includes(c);o||(s&&u&&(i.deletion=!0),s&&!u&&(i.addition=!0)),!s&&u&&(i.actionsEnabled=!0)}return i}))}(s,u.lineTest,u.profileContentLinesSelector(n),u.profileContentLinesSelector(t),d,u.type))),s=[],u=void 0,d=!1,c=!1},f=function(t){var n,r=e[t],f=null===(n=a.exec(r))||void 0===n?void 0:n[1];if((!f||!p.has(f))&&!l)return o.push({content:r}),"continue";if(f&&(l&&m(),o.push({content:r}),l=f),l){var h=i.test(r);h&&(c&&m(),c=h)}if(l&&c){var v;if(u||(u=g.find((function(e){return e.sectionName===l&&e.subsectionIncludeTest.test(r)}))),u&&!d)d=(null===(v=u.subsectionExcludeTest)||void 0===v?void 0:v.test(r))||!1;s.push(r)}else c||f||o.push({content:r});t===e.length-1&&m()},h=0;h0&&void 0!==arguments[0]?arguments[0]:C,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case c.V:return(0,o.Z)((0,o.Z)({},e),{},{fileContent:t.fileContent});case c.J:return(0,o.Z)((0,o.Z)({},e),{},{changedContent:t.changedContent});case l.iH:return(0,o.Z)((0,o.Z)({},e),{},{changedContent:(0,o.Z)((0,o.Z)({},e.changedContent),{},{paths:t.paths})});case l.XL:return(0,o.Z)((0,o.Z)({},e),{},{changedContent:(0,o.Z)((0,o.Z)({},e.changedContent),{},{paths:[].concat((0,r.Z)(e.changedContent.paths),[t.path])})});default:return e}}var x=function(e){var t=e.profile.changedContent,n=t.includedChecks,r=t.excludedChecks,o=t.paths;return 0!==n.length||0!==r.length||0!==o.length},w=function(e){return e.profile.changedContent},k=(0,a.P1)((function(e){return e.profile.fileContent}),(function(e){return e?(0,i.wL)(e):void 0})),S=(0,a.P1)(k,(function(e){return function(e){if(e){var t=e.get(d);if(t&&t instanceof i.wr)try{return t.items.map((function(e){return e.get("name")}))}catch(n){console.error("Cant get included inspections from qodana.yaml",n),(0,y.Tb)(n)}}return[]}(e)})),j=(0,a.P1)(k,(function(e){return function(e){if(e)try{var t=p(e,u,"name",{excludedValue:"All"});if(t&&Array.isArray(t))return t.filter((function(e){return(0,i._N)(e)&&!e.has("paths")})).map((function(e){return e.get("name")}))}catch(n){console.error("Cant get excluded inspections from qodana.yaml",n),(0,y.Tb)(n)}return[]}(e)})),N=(0,a.P1)(k,(function(e){return function(e){if(e)try{var t=p(e,u,"name",{includedValue:"All"});if(t&&Array.isArray(t)&&(0,i._N)(t[0])){var n=t[0].get("paths");if((0,i.xw)(n))return n.items.map((function(e){return e.value}))}}catch(r){console.error("Cant get excluded paths from qodana.yaml",r),(0,y.Tb)(r)}return[]}(e)})),Z=(0,a.P1)([S,j,N],(function(e,t,n){return{includedChecks:e,excludedChecks:t,paths:n}})),P=(0,a.P1)([w,Z,k],(function(e,t,n){return b(_((0,i.Pz)(v(e,t,!0,n),{collectionStyle:"block"})),e,t)})),O=(0,a.P1)([w,Z,k],(function(e,t,n){return _((0,i.Pz)(v(e,t,!1,n))).map((function(e){return{content:e}}))})),T=((0,a.P1)(P,(function(e){return e.filter((function(e){return!e.deletion}))})),(0,a.P1)([w,N],(function(e,t){return function(e,t){return e.paths.length||t.length?b((0,i.Pz)({exclude:[{name:"All",paths:[].concat((0,r.Z)(t),(0,r.Z)(e.paths))}]}).split("\n"),e,{paths:t,excludedChecks:[],includedChecks:[]}):[]}(e,t)})))},24601:function(e,t,n){"use strict";n.d(t,{B:function(){return o},a:function(){return a}});var r="include";function o(e){r=e}function a(){return r}},47978:function(e,t,n){"use strict";n.r(t),n.d(t,{disableSentry:function(){return s},loadSentry:function(){return c}});var r=n(50189),o=n(17784),a=n(76808),i=n(44860),l=!1;function c(e){if(l){var t=a.Gd().getClient();t&&(t.getOptions().enabled=!0)}else l=!0,o.S((0,r.Z)({integrations:[new i.jK.gE],tracesSampleRate:1},e))}function s(){var e=a.Gd().getClient();e&&(e.getOptions().enabled=!1)}},41328:function(e,t,n){"use strict";n.d(t,{jD:function(){return r},lV:function(){return c},vf:function(){return o}});var r,o,a=n(50189),i=n(38798),l=n(3861);!function(e){e.click="click",e.keydown="affirmative keydown"}(r||(r={})),function(e){e.buildSelectButton="build-select-button",e.buildSelectToggle="build-select-toggle",e.checkListCheck="profile-settings-check-list-check",e.checkListCheckEnabledToggle="profile-settings-check-list-check-enabled-toggle",e.checkListTool="profile-settings-check-list-tool",e.checkListInspectionGroup="profile-settings-check-list-inspection-group",e.checkListControls="profile-settings-check-list-controls",e.errorMessageLink="error-message-link",e.excludedPathList="profile-settings-excluded-path-list",e.fixedDetailsBtn="fixed-details-button",e.footerLinkTermsOfUse="footer-link-terms-of-use",e.genericFilterListCategory="generic-filter-list-category",e.genericFilterListSeverity="generic-filter-list-severity",e.genericFilterListTool="generic-filter-list-tool",e.genericFilterListType="generic-filter-list-type",e.genericFilterListUnknown="generic-filter-list-unknown",e.genericFilterOpenCategory="generic-filter-open-category",e.genericFilterOpenSeverity="generic-filter-open-severity",e.genericFilterOpenTool="generic-filter-open-tool",e.genericFilterOpenType="generic-filter-open-type",e.genericFilterOpenUnknown="generic-filter-open-unknown",e.genericFilterResetCategory="generic-filter-reset-category",e.genericFilterResetSeverity="generic-filter-reset-severity",e.genericFilterResetTool="generic-filter-reset-tool",e.genericFilterResetType="generic-filter-reset-type",e.genericFilterResetUnknown="generic-filter-reset-unknown",e.genericFilterSearchCategory="generic-filter-search-category",e.genericFilterSearchSeverity="generic-filter-search-severity",e.genericFilterSearchTool="generic-filter-search-tool",e.genericFilterSearchType="generic-filter-search-type",e.genericFilterSearchUnknown="generic-filter-search-unknown",e.helpMenuTabAlpha="help-menu-tab-alpha",e.helpMenuTabBeta="help-menu-tab-beta",e.helpMenuTabStable="help-menu-tab-stable",e.helpMenuTrigger="help-menu-trigger",e.helpMenuHelp="help-menu-help",e.helpMenuYoutrack="help-menu-youtrack",e.helpMenuTermsOfUse="help-menu-terms-of-use",e.helpMenuOnboarding="help-menu-onboarding",e.helpMenuPromo="help-menu-promo",e.helpMenuTips="help-menu-tips",e.helpMenuFeatureState="help-menu-feature-state",e.hiddenProblemsModalCancel="filters-hidden-problems-modal-cancel",e.hiddenProblemsModalConfirm="filters-hidden-problems-modal-confirm",e.hiddenProblemsOpenSelectFilter="filters-hidden-problems-open-select-filter",e.hiddenProblemsSelectFilter="filters-hidden-problems-select-filter",e.hiddenProblemsSelectUnhideAll="filters-hidden-problems-select-unhide-all",e.hiddenProblemsToggle="filters-hidden-problems-toggle",e.listFiles="list-files",e.listProblems="list-problems",e.listGroupBySelectOpen="list-group-by-select-open",e.listOpenSortSelectFiles="list-open-sort-select-files",e.listOpenSortSelectProblems="list-open-sort-select-problems",e.listSortSelectFiles="list-sort-select-files",e.listSortSelectProblems="list-sort-select-problems",e.listTabFiles="list-tab-files",e.listTabProblems="list-tab-problems",e.listSearch="list-search",e.locationFiltersContent="location-filters-content",e.locationFiltersDeselectAll="location-filters-deselect-all",e.locationFiltersResetChangedCategories="location-filters-reset-changed-categories",e.locationFiltersScopeFilter="location-filters-scope-filter",e.locationFiltersSearchInput="location-filters-search-input",e.locationFiltersSelectAll="location-filters-select-all",e.locationFiltersSelectBtn="location-filters-select-button",e.locationFiltersSelectCloseBtn="location-filters-select-close-button",e.openProjectButton="open-project-button",e.openProjectInSelector="open-project-in-selector",e.orderControlsDefaultOrderBtn="order-controls-default-order-button",e.orderControlsCancelBtn="order-controls-cancel-button",e.orderControlsDoneBtn="order-controls-done-button",e.orderControlsReorderBtn="order-controls-reorder-button",e.profileSettingsDetailsBtn="profile-settings-details-button",e.profileDownloadBtn="profile-settings-profile-download-button",e.profileEditableCode="profile-settings-profile-editable-code",e.profileResetBtn="profile-settings-profile-reset-button",e.projectAudit="project-audit",e.drawerBackBtn="report-onboarding-drawer-back-btn",e.drawerCloseBtn="report-onboarding-drawer-close-btn",e.drawerListItemProjectSetup="report-onboarding-drawer-list-item-projectSetup",e.drawerListItemBaseline="report-onboarding-drawer-list-item-baseline",e.drawerListItemInspections="report-onboarding-drawer-list-item-inspections",e.drawerListItemHelp="report-onboarding-drawer-list-item-help",e.projectSetupBackBtnStep2="project-setup-step-inspections-back-btn",e.projectSetupBackBtnStep3="project-setup-step-files-folders-back-btn",e.projectSetupBackBtnStep4="project-setup-step-baseline-back-btn",e.projectSetupBackBtnStep5="project-setup-step-finish-back-btn",e.projectSetupNextBtnStep1="project-setup-step-welcome-summary-next-btn",e.projectSetupNextBtnStep2="project-setup-step-inspections-next-btn",e.projectSetupNextBtnStep3="project-setup-step-files-folders-next-btn",e.projectSetupNextBtnStep4="project-setup-step-baseline-next-btn",e.projectSetupSummaryFooterYouTrackLink="project-setup-step-welcome-summary-footer-youtrack-link",e.projectSetupInspectionsContainer="project-setup-step-inspections-container",e.projectSetupFilesFolders="project-setup-step-files-folders-content",e.projectSetupFilesFoldersScopeFilter="project-setup-step-files-folders-scope-filter",e.projectSetupFilesFoldersSearchInput="project-setup-step-files-folders-search-input",e.projectSetupFilesFoldersSelectAll="project-setup-step-files-folders-select-all",e.projectSetupFilesFoldersDeselectAll="project-setup-step-files-folders-deselect-all",e.projectSetupFilesFoldersResetChangedCategories="project-setup-step-files-folders-reset-changed-categories",e.projectSetupBaselineToggle="project-setup-step-tech-debt-toggle",e.projectSetupFinishDownloadQD="project-setup-step-finish-download-qodana-yaml",e.projectSetupFinishDownloadBaseline="project-setup-step-finish-download-baseline",e.projectSetupCompleteBtn="project-setup-step-finish-complete-btn",e.projectSetupFinishYouTrackLink="project-setup-step-finish-footer-youtrack-link",e.projectSetupFinishGithubDiscussionLink="project-setup-step-finish-footer-github-discussion-link",e.projectSetupSummaryFooterSlackLink="project-setup-step-welcome-summary-footer-slack-link",e.quickGuideYouTrackLink="quick-guide-youtrack-link",e.saveFiltersBtn="save-filters-button",e.saveFiltersCancel="save-filters-cancel",e.saveFiltersInput="save-filters-input",e.saveFiltersSave="save-filters-save",e.savedFiltersEditCancel="saved-filters-edit-cancel",e.savedFiltersEditDelete="saved-filters-edit-delete",e.savedFiltersEditInput="saved-filters-edit-input",e.savedFiltersEditSave="saved-filters-edit-save",e.savedFiltersResetBtn="saved-filters-reset-button",e.savedFiltersListEditBtn="saved-filters-list-edit-button",e.savedFiltersListItemBtn="saved-filters-list-item-button",e.savedFiltersTriggerBtn="saved-filters-trigger-button",e.summaryChecksBtn="summary-checks-button",e.tabProblems="problems-tab",e.tabBaseline="tech-debt-tab",e.tabChecks="checks-tab",e.tabProjectAudit="project-audit-tab",e.tagFilterAddTag="tag-filter-add-tag",e.tagFilterDeselectTagBtn="tag-filter-deselect-tag-button",e.tagFilterOpenAddTagSelect="tag-filter-open-add-tag-select",e.themeToggle="theme-toggle",e.tipSecondaryButton="tip-secondary-button",e.tipPrimaryButton="tip-primary-button",e.sunburst="visualised-filters-sunburst"}(o||(o={}));var c=(0,a.Z)((0,a.Z)((0,a.Z)({},o),i.v),l.v)},95146:function(e,t,n){"use strict";var r;n.d(t,{R:function(){return o},y:function(){return a}});var o=function(e){r=void 0===e?void 0:{entity:"project_id",value:e}},a=function(){var e=[];return r&&e.push(r),e}},89467:function(e,t,n){"use strict";n.d(t,{hn:function(){return b},iL:function(){return h},X6:function(){return m},Jn:function(){return v},bt:function(){return f},C9:function(){return g}});var r=n(67859),o=n(20950),a=n(32073),i=n(79455),l="fusra_session_id";function c(){var e=(0,a.e)(l);return e||(e=(0,o.Z)()),(0,i.d)(l,e,6e5),e}var s=n(84389),u=n(26186),d=n(41328),p=n(95146),m=function(e){try{(0,r.d)("event",{eventData:e,eventId:"open",groupId:"qd.pages.open",groupVersion:2,sessionId:c(),ids:(0,p.y)()})}catch(t){console.error("r1, error detected:",t.message)}},f=function(e){try{(0,r.d)("event",{eventData:e,eventId:"filter",groupId:"qd.pages.filter",groupVersion:1,sessionId:c(),ids:(0,p.y)()})}catch(t){console.error("r2, error detected:",t.message)}},h=function(e){try{(0,r.d)("event",{eventData:e,eventId:"onboardingAction",groupId:"qd.pages.onboarding",groupVersion:1,sessionId:c(),ids:(0,p.y)()})}catch(t){console.error("r3, error detected:",t.message)}},v=function(e){try{(0,r.d)("event",{eventData:e,eventId:"openModalAction",groupId:"qd.pages.openModal",groupVersion:1,sessionId:c(),ids:(0,p.y)()})}catch(t){console.error("r2, error detected:",t.message)}},g=function(e){try{(0,r.d)("event",{eventData:e,eventId:"selectTabAction",groupId:"qd.pages.selectTab",groupVersion:1,sessionId:c(),ids:(0,p.y)()})}catch(t){console.error("r2, error detected:",t.message)}},b=function(e){try{var t=e.targetAttribute;if(!Object.values(d.lV).includes(t))return(0,s.uT)("Click action validation failed",{level:u.z.Error,extra:{targetAttribute:t}}),void console.error("Validation failed");(0,r.d)("event",{eventData:e,eventId:"clickAction",groupId:"qd.pages.clicks",groupVersion:1,sessionId:c(),ids:(0,p.y)()})}catch(n){console.error("r3, error detected:",n.message)}}},33591:function(e,t,n){"use strict";var r,o,a,i,l,c,s,u,d,p,m,f,h,v;n.d(t,{JN:function(){return m},K4:function(){return f},SG:function(){return l},gK:function(){return i},iB:function(){return v},jD:function(){return p},nS:function(){return r},nf:function(){return u},nn:function(){return o},qA:function(){return a},rR:function(){return h},sB:function(){return d},yA:function(){return c},zb:function(){return s}}),function(e){e.PolicySettings="Policy Settings",e.ProfileSettings="Profile settings",e.ProjectAudit="Project Audit"}(r||(r={})),function(e){e.Alpha="Alpha",e.Beta="Beta",e.Stable="Stable"}(o||(o={})),function(e){e.TeamCity="TeamCity",e.GitHub="GitHub",e.Preview="preview",e.Standalone="standalone",e.Cloud="cloud"}(a||(a={})),function(e){e.alwaysOn="always on",e.ask="ask",e.alwaysOff="always off"}(i||(i={})),function(e){e.accepted="accepted",e.declined="declined"}(l||(l={})),function(e){e.files="files",e.problems="problems"}(c||(c={})),function(e){e.critical="Critical",e.high="High",e.moderate="Moderate",e.low="Low",e.info="Info",e.unknown="Unknown"}(s||(s={})),function(e){e.file="file",e.path="path",e.scope="scope"}(u||(u={})),function(e){e.fixed="Fixed problem",e.new="New problem",e.old="Old problem"}(d||(d={})),function(e){e.localComparison="localComparison",e.remoteComparison="remoteComparison",e.file="file"}(p||(p={})),function(e){e.severity="severity",e.reverseSeverity="reverseSeverity",e.alphabetically="alphabetically",e.reverseAlphabetically="reverseAlphabetically",e.count="count",e.reverseCount="reverseCount"}(m||(m={})),function(e){e.include="include excluded",e.onlyExcluded="only excluded",e.withoutExcluded="without excluded"}(f||(f={})),function(e){e.duplicate="Duplicates",e.file="file",e.global="no specific module",e.module="module",e.taint="Taint analysis",e.example="example"}(h||(h={})),function(e){e.absent="absent",e.new="new",e.unchanged="unchanged",e.updated="updated"}(v||(v={}))},85864:function(e,t,n){"use strict";n.d(t,{FZ:function(){return c},Sb:function(){return r},Yt:function(){return a},dB:function(){return i},oC:function(){return o},tF:function(){return l}});var r="SAVE_PATHS",o="REQUEST_DATA",a="RECEIVE_DATA",i="FAILURE_REQUEST",l="SAVE_BUILDS_ID",c="SAVE_COMPARE_WITH"},80759:function(e,t,n){"use strict";n.d(t,{CH:function(){return c},Gt:function(){return p},IX:function(){return u},R8:function(){return r},Uk:function(){return l},Xo:function(){return i},bL:function(){return o},gb:function(){return d},o4:function(){return a},xK:function(){return s}});var r=Symbol("tab"),o="APPLY_LOCATION_FILTERS",a="APPLY_TAG_FILTERS",i="APPLY_BASELINE",l="CHANGE_EXCLUDED_PROBLEMS_FLAG",c="CHANGE_SHOWING_NEW",s="CHANGE_BASELINE_FLAG",u="EXCLUDE_PROBLEM",d="PROCESSING_DATA",p="PROCESSING_DATA_WITH_FURTHER_INFO"},81839:function(e,t,n){"use strict";var r;n.d(t,{VI:function(){return a},XL:function(){return o},dB:function(){return l},iH:function(){return i},rx:function(){return c},se:function(){return r}}),function(e){e.default="Unmarked",e.sourcesRoot="Sources Root",e.testSourcesRoot="Test Sources Root",e.resourcesRoot="Resources Root",e.testResourcesRoot="Test Resources Root",e.excluded="Excluded",e.generateSourcesRoot="Generate Sources Root"}(r||(r={}));var o="ADD_EXCLUDED_PATH",a="SET_MARKERS",i="SET_EXCLUDED_PATHS",l="FAILURE_REQUEST_MARKERS",c="EXCLUDE_SCOPES"},71651:function(e,t,n){"use strict";n.d(t,{L:function(){return o},g:function(){return r}});var r="PROCESSING_META_INFORMATION",o="FAILURE_REQUEST_META_INFORMATION"},3372:function(e,t,n){"use strict";n.d(t,{J:function(){return o},V:function(){return r}});var r="SET_PROFILE_CONTENT",o="SET_CHANGED_PROFILE_CONTENT"},97382:function(e,t,n){"use strict";n.d(t,{D:function(){return a},Q:function(){return o}});var r=n(78625);function o(e){var t=e.split(r.qk);return t[t.length-1]}function a(e){for(var t=e.length;t>=0;t--)if(e[t]===r.qk)return e.slice(0,t);return""}},1270:function(e,t,n){"use strict";n.d(t,{n$:function(){return g},r7:function(){return v},fp:function(){return m},yW:function(){return h},m8:function(){return f},b:function(){return b}});var r=n(91976),o=n(22951),a=n(64649),i=n(90122);function l(e,t){var n="undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"===typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return c(e,t)}(e))||t&&e&&"number"===typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,i=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return i=e.done,e},e:function(e){l=!0,a=e},f:function(){try{i||null==n.return||n.return()}finally{if(l)throw a}}}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n .PolicySettings-module_buttonedLabel__wdRqj {\n\tcursor: pointer;\n\tfont-weight: 600;\n\tfont-size: 14px;\n\tline-height: 20px;\n\n\tbackground: transparent;\n\tborder: none;\n\tpadding: 0;\n\tfont-family: var(--qd-font-family);\n\tcolor: var(--qd-color-text-1);\n\n\toutline: none;\n}\n\n.PolicySettings-module_annotation__YXTtp {\n\tmargin-top: 2px;\n\tpadding-left: 22px;\n\n\tcolor: var(--qd-color-grey);\n}\n\n.PolicySettings-module_buttons__E-bZB {\n\tmargin-top: 20px;\n\tdisplay: flex;\n}\n\nbutton.PolicySettings-module_saveBtn__3ql0c.PolicySettings-module_saveBtn__3ql0c {\n\tmargin-right: 8px;\n}\n",{insertAt:"top"});var K=n(3861),G=l.memo((function(e){var t,n=e.accepted,r=e.disabled,c=void 0!==r&&r,u=e.onCloseAttempt,d=e.onSave,p=e.open,m=(0,l.useState)(!1),f=(0,o.Z)(m,2),h=f[0],v=f[1],g=(0,l.useState)(!1),b=(0,o.Z)(g,2),_=b[0],y=b[1],C=l.createRef(),E=(0,Z.X)(),G=(0,l.useCallback)((function(){u(),d(_)}),[u,d,_]),Q=(0,l.useCallback)((function(){y((function(e){return!e}))}),[]),J=p&&h;return(0,P.p)(null===(t=window.top)||void 0===t?void 0:t.document.body,J),(0,l.useEffect)((function(){p?v(!0):setTimeout((function(){E.current&&(y(null===n||n),v(!1))}),L.a)}),[n,p]),(0,O.o)(u,C),p||h?(0,a.jsxs)("div",{className:i(I,(0,x.Z)({},A,h&&p)),style:{transitionDuration:"".concat(L.a,"ms")},children:[(0,a.jsx)("div",{className:B}),(0,a.jsx)(k.ZP,{children:(0,a.jsx)("div",{ref:C,className:q,children:(0,a.jsxs)(S.ZP,{className:F,children:[(0,a.jsxs)("header",{className:M,children:[(0,a.jsx)(T.H1,{children:"Cookies settings"}),(0,a.jsx)(j.ZP,{className:R,"data-qd-clickable":K.v.policySettingsClose,icon:w,iconClassName:D,onClick:u})]}),(0,a.jsxs)("section",{children:[(0,a.jsxs)("div",{className:H,children:[(0,a.jsx)("span",{"data-qd-clickable":K.v.policySettingsRequiredCheckbox,children:(0,a.jsx)(N.Z,{checked:!0,disabled:!0,title:"Required cookies checkbox"})}),(0,a.jsx)("button",{className:z,"data-qd-clickable":K.v.policySettingsRequiredCheckboxLabel,tabIndex:-1,children:"Required cookies"}),(0,a.jsx)("div",{className:V,children:(0,a.jsx)(T.xv,{children:"These cookies are obligatory for the Qodana site to work properly."})})]}),(0,a.jsxs)("div",{className:H,children:[(0,a.jsxs)("span",{"data-qd-clickable":K.v.policySettingsOptionalCheckbox,children:[" ",(0,a.jsx)(N.Z,{checked:_,disabled:c,onChange:Q,title:"Optional cookies checkbox"})]}),(0,a.jsx)("button",{className:z,"data-qd-clickable":K.v.policySettingsOptionalCheckboxLabel,onClick:Q,disabled:c,tabIndex:-1,children:"Send statistics"}),(0,a.jsx)("div",{className:V,children:(0,a.jsx)(T.xv,{children:"These cookies allow us to analyze interface action usage to improve the user experience. We may use third-party services."})})]})]}),(0,a.jsx)("footer",{children:(0,a.jsxs)("div",{className:W,children:[(0,a.jsx)(s.z,{className:U,"data-qd-clickable":K.v.policySettingsApply,disabled:c||n===_,onClick:G,variant:"primary",children:"Apply preferences"}),(0,a.jsx)(s.z,{"data-qd-clickable":K.v.policySettingsCancel,onClick:u,children:"Cancel"})]})})]})})})]}):null})),Q=(n(9958),n(52924),n(8628)),J=n(57365),X=n(95178),Y=n(17534),$="Policy settings",ee=function(e){var t=e.disabled,n=e.onAccept,r=e.onSettingsPopupOpen,i=void 0===r?function(){}:r,c=e.revokeLink,s=(0,l.useContext)(X.B),u=(0,l.useState)(!1),d=(0,o.Z)(u,2),p=d[0],m=d[1],f=function(e){n(e?Y.g.all:Y.g.off)},h=(0,l.useCallback)((function(){m(!0),i()}),[i]),v=(0,l.useMemo)((function(){return{id:$,enabled:!0,label:"Policy settings",type:"normal",click:h,htmlProps:{"data-qd-clickable":"help-menu-policy-settings"},after:["Terms Of Use"]}}),[h]);return(0,Q.i)(v,J.U),(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(G,{accepted:s===Y.g.default?null:s===Y.g.all,disabled:t,onCloseAttempt:function(){m(!1)},onSave:f,open:p}),s===Y.g.default&&!t&&(0,a.jsx)(E,{revokeLink:c,onAccept:function(){f(!0)},onEdit:h})]})};n(41919),n(68259);(0,p.Z)(".UserAgreement-module_agreementTextContainer__x60QZ {\n\tflex: 1;\n\tmin-height: 0;\n\tmargin: 16px 0 20px;\n\tposition: relative;\n}\n\n.UserAgreement-module_popupContent__QU4GR.UserAgreement-module_popupContent__QU4GR {\n\theight: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n\toverflow: hidden;\n}\n\n.UserAgreement-module_textReadHint__2rx1- {\n\tcolor: var(--qd-color-text-2);\n}\n\n.UserAgreement-module_buttonsFooter__-rbk6 {\n\tmargin-bottom: 28px;\n}\n\n.UserAgreement-module_buttonsFooter__-rbk6.UserAgreement-module_buttonsFooter__-rbk6 > * {\n\tmargin-right: 8px;\n}\n",{insertAt:"top"})},41919:function(e,t,n){"use strict";n.d(t,{A:function(){return N}});var r=n(64649),o=n(11026),a=n(87920),i=n(68062),l=n(71894),c=n(22491),s=n(12423),u=n(53288),d=n(8021),p=n(80487),m=n(98409),f=n(88841),h=n(89758),v="Header-module_title__K4N5K",g="Header-module_titleText__LTVU5",b="Header-module_closeButton__PI8tt",_="Header-module_closeButtonIcon__oPUL2";(0,h.Z)(".Header-module_title__K4N5K {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\tline-height: 24px;\n}\n\n.Header-module_title__K4N5K.Header-module_title__K4N5K h2 {\n\tpadding: 0;\n}\n\n.Header-module_titleText__LTVU5 {\n\tcolor: var(--qd-color-text-1);\n}\n\n.Header-module_closeButton__PI8tt.Header-module_closeButton__PI8tt {\n\theight: 17px;\n\twidth: 17px;\n\tline-height: 17px;\n\tpadding: 0;\n}\n\n.Header-module_closeButtonIcon__oPUL2.Header-module_closeButtonIcon__oPUL2 {\n\tcolor: var(--qd-color-light-grey) !important;\n\ttransition: color 0.2s;\n}\n\n.Header-module_closeButton__PI8tt:hover .Header-module_closeButtonIcon__oPUL2 {\n\tcolor: var(--qd-color-grey) !important;\n\ttransition: color 0.2s;\n}\n",{insertAt:"top"});var y=function(e){var t=e.className,n=e.titleTextClassName,r=e.onClick,o=e["data-qd-test"];return(0,a.jsxs)("header",{className:l(v,t),children:[(0,a.jsx)(f.H1,{className:l(g,n),"data-qd-test":o&&"".concat(o,"__title"),children:e.children}),!!r&&(0,a.jsx)(p.ZP,{"data-qd-test":o&&"".concat(o,"__close-button"),iconClassName:_,className:b,onClick:r,icon:m})]})},C="ModalWrapper-module_container__hAbZ2",E="ModalWrapper-module_content__G-bvj",x="ModalWrapper-module_popup__me84p",w="ModalWrapper-module_popupContent__mMopV",k="ModalWrapper-module_opened__LKN9M",S="ModalWrapper-module_closed__v-KQo";(0,h.Z)(".ModalWrapper-module_bodyNoScroll__uxFCV {\n\toverflow: hidden;\n}\n\n.ModalWrapper-module_container__hAbZ2 {\n\tcolor: var(--qd-color-text-1);\n\tpadding: 0;\n\tbackground-color: var(--qd-color-blurred-bg);\n\tposition: fixed;\n\tz-index: var(--ring-overlay-z-index);\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tcursor: default;\n}\n\n.ModalWrapper-module_content__G-bvj {\n\tmargin: 0 auto;\n}\n\n.ModalWrapper-module_popup__me84p.ModalWrapper-module_popup__me84p {\n\tmargin-top: 80px;\n\tpadding: 24px 28px 28px;\n\n\tborder-radius: var(--qd-border-radius);\n\tborder: none;\n\tbackground-color: var(--qd-color-2-layer);\n\tcolor: var(--qd-color-text-1);\n}\n\n.ModalWrapper-module_popupContent__mMopV {\n\toverflow: auto;\n}\n\n.ModalWrapper-module_opened__LKN9M {\n\topacity: 0;\n\n\tanimation: ModalWrapper-module_show__bw1SK 0.2s 1;\n\tanimation-fill-mode: forwards;\n}\n\n.ModalWrapper-module_closed__v-KQo {\n\ttransition: 0.2s;\n\n\tanimation: ModalWrapper-module_close__8Ar-Y 0.2s 1;\n\tanimation-fill-mode: forwards;\n}\n\n.ModalWrapper-module_button__SVP-9 {\n\tposition: absolute;\n\ttop: 55px;\n\tright: 14%;\n}\n\n.ModalWrapper-module_count__U34f0 {\n\tcolor: var(--qd-color-grey);\n\topacity: 0.8;\n\tfont-style: normal;\n\tfont-weight: normal;\n\tfont-size: 13px;\n\tline-height: 18px;\n\n\tmargin-left: 6px;\n}\n\n@keyframes ModalWrapper-module_show__bw1SK {\n\t0% {\n\t\topacity: 0;\n\t}\n\t100% {\n\t\topacity: 1;\n\t}\n}\n\n@keyframes ModalWrapper-module_close__8Ar-Y {\n\t0% {\n\t\topacity: 1;\n\t}\n\t100% {\n\t\topacity: 0;\n\t}\n}\n",{insertAt:"top"});var j=function(e){e.stopPropagation()},N=function(e){var t,n,p=e.className,m=void 0===p?"":p,f=e.keyboard,h=void 0===f||f,v=e.maskClosable,g=void 0===v||v,b=e.onClose,_=e.opened,N=e.title,Z=void 0===N?null:N,P=e.titleClassName,O=e.titleTextClassName,T=e.popupContentClassName,L=e.width,I=void 0===L?670:L,A=e.height,B=void 0===A?500:A,q=(0,c.useState)(!0),F=(0,o.Z)(q,2),M=F[0],R=F[1],D=(0,c.useRef)(),H=(0,u.X)();(0,c.useEffect)((function(){return function(){D.current&&(clearTimeout(D.current),D.current=void 0)}}),[_]);var z=(0,c.useCallback)((function(){b&&!D.current&&(R(!1),D.current=setTimeout((function(){b(),H.current&&R(!0)}),s.a))}),[b]),V=(0,c.useCallback)((function(e){e.target.getAttribute("id")==="qd_modal_".concat(C)&&z()}),[z]);return(0,d.p)(document.body,_),(0,d.p)(document.body.parentElement||void 0,_),_?(0,a.jsx)("div",{id:"qd_modal_".concat(C),className:l(C,(t={},(0,r.Z)(t,k,M),(0,r.Z)(t,S,!M),t)),onClick:j,"aria-hidden":!0,children:(0,a.jsx)("div",{style:{width:I},className:E,children:(0,a.jsxs)(i.ZP,{className:l(x,(n={},(0,r.Z)(n,k,M),(0,r.Z)(n,S,!M),n),m),style:{width:I,height:B},"data-test":e["data-qd-e2e-selector"],onEscPress:h?z:void 0,onOutsideClick:g?V:void 0,children:[!!Z&&(0,a.jsx)(y,{"data-qd-test":e["data-qd-e2e-selector"],className:P,titleTextClassName:O,onClick:b&&z,children:Z}),(0,a.jsx)("div",{className:l(w,T),children:e.children})]})})}):null}},18917:function(e,t,n){"use strict";n.d(t,{R2:function(){return w}});var r,o=n(64649),a=n(87920),i=n(22491),l=n(71894);function c(){return c=Object.assign?Object.assign.bind():function(e){for(var t=1;t1&&(r="".concat(e.length," selected"));if(1===e.length){var o="".concat(e.join(", "));r=(0,_.G0)(o,n)}return r}(e,0,50)}),[Ae,Ee,je,ke]),Je=Qe||re,Xe=(0,m.useMemo)((function(){return je?(0,_.IL)(je):""}),[je]),Ye=(0,m.useMemo)((function(){return void 0!==ke?Ee.filter((function(e){return!e.disabled&&(Ae?ke.includes(e.key):ke===e.key)})).map((function(e){return e.label})):[]}),[Ee,ke,Ae]),$e=(0,m.useMemo)((function(){var e,t;if(void 0!==ke)return Ae&&1===ke.length?t=Ee.find((function(e){return e.key===ke[0]})):Ae||(t=Ee.find((function(e){return e.key===ke}))),null===(e=t)||void 0===e?void 0:e.image}),[Ee,ke,Ae]),et=(0,m.useCallback)((function(e){Me(e.target.value),Ue&&Ke(!1)}),[Ue]),tt=(0,m.useCallback)((function(){ze(!1),Me(""),me&&me()}),[me]),nt=(0,m.useCallback)((function(){He?tt():(ze(!0),_e&&_e())}),[He,_e,tt]),rt=(0,m.useCallback)((function(e){"Escape"===e.key&&tt()}),[tt]),ot=(0,m.useCallback)((function(e){var t=e.currentTarget.scrollHeight-e.currentTarget.scrollTop===e.currentTarget.clientHeight;t&&Ue?Ke(!1):t||Ue||Ke(!0)}),[Ue]),at=(0,m.useCallback)((function(e){var t=(0,g.p)(e.currentTarget,"LI","data-qd-key"),n="true"===e.currentTarget.getAttribute("data-qd-checked")||"true"===(0,g.p)(e.currentTarget,"SPAN","data-qd-checked");!n&&Ce&&Ce(t,je),n&&ge&&ge(t,je)}),[ge,Ce,je]),it=(0,m.useCallback)((function(e){at(e)}),[at]),lt=(0,m.useCallback)((function(e){["Enter"," ","Spacebar","Space"].includes(e.key)&&at(e)}),[at]),ct=(0,m.useCallback)((function(e){var t=(0,g.p)(e.currentTarget,"LI","data-qd-key");Ce&&(Ce(t,je),ze(!1))}),[Ce,je]),st=(0,m.useCallback)((function(e){e.preventDefault(),he&&he(je)}),[je,he]),ut=Ee.filter((function(e){return e.label.toLowerCase().includes(Fe.toLowerCase())}));return(0,a.jsxs)("div",{className:p(x,Le.container),onKeyDown:rt,children:[(0,a.jsxs)(u.Z,{delay:v.g,popupProps:{className:p(w,(0,o.Z)({},k,!Ge))},title:Ge&&Ye.length?Ye.join(", "):"",children:[(0,a.jsx)(l.ZP,ee(ee({className:p(j,Le.label,(t={},(0,o.Z)(t,Z,He),(0,o.Z)(t,Le.labelOpened,He),(0,o.Z)(t,O,ie),t)),disabled:ie,onClick:nt,text:!0},Ie.triggerBtn),{},{children:(0,a.jsxs)("span",{className:p(S,Le.labelContainer),children:[!!se&&(0,a.jsx)(se,{className:p(T,(0,o.Z)({},O,ie),Le.icon)}),Xe&&(0,a.jsxs)("span",{children:[Xe,je&&Je&&(0,a.jsx)(a.Fragment,{children:":\xa0"})]}),$e&&(0,a.jsx)("span",{className:p(U,(n={},(0,o.Z)(n,G,je),(0,o.Z)(n,K,ie),n),Le.icon),children:$e}),Je&&(0,a.jsx)("span",{className:p((0,o.Z)({},Le.placeholder,re&&!Qe)),children:Je}),(!ie||Te)&&!de&&(0,a.jsx)("div",{className:p(N,Le.chevronIcon),children:(0,a.jsx)(y.r,{className:p(j,P,Le.chevron)})})]})})),(0,a.jsx)(s.ZP,ee(ee({className:p(L,Le.popup),directions:oe,hidden:!He,onCloseAttempt:tt},Ie.search),{},{children:(0,a.jsxs)(f.ZP,{children:[we&&(0,a.jsxs)("div",{className:I,children:[(0,a.jsx)(c.ZP,{glyph:i,className:A}),(0,a.jsx)("input",ee({autoComplete:"off",placeholder:"string"===typeof we?we:"Search ".concat(je),onChange:et},Ie.search))]}),!ut.length&&(0,a.jsx)("p",{className:B,children:"No options found"}),(0,a.jsx)("ul",ee(ee({className:p(q,(0,o.Z)({},F,!!Pe),Le.list),onScroll:ot},Ie.list),{},{children:ut.map((function(e){var t=e.key,n=e.label,r=e.disabled,i=e.template,c=e.image,s=e.description,u=void 0!==ke&&ke.includes(t);return(0,a.jsx)("li",{className:M,"data-qd-key":t,children:Ae?(0,a.jsxs)("span",{"aria-checked":u,"aria-disabled":r,"aria-label":n,className:p(R,Le.itemContainer,(0,o.Z)({},O,r)),"data-qd-checked":u,onClick:r?te:it,onKeyDown:r?te:lt,role:"checkbox",tabIndex:0,title:n,children:[(0,a.jsx)(d.Z,{checked:u,containerClassName:z,disabled:r,onChange:te,tabIndex:-1,title:n}),c&&(0,a.jsx)("div",{className:U,children:c}),(0,a.jsx)("span",{className:i?W:D,children:i||n}),(0,b.Q$)(e,"description")&&(0,a.jsx)("span",{className:H,children:s})]}):(0,a.jsx)(l.ZP,{className:p(V,(0,o.Z)({},O,r)),disabled:r,onClick:ct,text:!0,title:n,children:(0,a.jsxs)("span",{className:p(R,Le.itemContainer,(0,o.Z)({},O,r)),children:[c&&(0,a.jsx)("div",{className:U,children:c}),(0,a.jsx)("span",{className:i?W:D,children:i||n}),s&&(0,a.jsx)("span",{className:H,children:s})]})})},t)}))})),(0,a.jsxs)("div",{className:Q,children:[(0,a.jsx)("div",{className:"".concat(J," ").concat(Ue?X:"")}),!!Pe&&(0,a.jsx)(h.z,ee(ee({variant:"clear",className:p(Y,Le.specialButton),onClick:function(){Pe&&(Pe.onClick(),ze(!1))},disabled:Pe.disabled,title:Pe.label},Ie.specialBtn),{},{children:Pe.label}))]})]})}))]}),void 0!==ke&&!!ke.length&&!ie&&!!he&&(0,a.jsx)("button",ee(ee({className:N,onClick:st},Ie.closeBtn),{},{children:(0,a.jsx)(C.r,{})}))]})}))},10829:function(e,t,n){"use strict";n.d(t,{O:function(){return s}});var r=n(87920),o=n(22491),a=n(89758),i="Skeleton-module_container__2YsId",l="Skeleton-module_background__Qk-rL",c="Skeleton-module_innerCircle__e7gHm";(0,a.Z)(".Skeleton-module_container__2YsId {\n\tposition: relative;\n\toverflow: hidden;\n\theight: 100%;\n\n\tborder-radius: 5px;\n\tz-index: 1;\n}\n\n.Skeleton-module_background__Qk-rL {\n\theight: 100%;\n\twidth: calc(100% + 200px);\n\tz-index: -1;\n\tbackground: repeating-linear-gradient(\n\t\t90deg,\n\t\tvar(--qd-color-skeleton-1) 0px,\n\t\tvar(--qd-color-skeleton-2) 100px,\n\t\tvar(--qd-color-skeleton-1) 200px\n\t);\n\tanimation: Skeleton-module_pulse__8RWFn 1.2s linear 0.2s infinite;\n}\n\n.Skeleton-module_innerCircle__e7gHm {\n\tz-index: 1;\n\tposition: absolute;\n\n\tborder-radius: 50%;\n\tbackground-color: var(--qd-color-main-bg);\n\ttransition: background-color 0.2s;\n}\n\n@keyframes Skeleton-module_pulse__8RWFn {\n\t0% {\n\t\ttransform: translateX(0);\n\t}\n\t100% {\n\t\ttransform: translateX(-200px);\n\t}\n}\n",{insertAt:"top"});var s=o.memo((function(e){var t=e.circle,n=void 0!==t&&t,a=e.className,s=void 0===a?"":a,u=e.height,d=e.innerRadius,p=e.outerRadius,m=e.width,f=n?{borderRadius:"50%",height:p?2*p:void 0,width:p?2*p:void 0}:{height:u,width:m},h=n?{height:p?2*p:void 0,width:p?2*p+200:void 0}:{height:u,width:m?m+200:void 0},v=(0,o.useMemo)((function(){if(n&&d&&p){var e=Math.min(d,p);return{height:2*e,left:p-e+"px",top:p-e+"px",width:2*e}}return{display:"none"}}),[n,d,p]);return(0,r.jsxs)("div",{className:"".concat(i," ").concat(s),style:f,children:[(0,r.jsx)("div",{className:l,style:h}),(0,r.jsx)("div",{className:c,style:v})]})}))},47478:function(e,t,n){"use strict";n.d(t,{r:function(){return h}});var r=n(64649),o=n(87920),a=n(22491),i=n(71894),l=n(89758),c="SourceTabs-module_container__l-6y6",s="SourceTabs-module_list__0zUa2",u="SourceTabs-module_option__9Z-6-",d="SourceTabs-module_button__7HRvW",p="SourceTabs-module_selected__1rlyR",m="SourceTabs-module_content__tww6E",f="SourceTabs-module_tail__tWpV7";(0,l.Z)(".SourceTabs-module_container__l-6y6 {\n\tdisplay: flex;\n}\n\n.SourceTabs-module_list__0zUa2 {\n\tpadding: 0;\n\tmargin: 0;\n\tlist-style: none;\n\tdisplay: flex;\n\n\toverflow: hidden;\n\toverflow-x: auto;\n}\n\n.SourceTabs-module_option__9Z-6- {\n\tbackground: var(--qd-color-sourcetabs-bg);\n\n\ttransition: background-color 0.2s;\n}\n\n.SourceTabs-module_list__0zUa2 > .SourceTabs-module_option__9Z-6-:first-child {\n\tborder-top-left-radius: var(--qd-border-radius);\n}\n.SourceTabs-module_list__0zUa2 > .SourceTabs-module_option__9Z-6-:last-child {\n\tborder-top-right-radius: var(--qd-border-radius);\n}\n\n.SourceTabs-module_button__7HRvW {\n\tmargin: 0;\n\tpadding: 0;\n\n\tcursor: pointer;\n\tborder: none;\n\tbox-shadow: 0 -1px 0 0 var(--qd-color-code-snippet-border) inset;\n\n\toutline: none;\n\tbackground: transparent;\n\n\tcolor: var(--qd-color-text-3);\n\ttransition: color 0.2s, box-shadow 0.2s, background-color 0.2s;\n}\n\n.SourceTabs-module_button__7HRvW.SourceTabs-module_selected__1rlyR {\n\tbackground-color: var(--qd-color-main-bg);\n\tcolor: var(--qd-color-text-1);\n\n\tbox-shadow: -1px 0 0 0 var(--qd-color-code-snippet-border) inset,\n\t\t1px 0px 0px 0px var(--qd-color-code-snippet-border) inset,\n\t\t0px 1px 0px 0px var(--qd-color-code-snippet-border) inset;\n\n\tborder-top-left-radius: var(--qd-border-radius);\n\tborder-top-right-radius: var(--qd-border-radius);\n}\n\n.SourceTabs-module_content__tww6E {\n\tdisplay: block;\n\toutline: none;\n\tpadding: 4px 12px;\n\tfont-size: 14px;\n\tline-height: 20px;\n\n\tborder-bottom: none;\n}\n\n.SourceTabs-module_tail__tWpV7 {\n\tflex-grow: 1;\n\tbox-shadow: 0 -1px 0 0 var(--qd-color-code-snippet-border) inset;\n\ttransition: box-shadow 0.2s;\n}\n",{insertAt:"top"});var h=a.memo((function(e){var t=e.options,n=e.selected,a=e.onSelectTab,l=e.className,h=function(e){var t;a(null!==(t=e.currentTarget.getAttribute("data-id"))&&void 0!==t?t:"")};return(0,o.jsxs)("div",{className:c,children:[(0,o.jsx)("ul",{className:i(s,l),children:t.map((function(e){return(0,o.jsx)("li",{className:i(u),title:e.tooltip,children:(0,o.jsx)("button",{"data-id":e.id,className:i(d,(0,r.Z)({},p,n===e.id)),onClick:h,children:(0,o.jsx)("span",{className:m,tabIndex:-1,children:e.title})},e.id)},e.id)}))}),(0,o.jsx)("div",{className:f})]})}))},81842:function(e,t,n){"use strict";function r(e,t){var n="undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"===typeof e)return o(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return o(e,t)}(e))||t&&e&&"number"===typeof e.length){n&&(e=n);var r=0,a=function(){};return{s:a,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,l=!0,c=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return l=e.done,e},e:function(e){c=!0,i=e},f:function(){try{l||null==n.return||n.return()}finally{if(c)throw i}}}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&void 0!==arguments[0]&&arguments[0],t=(0,a.useState)(e),n=(0,o.Z)(t,2),r=n[0],i=n[1],l=(0,a.useCallback)((function(){i(!0)}),[]),c=(0,a.useCallback)((function(){i(!1)}),[]);return[r,l,c]}},53288:function(e,t,n){"use strict";n.d(t,{X:function(){return o}});var r=n(22491);function o(){var e=(0,r.useRef)(!0);return(0,r.useEffect)((function(){return function(){e.current=!1}}),[]),e}},8021:function(e,t,n){"use strict";n.d(t,{p:function(){return i}});var r=n(11026),o=n(22491),a=n(20950),i=function(e,t){var n=(0,o.useState)((function(){return"disabledScroll_".concat((0,a.Z)())})),i=(0,r.Z)(n,1)[0];(0,o.useEffect)((function(){var e=document.createElement("style");return e.innerHTML="\n\t\t\t.".concat(i," {\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t"),document.head.appendChild(e),function(){document.head.removeChild(e)}}),[i]),(0,o.useEffect)((function(){if(e)return t&&e.classList.add(i),function(){return e.classList.remove(i)}}),[t,e,i])}},22571:function(e,t,n){"use strict";n.d(t,{o:function(){return o}});var r=n(22491),o=function(e,t){(0,r.useEffect)((function(){function n(n){var r=n.target,o=t.current;o&&r instanceof Node&&!o.contains(r)&&e(n)}return t.current&&document.addEventListener("mousedown",n),function(){return document.removeEventListener("mousedown",n)}}),[e,t])}},8879:function(e,t,n){"use strict";n.d(t,{zx:function(){return r.z},$_:function(){return k},h4:function(){return de},AB:function(){return ke.A},xP:function(){return we},Ni:function(){return j.N},ZD:function(){return Se.Z}});var r=n(34647),o=n(64649),a=n(87920),i=n(80487),l=n(71894),c=n(62994),s=n(22491),u=n(66711),d=n(89758),p="Footer-module_footer__A76NF",m="Footer-module_rightBlock__JX8Lt",f="Footer-module_buttons__-Wvpj",h="Footer-module_links__yNuwL",v="Footer-module_button__X4-5H";function g(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function b(e){for(var t=1;t span {\n\talign-self: center;\n\tmargin-right: 9px;\n}\n\n.Header-module_pageHeading__0oEsu {\n\tmargin: 0;\n\tpadding: 0;\n}\n",{insertAt:"top"});var B,q,F=n(11026),M=n(94074);function R(){return R=Object.assign?Object.assign.bind():function(e){for(var t=1;t0&&(0,a.jsx)("div",{className:O,children:p.map((function(e){return"submenu"!==e.type?(0,a.jsx)("button",{className:l(u.Z.text,T,L),onClick:e.click,disabled:!1===e.enabled,children:e.label},e.id||e.label):(0,a.jsx)(se,{submenuClassName:L,className:T,item:e},e.id||e.label)}))}),(0,a.jsxs)("div",{className:I,children:[!!v&&(0,a.jsx)($,{defaultChecked:g,htmlProps:i,onChange:v}),c]})]})}(0,d.Z)(".SubmenuPopup-module_submenuPopup__mfMlH.SubmenuPopup-module_submenuPopup__mfMlH {\n\tbackground: var(--qd-color-2-layer);\n\tpadding: 6px 0 14px 0;\n}\n\n.SubmenuPopup-module_submenuItem__nzSAA {\n\tbackground: none;\n\tborder: none;\n\tpadding: 6px 20px;\n\tline-height: 32px;\n\tcursor: pointer;\n\ttext-decoration: none;\n\tcolor: var(--qd-color-text-1);\n\tdisplay: block;\n}\n\n.SubmenuPopup-module_submenuItemList__jFWrq > li:hover {\n\tcursor: pointer;\n\tbackground: var(--qd-color-azure);\n}\n\n.SubmenuPopup-module_container__vu-ho {\n\tdisplay: inline-block;\n}\n\n.SubmenuPopup-module_submenuItemList__jFWrq,\n.SubmenuPopup-module_submenuItemList__jFWrq > li {\n\tmargin: 0;\n\tpadding: 0;\n\ttext-indent: 0;\n\tlist-style-type: none;\n}\n",{insertAt:"top"});n(93063),n(25913);(0,d.Z)("input.Input-module_qdInput__5bnTW {\n\tdisplay: block;\n\tline-height: 18px;\n\theight: 28px;\n\twidth: 100%;\n\n\tfont-family: var(--qd-font-family);\n\tcolor: var(--qd-color-text-1);\n\n\tbox-sizing: border-box;\n\tborder: 1px solid var(--qd-color-input-border);\n\tborder-radius: var(--qd-border-radius);\n\tpadding: 5px 7px;\n\n\tbackground-color: var(--qd-color-input-bg);\n\ttransition: color 0.2s, background-color 0.2s, border 0.2s;\n\toutline: none;\n}\n\n.bodyQodanaBlocks_dark input.Input-module_qdInput__5bnTW {\n\tborder-color: var(--qd-color-dt-light-grey40);\n}\n\ninput.Input-module_qdInput__5bnTW:hover {\n\tborder-color: var(--qd-color-input-border-hover);\n}\n\ninput.Input-module_qdInput__5bnTW:read-only {\n\tbackground-color: var(--qd-color-light-grey-5);\n}\n\n.bodyQodanaBlocks_dark input.Input-module_qdInput__5bnTW:read-only {\n\tcolor: var(--qd-color-grey);\n}\n\ninput.Input-module_qdInput__5bnTW:focus {\n\tborder: 1px solid var(--qd-color-input-border-active);\n}\n\ninput.Input-module_qdInput__5bnTW::placeholder {\n\tcolor: var(--qd-color-input-placeholder);\n\t-webkit-text-fill-color: initial;\n\ttransition: color 0.2s, -webkit-text-fill-color 0.2s, border 0.2s;\n}\n\ninput.Input-module_qdInput__5bnTW:disabled {\n\tborder: 1px solid var(--qd-color-input-disabled-border);\n\tbackground-color: var(--qd-color-input-disabled-bg);\n\tcolor: var(--qd-color-input-disabled-text);\n}\n\ninput.Input-module_qdInput__5bnTW:disabled::placeholder {\n\tcolor: var(--qd-color-input-disabled-text);\n}\n\ninput.Input-module_qdInput__5bnTW.Input-module_invalid__VyrnA {\n\tborder-color: var(--qd-color-input-error-border);\n}\n\n.Input-module_error__VLISa {\n\tcolor: var(--qd-color-input-error-border);\n\theight: 16px;\n\tfont-size: 10px;\n\tline-height: 16px;\n}\n",{insertAt:"top"});n(18917);var pe=n(53782),me=n(98409),fe=n(12511),he=n(48882),ve="SearchBoxInput-module_container__dkSq8",ge="SearchBoxInput-module_resetButton__SQHA4",be="SearchBoxInput-module_resetIcon__JNcrD",_e="SearchBoxInput-module_icon__lZMPI",ye="SearchBoxInput-module_disabled__qYqVd";(0,d.Z)(".SearchBoxInput-module_container__dkSq8 {\n\tposition: relative;\n\tbox-sizing: border-box;\n\tborder-radius: var(--qd-border-radius);\n\theight: 28px;\n\tpadding: 0 8px;\n\n\tdisplay: flex;\n\talign-items: center;\n\n\tborder: 1px solid var(--qd-color-input-border);\n\tbackground-color: var(--qd-color-main-bg);\n\ttransition: color 0.2s, background-color 0.2s, border 0.2s;\n}\n\n.SearchBoxInput-module_container__dkSq8:hover {\n\tborder-color: var(--qd-color-input-border-hover);\n}\n\n.SearchBoxInput-module_resetButton__SQHA4.SearchBoxInput-module_resetButton__SQHA4 {\n\tposition: absolute;\n\tright: -1px;\n}\n\n.SearchBoxInput-module_resetIcon__JNcrD.SearchBoxInput-module_resetIcon__JNcrD {\n\tdisplay: block;\n\tline-height: 0;\n}\n\n.SearchBoxInput-module_icon__lZMPI.SearchBoxInput-module_icon__lZMPI {\n\tposition: absolute;\n\tright: 8px;\n\ttop: 50%;\n\ttransform: translateY(-50%);\n\tcolor: var(--qd-color-input-search-icon);\n}\n\n.SearchBoxInput-module_container__dkSq8:focus-within {\n\tborder: 1px solid var(--qd-color-input-border-active);\n}\n\n.SearchBoxInput-module_container__dkSq8 input {\n\tfont-size: 13px;\n\twidth: calc(100% - 15px);\n\theight: 26px;\n\tborder-radius: var(--qd-border-radius);\n\n\tborder: none;\n\toutline: none;\n\n\tcolor: var(--qd-color-text-1);\n\tbackground-color: transparent;\n\ttransition: color 0.2s, border 0.2s;\n}\n\n/* Overwriting TeamCity styles */\n.SearchBoxInput-module_container__dkSq8.SearchBoxInput-module_container__dkSq8 input[disabled] {\n\tbackground-color: transparent;\n}\n\n.SearchBoxInput-module_container__dkSq8 input::placeholder {\n\tcolor: var(--qd-color-input-placeholder);\n\t-webkit-text-fill-color: initial;\n\topacity: 1;\n\ttransition: color 0.2s, -webkit-text-fill-color 0.2s, border 0.2s;\n}\n\n.SearchBoxInput-module_disabled__qYqVd.SearchBoxInput-module_container__dkSq8.SearchBoxInput-module_container__dkSq8 {\n\tborder: 1px solid var(--qd-color-input-disabled-border);\n\tbackground-color: var(--qd-color-input-disabled-bg);\n\ttransition: color 0.2s, -webkit-text-fill-color 0.2s, border 0.2s;\n}\n\n.SearchBoxInput-module_disabled__qYqVd.SearchBoxInput-module_container__dkSq8 input::placeholder {\n\tcolor: var(--ring-disabled-color);\n}\n",{insertAt:"top"});var Ce=["className","disabled","htmlProps","onBlur","onChange","onFocus","placeholder","showingIcon","value"];function Ee(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function xe(e){for(var t=1;t=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,i=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return i=e.done,e},e:function(e){l=!0,a=e},f:function(){try{i||null==n.return||n.return()}finally{if(l)throw a}}}}function v(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,l=!0,c=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return l=e.done,e},e:function(e){c=!0,i=e},f:function(){try{l||null==n.return||n.return()}finally{if(c)throw i}}}}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nc?o*=1:o=0,r++}return o}))},s=function(e,t){var n,r={},a=o(e);try{for(a.s();!(n=a.n()).done;){var i=n.value[t];r[i]=r[i]?r[i]+1:1}}catch(l){a.e(l)}finally{a.f()}return r}},84728:function(e,t,n){"use strict";n.d(t,{M:function(){return r}});function r(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:5,n=e.scrollHeight,r=e.scrollTop,o=e.clientHeight,a=n-r-o2&&e.length>t?"".concat(e.slice(0,t-3),"..."):e},i=function(e){return e.split("").reduce((function(e,t){var n=(e<<5)-e+t.charCodeAt(0);return n&n}),0)}},63486:function(e,t,n){"use strict";n.d(t,{Rr:function(){return s},_T:function(){return a},cp:function(){return d},e2:function(){return u},ru:function(){return c},t6:function(){return l}});var r=n(26114),o=n(13430),a=function(e){return e===o.Q.dark},i=function(e){return e===o.Q.auto},l=function(e,t){return i(e)&&t?t:e},c=function(){return"undefined"!==typeof window&&!!window.matchMedia},s=function(){return c()&&window.matchMedia("(prefers-color-scheme: dark)").matches?o.Q.dark:o.Q.light},u=function(e,t,n){if(i(e))n.current&&document.head.contains(n.current)&&(document.head.removeChild(n.current),n.current=null);else if(n.current){var r;null===(r=n.current)||void 0===r||r.setAttribute("content",t)}else{var o=document.querySelectorAll('meta[name="theme-color"]'),a=document.createElement("meta");a.name="theme-color",a.content=t,n.current=a,2===o.length&&o[0].before(a)}},d=function(e){var t=document.body;t.classList.add("bodyQodanaBlocks"),a(e)?(t.classList.add("bodyQodanaBlocks_dark"),(0,r._v)(r.ZP.DARK,t)):(t.classList.remove("bodyQodanaBlocks_dark"),(0,r._v)(r.ZP.LIGHT,t))}},58499:function(e,t,n){"use strict";n.d(t,{Gr:function(){return l},Hn:function(){return c},jX:function(){return i},tF:function(){return s}});var r=n(71178);function o(e,t){var n="undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"===typeof e)return a(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return a(e,t)}(e))||t&&e&&"number"===typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,l=!0,c=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return l=e.done,e},e:function(e){c=!0,i=e},f:function(){try{l||null==n.return||n.return()}finally{if(c)throw i}}}}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n2&&void 0!==arguments[2])||arguments[2];if(window.top){var o=new URL(window.top.location.href),a=n?(0,r.compressToEncodedURIComponent)(t):t;o.searchParams.set(e,a),window.top.history.replaceState("data","title",o.href)}},l=function(e){var t,n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],o=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=arguments.length>3?arguments[3]:void 0;if(!window.top)return null;try{var i=new URL(window.top.location.href);t=i.searchParams.get(e)||""}catch(c){return console.warn("Error getting URL parameter: '".concat(c.message,"'. No data retrieved")),null}var l=o?(0,r.decompressFromEncodedURIComponent)(t):t;try{return l&&l!==a?n?JSON.parse(l):l:null}catch(c){return console.warn("Error parsing URL parameter: '".concat(c.message,"'. No data retrieved")),null}},c=function(e){if(window.top){var t,n=new URL(window.top.location.href),r=new URLSearchParams(n.search),a=n.toString().split("?")[0],i=o(e);try{for(i.s();!(t=i.n()).done;){var l=t.value;r.delete(l)}}catch(s){i.e(s)}finally{i.f()}var c=r.toString()?"?".concat(r.toString()):"";window.top.history.replaceState("data","title","".concat(a).concat(c))}},s=function(e){if(window.top)return new URL(window.top.location.href).searchParams.get(e)}},32073:function(e,t,n){"use strict";function r(e){var t=document.cookie.match(new RegExp("(?:^|; )".concat(e.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,"\\$1"),"=([^;]*)")));return t?decodeURIComponent(t[1]):void 0}n.d(t,{e:function(){return r}})},79455:function(e,t,n){"use strict";function r(e,t,n){var r=new Date;r.setTime(r.getTime()+n);var o="expires=".concat(r.toUTCString());document.cookie="".concat(e,"=").concat(t,";").concat(o,";path=/")}n.d(t,{d:function(){return r}})}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var a=t[r]={id:r,loaded:!1,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.loaded=!0,a.exports}n.m=e,n.amdO={},function(){var e=[];n.O=function(t,r,o,a){if(!r){var i=1/0;for(u=0;u=a)&&Object.keys(n.O).every((function(e){return n.O[e](r[c])}))?r.splice(c--,1):(l=!1,a0&&e[u-1][2]>a;u--)e[u]=e[u-1];e[u]=[r,o,a]}}(),n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},function(){var e,t=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__};n.t=function(r,o){if(1&o&&(r=this(r)),8&o)return r;if("object"===typeof r&&r){if(4&o&&r.__esModule)return r;if(16&o&&"function"===typeof r.then)return r}var a=Object.create(null);n.r(a);var i={};e=e||[null,t({}),t([]),t(t)];for(var l=2&o&&r;"object"==typeof l&&!~e.indexOf(l);l=t(l))Object.getOwnPropertyNames(l).forEach((function(e){i[e]=function(){return r[e]}}));return i.default=function(){return r},n.d(a,i),a}}(),n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.e=function(){return Promise.resolve()},n.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}(),n.hmd=function(e){return(e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:function(){throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e},function(){var e={872:0};n.O.j=function(t){return 0===e[t]};var t=function(t,r){var o,a,i=r[0],l=r[1],c=r[2],s=0;if(i.some((function(t){return 0!==e[t]}))){for(o in l)n.o(l,o)&&(n.m[o]=l[o]);if(c)var u=c(n)}for(t&&t(r);s0&&void 0!==arguments[0]?arguments[0]:"";return Array.from(e).reduce((function(e,t){return Math.imul(31,e)+t.charCodeAt(0)|0}),0)}function _(){var e=sessionStorage.getItem("fusraOptions");try{var t=JSON.parse(e);return t.metadata?t:null}catch(n){return null}}function v(e){sessionStorage.setItem("fusraOptions",JSON.stringify(e))}function y(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=e.group&&e.group.id;return t.some((function(e){return e.id===n}))}function b(e,t,n){var i=e.recorder,a=e.product,o=e.deviceId,s=e.os,l=e.creationDate,c=e.bucket,u=e.internal,d=t.groupId,p=t.groupVersion,f=t.state,h=t.eventData,g=t.eventId,_=t.sessionId,v=t.ids,y=void 0===v?[]:v,b=Array.isArray(y)?y.reduce((function(e,t){return e[0][t.entity]=t.value,e[1][t.entity]=t.creationDate,e}),[{},{}]):[{},{}],E=(0,m.Z)(b,2),S=E[0],T=E[1];return{recorder:{id:i.code,version:i.version},product:a.code,ids:(0,r.Z)((0,r.Z)({},S),{},{device_id:o}),client_data:{os:s,creation_dates:(0,r.Z)((0,r.Z)({},T),{},{device_id:l})},internal:u,time:n,build:a.build,session:_,group:{id:d,version:p,state:f},bucket:c,event:{id:g,data:h,count:1}}}function E(e){return e.replace(/[-\/\\^$*+?.()[\]]/g,"\\$&")}var S=function(e,t,n){return e&&e[t]||n};function T(e){var t={};return Object.keys(e).forEach((function(n){t[n]=e[n].map((function(e){return"(".concat(E(e),")")})).join("|")})),t}function C(e,t,n){return e.split(p).map((function(e){return p.test(e)?e:E(e)})).join("").replace(d,(function(e,r){if(r.includes(":")){var i=r.split(":"),a=(0,h.Z)(i),o=a[0],s=a.slice(1).join(":");if("enum"===o)return"".concat(s.split("|").map((function(e){return"(".concat(e,")")})).join("|"));if("regexp"===o)return s}if(r.includes("util#"))return".*";if(r.includes("#")){var l=r.split("#"),c=(0,m.Z)(l,2),u=c[0],d=c[1];if(!["regexp","enum"].includes(u))throw new Error("undefined_rule");return function(e,t,n,r){if(n[t]&&e in n[t])return n[t][e];if(r[t]&&e in r[t])return r[t][e];throw new Error("undefined_rule")}(d,"".concat(u,"s"),t,n)}throw new Error("undefined_rule")}))}function x(e,t,n){try{var r=C(e,t,n);return new RegExp(r)}catch(i){return null}}function w(e,t,n,r){return e[t].map((function(e){return x(e,r,n)}))}function O(e,t){return e.map((function(e){var n=e.rules||{},i=function(e,t){var n={};return Object.keys(e).forEach((function(r){if(!["regexps","enums"].includes(r))if(Array.isArray(e[r]))n[r]=w(e,r,t,e);else if("object"===(0,f.Z)(e[r])&&null!==e[r]){var i={};Object.keys(e[r]).forEach((function(n){["regexps","enums"].includes(r)||(i[n]=w(e[r],n,t,e))})),n[r]=i}else n[r]=x(e[r],e,t)})),n}((0,r.Z)((0,r.Z)({},n),{},{enums:T(S(n,"enums",{})),regexps:S(n,"regexps",{})}),t);return(0,r.Z)((0,r.Z)({},e),{},{rules:i})}))}function N(e){var t,n=(t=e.rules,{enums:T(S(t,"enums",{})),regexps:S(t,"regexps",{})});return(0,r.Z)((0,r.Z)({},e),{},{rules:n,groups:O(e.groups,n)})}function R(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2?arguments[2]:void 0,i=e.group&&e.group.id,a=t.find((function(e){return e.id===i})),o=a.rules,s=o.event_id,l=void 0===s?[]:s,c=o.event_data,u=void 0===c?{}:c,d=e.event,p=d.id,f=d.data,h=void 0===f?{}:f,m=Object.assign({},e,{group:(0,r.Z)({},e.group),event:(0,r.Z)((0,r.Z)({},e.event),{},{data:(0,r.Z)({},h)})}),g=function(e){n&&console.log("fusra: ",e)};if(l.length?l.some((function(e){return e&&e.test(p)}))||(m.event.id="validation.unmatched_rule"):m.event.id="validation.undefined_rule",Object.keys(h).forEach((function(e){e in u?Array.isArray(u[e])?u[e].length?u[e].some((function(t){return t&&t.test(h[e])}))||(m.event.data[e]="validation.unmatched_rule"):m.event.data[e]="validation.undefined_rule":m.event.data[e]="validation.incorrect_rule":m.event.data[e]="validation.undefined_rule"})),n){var _=[];"validation.undefined_rule"===m.event.id?_.push("undefined rule for event_id"):"validation.unmatched_rule"===m.event.id&&_.push("unmatched rule for event_id: ".concat(p)),Object.keys(m.event.data).forEach((function(e){switch(m.event.data[e]){case"validation.undefined_rule":_.push("undefined rule for event data field: ".concat(e));break;case"validation.unmatched_rule":_.push("unmatched rule for event data field: ".concat(e," with value ").concat(h[e]));break;case"validation.incorrect_rule":_.push("incorrect rule for event data field: ".concat(e))}})),_.length&&(g(e),_.forEach((function(e){return g(e)})))}return m}function I(e){return A.apply(this,arguments)}function A(){return(A=(0,a.Z)((0,i.Z)().mark((function e(t){var n;return(0,i.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.configEndpoint,e.abrupt("return",fetch(n).then((function(e){return e.json()})).then((function(e){var t=e.versions[0].endpoints,n=e.versions[0].releaseFilters[0],r=t.send,i=t.metadata,a=t.dictionary;return{sendUrl:r,buckets:{from:n?n.from:0,to:n?n.to:u},metadataService:i,dictionaryService:a}})).catch((function(e){return console.error(e),null})));case 2:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function k(e){return D.apply(this,arguments)}function D(){return(D=(0,a.Z)((0,i.Z)().mark((function e(t){var n,r,a;return(0,i.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.serviceConfig,r=t.product,a="".concat(n.metadataService).concat(r.code,".json"),e.abrupt("return",fetch(a).then((function(e){return e.json()})).catch((function(){return{groups:[]}})));case 3:case"end":return e.stop()}}),e)})))).apply(this,arguments)}var M=0;function P(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];if(t.length){var n=e.serviceConfig,r={events:t};return fetch(n.sendUrl,{method:"POST",body:JSON.stringify(r),headers:{"Content-Type":"application/json"}}).then((function(){return[]})).catch((function(){return 3===(M+=1)?[]:t}))}return Promise.resolve(t)}var L,F={},B=o,U=[],G=[];function z(){return(z=(0,a.Z)((0,i.Z)().mark((function e(t){var n,a,d,p,f,h,m,y,b,E,S,T,C,x,w,O,R,A,D,M,P;return(0,i.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=t.recorderCode,a=t.recorderVersion,d=t.productCode,p=t.productBuild,f=t.internal,h=void 0===f?void 0:f,m=t.eventCountDelay,y=void 0===m?5e3:m,b=t.reportingFrequency,E=void 0===b?5e3:b,S=t.userInfo,C=(T=void 0===S?{}:S).deviceId,x=T.os,w=T.creationDate,B=s,C){e.next=6;break}return B=c,e.abrupt("return");case 6:if(!(O=_())){e.next=15;break}return R=N((F=O).metadata),F.preparedMetadata=R.groups||[],B=l,j(),Z(),e.abrupt("return");case 15:return A=h?"https://resources.jetbrains.com/storage/fus/config/v4/test/".concat(n,"/").concat(d,".json"):"https://resources.jetbrains.com/storage/fus/config/v4/".concat(n,"/").concat(d,".json"),D=Math.abs(g(C)),M=D%u,F=(0,r.Z)((0,r.Z)({},F),{},{configEndpoint:A,recorder:{code:n,version:a},product:{code:d,build:p},deviceId:C,os:x,creationDate:w,internal:h,bucket:M,eventCountDelay:y,reportingFrequency:E,logger:!1}),e.next=21,I(F);case 21:if(F.serviceConfig=e.sent,F.serviceConfig){e.next=25;break}return B=c,e.abrupt("return");case 25:return e.next=27,k(F);case 27:if(F.metadata=e.sent,!(F.serviceConfig.buckets.from>M||F.serviceConfig.buckets.to1&&void 0!==arguments[1]&&arguments[1];if(B!==l)return G.push({event:e,isBaseline:t}),!1;e.eventData||(e.eventData={});var n=e.groupId,r=e.eventId,i=e.state,a=F,o=a.eventFrequency,s=a.internal,c=Date.now(),u=U.length?U[U.length-1]:null;if(u&&u.time-c0&&void 0!==arguments[0]&&arguments[0];F.logger=e}(t);break;case"clear":F={},B=o,U=[],G=[],sessionStorage.removeItem("fusraOptions"),clearTimeout(L)}}},20581:function(e,t,n){"use strict";n.d(t,{$s:function(){return R},BH:function(){return E},L:function(){return p},LL:function(){return T},ZR:function(){return S},aH:function(){return b},eu:function(){return g},hl:function(){return m},m9:function(){return I},ru:function(){return h},vZ:function(){return w},zI:function(){return _}});var r=n(47169),i=n(67591),a=n(94337),o=n(37373),s=n(22951),l=n(91976),c=n(33940),u=function(e){for(var t=[],n=0,r=0;r>6|192,t[n++]=63&i|128):55296===(64512&i)&&r+1>18|240,t[n++]=i>>12&63|128,t[n++]=i>>6&63|128,t[n++]=63&i|128):(t[n++]=i>>12|224,t[n++]=i>>6&63|128,t[n++]=63&i|128)}return t},d={byteToCharMap_:null,charToByteMap_:null,byteToCharMapWebSafe_:null,charToByteMapWebSafe_:null,ENCODED_VALS_BASE:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",get ENCODED_VALS(){return this.ENCODED_VALS_BASE+"+/="},get ENCODED_VALS_WEBSAFE(){return this.ENCODED_VALS_BASE+"-_."},HAS_NATIVE_SUPPORT:"function"===typeof atob,encodeByteArray:function(e,t){if(!Array.isArray(e))throw Error("encodeByteArray takes an array as a parameter");this.init_();for(var n=t?this.byteToCharMapWebSafe_:this.byteToCharMap_,r=[],i=0;i>2,d=(3&a)<<4|s>>4,p=(15&s)<<2|c>>6,f=63&c;l||(f=64,o||(p=64)),r.push(n[u],n[d],n[p],n[f])}return r.join("")},encodeString:function(e,t){return this.HAS_NATIVE_SUPPORT&&!t?btoa(e):this.encodeByteArray(u(e),t)},decodeString:function(e,t){return this.HAS_NATIVE_SUPPORT&&!t?atob(e):function(e){for(var t=[],n=0,r=0;n191&&i<224){var a=e[n++];t[r++]=String.fromCharCode((31&i)<<6|63&a)}else if(i>239&&i<365){var o=((7&i)<<18|(63&e[n++])<<12|(63&e[n++])<<6|63&e[n++])-65536;t[r++]=String.fromCharCode(55296+(o>>10)),t[r++]=String.fromCharCode(56320+(1023&o))}else{var s=e[n++],l=e[n++];t[r++]=String.fromCharCode((15&i)<<12|(63&s)<<6|63&l)}}return t.join("")}(this.decodeStringToByteArray(e,t))},decodeStringToByteArray:function(e,t){this.init_();for(var n=t?this.charToByteMapWebSafe_:this.charToByteMap_,r=[],i=0;i>4;if(r.push(c),64!==s){var u=o<<4&240|s>>2;if(r.push(u),64!==l){var d=s<<6&192|l;r.push(d)}}}return r},init_:function(){if(!this.byteToCharMap_){this.byteToCharMap_={},this.charToByteMap_={},this.byteToCharMapWebSafe_={},this.charToByteMapWebSafe_={};for(var e=0;e=this.ENCODED_VALS_BASE.length&&(this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(e)]=e,this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(e)]=e)}}},p=function(e){return function(e){var t=u(e);return d.encodeByteArray(t,!0)}(e).replace(/\./g,"")},f=function(e){try{return d.decodeString(e,!0)}catch(t){console.error("base64Decode failed: ",t)}return null};function h(){var e="object"===("undefined"===typeof chrome?"undefined":(0,c.Z)(chrome))?chrome.runtime:"object"===("undefined"===typeof browser?"undefined":(0,c.Z)(browser))?browser.runtime:void 0;return"object"===(0,c.Z)(e)&&void 0!==e.id}function m(){try{return"object"===("undefined"===typeof indexedDB?"undefined":(0,c.Z)(indexedDB))}catch(e){return!1}}function g(){return new Promise((function(e,t){try{var n=!0,r="validate-browser-context-for-indexeddb-analytics-module",i=self.indexedDB.open(r);i.onsuccess=function(){i.result.close(),n||self.indexedDB.deleteDatabase(r),e(!0)},i.onupgradeneeded=function(){n=!1},i.onerror=function(){var e;t((null===(e=i.error)||void 0===e?void 0:e.message)||"")}}catch(a){t(a)}}))}function _(){return!("undefined"===typeof navigator||!navigator.cookieEnabled)}var v=function(){return function(){if("undefined"!==typeof self)return self;if("undefined"!==typeof window)return window;if("undefined"!==typeof n.g)return n.g;throw new Error("Unable to locate global object.")}().__FIREBASE_DEFAULTS__},y=function(){try{return v()||function(){if("undefined"!==typeof process){var e={NODE_ENV:"production",PUBLIC_URL:".",WDS_SOCKET_HOST:void 0,WDS_SOCKET_PATH:void 0,WDS_SOCKET_PORT:void 0,FAST_REFRESH:!0,REACT_APP_VERSION:"9291"}.__FIREBASE_DEFAULTS__;return e?JSON.parse(e):void 0}}()||function(){if("undefined"!==typeof document){var e;try{e=document.cookie.match(/__FIREBASE_DEFAULTS__=([^;]+)/)}catch(n){return}var t=e&&f(e[1]);return t&&JSON.parse(t)}}()}catch(e){return void console.info("Unable to get __FIREBASE_DEFAULTS__ due to: ".concat(e))}},b=function(){var e;return null===(e=y())||void 0===e?void 0:e.config},E=function(){function e(){var t=this;(0,s.Z)(this,e),this.reject=function(){},this.resolve=function(){},this.promise=new Promise((function(e,n){t.resolve=e,t.reject=n}))}return(0,l.Z)(e,[{key:"wrapCallback",value:function(e){var t=this;return function(n,r){n?t.reject(n):t.resolve(r),"function"===typeof e&&(t.promise.catch((function(){})),1===e.length?e(n):e(n,r))}}}]),e}();var S=function(e){(0,i.Z)(n,e);var t=(0,a.Z)(n);function n(e,i,a){var o;return(0,s.Z)(this,n),(o=t.call(this,i)).code=e,o.customData=a,o.name="FirebaseError",Object.setPrototypeOf((0,r.Z)(o),n.prototype),Error.captureStackTrace&&Error.captureStackTrace((0,r.Z)(o),T.prototype.create),o}return(0,l.Z)(n)}((0,o.Z)(Error)),T=function(){function e(t,n,r){(0,s.Z)(this,e),this.service=t,this.serviceName=n,this.errors=r}return(0,l.Z)(e,[{key:"create",value:function(e){var t=(arguments.length<=1?void 0:arguments[1])||{},n="".concat(this.service,"/").concat(e),r=this.errors[e],i=r?C(r,t):"Error",a="".concat(this.serviceName,": ").concat(i," (").concat(n,")."),o=new S(n,a,t);return o}}]),e}();function C(e,t){return e.replace(x,(function(e,n){var r=t[n];return null!=r?String(r):"<".concat(n,"?>")}))}var x=/\{\$([^}]+)}/g;function w(e,t){if(e===t)return!0;for(var n=Object.keys(e),r=Object.keys(t),i=0,a=n;i1&&void 0!==arguments[1]?arguments[1]:1e3,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:2,r=t*Math.pow(n,e),i=Math.round(.5*r*(Math.random()-.5)*2);return Math.min(N,r+i)}function I(e){return e&&e._delegate?e._delegate:e}},78699:function(e){"use strict";e.exports=''},54039:function(e){"use strict";e.exports=''},64431:function(e){"use strict";e.exports=''},58051:function(e){"use strict";e.exports=''},89947:function(e){"use strict";e.exports=''},91307:function(e){"use strict";e.exports=''},13280:function(e){"use strict";e.exports=''},88218:function(e){"use strict";e.exports=''},98409:function(e){"use strict";e.exports=''},80741:function(e){"use strict";e.exports=''},78808:function(e){"use strict";e.exports=''},92158:function(e){"use strict";e.exports=''},33192:function(e){"use strict";e.exports=''},43234:function(e){"use strict";e.exports=''},25369:function(e){"use strict";e.exports=''},46489:function(e){"use strict";e.exports=''},28524:function(e){"use strict";e.exports=''},28067:function(e){"use strict";e.exports=''},75432:function(e){"use strict";e.exports=''},87496:function(e){"use strict";e.exports=''},87555:function(e){"use strict";e.exports=''},32951:function(e){"use strict";e.exports=''},37464:function(e){"use strict";e.exports=''},54854:function(e){"use strict";e.exports=''},91931:function(e){"use strict";e.exports=''},88845:function(e){"use strict";e.exports=''},738:function(e){"use strict";e.exports=''},76807:function(e){"use strict";e.exports=''},27546:function(e){"use strict";e.exports=''},41622:function(e){"use strict";e.exports=''},91394:function(e){"use strict";e.exports=''},65970:function(e){"use strict";e.exports=''},90606:function(e){"use strict";e.exports=''},75095:function(e){"use strict";e.exports=''},25385:function(e){"use strict";e.exports=''},12511:function(e){"use strict";e.exports=''},43929:function(e){"use strict";e.exports=''},98831:function(e,t,n){"use strict";var r=n(22491);t.Z=function(e){return r.createElement("svg",Object.assign({},{fill:"none",viewBox:"0 0 70 70"},e),r.createElement("defs",null,r.createElement("linearGradient",{id:"appcode_svg__a",x1:30.221,x2:69.796,y1:63.074,y2:63.074,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:.194,stopColor:"#07C3F2"}),r.createElement("stop",{offset:.903,stopColor:"#087CFA"})),r.createElement("linearGradient",{id:"appcode_svg__b",x1:1.274,x2:38.41,y1:16.036,y2:16.036,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:.194,stopColor:"#07C3F2"}),r.createElement("stop",{offset:.903,stopColor:"#087CFA"})),r.createElement("linearGradient",{id:"appcode_svg__c",x1:45.876,x2:11.197,y1:72.222,y2:23.824,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:.091,stopColor:"#21D789"}),r.createElement("stop",{offset:.484,stopColor:"#07C3F2"}),r.createElement("stop",{offset:.903,stopColor:"#087CFA"}))),r.createElement("path",{fill:"#087CFA",d:"M53.5207 70L69.9999 26.3229L41.5625 19.6875L53.5207 70Z"}),r.createElement("path",{fill:"url(#appcode_svg__a)",d:"M69.7812 56.1458L53.5208 70L30.1874 64.0208L42 54.5L69.7812 56.1458Z"}),r.createElement("path",{fill:"url(#appcode_svg__b)",d:"M8.7501 32.0833L1.23969 10.7917L38.4272 0L29.5 21.5L8.7501 32.0833Z"}),r.createElement("path",{fill:"url(#appcode_svg__c)",d:"M61.1042 40.5417L50.6771 22.75L50.8229 22.6042L38.4271 0L0 41.4896V70L69.7812 56.1458L61.1042 40.5417Z"}),r.createElement("path",{fill:"#000",d:"M56 14H14V56H56V14Z"}),r.createElement("path",{fill:"#FFF",d:"M34.4167 48.65H18.6667V51.3333H34.4167V48.65Z"}),r.createElement("g",{fill:"#FFF"},r.createElement("path",{d:"M24.7993 19.13H27.9253L34.5941 34.76H31.0513L29.662 31.2867H23.0627L21.6733 34.76H18.2L24.7993 19.13ZM28.3421 28.2301L26.2581 23.1591L24.1741 28.2301H28.3421Z"}),r.createElement("path",{d:"M34.6 27.0667C34.6 22.6333 37.8666 18.9 42.7666 18.9C45.8 18.9 47.4333 19.8333 49.0666 21.2333L46.9666 23.8C45.8 22.6333 44.6333 21.9333 43 21.9333C40.4333 21.9333 38.3333 24.0333 38.3333 26.8333C38.3333 29.6333 40.2 31.7333 43 31.7333C44.8666 31.7333 45.8 31.0333 47.2 29.8667L49.3 32.2C47.4333 34.0667 45.5666 35 42.5333 35C37.8666 35 34.6 31.5 34.6 27.0667Z"})))}},53554:function(e,t,n){"use strict";var r=n(22491);t.Z=function(e){return r.createElement("svg",Object.assign({},{fill:"none",viewBox:"0 0 70 70"},e),r.createElement("defs",null,r.createElement("linearGradient",{id:"clion_svg__a",x1:25.161,x2:45.217,y1:13.686,y2:13.686,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:0,stopColor:"#FF318C"}),r.createElement("stop",{offset:.149,stopColor:"#FB348C"}),r.createElement("stop",{offset:.285,stopColor:"#F03C8C"}),r.createElement("stop",{offset:.416,stopColor:"#DE4A8C"}),r.createElement("stop",{offset:.543,stopColor:"#C45D8B"}),r.createElement("stop",{offset:.669,stopColor:"#A2778B"}),r.createElement("stop",{offset:.793,stopColor:"#79958A"}),r.createElement("stop",{offset:.913,stopColor:"#49B98A"}),r.createElement("stop",{offset:1,stopColor:"#21D789"})),r.createElement("linearGradient",{id:"clion_svg__b",x1:17.131,x2:6.836,y1:8.883,y2:77.965,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:.091,stopColor:"#21D789"}),r.createElement("stop",{offset:.903,stopColor:"#009AE5"})),r.createElement("linearGradient",{id:"clion_svg__c",x1:63.836,x2:-6.583,y1:6.492,y2:80.865,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:.091,stopColor:"#21D789"}),r.createElement("stop",{offset:.903,stopColor:"#009AE5"})),r.createElement("linearGradient",{id:"clion_svg__d",x1:42.791,x2:66.875,y1:51.126,y2:54.551,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:.091,stopColor:"#21D789"}),r.createElement("stop",{offset:.903,stopColor:"#009AE5"}))),r.createElement("path",{fill:"url(#clion_svg__a)",d:"M20 41.5L26.6875 0L42.5833 8.82292L20 41.5Z"}),r.createElement("path",{fill:"url(#clion_svg__b)",d:"M26.6875 39V0L6.48958 12.7604L0 51.4792L26.6875 39Z"}),r.createElement("path",{fill:"url(#clion_svg__c)",d:"M68.6146 21L59.5729 2.69789L42.5833 8.82289L25.1563 27.3437L0 51.4791L22.6771 67.9583L51.2604 42.2187L68.6146 21Z"}),r.createElement("path",{fill:"url(#clion_svg__d)",d:"M56.8748 40.1042L45.9373 35L26.7969 55.2344L41.4894 66.2083L58.9894 70L69.9998 45.0625L56.8748 40.1042Z"}),r.createElement("path",{fill:"#000",d:"M56 14H14V56H56V14Z"}),r.createElement("path",{fill:"#FFF",d:"M34.4167 48.65H18.6667V51.3333H34.4167V48.65Z"}),r.createElement("g",{fill:"#FFF"},r.createElement("path",{d:"M36 19.13H39.458V31.8553H46.3047V34.76H36V19.13Z"}),r.createElement("path",{d:"M18 27.0667C18 22.6333 21.2667 18.9 26.1667 18.9C29.2 18.9 30.8333 19.8333 32.4667 21.2333L30.3667 23.8C29.2 22.6333 28.0333 21.9333 26.4 21.9333C23.8333 21.9333 21.7333 24.0333 21.7333 26.8333C21.7333 29.6333 23.6 31.7333 26.4 31.7333C28.2667 31.7333 29.2 31.0333 30.6 29.8667L32.7 32.2C30.8333 34.0667 28.9667 35 25.9333 35C21.2667 35 18 31.5 18 27.0667Z"})))}},4274:function(e,t,n){"use strict";var r=n(22491);t.Z=function(e){return r.createElement("svg",Object.assign({},{fill:"none",viewBox:"0 0 70 70"},e),r.createElement("defs",null,r.createElement("linearGradient",{id:"goland_svg__a",x1:68.929,x2:41.588,y1:39.874,y2:63.009,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:0,stopColor:"#087CFA"}),r.createElement("stop",{offset:.023,stopColor:"#0D7BFA"}),r.createElement("stop",{offset:.373,stopColor:"#5566F9"}),r.createElement("stop",{offset:.663,stopColor:"#8A57F8"}),r.createElement("stop",{offset:.881,stopColor:"#AB4EF7"}),r.createElement("stop",{offset:1,stopColor:"#B74AF7"})),r.createElement("linearGradient",{id:"goland_svg__b",x1:24.089,x2:40.706,y1:21.699,y2:2.794,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:0,stopColor:"#087CFA"}),r.createElement("stop",{offset:.023,stopColor:"#0D7BFA"}),r.createElement("stop",{offset:.373,stopColor:"#5566F9"}),r.createElement("stop",{offset:.663,stopColor:"#8A57F8"}),r.createElement("stop",{offset:.881,stopColor:"#AB4EF7"}),r.createElement("stop",{offset:1,stopColor:"#B74AF7"})),r.createElement("linearGradient",{id:"goland_svg__c",x1:9.725,x2:60.22,y1:61.15,y2:28.702,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:0,stopColor:"#087CFA"}),r.createElement("stop",{offset:.102,stopColor:"#1598D3"}),r.createElement("stop",{offset:.225,stopColor:"#23B6AA"}),r.createElement("stop",{offset:.345,stopColor:"#2DCC8B"}),r.createElement("stop",{offset:.462,stopColor:"#35DD74"}),r.createElement("stop",{offset:.572,stopColor:"#39E767"}),r.createElement("stop",{offset:.67,stopColor:"#3BEA62"}))),r.createElement("path",{fill:"url(#goland_svg__a)",d:"M61.6875 27.0521L70 45.5729L55.7083 70L38.5 42L61.6875 27.0521Z"}),r.createElement("path",{fill:"#B74AF7",d:"M44.5 44L55.7083 70L33.6146 62.4167L44.5 44Z"}),r.createElement("path",{fill:"url(#goland_svg__b)",d:"M49.2917 19.7604L44.7708 0H19.6146L0 30.0417L5.6875 43.8229L0 56.4375L49.2917 37V19.7604Z"}),r.createElement("path",{fill:"url(#goland_svg__c)",d:"M70 14.875L40.6146 21.8021L0 56.4375L26.25 70L46.9583 48.6354L70 14.875Z"}),r.createElement("path",{fill:"#000",d:"M56 14H14V56H56V14Z"}),r.createElement("path",{fill:"#FFF",d:"M34.4166 48.6499H18.6666V51.3332H34.4166V48.6499Z"}),r.createElement("path",{fill:"#FFF",d:"M18 27.224C18 22.6811 21.5191 18.97 26.318 18.97C29.1973 18.97 30.8609 19.7378 32.5244 21.1454L30.349 23.8328C29.1333 22.809 28.0455 22.2332 26.19 22.2332C23.6306 22.2332 21.6471 24.4726 21.6471 27.16V27.224C21.6471 30.1033 23.6306 32.2147 26.4459 32.2147C27.7256 32.2147 28.8134 31.8948 29.7091 31.255V29.0155H26.19V26.0083H33.0363V32.8546C31.5007 34.2622 29.2612 35.35 26.382 35.35C21.3912 35.35 18 31.8948 18 27.224Z"}),r.createElement("path",{fill:"#FFF",d:"M34.572 27.224C34.572 22.6811 38.0911 18.97 43.0179 18.97C47.8807 18.97 51.3998 22.6171 51.3998 27.096V27.16C51.3998 31.6389 47.8807 35.35 42.9539 35.35C38.0911 35.35 34.572 31.7029 34.572 27.224ZM47.7527 27.224C47.7527 24.4726 45.7692 22.2332 42.9539 22.2332C40.1386 22.2332 38.2191 24.4726 38.2191 27.16V27.224C38.2191 29.9113 40.2026 32.2147 43.0179 32.2147C45.8332 32.1508 47.7527 29.9753 47.7527 27.224Z"}))}},94994:function(e,t,n){"use strict";var r=n(22491);t.Z=function(e){return r.createElement("svg",Object.assign({},{fill:"none",viewBox:"0 0 70 70"},e),r.createElement("defs",null,r.createElement("linearGradient",{id:"intellij-idea_svg__a",x1:5.174,x2:40.014,y1:39.889,y2:38.123,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:.091,stopColor:"#FC801D"}),r.createElement("stop",{offset:.231,stopColor:"#B07F61"}),r.createElement("stop",{offset:.409,stopColor:"#577DB3"}),r.createElement("stop",{offset:.533,stopColor:"#1E7CE6"}),r.createElement("stop",{offset:.593,stopColor:"#087CFA"})),r.createElement("linearGradient",{id:"intellij-idea_svg__b",x1:61.991,x2:50.158,y1:36.915,y2:1.557,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:0,stopColor:"#FE2857"}),r.createElement("stop",{offset:.078,stopColor:"#CB3979"}),r.createElement("stop",{offset:.16,stopColor:"#9E4997"}),r.createElement("stop",{offset:.247,stopColor:"#7557B2"}),r.createElement("stop",{offset:.339,stopColor:"#5362C8"}),r.createElement("stop",{offset:.436,stopColor:"#386CDA"}),r.createElement("stop",{offset:.541,stopColor:"#2373E8"}),r.createElement("stop",{offset:.658,stopColor:"#1478F2"}),r.createElement("stop",{offset:.794,stopColor:"#0B7BF8"}),r.createElement("stop",{offset:1,stopColor:"#087CFA"})),r.createElement("linearGradient",{id:"intellij-idea_svg__c",x1:10.066,x2:53.876,y1:16.495,y2:88.96,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:0,stopColor:"#FE2857"}),r.createElement("stop",{offset:.08,stopColor:"#FE295F"}),r.createElement("stop",{offset:.206,stopColor:"#FF2D76"}),r.createElement("stop",{offset:.303,stopColor:"#FF318C"}),r.createElement("stop",{offset:.385,stopColor:"#EA3896"}),r.createElement("stop",{offset:.553,stopColor:"#B248AE"}),r.createElement("stop",{offset:.792,stopColor:"#5A63D6"}),r.createElement("stop",{offset:1,stopColor:"#087CFA"}))),r.createElement("path",{fill:"url(#intellij-idea_svg__a)",d:"M11.2 49.4668L0.699951 41.3001L9 26L18.5 33.5L11.2 49.4668Z"}),r.createElement("path",{fill:"#087CFA",d:"M69.9999 18.6666L68.8333 59.2666L41.7666 70L27.0666 60.4333L41.7666 37.5L69.9999 18.6666Z"}),r.createElement("path",{fill:"url(#intellij-idea_svg__b)",d:"M70 18.6666L55.5 33L37 15L48.0666 1.16663L70 18.6666Z"}),r.createElement("path",{fill:"url(#intellij-idea_svg__c)",d:"M27.0667 60.4333L5.6 68.3667L10.0333 52.5L15.8667 33.1333L0 27.7667L10.0333 0L33.1333 2.8L54.5 31L55.5 33L27.0667 60.4333Z"}),r.createElement("path",{fill:"#000",d:"M56 14H14V56H56V14Z"}),r.createElement("g",{fill:"#FFF"},r.createElement("path",{d:"M27.1366 22.1433V19.25H19.2733V22.1433H21.4666V32.1067H19.2733V34.9767H27.1366V32.1067H24.92V22.1433H27.1366Z"}),r.createElement("path",{d:"M34.6967 35.21C33.46 35.21 32.4334 34.9767 31.6167 34.51C30.7767 34.0433 30.1 33.4833 29.5634 32.8533L31.7334 30.4267C32.1767 30.9167 32.6434 31.3133 33.0867 31.5933C33.5534 31.8733 34.0434 32.0133 34.6034 32.0133C35.2567 32.0133 35.77 31.8033 36.1434 31.3833C36.5167 30.9633 36.7034 30.31 36.7034 29.4V19.2733H40.25V29.5633C40.25 30.4967 40.1334 31.3133 39.8767 32.0133C39.62 32.7133 39.2467 33.2967 38.78 33.7633C38.29 34.2533 37.7067 34.6033 37.0067 34.86C36.3067 35.0933 35.5367 35.21 34.6967 35.21Z"}),r.createElement("path",{d:"M34.4166 48.6499H18.6666V51.3332H34.4166V48.6499Z"})))}},90966:function(e,t,n){"use strict";var r=n(22491);t.Z=function(e){return r.createElement("svg",Object.assign({},{fill:"none",viewBox:"0 0 70 70"},e),r.createElement("defs",null,r.createElement("linearGradient",{id:"phpstorm_svg__a",x1:17.617,x2:23.56,y1:21.533,y2:9.655,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:0,stopColor:"#AF1DF5"}),r.createElement("stop",{offset:.21,stopColor:"#BC20E4"}),r.createElement("stop",{offset:.63,stopColor:"#DD29B8"}),r.createElement("stop",{offset:1,stopColor:"#FF318C"})),r.createElement("linearGradient",{id:"phpstorm_svg__b",x1:2.258,x2:31.498,y1:48.027,y2:9.401,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:.02,stopColor:"#6B57FF"}),r.createElement("stop",{offset:.42,stopColor:"#B74AF7"}),r.createElement("stop",{offset:.75,stopColor:"#FF318C"})),r.createElement("linearGradient",{id:"phpstorm_svg__c",x1:53.04,x2:35.657,y1:47.667,y2:6.426,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:0,stopColor:"#293896"}),r.createElement("stop",{offset:.08,stopColor:"#3B3AA2"}),r.createElement("stop",{offset:.29,stopColor:"#6740C0"}),r.createElement("stop",{offset:.49,stopColor:"#8A44D8"}),r.createElement("stop",{offset:.68,stopColor:"#A347E9"}),r.createElement("stop",{offset:.86,stopColor:"#B249F3"}),r.createElement("stop",{offset:1,stopColor:"#B74AF7"})),r.createElement("linearGradient",{id:"phpstorm_svg__d",x1:50.044,x2:23.634,y1:61.283,y2:22.588,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:.02,stopColor:"#6B57FF"}),r.createElement("stop",{offset:.78,stopColor:"#B74AF7"}))),r.createElement("path",{fill:"url(#phpstorm_svg__a)",d:"M38.6458 12.3228L36.3125 5.24996L11.9583 0L0 13.4895L13.125 20.1978L34.9271 30.0415L38.6458 12.3228Z"}),r.createElement("path",{fill:"url(#phpstorm_svg__b)",d:"M26.9792 20.489L0 13.489L6.63542 53.5929L26.4687 53.52L26.9792 20.489Z"}),r.createElement("path",{fill:"url(#phpstorm_svg__c)",d:"M18.9582 25.6665L34.0519 12.2499L43.2394 4.15625L60.8853 7.43748L69.9999 30.0415L56.8749 43.0935L18.9582 25.6665Z"}),r.createElement("path",{fill:"url(#phpstorm_svg__d)",d:"M49.9479 17.0628L14.2188 16.917L19.25 56.073L20.1979 61.7604L43.8958 70L70 54.323L49.9479 17.0628Z"}),r.createElement("path",{fill:"#000",d:"M56 14H14V56H56V14Z"}),r.createElement("path",{fill:"#FFF",d:"M34.4166 48.6499H18.6666V51.3332H34.4166V48.6499Z"}),r.createElement("path",{fill:"#FFF",d:"M32.97 32.76L35 30.31C36.4 31.5 37.94 32.2 39.69 32.2C41.09 32.2 42 31.64 42 30.73V30.66C42 29.75 41.44 29.33 38.85 28.63C35.63 27.86 33.6 26.95 33.6 23.8V23.73C33.6 20.86 35.91 18.97 39.13 18.97C41.44 18.97 43.4 19.67 45.01 21L43.19 23.59C41.79 22.61 40.39 22.05 39.06 22.05C37.73 22.05 37.03 22.68 37.03 23.45V23.52C37.03 24.57 37.73 24.92 40.46 25.62C43.68 26.46 45.5 27.58 45.5 30.38V30.45C45.5 33.6 43.12 35.35 39.69 35.35C37.31 35.28 34.86 34.44 32.97 32.76Z"}),r.createElement("path",{fill:"#FFF",d:"M19.25 19.25H25.69C29.47 19.25 31.71 21.49 31.71 24.71V24.78C31.71 28.42 28.91 30.31 25.34 30.31H22.68V35H19.25V19.25ZM25.48 27.16C27.23 27.16 28.21 26.11 28.21 24.78V24.71C28.21 23.17 27.16 22.33 25.41 22.33H22.75V27.16H25.48Z"}))}},94240:function(e,t,n){"use strict";var r=n(22491);t.Z=function(e){return r.createElement("svg",Object.assign({},{fill:"none",viewBox:"0 0 70 70"},e),r.createElement("defs",null,r.createElement("linearGradient",{id:"pycharm_svg__a",x1:24.999,x2:66.656,y1:27.046,y2:27.046,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:0,stopColor:"#21D789"}),r.createElement("stop",{offset:1,stopColor:"#07C3F2"})),r.createElement("linearGradient",{id:"pycharm_svg__b",x1:-24.559,x2:61.22,y1:59.081,y2:-4.241,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:.011,stopColor:"#FCF84A"}),r.createElement("stop",{offset:.112,stopColor:"#A7EB62"}),r.createElement("stop",{offset:.206,stopColor:"#5FE077"}),r.createElement("stop",{offset:.273,stopColor:"#32DA84"}),r.createElement("stop",{offset:.306,stopColor:"#21D789"}),r.createElement("stop",{offset:.577,stopColor:"#21D789"}),r.createElement("stop",{offset:.597,stopColor:"#21D789"}),r.createElement("stop",{offset:.686,stopColor:"#20D68C"}),r.createElement("stop",{offset:.763,stopColor:"#1ED497"}),r.createElement("stop",{offset:.835,stopColor:"#19D1A9"}),r.createElement("stop",{offset:.904,stopColor:"#13CCC2"}),r.createElement("stop",{offset:.971,stopColor:"#0BC6E1"}),r.createElement("stop",{offset:1,stopColor:"#07C3F2"})),r.createElement("linearGradient",{id:"pycharm_svg__c",x1:9.33,x2:23.637,y1:77.654,y2:32.76,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:0,stopColor:"#21D789"}),r.createElement("stop",{offset:.16,stopColor:"#24D888"}),r.createElement("stop",{offset:.298,stopColor:"#2FD985"}),r.createElement("stop",{offset:.427,stopColor:"#41DC80"}),r.createElement("stop",{offset:.552,stopColor:"#5AE079"}),r.createElement("stop",{offset:.673,stopColor:"#7AE46F"}),r.createElement("stop",{offset:.791,stopColor:"#A1EA64"}),r.createElement("stop",{offset:.904,stopColor:"#CFF157"}),r.createElement("stop",{offset:1,stopColor:"#FCF84A"})),r.createElement("linearGradient",{id:"pycharm_svg__d",x1:28.275,x2:59.409,y1:38.623,y2:-3.236,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:0,stopColor:"#21D789"}),r.createElement("stop",{offset:.093,stopColor:"#23D986"}),r.createElement("stop",{offset:.172,stopColor:"#2ADE7B"}),r.createElement("stop",{offset:.247,stopColor:"#36E669"}),r.createElement("stop",{offset:.271,stopColor:"#3BEA62"}),r.createElement("stop",{offset:.35,stopColor:"#47EB61"}),r.createElement("stop",{offset:.494,stopColor:"#67ED5D"}),r.createElement("stop",{offset:.686,stopColor:"#9AF156"}),r.createElement("stop",{offset:.915,stopColor:"#E0F64D"}),r.createElement("stop",{offset:1,stopColor:"#FCF84A"})),r.createElement("linearGradient",{id:"pycharm_svg__e",x1:75.889,x2:13.158,y1:43.95,y2:43.369,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:.387,stopColor:"#FCF84A"}),r.createElement("stop",{offset:.463,stopColor:"#ECF74C"}),r.createElement("stop",{offset:.611,stopColor:"#C1F451"}),r.createElement("stop",{offset:.815,stopColor:"#7EEF5A"}),r.createElement("stop",{offset:1,stopColor:"#3BEA62"}))),r.createElement("path",{fill:"url(#pycharm_svg__a)",d:"M49 10.9668L69.5333 28.0001L62.0666 42.9335L49.9333 39.6668H39.2L49 10.9668Z"}),r.createElement("path",{fill:"url(#pycharm_svg__b)",d:"M28.4667 22.1667L24.5 42.9333L24.0333 50.1667L14.2333 54.6L0 56L4.2 10.7333L29.8667 0L45.7333 10.2667L28.4667 22.1667Z"}),r.createElement("path",{fill:"url(#pycharm_svg__c)",d:"M28.4667 22.1667L30.3333 62.5334L24.0333 70.0001L0 56.0001L19.6 26.6001L28.4667 22.1667Z"}),r.createElement("path",{fill:"url(#pycharm_svg__d)",d:"M54.8333 19.1333H30.5666L52.0333 0L54.8333 19.1333Z"}),r.createElement("path",{fill:"url(#pycharm_svg__e)",d:"M70 62.5333L48.5334 69.7667L20.3 61.8333L28.4667 22.1667L31.7334 19.1333L49 17.5L47.6 35L61.3667 29.6333L70 62.5333Z"}),r.createElement("path",{fill:"#000",d:"M56 14H14V56H56V14Z"}),r.createElement("path",{fill:"#FFF",d:"M19.1333 19.1333H25.55C29.2833 19.1333 31.6167 21.35 31.6167 24.6166C31.6167 28.2333 28.8167 30.1 25.2 30.1H22.5167V34.7666H19.0167V19.1333H19.1333ZM25.3167 27.1833C27.0667 27.1833 28 26.0166 28 24.7333C28 23.2166 26.95 22.4 25.2 22.4H22.5167V27.1833H25.3167Z"}),r.createElement("path",{fill:"#FFF",d:"M33.6 27.0666C33.6 22.6332 36.8667 18.8999 41.7667 18.8999C44.8 18.8999 46.4334 19.8332 48.0667 21.2332L45.9667 23.7999C44.8 22.6332 43.6334 21.9332 42 21.9332C39.4334 21.9332 37.3334 24.0332 37.3334 26.8332C37.3334 29.6332 39.2 31.7332 42 31.7332C43.8667 31.7332 44.8 31.0332 46.2 29.8666L48.3 32.1999C46.4334 34.0666 44.5667 34.9999 41.5334 34.9999C36.8667 34.9999 33.6 31.4999 33.6 27.0666Z"}),r.createElement("path",{fill:"#FFF",d:"M34.4167 48.6499H18.6667V51.3332H34.4167V48.6499Z"}))}},51337:function(e,t,n){"use strict";var r=n(22491);t.Z=function(e){return r.createElement("svg",Object.assign({},{fill:"none",viewBox:"0 0 70 70"},e),r.createElement("defs",null,r.createElement("linearGradient",{id:"rider_svg__a",x1:65.5,x2:11.542,y1:40.101,y2:9.137,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:0,stopColor:"#DD1265"}),r.createElement("stop",{offset:.483,stopColor:"#DD1265"}),r.createElement("stop",{offset:.942,stopColor:"#FDB60D"})),r.createElement("linearGradient",{id:"rider_svg__b",x1:33.416,x2:54.805,y1:6.112,y2:65.175,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:.139,stopColor:"#087CFA"}),r.createElement("stop",{offset:.476,stopColor:"#DD1265"}),r.createElement("stop",{offset:.958,stopColor:"#087CFA"})),r.createElement("linearGradient",{id:"rider_svg__c",x1:17.395,x2:33.194,y1:7.934,y2:64.079,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:.278,stopColor:"#DD1265"}),r.createElement("stop",{offset:.968,stopColor:"#FDB60D"}))),r.createElement("path",{fill:"url(#rider_svg__a)",d:"M70 27.2708L20.9272 0L53.8125 48.8542L60.5209 44.4063L70 27.2708Z"}),r.createElement("path",{fill:"url(#rider_svg__b)",d:"M50.4583 16.1146L44.2604 1.09375L30.6979 14.5104L36.2395 63.0729L49.4374 70L69.9999 57.9688L50.4583 16.1146Z"}),r.createElement("path",{fill:"url(#rider_svg__c)",d:"M20.927 0L0 14.0729L7.80207 62.1979L27.8541 69.8542L53.8124 48.8542L20.927 0Z"}),r.createElement("path",{fill:"#000",d:"M56 14H14V56H56V14Z"}),r.createElement("path",{fill:"#FFF",d:"M34.4166 48.6499H18.6666V51.3332H34.4166V48.6499Z"}),r.createElement("path",{fill:"#FFF",d:"M35.5 19.25H41.6833C46.7 19.25 50.0833 22.6042 50.0833 26.9993C50.0833 31.3945 46.7 34.8643 41.6833 34.8643L35.5 34.98V19.25ZM39 22.3729V31.8571H41.6833C44.4833 31.8571 46.4667 30.0065 46.4667 27.2307C46.4667 24.4548 44.6 22.4885 41.6833 22.4885L39 22.3729Z"}),r.createElement("path",{fill:"#FFF",d:"M19.3399 19.25H26.5408C28.5682 19.25 30.0363 19.8093 31.1549 20.858C32.0638 21.7668 32.4832 22.9553 32.4832 24.4234V24.4933C32.4832 25.7517 32.2036 26.8004 31.5744 27.6393C30.9452 28.4084 30.1062 29.0376 29.1275 29.3871L32.9726 34.98H28.9178L25.6319 30.1561H22.7656V34.98H19.27V19.25H19.3399ZM26.331 26.8703C27.17 26.8703 27.8691 26.6606 28.2886 26.2411C28.7779 25.8216 28.9877 25.2624 28.9877 24.6332V24.5632C28.9877 23.7942 28.7779 23.2349 28.2886 22.8854C27.7992 22.5358 27.17 22.3261 26.2611 22.3261H22.8355V26.8703H26.331Z"}))}},98090:function(e,t,n){"use strict";var r=n(22491);t.Z=function(e){return r.createElement("svg",Object.assign({},{fill:"none",viewBox:"0 0 70 70"},e),r.createElement("defs",null,r.createElement("linearGradient",{id:"rubymine_svg__a",x1:44.877,x2:36.032,y1:40.487,y2:17.268,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:0,stopColor:"#FE2857"}),r.createElement("stop",{offset:.056,stopColor:"#FE3052"}),r.createElement("stop",{offset:.325,stopColor:"#FD533B"}),r.createElement("stop",{offset:.58,stopColor:"#FC6C2A"}),r.createElement("stop",{offset:.811,stopColor:"#FC7B20"}),r.createElement("stop",{offset:1,stopColor:"#FC801D"})),r.createElement("linearGradient",{id:"rubymine_svg__b",x1:28.02,x2:41.687,y1:7.252,y2:19.779,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:0,stopColor:"#6B57FF"}),r.createElement("stop",{offset:1,stopColor:"#FE2857"})),r.createElement("linearGradient",{id:"rubymine_svg__c",x1:.306,x2:45.3,y1:11.212,y2:68.408,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:.001,stopColor:"#6B57FF"}),r.createElement("stop",{offset:.297,stopColor:"#FE2857"}),r.createElement("stop",{offset:.629,stopColor:"#FE2857"}),r.createElement("stop",{offset:.641,stopColor:"#FE3052"}),r.createElement("stop",{offset:.701,stopColor:"#FD533B"}),r.createElement("stop",{offset:.757,stopColor:"#FC6C2A"}),r.createElement("stop",{offset:.808,stopColor:"#FC7B20"}),r.createElement("stop",{offset:.85,stopColor:"#FC801D"}))),r.createElement("path",{fill:"url(#rubymine_svg__a)",d:"M58.1875 0L38.2083 7.14583L22.3854 0L17.2084 13.125H13.8542V51.7708L62.4166 52.2083L70 13.7083L58.1875 0Z"}),r.createElement("path",{fill:"url(#rubymine_svg__b)",d:"M57.6042 25.1563L25.6667 6.125L57.6042 43.6771V25.1563Z"}),r.createElement("path",{fill:"url(#rubymine_svg__c)",d:"M29.1666 68.1771L55.2708 64.6771L51.2604 56.875L48.8541 51.7709L51.2604 47.5782L55.2708 39.3751L25.5937 6.125L0 12.3958V49.1458L14.7292 70L29.0208 68.1771H29.0937H29.1666Z"}),r.createElement("path",{fill:"#000",d:"M56 14H14V56H56V14Z"}),r.createElement("path",{fill:"#FFF",d:"M34.4166 48.6499H18.6666V51.3332H34.4166V48.6499Z"}),r.createElement("path",{fill:"#FFF",d:"M34.8601 19.25H38.6353L42.7601 25.8916L46.8848 19.25H50.66V34.98H47.1645V24.7031L42.7601 31.4145H42.6902L38.2857 24.773V34.98H34.8601V19.25Z"}),r.createElement("path",{fill:"#FFF",d:"M19.3399 19.25H26.5408C28.5682 19.25 30.0363 19.8093 31.1549 20.858C32.0638 21.7668 32.4832 22.9553 32.4832 24.4234V24.4933C32.4832 25.7517 32.2036 26.8004 31.5744 27.6393C30.9452 28.4084 30.1062 29.0376 29.1275 29.3871L32.9726 34.98H28.9178L25.6319 30.1561H22.7656V34.98H19.27V19.25H19.3399ZM26.331 26.8703C27.17 26.8703 27.8691 26.6606 28.2886 26.2411C28.7779 25.8216 28.9877 25.2624 28.9877 24.6332V24.5632C28.9877 23.7942 28.7779 23.2349 28.2886 22.8854C27.7992 22.5358 27.17 22.3261 26.2611 22.3261H22.8355V26.8703H26.331Z"}))}},34984:function(e,t,n){"use strict";var r=n(22491);t.Z=function(e){return r.createElement("svg",Object.assign({},{fill:"none",viewBox:"0 0 70 70"},e),r.createElement("defs",null,r.createElement("linearGradient",{id:"webstorm_svg__a",x1:25.068,x2:43.183,y1:1.46,y2:66.675,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:.285,stopColor:"#07C3F2"}),r.createElement("stop",{offset:.941,stopColor:"#087CFA"})),r.createElement("linearGradient",{id:"webstorm_svg__b",x1:30.72,x2:61.365,y1:9.734,y2:54.671,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:.14,stopColor:"#FCF84A"}),r.createElement("stop",{offset:.366,stopColor:"#07C3F2"})),r.createElement("linearGradient",{id:"webstorm_svg__c",x1:61.082,x2:65.106,y1:15.29,y2:29.544,gradientUnits:"userSpaceOnUse"},r.createElement("stop",{offset:.285,stopColor:"#07C3F2"}),r.createElement("stop",{offset:.941,stopColor:"#087CFA"}))),r.createElement("path",{fill:"url(#webstorm_svg__a)",d:"M9.40625 63.2918L0 7.36466L17.4271 0.072998L28.5833 6.70841L38.7917 1.23966L60.0833 9.40633L48.125 70.0001L9.40625 63.2918Z"}),r.createElement("path",{fill:"url(#webstorm_svg__b)",d:"M69.9999 23.6979L60.9582 1.38542L44.552 0L19.2499 24.2813L26.104 55.6354L38.7915 64.5313L69.9999 46.0104L62.3436 31.7188L69.9999 23.6979Z"}),r.createElement("path",{fill:"url(#webstorm_svg__c)",d:"M55.9999 20.3438L62.3436 31.7188L69.9999 23.6979L64.3853 9.84375L55.9999 20.3438Z"}),r.createElement("path",{fill:"#000",d:"M56 14H14V56H56V14Z"}),r.createElement("path",{fill:"#FFF",d:"M34.4166 48.6499H18.6666V51.3332H34.4166V48.6499Z"}),r.createElement("path",{fill:"#FFF",d:"M34.16 19.25L31.78 28.42L29.12 19.25H26.46L23.8 28.42L21.42 19.25H17.78L22.26 35H25.2L27.79 25.9L30.31 35H33.32L37.8 19.25H34.16Z"}),r.createElement("path",{fill:"#FFF",d:"M38.5 32.76L40.53 30.31C41.93 31.5 43.47 32.2 45.22 32.2C46.62 32.2 47.53 31.64 47.53 30.73V30.66C47.53 29.75 46.97 29.33 44.38 28.63C41.23 27.79 39.13 26.95 39.13 23.8V23.73C39.13 20.86 41.44 18.97 44.66 18.97C46.97 18.97 48.93 19.67 50.54 21L48.72 23.59C47.32 22.61 45.92 22.05 44.59 22.05C43.26 22.05 42.56 22.68 42.56 23.45V23.52C42.56 24.57 43.26 24.92 45.99 25.62C49.21 26.46 51.03 27.58 51.03 30.38V30.45C51.03 33.6 48.65 35.35 45.22 35.35C42.77 35.28 40.39 34.44 38.5 32.76Z"}))}},79636:function(e,t,n){"use strict";n.d(t,{_:function(){return i},a:function(){return a}});var r=n(33940);function i(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==(0,r.Z)(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t||"default");if("object"!==(0,r.Z)(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===(0,r.Z)(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t=n})),g=m.length>0?Math.min.apply(Math,(0,r.Z)(m)):Math.max.apply(Math,(0,r.Z)(d)),_=u[g],v=o?"50%":_.radius,y=(0,a.useMemo)((function(){return(0,l.Z)("gradient-")}),[]);return a.createElement("svg",{viewBox:"0 0 ".concat(g," ").concat(g),xmlns:"http://www.w3.org/2000/svg"},a.createElement("defs",null,a.createElement("linearGradient",{id:y,x1:"0",y1:"0",x2:"0",y2:"1"},a.createElement("stop",{stopColor:f,offset:"0"}),a.createElement("stop",{stopColor:h,offset:"1"}))),a.createElement("g",null,a.createElement("rect",{fill:"url(#".concat(y,")"),x:"0",y:"0",width:g,height:g,rx:v,ry:v}),a.createElement("text",{x:_.text.x,y:_.text.y,fontFamily:"Arial, Helvetica, sans-serif",fontSize:_.fontSize,letterSpacing:_.letterSpacing,fill:"#FFFFFF",textAnchor:_.textAnchor},a.createElement("tspan",null,function(e){var t=e.split(/[\s._]+/).filter(Boolean).map((function(e){return Array.from(e)}));return t.length>=2?t[0][0].toUpperCase()+t[1][0].toUpperCase():1===t.length?t[0].length>=2?t[0].slice(0,2).join("").toUpperCase():"".concat(t[0][0].toUpperCase(),"X"):"XX"}(t)),_.underscore&&a.createElement("tspan",{x:_.underscore.x,y:_.underscore.y},"_"))))}p.propTypes={username:s().string.isRequired,size:s().number.isRequired,round:s().bool}},44379:function(e,t,n){"use strict";n.d(t,{Z:function(){return S}});var r=n(64649),i=n(53782),a=n(22951),o=n(91976),s=n(67591),l=n(94337),c=n(79636),u=n(22491),d=n(50889),p=n.n(d),f=n(71894),h=n.n(f),m=n(75838),g="badge_rui_4b7d",_="gray_rui_4b7d",v="valid_rui_4b7d",y="invalid_rui_4b7d",b="disabled_rui_4b7d",E=["gray","valid","invalid","disabled","className","children","data-test"],S=function(e){(0,s.Z)(n,e);var t=(0,l.Z)(n);function n(){return(0,a.Z)(this,n),t.apply(this,arguments)}return(0,o.Z)(n,[{key:"render",value:function(){var e,t=this.props,n=t.gray,a=t.valid,o=t.invalid,s=t.disabled,l=t.className,d=t.children,p=t["data-test"],f=(0,i.Z)(t,E),S=h()(g,l,(e={},(0,r.Z)(e,_,n),(0,r.Z)(e,v,a),(0,r.Z)(e,y,o),(0,r.Z)(e,b,s),e));return u.createElement("span",(0,c.a)({},f,{"data-test":(0,m.Z)("ring-badge",p),className:S}),d)}}]),n}(u.PureComponent);(0,c._)(S,"propTypes",{gray:p().bool,valid:p().bool,invalid:p().bool,disabled:p().bool,className:p().string,children:p().node,"data-test":p().string})},98134:function(e,t,n){"use strict";n.d(t,{Z:function(){return _}});var r=n(53782),i=n(22951),a=n(91976),o=n(67591),s=n(94337),l=n(79636),c=n(22491),u=n(50889),d=n.n(u),p=n(71894),f=n.n(p),h=n(75838),m=(n(18724),n(90203)),g=["className","split","data-test"],_=function(e){(0,o.Z)(n,e);var t=(0,s.Z)(n);function n(){return(0,i.Z)(this,n),t.apply(this,arguments)}return(0,a.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.className,n=e.split,i=e["data-test"],a=(0,r.Z)(e,g),o=f()(n?m.m.split:m.m.buttonGroup,t);return c.createElement("div",(0,l.a)({},a,{"data-test":(0,h.Z)("ring-button-group",i),className:o}))}}]),n}(c.PureComponent);(0,l._)(_,"propTypes",{children:d().node,className:d().string})},18724:function(e,t,n){"use strict";var r=n(22951),i=n(91976),a=n(67591),o=n(94337),s=n(79636),l=n(22491),c=n(50889),u=n.n(c),d=n(71894),p=n.n(d),f=n(90203),h=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,r.Z)(this,n),t.apply(this,arguments)}return(0,i.Z)(n,[{key:"render",value:function(){var e=this.props.className,t=p()(f.m.caption,e);return l.createElement("span",(0,s.a)({},this.props,{className:t}))}}]),n}(l.PureComponent);(0,s._)(h,"propTypes",{className:u().node})},80487:function(e,t,n){"use strict";n.d(t,{ZP:function(){return C},zx:function(){return C}});var r=n(50189),i=n(53782),a=n(22951),o=n(91976),s=n(47169),l=n(67591),c=n(94337),u=n(79636),d=(n(96144),n(22491)),p=n(50889),f=n.n(p),h=n(71894),m=n.n(h),g=n(64431),_=n.n(g),v=n(48882),y=n(33344),b=n(58526),E=n(42679),S=n(74357),T=(n(38579),n(48770),n(55398),["active","danger","delayed","loader","primary","short","text","inline","dropdown","height","icon","iconSize","iconClassName","iconSuppressSizeWarning","className","children"]),C=function(e){(0,l.Z)(n,e);var t=(0,c.Z)(n);function n(){var e;return(0,a.Z)(this,n),e=t.apply(this,arguments),(0,u._)((0,s.Z)(e),"buttonRef",(0,d.createRef)()),e}return(0,o.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.active,n=e.danger,a=e.delayed,o=e.loader,s=e.primary,l=e.short,c=e.text,p=e.inline,f=e.dropdown,h=e.height,g=void 0===h?this.context:h,b=e.icon,S=e.iconSize,C=e.iconClassName,x=e.iconSuppressSizeWarning,w=e.className,O=e.children,N=(0,i.Z)(e,T),R=(0,E.g)({className:w,active:t,danger:n,delayed:a,icon:b,loader:o,primary:s,short:l,text:c,inline:p,height:g}),I=d.createElement("span",{className:E.m.content},b&&d.createElement("span",{className:m()(E.m.icon,C)},d.createElement(v.ZP,{glyph:b,size:S,loading:o,suppressSizeWarning:x})),O&&d.createElement("span",null,O),f&&d.createElement(v.ZP,{glyph:_(),className:E.m.dropdownIcon})),A=(0,r.Z)((0,r.Z)({tabIndex:o?-1:0},N),{},{className:R,children:d.createElement(d.Fragment,null,o&&!c&&!b&&d.createElement("div",{className:E.m.loaderBackground}),I)});return null!=A.href?d.createElement(y.Z,A):d.createElement("button",(0,u.a)({ref:this.buttonRef,type:"button"},A))}}]),n}(d.PureComponent);(0,u._)(C,"propTypes",{active:f().bool,danger:f().bool,delayed:f().bool,loader:f().bool,primary:f().bool,short:f().bool,text:f().bool,inline:f().bool,dropdown:f().bool,href:f().string,target:f().string,icon:f().oneOfType([f().string,f().elementType]),iconSize:f().number,iconClassName:f().string,iconSuppressSizeWarning:f().bool,className:f().string,children:f().node,onClick:f().func}),(0,u._)(C,"IconSize",S.$),(0,u._)(C,"contextType",b.p)},58050:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(33940),i=n(22951),a=n(91976),o=n(79636),s=n(52706),l=function(){function e(t){(0,i.Z)(this,e),(0,o._)(this,"target",void 0),this.target=t}return(0,a.Z)(e,[{key:"isContentEditable",value:function(){return"true"===this.target.contentEditable}},{key:"focus",value:function(){document.activeElement&&document.activeElement===this.target||this.target.focus()}},{key:"getAbsolutePosition",value:function(e){for(var t=e,n=0;null!=t&&t!==this.target;){for(;t.previousSibling;){var r,i;n+=null!==(r=null===(i=t.previousSibling.textContent)||void 0===i?void 0:i.length)&&void 0!==r?r:0,t=t.previousSibling}t=t.parentNode}return n}},{key:"getPosition",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(this.isContentEditable()){e.avoidFocus||this.focus();var t=window.getSelection();if(null===t||void 0===t||!t.rangeCount)return 0;var n=t.getRangeAt(0),r=n.cloneRange();r.selectNodeContents(this.target),r.setEnd(n.endContainer,n.endOffset);var i=n.startContainer;if(this.target===i)return 0===n.startOffset||null==i.textContent?0:i.textContent.length;if(!this.target.contains(i))return-1;if(!i)return"selectionStart"in this.target&&this.target.selectionStart||-1;var a=this.getAbsolutePosition(i);if(n.startContainer===n.endContainer)return n.startOffset===n.endOffset?a+n.startOffset:{startOffset:a+n.startOffset,endOffset:a+n.endOffset,position:r.toString().length};var o=a+n.startOffset,s=this.getAbsolutePosition(n.endContainer),l=s+n.endOffset;return{startOffset:o,endOffset:l,position:r.toString().length}}return"selectionStart"in this.target&&this.target.selectionStart||-1}},{key:"getRelativePosition",value:function(e,t){var n=0,r=e;if(!r)return{_curNode:this.target,_correctedPosition:t};if(0===t){for(;3!==r.nodeType;)r=r.childNodes[0];return{_curNode:r,_correctedPosition:t}}var i=-1;if(r&&void 0!==r.nodeType)for(;n=t&&(n-=null!==(s=null===(l=(r=r.childNodes[i]).textContent)||void 0===l?void 0:l.length)&&void 0!==s?s:0,i=-1)}return{_curNode:r,_correctedPosition:t-n}}},{key:"setPosition",value:function(t){var n,i=this.isContentEditable(),a=this.target&&this.target.childNodes[0];if(void 0!==t)if("object"===(0,r.Z)(t)){var o=new Range,s=this.getRelativePosition(a,t.startOffset);o.setStart(s._curNode,s._correctedPosition);var l=this.getRelativePosition(a,t.endOffset);o.setEnd(l._curNode,l._correctedPosition),n=o}else if(-1===t){var c,u=i?this.target.textContent:e.normalizeNewlines("value"in this.target?this.target.value:void 0);n=null!==(c=null===u||void 0===u?void 0:u.length)&&void 0!==c?c:0}else{var d=this.getRelativePosition(a,t);a=d._curNode,n=d._correctedPosition}if(i){this.focus();try{var p,f,h;if(n instanceof Range)null===(p=window.getSelection())||void 0===p||p.removeAllRanges(),null===(f=window.getSelection())||void 0===f||f.addRange(n);else null===(h=window.getSelection())||void 0===h||h.collapse(a||this.target,n)}catch(m){}}else"setSelectionRange"in this.target&&"number"===typeof n&&this.target.setSelectionRange(n,n);return n}},{key:"getOffset",value:function(){var e,t=0;try{var n,r;null===(r=e=null===(n=window.getSelection())||void 0===n?void 0:n.getRangeAt(0).cloneRange())||void 0===r||r.setStart(e.startContainer,e.startOffset-1)}catch(i){return t}return e&&0!==e.endOffset&&""!==e.toString()&&(t=(0,s.Dz)(e).right-(0,s.Dz)(this.target).left-(e.startContainer instanceof HTMLElement&&e.startContainer.offsetLeft||0)),t}}],[{key:"normalizeNewlines",value:function(e){return"string"===typeof e?e.replace(this.returnRE,""):e}}]),e}();(0,o._)(l,"returnRE",/\r/g)},75446:function(e,t,n){"use strict";n.d(t,{Z:function(){return C}});var r=n(53782),i=n(22951),a=n(91976),o=n(47169),s=n(67591),l=n(94337),c=n(79636),u=n(22491),d=n(50889),p=n.n(d),f=n(71894),h=n.n(f),m=n(78699),g=n.n(m),_=n(75095),v=n.n(_),y=n(48882),b=n(61914),E=n(2196),S=n(8807),T=(n(38579),n(74357),n(48770),n(55398),["children","label","className","containerClassName","containerStyle","cellClassName","labelClassName","indeterminate","inputRef"]),C=function(e){(0,s.Z)(n,e);var t=(0,l.Z)(n);function n(){var e;return(0,i.Z)(this,n),e=t.apply(this,arguments),(0,c._)((0,o.Z)(e),"input",void 0),(0,c._)((0,o.Z)(e),"inputRef",(function(t){null!=t&&(t.indeterminate=e.props.indeterminate),e.input=t})),e}return(0,a.Z)(n,[{key:"componentDidMount",value:function(){null!=this.input&&(this.input.indeterminate=this.props.indeterminate)}},{key:"componentDidUpdate",value:function(e){var t=this.props.indeterminate;null!=this.input&&t!==e.indeterminate&&(this.input.indeterminate=this.props.indeterminate)}},{key:"render",value:function(){var e=this.props,t=e.children,n=e.label,i=e.className,a=e.containerClassName,o=e.containerStyle,s=e.cellClassName,l=e.labelClassName,d=(e.indeterminate,e.inputRef),p=(0,r.Z)(e,T),f=h()(S.m.input,i),m=h()(S.m.checkbox,a),_=h()(S.m.cell,s),b=h()(S.m.label,l);return u.createElement("label",{className:m,style:o,"data-test":"ring-checkbox"},u.createElement("input",(0,c.a)({},p,{"data-checked":p.checked,ref:(0,E.Z)(this.inputRef,d),type:"checkbox",className:f})),u.createElement("span",{className:_},u.createElement(y.ZP,{glyph:g(),className:S.m.check}),u.createElement(y.ZP,{glyph:v(),className:S.m.minus})),u.createElement("span",{className:b},n||t))}}]),n}(u.PureComponent);(0,c._)(C,"propTypes",{name:p().string,label:p().string,className:p().string,containerClassName:p().string,containerStyle:p().object,cellClassName:p().string,labelClassName:p().string,defaultChecked:p().bool,checked:p().bool,indeterminate:p().bool,disabled:p().bool,onChange:p().func,children:p().node,inputRef:p().oneOfType([p().func,(0,b.J)(p().instanceOf(HTMLInputElement))])}),(0,c._)(C,"defaultProps",{indeterminate:!1})},42181:function(e,t,n){"use strict";n.d(t,{Z:function(){return E}});var r=n(33940),i=n(64649),a=n(53782),o=n(22951),s=n(91976),l=n(47169),c=n(67591),u=n(94337),d=n(79636),p=n(22491),f=n(50889),h=n.n(f),m=n(71894),g=n.n(m),_=n(75838),v=n(14099),y=n(17691),b=(n(64431),n(48882),n(38579),n(74357),n(48770),n(55398),n(80487),n(96144),n(33344),n(58526),n(42679),["initShown","onShow","onHide","hoverShowTimeOut","hoverHideTimeOut","children","anchor","className","activeClassName","hoverMode","clickMode","data-test"]),E=function(e){(0,c.Z)(n,e);var t=(0,u.Z)(n);function n(){var e;return(0,o.Z)(this,n),e=t.apply(this,arguments),(0,d._)((0,l.Z)(e),"state",{show:e.props.initShown,pinned:!1}),(0,d._)((0,l.Z)(e),"onClick",(function(){var t=e.state,n=t.show,r=t.pinned,i=r;if(e.props.hoverMode)if(r)i=!1;else if(i=!0,n)return void e.setState({pinned:!0});e._toggle(!n,i)})),(0,d._)((0,l.Z)(e),"onChildCloseAttempt",(function(){var t=e.state.pinned;e.props.hoverMode&&(t=!1),e._toggle(!1,t)})),(0,d._)((0,l.Z)(e),"hoverTimer",void 0),(0,d._)((0,l.Z)(e),"onMouseEnter",(function(t){var n,r;e._clearTimer(),null===(n=(r=e.props).onMouseEnter)||void 0===n||n.call(r,t),e.hoverTimer=window.setTimeout((function(){e.state.show||e._toggle(!0)}),e.props.hoverShowTimeOut)})),(0,d._)((0,l.Z)(e),"onMouseLeave",(function(t){var n,r;null===(n=(r=e.props).onMouseLeave)||void 0===n||n.call(r,t),e.state.pinned||(e._clearTimer(),e.hoverTimer=window.setTimeout((function(){e.state.show&&e._toggle(!1)}),e.props.hoverHideTimeOut))})),(0,d._)((0,l.Z)(e),"handlePopupInteraction",(function(){e.setState((function(e){return e.pinned?null:{pinned:!0}}))})),e}return(0,s.Z)(n,[{key:"toggle",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:!this.state.show;this._toggle(e)}},{key:"_toggle",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state.pinned;this.setState({show:e,pinned:n},(function(){return e?t.props.onShow():t.props.onHide()}))}},{key:"_clearTimer",value:function(){this.hoverTimer&&(clearTimeout(this.hoverTimer),this.hoverTimer=null)}},{key:"render",value:function(){var e,t=this.state,n=t.show,o=t.pinned,s=this.props,l=(s.initShown,s.onShow,s.onHide,s.hoverShowTimeOut,s.hoverHideTimeOut,s.children),c=s.anchor,u=s.className,f=s.activeClassName,h=s.hoverMode,m=s.clickMode,E=s["data-test"],S=(0,a.Z)(s,b),T=g()(y.m.dropdown,u,(0,i.Z)({},null!==f&&void 0!==f?f:"",null!=f&&n)),C=h?o:n;switch((0,r.Z)(c)){case"string":e=p.createElement(y.A,{active:C},c);break;case"function":e=c({active:n,pinned:o});break;default:e=(0,v.k)(c)||"string"===typeof c.type?c:(0,p.cloneElement)(c,{active:C})}var x={hidden:!n,onCloseAttempt:this.onChildCloseAttempt,onMouseDown:h?this.handlePopupInteraction:void 0,onContextMenu:h?this.handlePopupInteraction:void 0,dontCloseOnAnchorClick:!0};return p.createElement("div",(0,d.a)({"data-test":(0,_.Z)("ring-dropdown",E)},S,{onClick:m?this.onClick:void 0,role:"presentation",onMouseEnter:h?this.onMouseEnter:void 0,onMouseLeave:h?this.onMouseLeave:void 0,className:T}),e,"function"===typeof l?l(x):(0,p.cloneElement)(l,x))}}]),n}(p.Component);(0,d._)(E,"propTypes",{anchor:h().oneOfType([h().node,h().func]).isRequired,children:h().oneOfType([h().element,h().func]).isRequired,initShown:h().bool,className:h().string,activeClassName:h().string,clickMode:h().bool,hoverMode:h().bool,hoverShowTimeOut:h().number,hoverHideTimeOut:h().number,onShow:h().func,onHide:h().func,onMouseEnter:h().func,onMouseLeave:h().func,"data-test":h().string}),(0,d._)(E,"defaultProps",{initShown:!1,clickMode:!0,hoverMode:!1,hoverShowTimeOut:300,hoverHideTimeOut:600,onShow:function(){},onHide:function(){},onMouseEnter:function(){},onMouseLeave:function(){}})},2196:function(e,t,n){"use strict";n.d(t,{Z:function(){return r}});var r=function(){for(var e=arguments.length,t=new Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:"",n=(0,i.createContext)(e),a=(0,i.createContext)((function(){}));function s(t){var o=t.children,s=(0,i.useState)(e),l=(0,r.Z)(s,2),c=l[0],u=l[1];return i.createElement(n.Provider,{value:c},i.createElement(a.Provider,{value:u},o))}function l(e,t){var n=(0,i.useContext)(a);(0,i.useEffect)((function(){t||n(e)}),[n,e,t])}function c(e){return l(e.value,e.skipUpdate),null}return s.propTypes={children:o().node},s.displayName="".concat(t,"Provider"),c.displayName="".concat(t,"Updater"),{ValueContext:n,UpdateContext:a,Provider:s,useUpdate:l,Updater:(0,i.memo)(c)}}},75838:function(e,t,n){"use strict";n.d(t,{Z:function(){return s}});var r=n(33940),i=n(649),a=n(11026);function o(e){return Object.entries(e).reduce((function(e,t){var n=(0,a.Z)(t,2),r=n[0];return n[1]?[].concat((0,i.Z)(e),[r]):e}),[])}function s(){for(var e=arguments.length,t=new Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:"";n.split(/\s+/g).filter((function(e){return!!e})).forEach((function(n){return t[e](n)}))}};m("add"),m("remove");var g=function(){function e(){(0,r.Z)(this,e),(0,a._)(this,"_all",new Set)}return(0,i.Z)(e,[{key:"add",value:function(e,t,n,r){e.addEventListener(t,n,r);var i=function(){return e.removeEventListener(t,n,r)};return this._all.add(i),i}},{key:"remove",value:function(e){e(),this._all.delete(e)}},{key:"removeAll",value:function(){var e=this;this._all.forEach((function(t){return e.remove(t)}))}}]),e}();function _(e){e.preventDefault&&e.preventDefault()}},85794:function(e,t,n){"use strict";n.d(t,{Z:function(){return a}});var r={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},i={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"};function a(e){if(e.key){var t=r[e.key]||e.key;if("Unidentified"!==t)return t}if("keypress"===e.type){var n=function(e){var t,n=e.keyCode;return"charCode"in e?0===(t=e.charCode)&&13===n&&(t=13):t=n,t>=32||13===t?t:0}(e);return 32===n?"Enter":String.fromCharCode(n)}return"keydown"===e.type||"keyup"===e.type?i[e.keyCode]||"Unidentified":""}},51231:function(e,t,n){"use strict";n.d(t,{Z:function(){return i}});var r={};function i(e){if(!e)throw Error('Argument "name" is required in getUID()');return r[e]||(r[e]=0),e+String(r[e]++)}},97893:function(e,t,n){"use strict";function r(e){var t=new Map,n=new WeakMap;return function(r){var i=null!==r&&void 0!==r?r:"__singleValue__",a=i instanceof Object?n:t,o=a.get(i);if(null!=o)return o;var s=e(r);return a.set(i,s),s}}n.d(t,{Z:function(){return r}})},61914:function(e,t,n){"use strict";n.d(t,{J:function(){return a}});var r=n(50889),i=n.n(r),a=function(e){return i().shape({current:e})}},13843:function(e,t,n){"use strict";n.d(t,{sY:function(){return i}});var r=n(92418),i=r.render;r.unmountComponentAtNode,r.hydrate},63968:function(e,t,n){"use strict";n.d(t,{Z:function(){return p}});var r=n(22951),i=n(91976),a=n(47169),o=n(67591),s=n(94337),l=n(79636),c=n(22491),u=n(13843),d=n(2196);n(92418);function p(e){return function(e){(0,o.Z)(n,e);var t=(0,s.Z)(n);function n(){var e;return(0,r.Z)(this,n),e=t.apply(this,arguments),(0,l._)((0,a.Z)(e),"_propsCache",e.props),e}return(0,i.Z)(n,[{key:"rerender",value:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;try{var r;e=null===(r=this.node)||void 0===r?void 0:r.parentNode}finally{if(!e||!(e instanceof Element))throw new Error("".concat(this.constructor.name," component isn't mounted"))}this._propsCache=Object.assign({},this.props,this._propsCache,t),this._propsCache.ref=(0,d.Z)(this._propsCache.ref,n),(0,u.sY)((0,c.createElement)(this.constructor,this._propsCache),e)}}]),n}(e)}},60953:function(e,t,n){"use strict";function r(e){var t,n,r=!1;function i(){n=window.requestAnimationFrame((function(){var e;null===(e=t)||void 0===e||e(),r?(r=!1,i()):(n=null,t=null)}))}return function(a){t=a,n?e&&(r=!0):i()}}n.d(t,{Z:function(){return r}})},39489:function(e,t,n){"use strict";n.d(t,{Z:function(){return i}});var r=n(37406),i=new(n.n(r)());i.sniff()},26114:function(e,t,n){"use strict";n.d(t,{_v:function(){return o},ZP:function(){return s}});n(22491),n(71894),n(92418),n(90986),n(68062),n(51231);var r,i="light_rui_6155",a="dark_rui_eb55";!function(e){e.AUTO="auto",e.LIGHT="light",e.DARK="dark"}(r||(r={}));window.matchMedia("(prefers-color-scheme: dark)");function o(e,t){e===r.DARK?(t.classList.remove(i),t.classList.add(a),t.classList.add("ring-ui-theme-dark")):(t.classList.remove(a),t.classList.remove("ring-ui-theme-dark"),t.classList.add(i))}var s=r;n(52706),n(81975),n(54048),n(77373),n(39489),n(37406),n(24566),n(90698),n(15573)},14099:function(e,t,n){"use strict";n.d(t,{k:function(){return r}});var r=function(e){return Array.isArray(e)}},96240:function(e,t,n){"use strict";n.d(t,{JX:function(){return C},X2:function(){return y}});var r=n(53782),i=n(22951),a=n(91976),o=n(67591),s=n(94337),l=n(79636),c=n(22491),u=n(50889),d=n.n(u),p=n(71894),f=n.n(p),h={unit:"8px","breakpoint-small":"640px","breakpoint-middle":"960px","breakpoint-large":"1200px","large-screen-media":"(min-width: 1200px)","middle-screen-media":"(min-width: 960px) and (max-width: 1199px)","small-screen-media":"(min-width: 640px) and (max-width: 959px)",gutterWidth:"(8px*2)",gutterCompensation:"-8px",outerMargin:"16px",containerSmall:"656px",containerMedium:"976px",containerLarge:"1216px","width-1":"8.3333%","width-2":"16.6667%","width-3":"25%","width-4":"33.3333%","width-5":"41.6667%","width-6":"50%","width-7":"58.3333%","width-8":"66.6667%","width-9":"75%","width-10":"83.3333%","width-11":"91.6667%","width-12":"100%",light:"light_rui_a74c","container-fluid":"container-fluid_rui_a74c",container:"container_rui_a74c",row:"row_rui_a74c",reverse:"reverse_rui_a74c",col:"col_rui_a74c","col-xs":"col-xs_rui_a74c","col-xs-1":"col-xs-1_rui_a74c","col-xs-2":"col-xs-2_rui_a74c","col-xs-3":"col-xs-3_rui_a74c","col-xs-4":"col-xs-4_rui_a74c","col-xs-5":"col-xs-5_rui_a74c","col-xs-6":"col-xs-6_rui_a74c","col-xs-7":"col-xs-7_rui_a74c","col-xs-8":"col-xs-8_rui_a74c","col-xs-9":"col-xs-9_rui_a74c","col-xs-10":"col-xs-10_rui_a74c","col-xs-11":"col-xs-11_rui_a74c","col-xs-12":"col-xs-12_rui_a74c","col-xs-offset-0":"col-xs-offset-0_rui_a74c","col-xs-offset-1":"col-xs-offset-1_rui_a74c","col-xs-offset-2":"col-xs-offset-2_rui_a74c","col-xs-offset-3":"col-xs-offset-3_rui_a74c","col-xs-offset-4":"col-xs-offset-4_rui_a74c","col-xs-offset-5":"col-xs-offset-5_rui_a74c","col-xs-offset-6":"col-xs-offset-6_rui_a74c","col-xs-offset-7":"col-xs-offset-7_rui_a74c","col-xs-offset-8":"col-xs-offset-8_rui_a74c","col-xs-offset-9":"col-xs-offset-9_rui_a74c","col-xs-offset-10":"col-xs-offset-10_rui_a74c","col-xs-offset-11":"col-xs-offset-11_rui_a74c","col-xs-offset-12":"col-xs-offset-12_rui_a74c","start-xs":"start-xs_rui_a74c","center-xs":"center-xs_rui_a74c","end-xs":"end-xs_rui_a74c","top-xs":"top-xs_rui_a74c","middle-xs":"middle-xs_rui_a74c","baseline-xs":"baseline-xs_rui_a74c","bottom-xs":"bottom-xs_rui_a74c","around-xs":"around-xs_rui_a74c","between-xs":"between-xs_rui_a74c","first-xs":"first-xs_rui_a74c","last-xs":"last-xs_rui_a74c","col-sm":"col-sm_rui_a74c","col-sm-1":"col-sm-1_rui_a74c","col-sm-2":"col-sm-2_rui_a74c","col-sm-3":"col-sm-3_rui_a74c","col-sm-4":"col-sm-4_rui_a74c","col-sm-5":"col-sm-5_rui_a74c","col-sm-6":"col-sm-6_rui_a74c","col-sm-7":"col-sm-7_rui_a74c","col-sm-8":"col-sm-8_rui_a74c","col-sm-9":"col-sm-9_rui_a74c","col-sm-10":"col-sm-10_rui_a74c","col-sm-11":"col-sm-11_rui_a74c","col-sm-12":"col-sm-12_rui_a74c","col-sm-offset-0":"col-sm-offset-0_rui_a74c","col-sm-offset-1":"col-sm-offset-1_rui_a74c","col-sm-offset-2":"col-sm-offset-2_rui_a74c","col-sm-offset-3":"col-sm-offset-3_rui_a74c","col-sm-offset-4":"col-sm-offset-4_rui_a74c","col-sm-offset-5":"col-sm-offset-5_rui_a74c","col-sm-offset-6":"col-sm-offset-6_rui_a74c","col-sm-offset-7":"col-sm-offset-7_rui_a74c","col-sm-offset-8":"col-sm-offset-8_rui_a74c","col-sm-offset-9":"col-sm-offset-9_rui_a74c","col-sm-offset-10":"col-sm-offset-10_rui_a74c","col-sm-offset-11":"col-sm-offset-11_rui_a74c","col-sm-offset-12":"col-sm-offset-12_rui_a74c","start-sm":"start-sm_rui_a74c","center-sm":"center-sm_rui_a74c","end-sm":"end-sm_rui_a74c","top-sm":"top-sm_rui_a74c","middle-sm":"middle-sm_rui_a74c","baseline-sm":"baseline-sm_rui_a74c","bottom-sm":"bottom-sm_rui_a74c","around-sm":"around-sm_rui_a74c","between-sm":"between-sm_rui_a74c","first-sm":"first-sm_rui_a74c","last-sm":"last-sm_rui_a74c","col-md":"col-md_rui_a74c","col-md-1":"col-md-1_rui_a74c","col-md-2":"col-md-2_rui_a74c","col-md-3":"col-md-3_rui_a74c","col-md-4":"col-md-4_rui_a74c","col-md-5":"col-md-5_rui_a74c","col-md-6":"col-md-6_rui_a74c","col-md-7":"col-md-7_rui_a74c","col-md-8":"col-md-8_rui_a74c","col-md-9":"col-md-9_rui_a74c","col-md-10":"col-md-10_rui_a74c","col-md-11":"col-md-11_rui_a74c","col-md-12":"col-md-12_rui_a74c","col-md-offset-0":"col-md-offset-0_rui_a74c","col-md-offset-1":"col-md-offset-1_rui_a74c","col-md-offset-2":"col-md-offset-2_rui_a74c","col-md-offset-3":"col-md-offset-3_rui_a74c","col-md-offset-4":"col-md-offset-4_rui_a74c","col-md-offset-5":"col-md-offset-5_rui_a74c","col-md-offset-6":"col-md-offset-6_rui_a74c","col-md-offset-7":"col-md-offset-7_rui_a74c","col-md-offset-8":"col-md-offset-8_rui_a74c","col-md-offset-9":"col-md-offset-9_rui_a74c","col-md-offset-10":"col-md-offset-10_rui_a74c","col-md-offset-11":"col-md-offset-11_rui_a74c","col-md-offset-12":"col-md-offset-12_rui_a74c","start-md":"start-md_rui_a74c","center-md":"center-md_rui_a74c","end-md":"end-md_rui_a74c","top-md":"top-md_rui_a74c","middle-md":"middle-md_rui_a74c","baseline-md":"baseline-md_rui_a74c","bottom-md":"bottom-md_rui_a74c","around-md":"around-md_rui_a74c","between-md":"between-md_rui_a74c","first-md":"first-md_rui_a74c","last-md":"last-md_rui_a74c","col-lg":"col-lg_rui_a74c","col-lg-1":"col-lg-1_rui_a74c","col-lg-2":"col-lg-2_rui_a74c","col-lg-3":"col-lg-3_rui_a74c","col-lg-4":"col-lg-4_rui_a74c","col-lg-5":"col-lg-5_rui_a74c","col-lg-6":"col-lg-6_rui_a74c","col-lg-7":"col-lg-7_rui_a74c","col-lg-8":"col-lg-8_rui_a74c","col-lg-9":"col-lg-9_rui_a74c","col-lg-10":"col-lg-10_rui_a74c","col-lg-11":"col-lg-11_rui_a74c","col-lg-12":"col-lg-12_rui_a74c","col-lg-offset-0":"col-lg-offset-0_rui_a74c","col-lg-offset-1":"col-lg-offset-1_rui_a74c","col-lg-offset-2":"col-lg-offset-2_rui_a74c","col-lg-offset-3":"col-lg-offset-3_rui_a74c","col-lg-offset-4":"col-lg-offset-4_rui_a74c","col-lg-offset-5":"col-lg-offset-5_rui_a74c","col-lg-offset-6":"col-lg-offset-6_rui_a74c","col-lg-offset-7":"col-lg-offset-7_rui_a74c","col-lg-offset-8":"col-lg-offset-8_rui_a74c","col-lg-offset-9":"col-lg-offset-9_rui_a74c","col-lg-offset-10":"col-lg-offset-10_rui_a74c","col-lg-offset-11":"col-lg-offset-11_rui_a74c","col-lg-offset-12":"col-lg-offset-12_rui_a74c","start-lg":"start-lg_rui_a74c","center-lg":"center-lg_rui_a74c","end-lg":"end-lg_rui_a74c","top-lg":"top-lg_rui_a74c","middle-lg":"middle-lg_rui_a74c","baseline-lg":"baseline-lg_rui_a74c","bottom-lg":"bottom-lg_rui_a74c","around-lg":"around-lg_rui_a74c","between-lg":"between-lg_rui_a74c","first-lg":"first-lg_rui_a74c","last-lg":"last-lg_rui_a74c"},m=n(64649),g=["children","className","reverse"],_=d().oneOf(["xs","sm","md","lg"]),v=["start","center","end","around","between","top","middle","baseline","bottom","first","last"];var y=function(e){(0,o.Z)(n,e);var t=(0,s.Z)(n);function n(){return(0,i.Z)(this,n),t.apply(this,arguments)}return(0,a.Z)(n,[{key:"render",value:function(){var e,t=this.props,n=t.children,i=t.className,a=t.reverse,o=(0,r.Z)(t,g),s=f()(i,h.row,(e=o,v.reduce((function(t,n){return e[n]?t.concat(h["".concat(n,"-").concat(e[n])]):t}),[])),(0,m.Z)({},h.reverse,a));return c.createElement("div",{className:s},n)}}]),n}(c.Component);(0,l._)(y,"propTypes",{reverse:d().bool,start:_,center:_,end:_,top:_,middle:_,baseline:_,bottom:_,around:_,between:_,first:_,last:_,className:d().string,children:d().node});var b=n(11026),E=["children","className","reverse"],S=d().oneOfType([d().number,d().bool]),T={xs:"col-xs",sm:"col-sm",md:"col-md",lg:"col-lg",xsOffset:"col-xs-offset",smOffset:"col-sm-offset",mdOffset:"col-md-offset",lgOffset:"col-lg-offset"};var C=function(e){(0,o.Z)(n,e);var t=(0,s.Z)(n);function n(){return(0,i.Z)(this,n),t.apply(this,arguments)}return(0,a.Z)(n,[{key:"render",value:function(){var e,t=this.props,n=t.children,i=t.className,a=t.reverse,o=(0,r.Z)(t,E),s=f()(h.col,i,(e=o,Object.entries(e).filter((function(e){var t=(0,b.Z)(e,1)[0];return T[t]})).map((function(e){var t=(0,b.Z)(e,2),n=t[0],r=t[1];return h[Number.isInteger(r)?"".concat(T[n],"-").concat(r):T[n]]}))),(0,m.Z)({},h.reverse,a));return c.createElement("div",{className:s},n)}}]),n}(c.Component);(0,l._)(C,"propTypes",{xs:S,sm:S,md:S,lg:S,xsOffset:d().number,smOffset:d().number,mdOffset:d().number,lgOffset:d().number,reverse:d().bool,className:d().string,children:d().node});var x=["children","className"],w=function(e){(0,o.Z)(n,e);var t=(0,s.Z)(n);function n(){return(0,i.Z)(this,n),t.apply(this,arguments)}return(0,a.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.children,n=e.className,i=(0,r.Z)(e,x),a=f()(h["container-fluid"],n);return c.createElement("div",(0,l.a)({},i,{className:a}),t)}}]),n}(c.Component);(0,l._)(w,"propTypes",{className:d().string,children:d().node})},48882:function(e,t,n){"use strict";n.d(t,{ZP:function(){return S}});var r=n(64649),i=n(53782),a=n(22951),o=n(91976),s=n(67591),l=n(94337),c=n(79636),u=n(22491),d=n(50889),p=n.n(d),f=n(71894),h=n.n(f),m=n(38579),g=n.n(m),_=n(74357),v=n(48770),y=n(55398),b=["className","size","color","loading","glyph","width","height","suppressSizeWarning"],E=g()((function(){}),"`size`, `width` and `height` props are not recommended to use in Ring UI `Icon` component. The intrinsic sizes of SVG icon (`width` and `height` SVG attributes) are used instead.\n\nWe strongly recommend to use icons handcrafted for particular sizes. If your icon doesn't exist in the desired size, please ask your designer to draw one. \"Responsive\" checkmark should be unchecked when exporting icon.'"),S=function(e){(0,s.Z)(n,e);var t=(0,l.Z)(n);function n(){return(0,a.Z)(this,n),t.apply(this,arguments)}return(0,o.Z)(n,[{key:"warnSize",value:function(){this.props.suppressSizeWarning||E()}},{key:"getStyle",value:function(){var e=this.props,t=e.size,n=e.width,r=e.height;return n||r?(this.warnSize(),{width:n,height:r}):t?(this.warnSize(),{width:t,height:t}):void 0}},{key:"render",value:function(){var e,t=this.props,n=t.className,a=(t.size,t.color),o=t.loading,s=t.glyph,l=(t.width,t.height,t.suppressSizeWarning,(0,i.Z)(t,b));if(!s)return null;var d=h()(v.m.icon,(e={},(0,r.Z)(e,v.m[a],!!a),(0,r.Z)(e,v.m.loading,o),e),n);return u.createElement("span",(0,c.a)({},l,{className:d}),"string"===typeof s?u.createElement(y.Z,{src:s,style:this.getStyle()}):u.createElement(s,{className:v.m.glyph,style:this.getStyle()}))}}]),n}(u.PureComponent);(0,c._)(S,"propTypes",{className:p().string,color:p().string,glyph:p().oneOfType([p().string,p().elementType]).isRequired,height:p().number,size:p().number,width:p().number,loading:p().bool,suppressSizeWarning:p().bool}),(0,c._)(S,"defaultProps",{className:"",color:_.I.DEFAULT,glyph:""}),(0,c._)(S,"Color",_.I),(0,c._)(S,"Size",_.$)},74357:function(e,t,n){"use strict";var r,i;n.d(t,{$:function(){return i},I:function(){return r}}),function(e){e.BLUE="blue",e.DEFAULT="",e.GRAY="gray",e.GREEN="green",e.MAGENTA="magenta",e.RED="red",e.WHITE="white"}(r||(r={})),function(e){e[e.Size12=12]="Size12",e[e.Size14=14]="Size14",e[e.Size16=16]="Size16",e[e.Size18=18]="Size18",e[e.Size20=20]="Size20",e[e.Size24=24]="Size24",e[e.Size32=32]="Size32",e[e.Size40=40]="Size40",e[e.Size48=48]="Size48",e[e.Size64=64]="Size64",e[e.Size96=96]="Size96",e[e.Size128=128]="Size128"}(i||(i={}))},55398:function(e,t,n){"use strict";n.d(t,{Z:function(){return _}});var r=n(64649),i=n(53782),a=n(79636),o=n(22491),s=n(71894),l=n.n(s),c=n(50889),u=n.n(c),d=n(97893),p=n(48770),f=["src","className"];function h(e){var t=e.attributes;return t.length>0?function(e){for(var t={},n=0;n=this.input.clientHeight&&this.stretch(this.input)}},{key:"stretch",value:function(e){e&&e.style&&(e.style.height="0",e.style.height="".concat(e.scrollHeight+2,"px"))}},{key:"adapt",value:function(){this.checkValue()}},{key:"render",value:function(){var e,t=this.props,n=t.size,r=t.active,o=t.multiline,s=t.borderless,l=t.label,c=t.error,u=t.className,f=t.inputClassName,h=t.children,m=t.value,_=t.onClear,y=t.disabled,E=t.inputRef,C=(t.onChange,t.enableShortcuts),N=(t.id,t.placeholder),R=t.icon,I=t.height,A=void 0===I?this.context:I,k=t.afterInput,D=(0,a.Z)(t,O),M=this.state.empty,P=!!_,L=g()(u,x.m.outerContainer,[x.m["size".concat(n)]],[x.m["height".concat(A)]],(e={"ring-js-shortcuts":!0===C},(0,i.Z)(e,x.m.active,r),(0,i.Z)(e,x.m.error,null!=c),(0,i.Z)(e,x.m.empty,M),(0,i.Z)(e,x.m.noLabel,!this.props.label),(0,i.Z)(e,x.m.withIcon,null!=R),(0,i.Z)(e,x.m.clearable,P),(0,i.Z)(e,x.m.borderless,s),e)),F=g()(x.m.input,f),B=null!=m?m:h,U={ref:(0,T.Z)(this.inputRef,E),className:F,value:B,disabled:y,id:this.getId(),placeholder:N,"aria-label":"string"===typeof l&&l?l:N,"data-enabled-shortcuts":Array.isArray(C)?C.join(","):null};return p.createElement("div",{className:L,"data-test":"ring-input"},l&&p.createElement(w.A,{htmlFor:this.getId(),disabled:y,label:l}),p.createElement("div",{className:x.m.container},R&&p.createElement(S.ZP,{glyph:R,className:x.m.icon}),o?p.createElement("textarea",(0,d.a)({onChange:this.handleTextareaChange,rows:1},U,D)):p.createElement("input",(0,d.a)({onChange:this.handleInputChange},U,D)),P&&!y&&p.createElement(b.zx,{title:"Clear input","data-test":"ring-input-clear",className:x.m.clear,icon:v(),onClick:this.clear}),k),c&&p.createElement("div",{className:x.m.errorText},c))}}]),n}(p.PureComponent);(0,d._)(R,"defaultProps",{size:r.M,onChange:N,inputRef:N,enableShortcuts:["esc"]}),(0,d._)(R,"contextType",C.p),R.propTypes={value:h().string,className:h().string,inputClassName:h().string,size:h().oneOf(Object.values(r)).isRequired,label:h().node,active:h().bool,error:h().string,multiline:h().bool,onChange:h().func,onClear:h().func,inputRef:h().oneOfType([h().func,(0,y.J)(h().instanceOf(HTMLInputElement)),(0,y.J)(h().instanceOf(HTMLTextAreaElement))]),children:h().string,enableShortcuts:h().oneOfType([h().bool,h().arrayOf(h().string.isRequired)]),disabled:h().bool,id:h().string,placeholder:h().string,icon:h().oneOfType([h().string,h().elementType])}},76976:function(e,t,n){"use strict";n.d(t,{ZP:function(){return H}});var r=n(64649),i=n(53782),a=n(22951),o=n(91976),s=n(67591),l=n(94337),c=n(79636),u=n(22491),d=n(50889),p=n.n(d),f=n(71894),h=n.n(f),m=n(75838),g=n(47169);function _(e,t,n){return function(e,t,n){return{y:function(r){return+t+(r-e)*n},x:function(r){return+e+(r-t)/n}}}(e,e,n).y(t)}var v=(0,u.createContext)(null),y=(0,u.createContext)(null);var b="island_rui_1d72",E="withTransparentBottomBorder_rui_1d72",S="header_rui_1d72",T="withBottomBorder_rui_1d72",C="title_rui_1d72",x="narrowIsland_rui_1d72",w="content_rui_1d72",O="scrollableWrapper_rui_1d72",N="withoutPaddings_rui_1d72",R="contentWithTopFade_rui_1d72",I="contentWithBottomFade_rui_1d72",A=["children","className","wrapWithTitle","border","phase"],k={FONT_SIZE:24,LINE_HEIGHT:28,PADDING_TOP:24,PADDING_BOTTOM:0,X:0,Y:0,SPACING:0},D={FONT_SIZE:13,LINE_HEIGHT:20,PADDING_TOP:16,PADDING_BOTTOM:8,X:.4,Y:.1,SPACING:1.09},M=function(e){(0,s.Z)(n,e);var t=(0,l.Z)(n);function n(){return(0,a.Z)(this,n),t.apply(this,arguments)}return(0,o.Z)(n,[{key:"style",value:function(e){var t;return _(k[e],D[e],null!==(t=this.props.phase)&&void 0!==t?t:0)}},{key:"render",value:function(){var e=this.props,t=e.children,n=e.className,a=e.wrapWithTitle,o=e.border,s=e.phase,l=(0,i.Z)(e,A),d=h()(S,n,(0,r.Z)({},T,o||null!=s&&s>=.5)),p=null!=s?{lineHeight:"".concat(this.style("LINE_HEIGHT"),"px"),paddingTop:this.style("PADDING_TOP"),paddingBottom:this.style("PADDING_BOTTOM")}:void 0,f=null!=s&&this.style("FONT_SIZE")/k.FONT_SIZE,m=null!=s&&s<1?{fontSize:k.FONT_SIZE,transform:"translate(".concat(this.style("X"),"px, ").concat(this.style("Y"),"px) scale(").concat(f,")"),letterSpacing:this.style("SPACING")}:void 0;return u.createElement("div",(0,c.a)({},l,{"data-test":"ring-island-header",className:d,style:p}),a&&u.createElement("h2",{className:C,style:m},t),!a&&t)}}]),n}(u.Component);(0,c._)(M,"propTypes",{children:p().node,className:p().string,border:p().bool,wrapWithTitle:p().bool,phase:p().number}),(0,c._)(M,"defaultProps",{wrapWithTitle:!0});var P=n(2125),L=n.n(P),F=n(60953),B=["children","className","bottomBorder","scrollableWrapperClassName","onScroll","onScrollToBottom","fade"],U=(0,F.Z)(),G=function(){},z=function(e){(0,s.Z)(n,e);var t=(0,l.Z)(n);function n(){var e;return(0,a.Z)(this,n),e=t.apply(this,arguments),(0,c._)((0,g.Z)(e),"state",{scrolledToTop:!0,scrolledToBottom:!1}),(0,c._)((0,g.Z)(e),"resizeDetector",L()({strategy:"scroll"})),(0,c._)((0,g.Z)(e),"wrapperNode",void 0),(0,c._)((0,g.Z)(e),"setWrapper",(function(t){t&&(e.wrapperNode=t,e.resizeDetector.listenTo(t,e.calculateScrollPosition))})),(0,c._)((0,g.Z)(e),"calculateScrollPosition",(function(){return U((function(){var t=(0,g.Z)(e).scrollableNode;if(t){e.props.onScroll(t);var n,r,i=t.scrollTop,a=t.scrollHeight,o=0===i,s=t.offsetHeight+i>=a-16;if(s)null===(n=(r=e.props).onScrollToBottom)||void 0===n||n.call(r);e.setState({scrolledToTop:o,scrolledToBottom:s})}}))})),(0,c._)((0,g.Z)(e),"scrollableNode",void 0),(0,c._)((0,g.Z)(e),"setScrollableNodeAndCalculatePosition",(function(t){t&&(e.scrollableNode=t,e.calculateScrollPosition())})),e}return(0,o.Z)(n,[{key:"componentWillUnmount",value:function(){this.scrollableNode=null,this.wrapperNode&&this.resizeDetector.removeAllListeners(this.wrapperNode)}},{key:"render",value:function(){var e,t=this.props,n=t.children,a=t.className,o=t.bottomBorder,s=t.scrollableWrapperClassName,l=(t.onScroll,t.onScrollToBottom,t.fade),d=(0,i.Z)(t,B),p=this.state,f=p.scrolledToTop,m=p.scrolledToBottom,g=h()(w,a,(e={},(0,r.Z)(e,R,l&&!f),(0,r.Z)(e,I,l&&!m),(0,r.Z)(e,E,o),(0,r.Z)(e,T,o&&!m),e)),_=h()(O,s);return u.createElement("div",(0,c.a)({},d,{"data-test":"ring-island-content",className:g}),u.createElement("div",{tabIndex:0,"data-scrollable-container":!0,className:_,ref:this.setScrollableNodeAndCalculatePosition,onScroll:l?this.calculateScrollPosition:G},l&&u.createElement("div",{ref:this.setWrapper},n),!l&&n))}}]),n}(u.Component);(0,c._)(z,"propTypes",{children:p().node,className:p().string,scrollableWrapperClassName:p().string,fade:p().bool,bottomBorder:p().bool,onScroll:p().func,onScrollToBottom:p().func}),(0,c._)(z,"defaultProps",{fade:!0,bottomBorder:!1,onScroll:G,onScrollToBottom:G}),(0,u.forwardRef)((function(e,t){return u.createElement(y.Consumer,null,(function(n){var r=null!=n?{onScroll:n,bottomBorder:!0}:{};return u.createElement(z,(0,c.a)({},e,r,{ref:t}))}))})).displayName="ContentWrapper";var j=["children","className","narrow","withoutPaddings","data-test"],H=function(e){(0,s.Z)(n,e);var t=(0,l.Z)(n);function n(){return(0,a.Z)(this,n),t.apply(this,arguments)}return(0,o.Z)(n,[{key:"render",value:function(){var e,t=this.props,n=t.children,a=t.className,o=t.narrow,s=t.withoutPaddings,l=t["data-test"],d=(0,i.Z)(t,j),p=h()(b,a,(e={},(0,r.Z)(e,x,o),(0,r.Z)(e,N,s),e));return u.createElement("div",(0,c.a)({},d,{className:p,"data-test":(0,m.Z)("ring-island",l)}),n)}}]),n}(u.Component);(0,c._)(H,"propTypes",{children:p().node,className:p().string,narrow:p().bool,withoutPaddings:p().bool,"data-test":p().string});!function(e){var t;t=function(t){(0,s.Z)(r,t);var n=(0,l.Z)(r);function r(){var e;return(0,a.Z)(this,r),e=n.apply(this,arguments),(0,c._)((0,g.Z)(e),"state",{phase:null}),(0,c._)((0,g.Z)(e),"onContentScroll",(function(t){var n,r=t.scrollTop;if(t.scrollHeight-t.clientHeight>=_(36,20,null!==(n=e.state.phase)&&void 0!==n?n:0)){var i=Math.min(1,r/20);e.setState({phase:i})}})),e}return(0,o.Z)(r,[{key:"render",value:function(){return u.createElement(v.Provider,{value:this.state.phase},u.createElement(y.Provider,{value:this.onContentScroll},u.createElement(e,this.props)))}}]),r}(u.Component),(0,c._)(t,"propTypes",e.propTypes)}(H)},33344:function(e,t,n){"use strict";n.d(t,{Z:function(){return m}});var r=n(53782),i=n(22951),a=n(91976),o=n(47169),s=n(67591),l=n(94337),c=n(79636),u=n(22491),d=n(50889),p=n.n(d),f=["onConditionalClick","onPlainLeftClick","activeClassName","href","children"],h=function(e){return 0===e.button&&!e.altKey&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey},m=function(e){(0,s.Z)(n,e);var t=(0,l.Z)(n);function n(){var e;return(0,i.Z)(this,n),e=t.apply(this,arguments),(0,c._)((0,o.Z)(e),"onClick",(function(t){var n=e.props,r=n.onClick,i=n.onConditionalClick,a=n.onPlainLeftClick,o=h(t);r&&r(t),i&&i(o,t),a&&o&&(t.preventDefault(),a(t))})),e}return(0,a.Z)(n,[{key:"render",value:function(){var e=this.props,t=(e.onConditionalClick,e.onPlainLeftClick,e.activeClassName,e.href),n=e.children,i=(0,r.Z)(e,f);return u.createElement("a",(0,c.a)({href:t},i,{onClick:this.onClick}),n)}}]),n}(u.PureComponent);(0,c._)(m,"propTypes",{onClick:p().func,onPlainLeftClick:p().func,onConditionalClick:p().func,activeClassName:p().string,href:p().string.isRequired,children:p().node.isRequired})},62994:function(e,t,n){"use strict";n.d(t,{ZP:function(){return C},g8:function(){return T}});var r=n(50189),i=n(64649),a=n(53782),o=n(22951),s=n(91976),l=n(67591),c=n(94337),u=n(79636),d=(n(96144),n(22491)),p=n(50889),f=n.n(p),h=n(71894),m=n.n(h),g=n(97893),_=n(75838),v=n(33344),y=n(71541),b=["active","inherit","pseudo","hover","className","data-test","href","innerClassName","children","onPlainLeftClick","onClick"],E=!1;var S=(0,g.Z)((function(e){function t(t){var n=t.className,r=t.children,i=m()(y.m.inner,n,e);return d.createElement("span",{className:i},r)}return t.propTypes={className:f().string,children:f().node},(0,d.memo)(t)}));function T(e){var t,n="string"!==typeof e&&e!==v.Z;return t=function(t){(0,l.Z)(f,t);var p=(0,c.Z)(f);function f(){return(0,o.Z)(this,f),p.apply(this,arguments)}return(0,s.Z)(f,[{key:"getChildren",value:function(){var e=this.props,t=e.children,n=e.innerClassName,r=S(n);return"function"===typeof t?t(r):d.createElement(r,null,t)}},{key:"render",value:function(){var t,o=this.props,s=o.active,l=o.inherit,c=o.pseudo,p=o.hover,f=o.className,h=o["data-test"],g=o.href,v=(o.innerClassName,o.children),S=o.onPlainLeftClick,T=o.onClick,C=(0,a.Z)(o,b),x=c||!n&&null==g,w=m()(y.m.link,f,(t={},(0,i.Z)(t,y.m.active,s),(0,i.Z)(t,y.m.inherit,l),(0,i.Z)(t,y.m.hover,p),(0,i.Z)(t,y.m.compatibilityUnderlineMode,E),(0,i.Z)(t,y.m.pseudo,x),(0,i.Z)(t,y.m.text,"function"!==typeof v),t)),O=C;return n&&!O.activeClassName&&(O=(0,r.Z)((0,r.Z)({},O),{},{activeClassName:y.m.active})),x?d.createElement("button",(0,u.a)({type:"button"},O,{className:w,onClick:T||S,"data-test":(0,_.Z)("ring-link",h)}),this.getChildren()):d.createElement(e,(0,u.a)({},O,{href:g,className:w,onClick:T,onPlainLeftClick:S,"data-test":(0,_.Z)("ring-link",h)}),this.getChildren())}}]),f}(d.PureComponent),(0,u._)(t,"propTypes",{className:f().string,innerClassName:f().string,active:f().bool,inherit:f().bool,pseudo:f().bool,hover:f().bool,children:f().oneOfType([f().node,f().func]),"data-test":f().string,href:f().string,onPlainLeftClick:f().func,onClick:f().func}),t}var C=T(v.Z)},4587:function(e,t,n){"use strict";var r,i;n.d(t,{BH:function(){return a},Dy:function(){return r},Ro:function(){return i}}),function(e){e[e.SEPARATOR=0]="SEPARATOR",e[e.LINK=1]="LINK",e[e.ITEM=2]="ITEM",e[e.HINT=3]="HINT",e[e.CUSTOM=4]="CUSTOM",e[e.TITLE=5]="TITLE",e[e.MARGIN=6]="MARGIN"}(r||(r={})),function(e){e[e.ITEM_PADDING=16]="ITEM_PADDING",e[e.ITEM_HEIGHT=32]="ITEM_HEIGHT",e[e.COMPACT_ITEM_HEIGHT=24]="COMPACT_ITEM_HEIGHT",e[e.SEPARATOR_HEIGHT=25]="SEPARATOR_HEIGHT",e[e.SEPARATOR_FIRST_HEIGHT=16]="SEPARATOR_FIRST_HEIGHT",e[e.SEPARATOR_TEXT_HEIGHT=18]="SEPARATOR_TEXT_HEIGHT",e[e.TITLE_HEIGHT=42]="TITLE_HEIGHT",e[e.INNER_PADDING=8]="INNER_PADDING",e[e.MARGIN=8]="MARGIN"}(i||(i={}));var a=r.ITEM},40331:function(e,t,n){"use strict";n.d(t,{Z:function(){return Y},t:function(){return Z}});var r=n(50189),i=n(53782),a=n(22951),o=n(91976),s=n(47169),l=n(67591),c=n(94337),u=n(79636),d=n(22491),p=n(50889),f=n.n(p),h=n(71894),m=n.n(h),g=n(40453),_=n(69749),v=n(38482),y=n(44878),b=n(38579),E=n.n(b),S=n(24755),T=n(75838),C=n(51231),x=n(60953),w=n(97893),O=n(52706),N=n(81975),R=n(85523),I=n(89365),A=n(31650),k=n(895),D=n(70692),M=n(56564),P=n(8578),L=n(4587),F=n(95344),B=(n(54048),n(77373),n(39489),n(37406),n(62994),n(96144),n(33344),n(71541),n(33435),n(75084),n(75446),n(78699),n(75095),n(48882),n(74357),n(48770),n(55398),n(8807),n(85794),["selectedLabel","originalModel"]);function U(){}var G=E()((function(){}),"No key passed for list item with non-string label. It is considered as a bad practice and has been deprecated, please provide a key.");var z=[L.Dy.SEPARATOR,L.Dy.TITLE,L.Dy.MARGIN];function j(e){return null!=e&&!z.includes(e.rgItemType)&&!e.disabled}var H=function(e){return e.activateFirstItem||e.activateSingleItem&&1===e.data.length},Z=(0,R.Z)(void 0,"ActiveItem"),Y=function(e){(0,l.Z)(n,e);var t=(0,c.Z)(n);function n(){var e,r;return(0,a.Z)(this,n),e=t.apply(this,arguments),r=(0,s.Z)(e),(0,u._)((0,s.Z)(e),"state",{activeIndex:null,prevActiveIndex:null,prevData:[],activeItem:null,needScrollToActive:!1,scrolling:!1,hasOverflow:!1,disabledHover:!1,scrolledToBottom:!1}),(0,u._)((0,s.Z)(e),"scheduleScrollListener",(0,x.Z)()),(0,u._)((0,s.Z)(e),"scheduleHoverListener",(0,x.Z)()),(0,u._)((0,s.Z)(e),"virtualizedList",void 0),(0,u._)((0,s.Z)(e),"unmounted",void 0),(0,u._)((0,s.Z)(e),"container",void 0),(0,u._)((0,s.Z)(e),"hoverHandler",(0,w.Z)((function(t){return function(){return e.scheduleHoverListener((function(){e.state.disabledHover||e.container&&e.setState({activeIndex:t,activeItem:e.props.data[t],needScrollToActive:!1})}))}}))),(0,u._)((0,s.Z)(e),"_activatableItems",!1),(0,u._)((0,s.Z)(e),"_bufferSize",10),(0,u._)((0,s.Z)(e),"sizeCacheKey",(function(t){if(0===t||t===e.props.data.length+1)return L.Dy.MARGIN;var n=e.props.data[t-1],r=1===t;switch(n.rgItemType){case L.Dy.SEPARATOR:case L.Dy.TITLE:return"".concat(n.rgItemType).concat(r?"_first":"").concat(n.description?"_desc":"");case L.Dy.MARGIN:return L.Dy.MARGIN;case L.Dy.CUSTOM:return"".concat(L.Dy.CUSTOM,"_").concat(n.key);case L.Dy.ITEM:case L.Dy.LINK:default:return n.details?"".concat(L.Dy.ITEM,"_").concat(n.details):L.Dy.ITEM}})),(0,u._)((0,s.Z)(e),"_cache",new y.t1({defaultHeight:e.defaultItemHeight(),fixedWidth:!0,keyMapper:e.sizeCacheKey})),(0,u._)((0,s.Z)(e),"_hasActivatableItems",(0,S.Z)((function(e){return e.some(j)}))),(0,u._)((0,s.Z)(e),"activateFirst",(function(){var t=e.props.data.findIndex(j);t>=0&&e.setState({activeIndex:t,activeItem:e.props.data[t],needScrollToActive:!0})})),(0,u._)((0,s.Z)(e),"selectHandler",(0,w.Z)((function(e){return function(t){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=r.props.data[e];!r.props.useMouseUp&&i.onClick?i.onClick(i,t):r.props.useMouseUp&&i.onMouseUp&&i.onMouseUp(i,t),r.props.onSelect&&r.props.onSelect(i,t,{tryKeepOpen:n})}}))),(0,u._)((0,s.Z)(e),"checkboxHandler",(0,w.Z)((function(t){return function(n){return e.selectHandler(t)(n,!0)}}))),(0,u._)((0,s.Z)(e),"upHandler",(function(t){var n,r=e.props,i=r.data,a=r.disableMoveOverflow,o=e.state.activeIndex;if(null===o||0===o){if(a)return;n=i.length-1}else n=o-1;e.moveHandler(n,e.upHandler,t)})),(0,u._)((0,s.Z)(e),"downHandler",(function(t){var n,r=e.props,i=r.data,a=r.disableMoveOverflow,o=r.disableMoveDownOverflow,s=e.state.activeIndex;if(null===s)n=0;else if(s+1===i.length){if(a||o)return;n=0}else n=s+1;e.moveHandler(n,e.downHandler,t)})),(0,u._)((0,s.Z)(e),"homeHandler",(function(t){e.moveHandler(0,e.downHandler,t)})),(0,u._)((0,s.Z)(e),"endHandler",(function(t){e.moveHandler(e.props.data.length-1,e.upHandler,t)})),(0,u._)((0,s.Z)(e),"onDocumentMouseMove",(function(){e.state.disabledHover&&e.setState({disabledHover:!1})})),(0,u._)((0,s.Z)(e),"onDocumentKeyDown",(function(t){e.state.disabledHover||[16,17,18,19,20,91].includes(t.keyCode)||e.setState({disabledHover:!0})})),(0,u._)((0,s.Z)(e),"mouseHandler",(function(){e.setState({scrolling:!1})})),(0,u._)((0,s.Z)(e),"scrollHandler",(function(){e.setState({scrolling:!0},e.scrollEndHandler)})),(0,u._)((0,s.Z)(e),"enterHandler",(function(t,n){if(null!==e.state.activeIndex){var r=e.props.data[e.state.activeIndex];return e.selectHandler(e.state.activeIndex)(t),r.href&&!t.defaultPrevented&&(null!=n&&["command+enter","ctrl+enter"].includes(n)?window.open(r.href,"_blank"):"shift+enter"===n?window.open(r.href):window.location.href=r.href),!1}return!0})),(0,u._)((0,s.Z)(e),"clearSelected",(function(){e.setState({activeIndex:null,needScrollToActive:!1})})),(0,u._)((0,s.Z)(e),"scrollEndHandler",(function(){return e.scheduleScrollListener((function(){var t=e.inner;if(t){var n=t.scrollHeight,r=e.defaultItemHeight()/2,i=t.scrollTop+t.clientHeight+r,a=n>0&&i>=n;e.unmounted||e.setState({scrolledToBottom:a}),a&&e.props.onScrollToBottom()}}))})),(0,u._)((0,s.Z)(e),"checkOverflow",(function(){e.inner&&e.setState({hasOverflow:e.inner.scrollHeight-e.inner.clientHeight>1})})),(0,u._)((0,s.Z)(e),"renderItem",(function(t){var n,r,a=t.index,o=void 0===a?1:a,s=t.style,l=t.isScrolling,c=void 0!==l&&l,u=t.parent,p=t.key,f=o-1,h=e.props.data[f],g=e.getId(h);if(0===o||o===e.props.data.length+1||h.rgItemType===L.Dy.MARGIN)n=p||"".concat(L.Dy.MARGIN,"_").concat(o),r=d.createElement("div",{style:{height:L.Ro.MARGIN}});else{h.selectedLabel,h.originalModel;var _=(0,i.Z)(h,B),v=_;v.url&&(v.href=v.url),v.href&&(v.rgItemType=L.Dy.LINK);var b=Object.assign({rgItemType:L.BH},_);n=p||g,b.hover=f===e.state.activeIndex,null!=b.hoverClassName&&b.hover&&(b.className=m()(b.className,b.hoverClassName)),b.onMouseOver=e.hoverHandler(f),b.tabIndex=-1,b.scrolling=c;var E,S=e.selectHandler(f);e.props.useMouseUp?b.onMouseUp=S:b.onClick=S,b.onCheckboxChange=e.checkboxHandler(f),null==b.compact&&(b.compact=e.props.compact);var T=1===o;switch(b.rgItemType){case L.Dy.SEPARATOR:E=M.Z,b.isFirst=T;break;case L.Dy.LINK:E=I.Z,e.addItemDataTestToProp(b);break;case L.Dy.ITEM:E=A.Z,e.addItemDataTestToProp(b);break;case L.Dy.CUSTOM:E=k.Z,e.addItemDataTestToProp(b);break;case L.Dy.TITLE:b.isFirst=T,E=D.Z;break;default:throw new Error("Unknown menu element type: ".concat(b.rgItemType))}r=d.createElement(E,b)}return u?d.createElement(y.Z8,{cache:e._cache,key:n,parent:u,rowIndex:o,columnIndex:0},(function(e){var t=e.registerChild;return d.createElement("div",{ref:t,style:s,role:"row",id:g},d.createElement("div",{role:"cell"},r))})):d.createElement("div",{role:"row",id:g,key:n},d.createElement("div",{role:"cell"},(0,d.cloneElement)(r)))})),(0,u._)((0,s.Z)(e),"addItemDataTestToProp",(function(e){return e["data-test"]=(0,T.Z)("ring-list-item",e["data-test"]),e})),(0,u._)((0,s.Z)(e),"virtualizedListRef",(function(t){e.virtualizedList=t})),(0,u._)((0,s.Z)(e),"containerRef",(function(t){e.container=t})),(0,u._)((0,s.Z)(e),"_inner",void 0),(0,u._)((0,s.Z)(e),"id",(0,C.Z)("list-")),(0,u._)((0,s.Z)(e),"shortcutsScope",e.id),(0,u._)((0,s.Z)(e),"shortcutsMap",{up:e.upHandler,down:e.downHandler,home:e.homeHandler,end:e.endHandler,enter:e.enterHandler,"meta+enter":e.enterHandler,"ctrl+enter":e.enterHandler,"command+enter":e.enterHandler,"shift+enter":e.enterHandler}),e}return(0,o.Z)(n,[{key:"componentDidMount",value:function(){document.addEventListener("mousemove",this.onDocumentMouseMove),document.addEventListener("keydown",this.onDocumentKeyDown,!0),null==this.props.activeIndex&&H(this.props)&&this.activateFirst()}},{key:"shouldComponentUpdate",value:function(e,t){var n=this;return e!==this.props||Object.keys(t).some((function(e){return t[e]!==n.state[e]}))}},{key:"componentDidUpdate",value:function(e){this.virtualizedList&&e.data!==this.props.data&&this.virtualizedList.recomputeRowHeights(),null==this.props.activeIndex&&this.props.data!==e.data&&H(this.props)&&this.activateFirst(),this.checkOverflow()}},{key:"componentWillUnmount",value:function(){this.unmounted=!0,document.removeEventListener("mousemove",this.onDocumentMouseMove),document.removeEventListener("keydown",this.onDocumentKeyDown,!0)}},{key:"hasActivatableItems",value:function(){return this._hasActivatableItems(this.props.data)}},{key:"moveHandler",value:function(e,t,n){var r;if(0!==this.props.data.length&&this.hasActivatableItems()){r=this.props.data.length=0&&Object.assign(l,{activeIndex:c,activeItem:a[c]})}return l}}]),n}(d.Component);(0,u._)(Y,"propTypes",{id:f().string,className:f().string,hint:f().node,hintOnSelection:f().string,data:f().array,maxHeight:f().number,activeIndex:f().number,restoreActiveIndex:f().bool,activateSingleItem:f().bool,activateFirstItem:f().bool,shortcuts:f().bool,onMouseOut:f().func,onSelect:f().func,onScrollToBottom:f().func,onResize:f().func,useMouseUp:f().bool,visible:f().bool,renderOptimization:f().bool,disableMoveOverflow:f().bool,disableMoveDownOverflow:f().bool,compact:f().bool,disableScrollToActive:f().bool,hidden:f().bool,ariaLabel:f().string}),(0,u._)(Y,"defaultProps",{data:[],restoreActiveIndex:!1,activateSingleItem:!1,activateFirstItem:!1,onMouseOut:U,onSelect:U,onScrollToBottom:U,onResize:U,shortcuts:!1,renderOptimization:!0,disableMoveDownOverflow:!1,ariaLabel:"List"}),(0,u._)(Y,"isItemType",(function(e,t){var n=t.rgItemType;return null==n&&(n=L.BH),n===e})),(0,u._)(Y,"ListHint",P.Z),(0,u._)(Y,"ListProps",{Type:L.Dy,Dimension:L.Ro})},895:function(e,t,n){"use strict";n.d(t,{Z:function(){return b}});var r=n(64649),i=n(53782),a=n(22951),o=n(91976),s=n(47169),l=n(67591),c=n(94337),u=n(79636),d=n(22491),p=n(50889),f=n.n(p),h=n(71894),m=n.n(h),g=n(75838),_=n(85794),v=n(95344),y=["scrolling","hover","className","disabled","template","rgItemType","tabIndex","onClick","onCheckboxChange","onMouseOver","onMouseUp","role","tagName"],b=function(e){(0,l.Z)(n,e);var t=(0,c.Z)(n);function n(){var e;return(0,a.Z)(this,n),e=t.apply(this,arguments),(0,u._)((0,s.Z)(e),"handleKeyPress",(function(t){var n=(0,_.Z)(t);"Enter"!==n&&" "!==n||e.props.onClick(t)})),e}return(0,o.Z)(n,[{key:"render",value:function(){var e,t=this.props,n=t.scrolling,a=t.hover,o=t.className,s=t.disabled,l=t.template,c=(t.rgItemType,t.tabIndex),u=t.onClick,p=(t.onCheckboxChange,t.onMouseOver),f=t.onMouseUp,h=t.role,_=t.tagName,b=(0,i.Z)(t,y),E=m()(v.m.item,o,(e={},(0,r.Z)(e,v.m.action,!s),(0,r.Z)(e,v.m.hover,a&&!s),(0,r.Z)(e,v.m.scrolling,n),e)),S=(0,g.Z)("ring-list-item-custom",{"ring-list-item-action":!s},b["data-test"]),T="function"===typeof l?l(this.props):l,C=_||"span";return d.createElement(C,{role:h||"button",tabIndex:c,onClick:u,onKeyPress:this.handleKeyPress,onMouseOver:p,onFocus:p,onMouseUp:f,className:E,"data-test":S},T)}}]),n}(d.PureComponent);b.propTypes={scrolling:f().bool.isRequired,hover:f().bool.isRequired,className:f().string,disabled:f().bool,rgItemType:f().number,tabIndex:f().number.isRequired,template:f().oneOfType([f().func,f().element,f().string]),onClick:f().func.isRequired,onMouseOver:f().func.isRequired,onMouseUp:f().func,onCheckboxChange:f().func.isRequired,role:f().string,tagName:f().string,"data-test":f().string}},8578:function(e,t,n){"use strict";n.d(t,{Z:function(){return h}});var r=n(22951),i=n(91976),a=n(67591),o=n(94337),s=n(79636),l=n(22491),c=n(50889),u=n.n(c),d=n(71894),p=n.n(d),f=n(95344),h=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,r.Z)(this,n),t.apply(this,arguments)}return(0,i.Z)(n,[{key:"render",value:function(){return l.createElement("span",{className:p()(f.m.item,f.m.hint),"data-test":"ring-list-hint"},this.props.label)}}]),n}(l.PureComponent);(0,s._)(h,"propTypes",{label:u().node})},31650:function(e,t,n){"use strict";n.d(t,{Z:function(){return C}});var r=n(64649),i=n(53782),a=n(22951),o=n(91976),s=n(47169),l=n(67591),c=n(94337),u=n(79636),d=n(22491),p=n(50889),f=n.n(p),h=n(71894),m=n.n(h),g=n(75838),_=n(33435),v=n(75446),y=n(48882),b=n(51231),E=n(95344),S=(n(52706),n(75084),n(78699),n(75095),n(8807),n(38579),n(74357),n(48770),n(55398),["scrolling","className","disabled","checkbox","avatar","subavatar","glyph","icon","rightGlyph","description","label","title","details","hover","rgItemType","level","tabIndex","compact","onClick","onCheckboxChange","onMouseOver","onMouseDown","onMouseUp","rightNodes","leftNodes","showGeneratedAvatar","username"]),T="resetButton_rui_8bff",C=function(e){(0,l.Z)(n,e);var t=(0,c.Z)(n);function n(){var e;return(0,a.Z)(this,n),e=t.apply(this,arguments),(0,u._)((0,s.Z)(e),"id",(0,b.Z)("list-item-")),(0,u._)((0,s.Z)(e),"stopBubbling",(function(e){return e.stopPropagation()})),(0,u._)((0,s.Z)(e),"_isString",(function(e){return"string"===typeof e||e instanceof String})),e}return(0,o.Z)(n,[{key:"render",value:function(){var e,t,n=this.props,a=n.scrolling,o=n.className,s=n.disabled,l=n.checkbox,c=n.avatar,u=n.subavatar,p=n.glyph,f=n.icon,h=n.rightGlyph,b=n.description,C=n.label,x=n.title,w=n.details,O=n.hover,N=(n.rgItemType,n.level),R=n.tabIndex,I=n.compact,A=n.onClick,k=n.onCheckboxChange,D=n.onMouseOver,M=n.onMouseDown,P=n.onMouseUp,L=n.rightNodes,F=n.leftNodes,B=n.showGeneratedAvatar,U=n.username,G=(0,i.Z)(n,S),z=B&&null!=U,j=void 0!==l&&(l||!(F||p||c||z)||O&&!s),H=m()(E.m.item,T,o,(e={},(0,r.Z)(e,E.m.action,!s),(0,r.Z)(e,E.m.hover,O&&!s),(0,r.Z)(e,E.m.compact,I),(0,r.Z)(e,E.m.scrolling,a),(0,r.Z)(e,E.m.disabled,s),e)),Z=m()((t={},(0,r.Z)(t,E.m.details,w),(0,r.Z)(t,E.m.padded,void 0!==f||void 0!==l||void 0!==p),t)),Y={paddingLeft:"".concat(8*(Number(N)||0)+16+(j?28:0),"px")},V=null;V=this._isString(x)?x:this._isString(C)?C:"";var q=(0,g.Z)({"ring-list-item":-1===(G["data-test"]||"").indexOf("ring-list-item"),"ring-list-item-action":!s,"ring-list-item-selected":l},G["data-test"]);return d.createElement("div",{className:E.m.itemContainer,"data-test":q},j&&d.createElement("div",{className:E.m.checkboxContainer},d.createElement(v.Z,{"aria-labelledby":this.id,checked:l,disabled:s,onChange:k,onClick:this.stopBubbling})),d.createElement("button",{id:this.id,type:"button",tabIndex:R,onClick:A,onMouseOver:D,onMouseDown:M,onFocus:D,onMouseUp:P,className:H,style:Y},d.createElement("div",{className:E.m.top,onMouseOut:this.stopBubbling,onBlur:this.stopBubbling},!j&&d.createElement("div",{className:E.m.left},F,p&&d.createElement(y.ZP,{className:E.m.glyph,glyph:p,size:this.props.iconSize}),(c||z)&&d.createElement(_.Z,{className:E.m.avatar,url:c,size:_.$.Size20,subavatar:u,username:U})),d.createElement("span",{className:E.m.label,title:V,"data-test":"ring-list-item-label"},C),b&&d.createElement("span",{className:E.m.description,"data-test":"ring-list-item-description"},b),d.createElement("div",{className:E.m.right},h&&d.createElement(y.ZP,{className:E.m.rightGlyph,glyph:h,size:this.props.iconSize}),f&&d.createElement("div",{className:E.m.icon,style:{backgroundImage:'url("'.concat(f,'")')}}),L)),w&&d.createElement("div",{className:Z},w)))}}]),n}(d.PureComponent);C.propTypes={scrolling:f().bool,hover:f().bool,details:f().string,disabled:f().bool,className:f().string,tabIndex:f().number,checkbox:f().bool,description:f().oneOfType([f().string,f().element,f().array]),showGeneratedAvatar:f().bool,username:f().string,avatar:f().string,subavatar:f().string,glyph:f().oneOfType([f().string,f().elementType]),icon:f().string,iconSize:f().number,rightNodes:f().oneOfType([f().string,f().element,f().array]),leftNodes:f().oneOfType([f().string,f().element,f().array]),label:f().oneOfType([f().string,f().element]),title:f().string,level:f().number,rgItemType:f().number,rightGlyph:f().oneOfType([f().string,f().elementType]),compact:f().bool,onClick:f().func,onCheckboxChange:f().func,onMouseOver:f().func,onMouseDown:f().func,onMouseUp:f().func,"data-test":f().string}},89365:function(e,t,n){"use strict";n.d(t,{Z:function(){return b}});var r=n(50189),i=n(64649),a=n(53782),o=n(22951),s=n(91976),l=n(67591),c=n(94337),u=n(79636),d=n(22491),p=n(50889),f=n.n(p),h=n(71894),m=n.n(h),g=n(62994),_=n(75838),v=n(95344),y=(n(96144),n(33344),n(71541),["scrolling","data-test","className","label","hover","description","rgItemType","url","onCheckboxChange","disabled","LinkComponent","compact","hoverClassName","children"]),b=function(e){(0,l.Z)(n,e);var t=(0,c.Z)(n);function n(){return(0,o.Z)(this,n),t.apply(this,arguments)}return(0,s.Z)(n,[{key:"render",value:function(){var e,t=this.props,n=t.scrolling,r=t["data-test"],o=t.className,s=t.label,l=t.hover,c=(t.description,t.rgItemType,t.url,t.onCheckboxChange,t.disabled),p=t.LinkComponent,f=t.compact,h=(t.hoverClassName,t.children),b=(0,a.Z)(t,y),E=m()(v.m.item,o,(e={},(0,i.Z)(e,v.m.actionLink,!c),(0,i.Z)(e,v.m.compact,f),(0,i.Z)(e,v.m.scrolling,n),e)),S=p?(0,g.g8)(p):g.ZP;return d.createElement(S,(0,u.a)({pseudo:!this.props.href},b,{hover:l&&!c,className:E,"data-test":(0,_.Z)("ring-list-link",r)}),null!==s&&void 0!==s?s:h)}}]),n}(d.PureComponent);b.propTypes=(0,r.Z)((0,r.Z)({},g.ZP.propTypes),{},{description:f().string,label:f().oneOfType([f().element,f().string,f().func]),rgItemType:f().number,scrolling:f().bool.isRequired,url:f().string,LinkComponent:f().oneOfType([f().instanceOf(d.Component),f().func,f().string]),onCheckboxChange:f().func.isRequired,compact:f().bool})},56564:function(e,t,n){"use strict";n.d(t,{Z:function(){return h}});var r=n(64649),i=n(22951),a=n(91976),o=n(67591),s=n(94337),l=n(22491),c=n(50889),u=n.n(c),d=n(71894),p=n.n(d),f=n(95344),h=function(e){(0,o.Z)(n,e);var t=(0,s.Z)(n);function n(){return(0,i.Z)(this,n),t.apply(this,arguments)}return(0,a.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.description,n=e.isFirst,i=e.className,a=p()(f.m.separator,i,(0,r.Z)({},f.m.separator_first,n));return l.createElement("span",{className:a},t)}}]),n}(l.PureComponent);h.propTypes={className:u().string,description:u().oneOfType([u().element,u().string]),isFirst:u().bool}},70692:function(e,t,n){"use strict";n.d(t,{Z:function(){return h}});var r=n(64649),i=n(22951),a=n(91976),o=n(67591),s=n(94337),l=n(22491),c=n(50889),u=n.n(c),d=n(71894),p=n.n(d),f=n(95344),h=function(e){(0,o.Z)(n,e);var t=(0,s.Z)(n);function n(){return(0,i.Z)(this,n),t.apply(this,arguments)}return(0,a.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.className,n=e.description,i=e.label,a=e.isFirst,o=p()(f.m.title,t,(0,r.Z)({},f.m.title_first,a));return l.createElement("span",{className:o,"data-test":"ring-list-title"},l.createElement("span",{className:p()(f.m.label,f.m.text),"data-test":"ring-list-title-label"},i),l.createElement("div",{className:f.m.description,"data-test":"ring-list-title-description"},n))}}]),n}(l.PureComponent);h.propTypes={className:u().string,description:u().oneOfType([u().element,u().string]),label:u().oneOfType([u().element,u().string]),isFirst:u().bool}},75516:function(e,t,n){"use strict";n.d(t,{Z:function(){return _}});var r=n(53782),i=n(22951),a=n(91976),o=n(67591),s=n(94337),l=n(79636),c=n(22491),u=n(71894),d=n.n(u),p=n(50889),f=n.n(p),h=n(75838),m=n(56684),g=["className","data-test","children"],_=function(e){(0,o.Z)(n,e);var t=(0,s.Z)(n);function n(){return(0,i.Z)(this,n),t.apply(this,arguments)}return(0,a.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.className,n=e["data-test"],i=e.children,a=(0,r.Z)(e,g),o=d()(m.m.loader,t),s=c.createElement("div",(0,l.a)({},a,{"data-test":(0,h.Z)("ring-loader-inline",n),className:o}));return i?c.createElement(c.Fragment,null,s,c.createElement("span",{className:m.m.children},i)):s}}]),n}(c.PureComponent);(0,l._)(_,"propTypes",{className:f().string,"data-test":f().string,children:f().node})},25610:function(e,t,n){"use strict";n.d(t,{Z:function(){return xa}});var r={};n.r(r),n.d(r,{attentionMarkers:function(){return kt},contentInitial:function(){return wt},disable:function(){return Dt},document:function(){return xt},flow:function(){return Nt},flowInitial:function(){return Ot},insideSpan:function(){return At},string:function(){return Rt},text:function(){return It}});var i={};n.r(i),n.d(i,{boolean:function(){return On},booleanish:function(){return Nn},commaOrSpaceSeparated:function(){return Dn},commaSeparated:function(){return kn},number:function(){return In},overloadedBoolean:function(){return Rn},spaceSeparated:function(){return An}});var a=n(50189),o=n(649),s=n(64649),l=n(53782),c=n(22951),u=n(91976),d=n(67591),p=n(94337),f=n(79636),h=n(22491),m=n(50889),g=n.n(m),_=n(85331),v=n(33940);function y(e){return e&&"object"===(0,v.Z)(e)?"position"in e||"type"in e?E(e.position):"start"in e||"end"in e?E(e):"line"in e||"column"in e?b(e):"":""}function b(e){return S(e&&e.line)+":"+S(e&&e.column)}function E(e){return b(e&&e.start)+"-"+b(e&&e.end)}function S(e){return e&&"number"===typeof e?e:1}var T=function(e){(0,d.Z)(n,e);var t=(0,p.Z)(n);function n(e,r,i){var a;(0,c.Z)(this,n);var o=[null,null],s={start:{line:null,column:null},end:{line:null,column:null}};if(a=t.call(this),"string"===typeof r&&(i=r,r=void 0),"string"===typeof i){var l=i.indexOf(":");-1===l?o[1]=i:(o[0]=i.slice(0,l),o[1]=i.slice(l+1))}return r&&("type"in r||"position"in r?r.position&&(s=r.position):"start"in r||"end"in r?s=r:("line"in r||"column"in r)&&(s.start=r)),a.name=y(r)||"1:1",a.message="object"===(0,v.Z)(e)?e.message:e,a.stack="","object"===(0,v.Z)(e)&&e.stack&&(a.stack=e.stack),a.reason=a.message,a.fatal,a.line=s.start.line,a.column=s.start.column,a.position=s,a.source=o[0],a.ruleId=o[1],a.file,a.actual,a.expected,a.url,a.note,a}return(0,u.Z)(n)}((0,n(37373).Z)(Error));T.prototype.file="",T.prototype.name="",T.prototype.reason="",T.prototype.message="",T.prototype.stack="",T.prototype.fatal=null,T.prototype.column=null,T.prototype.line=null,T.prototype.source=null,T.prototype.ruleId=null,T.prototype.position=null;var C={basename:function(e,t){if(void 0!==t&&"string"!==typeof t)throw new TypeError('"ext" argument must be a string');w(e);var n,r=0,i=-1,a=e.length;if(void 0===t||0===t.length||t.length>e.length){for(;a--;)if(47===e.charCodeAt(a)){if(n){r=a+1;break}}else i<0&&(n=!0,i=a+1);return i<0?"":e.slice(r,i)}if(t===e)return"";var o=-1,s=t.length-1;for(;a--;)if(47===e.charCodeAt(a)){if(n){r=a+1;break}}else o<0&&(n=!0,o=a+1),s>-1&&(e.charCodeAt(a)===t.charCodeAt(s--)?s<0&&(i=a):(s=-1,i=o));r===i?i=o:i<0&&(i=e.length);return e.slice(r,i)},dirname:function(e){if(w(e),0===e.length)return".";var t,n=-1,r=e.length;for(;--r;)if(47===e.charCodeAt(r)){if(t){n=r;break}}else t||(t=!0);return n<0?47===e.charCodeAt(0)?"/":".":1===n&&47===e.charCodeAt(0)?"//":e.slice(0,n)},extname:function(e){w(e);var t,n=e.length,r=-1,i=0,a=-1,o=0;for(;n--;){var s=e.charCodeAt(n);if(47!==s)r<0&&(t=!0,r=n+1),46===s?a<0?a=n:1!==o&&(o=1):a>-1&&(o=-1);else if(t){i=n+1;break}}if(a<0||r<0||0===o||1===o&&a===r-1&&a===i+1)return"";return e.slice(a,r)},join:function(){for(var e,t=-1,n=arguments.length,r=new Array(n),i=0;i2){if((r=i.lastIndexOf("/"))!==i.length-1){r<0?(i="",a=0):a=(i=i.slice(0,r)).length-1-i.lastIndexOf("/"),o=l,s=0;continue}}else if(i.length>0){i="",a=0,o=l,s=0;continue}t&&(i=i.length>0?i+"/..":"..",a=2)}else i.length>0?i+="/"+e.slice(o+1,l):i=e.slice(o+1,l),a=l-o-1;o=l,s=0}else 46===n&&s>-1?s++:s=-1}return i}(e,!t);return 0!==n.length||t||(n="."),n.length>0&&47===e.charCodeAt(e.length-1)&&(n+="/"),t?"/"+n:n}function w(e){if("string"!==typeof e)throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}var O={cwd:function(){return"/"}};function N(e){return null!==e&&"object"===(0,v.Z)(e)&&e.href&&e.origin}function R(e){if("string"===typeof e)e=new URL(e);else if(!N(e)){var t=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code="ERR_INVALID_ARG_TYPE",t}if("file:"!==e.protocol){var n=new TypeError("The URL must be of scheme file");throw n.code="ERR_INVALID_URL_SCHEME",n}return function(e){if(""!==e.hostname){var t=new TypeError('File URL host must be "localhost" or empty on darwin');throw t.code="ERR_INVALID_FILE_URL_HOST",t}var n=e.pathname,r=-1;for(;++ra.length;l&&a.push(r);try{s=e.apply(this,a)}catch(u){var c=u;if(l&&n)throw c;return r(c)}l||(s instanceof Promise?s.then(i,r):s instanceof Error?r(s):i(s))};function r(e){if(!n){n=!0;for(var r=arguments.length,i=new Array(r>1?r-1:0),a=1;a1?l-1:0),u=1;u1?n-1:0),l=1;la?0:a+t:t>a?a:t,n=n>0?n:0,r.length<1e4)(i=Array.from(r)).unshift(t,n),[].splice.apply(e,i);else for(n&&[].splice.apply(e,[t,n]);o0?(X(e,e.length,0,t),e):t}var ee={}.hasOwnProperty;function te(e){for(var t={},n=-1;++nr))return;for(var c,u,d=i.events.length,p=d;p--;)if("exit"===i.events[p][0]&&"chunkFlow"===i.events[p][1].type){if(c){u=i.events[p][1].end;break}c=!0}for(_(o),l=d;lt;){var r=a[n];i.containerState=r[1],r[0].exit.call(i,e)}a.length=t}function v(){t.write([null]),n=void 0,t=void 0,i.containerState._closeFlow=void 0}}},be={tokenize:function(e,t,n){return _e(e,e.attempt(this.parser.constructs.document,t,n),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}};var Ee={tokenize:function(e,t,n){return _e(e,(function(e){return null===e||pe(e)?t(e):n(e)}),"linePrefix")},partial:!0};function Se(e){for(var t,n,r,i,a,o,s,l={},c=-1;++c=4?t(i):e.interrupt(r.parser.constructs.flow,n,t)(i)}},partial:!0};var we={tokenize:function(e){var t=this,n=e.attempt(Ee,(function(r){if(null===r)return void e.consume(r);return e.enter("lineEndingBlank"),e.consume(r),e.exit("lineEndingBlank"),t.currentConstruct=void 0,n}),e.attempt(this.parser.constructs.flowInitial,r,_e(e,e.attempt(this.parser.constructs.flow,r,e.attempt(Ce,r)),"linePrefix")));return n;function r(r){if(null!==r)return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),t.currentConstruct=void 0,n;e.consume(r)}}};var Oe={resolveAll:Ae()},Ne=Ie("string"),Re=Ie("text");function Ie(e){return{tokenize:function(t){var n=this,r=this.parser.constructs[e],i=t.attempt(r,a,o);return a;function a(e){return l(e)?i(e):o(e)}function o(e){if(null!==e)return t.enter("data"),t.consume(e),s;t.consume(e)}function s(e){return l(e)?(t.exit("data"),i(e)):(t.consume(e),s)}function l(e){if(null===e)return!0;var t=r[e],i=-1;if(t)for(;++i-1&&(n[0]=n[0].slice(i)),o>0&&n.push(e[a].slice(0,o)));return n}(s,e)}function f(){return Object.assign({},r)}function h(){for(var e;r._indexc?n(i):(e.consume(i),h):41===i?u--?(e.consume(i),h):(e.exit("chunkString"),e.exit(s),e.exit(o),e.exit(r),t(i)):null===i||de(i)?u?n(i):(e.exit("chunkString"),e.exit(s),e.exit(o),e.exit(r),t(i)):ue(i)?n(i):(e.consume(i),92===i?m:h)}function m(t){return 40===t||41===t||92===t?(e.consume(t),h):h(t)}}function ze(e,t,n,r,i,a){var o,s=this,l=0;return function(t){return e.enter(r),e.enter(i),e.consume(t),e.exit(i),e.enter(a),c};function c(d){return null===d||91===d||93===d&&!o||94===d&&!l&&"_hiddenFootnoteSupport"in s.parser.constructs||l>999?n(d):93===d?(e.exit(a),e.enter(i),e.consume(d),e.exit(i),e.exit(r),t):pe(d)?(e.enter("lineEnding"),e.consume(d),e.exit("lineEnding"),c):(e.enter("chunkString",{contentType:"string"}),u(d))}function u(t){return null===t||91===t||93===t||pe(t)||l++>999?(e.exit("chunkString"),c(t)):(e.consume(t),o=o||!fe(t),92===t?d:u)}function d(t){return 91===t||92===t||93===t?(e.consume(t),l++,u):u(t)}}function je(e,t,n,r,i,a){var o;return function(t){return e.enter(r),e.enter(i),e.consume(t),e.exit(i),o=40===t?41:t,s};function s(n){return n===o?(e.enter(i),e.consume(n),e.exit(i),e.exit(r),t):(e.enter(a),l(n))}function l(t){return t===o?(e.exit(a),s(o)):null===t?n(t):pe(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),_e(e,l,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),c(t))}function c(t){return t===o||null===t||pe(t)?(e.exit("chunkString"),l(t)):(e.consume(t),92===t?u:c)}function u(t){return t===o||92===t?(e.consume(t),c):c(t)}}function He(e,t){var n;return function r(i){if(pe(i))return e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),n=!0,r;if(fe(i))return _e(e,r,n?"linePrefix":"lineSuffix")(i);return t(i)}}function Ze(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}var Ye={name:"definition",tokenize:function(e,t,n){var r,i=this;return function(t){return e.enter("definition"),ze.call(i,e,a,n,"definitionLabel","definitionLabelMarker","definitionLabelString")(t)};function a(t){return r=Ze(i.sliceSerialize(i.events[i.events.length-1][1]).slice(1,-1)),58===t?(e.enter("definitionMarker"),e.consume(t),e.exit("definitionMarker"),He(e,Ge(e,e.attempt(Ve,_e(e,o,"whitespace"),_e(e,o,"whitespace")),n,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString"))):n(t)}function o(a){return null===a||pe(a)?(e.exit("definition"),i.parser.defined.includes(r)||i.parser.defined.push(r),t(a)):n(a)}}},Ve={tokenize:function(e,t,n){return function(t){return de(t)?He(e,r)(t):n(t)};function r(t){return 34===t||39===t||40===t?je(e,_e(e,i,"whitespace"),n,"definitionTitle","definitionTitleMarker","definitionTitleString")(t):n(t)}function i(e){return null===e||pe(e)?t(e):n(e)}},partial:!0};var qe={name:"codeIndented",tokenize:function(e,t,n){var r=this;return function(t){return e.enter("codeIndented"),_e(e,i,"linePrefix",5)(t)};function i(e){var t=r.events[r.events.length-1];return t&&"linePrefix"===t[1].type&&t[2].sliceSerialize(t[1],!0).length>=4?a(e):n(e)}function a(t){return null===t?s(t):pe(t)?e.attempt(We,a,s)(t):(e.enter("codeFlowValue"),o(t))}function o(t){return null===t||pe(t)?(e.exit("codeFlowValue"),a(t)):(e.consume(t),o)}function s(n){return e.exit("codeIndented"),t(n)}}},We={tokenize:function(e,t,n){var r=this;return i;function i(t){return r.parser.lazy[r.now().line]?n(t):pe(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),i):_e(e,a,"linePrefix",5)(t)}function a(e){var a=r.events[r.events.length-1];return a&&"linePrefix"===a[1].type&&a[2].sliceSerialize(a[1],!0).length>=4?t(e):pe(e)?i(e):n(e)}},partial:!0};var $e={name:"headingAtx",tokenize:function(e,t,n){var r=this,i=0;return function(t){return e.enter("atxHeading"),e.enter("atxHeadingSequence"),a(t)};function a(s){return 35===s&&i++<6?(e.consume(s),a):null===s||de(s)?(e.exit("atxHeadingSequence"),r.interrupt?t(s):o(s)):n(s)}function o(n){return 35===n?(e.enter("atxHeadingSequence"),s(n)):null===n||pe(n)?(e.exit("atxHeading"),t(n)):fe(n)?_e(e,o,"whitespace")(n):(e.enter("atxHeadingText"),l(n))}function s(t){return 35===t?(e.consume(t),s):(e.exit("atxHeadingSequence"),o(t))}function l(t){return null===t||35===t||de(t)?(e.exit("atxHeadingText"),o(t)):(e.consume(t),l)}},resolve:function(e,t){var n,r,i=e.length-2,a=3;"whitespace"===e[a][1].type&&(a+=2);i-2>a&&"whitespace"===e[i][1].type&&(i-=2);"atxHeadingSequence"===e[i][1].type&&(a===i-1||i-4>a&&"whitespace"===e[i-2][1].type)&&(i-=a+1===i?2:4);i>a&&X(e,a,i-a+1,[["enter",n={type:"atxHeadingText",start:e[a][1].start,end:e[i][1].end},t],["enter",r={type:"chunkText",start:e[a][1].start,end:e[i][1].end,contentType:"text"},t],["exit",r,t],["exit",n,t]]);return e}};var Ke={name:"setextUnderline",tokenize:function(e,t,n){var r,i,a=this,o=a.events.length;for(;o--;)if("lineEnding"!==a.events[o][1].type&&"linePrefix"!==a.events[o][1].type&&"content"!==a.events[o][1].type){i="paragraph"===a.events[o][1].type;break}return function(t){if(!a.parser.lazy[a.now().line]&&(a.interrupt||i))return e.enter("setextHeadingLine"),e.enter("setextHeadingLineSequence"),r=t,s(t);return n(t)};function s(t){return t===r?(e.consume(t),s):(e.exit("setextHeadingLineSequence"),_e(e,l,"lineSuffix")(t))}function l(r){return null===r||pe(r)?(e.exit("setextHeadingLine"),t(r)):n(r)}},resolveTo:function(e,t){var n,r,i,a=e.length;for(;a--;)if("enter"===e[a][0]){if("content"===e[a][1].type){n=a;break}"paragraph"===e[a][1].type&&(r=a)}else"content"===e[a][1].type&&e.splice(a,1),i||"definition"!==e[a][1].type||(i=a);var o={type:"setextHeading",start:Object.assign({},e[r][1].start),end:Object.assign({},e[e.length-1][1].end)};e[r][1].type="setextHeadingText",i?(e.splice(r,0,["enter",o,t]),e.splice(i+1,0,["exit",e[n][1],t]),e[n][1].end=Object.assign({},e[i][1].end)):e[n][1]=o;return e.push(["exit",o,t]),e}};var Qe=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],Xe=["pre","script","style","textarea"],Je={name:"htmlFlow",tokenize:function(e,t,n){var r,i,a,o,s,l=this;return function(t){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(t),c};function c(o){return 33===o?(e.consume(o),u):47===o?(e.consume(o),f):63===o?(e.consume(o),r=3,l.interrupt?t:M):ie(o)?(e.consume(o),a=String.fromCharCode(o),i=!0,h):n(o)}function u(i){return 45===i?(e.consume(i),r=2,d):91===i?(e.consume(i),r=5,a="CDATA[",o=0,p):ie(i)?(e.consume(i),r=4,l.interrupt?t:M):n(i)}function d(r){return 45===r?(e.consume(r),l.interrupt?t:M):n(r)}function p(r){return r===a.charCodeAt(o++)?(e.consume(r),o===a.length?l.interrupt?t:w:p):n(r)}function f(t){return ie(t)?(e.consume(t),a=String.fromCharCode(t),h):n(t)}function h(o){return null===o||47===o||62===o||de(o)?47!==o&&i&&Xe.includes(a.toLowerCase())?(r=1,l.interrupt?t(o):w(o)):Qe.includes(a.toLowerCase())?(r=6,47===o?(e.consume(o),m):l.interrupt?t(o):w(o)):(r=7,l.interrupt&&!l.parser.lazy[l.now().line]?n(o):i?_(o):g(o)):45===o||se(o)?(e.consume(o),a+=String.fromCharCode(o),h):n(o)}function m(r){return 62===r?(e.consume(r),l.interrupt?t:w):n(r)}function g(t){return fe(t)?(e.consume(t),g):C(t)}function _(t){return 47===t?(e.consume(t),C):58===t||95===t||ie(t)?(e.consume(t),v):fe(t)?(e.consume(t),_):C(t)}function v(t){return 45===t||46===t||58===t||95===t||se(t)?(e.consume(t),v):y(t)}function y(t){return 61===t?(e.consume(t),b):fe(t)?(e.consume(t),y):_(t)}function b(t){return null===t||60===t||61===t||62===t||96===t?n(t):34===t||39===t?(e.consume(t),s=t,E):fe(t)?(e.consume(t),b):(s=null,S(t))}function E(t){return null===t||pe(t)?n(t):t===s?(e.consume(t),T):(e.consume(t),E)}function S(t){return null===t||34===t||39===t||60===t||61===t||62===t||96===t||de(t)?y(t):(e.consume(t),S)}function T(e){return 47===e||62===e||fe(e)?_(e):n(e)}function C(t){return 62===t?(e.consume(t),x):n(t)}function x(t){return fe(t)?(e.consume(t),x):null===t||pe(t)?w(t):n(t)}function w(t){return 45===t&&2===r?(e.consume(t),I):60===t&&1===r?(e.consume(t),A):62===t&&4===r?(e.consume(t),P):63===t&&3===r?(e.consume(t),M):93===t&&5===r?(e.consume(t),D):!pe(t)||6!==r&&7!==r?null===t||pe(t)?O(t):(e.consume(t),w):e.check(et,P,O)(t)}function O(t){return e.exit("htmlFlowData"),N(t)}function N(t){return null===t?L(t):pe(t)?e.attempt({tokenize:R,partial:!0},N,L)(t):(e.enter("htmlFlowData"),w(t))}function R(e,t,n){return function(t){return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),r};function r(e){return l.parser.lazy[l.now().line]?n(e):t(e)}}function I(t){return 45===t?(e.consume(t),M):w(t)}function A(t){return 47===t?(e.consume(t),a="",k):w(t)}function k(t){return 62===t&&Xe.includes(a.toLowerCase())?(e.consume(t),P):ie(t)&&a.length<8?(e.consume(t),a+=String.fromCharCode(t),k):w(t)}function D(t){return 93===t?(e.consume(t),M):w(t)}function M(t){return 62===t?(e.consume(t),P):45===t&&2===r?(e.consume(t),M):w(t)}function P(t){return null===t||pe(t)?(e.exit("htmlFlowData"),L(t)):(e.consume(t),P)}function L(n){return e.exit("htmlFlow"),t(n)}},resolveTo:function(e){var t=e.length;for(;t--&&("enter"!==e[t][0]||"htmlFlow"!==e[t][1].type););t>1&&"linePrefix"===e[t-2][1].type&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2));return e},concrete:!0},et={tokenize:function(e,t,n){return function(r){return e.exit("htmlFlowData"),e.enter("lineEndingBlank"),e.consume(r),e.exit("lineEndingBlank"),e.attempt(Ee,t,n)}},partial:!0};var tt={name:"codeFenced",tokenize:function(e,t,n){var r,i=this,a={tokenize:function(e,t,n){var i=0;return _e(e,a,"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4);function a(t){return e.enter("codeFencedFence"),e.enter("codeFencedFenceSequence"),o(t)}function o(t){return t===r?(e.consume(t),i++,o):i1&&e[u][1].end.offset-e[u][1].start.offset>1?2:1;var d=Object.assign({},e[n][1].end),p=Object.assign({},e[u][1].start);ht(d,-s),ht(p,s),a={type:s>1?"strongSequence":"emphasisSequence",start:d,end:Object.assign({},e[n][1].end)},o={type:s>1?"strongSequence":"emphasisSequence",start:Object.assign({},e[u][1].start),end:p},i={type:s>1?"strongText":"emphasisText",start:Object.assign({},e[n][1].end),end:Object.assign({},e[u][1].start)},r={type:s>1?"strong":"emphasis",start:Object.assign({},a.start),end:Object.assign({},o.end)},e[n][1].end=Object.assign({},a.start),e[u][1].start=Object.assign({},o.end),l=[],e[n][1].end.offset-e[n][1].start.offset&&(l=J(l,[["enter",e[n][1],t],["exit",e[n][1],t]])),l=J(l,[["enter",r,t],["enter",a,t],["exit",a,t],["enter",i,t]]),l=J(l,De(t.parser.constructs.insideSpan.null,e.slice(n+1,u),t)),l=J(l,[["exit",i,t],["enter",o,t],["exit",o,t],["exit",r,t]]),e[u][1].end.offset-e[u][1].start.offset?(c=2,l=J(l,[["enter",e[u][1],t],["exit",e[u][1],t]])):c=0,X(e,n-1,u-n+3,l),u=n+l.length-c-2;break}u=-1;for(;++u13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||65535===(65535&n)||65534===(65535&n)||n>1114111?"\ufffd":String.fromCharCode(n)}var Lt=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function Ft(e){return e.replace(Lt,Bt)}function Bt(e,t,n){if(t)return t;if(35===n.charCodeAt(0)){var r=n.charCodeAt(1),i=120===r||88===r;return Pt(n.slice(i?2:1),i?16:10)}return rt(n)||e}var Ut={}.hasOwnProperty,Gt=function(e,t,n){return"string"!==typeof t&&(n=t,t=void 0),function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=zt({transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:l(ae),autolinkProtocol:R,autolinkEmail:R,atxHeading:l(te),blockQuote:l(K),characterEscape:R,characterReference:R,codeFenced:l(Q),codeFencedFenceInfo:c,codeFencedFenceMeta:c,codeIndented:l(Q,c),codeText:l(X,c),codeTextData:R,data:R,codeFlowValue:R,definition:l(J),definitionDestinationString:c,definitionLabelString:c,definitionTitleString:c,emphasis:l(ee),hardBreakEscape:l(ne),hardBreakTrailing:l(ne),htmlFlow:l(re,c),htmlFlowData:R,htmlText:l(re,c),htmlTextData:R,image:l(ie),label:c,link:l(ae),listItem:l(se),listItemValue:m,listOrdered:l(oe,h),listUnordered:l(oe),paragraph:l(le),reference:H,referenceString:c,resourceDestinationString:c,resourceTitleString:c,setextHeading:l(te),strong:l(ce),thematicBreak:l(de)},exit:{atxHeading:d(),atxHeadingSequence:x,autolink:d(),autolinkEmail:W,autolinkProtocol:q,blockQuote:d(),characterEscapeValue:I,characterReferenceMarkerHexadecimal:Y,characterReferenceMarkerNumeric:Y,characterReferenceValue:V,codeFenced:d(b),codeFencedFence:v,codeFencedFenceInfo:g,codeFencedFenceMeta:_,codeFlowValue:I,codeIndented:d(E),codeText:d(P),codeTextData:I,data:I,definition:d(),definitionDestinationString:C,definitionLabelString:S,definitionTitleString:T,emphasis:d(),hardBreakEscape:d(k),hardBreakTrailing:d(k),htmlFlow:d(D),htmlFlowData:I,htmlText:d(M),htmlTextData:I,image:d(F),label:U,labelText:B,lineEnding:A,link:d(L),listItem:d(),listOrdered:d(),listUnordered:d(),paragraph:d(),referenceString:Z,resourceDestinationString:G,resourceTitleString:z,resource:j,setextHeading:d(N),setextHeadingLineSequence:O,setextHeadingText:w,strong:d(),thematicBreak:d()}},e.mdastExtensions||[]),n={};return r;function r(e){for(var n={type:"root",children:[]},r=[],l=[],d={stack:[n],tokenStack:r,config:t,enter:u,exit:p,buffer:c,resume:f,setData:a,getData:o},h=-1;++h0){var g=r[r.length-1];(g[1]||Ht).call(d,void 0,g[0])}for(n.position={start:s(e.length>0?e[0][1].start:{line:1,column:1,offset:0}),end:s(e.length>0?e[e.length-2][1].end:{line:1,column:1,offset:0})},h=-1;++h0&&void 0!==arguments[0]?arguments[0]:{},t=te([r].concat(e.extensions||[])),n={defined:[],lazy:{},constructs:t,content:i(ve),document:i(ye),flow:i(we),string:i(Ne),text:i(Re)};return n;function i(e){return function(t){return Me(n,e,t)}}}(n).document().write(function(){var e,t=1,n="",r=!0;return function(i,a,o){var s,l,c,u,d,p=[];for(i=n+i.toString(a),c=0,n="",r&&(65279===i.charCodeAt(0)&&c++,r=void 0);c":"")+")"}));return d;function d(){var c,u,d,p=[];if((!t||i(o,s,l[l.length-1]||null))&&(p=function(e){if(Array.isArray(e))return e;if("number"===typeof e)return[true,e];return[e]}(n(o,l)),false===p[0]))return p;if(o.children&&"skip"!==p[0])for(u=(r?o.children.length:-1)+a,d=l.concat(o);u>-1&&u-1?n.offset:null}}}var tn={}.hasOwnProperty;function nn(e){return String(e||"").toUpperCase()}var rn={}.hasOwnProperty;function an(e,t){var n=t.data||{};return"value"in t&&!(rn.call(n,"hName")||rn.call(n,"hProperties")||rn.call(n,"hChildren"))?e.augment(t,Yt("text",t.value)):e(t,"div",ln(e,t))}function on(e,t,n){var r,i=t&&t.type;if(!i)throw new Error("Expected node, got `"+t+"`");return("function"===typeof(r=rn.call(e.handlers,i)?e.handlers[i]:e.passThrough&&e.passThrough.includes(i)?sn:e.unknownHandler)?r:an)(e,t,n)}function sn(e,t){return"children"in t?(0,a.Z)((0,a.Z)({},t),{},{children:ln(e,t)}):t}function ln(e,t){var n=[];if("children"in t)for(var r=t.children,i=-1;++i55295&&a<57344){var s=e.charCodeAt(n+1);a<56320&&s>56319&&s<57344?(o=String.fromCharCode(a,s),i=1):o="\ufffd"}else o=String.fromCharCode(a);o&&(t.push(e.slice(r,n),encodeURIComponent(o)),r=n+i+1,o=""),i&&(n+=i,i=0)}return t.join("")+e.slice(r)}function un(e,t){var n=[],r=-1;for(t&&n.push(Yt("text","\n"));++r0&&n.push(Yt("text","\n")),n}function dn(e,t){var n,r=String(t.identifier),i=cn(r.toLowerCase()),a=e.footnoteOrder.indexOf(r);-1===a?(e.footnoteOrder.push(r),e.footnoteCounts[r]=1,n=e.footnoteOrder.length):(e.footnoteCounts[r]++,n=a+1);var o=e.footnoteCounts[r];return e(t,"sup",[e(t.position,"a",{href:"#"+e.clobberPrefix+"fn-"+i,id:e.clobberPrefix+"fnref-"+i+(o>1?"-"+o:""),dataFootnoteRef:!0,ariaDescribedBy:"footnote-label"},[Yt("text",String(n))])])}function pn(e,t){var n=t.referenceType,r="]";if("collapsed"===n?r+="[]":"full"===n&&(r+="["+(t.label||t.identifier)+"]"),"imageReference"===t.type)return Yt("text","!["+t.alt+r);var i=ln(e,t),a=i[0];a&&"text"===a.type?a.value="["+a.value:i.unshift(Yt("text","["));var o=i[i.length-1];return o&&"text"===o.type?o.value+=r:i.push(Yt("text",r)),i}function fn(e){var t=e.spread;return void 0===t||null===t?e.children.length>1:t}function hn(e,t,n){var r=0,i=e.length;if(t)for(var a=e.codePointAt(r);9===a||32===a;)r++,a=e.codePointAt(r);if(n)for(var o=e.codePointAt(i-1);9===o||32===o;)i--,o=e.codePointAt(i-1);return i>r?e.slice(r,i):""}var mn={blockquote:function(e,t){return e(t,"blockquote",un(ln(e,t),!0))},break:function(e,t){return[e(t,"br"),Yt("text","\n")]},code:function(e,t){var n=t.value?t.value+"\n":"",r=t.lang&&t.lang.match(/^[^ \t]+(?=[ \t]|$)/),i={};r&&(i.className=["language-"+r]);var a=e(t,"code",i,[Yt("text",n)]);return t.meta&&(a.data={meta:t.meta}),e(t.position,"pre",[a])},delete:function(e,t){return e(t,"del",ln(e,t))},emphasis:function(e,t){return e(t,"em",ln(e,t))},footnoteReference:dn,footnote:function(e,t){for(var n=e.footnoteById,r=1;r in n;)r++;var i=String(r);return n[i]={type:"footnoteDefinition",identifier:i,children:[{type:"paragraph",children:t.children}],position:t.position},dn(e,{type:"footnoteReference",identifier:i,position:t.position})},heading:function(e,t){return e(t,"h"+t.depth,ln(e,t))},html:function(e,t){return e.dangerous?e.augment(t,Yt("raw",t.value)):null},imageReference:function(e,t){var n=e.definition(t.identifier);if(!n)return pn(e,t);var r={src:cn(n.url||""),alt:t.alt};return null!==n.title&&void 0!==n.title&&(r.title=n.title),e(t,"img",r)},image:function(e,t){var n={src:cn(t.url),alt:t.alt};return null!==t.title&&void 0!==t.title&&(n.title=t.title),e(t,"img",n)},inlineCode:function(e,t){return e(t,"code",[Yt("text",t.value.replace(/\r?\n|\r/g," "))])},linkReference:function(e,t){var n=e.definition(t.identifier);if(!n)return pn(e,t);var r={href:cn(n.url||"")};return null!==n.title&&void 0!==n.title&&(r.title=n.title),e(t,"a",r,ln(e,t))},link:function(e,t){var n={href:cn(t.url)};return null!==t.title&&void 0!==t.title&&(n.title=t.title),e(t,"a",n,ln(e,t))},listItem:function(e,t,n){var r,i=ln(e,t),a=n?function(e){var t=e.spread,n=e.children,r=-1;for(;!t&&++r0&&r.children.unshift(Yt("text"," ")),r.children.unshift(e(null,"input",{type:"checkbox",checked:t.checked,disabled:!0})),s.className=["task-list-item"]);for(var c=-1;++c0,!0),r[0]),i=r.index+r[0].length,r=n.exec(t);return a.push(hn(t.slice(i),i>0,!1)),a.join("")}(String(t.value))))},thematicBreak:function(e,t){return e(t,"hr")},toml:gn,yaml:gn,definition:gn,footnoteDefinition:gn};function gn(){return null}var _n={}.hasOwnProperty;function vn(e,t){var n=t||{},r=n.allowDangerousHtml||!1,i={};return s.dangerous=r,s.clobberPrefix=void 0===n.clobberPrefix||null===n.clobberPrefix?"user-content-":n.clobberPrefix,s.footnoteLabel=n.footnoteLabel||"Footnotes",s.footnoteLabelTagName=n.footnoteLabelTagName||"h2",s.footnoteLabelProperties=n.footnoteLabelProperties||{className:["sr-only"]},s.footnoteBackLabel=n.footnoteBackLabel||"Back to content",s.definition=function(e){var t=Object.create(null);if(!e||!e.type)throw new Error("mdast-util-definitions expected node");return Qt(e,"definition",(function(e){var n=nn(e.identifier);n&&!tn.call(t,n)&&(t[n]=e)})),function(e){var n=nn(e);return n&&tn.call(t,n)?t[n]:null}}(e),s.footnoteById=i,s.footnoteOrder=[],s.footnoteCounts={},s.augment=o,s.handlers=(0,a.Z)((0,a.Z)({},mn),n.handlers),s.unknownHandler=n.unknownHandler,s.passThrough=n.passThrough,Qt(e,"footnoteDefinition",(function(e){var t=String(e.identifier).toUpperCase();_n.call(i,t)||(i[t]=e)})),s;function o(e,t){if(e&&"data"in e&&e.data){var n=e.data;n.hName&&("element"!==t.type&&(t={type:"element",tagName:"",properties:{},children:[]}),t.tagName=n.hName),"element"===t.type&&n.hProperties&&(t.properties=(0,a.Z)((0,a.Z)({},t.properties),n.hProperties)),"children"in t&&t.children&&n.hChildren&&(t.children=n.hChildren)}if(e){var r="type"in e?e:{position:e};(i=r)&&i.position&&i.position.start&&i.position.start.line&&i.position.start.column&&i.position.end&&i.position.end.line&&i.position.end.column&&(t.position={start:Xt(r),end:Jt(r)})}var i;return t}function s(e,t,n,r){return Array.isArray(n)&&(r=n,n={}),o(e,{type:"element",tagName:t,properties:n||{},children:r||[]})}}function yn(e,t){var n=vn(e,t),r=on(n,e,null),i=function(e){for(var t=-1,n=[];++t1?"-"+l:""),dataFootnoteBackref:!0,className:["data-footnote-backref"],ariaLabel:e.footnoteBackLabel},children:[{type:"text",value:"\u21a9"}]};l>1&&u.children.push({type:"element",tagName:"sup",children:[{type:"text",value:String(l)}]}),c.length>0&&c.push({type:"text",value:" "}),c.push(u)}var d=i[i.length-1];if(d&&"element"===d.type&&"p"===d.tagName){var p,f=d.children[d.children.length-1];f&&"text"===f.type?f.value+=" ":d.children.push({type:"text",value:" "}),(p=d.children).push.apply(p,c)}else i.push.apply(i,c);var h={type:"element",tagName:"li",properties:{id:e.clobberPrefix+"fn-"+s},children:un(i,!0)};r.position&&(h.position=r.position),n.push(h)}}return 0===n.length?null:{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:e.footnoteLabelTagName,properties:(0,a.Z)((0,a.Z)({},JSON.parse(JSON.stringify(e.footnoteLabelProperties))),{},{id:"footnote-label"}),children:[Yt("text",e.footnoteLabel)]},{type:"text",value:"\n"},{type:"element",tagName:"ol",properties:{},children:un(n,!0)},{type:"text",value:"\n"}]}}(n);return i&&r.children.push(Yt("text","\n"),i),Array.isArray(r)?{type:"root",children:r}:r}var bn=function(e,t){return e&&"run"in e?function(e,t){return function(n,r,i){e.run(yn(n,t),r,(function(e){i(e)}))}}(e,t):function(e){return function(t){return yn(t,e)}}(e||t)};var En=(0,u.Z)((function e(t,n,r){(0,c.Z)(this,e),this.property=t,this.normal=n,r&&(this.space=r)}));function Sn(e,t){for(var n={},r={},i=-1;++i0?h.createElement(f,l,u):h.createElement(f,l)}function dr(e,t){for(var n=-1,r=0;++n4&&"data"===n.slice(0,4)&&er.test(t)){if("-"===t.charAt(4)){var a=t.slice(5).replace(tr,ir);r="data"+a.charAt(0).toUpperCase()+a.slice(1)}else{var o=t.slice(4);if(!tr.test(o)){var s=o.replace(nr,rr);"-"!==s.charAt(0)&&(s="-"+s),t="data"+s}}i=Ln}return new i(r,t)}(r.schema,t),a=n;null!==a&&void 0!==a&&a===a&&(Array.isArray(a)&&(a=i.commaSeparated?function(e,t){var n=t||{};return(""===e[e.length-1]?[].concat((0,o.Z)(e),[""]):e).join((n.padRight?" ":"")+","+(!1===n.padLeft?"":" ")).trim()}(a):a.join(" ").trim()),"style"===i.property&&"string"===typeof a&&(a=function(e){var t={};try{or(e,n)}catch(r){}return t;function n(e,n){var r="-ms-"===e.slice(0,4)?"ms-".concat(e.slice(4)):e;t[r.replace(/-([a-z])/g,fr)]=n}}(a)),i.space&&i.property?e[sr.call(ar,i.property)?ar[i.property]:i.property]=a:i.attribute&&(e[i.attribute]=a))}function fr(e,t){return t.toUpperCase()}var hr={}.hasOwnProperty,mr={plugins:{to:"plugins",id:"change-plugins-to-remarkplugins"},renderers:{to:"components",id:"change-renderers-to-components"},astPlugins:{id:"remove-buggy-html-in-markdown-parser"},allowDangerousHtml:{id:"remove-buggy-html-in-markdown-parser"},escapeHtml:{id:"remove-buggy-html-in-markdown-parser"},source:{to:"children",id:"change-source-to-children"},allowNode:{to:"allowElement",id:"replace-allownode-allowedtypes-and-disallowedtypes"},allowedTypes:{to:"allowedElements",id:"replace-allownode-allowedtypes-and-disallowedtypes"},disallowedTypes:{to:"disallowedElements",id:"replace-allownode-allowedtypes-and-disallowedtypes"},includeNodeIndex:{to:"includeElementIndex",id:"change-includenodeindex-to-includeelementindex"}};function gr(e){for(var t in mr)if(hr.call(mr,t)&&hr.call(e,t)){var n=mr[t];console.warn("[react-markdown] Warning: please ".concat(n.to?"use `".concat(n.to,"` instead of"):"remove"," `").concat(t,"` (see <").concat("https://github.com/remarkjs/react-markdown/blob/main/changelog.md","#").concat(n.id,"> for more info)")),delete mr[t]}var r=G().use(Zt).use(e.remarkPlugins||[]).use(bn,(0,a.Z)((0,a.Z)({},e.remarkRehypeOptions),{},{allowDangerousHtml:!0})).use(e.rehypePlugins||[]).use(Kn,e),i=new A;"string"===typeof e.children?i.value=e.children:void 0!==e.children&&null!==e.children&&console.warn("[react-markdown] Warning: please pass a string as `children` (not: `".concat(e.children,"`)"));var o=r.runSync(r.parse(i),i);if("root"!==o.type)throw new TypeError("Expected a `root` node");var s=h.createElement(h.Fragment,{},cr({options:e,schema:Wn,listDepth:0},o));return e.className&&(s=h.createElement("div",{className:e.className},s)),s}gr.defaultProps={transformLinkUri:function(e){var t=(e||"").trim(),n=t.charAt(0);if("#"===n||"/"===n)return t;var r=t.indexOf(":");if(-1===r)return t;for(var i=-1;++ii||-1!==(i=t.indexOf("#"))&&r>i?t:"javascript:void(0)"}},gr.propTypes={children:m.string,className:m.string,allowElement:m.func,allowedElements:m.arrayOf(m.string),disallowedElements:m.arrayOf(m.string),unwrapDisallowed:m.bool,remarkPlugins:m.arrayOf(m.oneOfType([m.object,m.func,m.arrayOf(m.oneOfType([m.bool,m.string,m.object,m.func,m.arrayOf(m.any)]))])),rehypePlugins:m.arrayOf(m.oneOfType([m.object,m.func,m.arrayOf(m.oneOfType([m.bool,m.string,m.object,m.func,m.arrayOf(m.any)]))])),sourcePos:m.bool,rawSourcePos:m.bool,skipHtml:m.bool,includeElementIndex:m.bool,transformLinkUri:m.oneOfType([m.func,m.bool]),linkTarget:m.oneOfType([m.func,m.string]),transformImageUri:m.func,components:m.object};var _r=n(71894),vr=n.n(_r),yr=/[\t ]*(?:\r?\n|\r)/g;function br(){return function(e){!function(e,t,n,r){"function"===typeof t&&"function"!==typeof n&&(r=n,n=t,t=null),Kt(e,t,(function(e,t){var r=t[t.length-1];return n(e,r?r.children.indexOf(e):null,r)}),r)}(e,"text",(function(e,t,n){var r=[],i=0;yr.lastIndex=0;for(var a,o=yr.exec(e.value);o;){var s=o.index;i!==s&&r.push({type:"text",value:e.value.slice(i,s)}),r.push({type:"break"}),i=s+o[0].length,o=yr.exec(e.value)}if(r.length>0&&n&&"number"===typeof t)return i0&&!n&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),n}Rr[43]=Nr,Rr[45]=Nr,Rr[46]=Nr,Rr[95]=Nr,Rr[72]=[Nr,Or],Rr[104]=[Nr,Or],Rr[87]=[Nr,wr],Rr[119]=[Nr,wr];var Ur={tokenize:function(e,t,n){var r=this;return _e(e,(function(e){var i=r.events[r.events.length-1];return i&&"gfmFootnoteDefinitionIndent"===i[1].type&&4===i[2].sliceSerialize(i[1],!0).length?t(e):n(e)}),"gfmFootnoteDefinitionIndent",5)},partial:!0};function Gr(){var e;return{document:(0,s.Z)({},91,{tokenize:Zr,continuation:{tokenize:Yr},exit:Vr}),text:(e={},(0,s.Z)(e,91,{tokenize:Hr}),(0,s.Z)(e,93,{add:"after",tokenize:zr,resolveTo:jr}),e)}}function zr(e,t,n){for(var r,i=this,a=i.events.length,o=i.parser.gfmFootnotes||(i.parser.gfmFootnotes=[]);a--;){var s=i.events[a][1];if("labelImage"===s.type){r=s;break}if("gfmFootnoteCall"===s.type||"labelLink"===s.type||"label"===s.type||"image"===s.type||"link"===s.type)break}return function(a){if(!r||!r._balanced)return n(a);var s=Ze(i.sliceSerialize({start:r.end,end:i.now()}));if(94!==s.charCodeAt(0)||!o.includes(s.slice(1)))return n(a);return e.enter("gfmFootnoteCallLabelMarker"),e.consume(a),e.exit("gfmFootnoteCallLabelMarker"),t(a)}}function jr(e,t){for(var n=e.length;n--;)if("labelImage"===e[n][1].type&&"enter"===e[n][0]){e[n][1];break}e[n+1][1].type="data",e[n+3][1].type="gfmFootnoteCallLabelMarker";var r={type:"gfmFootnoteCall",start:Object.assign({},e[n+3][1].start),end:Object.assign({},e[e.length-1][1].end)},i={type:"gfmFootnoteCallMarker",start:Object.assign({},e[n+3][1].end),end:Object.assign({},e[n+3][1].end)};i.end.column++,i.end.offset++,i.end._bufferIndex++;var a={type:"gfmFootnoteCallString",start:Object.assign({},i.end),end:Object.assign({},e[e.length-1][1].start)},o={type:"chunkString",contentType:"string",start:Object.assign({},a.start),end:Object.assign({},a.end)},s=[e[n+1],e[n+2],["enter",r,t],e[n+3],e[n+4],["enter",i,t],["exit",i,t],["enter",a,t],["enter",o,t],["exit",o,t],["exit",a,t],e[e.length-2],e[e.length-1],["exit",r,t]];return e.splice.apply(e,[n,e.length-n+1].concat(s)),e}function Hr(e,t,n){var r,i=this,a=i.parser.gfmFootnotes||(i.parser.gfmFootnotes=[]),o=0;return function(t){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(t),e.exit("gfmFootnoteCallLabelMarker"),s};function s(t){return 94!==t?n(t):(e.enter("gfmFootnoteCallMarker"),e.consume(t),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",l)}function l(s){var u;return null===s||91===s||o++>999?n(s):93===s?r?(e.exit("chunkString"),u=e.exit("gfmFootnoteCallString"),a.includes(Ze(i.sliceSerialize(u)))?function(n){return e.enter("gfmFootnoteCallLabelMarker"),e.consume(n),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),t}(s):n(s)):n(s):(e.consume(s),de(s)||(r=!0),92===s?c:l)}function c(t){return 91===t||92===t||93===t?(e.consume(t),o++,l):l(t)}}function Zr(e,t,n){var r,i,a=this,o=a.parser.gfmFootnotes||(a.parser.gfmFootnotes=[]),s=0;return function(t){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(t),e.exit("gfmFootnoteDefinitionLabelMarker"),l};function l(t){return 94===t?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(t),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),c):n(t)}function c(t){var o;return null===t||91===t||s>999?n(t):93===t?i?(o=e.exit("gfmFootnoteDefinitionLabelString"),r=Ze(a.sliceSerialize(o)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(t),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),p):n(t):pe(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),s++,c):(e.enter("chunkString").contentType="string",u(t))}function u(t){return null===t||pe(t)||91===t||93===t||s>999?(e.exit("chunkString"),c(t)):(de(t)||(i=!0),s++,e.consume(t),92===t?d:u)}function d(t){return 91===t||92===t||93===t?(e.consume(t),s++,u):u(t)}function p(t){return 58===t?(e.enter("definitionMarker"),e.consume(t),e.exit("definitionMarker"),_e(e,f,"gfmFootnoteDefinitionWhitespace")):n(t)}function f(e){return o.includes(r)||o.push(r),t(e)}}function Yr(e,t,n){return e.check(Ee,t,e.attempt(Ur,t,n))}function Vr(e){e.exit("gfmFootnoteDefinition")}function qr(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.singleTilde,n={tokenize:i,resolveAll:r};return null!==t&&void 0!==t||(t=!0),{text:(0,s.Z)({},126,n),insideSpan:{null:[n]},attentionMarkers:{null:[126]}};function r(e,t){for(var n=-1;++n1?r(a):(e.consume(a),o++,s);if(o<2&&!t)return r(a);var c=e.exit("strikethroughSequenceTemporary"),u=pt(a);return c._open=!u||2===u&&Boolean(l),c._close=!l||2===l&&Boolean(u),n(a)}}}var Wr={flow:{null:{tokenize:function(e,t,n){var r,i,a=this,o=[],s=0;return function(t){if(e.enter("table")._align=o,e.enter("tableHead"),e.enter("tableRow"),124===t)return l(t);return s++,e.enter("temporaryTableCellContent"),d(t)};function l(t){return e.enter("tableCellDivider"),e.consume(t),e.exit("tableCellDivider"),r=!0,c}function c(t){return null===t||pe(t)?function(t){if(null===t)return n(t);e.exit("tableRow"),e.exit("tableHead");var r=a.interrupt;return a.interrupt=!0,e.attempt({tokenize:N,partial:!0},(function(t){return a.interrupt=r,e.enter("tableDelimiterRow"),f(t)}),(function(e){return a.interrupt=r,n(e)}))(t)}(t):fe(t)?(e.enter("whitespace"),e.consume(t),u):(r&&(r=void 0,s++),124===t?l(t):(e.enter("temporaryTableCellContent"),d(t)))}function u(t){return fe(t)?(e.consume(t),u):(e.exit("whitespace"),c(t))}function d(t){return null===t||124===t||de(t)?(e.exit("temporaryTableCellContent"),c(t)):(e.consume(t),92===t?p:d)}function p(t){return 92===t||124===t?(e.consume(t),d):d(t)}function f(t){return null===t||pe(t)?v(t):fe(t)?(e.enter("whitespace"),e.consume(t),h):45===t?(e.enter("tableDelimiterFiller"),e.consume(t),i=!0,o.push("none"),m):58===t?(e.enter("tableDelimiterAlignment"),e.consume(t),e.exit("tableDelimiterAlignment"),o.push("left"),g):124===t?(e.enter("tableCellDivider"),e.consume(t),e.exit("tableCellDivider"),f):n(t)}function h(t){return fe(t)?(e.consume(t),h):(e.exit("whitespace"),f(t))}function m(t){return 45===t?(e.consume(t),m):(e.exit("tableDelimiterFiller"),58===t?(e.enter("tableDelimiterAlignment"),e.consume(t),e.exit("tableDelimiterAlignment"),o[o.length-1]="left"===o[o.length-1]?"center":"right",_):f(t))}function g(t){return 45===t?(e.enter("tableDelimiterFiller"),e.consume(t),i=!0,m):n(t)}function _(t){return null===t||pe(t)?v(t):fe(t)?(e.enter("whitespace"),e.consume(t),h):124===t?(e.enter("tableCellDivider"),e.consume(t),e.exit("tableCellDivider"),f):n(t)}function v(t){return e.exit("tableDelimiterRow"),i&&s===o.length?null===t?y(t):e.check($r,y,e.attempt({tokenize:N,partial:!0},_e(e,b,"linePrefix",4),y))(t):n(t)}function y(n){return e.exit("table"),t(n)}function b(t){return e.enter("tableBody"),E(t)}function E(t){return e.enter("tableRow"),124===t?S(t):(e.enter("temporaryTableCellContent"),x(t))}function S(t){return e.enter("tableCellDivider"),e.consume(t),e.exit("tableCellDivider"),T}function T(t){return null===t||pe(t)?function(t){if(e.exit("tableRow"),null===t)return O(t);return e.check($r,O,e.attempt({tokenize:N,partial:!0},_e(e,E,"linePrefix",4),O))(t)}(t):fe(t)?(e.enter("whitespace"),e.consume(t),C):124===t?S(t):(e.enter("temporaryTableCellContent"),x(t))}function C(t){return fe(t)?(e.consume(t),C):(e.exit("whitespace"),T(t))}function x(t){return null===t||124===t||de(t)?(e.exit("temporaryTableCellContent"),T(t)):(e.consume(t),92===t?w:x)}function w(t){return 92===t||124===t?(e.consume(t),x):x(t)}function O(t){return e.exit("tableBody"),y(t)}function N(e,t,n){return function(t){return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),_e(e,r,"linePrefix")};function r(r){if(a.parser.lazy[a.now().line]||null===r||pe(r))return n(r);var i=a.events[a.events.length-1];return!a.parser.constructs.disable.null.includes("codeIndented")&&i&&"linePrefix"===i[1].type&&i[2].sliceSerialize(i[1],!0).length>=4?n(r):(a._gfmTableDynamicInterruptHack=!0,e.check(a.parser.constructs.flow,(function(e){return a._gfmTableDynamicInterruptHack=!1,n(e)}),(function(e){return a._gfmTableDynamicInterruptHack=!1,t(e)}))(r))}}},resolve:function(e,t){var n,r,i,a,o,s,l,c=-1;for(;++c0?{type:"text",value:m}:void 0),!1!==m){var g;if(s!==n&&p.push({type:"text",value:e.value.slice(s,n)}),Array.isArray(m))(g=p).push.apply(g,(0,o.Z)(m));else m&&p.push(m);s=n+f[0].length,d=!0}if(!i.global)break;f=i.exec(e.value)}if(d){var _;s?\]}]+$/.exec(e);if(a)for(e=e.slice(0,a.index),t=(i=a[0]).indexOf(")"),n=ei(e,"("),r=ei(e,")");-1!==t&&n>r;)e+=i.slice(0,t+1),t=(i=i.slice(t+1)).indexOf(")"),r++;return[e,i]}(n+r);if(!o[0])return!1;var s={type:"link",title:null,url:a+t+o[0],children:[{type:"text",value:t+o[0]}]};return o[1]?[s,{type:"text",value:o[1]}]:s}function hi(e,t,n,r){return!(!mi(r,!0)||/[_-\d]$/.test(n))&&{type:"link",title:null,url:"mailto:"+t+"@"+n,children:[{type:"text",value:t+"@"+n}]}}function mi(e,t){var n=e.input.charCodeAt(e.index-1);return(0===e.index||he(n)||me(n))&&(!t||47!==n)}function gi(e){return e.label||!e.identifier?e.label||"":Ft(e.identifier)}function _i(e){var t=e||{},n=t.now||{},r=t.lineShift||0,i=n.line||1,a=n.column||1;return{move:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=e.split(/\r?\n|\r/g),n=t[t.length-1];return i+=t.length-1,a=1===t.length?a+n.length:1+n.length+r,e},current:function(){return{now:{line:i,column:a},lineShift:r}},shift:function(e){r+=e}}}function vi(e,t,n){var r=t.indexStack,i=e.children||[],o=_i(n),s=[],l=-1;for(r.push(-1);++l=m||(g+10?" ":"")),i.shift(4),o+=i.move(bi(vi(e,n,i.current()),(function(e,t,n){if(t)return(n?"":" ")+e;return e}))),s(),o},footnoteReference:e}};function e(e,t,n,r){var i=_i(r),o=i.move("[^"),s=n.enter("footnoteReference"),l=n.enter("reference");return o+=i.move(Ci(n,gi(e),(0,a.Z)((0,a.Z)({},i.current()),{},{before:o,after:"]"}))),l(),s(),o+=i.move("]")}}function Ni(e,t,n){var r=t.indexStack,i=e.children||[],o=[],s=-1,l=n.before;r.push(-1);for(var c=_i(n);++s0&&("\r"===l||"\n"===l)&&"html"===u.type&&(o[o.length-1]=o[o.length-1].replace(/(\r?\n|\r)$/," "),l=" ",(c=_i(n)).move(o.join(""))),o.push(c.move(t.handle(u,e,t,(0,a.Z)((0,a.Z)({},c.current()),{},{before:l,after:d})))),l=o[o.length-1].slice(-1)}return r.pop(),o.join("")}var Ri={canContainEols:["delete"],enter:{strikethrough:function(e){this.enter({type:"delete",children:[]},e)}},exit:{strikethrough:function(e){this.exit(e)}}},Ii={unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"]}],handlers:{delete:Ai}};function Ai(e,t,n,r){var i=_i(r),o=n.enter("emphasis"),s=i.move("~~");return s+=Ni(e,n,(0,a.Z)((0,a.Z)({},i.current()),{},{before:s,after:"~"})),s+=i.move("~~"),o(),s}function ki(e,t,n){for(var r=e.value||"",i="`",a=-1;new RegExp("(^|[^`])"+i+"([^`]|$)").test(r);)i+="`";for(/[^ \r\n]/.test(r)&&(/^[ \r\n]/.test(r)&&/[ \r\n]$/.test(r)||/^`|`$/.test(r))&&(r=" "+r+" ");++a1&&void 0!==arguments[1]?arguments[1]:{},n=(t.align||[]).concat(),r=t.stringLength||Mi,i=[],a=[],o=[],s=[],l=0,c=-1;++cl&&(l=e[c].length);++ps[p])&&(s[p]=h)}u.push(f)}a[c]=u,o[c]=d}var m=-1;if("object"===(0,v.Z)(n)&&"length"in n)for(;++ms[m]&&(s[m]=T),y[m]=T),_[m]=C}a.splice(1,0,_),o.splice(1,0,y),c=-1;for(var x=[];++c-1?t.start:1)+(!1===n.options.incrementListMarker?0:t.children.indexOf(e))+a);var o=a.length+1;("tab"===i||"mixed"===i&&(t&&"list"===t.type&&t.spread||e.spread))&&(o=4*Math.ceil(o/4));var s=_i(r);s.move(a+" ".repeat(o-a.length)),s.shift(o);var l=n.enter("listItem"),c=bi(vi(e,n,s.current()),(function(e,t,n){if(t)return(n?"":" ".repeat(o))+e;return(n?a:a+" ".repeat(o-a.length))+e}));return l(),c}var ji={exit:{taskListCheckValueChecked:Zi,taskListCheckValueUnchecked:Zi,paragraph:function(e){var t,n=this.stack[this.stack.length-2],r=this.stack[this.stack.length-1],i=n.children,a=r.children[0],o=-1;if(n&&"listItem"===n.type&&"boolean"===typeof n.checked&&a&&"text"===a.type){for(;++o0&&void 0!==arguments[0]?arguments[0]:{},t=this.data();function n(e,n){(t[e]?t[e]:t[e]=[]).push(n)}n("micromarkExtensions",Jr(e)),n("fromMarkdownExtensions",Yi()),n("toMarkdownExtensions",Vi(e))}var Wi=n(60726);function $i(e){var t,n=/\S/,r=/^\s*/,i=e.split(/\n/g),a=(0,o.Z)(i),s=(0,Wi.Z)(a);try{for(s.s();!(t=s.n()).done;){var l=t.value;if(n.test(l))break;i.shift()}}catch(h){s.e(h)}finally{s.f()}var c,u=(0,Wi.Z)(a.reverse());try{for(u.s();!(c=u.n()).done;){var d=c.value;if(n.test(d))break;i.pop()}}catch(h){u.e(h)}finally{u.f()}var p=i.filter((function(e){return n.test(e)})).map((function(e){var t,n;return null!==(t=null===(n=e.match(r))||void 0===n?void 0:n[0].length)&&void 0!==t?t:0})),f=Math.min.apply(Math,(0,o.Z)(p));return i.map((function(e){return e.slice(f)})).join("\n")}function Ki(e){return function(t){for(var n=(0,o.Z)(t),r=arguments.length,i=new Array(r>1?r-1:0),a=1;a=i+6){var l=Math.ceil(i/2)-1;if(s=r+(i-l-1),(o=r-l)<1){var d=1-o;o+=d,s+=d}if(s>a){var p=s-a;o-=p,s-=p}o<1&&(o+=1-o)}for(var f=[],h=o;h<=s;h++)f.push(this.getButton(h,h,h,h===r));var m=s1&&this.getButton(1,this.props.translations.firstPage),u.createElement(b.Z,null,o>1&&this.getButton(o-1,"..."),f,s1||this.props.openTotal?this.getPagerContent():this.getPageSizeSelector())}}]),n}(u.PureComponent);(0,c._)(M,"defaultProps",{currentPage:1,pageSize:50,pageSizes:[20,50,100],visiblePagesLimit:7,disablePageSizeSelector:!1,openTotal:!1,canLoadLastPageWithOpenTotal:!1,translations:{perPage:"per page",firstPage:"First page",lastPage:"Last page",nextPage:"Next page",previousPage:"Previous"},loader:!1,loaderNavigation:!1,onPageSizeChange:function(){},onLoadPage:function(){}}),M.propTypes={total:p().number.isRequired,currentPage:p().number,pageSize:p().number,pageSizes:p().arrayOf(p().number),visiblePagesLimit:p().number,disablePageSizeSelector:p().bool,openTotal:p().bool,canLoadLastPageWithOpenTotal:p().bool,onPageChange:p().func,onPageSizeChange:p().func,onLoadPage:p().func,className:p().string,translations:p().object,loader:p().bool,loaderNavigation:p().bool,hrefFunc:p().func}},15573:function(e,t,n){"use strict";var r;n.d(t,{En:function(){return o},Ns:function(){return r},O$:function(){return a},Ro:function(){return i},UF:function(){return l},sS:function(){return s}}),function(e){e.BOTTOM_RIGHT="BOTTOM_RIGHT",e.BOTTOM_LEFT="BOTTOM_LEFT",e.BOTTOM_CENTER="BOTTOM_CENTER",e.TOP_LEFT="TOP_LEFT",e.TOP_RIGHT="TOP_RIGHT",e.TOP_CENTER="TOP_CENTER",e.RIGHT_TOP="RIGHT_TOP",e.RIGHT_BOTTOM="RIGHT_BOTTOM",e.RIGHT_CENTER="RIGHT_CENTER",e.LEFT_TOP="LEFT_TOP",e.LEFT_BOTTOM="LEFT_BOTTOM",e.LEFT_CENTER="LEFT_CENTER"}(r||(r={}));var i,a,o,s,l=[r.BOTTOM_RIGHT,r.BOTTOM_LEFT,r.TOP_LEFT,r.TOP_RIGHT,r.RIGHT_TOP,r.RIGHT_BOTTOM,r.LEFT_TOP,r.LEFT_BOTTOM];!function(e){e[e.MARGIN=16]="MARGIN",e[e.BORDER_WIDTH=1]="BORDER_WIDTH"}(i||(i={})),function(e){e[e.TARGET=-1]="TARGET"}(a||(a={})),function(e){e[e.SCREEN=-1]="SCREEN"}(o||(o={})),function(e){e[e.HIDDEN=0]="HIDDEN",e[e.SHOWING=1]="SHOWING",e[e.SHOWN=2]="SHOWN"}(s||(s={}))},68062:function(e,t,n){"use strict";n.d(t,{Gr:function(){return k},ZP:function(){return D}});var r=n(64649),i=n(11026),a=n(50189),o=n(22951),s=n(91976),l=n(47169),c=n(67591),u=n(94337),d=n(79636),p=n(22491),f=n(92418),h=n(50889),m=n.n(h),g=n(71894),_=n.n(g),v=n(51231),y=n(60953),b=n(52706),E=n(81975),S=n(75838),T=n(24566),C=n(90698),x=n(15573),w=n(90986),O=(n(54048),n(77373),n(39489),n(37406),"popup_rui_7cd4 font_rui_8bff"),N="hidden_rui_7cd4",R="showing_rui_7cd4",I="attached_rui_7cd4",A=function(e){return e.stopPropagation()},k=function(e){return"string"===typeof e?document.querySelector("[data-portaltarget=".concat(e,"]")):e},D=function(e){(0,c.Z)(n,e);var t=(0,u.Z)(n);function n(){var e;return(0,o.Z)(this,n),e=t.apply(this,arguments),(0,d._)((0,l.Z)(e),"state",{display:x.sS.SHOWING}),(0,d._)((0,l.Z)(e),"popup",void 0),(0,d._)((0,l.Z)(e),"node",void 0),(0,d._)((0,l.Z)(e),"parent",void 0),(0,d._)((0,l.Z)(e),"container",void 0),(0,d._)((0,l.Z)(e),"ringPopupTarget",void 0),(0,d._)((0,l.Z)(e),"listeners",new b.zy),(0,d._)((0,l.Z)(e),"redrawScheduler",(0,y.Z)(!0)),(0,d._)((0,l.Z)(e),"uid",(0,v.Z)("popup-")),(0,d._)((0,l.Z)(e),"calculateDisplay",(function(t){return(0,a.Z)((0,a.Z)({},t),{},{display:e.props.hidden?x.sS.SHOWING:x.sS.SHOWN})})),(0,d._)((0,l.Z)(e),"portalRef",(function(t){e.node=t,e.parent=t&&t.parentElement,t&&e.getContainer()&&e._redraw()})),(0,d._)((0,l.Z)(e),"popupRef",(function(t){e.popup=t,e._redraw()})),(0,d._)((0,l.Z)(e),"containerRef",(function(t){e.container=t})),(0,d._)((0,l.Z)(e),"_updateDirection",(function(t){e.state.direction!==t&&(e.setState({direction:t}),e.props.onDirectionChange&&e.props.onDirectionChange(t))})),(0,d._)((0,l.Z)(e),"_updatePosition",(function(){var t=e.popup;if(t){if(t.style.position="absolute",e.isVisible()){var n=e.position(),r=n.styles,a=n.direction;Object.entries(r).forEach((function(e){var n=(0,i.Z)(e,2),r=n[0],a=n[1],o=r;t.style[o]="number"===typeof a?"".concat(a,"px"):a.toString()})),null!=a&&e._updateDirection(a)}e.setState(e.calculateDisplay)}})),(0,d._)((0,l.Z)(e),"_redraw",(function(){e.isVisible()&&e.redrawScheduler(e._updatePosition)})),(0,d._)((0,l.Z)(e),"_listenersEnabled",void 0),(0,d._)((0,l.Z)(e),"_onEscPress",(function(t){e.props.onEscPress(t),e._onCloseAttempt(t,!0)})),(0,d._)((0,l.Z)(e),"_onDocumentClick",(function(t){var n;e.container&&t.target instanceof Node&&e.container.contains(t.target)||!e._listenersEnabled||e.props.dontCloseOnAnchorClick&&t.target instanceof Node&&null!==(n=e._getAnchor())&&void 0!==n&&n.contains(t.target)||(e.props.onOutsideClick(t),e._onCloseAttempt(t,!1))})),(0,d._)((0,l.Z)(e),"shortcutsScope",e.uid),(0,d._)((0,l.Z)(e),"shortcutsMap",{esc:e._onEscPress}),e}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){this.props.client||this.setState({client:!0}),this.props.hidden||this._setListenersEnabled(!0)}},{key:"componentDidUpdate",value:function(e,t){var n=this.props.hidden;this.props!==e&&(e.hidden!==n&&this._setListenersEnabled(!n),this._redraw()),!this.props.onShow||n||this.state.display!==x.sS.SHOWN||!e.hidden&&t.display===x.sS.SHOWN||this.props.onShow()}},{key:"componentWillUnmount",value:function(){this._setListenersEnabled(!1)}},{key:"shouldUseShortcuts",value:function(){var e=this.props,t=e.shortcuts,n=e.hidden;return t&&!n}},{key:"getContainer",value:function(){var e=this.props.target||this.ringPopupTarget;return e&&k(e)}},{key:"position",value:function(){var e=this.props,t=e.directions,n=e.autoPositioning,r=e.autoCorrectTopOverflow,i=e.sidePadding,a=e.top,o=e.left,s=e.offset,l=e.maxHeight,c=e.minWidth,u=this.getContainer();return(0,C.ZP)({popup:this.popup,container:u&&"static"!==(0,b.Wi)(u).position?u:null,anchor:this._getAnchor(),directions:t,autoPositioning:n,autoCorrectTopOverflow:r,sidePadding:i,top:a,left:o,offset:s,maxHeight:l,minWidth:c})}},{key:"_getAnchor",value:function(){return this.props.anchorElement||this.parent}},{key:"_setListenersEnabled",value:function(e){var t=this;!e||this._listenersEnabled?!e&&this._listenersEnabled&&(this.listeners.removeAll(),this._listenersEnabled=!1):setTimeout((function(){t._listenersEnabled=!0,t.listeners.add(window,"resize",t._redraw),t.props.autoPositioningOnScroll&&t.listeners.add(window,"scroll",t._redraw),t.listeners.add(document,"pointerdown",t._onDocumentClick,!0);for(var e=t._getAnchor();e;)t.listeners.add(e,"scroll",t._redraw),e=e.parentElement}),0)}},{key:"isVisible",value:function(){return!this.props.hidden}},{key:"_onCloseAttempt",value:function(e,t){this.props.onCloseAttempt(e,t)}},{key:"getInternalContent",value:function(){var e=this.props,t=e.trapFocus,n=e.autoFocusFirst,r=e.children;return t?p.createElement(T.Z,{autoFocusFirst:n,focusBackOnExit:!0},r):r}},{key:"render",value:function(){var e,t=this,n=this.props,i=n.className,a=n.style,o=n.hidden,s=n.attached,l=n.keepMounted,c=n.client,u=n.onMouseDown,d=n.onMouseUp,h=n.onMouseOver,m=n.onMouseOut,g=n.onContextMenu,v=n["data-test"],y=this.state.display===x.sS.SHOWING,b=_()(i,O,(e={},(0,r.Z)(e,I,s),(0,r.Z)(e,N,o),(0,r.Z)(e,R,y),e)),T=(this.state.direction||"").toLowerCase().replace(/[_]/g,"-");return p.createElement(w.q.Consumer,null,(function(e){return t.ringPopupTarget=e,p.createElement("span",{onClick:A,role:"presentation",ref:t.portalRef},t.shouldUseShortcuts()&&p.createElement(E.Z,{map:t.shortcutsMap,scope:t.shortcutsScope}),(c||t.state.client)&&(l||!o)&&(0,f.createPortal)(p.createElement(w.x,{id:t.uid,ref:t.containerRef,onMouseOver:h,onFocus:h,onMouseOut:m,onBlur:m,onContextMenu:g},p.createElement("div",{"data-test":(0,S.Z)("ring-popup",v),"data-test-shown":!o&&!y,"data-test-direction":T,ref:t.popupRef,className:b,style:a,onMouseDown:u,onMouseUp:d,role:"presentation"},t.getInternalContent())),t.getContainer()||document.body))}))}}]),n}(p.PureComponent);(0,d._)(D,"defaultProps",{shortcuts:!0,hidden:!1,onOutsideClick:function(){},onEscPress:function(){},onCloseAttempt:function(){},dontCloseOnAnchorClick:!1,keepMounted:!1,directions:x.UF,autoPositioning:!0,autoPositioningOnScroll:!0,autoCorrectTopOverflow:!0,left:0,top:0,offset:0,sidePadding:8,attached:!1,trapFocus:!1,autoFocusFirst:!1,legacy:!1}),(0,d._)(D,"PopupProps",{Directions:x.Ns,Dimension:x.Ro,MinWidth:x.O$,MaxHeight:x.En}),D.propTypes={anchorElement:m().instanceOf(Node),target:m().oneOfType([m().string,m().instanceOf(Element)]),className:m().string,style:m().object,hidden:m().bool.isRequired,onOutsideClick:m().func,onEscPress:m().func,onCloseAttempt:m().func,children:m().node.isRequired,dontCloseOnAnchorClick:m().bool,shortcuts:m().bool,keepMounted:m().bool,"data-test":m().string,client:m().bool,directions:m().arrayOf(m().string),autoPositioning:m().bool,autoCorrectTopOverflow:m().bool,left:m().number,top:m().number,maxHeight:m().number,minWidth:m().number,sidePadding:m().number,attached:m().bool,onMouseDown:m().func,onMouseUp:m().func,onMouseOver:m().func,onMouseOut:m().func,onContextMenu:m().func,onDirectionChange:m().func,onShow:m().func,trapFocus:m().bool,autoFocusFirst:m().bool}},90986:function(e,t,n){"use strict";n.d(t,{q:function(){return c},x:function(){return u}});var r=n(53782),i=n(79636),a=n(22491),o=n(50889),s=n.n(o),l=["id","children"],c=(0,a.createContext)(void 0),u=(0,a.forwardRef)((function(e,t){var n=e.id,o=e.children,s=(0,r.Z)(e,l),u=a.createElement("div",(0,i.a)({},s,{"data-portaltarget":n,ref:t}),"function"!==typeof o&&o);return a.createElement(c.Provider,{value:n},"function"===typeof o?o(u):u)}));u.propTypes={id:s().string.isRequired,children:s().oneOfType([s().node,s().func])}},90698:function(e,t,n){"use strict";n.d(t,{Ns:function(){return o.Ns},Yq:function(){return u},ZP:function(){return d}});var r=n(50189),i=n(64649),a=n(52706),o=n(15573);function s(e,t,n){var r=null!==n.container?n.container.clientHeight:(0,a.gp)(),i=t.top+n.sidePadding,o=t.top+r-n.sidePadding,s=Math.max(i-e.top,0),l=n.popup.clientHeight,c=e.top+l-o;return s+Math.max(c,0)}function l(e,t,n){var r=null!==n.container?n.container.clientWidth:window.innerWidth,i=t.left+n.sidePadding,a=t.left+r-n.sidePadding,o=Math.max(i-e.left,0),s=n.popup.clientWidth,l=e.left+s-a;return o+Math.max(l,0)}var c={top:0,left:0};function u(e,t,n){var r=n||document.documentElement,i=t.getBoundingClientRect(),a=r.getBoundingClientRect(),s=Math.max(i.top-a.top,0),l=Math.max(a.height,r===document.documentElement?r.clientHeight:0),c=Math.max(l-(s+i.height),0);switch(e){case o.Ns.TOP_LEFT:case o.Ns.TOP_CENTER:case o.Ns.TOP_RIGHT:return s;case o.Ns.BOTTOM_LEFT:case o.Ns.BOTTOM_CENTER:case o.Ns.BOTTOM_RIGHT:return c;case o.Ns.LEFT_BOTTOM:case o.Ns.RIGHT_BOTTOM:return i.height+c;case o.Ns.LEFT_TOP:case o.Ns.RIGHT_TOP:return i.height+s;case o.Ns.RIGHT_CENTER:case o.Ns.LEFT_CENTER:return i.height/2+Math.min(c/2,s/2);default:return null}}function d(e){var t,n=e.popup,u=e.anchor,d=e.container,p=e.directions,f=e.autoPositioning,h=e.sidePadding,m=e.top,g=e.left,_=e.offset,v=e.maxHeight,y=e.minWidth,b=e.autoCorrectTopOverflow,E=void 0===b||b,S={top:0,left:0},T=null,C=null!==d?(0,a.Dz)(d):c,x=null!==d?d:document.body,w=(0,a.Dz)((0,a.Fe)(u)?u:x),O=function(e){return null!==e?{top:e.scrollTop,left:e.scrollLeft}:{top:(0,a.c6)(),left:(0,a.SU)()}}(d),N=w.left+O.left+g-C.left,R=w.top+O.top+m-C.top;if(n){var I=(0,r.Z)((0,r.Z)({},e),{},{popup:n}),A=function(e,t,n,r,a){var s,l=e.offsetWidth,c=e.offsetHeight,u=r+t.height,d=n+t.width,p=n-l,f=r-c,h=d-l,m=n+t.width/2-l/2,g=r+t.height/2-c/2,_=u-c;return s={},(0,i.Z)(s,o.Ns.BOTTOM_RIGHT,{left:n,top:u+a}),(0,i.Z)(s,o.Ns.BOTTOM_LEFT,{left:h,top:u+a}),(0,i.Z)(s,o.Ns.BOTTOM_CENTER,{left:m,top:u+a}),(0,i.Z)(s,o.Ns.TOP_RIGHT,{left:n,top:f-a}),(0,i.Z)(s,o.Ns.TOP_LEFT,{left:h,top:f-a}),(0,i.Z)(s,o.Ns.TOP_CENTER,{left:m,top:f-a}),(0,i.Z)(s,o.Ns.LEFT_BOTTOM,{left:p-a,top:r}),(0,i.Z)(s,o.Ns.LEFT_TOP,{left:p-a,top:_}),(0,i.Z)(s,o.Ns.LEFT_CENTER,{left:p-a,top:g}),(0,i.Z)(s,o.Ns.RIGHT_BOTTOM,{left:d+a,top:r}),(0,i.Z)(s,o.Ns.RIGHT_TOP,{left:d+a,top:_}),(0,i.Z)(s,o.Ns.RIGHT_CENTER,{left:d+a,top:g}),s}(n,w,N,R,_);if(f&&1!==p.length){var k=p.concat(p[0]).filter((function(e){return A[e]})).map((function(e){return{styles:A[e],direction:e}})).sort((function(e,t){var n=e.styles,r=t.styles;return s(n,O,I)+l(n,O,I)-(s(r,O,I)+l(r,O,I))}));S=k[0].styles,T=k[0].direction}else S=A[p[0]],T=p[0];["left","top"].forEach((function(e){S[e]<0&&(S[e]=0)}))}(v===o.En.SCREEN||"screen"===v?S.maxHeight=window.innerHeight+O.top-S.top-o.Ro.MARGIN:v&&(S.maxHeight=v),E)&&(S=function(e){var t=e.sidePadding,n=e.styles,r=e.anchorRect,i=e.maxHeight,a=e.popupScrollHeight,s=e.direction,l=e.scroll,c=o.Ns.TOP_LEFT,u=o.Ns.TOP_RIGHT,d=o.Ns.TOP_CENTER,p=o.Ns.RIGHT_TOP,f=o.Ns.LEFT_TOP;if(null==s||![c,u,d,p,f].includes(s))return n;var h=null!=s&&[c,d,u].includes(s)?r.top:r.bottom;return h-(i&&"number"===typeof i?Math.min(a,i):a)<=t&&(n.top=t+l.top,n.maxHeight=h-t+1),n}({sidePadding:h,styles:S,anchorRect:w,maxHeight:v,direction:T,popupScrollHeight:null!==(t=null===n||void 0===n?void 0:n.scrollHeight)&&void 0!==t?t:0,scroll:O}));return y===o.O$.TARGET||"target"===y?S.minWidth=w.width:y&&(S.minWidth=w.width2&&void 0!==arguments[2]&&arguments[2],r=n?e:e.toLowerCase(),i=n?t:t.toLowerCase(),a=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=t;if(n.length>0){r="";var i,a={to:0},o=(0,P.Z)(n);try{for(o.s();!(i=o.n()).done;){var s=i.value;r+="".concat(t.slice(a.to,s.from),"**").concat(t.slice(s.from,s.to),"**"),a=s}}catch(l){o.e(l)}finally{o.f()}r+=t.slice(a.to)}return{matched:e,matches:n,highlight:r}},o=i.length,s=r.length;if(s>o)return a(!1);if(s===o){var l=r===i;return a(l,l?[{from:0,to:t.length}]:[])}var c=!1,u=0,d=[],p=0;e:for(var f=0;f=0}))}}function K(e){return e.reduce((function(e,t){return e[t.key]=!0,e}),{})}function Q(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:e.data,i=n.trim();V(e.type)&&!e.allowAny&&t.selected&&!Array.isArray(t.selected)&&i===t.selected.label&&(i="");for(var a=i.toLowerCase(),o=[],s=!1,l=$(e.filter),c=function(n){var c=(0,d.Z)({},r[n]);l(c,a,r)&&(s=c.label===i,!e.multiple||"object"===(0,p.Z)(e.multiple)&&e.multiple.removeSelectedItems||(c.checkbox=!(null===(h=t.multipleMap)||void 0===h||!h[c.key])),e.multiple&&"object"===(0,p.Z)(e.multiple)&&e.multiple.limit&&Array.isArray(t.selected)&&(c.disabled=e.multiple.limit===t.selected.length&&!t.selected.find((function(e){return e.key===c.key}))),e.multiple&&"object"===(0,p.Z)(e.multiple)&&e.multiple.removeSelectedItems&&null!==(f=t.multipleMap)&&void 0!==f&&f[c.key]||o.push(c))},u=0;u2&&void 0!==arguments[2]?arguments[2]:{},o=function(e){return O.Z.isItemType(O.Z.ListProps.Type.ITEM,e)},l=function(e){return O.Z.isItemType(O.Z.ListProps.Type.CUSTOM,e)},c=t&&("select"===t.type||"keydown"===t.type);if(c&&t.preventDefault(),(o(e)||l(e))&&!e.disabled&&!e.isResetItem)if(s.props.multiple){var u=n.tryKeepOpen;if(u||s._hidePopup(c),null==e.key)throw new Error('Multiple selection requires each item to have the "key" property');s.setState((function(n){var o,l=n.selected;n.multipleMap[e.key]?(o=l.filter((function(t){return t.key!==e.key})),s.props.onDeselect&&s.props.onDeselect(e)):(o=l.concat(e),s.props.onSelect&&s.props.onSelect(e,t)),s.props.onChange(o,t);var c={selected:o,selectedIndex:s._getSelectedIndex(e,s.props.data)};if("object"===(0,p.Z)(s.props.multiple)&&s.props.multiple.limit&&o.length===s.props.multiple.limit&&(c.shownData=n.shownData.map((function(e){return o.find((function(t){return t.key===e.key}))?e:(0,d.Z)((0,d.Z)({},e),{},{disabled:!0})}))),n.multipleMap[e.key]){var u=n.multipleMap,f=e.key,h=(u[f],(0,r.Z)(u,[f].map(i.Z)));c.multipleMap=h}else c.multipleMap=(0,d.Z)((0,d.Z)({},n.multipleMap),{},(0,a.Z)({},e.key,!0));return(0,d.Z)((0,d.Z)({},n),c)}),(function(){u&&s._redrawPopup()}))}else s._hidePopup(c),s.setState({selected:e,selectedIndex:s._getSelectedIndex(e,s.props.data)},(function(){var n=s.isInputMode()&&!s.props.hideSelected?J(e):"";s.filterValue(n),s.props.onFilter(n),s.props.onSelect(e,t),s.props.onChange(e,t)}))})),(0,f._)((0,l.Z)(e),"_listSelectAllHandler",(function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=function(e){return O.Z.isItemType(O.Z.ListProps.Type.ITEM,e)},n=function(e){return O.Z.isItemType(O.Z.ListProps.Type.CUSTOM,e)};s.setState((function(r){var i,a=r.selected;return e?(i=s.props.data.filter((function(e){return(t(e)||n(e))&&!e.disabled}))).filter((function(e){return!s.props.selected.find((function(t){return e.key===t.key}))})).forEach((function(e){s.props.onSelect&&s.props.onSelect(e)})):(i=[],a.forEach((function(e){s.props.onDeselect&&s.props.onDeselect(e)}))),s.props.onChange(i,event),{filterValue:"",selected:i,selectedIndex:e?s._getSelectedIndex(i,s.props.data):null,shownData:r.shownData.map((function(t){return(0,d.Z)((0,d.Z)({},t),{},{checkbox:e})})),multipleMap:e?K(s.props.data.filter((function(e){return!e.disabled}))):{}}}),s._redrawPopup)})),(0,f._)((0,l.Z)(e),"_onCloseAttempt",(function(t,n){e.isInputMode()&&(e.props.allowAny||(e.props.hideSelected||!e.state.selected||e.props.multiple?e.clearFilter():e.state.selected&&!Array.isArray(e.state.selected)&&e.filterValue(J(e.state.selected)))),e.props.tags&&t&&t.target&&t.target instanceof Element&&t.target.matches('[data-test="ring-tag-remove"]')||e._hidePopup(n)})),(0,f._)((0,l.Z)(e),"clearFilter",(function(t){e._setFilter("",t)})),(0,f._)((0,l.Z)(e),"clear",(function(t){t&&t.stopPropagation();var n=e.props.multiple?[]:null;return e.setState({selected:n,selectedIndex:null,filterValue:""},(function(){e.props.onChange&&e.props.onChange(n,t)})),!1})),(0,f._)((0,l.Z)(e),"filter",void 0),(0,f._)((0,l.Z)(e),"filterRef",(function(t){e.filter=t})),e}return(0,s.Z)(n,[{key:"componentDidUpdate",value:function(e,t){var n=this.state,r=n.showPopup,i=n.selected,a=this.props,o=a.onClose,s=a.onOpen,l=a.onChange,c=a.multiple;t.showPopup&&!r?o(i):!t.showPopup&&r&&s(),c===e.multiple||C()(c,e.multiple)||l(i)}},{key:"getValueForFilter",value:function(e){return ee(e,this.props.type,this.state.filterValue)}},{key:"_getSelectedIndex",value:function(e,t){return X(e,t)}},{key:"_getResetOption",value:function(){var e=this,t=Array.isArray(this.state.selected)&&this.state.selected.length,n=this.props.tags&&"object"===(0,p.Z)(this.props.tags)?this.props.tags.reset:null;if(!t||!n)return null;return{isResetItem:!0,separator:n.separator,key:n.label,rgItemType:O.Z.ListProps.Type.CUSTOM,template:h.createElement(A.zx,{text:!0,className:H.button,"data-test":"ring-select-reset-tags-button",height:U.o.S},n.label),glyph:n.glyph,onClick:function(t,r){e.clear(r),e.clearFilter(),e.props.onFilter(""),e.setState((function(e){return{shownData:e.shownData.slice(n.separator?2:1),multipleMap:{}}})),e._redrawPopup()}}}},{key:"_prependResetOption",value:function(e){var t=this._getResetOption();if(t){var n=[t];return t.separator&&n.push({rgItemType:O.Z.ListProps.Type.SEPARATOR}),n.concat(e)}return e}},{key:"_renderPopup",value:function(){var e,t=this.props.targetElement||this.node,n=this.state,r=n.showPopup,i=n.shownData,a=this._prependResetOption(i);return this.props.loading?e=this.props.loadingMessage:i.length||(e=this.props.notFoundMessage),h.createElement(z.Z,{data:a,message:e,toolbar:r&&this.getToolbar(),loading:this.props.loading,activeIndex:this.state.selectedIndex,hidden:!r,ref:this.popupRef,maxHeight:this.props.maxHeight,minWidth:this.props.minWidth,directions:this.props.directions,className:this.props.popupClassName,style:this.props.popupStyle,top:this.props.top,left:this.props.left,filter:!this.isInputMode()&&this.props.filter,multiple:this.props.multiple,filterValue:this.state.filterValue,anchorElement:t,onCloseAttempt:this._onCloseAttempt,onSelect:this._listSelectHandler,onSelectAll:this._listSelectAllHandler,onFilter:this._filterChangeHandler,onClear:this.clearFilter,onLoadMore:this.props.onLoadMore,isInputMode:this.isInputMode(),selected:this.state.selected,tags:this.props.tags,compact:this.props.compact,renderOptimization:this.props.renderOptimization,ringPopupTarget:this.props.ringPopupTarget,disableMoveOverflow:this.props.disableMoveOverflow,disableScrollToActive:this.props.disableScrollToActive,dir:this.props.dir,onEmptyPopupEnter:this.onEmptyPopupEnter,listId:this.listId})}},{key:"_showPopup",value:function(){if(this.node){var e=this.getListItems(this.filterValue());this.setState({showPopup:!!e.length||!this.props.allowAny,shownData:e})}}},{key:"_hidePopup",value:function(e){var t=this;if(this.node&&this.state.showPopup&&(this.setState((function(e){return{showPopup:!1,filterValue:t.props.allowAny?e.filterValue:""}})),e)){var n=this.node&&this.node.querySelector("[data-test~=ring-select__focus]"),r=this.props.targetElement||n;r&&r.focus()}}},{key:"getToolbar",value:function(){var e=this.props,t=e.hint,n=e.renderBottomToolbar,r=this.state.addButton||{},i=r.prefix,o=r.label,s=r.delayed;return this.state.addButton||t||n?h.createElement("div",{className:g()((0,a.Z)({},H.toolbar,Boolean(this.state.addButton||n))),"data-test":"ring-select-toolbar"},n&&n(),this.state.addButton&&h.createElement(A.zx,{text:!0,delayed:s,className:g()(H.button,H.buttonSpaced),onClick:this.addHandler,"data-test":"ring-select-toolbar-button"},i?"".concat(i," ").concat(o):o),t&&h.createElement(O.Z.ListHint,{label:t,"data-test":"ring-select-toolbar-hint"})):null}},{key:"getFilterFn",value:function(){return $(this.props.filter)}},{key:"getListItems",value:function(e,t){var n=Q(this.props,this.state,e,t),r=n.filteredData,i=n.addButton;return this.setState({addButton:i}),r}},{key:"filterValue",value:function(e){return"string"===typeof e||"number"===typeof e?void this.setState({filterValue:e}):this.state.filterValue}},{key:"isInputMode",value:function(){return V(this.props.type)}},{key:"_rebuildMultipleMap",value:function(e){Array.isArray(e)&&this.setState({multipleMap:K(e)})}},{key:"_selectionIsEmpty",value:function(){return Array.isArray(this.state.selected)&&!this.state.selected.length||!this.state.selected}},{key:"_getLabel",value:function(){var e,t;return null!==(e=null!==(t=this.props.label)&&void 0!==t?t:this.props.selectedLabel)&&void 0!==e?e:"Select an option"}},{key:"_getPlaceholder",value:function(){var e;return this._selectionIsEmpty()?null!==(e=this.props.label)&&void 0!==e?e:"Select an option":this._getSelectedString()}},{key:"_getSelectedString",value:function(){if(Array.isArray(this.state.selected)){for(var e=[],t=0;t0)&&Array.isArray(this.props.selected)){var n=null;t?n=null===this.state.tagsActiveIndex?this.props.selected.length-1:this.state.tagsActiveIndex-1:null!==this.state.tagsActiveIndex&&(n=this.state.tagsActiveIndex+1),null!==n&&(n>=this.props.selected.length||n<0)&&(n=null,this.focusFilter()),this.setState({tagsActiveIndex:n})}}},{key:"removeTag",value:function(e,t){if(Array.isArray(this.props.selected)){var n=e||this.props.selected.slice(0)[this.props.selected.length-1];n&&(this.onListSelect(n,t,{tryKeepOpen:!0}),this.setState({tagsActiveIndex:null}),this.focusFilter())}}},{key:"removeSelectedTag",value:function(){return!Array.isArray(this.props.selected)||null==this.state.tagsActiveIndex||(this.removeTag(this.props.selected[this.state.tagsActiveIndex]),!1)}},{key:"handleBackspace",value:function(e){return!this.props.tags||(this.isEventTargetFilter(e)?!((e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement)&&!e.target.value)||(this.removeTag(),!1):(this.removeSelectedTag(),!1))}},{key:"_togglePopupFilterShortcuts",value:function(e){this.setState({popupFilterShortcutsOptions:{modal:!0,disabled:e}})}},{key:"isVisible",value:function(){return this.popup&&this.popup.isVisible()}},{key:"getFilter",value:function(){return this.props.filter||this.props.tags?d.createElement("div",{className:L.m.filterWrapper,"data-test":"ring-select-popup-filter"},!this.props.tags&&d.createElement(y.ZP,{glyph:m(),className:L.m.filterIcon,"data-test-custom":"ring-select-popup-filter-icon"}),d.createElement(B,{rgShortcutsOptions:this.state.popupFilterShortcutsOptions,rgShortcutsMap:this.popupFilterShortcutsMap,value:this.props.filterValue,inputRef:this.filterRef,onBlur:this.popupFilterOnBlur,onFocus:this.onFilterFocus,className:"ring-js-shortcuts",inputClassName:f()((0,i.Z)({},L.m.filterWithTagsInput,this.props.tags)),placeholder:"object"===(0,r.Z)(this.props.filter)?this.props.filter.placeholder:void 0,height:this.props.tags?M.o.S:M.o.L,onChange:this.props.onFilter,onClick:this.onClickHandler,onClear:this.props.tags?void 0:this.props.onClear,"data-test-custom":"ring-select-popup-filter-input",listId:this.props.listId,enableShortcuts:Object.keys(this.popupFilterShortcutsMap)})):null}},{key:"getTags",value:function(){return Array.isArray(this.props.selected)&&d.createElement("div",null,d.createElement(R.Z,{tags:this.props.selected,activeIndex:this.state.tagsActiveIndex,handleRemove:this.handleRemoveTag,handleClick:this.handleTagClick,disabled:this.props.disabled}))}},{key:"getFilterWithTags",value:function(){if(this.props.tags){var e=f()([L.m.filterWithTags,(0,i.Z)({},L.m.filterWithTagsFocused,!this.state.popupFilterShortcutsOptions.disabled)]);return d.createElement("div",{className:e},this.getTags(),this.getFilter())}return this.getFilter()}},{key:"getBottomLine",value:function(){var e=this.props,t=e.loading,n=e.message;return(t||n)&&d.createElement("div",{className:L.m.bottomLine},t&&d.createElement(C.Z,null),n&&d.createElement("div",{className:L.m.message},n))}},{key:"getList",value:function(e){if(this.props.data.length){var t=this.props.maxHeight;return this.props.anchorElement&&(t=this._adjustListMaxHeight(this.props.hidden,t,e)),this.props.filter&&(t-=35),this.props.toolbar&&(t-=49),d.createElement(T.Z,{id:this.props.listId,maxHeight:t,data:this.props.data,activeIndex:this.props.activeIndex,ref:this.listRef,restoreActiveIndex:!0,activateFirstItem:!0,onSelect:this.onListSelect,onResize:this.handleListResize,onScrollToBottom:this.props.onLoadMore,hidden:this.props.hidden,shortcuts:!this.props.hidden,disableMoveOverflow:this.props.disableMoveOverflow,disableMoveDownOverflow:this.props.loading,disableScrollToActive:this.props.disableScrollToActive,compact:this.props.compact,renderOptimization:this.props.renderOptimization})}return null}},{key:"render",value:function(){var e=this,t=this.props,n=t.toolbar,i=t.className,a=t.multiple,o=t.hidden,s=t.isInputMode,l=t.anchorElement,c=t.minWidth,u=t.onCloseAttempt,p=t.directions,h=t.top,m=t.left,g=t.style,_=t.dir,v=t.filter,y=f()(L.m.popup,i);return d.createElement(S.q.Consumer,null,(function(t){var i=e.getFilterWithTags(),f=a&&"object"===(0,r.Z)(a)&&!a.limit&&a.selectAll&&e.getSelectAll(),E=e.getList(e.props.ringPopupTarget||t),S=e.getBottomLine(),T=i||f||E||S||n;return d.createElement(b.ZP,{trapFocus:!1,ref:e.popupRef,hidden:o||!T,attached:s,className:y,dontCloseOnAnchorClick:!0,anchorElement:l,minWidth:c,onCloseAttempt:u,directions:p,top:h,left:m,onMouseDown:e.mouseDownHandler,target:e.props.ringPopupTarget,autoCorrectTopOverflow:!1,style:g},d.createElement("div",{dir:_},!o&&v&&d.createElement(A.Z,{map:e.shortcutsMap,scope:e.shortcutsScope}),o?d.createElement("div",null):i,f,E,S,n))}))}}]),n}(d.PureComponent);(0,u._)(U,"defaultProps",{data:[],activeIndex:null,toolbar:null,filter:!1,multiple:!1,message:null,anchorElement:null,maxHeight:600,minWidth:240,loading:!1,onSelect:F,onCloseAttempt:F,onFilter:F,onClear:F,onLoadMore:F,selected:[],tags:null,ringPopupTarget:null,onSelectAll:F,onEmptyPopupEnter:F}),U.propTypes={activeIndex:v().number,anchorElement:v().instanceOf(HTMLElement),className:v().string,compact:v().bool,data:v().array,dir:v().oneOf(["ltr","rtl"]),directions:v().array,disabled:v().bool,disableMoveOverflow:v().bool,disableScrollToActive:v().bool,filter:v().oneOfType([v().bool,v().shape({value:v().string,placeholder:v().string})]),filterValue:v().string,hidden:v().bool,isInputMode:v().bool,listId:v().string,maxHeight:v().number,message:v().string,minWidth:v().number,multiple:v().oneOfType([v().bool,v().shape({label:v().string,limit:v().number,selectAll:v().bool})]),left:v().number,loading:v().bool,onClear:v().func,onCloseAttempt:v().func,onEmptyPopupEnter:v().func,onFilter:v().func,onLoadMore:v().func,onSelect:v().func,onSelectAll:v().func,renderOptimization:v().bool,ringPopupTarget:v().string,selected:v().oneOfType([v().object,v().array]),style:v().object,tags:v().object,toolbar:v().node,top:v().number}},54048:function(e,t,n){"use strict";n.d(t,{Z:function(){return d}});var r=n(33940),i=n(22951),a=n(91976),o=n(79636),s=n(77373),l=n.n(s),c=n(39489),u=(n(37406),function(){function e(){var t=this;(0,i.Z)(this,e),(0,o._)(this,"ALLOW_SHORTCUTS_SELECTOR",".ring-js-shortcuts"),(0,o._)(this,"ROOT_SCOPE",{scopeId:"ROOT",options:{}}),(0,o._)(this,"_scopes",{}),(0,o._)(this,"_scopeChain",[]),(0,o._)(this,"combokeys",new(l())(document.documentElement)),(0,o._)(this,"trigger",(function(e){return t.combokeys.trigger(e)})),(0,o._)(this,"_dispatcher",(function(e,n){for(var r,i=t._scopeChain.length-1;i>=0;i--){var a=t._scopeChain[i];if((r=t._scopes[a.scopeId])&&null!=n&&r[n]){var o=r[n](e,n,a.scopeId);if(!0!==o)return o}if(a.options.modal)return!0}})),(0,o._)(this,"_defaultFilter",(function(e,n,r){return n!==document&&n instanceof HTMLElement&&null!=r&&!n.matches(t.ALLOW_SHORTCUTS_SELECTOR)&&!(null!=n.dataset.enabledShortcuts?n.dataset.enabledShortcuts.split(",").includes(r):null!=n.closest(t.ALLOW_SHORTCUTS_SELECTOR))&&(n.matches("input,select,textarea")||"true"===n.contentEditable)})),this.setFilter(),this.setScope()}return(0,a.Z)(e,[{key:"bind",value:function(e){if(!(e instanceof Object)||"function"!==typeof e.handler)throw new Error("Shortcut handler should exist");if(e.scope||(e.scope=this.ROOT_SCOPE.scopeId),Array.isArray(e.key))for(var t=0;t1&&void 0!==arguments[1]?arguments[1]:{};if(e){var n=this.indexOfScope(e);-1!==n&&this._scopeChain.splice(n,1),this._scopeChain.push(this.wrapScope(e,t))}}},{key:"popScope",value:function(e){if(e){var t=this.indexOfScope(e);if(-1!==t)return this._scopeChain.splice(t,this._scopeChain.length-1)}}},{key:"spliceScope",value:function(e){if(e){var t=this.indexOfScope(e);-1!==t&&this._scopeChain.splice(t,1)}}},{key:"setScope",value:function(e){var t=this;if(e){var n;if(n="string"===typeof e||!Array.isArray(e)&&"object"===(0,r.Z)(e)&&null!==e?[e]:e,!Array.isArray(n))return;var i=n.map((function(e){return"string"===typeof e?t.wrapScope(e):e}));this._scopeChain=[this.ROOT_SCOPE].concat(i)}else this._scopeChain=[this.ROOT_SCOPE]}},{key:"wrapScope",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return{scopeId:e,options:t}}},{key:"hasKey",value:function(e,t){var n;return!(null===(n=this._scopes[t])||void 0===n||!n[e])}},{key:"_getKeyboardEventType",value:function(e){if(!e.type&&"windows"===c.Z.os.name&&("string"===typeof e.key&&e.key.match(/ctrl/i)&&e.key.match(/shift/i)&&e.key.match(/[0-9]/)))return"keyup";return e.type}},{key:"setFilter",value:function(e){this.combokeys.stopCallback="function"===typeof e?e:this._defaultFilter}},{key:"indexOfScope",value:function(e){return this._scopeChain.findIndex((function(t){return t.scopeId===e}))}},{key:"reset",value:function(){this._scopes={},this.setScope(),this.combokeys.reset()}}]),e}()),d=new u},4055:function(e,t,n){"use strict";n.d(t,{Z:function(){return g}});var r=n(53782),i=n(22951),a=n(91976),o=n(47169),s=n(67591),l=n(94337),c=n(79636),u=n(22491),d=n(50889),p=n.n(d),f=n(51231),h=n(81975),m=(n(54048),n(77373),n(39489),n(37406),["rgShortcutsOptions","rgShortcutsMap"]);function g(e){var t;return t=function(t){(0,s.Z)(d,t);var n=(0,l.Z)(d);function d(){var e;return(0,i.Z)(this,d),e=n.apply(this,arguments),(0,c._)((0,o.Z)(e),"_shortcutsScopeUid",(0,f.Z)("rg-shortcuts-")),e}return(0,a.Z)(d,[{key:"render",value:function(){var t=this.props,n=t.rgShortcutsOptions,i=t.rgShortcutsMap,a=(0,r.Z)(t,m);return u.createElement(h.Z,{scope:this._shortcutsScopeUid,map:i,options:n,disabled:n.disabled},u.createElement(e,a))}}]),d}(u.Component),(0,c._)(t,"propTypes",{rgShortcutsOptions:p().object,rgShortcutsMap:p().object}),t}},81975:function(e,t,n){"use strict";n.d(t,{Z:function(){return p}});var r=n(22951),i=n(91976),a=n(67591),o=n(94337),s=n(79636),l=n(22491),c=n(50889),u=n.n(c),d=n(54048),p=(n(77373),n(39489),n(37406),function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,r.Z)(this,n),t.apply(this,arguments)}return(0,i.Z)(n,[{key:"componentDidMount",value:function(){this.props.disabled||this.turnShorcutsOn()}},{key:"componentDidUpdate",value:function(e){var t=this.props,n=t.disabled,r=t.map;!e.disabled&&n&&this.turnShorcutsOff(),e.disabled&&!n&&this.turnShorcutsOn(),e.map!==r&&d.Z.bindMap(r,this.props)}},{key:"componentWillUnmount",value:function(){this.props.disabled||this.turnShorcutsOff()}},{key:"turnShorcutsOn",value:function(){var e=this.props,t=e.map,n=e.scope,r=e.options;d.Z.bindMap(t,this.props),d.Z.pushScope(n,r)}},{key:"turnShorcutsOff",value:function(){var e=this.props.scope;d.Z.unbindScope(e),d.Z.spliceScope(e)}},{key:"render",value:function(){return this.props.children||null}}]),n}(l.PureComponent));(0,s._)(p,"propTypes",{map:u().object.isRequired,scope:u().string.isRequired,options:u().object,disabled:u().bool,children:u().node}),(0,s._)(p,"defaultProps",{options:{}})},24566:function(e,t,n){"use strict";n.d(t,{Z:function(){return v}});var r=n(53782),i=n(649),a=n(22951),o=n(91976),s=n(47169),l=n(67591),c=n(94337),u=n(79636),d=n(22491),p=n(50889),f=n.n(p),h=n(52706),m=["children","trapDisabled","autoFocusFirst","focusBackOnClose","focusBackOnExit"],g="trapButton_rui_3588",_="input, button, select, textarea, a[href], *[tabindex]:not([data-trap-button]):not([data-scrollable-container])",v=function(e){(0,l.Z)(n,e);var t=(0,c.Z)(n);function n(){var e,r;return(0,a.Z)(this,n),e=t.apply(this,arguments),r=(0,s.Z)(e),(0,u._)((0,s.Z)(e),"previousFocusedNode",void 0),(0,u._)((0,s.Z)(e),"trapWithoutFocus",void 0),(0,u._)((0,s.Z)(e),"restoreFocus",(function(){var t=(0,s.Z)(e).previousFocusedNode;t instanceof HTMLElement&&t.focus&&(0,h.Ql)(t)&&t.focus({preventScroll:!0})})),(0,u._)((0,s.Z)(e),"node",void 0),(0,u._)((0,s.Z)(e),"containerRef",(function(t){t&&(e.node=t)})),(0,u._)((0,s.Z)(e),"focusElement",(function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=r,n=t.node;if(n){var a=(0,i.Z)(n.querySelectorAll(_)).filter((function(e){return e.tabIndex>=0})),o=e?a[0]:a[a.length-1];o&&o.focus()}})),(0,u._)((0,s.Z)(e),"focusFirst",(function(){return e.focusElement(!0)})),(0,u._)((0,s.Z)(e),"focusLast",(function(){return e.focusElement(!1)})),(0,u._)((0,s.Z)(e),"focusLastIfEnabled",(function(t){if(!e.trapWithoutFocus)if(e.props.focusBackOnExit){var n=t.nativeEvent.relatedTarget;null!=n&&null!=e.node&&n instanceof Element&&e.node.contains(n)&&e.restoreFocus()}else e.focusLast()})),(0,u._)((0,s.Z)(e),"handleBlurIfWithoutFocus",(function(t){var n;if(e.trapWithoutFocus){e.trapWithoutFocus=!1;var r=t.nativeEvent.relatedTarget;r&&(r instanceof Element&&null!==(n=e.node)&&void 0!==n&&n.contains(r)||e.focusLast())}})),(0,u._)((0,s.Z)(e),"trapButtonNode",void 0),(0,u._)((0,s.Z)(e),"trapButtonRef",(function(t){t&&(e.trapButtonNode=t)})),e}return(0,o.Z)(n,[{key:"componentDidMount",value:function(){if(this.previousFocusedNode=document.activeElement,this.props.autoFocusFirst)this.focusFirst();else if(!this.props.trapDisabled&&(!this.node||!this.node.contains(this.previousFocusedNode))){var e;this.trapWithoutFocus=!0,null===(e=this.trapButtonNode)||void 0===e||e.focus()}}},{key:"componentWillUnmount",value:function(){this.props.focusBackOnClose&&this.restoreFocus()}},{key:"render",value:function(){var e=this.props,t=e.children,n=e.trapDisabled,i=(e.autoFocusFirst,e.focusBackOnClose,e.focusBackOnExit),a=(0,r.Z)(e,m);return n?d.createElement("div",(0,u.a)({ref:this.containerRef},a),t):d.createElement("div",(0,u.a)({ref:this.containerRef},a),d.createElement("div",{tabIndex:0,ref:this.trapButtonRef,className:g,onFocus:this.focusLastIfEnabled,onBlur:this.handleBlurIfWithoutFocus,"data-trap-button":!0}),t,d.createElement("div",{tabIndex:0,onFocus:i?this.restoreFocus:this.focusFirst,"data-trap-button":!0}))}}]),n}(d.Component);(0,u._)(v,"propTypes",{children:f().node.isRequired,trapDisabled:f().bool,autoFocusFirst:f().bool,focusBackOnClose:f().bool,focusBackOnExit:f().bool}),(0,u._)(v,"defaultProps",{trapDisabled:!1,autoFocusFirst:!0,focusBackOnClose:!0,focusBackOnExit:!1})},90852:function(e,t,n){"use strict";n.d(t,{OK:function(){return re},mQ:function(){return ee}});var r=n(50889),i=n.n(r),a=function(e){return e.children};a.propTypes={children:i().node.isRequired};var o=n(53782),s=n(64649),l=n(33940),c=n(22951),u=n(91976),d=n(47169),p=n(67591),f=n(94337),h=n(79636),m=n(22491),g=n(71894),_=n.n(g),v=n(97893),y=n(75838),b={dark:"dark_rui_eb55",unit:"8px","line-shadow":"inset 0 -1px 0 0","selected-line-shadow":"inset 0 -2px 0 0",light:"light_rui_aa34",tabs:"tabs_rui_aa34 font_rui_8bff",titles:"titles_rui_aa34",title:"title_rui_aa34 font_rui_8bff",selected:"selected_rui_aa34",collapsed:"collapsed_rui_aa34",titleLegacy:"titleLegacy_rui_aa34",visible:"visible_rui_aa34",container:"container_rui_aa34",hidden:"hidden_rui_aa34",hiddenBold:"hiddenBold_rui_aa34",hiddenRegular:"hiddenRegular_rui_aa34",tabCounter:"tabCounter_rui_aa34",autoCollapseContainer:"autoCollapseContainer_rui_aa34",autoCollapse:"autoCollapse_rui_aa34",rendered:"rendered_rui_aa34",adjusted:"adjusted_rui_aa34",measure:"measure_rui_aa34",morePopup:"morePopup_rui_aa34",chevron:"chevron_rui_aa34",morePopupBeforeEnd:"morePopupBeforeEnd_rui_aa34"},E=n(62994),S=(n(96144),n(33344),n(71541),["isSelected","title","collapsed"]);function T(e){var t=e.isSelected,n=e.title,r=e.collapsed,i=(0,o.Z)(e,S),a="function"===typeof n?n(t,r):n;return m.createElement(E.ZP,i,(function(){return m.createElement("div",{className:b.container},m.createElement("span",{className:b.visible},a),m.createElement("span",{className:b.hidden},a),m.createElement("span",{className:b.hiddenBold},a),m.createElement("span",{className:b.hiddenRegular},a))}))}T.propTypes={isSelected:i().bool,collapsed:i().bool,title:i().oneOfType([i().func,i().string,i().node])};var C=(0,m.memo)(T),x=n(649),w=n(11026),O=n(39444),N=n.n(O),R=n(64431),I=n.n(R),A=n(15573),k=n(50189),D=n(68062),M=n(40331),P=(n(92418),n(51231),n(52706),n(81975),n(54048),n(77373),n(39489),n(37406),n(24566),n(90698),n(90986),n(40453),n(69749),n(38482),n(44878),n(38579),n(85523),n(89365),n(95344),n(31650),n(33435),n(75084),n(75446),n(78699),n(75095),n(48882)),L=(n(74357),n(48770),n(55398),n(8807),n(895),n(85794),n(70692),n(56564),n(8578),n(4587),["className"]),F=D.ZP.propTypes||{},B=(F.children,(0,o.Z)(F,["children"])),U=function(e){(0,p.Z)(n,e);var t=(0,f.Z)(n);function n(){var e;return(0,c.Z)(this,n),e=t.apply(this,arguments),(0,h._)((0,d.Z)(e),"onSelect",(function(t,n){e.props.closeOnSelect&&e._onCloseAttempt(n),e.props.onSelect(t,n)})),(0,h._)((0,d.Z)(e),"list",void 0),(0,h._)((0,d.Z)(e),"listRef",(function(t){e.list=t})),e}return(0,u.Z)(n,[{key:"getInternalContent",value:function(){var e=this.props,t=(e.className,(0,o.Z)(e,L));return m.createElement("div",null,m.createElement(M.Z,(0,h.a)({ref:this.listRef},t,{maxHeight:this.popup&&parseFloat(this.popup.style.maxHeight),shortcuts:this.shouldUseShortcuts(),onSelect:this.onSelect})))}}]),n}(D.ZP);(0,h._)(U,"isItemType",M.Z.isItemType),(0,h._)(U,"ListProps",M.Z.ListProps),(0,h._)(U,"defaultProps",(0,k.Z)((0,k.Z)((0,k.Z)({},M.Z.defaultProps),D.ZP.defaultProps),{},{renderOptimization:!1,closeOnSelect:!1})),U.propTypes=(0,k.Z)((0,k.Z)((0,k.Z)({},B),M.Z.propTypes),{},{closeOnSelect:i().bool});var G=M.Z.ListProps,z=n(42181),j=["items","selected","collapsed","onSelect"];function H(){}var Z=m.memo((function(e){var t,n=e.selected,r=e.child,i=e.handleSelect,o=void 0===i?H:i,c=e.collapsed,u=void 0!==c&&c,d=e.tabIndex;if(null==r||"object"!==(0,l.Z)(r)||r.type===a)return r;var p=r.props,f=p.title,g=p.titleProps,v=p.disabled,y=p.href,E=p.className,S=p.activeClassName,T=p.collapsedClassName,x=p.collapsedActiveClassName,w=_()(b.title,E,(t={},(0,s.Z)(t,b.selected,n),(0,s.Z)(t,b.collapsed,u),(0,s.Z)(t,null!==S&&void 0!==S?S:"",n),(0,s.Z)(t,null!==T&&void 0!==T?T:"",u),(0,s.Z)(t,null!==x&&void 0!==x?x:"",u&&n),t));return m.createElement(C,(0,h.a)({title:f,isSelected:n,active:!0,href:y,innerClassName:w,className:w,disabled:v,onPlainLeftClick:o,tabIndex:d,collapsed:u},g))}));Z.propTypes={child:i().element,handleSelect:i().func,selected:i().bool,collapsed:i().bool,tabIndex:i().number};var Y=function(e){var t=e.items,n=e.selected,r=void 0===n?"0":n,i=e.collapsed,a=e.onSelect,s=void 0===a?function(){}:a,l=(0,o.Z)(e,j);return t.map((function(e,t){var n=e.props.id||String(t),a=r===n;return m.createElement(Z,(0,h.a)({key:n,handleSelect:s(n),selected:a,child:e,collapsed:i},l))}))},V=(n(17691),n(80487),n(58526),n(42679),["hasActiveChildren","moreClassName","moreActiveClassName"]),q=function(e){var t=e.hasActiveChildren,n=e.moreClassName,r=e.moreActiveClassName,i=(0,o.Z)(e,V),a=_()(b.title,t&&b.selected,t&&r,n);return m.createElement(E.ZP,(0,h.a)({title:"More",innerClassName:a,className:a},i),"More",m.createElement(P.ZP,{glyph:I(),className:b.chevron}))};q.propTypes={hasActiveChildren:i().bool,moreClassName:i().string,moreActiveClassName:i().string};var W=[A.Ns.BOTTOM_CENTER,A.Ns.BOTTOM_LEFT,A.Ns.BOTTOM_RIGHT],$=m.memo((function(e){var t=e.items,n=e.selected,r=e.onSelect,i=e.moreClassName,o=e.moreActiveClassName,s=e.morePopupClassName,l=e.morePopupItemClassName,c=e.morePopupBeforeEnd,u=m.useCallback((function(e){!0!==e.disabled&&!0!==e.custom&&r(String(e.key))()}),[r]),d=m.useMemo((function(){return t.some((function(e){return e.props.alwaysHidden&&e.props.id===n}))}),[t,n]),p=m.useMemo((function(){var e=Y({items:t,selected:n,collapsed:!0}).map((function(e){var t=!0===e.props.disabled,n=e.props.child.type===a;return{template:e,key:e.key,rgItemType:G.Type.CUSTOM,className:l,disabled:t,custom:n}}));return c&&e.push({template:c,key:"before-end-content",className:b.morePopupBeforeEnd,rgItemType:G.Type.CUSTOM}),e}),[t,c,l,n]),f=m.useMemo((function(){return m.createElement(q,{moreClassName:i,moreActiveClassName:o,hasActiveChildren:d})}),[d,o,i]),h=m.useMemo((function(){return m.createElement(U,{directions:W,className:s,onSelect:u,data:p})}),[p,s,u]);return 0===t.length?null:m.createElement("div",{className:_()(b.title,i,d&&o)},m.createElement(z.Z,{hoverMode:!0,anchor:f},h))}));$.propTypes={children:i().node,items:i().array,selected:i().string,onSelect:i().func,toMeasure:i().bool,moreClassName:i().string,moreActiveClassName:i().string,morePopupClassName:i().string,morePopupItemClassName:i().string,morePopupBeforeEnd:i().element},$.displayName="MoreButton";var K=m.memo((function(e){var t=e.moreClassName,n=e.moreActiveClassName,r=e.hasActiveChildren;return m.createElement("div",{className:_()(b.moreButton,b.title)},m.createElement(q,{moreClassName:t,moreActiveClassName:n,hasActiveChildren:r,tabIndex:-1,disabled:!0}))}));K.propTypes={moreClassName:i().string,moreActiveClassName:i().string,hasActiveChildren:i().bool},K.displayName="FakeMoreButton";var Q=function(e){var t=e.children,n=e.selected,r=e.onSelect,i=e.moreClassName,a=e.moreActiveClassName,o=e.morePopupClassName,s=e.morePopupBeforeEnd,l=e.morePopupItemClassName,c=e.initialVisibleItems,u=m.useState({tabs:[],more:void 0}),d=(0,w.Z)(u,2),p=d[0],f=d[1],h=m.useState(null),g=(0,w.Z)(h,2),v=g[0],y=g[1],E={sizes:p,lastVisibleIndex:v},S=m.useState({visible:[],hidden:[]}),T=(0,w.Z)(S,2),C=T[0],O=T[1],R=m.useRef(null),I=m.useMemo((function(){var e;return null!==(e=t.filter((function(e){return!0!==e.props.alwaysHidden})).findIndex((function(e){return e.props.id===n})))&&void 0!==e?e:null}),[t,n]),A=m.useMemo((function(){var e;return e=C.ready?C.visible:c?t.filter((function(e){return!0!==e.props.alwaysHidden})).slice(0,c):[],Y({items:e,selected:n,onSelect:r})}),[c,t,C.ready,C.visible,r,n]),k=m.useCallback((function(e){for(var n=e.contentRect.width,r=E.sizes,i=r.tabs,a=r.more,o=void 0===a?0:a,s=t.some((function(e){return e.props.alwaysHidden})),l=[],c=s&&null!==o&&void 0!==o?o:0,u=0;u=0;d--){if(c+ol.length-1)for(var p=i[I],f=l.length-1;f>=0;f--){if(c+p(null!==(e=E.lastVisibleIndex)&&void 0!==e?e:0)){var i=t.find((function(e){return!e.props.alwaysHidden&&e.props.id===n}));null!=i&&r.visible.push(i)}var a=r.visible.length===C.visible.length&&r.visible.every((function(e,t){return e===C.visible[t]})),o=r.hidden.length===C.hidden.length&&r.hidden.every((function(e,t){return e===C.hidden[t]}));a&&o&&C.ready===r.ready||N().mutate((function(){return O(r)}))}),100);return function(){clearTimeout(e)}}),[t,E.lastVisibleIndex,C,n,I]);var D=m.useMemo((function(){var e=t.filter((function(e){return!0!==e.props.alwaysHidden}));return Y({items:e,tabIndex:-1})}),[t]);m.useEffect((function(){if(null!=R.current){var e=N().measure((function(){var e,t=R.current,n=(0,x.Z)(null!==(e=null===t||void 0===t?void 0:t.children)&&void 0!==e?e:[]),r=n.pop(),i=r.offsetWidth,a=getComputedStyle(r),o=a.marginLeft,s=a.marginRight;i+=+o.replace("px","")+ +s.replace("px","");var l=n.map((function(e){var t=getComputedStyle(e),n=t.marginLeft,r=t.marginRight;return e.getBoundingClientRect().width+ +n.replace("px","")+ +r.replace("px","")})),c=l.reduce((function(e,t){return e+t}),0),u=E.sizes.tabs.reduce((function(e,t){return e+t}),0);E.sizes.more===i&&c===u||N().mutate((function(){return f({more:i,tabs:l})}))}));return function(){N().clear(e)}}}),[t,E.sizes.more,E.sizes.tabs]),m.useEffect((function(){if(null!==R.current){var e=function(){},t=new ResizeObserver((function(t){t.forEach((function(t){N().clear(e),e=N().mutate((function(){return k(t)}))}))}));return t.observe(R.current),function(){N().clear(e),t.disconnect()}}}),[k]);var M=null!==E.lastVisibleIndex&&!0===C.ready||c,P=_()(b.titles,b.autoCollapse,M&&b.adjusted);return m.createElement("div",{className:b.autoCollapseContainer},m.createElement("div",{className:_()(P,b.rendered)},A,m.createElement($,{moreClassName:i,moreActiveClassName:a,morePopupClassName:o,morePopupBeforeEnd:s,morePopupItemClassName:l,items:C.hidden,selected:n,onSelect:r})),m.createElement("div",{ref:R,className:_()(P,b.measure)},D,m.createElement(K,{hasActiveChildren:C.hidden.some((function(e){return e.props.alwaysHidden&&e.props.id===n})),moreClassName:i,moreActiveClassName:a})))};Q.propTypes={children:i().node.isRequired,selected:i().string,onSelect:i().func.isRequired,moreClassName:i().string,moreActiveClassName:i().string,morePopupClassName:i().string,morePopupItemClassName:i().string,initialVisibleItems:i().number,morePopupBeforeEnd:i().element};var X=m.memo(Q),J=["className","children","selected","autoCollapse","data-test"],ee=function(e){(0,p.Z)(n,e);var t=(0,f.Z)(n);function n(){var e;return(0,c.Z)(this,n),e=t.apply(this,arguments),(0,h._)((0,d.Z)(e),"handleSelect",(0,v.Z)((function(t){return function(){return e.props.onSelect(t)}}))),(0,h._)((0,d.Z)(e),"getTabTitle",(function(t,n){if(null==t||"object"!==(0,l.Z)(t)||t.type===a)return t;var r=e.props.selected,i=t.props,o=i.title,c=i.titleProps,u=i.id,d=i.disabled,p=i.href,f=i.className,g=i.activeClassName,v=u||String(n),y=v===r,E=_()(b.title,f,y&&g,(0,s.Z)({},b.selected,y));return m.createElement(C,(0,h.a)({title:o,isSelected:y,key:v,href:p,innerClassName:E,className:E,disabled:d,onPlainLeftClick:e.handleSelect(v)},c))})),e}return(0,u.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.className,n=e.children,r=e.selected,i=e.autoCollapse,a=e["data-test"],s=(0,o.Z)(e,J),l=_()(b.tabs,t),c=m.Children.toArray(n).filter(Boolean);return m.createElement("div",{className:l,"data-test":(0,y.Z)("ring-dumb-tabs",a)},!0===i?m.createElement(X,(0,h.a)({},s,{onSelect:this.handleSelect,selected:r}),c):m.createElement("div",{className:b.titles},c.map(this.getTabTitle)),m.createElement("div",{className:b.tab},c.find((function(e,t){return(e.props.id||String(t))===r}))))}}]),n}(m.PureComponent);(0,h._)(ee,"propTypes",{selected:i().string,className:i().string,href:i().string,children:i().node.isRequired,onSelect:i().func,"data-test":i().string,autoCollapse:i().bool}),(0,h._)(ee,"defaultProps",{onSelect:function(){}});var te=["children","initSelected","data-test"],ne=function(e){(0,p.Z)(n,e);var t=(0,f.Z)(n);function n(e){var r;return(0,c.Z)(this,n),r=t.call(this,e),(0,h._)((0,d.Z)(r),"state",void 0),(0,h._)((0,d.Z)(r),"handleSelect",(function(e){return r.setState({selected:e})})),r.state={selected:r.props.initSelected||Array.isArray(r.props.children)&&r.props.children[0].props.id||"0"},r}return(0,u.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.children,n=(e.initSelected,e["data-test"]),r=(0,o.Z)(e,te);return m.createElement(ee,(0,h.a)({"data-test":(0,y.Z)("ring-smart-tabs",n),selected:this.state.selected,onSelect:this.handleSelect},r),t)}}]),n}(m.PureComponent);(0,h._)(ne,"propTypes",{children:i().arrayOf(i().element).isRequired,initSelected:i().string,"data-test":i().string});var re=function(e){(0,p.Z)(n,e);var t=(0,f.Z)(n);function n(){return(0,c.Z)(this,n),t.apply(this,arguments)}return(0,u.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.className,n=e.children,r=e["data-test"],i=_()(b.tab,t);return m.createElement("div",{"data-test":(0,y.Z)("ring-tab",r),className:i},n)}}]),n}(m.PureComponent);(0,h._)(re,"propTypes",{title:i().oneOfType([i().node,i().func]).isRequired,id:i().string,className:i().string,children:i().node,"data-test":i().string})},80430:function(e,t,n){"use strict";n.d(t,{Z:function(){return D}});var r=n(64649),i=n(22951),a=n(91976),o=n(47169),s=n(67591),l=n(94337),c=n(79636),u=n(22491),d=n(50889),p=n.n(d),f=n(71894),h=n.n(f),m=n(88218),g=n.n(m),_=n(48882),v=n(80487),y=n(58526),b=(n(38579),n(74357),n(48770),n(55398),n(96144),n(64431),n(33344),n(42679),"tag_rui_2f49 resetButton_rui_8bff"),E="tagAngled_rui_2f49",S="withRemove_rui_2f49",T="container_rui_2f49",C="focused_rui_2f49",x="content_rui_2f49 ellipsis_rui_8bff",w="disabled_rui_2f49",O="remove_rui_2f49",N="removeIcon_rui_2f49",R="icon_rui_2f49",I="avatarContainer_rui_2f49",A="customIcon_rui_2f49",k="avatarIcon_rui_2f49",D=function(e){(0,s.Z)(n,e);var t=(0,l.Z)(n);function n(){var e;return(0,i.Z)(this,n),e=t.apply(this,arguments),(0,c._)((0,o.Z)(e),"state",{focused:!1}),(0,c._)((0,o.Z)(e),"onDocumentClick",(function(t){e.tagNode&&e.setState({focused:e.tagNode===t.target})})),(0,c._)((0,o.Z)(e),"tagNode",void 0),(0,c._)((0,o.Z)(e),"tagRef",(function(t){e.tagNode=t})),e}return(0,a.Z)(n,[{key:"componentDidUpdate",value:function(e){var t;(this.props.focused!==e.focused&&this.setState({focused:this.props.focused}),this.state.focused)&&(null===(t=this.tagNode)||void 0===t||t.focus());this.setDocumentClickListener(this.state.focused)}},{key:"componentWillUnmount",value:function(){this.setDocumentClickListener(!1),this.setState({focused:!1})}},{key:"setDocumentClickListener",value:function(e){e?document.addEventListener("click",this.onDocumentClick):document.removeEventListener("click",this.onDocumentClick)}},{key:"renderCustomIcon",value:function(){return this.props.rgTagIcon?u.createElement(_.ZP,{className:R,title:this.props.rgTagTitle,glyph:this.props.rgTagIcon}):null}},{key:"_renderImageElement",value:function(e){var t,n=h()((t={},(0,r.Z)(t,A,this.props.icon),(0,r.Z)(t,k,e),t));return u.createElement("img",{alt:e?"Avatar":"Icon",className:n,src:e||this.props.icon})}},{key:"renderImage",value:function(){return this.props.icon&&!this.props.avatar?this._renderImageElement():null}},{key:"renderAvatar",value:function(){return this.props.avatar?u.createElement("span",{className:I},this._renderImageElement(this.props.avatar)):null}},{key:"renderRemoveIcon",value:function(){return this.props.readOnly?null:u.createElement(v.zx,{title:"Remove",icon:g(),"data-test":"ring-tag-remove",className:O,iconClassName:N,onClick:this.props.onRemove,style:{"--ring-icon-secondary-color":this.props.textColor},height:y.o.M})}},{key:"render",value:function(){var e,t=h()("ring-js-shortcuts",b,(e={},(0,r.Z)(e,C,this.state.focused),(0,r.Z)(e,w,this.props.disabled),(0,r.Z)(e,E,this.props.angled),(0,r.Z)(e,S,!this.props.readOnly),e),this.props.className),n=this.props,i=n.backgroundColor,a=n.textColor,o=n.render;return u.createElement("span",{className:T},o({"data-test":"ring-tag",className:t,ref:this.tagRef,onClick:this.props.onClick,style:{backgroundColor:i,color:a},disabled:this.props.disabled,children:u.createElement(u.Fragment,null,this.renderAvatar(),this.renderCustomIcon(),this.renderImage(),u.createElement("span",{className:x},this.props.children))}),this.renderRemoveIcon())}}]),n}(u.PureComponent);(0,c._)(D,"propTypes",{onRemove:p().func,onClick:p().func,rgTagIcon:p().oneOfType([p().string,p().elementType]),icon:p().string,avatar:p().string,rgTagTitle:p().string,readOnly:p().bool,disabled:p().bool,focused:p().bool,angled:p().bool,backgroundColor:p().string,textColor:p().string,children:p().node,className:p().string,render:p().func}),(0,c._)(D,"defaultProps",{onRemove:function(){},onClick:function(){},readOnly:!1,disabled:!1,focused:!1,render:function(e){return u.createElement("button",(0,c.a)({type:"button"},e))}})},98228:function(e,t,n){"use strict";n.d(t,{Z:function(){return _}});var r=n(53782),i=n(22951),a=n(91976),o=n(67591),s=n(94337),l=n(79636),c=n(22491),u=n(50889),d=n.n(u),p=n(71894),f=n.n(p),h=n(80430),m=(n(88218),n(48882),n(38579),n(74357),n(48770),n(55398),n(80487),n(96144),n(64431),n(33344),n(58526),n(42679),["children","className","customTagComponent","canNotBeEmpty","handleClick","tagClassName","handleRemove","tags","activeIndex"]);function g(){}var _=function(e){(0,o.Z)(n,e);var t=(0,s.Z)(n);function n(){return(0,i.Z)(this,n),t.apply(this,arguments)}return(0,a.Z)(n,[{key:"renderTag",value:function(e,t){var n=this.props.customTagComponent||h.Z,r=this.props.disabled||e.readOnly||this.props.canNotBeEmpty&&1===this.props.tags.length,i=this.props.tagClassName;return c.createElement(n,(0,l.a)({},e,{readOnly:r,disabled:this.props.disabled||e.disabled,focused:t,onClick:this.props.handleClick(e),onRemove:this.props.handleRemove(e),className:i}),e.label)}},{key:"render",value:function(){var e=this,t=this.props,n=t.children,i=t.className,a=(t.customTagComponent,t.canNotBeEmpty,t.handleClick,t.tagClassName,t.handleRemove,t.tags,t.activeIndex,(0,r.Z)(t,m)),o=f()("ring-js-shortcuts",i),s=(this.props.tags||[]).map((function(t,n){return e.renderTag(t,e.props.activeIndex===n)}));return c.createElement("div",(0,l.a)({"data-test":"ring-tags-list",className:o},a),s,n)}}]),n}(c.Component);(0,l._)(_,"propTypes",{children:d().node,tags:d().array,customTagComponent:d().elementType,activeIndex:d().number,canNotBeEmpty:d().bool,disabled:d().bool,handleClick:d().func,handleRemove:d().func,className:d().string,tagClassName:d().string}),(0,l._)(_,"defaultProps",{customTagComponent:null,canNotBeEmpty:!1,disabled:!1,handleClick:g,handleRemove:g})},39127:function(e,t,n){"use strict";n.d(t,{Z:function(){return v}});var r=n(64649),i=n(53782),a=n(22951),o=n(91976),s=n(67591),l=n(94337),c=n(79636),u=n(22491),d=n(50889),p=n.n(d),f=n(71894),h=n.n(f),m=["children","className","info"],g="text_rui_6f30",_="info_rui_6f30",v=function(e){(0,s.Z)(n,e);var t=(0,l.Z)(n);function n(){return(0,a.Z)(this,n),t.apply(this,arguments)}return(0,o.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.children,n=e.className,a=e.info,o=(0,i.Z)(e,m),s=h()(g,n,(0,r.Z)({},_,a));return u.createElement("span",(0,c.a)({className:s},o),t)}}]),n}(u.Component);(0,c._)(v,"propTypes",{children:p().node,info:p().bool,className:p().string})},21091:function(e,t,n){"use strict";n.d(t,{Z:function(){return x}});var r=n(64649),i=n(53782),a=n(22951),o=n(91976),s=n(47169),l=n(67591),c=n(94337),u=n(79636),d=n(22491),p=n(50889),f=n.n(p),h=n(71894),m=n.n(h),g=n(68062),_=n(52706),v=n(75838),y=n(60953),b=(n(92418),n(51231),n(81975),n(54048),n(77373),n(39489),n(37406),n(24566),n(90698),n(15573),n(90986),["children","data-test","title","delay","selfOverflowOnly","popupProps","long"]),E="tooltip_rui_64ba",S="long_rui_64ba",T=(0,y.Z)(),C=(0,d.createContext)(void 0),x=function(e){(0,l.Z)(n,e);var t=(0,c.Z)(n);function n(){var e;return(0,a.Z)(this,n),e=t.apply(this,arguments),(0,u._)((0,s.Z)(e),"state",{showPopup:!1,showNestedPopup:!1}),(0,u._)((0,s.Z)(e),"timeout",void 0),(0,u._)((0,s.Z)(e),"listeners",new _.zy),(0,u._)((0,s.Z)(e),"containerNode",void 0),(0,u._)((0,s.Z)(e),"containerRef",(function(t){e.containerNode=t})),(0,u._)((0,s.Z)(e),"tryToShowPopup",(function(){var t=e.props,n=t.delay;t.title&&(n?e.timeout=window.setTimeout(e.showPopup,n):e.showPopup())})),(0,u._)((0,s.Z)(e),"showPopup",(function(){var t;if(e.props.selfOverflowOnly){var n=(0,s.Z)(e).containerNode;if(!n)return;if(0===n.clientWidth&&0===n.clientHeight)return;if(n.scrollWidth<=n.clientWidth&&n.scrollHeight<=n.clientHeight)return}null===(t=e.context)||void 0===t||t.onNestedTooltipShow(),e.setState({showPopup:!0})})),(0,u._)((0,s.Z)(e),"hidePopup",(function(){var t;clearTimeout(e.timeout),null===(t=e.context)||void 0===t||t.onNestedTooltipHide(),e.setState({showPopup:!1})})),(0,u._)((0,s.Z)(e),"popup",void 0),(0,u._)((0,s.Z)(e),"popupRef",(function(t){e.popup=t})),(0,u._)((0,s.Z)(e),"onNestedTooltipShow",(function(){e.setState({showNestedPopup:!0})})),(0,u._)((0,s.Z)(e),"onNestedTooltipHide",(function(){e.setState({showNestedPopup:!1})})),e}return(0,o.Z)(n,[{key:"componentDidMount",value:function(){this.props.title&&this.addListeners()}},{key:"componentDidUpdate",value:function(e){!e.title&&this.props.title?this.addListeners():e.title&&!this.props.title&&this.listeners.removeAll()}},{key:"componentWillUnmount",value:function(){clearTimeout(this.timeout),this.listeners.removeAll()}},{key:"addListeners",value:function(){var e=this;null!=this.containerNode&&(this.listeners.add(this.containerNode,"mouseover",this.tryToShowPopup),this.listeners.add(this.containerNode,"mouseout",this.hidePopup)),this.listeners.add(document,"scroll",(function(){return T(e.hidePopup)}),{passive:!0})}},{key:"render",value:function(){var e=this.props,t=e.children,n=e["data-test"],a=e.title,o=(e.delay,e.selfOverflowOnly,e.popupProps),s=e.long,l=(0,i.Z)(e,b),c="string"===typeof a&&a?{"aria-label":a,role:"tooltip"}:{},p=this.onNestedTooltipShow,f=this.onNestedTooltipHide;return d.createElement(C.Provider,{value:{onNestedTooltipShow:p,onNestedTooltipHide:f}},d.createElement("span",(0,u.a)({},c,l,{ref:this.containerRef,"data-test":(0,v.Z)("ring-tooltip",n),"data-test-title":"string"===typeof a?a:void 0}),t,d.createElement(g.ZP,(0,u.a)({trapFocus:!1,hidden:!this.state.showPopup||this.state.showNestedPopup,onCloseAttempt:this.hidePopup,maxHeight:400,className:m()(E,(0,r.Z)({},S,s)),attached:!1,top:4,dontCloseOnAnchorClick:!0,ref:this.popupRef},o),a)))}}]),n}(d.Component);(0,u._)(x,"propTypes",{delay:f().number,selfOverflowOnly:f().bool,popupProps:f().object,title:f().node,children:f().node,"data-test":f().string}),(0,u._)(x,"defaultProps",{title:"",selfOverflowOnly:!1,popupProps:{}}),(0,u._)(x,"PopupProps",g.ZP.PopupProps),(0,u._)(x,"contextType",C)},68170:function(e,t,n){"use strict";n.d(t,{Z:function(){return K}});var r,i=[],a="ResizeObserver loop completed with undelivered notifications.";!function(e){e.BORDER_BOX="border-box",e.CONTENT_BOX="content-box",e.DEVICE_PIXEL_CONTENT_BOX="device-pixel-content-box"}(r||(r={}));var o,s,l=function(e){return Object.freeze(e)},c=function(e,t){this.inlineSize=e,this.blockSize=t,l(this)},u=function(){function e(e,t,n,r){return this.x=e,this.y=t,this.width=n,this.height=r,this.top=this.y,this.left=this.x,this.bottom=this.top+this.height,this.right=this.left+this.width,l(this)}return e.prototype.toJSON=function(){var e=this;return{x:e.x,y:e.y,top:e.top,right:e.right,bottom:e.bottom,left:e.left,width:e.width,height:e.height}},e.fromRect=function(t){return new e(t.x,t.y,t.width,t.height)},e}(),d=function(e){return e instanceof SVGElement&&"getBBox"in e},p=function(e){if(d(e)){var t=e.getBBox(),n=t.width,r=t.height;return!n&&!r}var i=e,a=i.offsetWidth,o=i.offsetHeight;return!(a||o||e.getClientRects().length)},f=function(e){var t;if(e instanceof Element)return!0;var n=null===(t=null===e||void 0===e?void 0:e.ownerDocument)||void 0===t?void 0:t.defaultView;return!!(n&&e instanceof n.Element)},h="undefined"!==typeof window?window:{},m=new WeakMap,g=/auto|scroll/,_=/^tb|vertical/,v=/msie|trident/i.test(h.navigator&&h.navigator.userAgent),y=function(e){return parseFloat(e||"0")},b=function(e,t,n){return void 0===e&&(e=0),void 0===t&&(t=0),void 0===n&&(n=!1),new c((n?t:e)||0,(n?e:t)||0)},E=l({devicePixelContentBoxSize:b(),borderBoxSize:b(),contentBoxSize:b(),contentRect:new u(0,0,0,0)}),S=function(e,t){if(void 0===t&&(t=!1),m.has(e)&&!t)return m.get(e);if(p(e))return m.set(e,E),E;var n=getComputedStyle(e),r=d(e)&&e.ownerSVGElement&&e.getBBox(),i=!v&&"border-box"===n.boxSizing,a=_.test(n.writingMode||""),o=!r&&g.test(n.overflowY||""),s=!r&&g.test(n.overflowX||""),c=r?0:y(n.paddingTop),f=r?0:y(n.paddingRight),h=r?0:y(n.paddingBottom),S=r?0:y(n.paddingLeft),T=r?0:y(n.borderTopWidth),C=r?0:y(n.borderRightWidth),x=r?0:y(n.borderBottomWidth),w=S+f,O=c+h,N=(r?0:y(n.borderLeftWidth))+C,R=T+x,I=s?e.offsetHeight-R-e.clientHeight:0,A=o?e.offsetWidth-N-e.clientWidth:0,k=i?w+N:0,D=i?O+R:0,M=r?r.width:y(n.width)-k-A,P=r?r.height:y(n.height)-D-I,L=M+w+A+N,F=P+O+I+R,B=l({devicePixelContentBoxSize:b(Math.round(M*devicePixelRatio),Math.round(P*devicePixelRatio),a),borderBoxSize:b(L,F,a),contentBoxSize:b(M,P,a),contentRect:new u(S,c,M,P)});return m.set(e,B),B},T=function(e,t,n){var i=S(e,n),a=i.borderBoxSize,o=i.contentBoxSize,s=i.devicePixelContentBoxSize;switch(t){case r.DEVICE_PIXEL_CONTENT_BOX:return s;case r.BORDER_BOX:return a;default:return o}},C=function(e){var t=S(e);this.target=e,this.contentRect=t.contentRect,this.borderBoxSize=l([t.borderBoxSize]),this.contentBoxSize=l([t.contentBoxSize]),this.devicePixelContentBoxSize=l([t.devicePixelContentBoxSize])},x=function(e){if(p(e))return 1/0;for(var t=0,n=e.parentNode;n;)t+=1,n=n.parentNode;return t},w=function(){var e=1/0,t=[];i.forEach((function(n){if(0!==n.activeTargets.length){var r=[];n.activeTargets.forEach((function(t){var n=new C(t.target),i=x(t.target);r.push(n),t.lastReportedSize=T(t.target,t.observedBox),ie?t.activeTargets.push(n):t.skippedTargets.push(n))}))}))},N=function(){var e=0;for(O(e);i.some((function(e){return e.activeTargets.length>0}));)e=w(),O(e);return i.some((function(e){return e.skippedTargets.length>0}))&&function(){var e;"function"===typeof ErrorEvent?e=new ErrorEvent("error",{message:a}):((e=document.createEvent("Event")).initEvent("error",!1,!1),e.message=a),window.dispatchEvent(e)}(),e>0},R=[],I=function(e){if(!o){var t=0,n=document.createTextNode("");new MutationObserver((function(){return R.splice(0).forEach((function(e){return e()}))})).observe(n,{characterData:!0}),o=function(){n.textContent="".concat(t?t--:t++)}}R.push(e),o()},A=0,k={attributes:!0,characterData:!0,childList:!0,subtree:!0},D=["resize","load","transitionend","animationend","animationstart","animationiteration","keyup","keydown","mouseup","mousedown","mouseover","mouseout","blur","focus"],M=function(e){return void 0===e&&(e=0),Date.now()+e},P=!1,L=new(function(){function e(){var e=this;this.stopped=!0,this.listener=function(){return e.schedule()}}return e.prototype.run=function(e){var t=this;if(void 0===e&&(e=250),!P){P=!0;var n,r=M(e);n=function(){var n=!1;try{n=N()}finally{if(P=!1,e=r-M(),!A)return;n?t.run(1e3):e>0?t.run(e):t.start()}},I((function(){requestAnimationFrame(n)}))}},e.prototype.schedule=function(){this.stop(),this.run()},e.prototype.observe=function(){var e=this,t=function(){return e.observer&&e.observer.observe(document.body,k)};document.body?t():h.addEventListener("DOMContentLoaded",t)},e.prototype.start=function(){var e=this;this.stopped&&(this.stopped=!1,this.observer=new MutationObserver(this.listener),this.observe(),D.forEach((function(t){return h.addEventListener(t,e.listener,!0)})))},e.prototype.stop=function(){var e=this;this.stopped||(this.observer&&this.observer.disconnect(),D.forEach((function(t){return h.removeEventListener(t,e.listener,!0)})),this.stopped=!0)},e}()),F=function(e){!A&&e>0&&L.start(),!(A+=e)&&L.stop()},B=function(){function e(e,t){this.target=e,this.observedBox=t||r.CONTENT_BOX,this.lastReportedSize={inlineSize:0,blockSize:0}}return e.prototype.isActive=function(){var e,t=T(this.target,this.observedBox,!0);return e=this.target,d(e)||function(e){switch(e.tagName){case"INPUT":if("image"!==e.type)break;case"VIDEO":case"AUDIO":case"EMBED":case"OBJECT":case"CANVAS":case"IFRAME":case"IMG":return!0}return!1}(e)||"inline"!==getComputedStyle(e).display||(this.lastReportedSize=t),this.lastReportedSize.inlineSize!==t.inlineSize||this.lastReportedSize.blockSize!==t.blockSize},e}(),U=function(e,t){this.activeTargets=[],this.skippedTargets=[],this.observationTargets=[],this.observer=e,this.callback=t},G=new WeakMap,z=function(e,t){for(var n=0;n=0&&(a&&i.splice(i.indexOf(n),1),n.observationTargets.splice(r,1),F(-1))},e.disconnect=function(e){var t=this,n=G.get(e);n.observationTargets.slice().forEach((function(n){return t.unobserve(e,n.target)})),n.activeTargets.splice(0,n.activeTargets.length)},e}(),H=function(){function e(e){if(0===arguments.length)throw new TypeError("Failed to construct 'ResizeObserver': 1 argument required, but only 0 present.");if("function"!==typeof e)throw new TypeError("Failed to construct 'ResizeObserver': The callback provided as parameter 1 is not a function.");j.connect(this,e)}return e.prototype.observe=function(e,t){if(0===arguments.length)throw new TypeError("Failed to execute 'observe' on 'ResizeObserver': 1 argument required, but only 0 present.");if(!f(e))throw new TypeError("Failed to execute 'observe' on 'ResizeObserver': parameter 1 is not of type 'Element");j.observe(this,e,t)},e.prototype.unobserve=function(e){if(0===arguments.length)throw new TypeError("Failed to execute 'unobserve' on 'ResizeObserver': 1 argument required, but only 0 present.");if(!f(e))throw new TypeError("Failed to execute 'unobserve' on 'ResizeObserver': parameter 1 is not of type 'Element");j.unobserve(this,e)},e.prototype.disconnect=function(){j.disconnect(this)},e.toString=function(){return"function ResizeObserver () { [polyfill code] }"},e}(),Z=n(22491),Y=Z["undefined"!==typeof document&&void 0!==document.createElement?"useLayoutEffect":"useEffect"],V=function(e){var t=Z.useRef(e);return Z.useEffect((function(){t.current=e})),t},q="undefined"!==typeof window&&"ResizeObserver"in window?window.ResizeObserver:H;function W(){}var $=function(){return s||(s=function(){var e=!1,t=[],n=new Map,r=new q((function(r,i){t=t.concat(r),e||window.requestAnimationFrame((function(){for(var r=new Set,a=function(e){if(r.has(t[e].target))return"continue";r.add(t[e].target);var a=n.get(t[e].target);null===a||void 0===a||a.forEach((function(n){return n(t[e],i)}))},o=0;o1?t-1:0),r=1;r3?t.i-4:t.i:Array.isArray(e)?1:f(e)?2:h(e)?3:0}function c(e,t){return 2===l(e)?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function u(e,t){return 2===l(e)?e.get(t):e[t]}function d(e,t,n){var r=l(e);2===r?e.set(t,n):3===r?(e.delete(t),e.add(n)):e[t]=n}function p(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}function f(e){return H&&e instanceof Map}function h(e){return Z&&e instanceof Set}function m(e){return e.o||e.t}function g(e){if(Array.isArray(e))return Array.prototype.slice.call(e);var t=Q(e);delete t[W];for(var n=K(t),r=0;r1&&(e.set=e.add=e.clear=e.delete=v),Object.freeze(e),t&&s(e,(function(e,t){return _(t,!0)}),!0)),e}function v(){i(2)}function y(e){return null==e||"object"!=(0,r.Z)(e)||Object.isFrozen(e)}function b(e){var t=X[e];return t||i(18,e),t}function E(e,t){X[e]||(X[e]=t)}function S(){return z}function T(e,t){t&&(b("Patches"),e.u=[],e.s=[],e.v=t)}function C(e){x(e),e.p.forEach(O),e.p=null}function x(e){e===z&&(z=e.l)}function w(e){return z={p:[],l:z,h:e,m:!0,_:0}}function O(e){var t=e[W];0===t.i||1===t.i?t.j():t.O=!0}function N(e,t){t._=t.p.length;var n=t.p[0],r=void 0!==e&&e!==n;return t.h.g||b("ES5").S(t,e,r),r?(n[W].P&&(C(t),i(4)),o(e)&&(e=R(t,e),t.l||A(t,e)),t.u&&b("Patches").M(n[W].t,e,t.u,t.s)):e=R(t,n,[]),C(t),t.u&&t.v(t.u,t.s),e!==V?e:void 0}function R(e,t,n){if(y(t))return t;var r=t[W];if(!r)return s(t,(function(i,a){return I(e,r,t,i,a,n)}),!0),t;if(r.A!==e)return t;if(!r.P)return A(e,r.t,!0),r.t;if(!r.I){r.I=!0,r.A._--;var i=4===r.i||5===r.i?r.o=g(r.k):r.o;s(3===r.i?new Set(i):i,(function(t,a){return I(e,r,i,t,a,n)})),A(e,i,!1),n&&e.u&&b("Patches").R(r,n,e.u,e.s)}return r.o}function I(e,t,n,r,i,s){if(a(i)){var l=R(e,i,s&&t&&3!==t.i&&!c(t.D,r)?s.concat(r):void 0);if(d(n,r,l),!a(l))return;e.m=!1}if(o(i)&&!y(i)){if(!e.h.F&&e._<1)return;R(e,i),t&&t.A.l||A(e,i)}}function A(e,t,n){void 0===n&&(n=!1),e.h.F&&e.m&&_(t,n)}function k(e,t){var n=e[W];return(n?m(n):e)[t]}function D(e,t){if(t in e)for(var n=Object.getPrototypeOf(e);n;){var r=Object.getOwnPropertyDescriptor(n,t);if(r)return r;n=Object.getPrototypeOf(n)}}function M(e){e.P||(e.P=!0,e.l&&M(e.l))}function P(e){e.o||(e.o=g(e.t))}function L(e,t,n){var r=f(t)?b("MapSet").N(t,n):h(t)?b("MapSet").T(t,n):e.g?function(e,t){var n=Array.isArray(e),r={i:n?1:0,A:t?t.A:S(),P:!1,I:!1,D:{},l:t,t:e,k:null,o:null,j:null,C:!1},i=r,a=J;n&&(i=[r],a=ee);var o=Proxy.revocable(i,a),s=o.revoke,l=o.proxy;return r.k=l,r.j=s,l}(t,n):b("ES5").J(t,n);return(n?n.A:S()).p.push(r),r}function F(e){return a(e)||i(22,e),function e(t){if(!o(t))return t;var n,r=t[W],i=l(t);if(r){if(!r.P&&(r.i<4||!b("ES5").K(r)))return r.t;r.I=!0,n=B(t,i),r.I=!1}else n=B(t,i);return s(n,(function(t,i){r&&u(r.t,t)===i||d(n,t,e(i))})),3===i?new Set(n):n}(e)}function B(e,t){switch(t){case 2:return new Map(e);case 3:return Array.from(e)}return g(e)}function U(){function e(e,t){var n=o[e];return n?n.enumerable=t:o[e]=n={configurable:!0,enumerable:t,get:function(){var t=this[W];return J.get(t,e)},set:function(t){var n=this[W];J.set(n,e,t)}},n}function t(e){for(var t=e.length-1;t>=0;t--){var r=e[t][W];if(!r.P)switch(r.i){case 5:i(r)&&M(r);break;case 4:n(r)&&M(r)}}}function n(e){for(var t=e.t,n=e.k,r=K(n),i=r.length-1;i>=0;i--){var a=r[i];if(a!==W){var o=t[a];if(void 0===o&&!c(t,a))return!0;var s=n[a],l=s&&s[W];if(l?l.t!==o:!p(s,o))return!0}}var u=!!t[W];return r.length!==K(t).length+(u?0:1)}function i(e){var t=e.k;if(t.length!==e.t.length)return!0;var n=Object.getOwnPropertyDescriptor(t,t.length-1);if(n&&!n.get)return!0;for(var r=0;r1?r-1:0),a=1;a1?r-1:0),a=1;a=0;n--){var r=t[n];if(0===r.path.length&&"replace"===r.op){e=r.value;break}}n>-1&&(t=t.slice(n+1));var i=b("Patches").$;return a(e)?i(e,t):this.produce(e,(function(e){return i(e,t)}))},e}(),ne=new te,re=ne.produce,ie=(ne.produceWithPatches.bind(ne),ne.setAutoFreeze.bind(ne),ne.setUseProxies.bind(ne),ne.applyPatches.bind(ne),ne.createDraft.bind(ne),ne.finishDraft.bind(ne),re),ae=n(16199),oe=function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if("function"!==typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),se=function(e,t){var n,r,i,a,o={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return a={next:s(0),throw:s(1),return:s(2)},"function"===typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(a){return function(s){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(i=2&a[0]?r.return:a[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,a[1])).done)return i;switch(r=0,i&&(a=[2&a[0],i.value]),a[0]){case 0:case 1:i=a;break;case 4:return o.label++,{value:a[1],done:!1};case 5:o.label++,r=a[1],a=[0];continue;case 7:a=o.ops.pop(),o.trys.pop();continue;default:if(!(i=(i=o.trys).length>0&&i[i.length-1])&&(6===a[0]||2===a[0])){o=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]=0?t:0}e.release&&(this.release=e.release),e.environment&&(this.environment=e.environment),!this.ipAddress&&e.ipAddress&&(this.ipAddress=e.ipAddress),!this.userAgent&&e.userAgent&&(this.userAgent=e.userAgent),"number"===typeof e.errors&&(this.errors=e.errors),e.status&&(this.status=e.status)},e.prototype.close=function(e){e?this.update({status:e}):"ok"===this.status?this.update({status:"exited"}):this.update()},e.prototype.toJSON=function(){return(0,d.Jr)({sid:""+this.sid,init:this.init,started:new Date(1e3*this.started).toISOString(),timestamp:new Date(1e3*this.timestamp).toISOString(),status:this.status,errors:this.errors,did:"number"===typeof this.did||"string"===typeof this.did?""+this.did:void 0,duration:this.duration,attrs:{release:this.release,environment:this.environment,ip_address:this.ipAddress,user_agent:this.userAgent}})},e}(),f=function(){function e(e,t,n){void 0===t&&(t=new u.s),void 0===n&&(n=4),this._version=n,this._stack=[{}],this.getStackTop().scope=t,e&&this.bindClient(e)}return e.prototype.isOlderThan=function(e){return this._version0?e.breadcrumbs:void 0,e.sdkProcessingMetadata=this._sdkProcessingMetadata,this._notifyEventProcessors((0,r.fl)(c(),this._eventProcessors),e,t)},e.prototype.setSDKProcessingMetadata=function(e){return this._sdkProcessingMetadata=(0,r.pi)((0,r.pi)({},this._sdkProcessingMetadata),e),this},e.prototype._notifyEventProcessors=function(e,t,n,a){var s=this;return void 0===a&&(a=0),new o.cW((function(o,l){var c=e[a];if(null===t||"function"!==typeof c)o(t);else{var u=c((0,r.pi)({},t),n);(0,i.J8)(u)?u.then((function(t){return s._notifyEventProcessors(e,t,n,a+1).then(o)})).then(null,l):s._notifyEventProcessors(e,u,n,a+1).then(o).then(null,l)}}))},e.prototype._notifyScopeListeners=function(){var e=this;this._notifyingListeners||(this._notifyingListeners=!0,this._scopeListeners.forEach((function(t){t(e)})),this._notifyingListeners=!1)},e.prototype._applyFingerprint=function(e){e.fingerprint=e.fingerprint?Array.isArray(e.fingerprint)?e.fingerprint:[e.fingerprint]:[],this._fingerprint&&(e.fingerprint=e.fingerprint.concat(this._fingerprint)),e.fingerprint&&!e.fingerprint.length&&delete e.fingerprint},e}();function c(){return(0,s.Y)("globalEventProcessors",(function(){return[]}))}function u(e){c().push(e)}},83127:function(e,t,n){"use strict";n.d(t,{fl:function(){return a},pi:function(){return r}});var r=function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0)&&!(r=a.next()).done;)o.push(r.value)}catch(s){i={error:s}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(i)throw i.error}}return o}function a(){for(var e=[],t=0;t0)&&!(r=a.next()).done;)o.push(r.value)}catch(s){i={error:s}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(i)throw i.error}}return o}function a(){for(var e=[],t=0;t=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function o(e,t){var n="function"===typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,a=n.call(e),o=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)o.push(r.value)}catch(s){i={error:s}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(i)throw i.error}}return o}function s(){for(var e=[],t=0;t=0;t--){var n=e[t];if(n&&""!==n.filename&&"[native code]"!==n.filename)return n.filename||null}return null}function m(e){try{if(e.stacktrace)return h(e.stacktrace.frames);var t;try{t=e.exception.values[0].stacktrace.frames}catch(n){}return t?h(t):null}catch(r){return d&&l.kg.error("Cannot extract url for event "+(0,c.jH)(e)),null}}var g,_=n(40707),v=function(){function e(){this.name=e.id}return e.prototype.setupOnce=function(){g=Function.prototype.toString,Function.prototype.toString=function(){for(var e=[],t=0;t0)&&!(r=a.next()).done;)o.push(r.value)}catch(s){i={error:s}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(i)throw i.error}}return o}function w(){for(var e=[],t=0;t1&&(u=p.slice(0,-1).join("/"),d=p.pop()),d){var f=d.match(/^\d+/);f&&(d=f[0])}return P({host:s,pass:o,path:u,projectId:d,port:c,protocol:r,publicKey:i})}(e):P(e);return function(e){if(k.h){var t=e.port,n=e.projectId,r=e.protocol;if(["protocol","publicKey","host","projectId"].forEach((function(t){if(!e[t])throw new A("Invalid Sentry Dsn: "+t+" missing")})),!n.match(/^\d+$/))throw new A("Invalid Sentry Dsn: Invalid projectId "+n);if(!function(e){return"http"===e||"https"===e}(r))throw new A("Invalid Sentry Dsn: Invalid protocol "+r);if(t&&isNaN(parseInt(t,10)))throw new A("Invalid Sentry Dsn: Invalid port "+t)}}(t),t}var F=n(91977),B=n(80858),U=n(82219);var G=n(74483);function z(e,t,n){void 0===t&&(t=1/0),void 0===n&&(n=1/0);try{return H("",e,t,n)}catch(r){return{ERROR:"**non-serializable** ("+r+")"}}}function j(e,t,n){void 0===t&&(t=3),void 0===n&&(n=102400);var r,i=z(e,t);return r=i,function(e){return~-encodeURI(e).split(/%..|./).length}(JSON.stringify(r))>n?j(e,t-1,n):i}function H(e,t,r,i,a){void 0===r&&(r=1/0),void 0===i&&(i=1/0),void 0===a&&(a=function(){var e="function"===typeof WeakSet,t=e?new WeakSet:[];return[function(n){if(e)return!!t.has(n)||(t.add(n),!1);for(var r=0;r=i){d[h]="[MaxProperties ~]";break}var m=f[h];d[h]=H(h,m,r-1,i,a),p+=1}return l(t),d}var Z=[];function Y(e){return e.reduce((function(e,t){return e.every((function(e){return t.name!==e.name}))&&e.push(t),e}),[])}function V(e){var t={};return function(e){var t=e.defaultIntegrations&&s(e.defaultIntegrations)||[],n=e.integrations,r=s(Y(t));Array.isArray(n)?r=s(r.filter((function(e){return n.every((function(t){return t.name!==e.name}))})),Y(n)):"function"===typeof n&&(r=n(r),r=Array.isArray(r)?r:[r]);var i=r.map((function(e){return e.name})),a="Debug";return-1!==i.indexOf(a)&&r.push.apply(r,s(r.splice(i.indexOf(a),1))),r}(e).forEach((function(e){t[e.name]=e,function(e){-1===Z.indexOf(e.name)&&(e.setupOnce(N.c,y.Gd),Z.push(e.name),d&&l.kg.log("Integration installed: "+e.name))}(e)})),(0,_.xp)(t,"initialized",!0),t}var q="Not capturing exception because it's already been captured.",W=function(){function e(e,t){this._integrations={},this._numProcessing=0,this._backend=new e(t),this._options=t,t.dsn&&(this._dsn=L(t.dsn))}return e.prototype.captureException=function(e,t,n){var r=this;if(!(0,c.YO)(e)){var i=t&&t.event_id;return this._process(this._getBackend().eventFromException(e,t).then((function(e){return r._captureEvent(e,t,n)})).then((function(e){i=e}))),i}d&&l.kg.log(q)},e.prototype.captureMessage=function(e,t,n,r){var i=this,a=n&&n.event_id,o=(0,F.pt)(e)?this._getBackend().eventFromMessage(String(e),t,n):this._getBackend().eventFromException(e,n);return this._process(o.then((function(e){return i._captureEvent(e,n,r)})).then((function(e){a=e}))),a},e.prototype.captureEvent=function(e,t,n){if(!(t&&t.originalException&&(0,c.YO)(t.originalException))){var r=t&&t.event_id;return this._process(this._captureEvent(e,t,n).then((function(e){r=e}))),r}d&&l.kg.log(q)},e.prototype.captureSession=function(e){this._isEnabled()?"string"!==typeof e.release?d&&l.kg.warn("Discarded session because of missing or non-string release"):(this._sendSession(e),e.update({init:!1})):d&&l.kg.warn("SDK not enabled, will not capture session.")},e.prototype.getDsn=function(){return this._dsn},e.prototype.getOptions=function(){return this._options},e.prototype.getTransport=function(){return this._getBackend().getTransport()},e.prototype.flush=function(e){var t=this;return this._isClientDoneProcessing(e).then((function(n){return t.getTransport().close(e).then((function(e){return n&&e}))}))},e.prototype.close=function(e){var t=this;return this.flush(e).then((function(e){return t.getOptions().enabled=!1,e}))},e.prototype.setupIntegrations=function(){this._isEnabled()&&!this._integrations.initialized&&(this._integrations=V(this._options))},e.prototype.getIntegration=function(e){try{return this._integrations[e.id]||null}catch(t){return d&&l.kg.warn("Cannot retrieve integration "+e.id+" from the current Client"),null}},e.prototype._updateSessionFromEvent=function(e,t){var n,r,o=!1,s=!1,l=t.exception&&t.exception.values;if(l){s=!0;try{for(var c=a(l),u=c.next();!u.done;u=c.next()){var d=u.value.mechanism;if(d&&!1===d.handled){o=!0;break}}}catch(f){n={error:f}}finally{try{u&&!u.done&&(r=c.return)&&r.call(c)}finally{if(n)throw n.error}}}var p="ok"===e.status;(p&&0===e.errors||p&&o)&&(e.update(i(i({},o&&{status:"crashed"}),{errors:e.errors||Number(s||o)})),this.captureSession(e))},e.prototype._sendSession=function(e){this._getBackend().sendSession(e)},e.prototype._isClientDoneProcessing=function(e){var t=this;return new B.cW((function(n){var r=0,i=setInterval((function(){0==t._numProcessing?(clearInterval(i),n(!0)):(r+=1,e&&r>=e&&(clearInterval(i),n(!1)))}),1)}))},e.prototype._getBackend=function(){return this._backend},e.prototype._isEnabled=function(){return!1!==this.getOptions().enabled&&void 0!==this._dsn},e.prototype._prepareEvent=function(e,t,n){var r=this,a=this.getOptions(),o=a.normalizeDepth,s=void 0===o?3:o,l=a.normalizeMaxBreadth,u=void 0===l?1e3:l,d=i(i({},e),{event_id:e.event_id||(n&&n.event_id?n.event_id:(0,c.DM)()),timestamp:e.timestamp||(0,U.yW)()});this._applyClientOptions(d),this._applyIntegrationsMetadata(d);var p=t;n&&n.captureContext&&(p=N.s.clone(p).update(n.captureContext));var f=(0,B.WD)(d);return p&&(f=p.applyToEvent(d,n)),f.then((function(e){return e&&(e.sdkProcessingMetadata=i(i({},e.sdkProcessingMetadata),{normalizeDepth:z(s)+" ("+(0,O.Z)(s)+")"})),"number"===typeof s&&s>0?r._normalizeEvent(e,s,u):e}))},e.prototype._normalizeEvent=function(e,t,n){if(!e)return null;var r=i(i(i(i(i({},e),e.breadcrumbs&&{breadcrumbs:e.breadcrumbs.map((function(e){return i(i({},e),e.data&&{data:z(e.data,t,n)})}))}),e.user&&{user:z(e.user,t,n)}),e.contexts&&{contexts:z(e.contexts,t,n)}),e.extra&&{extra:z(e.extra,t,n)});return e.contexts&&e.contexts.trace&&(r.contexts.trace=e.contexts.trace),r.sdkProcessingMetadata=i(i({},r.sdkProcessingMetadata),{baseClientNormalized:!0}),r},e.prototype._applyClientOptions=function(e){var t=this.getOptions(),n=t.environment,r=t.release,i=t.dist,a=t.maxValueLength,o=void 0===a?250:a;"environment"in e||(e.environment="environment"in t?n:"production"),void 0===e.release&&void 0!==r&&(e.release=r),void 0===e.dist&&void 0!==i&&(e.dist=i),e.message&&(e.message=(0,u.$G)(e.message,o));var s=e.exception&&e.exception.values&&e.exception.values[0];s&&s.value&&(s.value=(0,u.$G)(s.value,o));var l=e.request;l&&l.url&&(l.url=(0,u.$G)(l.url,o))},e.prototype._applyIntegrationsMetadata=function(e){var t=Object.keys(this._integrations);t.length>0&&(e.sdk=e.sdk||{},e.sdk.integrations=s(e.sdk.integrations||[],t))},e.prototype._sendEvent=function(e){this._getBackend().sendEvent(e)},e.prototype._captureEvent=function(e,t,n){return this._processEvent(e,t,n).then((function(e){return e.event_id}),(function(e){d&&l.kg.error(e)}))},e.prototype._processEvent=function(e,t,n){var r=this,i=this.getOptions(),a=i.beforeSend,o=i.sampleRate,s=this.getTransport();function l(e,t){s.recordLostEvent&&s.recordLostEvent(e,t)}if(!this._isEnabled())return(0,B.$2)(new A("SDK not enabled, will not capture event."));var c="transaction"===e.type;return!c&&"number"===typeof o&&Math.random()>o?(l("sample_rate","event"),(0,B.$2)(new A("Discarding event because it's not included in the random sample (sampling rate = "+o+")"))):this._prepareEvent(e,n,t).then((function(n){if(null===n)throw l("event_processor",e.type||"event"),new A("An event processor returned null, will not send event.");return t&&t.data&&!0===t.data.__sentry__||c||!a?n:function(e){var t="`beforeSend` method has to return `null` or a valid event.";if((0,F.J8)(e))return e.then((function(e){if(!(0,F.PO)(e)&&null!==e)throw new A(t);return e}),(function(e){throw new A("beforeSend rejected with "+e)}));if(!(0,F.PO)(e)&&null!==e)throw new A(t);return e}(a(n,t))})).then((function(t){if(null===t)throw l("before_send",e.type||"event"),new A("`beforeSend` returned `null`, will not send event.");var i=n&&n.getSession&&n.getSession();return!c&&i&&r._updateSessionFromEvent(i,t),r._sendEvent(t),t})).then(null,(function(e){if(e instanceof A)throw e;throw r.captureException(e,{data:{__sentry__:!0},originalException:e}),new A("Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\nReason: "+e)}))},e.prototype._process=function(e){var t=this;this._numProcessing+=1,e.then((function(e){return t._numProcessing-=1,e}),(function(e){return t._numProcessing-=1,e}))},e}();!function(){function e(e,t,n){void 0===t&&(t={}),this.dsn=e,this._dsnObject=L(e),this.metadata=t,this._tunnel=n}e.prototype.getDsn=function(){return this._dsnObject},e.prototype.forceEnvelope=function(){return!!this._tunnel},e.prototype.getBaseApiEndpoint=function(){return K(this._dsnObject)},e.prototype.getStoreEndpoint=function(){return J(this._dsnObject)},e.prototype.getStoreEndpointWithUrlEncodedAuth=function(){return ee(this._dsnObject)},e.prototype.getEnvelopeEndpointWithUrlEncodedAuth=function(){return te(this._dsnObject,this._tunnel)}}();function $(e,t,n){return{initDsn:e,metadata:t||{},dsn:L(e),tunnel:n}}function K(e){var t=e.protocol?e.protocol+":":"",n=e.port?":"+e.port:"";return t+"//"+e.host+n+(e.path?"/"+e.path:"")+"/api/"}function Q(e,t){return""+K(e)+e.projectId+"/"+t+"/"}function X(e){return(0,_._j)({sentry_key:e.publicKey,sentry_version:"7"})}function J(e){return Q(e,"store")}function ee(e){return J(e)+"?"+X(e)}function te(e,t){return t||function(e){return Q(e,"envelope")}(e)+"?"+X(e)}function ne(e,t){return void 0===t&&(t=[]),[e,t]}function re(e){var t=(0,R.CR)(e,2),n=t[0],r=t[1],i=JSON.stringify(n);return r.reduce((function(e,t){var n=(0,R.CR)(t,2),r=n[0],i=n[1],a=(0,F.pt)(i)?String(i):JSON.stringify(i);return e+"\n"+JSON.stringify(r)+"\n"+a}),i)}function ie(e){if(e.metadata&&e.metadata.sdk){var t=e.metadata.sdk;return{name:t.name,version:t.version}}}function ae(e,t){return t?(e.sdk=e.sdk||{},e.sdk.name=e.sdk.name||t.name,e.sdk.version=e.sdk.version||t.version,e.sdk.integrations=s(e.sdk.integrations||[],t.integrations||[]),e.sdk.packages=s(e.sdk.packages||[],t.packages||[]),e):e}function oe(e,t){var n=ie(t),r="aggregates"in e?"sessions":"session";return[ne(i(i({sent_at:(new Date).toISOString()},n&&{sdk:n}),!!t.tunnel&&{dsn:M(t.dsn)}),[[{type:r},e]]),r]}var se=function(){function e(){}return e.prototype.sendEvent=function(e){return(0,B.WD)({reason:"NoopTransport: Event has been skipped because no Dsn is configured.",status:"skipped"})},e.prototype.close=function(e){return(0,B.WD)(!0)},e}(),le=function(){function e(e){this._options=e,this._options.dsn||d&&l.kg.warn("No DSN provided, backend will not do anything."),this._transport=this._setupTransport()}return e.prototype.eventFromException=function(e,t){throw new A("Backend has to implement `eventFromException` method")},e.prototype.eventFromMessage=function(e,t,n){throw new A("Backend has to implement `eventFromMessage` method")},e.prototype.sendEvent=function(e){if(this._newTransport&&this._options.dsn&&this._options._experiments&&this._options._experiments.newTransport){var t=function(e,t){var n=ie(t),r=e.type||"event",a=(e.sdkProcessingMetadata||{}).transactionSampling||{},o=a.method,s=a.rate;return ae(e,t.metadata.sdk),e.tags=e.tags||{},e.extra=e.extra||{},e.sdkProcessingMetadata&&e.sdkProcessingMetadata.baseClientNormalized||(e.tags.skippedNormalization=!0,e.extra.normalizeDepth=e.sdkProcessingMetadata?e.sdkProcessingMetadata.normalizeDepth:"unset"),delete e.sdkProcessingMetadata,ne(i(i({event_id:e.event_id,sent_at:(new Date).toISOString()},n&&{sdk:n}),!!t.tunnel&&{dsn:M(t.dsn)}),[[{type:r,sample_rates:[{id:o,rate:s}]},e]])}(e,$(this._options.dsn,this._options._metadata,this._options.tunnel));this._newTransport.send(t).then(null,(function(e){d&&l.kg.error("Error while sending event:",e)}))}else this._transport.sendEvent(e).then(null,(function(e){d&&l.kg.error("Error while sending event:",e)}))},e.prototype.sendSession=function(e){if(this._transport.sendSession)if(this._newTransport&&this._options.dsn&&this._options._experiments&&this._options._experiments.newTransport){var t=o(oe(e,$(this._options.dsn,this._options._metadata,this._options.tunnel)),1)[0];this._newTransport.send(t).then(null,(function(e){d&&l.kg.error("Error while sending session:",e)}))}else this._transport.sendSession(e).then(null,(function(e){d&&l.kg.error("Error while sending session:",e)}));else d&&l.kg.warn("Dropping session because custom transport doesn't implement sendSession")},e.prototype.getTransport=function(){return this._transport},e.prototype._setupTransport=function(){return new se},e}(),ce=n(26186),ue=n(43592),de="?";function pe(e,t,n,r){var i={filename:e,function:t,in_app:!0};return void 0!==n&&(i.lineno=n),void 0!==r&&(i.colno=r),i}var fe=/^\s*at (?:(.*?) ?\((?:address at )?)?((?:file|https?|blob|chrome-extension|address|native|eval|webpack||[-a-z]+:|.*bundle|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,he=/\((\S*)(?::(\d+))(?::(\d+))\)/,me=[30,function(e){var t=fe.exec(e);if(t){if(t[2]&&0===t[2].indexOf("eval")){var n=he.exec(t[2]);n&&(t[2]=n[1],t[3]=n[2],t[4]=n[3])}var r=x(xe(t[1]||de,t[2]),2),i=r[0];return pe(r[1],i,t[3]?+t[3]:void 0,t[4]?+t[4]:void 0)}}],ge=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:file|https?|blob|chrome|webpack|resource|moz-extension|capacitor).*?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,_e=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,ve=[50,function(e){var t,n=ge.exec(e);if(n){if(n[3]&&n[3].indexOf(" > eval")>-1){var r=_e.exec(n[3]);r&&(n[1]=n[1]||"eval",n[3]=r[1],n[4]=r[2],n[5]="")}var i=n[3],a=n[1]||de;return a=(t=x(xe(a,i),2))[0],pe(i=t[1],a,n[4]?+n[4]:void 0,n[5]?+n[5]:void 0)}}],ye=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,be=[40,function(e){var t=ye.exec(e);return t?pe(t[2],t[1]||de,+t[3],t[4]?+t[4]:void 0):void 0}],Ee=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,Se=[10,function(e){var t=Ee.exec(e);return t?pe(t[2],t[3]||de,+t[1]):void 0}],Te=/ line (\d+), column (\d+)\s*(?:in (?:]+)>|([^)]+))\(.*\))? in (.*):\s*$/i,Ce=[20,function(e){var t=Te.exec(e);return t?pe(t[5],t[3]||t[4]||de,+t[1],+t[2]):void 0}],xe=function(e,t){var n=-1!==e.indexOf("safari-extension"),r=-1!==e.indexOf("safari-web-extension");return n||r?[-1!==e.indexOf("@")?e.split("@")[0]:de,n?"safari-extension:"+t:"safari-web-extension:"+t]:[e,t]};function we(e){var t=Ne(e),n={type:e&&e.name,value:Ie(e)};return t.length&&(n.stacktrace={frames:t}),void 0===n.type&&""===n.value&&(n.value="Unrecoverable error caught"),n}function Oe(e){return{exception:{values:[we(e)]}}}function Ne(e){var t=e.stacktrace||e.stack||"",n=function(e){if(e){if("number"===typeof e.framesToPop)return e.framesToPop;if(Re.test(e.message))return 1}return 0}(e);try{return(0,G.pE)(Se,Ce,me,be,ve)(t,n)}catch(r){}return[]}var Re=/Minified React error #\d+;/i;function Ie(e){var t=e&&e.message;return t?t.error&&"string"===typeof t.error.message?t.error.message:t:"No error message"}function Ae(e,t,n,r){var i;if((0,F.VW)(e)&&e.error)return Oe(e.error);if((0,F.TX)(e)||(0,F.fm)(e)){var a=e;if("stack"in e)i=Oe(e);else{var o=a.name||((0,F.TX)(a)?"DOMError":"DOMException"),s=a.message?o+": "+a.message:o;i=ke(s,t,n),(0,c.Db)(i,s)}return"code"in a&&(i.tags=C(C({},i.tags),{"DOMException.code":""+a.code})),i}return(0,F.VZ)(e)?Oe(e):(0,F.PO)(e)||(0,F.cO)(e)?(i=function(e,t,n){var r={exception:{values:[{type:(0,F.cO)(e)?e.constructor.name:n?"UnhandledRejection":"Error",value:"Non-Error "+(n?"promise rejection":"exception")+" captured with keys: "+(0,_.zf)(e)}]},extra:{__serialized__:j(e)}};if(t){var i=Ne(t);i.length&&(r.stacktrace={frames:i})}return r}(e,t,r),(0,c.EG)(i,{synthetic:!0}),i):(i=ke(e,t,n),(0,c.Db)(i,""+e,void 0),(0,c.EG)(i,{synthetic:!0}),i)}function ke(e,t,n){var r={message:e};if(n&&t){var i=Ne(t);i.length&&(r.stacktrace={frames:i})}return r}function De(e){var t=[];function n(e){return t.splice(t.indexOf(e),1)[0]}return{$:t,add:function(r){if(!(void 0===e||t.length0&&n(!1)}),e);t.forEach((function(e){(0,B.WD)(e).then((function(){--i||(clearTimeout(a),n(!0))}),r)}))}))}}}function Me(e,t){return e[t]||e.all||0}function Pe(e,t,n){return void 0===n&&(n=Date.now()),Me(e,t)>n}function Le(e,t,n){var r,i,a,o;void 0===n&&(n=Date.now());var s=(0,R.pi)({},e),l=t["x-sentry-rate-limits"],c=t["retry-after"];if(l)try{for(var u=(0,R.XA)(l.trim().split(",")),d=u.next();!d.done;d=u.next()){var p=d.value.split(":",2),f=parseInt(p[0],10),h=1e3*(isNaN(f)?60:f);if(p[1])try{for(var m=(a=void 0,(0,R.XA)(p[1].split(";"))),g=m.next();!g.done;g=m.next()){s[g.value]=n+h}}catch(_){a={error:_}}finally{try{g&&!g.done&&(o=m.return)&&o.call(m)}finally{if(a)throw a.error}}else s.all=n+h}}catch(v){r={error:v}}finally{try{d&&!d.done&&(i=u.return)&&i.call(u)}finally{if(r)throw r.error}}else c&&(s.all=n+function(e,t){void 0===t&&(t=Date.now());var n=parseInt(""+e,10);if(!isNaN(n))return 1e3*n;var r=Date.parse(""+e);return isNaN(r)?6e4:r-t}(c,n));return s}function Fe(e){return e>=200&&e<300?"success":429===e?"rate_limit":e>=400&&e<500?"invalid":e>=500?"failed":"unknown"}function Be(e,t,n){void 0===n&&(n=De(e.bufferSize||30));var r={};return{send:function(e){var i=function(e){var t=(0,R.CR)(e,2),n=(0,R.CR)(t[1],1);return(0,R.CR)(n[0],1)[0].type}(e),a="event"===i?"error":i,o={category:a,body:re(e)};return Pe(r,a)?(0,B.$2)({status:"rate_limit",reason:Ue(r,a)}):n.add((function(){return t(o).then((function(e){var t=e.body,n=e.headers,i=e.reason,o=Fe(e.statusCode);return n&&(r=Le(r,n)),"success"===o?(0,B.WD)({status:o,reason:i}):(0,B.$2)({status:o,reason:i||t||("rate_limit"===o?Ue(r,a):"Unknown transport error")})}))}))},flush:function(e){return n.drain(e)}}}function Ue(e,t){return"Too many "+t+" requests, backing off until: "+new Date(Me(e,t)).toISOString()}var Ge,ze="undefined"===typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__,je=(0,b.R)();function He(){if(Ge)return Ge;if((0,ue.Du)(je.fetch))return Ge=je.fetch.bind(je);var e=je.document,t=je.fetch;if(e&&"function"===typeof e.createElement)try{var n=e.createElement("iframe");n.hidden=!0,e.head.appendChild(n);var r=n.contentWindow;r&&r.fetch&&(t=r.fetch),e.head.removeChild(n)}catch(i){ze&&l.kg.warn("Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ",i)}return Ge=t.bind(je)}function Ze(e,t){if("[object Navigator]"===Object.prototype.toString.call(je&&je.navigator)&&"function"===typeof je.navigator.sendBeacon)return je.navigator.sendBeacon.bind(je.navigator)(e,t);if((0,ue.Ak)()){var n=He();n(e,{body:t,method:"POST",credentials:"omit",keepalive:!0}).then(null,(function(e){console.error(e)}))}else;}function Ye(e){return"event"===e?"error":e}var Ve=(0,b.R)(),qe=function(){function e(e){var t=this;this.options=e,this._buffer=De(30),this._rateLimits={},this._outcomes={},this._api=$(e.dsn,e._metadata,e.tunnel),this.url=ee(this._api.dsn),this.options.sendClientReports&&Ve.document&&Ve.document.addEventListener("visibilitychange",(function(){"hidden"===Ve.document.visibilityState&&t._flushOutcomes()}))}return e.prototype.sendEvent=function(e){return this._sendRequest(function(e,t){var n,r=ie(t),a=e.type||"event",o="transaction"===a||!!t.tunnel,s=(e.sdkProcessingMetadata||{}).transactionSampling||{},l=s.method,c=s.rate;ae(e,t.metadata.sdk),e.tags=e.tags||{},e.extra=e.extra||{},e.sdkProcessingMetadata&&e.sdkProcessingMetadata.baseClientNormalized||(e.tags.skippedNormalization=!0,e.extra.normalizeDepth=e.sdkProcessingMetadata?e.sdkProcessingMetadata.normalizeDepth:"unset"),delete e.sdkProcessingMetadata;try{n=JSON.stringify(e)}catch(f){e.tags.JSONStringifyError=!0,e.extra.JSONStringifyError=f;try{n=JSON.stringify(z(e))}catch(h){var u=h;n=JSON.stringify({message:"JSON.stringify error after renormalization",extra:{message:u.message,stack:u.stack}})}}var d={body:n,type:a,url:o?te(t.dsn,t.tunnel):ee(t.dsn)};if(o){var p=ne(i(i({event_id:e.event_id,sent_at:(new Date).toISOString()},r&&{sdk:r}),!!t.tunnel&&{dsn:M(t.dsn)}),[[{type:a,sample_rates:[{id:l,rate:c}]},d.body]]);d.body=re(p)}return d}(e,this._api),e)},e.prototype.sendSession=function(e){return this._sendRequest(function(e,t){var n=o(oe(e,t),2),r=n[0],i=n[1];return{body:re(r),type:i,url:te(t.dsn,t.tunnel)}}(e,this._api),e)},e.prototype.close=function(e){return this._buffer.drain(e)},e.prototype.recordLostEvent=function(e,t){var n;if(this.options.sendClientReports){var r=Ye(t)+":"+e;ze&&l.kg.log("Adding outcome: "+r),this._outcomes[r]=(null!==(n=this._outcomes[r])&&void 0!==n?n:0)+1}},e.prototype._flushOutcomes=function(){if(this.options.sendClientReports){var e=this._outcomes;if(this._outcomes={},Object.keys(e).length){ze&&l.kg.log("Flushing outcomes:\n"+JSON.stringify(e,null,2));var t,n,r,i=te(this._api.dsn,this._api.tunnel),a=Object.keys(e).map((function(t){var n=x(t.split(":"),2),r=n[0];return{reason:n[1],category:r,quantity:e[t]}})),o=(t=a,ne((n=this._api.tunnel&&M(this._api.dsn))?{dsn:n}:{},[[{type:"client_report"},{timestamp:r||(0,U.yW)(),discarded_events:t}]]));try{Ze(i,re(o))}catch(s){ze&&l.kg.error(s)}}else ze&&l.kg.log("No outcomes to flush")}},e.prototype._handleResponse=function(e){var t=e.requestType,n=e.response,r=e.headers,i=e.resolve,a=e.reject,o=Fe(n.status);this._rateLimits=Le(this._rateLimits,r),this._isRateLimited(t)&&ze&&l.kg.warn("Too many "+t+" requests, backing off until: "+this._disabledUntil(t)),"success"!==o?a(n):i({status:o})},e.prototype._disabledUntil=function(e){var t=Ye(e);return new Date(Me(this._rateLimits,t))},e.prototype._isRateLimited=function(e){var t=Ye(e);return Pe(this._rateLimits,t)},e}(),We=function(e){function t(t,n){void 0===n&&(n=He());var r=e.call(this,t)||this;return r._fetch=n,r}return T(t,e),t.prototype._sendRequest=function(e,t){var n=this;if(this._isRateLimited(e.type))return this.recordLostEvent("ratelimit_backoff",e.type),Promise.reject({event:t,type:e.type,reason:"Transport for "+e.type+" requests locked till "+this._disabledUntil(e.type)+" due to too many requests.",status:429});var r={body:e.body,method:"POST",referrerPolicy:(0,ue.hv)()?"origin":""};return void 0!==this.options.fetchParameters&&Object.assign(r,this.options.fetchParameters),void 0!==this.options.headers&&(r.headers=this.options.headers),this._buffer.add((function(){return new B.cW((function(t,i){n._fetch(e.url,r).then((function(r){var a={"x-sentry-rate-limits":r.headers.get("X-Sentry-Rate-Limits"),"retry-after":r.headers.get("Retry-After")};n._handleResponse({requestType:e.type,response:r,headers:a,resolve:t,reject:i})})).catch(i)}))})).then(void 0,(function(t){throw t instanceof A?n.recordLostEvent("queue_overflow",e.type):n.recordLostEvent("network_error",e.type),t}))},t}(qe);var $e=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return T(t,e),t.prototype._sendRequest=function(e,t){var n=this;return this._isRateLimited(e.type)?(this.recordLostEvent("ratelimit_backoff",e.type),Promise.reject({event:t,type:e.type,reason:"Transport for "+e.type+" requests locked till "+this._disabledUntil(e.type)+" due to too many requests.",status:429})):this._buffer.add((function(){return new B.cW((function(t,r){var i=new XMLHttpRequest;for(var a in i.onreadystatechange=function(){if(4===i.readyState){var a={"x-sentry-rate-limits":i.getResponseHeader("X-Sentry-Rate-Limits"),"retry-after":i.getResponseHeader("Retry-After")};n._handleResponse({requestType:e.type,response:i,headers:a,resolve:t,reject:r})}},i.open("POST",e.url),n.options.headers)Object.prototype.hasOwnProperty.call(n.options.headers,a)&&i.setRequestHeader(a,n.options.headers[a]);i.send(e.body)}))})).then(void 0,(function(t){throw t instanceof A?n.recordLostEvent("queue_overflow",e.type):n.recordLostEvent("network_error",e.type),t}))},t}(qe),Ke=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return T(t,e),t.prototype.eventFromException=function(e,t){return function(e,t,n){var r=Ae(e,t&&t.syntheticException||void 0,n);return(0,c.EG)(r),r.level=ce.z.Error,t&&t.event_id&&(r.event_id=t.event_id),(0,B.WD)(r)}(e,t,this._options.attachStacktrace)},t.prototype.eventFromMessage=function(e,t,n){return void 0===t&&(t=ce.z.Info),function(e,t,n,r){void 0===t&&(t=ce.z.Info);var i=ke(e,n&&n.syntheticException||void 0,r);return i.level=t,n&&n.event_id&&(i.event_id=n.event_id),(0,B.WD)(i)}(e,t,n,this._options.attachStacktrace)},t.prototype._setupTransport=function(){if(!this._options.dsn)return e.prototype._setupTransport.call(this);var t,n,r=C(C({},this._options.transportOptions),{dsn:this._options.dsn,tunnel:this._options.tunnel,sendClientReports:this._options.sendClientReports,_metadata:this._options._metadata}),i=$(r.dsn,r._metadata,r.tunnel),a=te(i.dsn,i.tunnel);if(this._options.transport)return new this._options.transport(r);if((0,ue.Ak)()){var o=C({},r.fetchParameters);return this._newTransport=(t={requestOptions:o,url:a},void 0===n&&(n=He()),Be({bufferSize:t.bufferSize},(function(e){var r=C({body:e.body,method:"POST",referrerPolicy:"origin"},t.requestOptions);return n(t.url,r).then((function(e){return e.text().then((function(t){return{body:t,headers:{"x-sentry-rate-limits":e.headers.get("X-Sentry-Rate-Limits"),"retry-after":e.headers.get("Retry-After")},reason:e.statusText,statusCode:e.status}}))}))}))),new We(r)}return this._newTransport=function(e){return Be({bufferSize:e.bufferSize},(function(t){return new B.cW((function(n,r){var i=new XMLHttpRequest;for(var a in i.onreadystatechange=function(){if(4===i.readyState){var e={body:i.response,headers:{"x-sentry-rate-limits":i.getResponseHeader("X-Sentry-Rate-Limits"),"retry-after":i.getResponseHeader("Retry-After")},reason:i.statusText,statusCode:i.status};n(e)}},i.open("POST",e.url),e.headers)Object.prototype.hasOwnProperty.call(e.headers,a)&&i.setRequestHeader(a,e.headers[a]);i.send(t.body)}))}))}({url:a,headers:r.headers}),new $e(r)},t}(le),Qe=n(84389),Xe=(0,b.R)(),Je=0;function et(){return Je>0}function tt(){Je+=1,setTimeout((function(){Je-=1}))}function nt(e,t,n){if(void 0===t&&(t={}),"function"!==typeof e)return e;try{var r=e.__sentry_wrapped__;if(r)return r;if((0,_.HK)(e))return e}catch(o){return e}var i=function(){var r=Array.prototype.slice.call(arguments);try{n&&"function"===typeof n&&n.apply(this,arguments);var i=r.map((function(e){return nt(e,t)}));return e.apply(this,i)}catch(a){throw tt(),(0,Qe.$e)((function(e){e.addEventProcessor((function(e){return t.mechanism&&((0,c.Db)(e,void 0,void 0),(0,c.EG)(e,t.mechanism)),e.extra=C(C({},e.extra),{arguments:r}),e})),(0,Qe.Tb)(a)})),a}};try{for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(i[a]=e[a])}catch(s){}(0,_.$Q)(i,e),(0,_.xp)(e,"__sentry_wrapped__",i);try{Object.getOwnPropertyDescriptor(i,"name").configurable&&Object.defineProperty(i,"name",{get:function(){return e.name}})}catch(s){}return i}function rt(e){if(void 0===e&&(e={}),Xe.document)if(e.eventId)if(e.dsn){var t=Xe.document.createElement("script");t.async=!0,t.src=function(e,t){var n=L(e),r=K(n)+"embed/error-page/",i="dsn="+M(n);for(var a in t)if("dsn"!==a)if("user"===a){if(!t.user)continue;t.user.name&&(i+="&name="+encodeURIComponent(t.user.name)),t.user.email&&(i+="&email="+encodeURIComponent(t.user.email))}else i+="&"+encodeURIComponent(a)+"="+encodeURIComponent(t[a]);return r+"?"+i}(e.dsn,e),e.onLoad&&(t.onload=e.onLoad);var n=Xe.document.head||Xe.document.body;n&&n.appendChild(t)}else ze&&l.kg.error("Missing dsn option in showReportDialog call");else ze&&l.kg.error("Missing eventId option in showReportDialog call")}var it=n(17398),at=["fatal","error","warning","log","info","debug","critical"];function ot(e){return"warn"===e?ce.z.Warning:function(e){return-1!==at.indexOf(e)}(e)?e:ce.z.Log}var st=function(){function e(t){this.name=e.id,this._options=C({console:!0,dom:!0,fetch:!0,history:!0,sentry:!0,xhr:!0},t)}return e.prototype.addSentryBreadcrumb=function(e){this._options.sentry&&(0,y.Gd)().addBreadcrumb({category:"sentry."+("transaction"===e.type?"transaction":"event"),event_id:e.event_id,level:e.level,message:(0,c.jH)(e)},{event:e})},e.prototype.setupOnce=function(){this._options.console&&(0,E.o)("console",lt),this._options.dom&&(0,E.o)("dom",function(e){function t(t){var n,r="object"===(0,O.Z)(e)?e.serializeAttribute:void 0;"string"===typeof r&&(r=[r]);try{n=t.event.target?(0,it.R)(t.event.target,r):(0,it.R)(t.event,r)}catch(i){n=""}0!==n.length&&(0,y.Gd)().addBreadcrumb({category:"ui."+t.name,message:n},{event:t.event,name:t.name,global:t.global})}return t}(this._options.dom)),this._options.xhr&&(0,E.o)("xhr",ct),this._options.fetch&&(0,E.o)("fetch",ut),this._options.history&&(0,E.o)("history",dt)},e.id="Breadcrumbs",e}();function lt(e){var t={category:"console",data:{arguments:e.args,logger:"console"},level:ot(e.level),message:(0,u.nK)(e.args," ")};if("assert"===e.level){if(!1!==e.args[0])return;t.message="Assertion failed: "+((0,u.nK)(e.args.slice(1)," ")||"console.assert"),t.data.arguments=e.args.slice(1)}(0,y.Gd)().addBreadcrumb(t,{input:e.args,level:e.level})}function ct(e){if(e.endTimestamp){if(e.xhr.__sentry_own_request__)return;var t=e.xhr.__sentry_xhr__||{},n=t.method,r=t.url,i=t.status_code,a=t.body;(0,y.Gd)().addBreadcrumb({category:"xhr",data:{method:n,url:r,status_code:i},type:"http"},{xhr:e.xhr,input:a})}else;}function ut(e){e.endTimestamp&&(e.fetchData.url.match(/sentry_key/)&&"POST"===e.fetchData.method||(e.error?(0,y.Gd)().addBreadcrumb({category:"fetch",data:e.fetchData,level:ce.z.Error,type:"http"},{data:e.error,input:e.args}):(0,y.Gd)().addBreadcrumb({category:"fetch",data:C(C({},e.fetchData),{status_code:e.response.status}),type:"http"},{input:e.args,response:e.response})))}function dt(e){var t=(0,b.R)(),n=e.from,r=e.to,i=(0,c.en)(t.location.href),a=(0,c.en)(n),o=(0,c.en)(r);a.path||(a=i),i.protocol===o.protocol&&i.host===o.host&&(r=o.relative),i.protocol===a.protocol&&i.host===a.host&&(n=a.relative),(0,y.Gd)().addBreadcrumb({category:"navigation",data:{from:n,to:r}})}var pt=function(e){function t(t){void 0===t&&(t={});return t._metadata=t._metadata||{},t._metadata.sdk=t._metadata.sdk||{name:"sentry.javascript.browser",packages:[{name:"npm:@sentry/browser",version:r}],version:r},e.call(this,Ke,t)||this}return T(t,e),t.prototype.showReportDialog=function(e){void 0===e&&(e={}),(0,b.R)().document&&(this._isEnabled()?rt(C(C({},e),{dsn:e.dsn||this.getDsn()})):ze&&l.kg.error("Trying to call showReportDialog with Sentry Client disabled"))},t.prototype._prepareEvent=function(t,n,r){return t.platform=t.platform||"javascript",e.prototype._prepareEvent.call(this,t,n,r)},t.prototype._sendEvent=function(t){var n=this.getIntegration(st);n&&n.addSentryBreadcrumb(t),e.prototype._sendEvent.call(this,t)},t}(W),ft=["EventTarget","Window","Node","ApplicationCache","AudioTrackList","ChannelMergerNode","CryptoOperation","EventSource","FileReader","HTMLUnknownElement","IDBDatabase","IDBRequest","IDBTransaction","KeyOperation","MediaController","MessagePort","ModalWindow","Notification","SVGElementInstance","Screen","TextTrack","TextTrackCue","TextTrackList","WebSocket","WebSocketWorker","Worker","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload"],ht=function(){function e(t){this.name=e.id,this._options=C({XMLHttpRequest:!0,eventTarget:!0,requestAnimationFrame:!0,setInterval:!0,setTimeout:!0},t)}return e.prototype.setupOnce=function(){var e=(0,b.R)();this._options.setTimeout&&(0,_.hl)(e,"setTimeout",mt),this._options.setInterval&&(0,_.hl)(e,"setInterval",mt),this._options.requestAnimationFrame&&(0,_.hl)(e,"requestAnimationFrame",gt),this._options.XMLHttpRequest&&"XMLHttpRequest"in e&&(0,_.hl)(XMLHttpRequest.prototype,"send",_t);var t=this._options.eventTarget;t&&(Array.isArray(t)?t:ft).forEach(vt)},e.id="TryCatch",e}();function mt(e){return function(){for(var t=[],n=0;n0?t:(0,it.l)();return 0===l.length&&l.push({colno:c,filename:d,function:"?",in_app:!0,lineno:u}),e}function Tt(e,t,n,r){(0,c.EG)(n,{handled:!1,type:r}),e.captureEvent(n,{originalException:t})}function Ct(){var e=(0,y.Gd)(),t=e.getClient();return[e,t&&t.getOptions().attachStacktrace]}var xt=function(){function e(t){void 0===t&&(t={}),this.name=e.id,this._key=t.key||"cause",this._limit=t.limit||5}return e.prototype.setupOnce=function(){(0,N.c)((function(t,n){var r=(0,y.Gd)().getIntegration(e);return r?function(e,t,n,r){if(!n.exception||!n.exception.values||!r||!(0,F.V9)(r.originalException,Error))return n;var i=wt(t,r.originalException,e);return n.exception.values=w(i,n.exception.values),n}(r._key,r._limit,t,n):t}))},e.id="LinkedErrors",e}();function wt(e,t,n,r){if(void 0===r&&(r=[]),!(0,F.V9)(t[n],Error)||r.length+1>=e)return r;var i=we(t[n]);return wt(e,t[n],n,w([i],r))}var Ot=function(){function e(){this.name=e.id}return e.prototype.setupOnce=function(t,n){t((function(t){var r=n().getIntegration(e);if(r){try{if(function(e,t){if(!t)return!1;if(function(e,t){var n=e.message,r=t.message;if(!n&&!r)return!1;if(n&&!r||!n&&r)return!1;if(n!==r)return!1;if(!Rt(e,t))return!1;if(!Nt(e,t))return!1;return!0}(e,t))return!0;if(function(e,t){var n=It(t),r=It(e);if(!n||!r)return!1;if(n.type!==r.type||n.value!==r.value)return!1;if(!Rt(e,t))return!1;if(!Nt(e,t))return!1;return!0}(e,t))return!0;return!1}(t,r._previousEvent))return ze&&l.kg.warn("Event dropped due to being a duplicate of previously captured event."),null}catch(i){return r._previousEvent=t}return r._previousEvent=t}return t}))},e.id="Dedupe",e}();function Nt(e,t){var n=At(e),r=At(t);if(!n&&!r)return!0;if(n&&!r||!n&&r)return!1;if(r.length!==n.length)return!1;for(var i=0;i Global error occured"),e.setStatus(t)}}var f=n(48194),h=n(64205);function m(){var e=this.getScope();if(e){var t=e.getSpan();if(t)return{"sentry-trace":t.toTraceparent()}}return{}}function g(e,t,n){return(0,d.zu)(t)?void 0!==e.sampled?(e.setMetadata({transactionSampling:{method:"explicitly_set"}}),e):("function"===typeof t.tracesSampler?(i=t.tracesSampler(n),e.setMetadata({transactionSampling:{method:"client_sampler",rate:Number(i)}})):void 0!==n.parentSampled?(i=n.parentSampled,e.setMetadata({transactionSampling:{method:"inheritance"}})):(i=t.tracesSampleRate,e.setMetadata({transactionSampling:{method:"client_rate",rate:Number(i)}})),function(e){if((0,s.i2)(e)||"number"!==typeof e&&"boolean"!==typeof e)return u.h&&o.kg.warn("[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got "+JSON.stringify(e)+" of type "+JSON.stringify((0,r.Z)(e))+"."),!1;if(e<0||e>1)return u.h&&o.kg.warn("[Tracing] Given sample rate is invalid. Sample rate must be between 0 and 1. Got "+e+"."),!1;return!0}(i)?i?(e.sampled=Math.random()0&&(t.__SENTRY__.integrations=(0,i.fl)(t.__SENTRY__.integrations||[],r))}}(),(0,c.o)("error",p),(0,c.o)("unhandledrejection",p)}e=n.hmd(e)},48194:function(e,t,n){"use strict";n.d(t,{io:function(){return p},nT:function(){return u}});var r=n(61189),i=n(82219),a=n(17105),o=n(61226),s=n(12718),l=n(90334),c=n(64205),u=1e3,d=function(e){function t(t,n,r,i){void 0===r&&(r="");var a=e.call(this,i)||this;return a._pushActivity=t,a._popActivity=n,a.transactionSpanId=r,a}return(0,r.ZT)(t,e),t.prototype.add=function(t){var n=this;t.spanId!==this.transactionSpanId&&(t.finish=function(e){t.endTimestamp="number"===typeof e?e:(0,i._I)(),n._popActivity(t.spanId)},void 0===t.endTimestamp&&this._pushActivity(t.spanId)),e.prototype.add.call(this,t)},t}(l.gB),p=function(e){function t(t,n,r,i){void 0===r&&(r=u),void 0===i&&(i=!1);var o=e.call(this,t,n)||this;return o._idleHub=n,o._idleTimeout=r,o._onScope=i,o.activities={},o._heartbeatCounter=0,o._finished=!1,o._beforeFinishCallbacks=[],n&&i&&(f(n),s.h&&a.kg.log("Setting idle transaction on scope. Span ID: "+o.spanId),n.configureScope((function(e){return e.setSpan(o)}))),o._initTimeout=setTimeout((function(){o._finished||o.finish()}),o._idleTimeout),o}return(0,r.ZT)(t,e),t.prototype.finish=function(t){var n,o,l=this;if(void 0===t&&(t=(0,i._I)()),this._finished=!0,this.activities={},this.spanRecorder){s.h&&a.kg.log("[Tracing] finishing IdleTransaction",new Date(1e3*t).toISOString(),this.op);try{for(var c=(0,r.XA)(this._beforeFinishCallbacks),u=c.next();!u.done;u=c.next()){(0,u.value)(this,t)}}catch(d){n={error:d}}finally{try{u&&!u.done&&(o=c.return)&&o.call(c)}finally{if(n)throw n.error}}this.spanRecorder.spans=this.spanRecorder.spans.filter((function(e){if(e.spanId===l.spanId)return!0;e.endTimestamp||(e.endTimestamp=t,e.setStatus("cancelled"),s.h&&a.kg.log("[Tracing] cancelling span since transaction ended early",JSON.stringify(e,void 0,2)));var n=e.startTimestamp=3?(s.h&&a.kg.log("[Tracing] Transaction finished because of no change for 3 heart beats"),this.setStatus("deadline_exceeded"),this.setTag(o.d,o.x[0]),this.finish()):this._pingHeartbeat()}},t.prototype._pingHeartbeat=function(){var e=this;s.h&&a.kg.log("pinging Heartbeat -> current counter: "+this._heartbeatCounter),setTimeout((function(){e._beat()}),5e3)},t}(c.Y);function f(e){if(e){var t=e.getScope();if(t)t.getTransaction()&&t.setSpan(void 0)}}},44860:function(e,t,n){"use strict";n.d(t,{jK:function(){return r}});var r={};n.r(r),n.d(r,{gE:function(){return L}});var i=n(32963),a=n(61189),o=n(17105),s=n(43406),l=n(12718),c=n(48194),u=n(775),d=new RegExp("^[ \\t]*([0-9a-f]{32})?-?([0-9a-f]{16})?-?([01])?[ \\t]*$");var p=n(61226),f=(0,s.R)();var h=n(33890),m=n(82219),g=n(17398),_=function(e,t,n){var r;return function(i){t.value>=0&&(i||n)&&(t.delta=t.value-(r||0),(t.delta||void 0===r)&&(r=t.value,e(t)))}},v=function(e,t){return{name:e,value:null!==t&&void 0!==t?t:-1,delta:0,entries:[],id:"v2-"+Date.now()+"-"+(Math.floor(8999999999999*Math.random())+1e12)}},y=function(e,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){if("first-input"===e&&!("PerformanceEventTiming"in self))return;var n=new PerformanceObserver((function(e){return e.getEntries().map(t)}));return n.observe({type:e,buffered:!0}),n}}catch(r){}},b=function(e,t){var n=function n(r){"pagehide"!==r.type&&"hidden"!==(0,s.R)().document.visibilityState||(e(r),t&&(removeEventListener("visibilitychange",n,!0),removeEventListener("pagehide",n,!0)))};addEventListener("visibilitychange",n,!0),addEventListener("pagehide",n,!0)},E=-1,S=function(){return E<0&&(E="hidden"===(0,s.R)().document.visibilityState?0:1/0,b((function(e){var t=e.timeStamp;E=t}),!0)),{get firstHiddenTime(){return E}}},T={},C=(0,s.R)(),x=function(){function e(e){void 0===e&&(e=!1),this._reportAllChanges=e,this._measurements={},this._performanceCursor=0,!(0,h.KV)()&&C&&C.performance&&C.document&&(C.performance.mark&&C.performance.mark("sentry-tracing-init"),this._trackCLS(),this._trackLCP(),this._trackFID())}return e.prototype.addPerformanceEntries=function(e){var t=this;if(C&&C.performance&&C.performance.getEntries&&m.Z1){l.h&&o.kg.log("[Tracing] Adding & adjusting spans using Performance API");var n,r,i=(0,u.XL)(m.Z1);if(C.performance.getEntries().slice(this._performanceCursor).forEach((function(a){var s=(0,u.XL)(a.startTime),c=(0,u.XL)(a.duration);if(!("navigation"===e.op&&i+s=e.startTimestamp)){var r=t._measurements[n].value,i=a+(0,u.XL)(r),s=Math.abs(1e3*(i-e.startTimestamp)),c=s-r;l.h&&o.kg.log("[Measurements] Normalized "+n+" from "+r+" to "+s+" ("+c+")"),t._measurements[n].value=s}})),this._measurements["mark.fid"]&&this._measurements.fid&&O(e,{description:"first input delay",endTimestamp:this._measurements["mark.fid"].value+(0,u.XL)(this._measurements.fid.value),op:"web.vitals",startTimestamp:this._measurements["mark.fid"].value}),"fcp"in this._measurements||delete this._measurements.cls,e.setMeasurements(this._measurements),function(e,t,n){t&&(l.h&&o.kg.log("[Measurements] Adding LCP Data"),t.element&&e.setTag("lcp.element",(0,g.R)(t.element)),t.id&&e.setTag("lcp.id",t.id),t.url&&e.setTag("lcp.url",t.url.trim().slice(0,200)),e.setTag("lcp.size",t.size));n&&n.sources&&(l.h&&o.kg.log("[Measurements] Adding CLS Data"),n.sources.forEach((function(t,n){return e.setTag("cls.source."+(n+1),(0,g.R)(t.node))})))}(e,this._lcpEntry,this._clsEntry),e.setTag("sentry_reportAllChanges",this._reportAllChanges)}}},e.prototype._trackNavigator=function(e){var t=C.navigator;if(t){var n=t.connection;n&&(n.effectiveType&&e.setTag("effectiveConnectionType",n.effectiveType),n.type&&e.setTag("connectionType",n.type),N(n.rtt)&&(this._measurements["connection.rtt"]={value:n.rtt}),N(n.downlink)&&(this._measurements["connection.downlink"]={value:n.downlink})),N(t.deviceMemory)&&e.setTag("deviceMemory",String(t.deviceMemory)),N(t.hardwareConcurrency)&&e.setTag("hardwareConcurrency",String(t.hardwareConcurrency))}},e.prototype._trackCLS=function(){var e=this;!function(e,t){var n,r=v("CLS",0),i=0,a=[],o=function(e){if(e&&!e.hadRecentInput){var t=a[0],o=a[a.length-1];i&&0!==a.length&&e.startTime-o.startTime<1e3&&e.startTime-t.startTime<5e3?(i+=e.value,a.push(e)):(i=e.value,a=[e]),i>r.value&&(r.value=i,r.entries=a,n&&n())}},s=y("layout-shift",o);s&&(n=_(e,r,t),b((function(){s.takeRecords().map(o),n(!0)})))}((function(t){var n=t.entries.pop();n&&(l.h&&o.kg.log("[Measurements] Adding CLS"),e._measurements.cls={value:t.value},e._clsEntry=n)}))},e.prototype._trackLCP=function(){var e=this;!function(e,t){var n,r=S(),i=v("LCP"),a=function(e){var t=e.startTime;tn&&(e.startTimestamp=n),e.startChild((0,a.pi)({startTimestamp:n},r))}function N(e){return"number"===typeof e&&isFinite(e)}var R=n(3254),I=n(19805),A=n(91977),k={traceFetch:!0,traceXHR:!0,tracingOrigins:["localhost",/^\//]};function D(e){var t=(0,a.pi)((0,a.pi)({},k),e),n=t.traceFetch,r=t.traceXHR,i=t.tracingOrigins,o=t.shouldCreateSpanForRequest,s={},l=function(e){if(s[e])return s[e];var t=i;return s[e]=t.some((function(t){return(0,R.zC)(e,t)}))&&!(0,R.zC)(e,"sentry_key"),s[e]},c=l;"function"===typeof o&&(c=function(e){return l(e)&&o(e)});var d={};n&&(0,I.o)("fetch",(function(e){!function(e,t,n){if(!(0,u.zu)()||!e.fetchData||!t(e.fetchData.url))return;if(e.endTimestamp){var r=e.fetchData.__span;if(!r)return;return void((o=n[r])&&(e.response?o.setHttpStatus(e.response.status):e.error&&o.setStatus("internal_error"),o.finish(),delete n[r]))}var i=(0,u.x1)();if(i){var o=i.startChild({data:(0,a.pi)((0,a.pi)({},e.fetchData),{type:"fetch"}),description:e.fetchData.method+" "+e.fetchData.url,op:"http.client"});e.fetchData.__span=o.spanId,n[o.spanId]=o;var s=e.args[0]=e.args[0],l=e.args[1]=e.args[1]||{},c=l.headers;(0,A.V9)(s,Request)&&(c=s.headers),c?"function"===typeof c.append?c.append("sentry-trace",o.toTraceparent()):c=Array.isArray(c)?(0,a.fl)(c,[["sentry-trace",o.toTraceparent()]]):(0,a.pi)((0,a.pi)({},c),{"sentry-trace":o.toTraceparent()}):c={"sentry-trace":o.toTraceparent()},l.headers=c}}(e,c,d)})),r&&(0,I.o)("xhr",(function(e){!function(e,t,n){if(!(0,u.zu)()||e.xhr&&e.xhr.__sentry_own_request__||!(e.xhr&&e.xhr.__sentry_xhr__&&t(e.xhr.__sentry_xhr__.url)))return;var r=e.xhr.__sentry_xhr__;if(e.endTimestamp){var i=e.xhr.__sentry_xhr_span_id__;if(!i)return;return void((s=n[i])&&(s.setHttpStatus(r.status_code),s.finish(),delete n[i]))}var o=(0,u.x1)();if(o){var s=o.startChild({data:(0,a.pi)((0,a.pi)({},r.data),{type:"xhr",method:r.method,url:r.url}),description:r.method+" "+r.url,op:"http.client"});if(e.xhr.__sentry_xhr_span_id__=s.spanId,n[e.xhr.__sentry_xhr_span_id__]=s,e.xhr.setRequestHeader)try{e.xhr.setRequestHeader("sentry-trace",s.toTraceparent())}catch(l){}}}(e,c,d)}))}var M=(0,s.R)();var P=(0,a.pi)({idleTimeout:c.nT,markBackgroundTransactions:!0,maxTransactionDuration:600,routingInstrumentation:function(e,t,n){if(void 0===t&&(t=!0),void 0===n&&(n=!0),M&&M.location){var r,i=M.location.href;t&&(r=e({name:M.location.pathname,op:"pageload"})),n&&(0,I.o)("history",(function(t){var n=t.to,a=t.from;void 0===a&&i&&-1!==i.indexOf(n)?i=void 0:a!==n&&(i=void 0,r&&(l.h&&o.kg.log("[Tracing] Finishing current transaction with op: "+r.op),r.finish()),r=e({name:M.location.pathname,op:"navigation"}))}))}else l.h&&o.kg.warn("Could not initialize routing instrumentation due to invalid location")},startTransactionOnLocationChange:!0,startTransactionOnPageLoad:!0},k),L=function(){function e(t){this.name=e.id,this._configuredIdleTimeout=void 0;var n=k.tracingOrigins;t&&(this._configuredIdleTimeout=t.idleTimeout,t.tracingOrigins&&Array.isArray(t.tracingOrigins)&&0!==t.tracingOrigins.length?n=t.tracingOrigins:l.h&&(this._emitOptionsWarning=!0)),this.options=(0,a.pi)((0,a.pi)((0,a.pi)({},P),t),{tracingOrigins:n});var r=this.options._metricOptions;this._metrics=new x(r&&r._reportAllChanges)}return e.prototype.setupOnce=function(e,t){var n=this;this._getCurrentHub=t,this._emitOptionsWarning&&(l.h&&o.kg.warn("[Tracing] You need to define `tracingOrigins` in the options. Set an array of urls or patterns to trace."),l.h&&o.kg.warn("[Tracing] We added a reasonable default for you: "+k.tracingOrigins));var r=this.options,i=r.routingInstrumentation,a=r.startTransactionOnLocationChange,s=r.startTransactionOnPageLoad,c=r.markBackgroundTransactions,d=r.traceFetch,h=r.traceXHR,m=r.tracingOrigins,g=r.shouldCreateSpanForRequest;i((function(e){return n._createRouteTransaction(e)}),s,a),c&&(f&&f.document?f.document.addEventListener("visibilitychange",(function(){var e=(0,u.x1)();if(f.document.hidden&&e){var t="cancelled";l.h&&o.kg.log("[Tracing] Transaction: "+t+" -> since tab moved to the background, op: "+e.op),e.status||e.setStatus(t),e.setTag("visibilitychange","document.hidden"),e.setTag(p.d,p.x[2]),e.finish()}})):l.h&&o.kg.warn("[Tracing] Could not set up background tab detection due to lack of global document")),D({traceFetch:d,traceXHR:h,tracingOrigins:m,shouldCreateSpanForRequest:g})},e.prototype._createRouteTransaction=function(e){var t=this;if(this._getCurrentHub){var n=this.options,r=n.beforeNavigate,c=n.idleTimeout,p=n.maxTransactionDuration,f="pageload"===e.op?function(){var e=function(e){var t=(0,s.R)().document.querySelector("meta[name="+e+"]");return t?t.getAttribute("content"):null}("sentry-trace");if(e)return function(e){var t=e.match(d);if(t){var n=void 0;return"1"===t[3]?n=!0:"0"===t[3]&&(n=!1),{traceId:t[1],parentSampled:n,parentSpanId:t[2]}}}(e);return}():void 0,h=(0,a.pi)((0,a.pi)((0,a.pi)({},e),f),{trimEnd:!0}),m="function"===typeof r?r(h):h,g=void 0===m?(0,a.pi)((0,a.pi)({},h),{sampled:!1}):m;!1===g.sampled&&l.h&&o.kg.log("[Tracing] Will not send "+g.op+" transaction because of beforeNavigate."),l.h&&o.kg.log("[Tracing] Starting "+g.op+" transaction on scope");var _=this._getCurrentHub(),v=(0,s.R)().location,y=(0,i.lb)(_,g,c,!0,{location:v});return y.registerBeforeFinishCallback((function(e,n){t._metrics.addPerformanceEntries(e),function(e,t,n){var r=n-t.startTimestamp,i=n&&(r>e||r<0);i&&(t.setStatus("deadline_exceeded"),t.setTag("maxTransactionDurationExceeded","true"))}((0,u.WB)(p),e,n)})),y.setTag("idleTimeout",this._configuredIdleTimeout),y}l.h&&o.kg.warn("[Tracing] Did not create "+e.op+" transaction because _getCurrentHub is invalid.")},e.id="BrowserTracing",e}();(0,i.ro)()},90334:function(e,t,n){"use strict";n.d(t,{Dr:function(){return l},gB:function(){return s}});var r=n(61189),i=n(39411),a=n(82219),o=n(40707),s=function(){function e(e){void 0===e&&(e=1e3),this.spans=[],this._maxlen=e}return e.prototype.add=function(e){this.spans.length>this._maxlen?e.spanRecorder=void 0:this.spans.push(e)},e}(),l=function(){function e(e){if(this.traceId=(0,i.DM)(),this.spanId=(0,i.DM)().substring(16),this.startTimestamp=(0,a._I)(),this.tags={},this.data={},!e)return this;e.traceId&&(this.traceId=e.traceId),e.spanId&&(this.spanId=e.spanId),e.parentSpanId&&(this.parentSpanId=e.parentSpanId),"sampled"in e&&(this.sampled=e.sampled),e.op&&(this.op=e.op),e.description&&(this.description=e.description),e.data&&(this.data=e.data),e.tags&&(this.tags=e.tags),e.status&&(this.status=e.status),e.startTimestamp&&(this.startTimestamp=e.startTimestamp),e.endTimestamp&&(this.endTimestamp=e.endTimestamp)}return e.prototype.child=function(e){return this.startChild(e)},e.prototype.startChild=function(t){var n=new e((0,r.pi)((0,r.pi)({},t),{parentSpanId:this.spanId,sampled:this.sampled,traceId:this.traceId}));return n.spanRecorder=this.spanRecorder,n.spanRecorder&&n.spanRecorder.add(n),n.transaction=this.transaction,n},e.prototype.setTag=function(e,t){var n;return this.tags=(0,r.pi)((0,r.pi)({},this.tags),((n={})[e]=t,n)),this},e.prototype.setData=function(e,t){var n;return this.data=(0,r.pi)((0,r.pi)({},this.data),((n={})[e]=t,n)),this},e.prototype.setStatus=function(e){return this.status=e,this},e.prototype.setHttpStatus=function(e){this.setTag("http.status_code",String(e));var t=function(e){if(e<400&&e>=100)return"ok";if(e>=400&&e<500)switch(e){case 401:return"unauthenticated";case 403:return"permission_denied";case 404:return"not_found";case 409:return"already_exists";case 413:return"failed_precondition";case 429:return"resource_exhausted";default:return"invalid_argument"}if(e>=500&&e<600)switch(e){case 501:return"unimplemented";case 503:return"unavailable";case 504:return"deadline_exceeded";default:return"internal_error"}return"unknown_error"}(e);return"unknown_error"!==t&&this.setStatus(t),this},e.prototype.isSuccess=function(){return"ok"===this.status},e.prototype.finish=function(e){this.endTimestamp="number"===typeof e?e:(0,a._I)()},e.prototype.toTraceparent=function(){var e="";return void 0!==this.sampled&&(e=this.sampled?"-1":"-0"),this.traceId+"-"+this.spanId+e},e.prototype.toContext=function(){return(0,o.Jr)({data:this.data,description:this.description,endTimestamp:this.endTimestamp,op:this.op,parentSpanId:this.parentSpanId,sampled:this.sampled,spanId:this.spanId,startTimestamp:this.startTimestamp,status:this.status,tags:this.tags,traceId:this.traceId})},e.prototype.updateWithContext=function(e){var t,n,r,i,a;return this.data=null!==(t=e.data)&&void 0!==t?t:{},this.description=e.description,this.endTimestamp=e.endTimestamp,this.op=e.op,this.parentSpanId=e.parentSpanId,this.sampled=e.sampled,this.spanId=null!==(n=e.spanId)&&void 0!==n?n:this.spanId,this.startTimestamp=null!==(r=e.startTimestamp)&&void 0!==r?r:this.startTimestamp,this.status=e.status,this.tags=null!==(i=e.tags)&&void 0!==i?i:{},this.traceId=null!==(a=e.traceId)&&void 0!==a?a:this.traceId,this},e.prototype.getTraceContext=function(){return(0,o.Jr)({data:Object.keys(this.data).length>0?this.data:void 0,description:this.description,op:this.op,parent_span_id:this.parentSpanId,span_id:this.spanId,status:this.status,tags:Object.keys(this.tags).length>0?this.tags:void 0,trace_id:this.traceId})},e.prototype.toJSON=function(){return(0,o.Jr)({data:Object.keys(this.data).length>0?this.data:void 0,description:this.description,op:this.op,parent_span_id:this.parentSpanId,span_id:this.spanId,start_timestamp:this.startTimestamp,status:this.status,tags:Object.keys(this.tags).length>0?this.tags:void 0,timestamp:this.endTimestamp,trace_id:this.traceId})},e}()},64205:function(e,t,n){"use strict";n.d(t,{Y:function(){return u}});var r=n(61189),i=n(76808),a=n(91977),o=n(17105),s=n(40707),l=n(12718),c=n(90334),u=function(e){function t(t,n){var r=e.call(this,t)||this;return r._measurements={},r._hub=(0,i.Gd)(),(0,a.V9)(n,i.Xb)&&(r._hub=n),r.name=t.name||"",r.metadata=t.metadata||{},r._trimEnd=t.trimEnd,r.transaction=r,r}return(0,r.ZT)(t,e),t.prototype.setName=function(e){this.name=e},t.prototype.initSpanRecorder=function(e){void 0===e&&(e=1e3),this.spanRecorder||(this.spanRecorder=new c.gB(e)),this.spanRecorder.add(this)},t.prototype.setMeasurements=function(e){this._measurements=(0,r.pi)({},e)},t.prototype.setMetadata=function(e){this.metadata=(0,r.pi)((0,r.pi)({},this.metadata),e)},t.prototype.finish=function(t){var n=this;if(void 0===this.endTimestamp){if(this.name||(l.h&&o.kg.warn("Transaction has no name, falling back to ``."),this.name=""),e.prototype.finish.call(this,t),!0===this.sampled){var r=this.spanRecorder?this.spanRecorder.spans.filter((function(e){return e!==n&&e.endTimestamp})):[];this._trimEnd&&r.length>0&&(this.endTimestamp=r.reduce((function(e,t){return e.endTimestamp&&t.endTimestamp?e.endTimestamp>t.endTimestamp?e:t:e})).endTimestamp);var i={contexts:{trace:this.getTraceContext()},spans:r,start_timestamp:this.startTimestamp,tags:this.tags,timestamp:this.endTimestamp,transaction:this.name,type:"transaction",sdkProcessingMetadata:this.metadata};return Object.keys(this._measurements).length>0&&(l.h&&o.kg.log("[Measurements] Adding measurements to transaction",JSON.stringify(this._measurements,void 0,2)),i.measurements=this._measurements),l.h&&o.kg.log("[Tracing] Finishing "+this.op+" transaction: "+this.name+"."),this._hub.captureEvent(i)}l.h&&o.kg.log("[Tracing] Discarding transaction because its trace was not chosen to be sampled.");var a=this._hub.getClient(),s=a&&a.getTransport&&a.getTransport();s&&s.recordLostEvent&&s.recordLostEvent("sample_rate","transaction")}},t.prototype.toContext=function(){var t=e.prototype.toContext.call(this);return(0,s.Jr)((0,r.pi)((0,r.pi)({},t),{name:this.name,trimEnd:this._trimEnd}))},t.prototype.updateWithContext=function(t){var n;return e.prototype.updateWithContext.call(this,t),this.name=null!==(n=t.name)&&void 0!==n?n:"",this._trimEnd=t.trimEnd,this},t}(c.Dr)},775:function(e,t,n){"use strict";n.d(t,{WB:function(){return s},XL:function(){return o},x1:function(){return a},zu:function(){return i}});var r=n(76808);function i(e){var t=(0,r.Gd)().getClient(),n=e||t&&t.getOptions();return!!n&&("tracesSampleRate"in n||"tracesSampler"in n)}function a(e){var t=(e||(0,r.Gd)()).getScope();return t&&t.getTransaction()}function o(e){return e/1e3}function s(e){return 1e3*e}},61189:function(e,t,n){"use strict";n.d(t,{XA:function(){return s},ZT:function(){return i},_T:function(){return o},fl:function(){return c},pi:function(){return a}});var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},r(e,t)};function i(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var a=function(){return a=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function l(e,t){var n="function"===typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,a=n.call(e),o=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)o.push(r.value)}catch(s){i={error:s}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(i)throw i.error}}return o}function c(){for(var e=[],t=0;t ".length,l=void 0;n&&i++<5&&!("html"===(l=o(n,t))||i>1&&a+r.length*s+l.length>=80);)r.push(l),a+=l.length,n=n.parentNode;return r.reverse().join(" > ")}catch(c){return""}}function o(e,t){var n,r,a,o,s,l=e,c=[];if(!l||!l.tagName)return"";c.push(l.tagName.toLowerCase());var u=t&&t.length?t.filter((function(e){return l.getAttribute(e)})).map((function(e){return[e,l.getAttribute(e)]})):null;if(u&&u.length)u.forEach((function(e){c.push("["+e[0]+'="'+e[1]+'"]')}));else if(l.id&&c.push("#"+l.id),(n=l.className)&&(0,i.HD)(n))for(r=n.split(/\s+/),s=0;s2?t[2]:void 0;if(i){var a=r,o=String(i);r=o,_("history",{from:a,to:o})}return e.apply(this,t)}}p.onpopstate=function(){for(var t=[],n=0;n":n||""}function u(e,t,n){var r=e.exception=e.exception||{},i=r.values=r.values||[],a=i[0]=i[0]||{};a.value||(a.value=t||""),a.type||(a.type=n||"Error")}function d(e,t){var n=l(e);if(n){var i=n.mechanism;if(n.mechanism=(0,r.pi)((0,r.pi)((0,r.pi)({},{type:"generic",handled:!0}),i),t),t&&"data"in t){var a=(0,r.pi)((0,r.pi)({},i&&i.data),t.data);n.mechanism.data=a}}}function p(e){if(e&&e.__sentry_captured__)return!0;try{(0,a.xp)(e,"__sentry_captured__",!0)}catch(t){}return!1}},33890:function(e,t,n){"use strict";function r(){return!("undefined"!==typeof __SENTRY_BROWSER_BUNDLE__&&__SENTRY_BROWSER_BUNDLE__)&&"[object process]"===Object.prototype.toString.call("undefined"!==typeof process?process:0)}function i(e,t){return e.require(t)}function a(t){var n;try{n=i(e,t)}catch(a){}try{var r=i(e,"process").cwd;n=i(e,r()+"/node_modules/"+t)}catch(a){}return n}n.d(t,{l$:function(){return i},KV:function(){return r},$y:function(){return a}}),e=n.hmd(e)},40707:function(e,t,n){"use strict";n.d(t,{$Q:function(){return c},HK:function(){return u},Jr:function(){return g},Sh:function(){return p},_j:function(){return d},hl:function(){return s},xp:function(){return l},zf:function(){return m}});var r=n(31101),i=n(17398),a=n(91977),o=n(3254);function s(e,t,n){if(t in e){var r=e[t],i=n(r);if("function"===typeof i)try{c(i,r)}catch(a){}e[t]=i}}function l(e,t,n){Object.defineProperty(e,t,{value:n,writable:!0,configurable:!0})}function c(e,t){var n=t.prototype||{};e.prototype=t.prototype=n,l(e,"__sentry_original__",t)}function u(e){return e.__sentry_original__}function d(e){return Object.keys(e).map((function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])})).join("&")}function p(e){var t=e;if((0,a.VZ)(e))t=(0,r.pi)({message:e.message,name:e.name,stack:e.stack},h(e));else if((0,a.cO)(e)){var n=e;t=(0,r.pi)({type:n.type,target:f(n.target),currentTarget:f(n.currentTarget)},h(n)),"undefined"!==typeof CustomEvent&&(0,a.V9)(e,CustomEvent)&&(t.detail=n.detail)}return t}function f(e){try{return(0,a.kK)(e)?(0,i.R)(e):Object.prototype.toString.call(e)}catch(t){return""}}function h(e){var t={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t}function m(e,t){void 0===t&&(t=40);var n=Object.keys(p(e));if(n.sort(),!n.length)return"[object has no keys]";if(n[0].length>=t)return(0,o.$G)(n[0],t);for(var r=n.length;r>0;r--){var i=n.slice(0,r).join(", ");if(!(i.length>t))return r===n.length?i:(0,o.$G)(i,t)}return""}function g(e){var t,n;if((0,a.PO)(e)){var i={};try{for(var o=(0,r.XA)(Object.keys(e)),s=o.next();!s.done;s=o.next()){var l=s.value;"undefined"!==typeof e[l]&&(i[l]=g(e[l]))}}catch(c){t={error:c}}finally{try{s&&!s.done&&(n=o.return)&&n.call(o)}finally{if(t)throw t.error}}return i}return Array.isArray(e)?e.map(g):e}},74483:function(e,t,n){"use strict";n.d(t,{$P:function(){return s},pE:function(){return i}});var r=n(31101);function i(){for(var e=[],t=0;t=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function s(e,t){var n="function"===typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,a=n.call(e),o=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)o.push(r.value)}catch(s){i={error:s}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(i)throw i.error}}return o}function l(){for(var e=[],t=0;t1)return!1;var e=this._items[0];return""===e||'""'===e}},{key:"str",get:function(){var e;return null!==(e=this._str)&&void 0!==e?e:this._str=this._items.reduce((function(e,t){return"".concat(e).concat(t)}),"")}},{key:"names",get:function(){var e;return null!==(e=this._names)&&void 0!==e?e:this._names=this._items.reduce((function(e,t){return t instanceof f&&(e[t.str]=(e[t.str]||0)+1),e}),{})}}]),n}(p);function m(e){for(var t=[e[0]],n=0,r=arguments.length,i=new Array(r>1?r-1:0),a=1;a1?r-1:0),a=1;a"),GTE:new y._Code(">="),LT:new y._Code("<"),LTE:new y._Code("<="),EQ:new y._Code("==="),NEQ:new y._Code("!=="),NOT:new y._Code("!"),OR:new y._Code("||"),AND:new y._Code("&&"),ADD:new y._Code("+")};var T=function(){function e(){_(this,e)}return v(e,[{key:"optimizeNodes",value:function(){return this}},{key:"optimizeNames",value:function(e,t){return this}}]),e}(),C=function(e){m(n,e);var t=g(n);function n(e,r,i){var a;return _(this,n),(a=t.call(this)).varKind=e,a.name=r,a.rhs=i,a}return v(n,[{key:"render",value:function(e){var t=e.es5,n=e._n,r=t?b.varKinds.var:this.varKind,i=void 0===this.rhs?"":" = ".concat(this.rhs);return"".concat(r," ").concat(this.name).concat(i,";")+n}},{key:"optimizeNames",value:function(e,t){if(e[this.name.str])return this.rhs&&(this.rhs=W(this.rhs,e,t)),this}},{key:"names",get:function(){return this.rhs instanceof y._CodeOrName?this.rhs.names:{}}}]),n}(T),x=function(e){m(n,e);var t=g(n);function n(e,r,i){var a;return _(this,n),(a=t.call(this)).lhs=e,a.rhs=r,a.sideEffects=i,a}return v(n,[{key:"render",value:function(e){var t=e._n;return"".concat(this.lhs," = ").concat(this.rhs,";")+t}},{key:"optimizeNames",value:function(e,t){if(!(this.lhs instanceof y.Name)||e[this.lhs.str]||this.sideEffects)return this.rhs=W(this.rhs,e,t),this}},{key:"names",get:function(){return q(this.lhs instanceof y.Name?{}:h({},this.lhs.names),this.rhs)}}]),n}(T),w=function(e){m(n,e);var t=g(n);function n(e,r,i,a){var o;return _(this,n),(o=t.call(this,e,i,a)).op=r,o}return v(n,[{key:"render",value:function(e){var t=e._n;return"".concat(this.lhs," ").concat(this.op,"= ").concat(this.rhs,";")+t}}]),n}(x),O=function(e){m(n,e);var t=g(n);function n(e){var r;return _(this,n),(r=t.call(this)).label=e,r.names={},r}return v(n,[{key:"render",value:function(e){var t=e._n;return"".concat(this.label,":")+t}}]),n}(T),N=function(e){m(n,e);var t=g(n);function n(e){var r;return _(this,n),(r=t.call(this)).label=e,r.names={},r}return v(n,[{key:"render",value:function(e){var t=e._n,n=this.label?" ".concat(this.label):"";return"break".concat(n,";")+t}}]),n}(T),R=function(e){m(n,e);var t=g(n);function n(e){var r;return _(this,n),(r=t.call(this)).error=e,r}return v(n,[{key:"render",value:function(e){var t=e._n;return"throw ".concat(this.error,";")+t}},{key:"names",get:function(){return this.error.names}}]),n}(T),I=function(e){m(n,e);var t=g(n);function n(e){var r;return _(this,n),(r=t.call(this)).code=e,r}return v(n,[{key:"render",value:function(e){var t=e._n;return"".concat(this.code,";")+t}},{key:"optimizeNodes",value:function(){return"".concat(this.code)?this:void 0}},{key:"optimizeNames",value:function(e,t){return this.code=W(this.code,e,t),this}},{key:"names",get:function(){return this.code instanceof y._CodeOrName?this.code.names:{}}}]),n}(T),A=function(e){m(n,e);var t=g(n);function n(){var e,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return _(this,n),(e=t.call(this)).nodes=r,e}return v(n,[{key:"render",value:function(e){return this.nodes.reduce((function(t,n){return t+n.render(e)}),"")}},{key:"optimizeNodes",value:function(){for(var e=this.nodes,t=e.length;t--;){var n=e[t].optimizeNodes();Array.isArray(n)?e.splice.apply(e,[t,1].concat(f(n))):n?e[t]=n:e.splice(t,1)}return e.length>0?this:void 0}},{key:"optimizeNames",value:function(e,t){for(var n=this.nodes,r=n.length;r--;){var i=n[r];i.optimizeNames(e,t)||($(e,i.names),n.splice(r,1))}return n.length>0?this:void 0}},{key:"names",get:function(){return this.nodes.reduce((function(e,t){return V(e,t.names)}),{})}}]),n}(T),k=function(e){m(n,e);var t=g(n);function n(){return _(this,n),t.apply(this,arguments)}return v(n,[{key:"render",value:function(e){return"{"+e._n+d(p(n.prototype),"render",this).call(this,e)+"}"+e._n}}]),n}(A),D=function(e){m(n,e);var t=g(n);function n(){return _(this,n),t.apply(this,arguments)}return v(n)}(A),M=function(e){m(n,e);var t=g(n);function n(){return _(this,n),t.apply(this,arguments)}return v(n)}(k);M.kind="else";var P=function(e){m(n,e);var t=g(n);function n(e,r){var i;return _(this,n),(i=t.call(this,r)).condition=e,i}return v(n,[{key:"render",value:function(e){var t="if(".concat(this.condition,")")+d(p(n.prototype),"render",this).call(this,e);return this.else&&(t+="else "+this.else.render(e)),t}},{key:"optimizeNodes",value:function(){d(p(n.prototype),"optimizeNodes",this).call(this);var e=this.condition;if(!0===e)return this.nodes;var t=this.else;if(t){var r=t.optimizeNodes();t=this.else=Array.isArray(r)?new M(r):r}return t?!1===e?t instanceof n?t:t.nodes:this.nodes.length?this:new n(K(e),t instanceof n?[t]:t.nodes):!1!==e&&this.nodes.length?this:void 0}},{key:"optimizeNames",value:function(e,t){var r;if(this.else=null===(r=this.else)||void 0===r?void 0:r.optimizeNames(e,t),d(p(n.prototype),"optimizeNames",this).call(this,e,t)||this.else)return this.condition=W(this.condition,e,t),this}},{key:"names",get:function(){var e=d(p(n.prototype),"names",this);return q(e,this.condition),this.else&&V(e,this.else.names),e}}]),n}(k);P.kind="if";var L=function(e){m(n,e);var t=g(n);function n(){return _(this,n),t.apply(this,arguments)}return v(n)}(k);L.kind="for";var F=function(e){m(n,e);var t=g(n);function n(e){var r;return _(this,n),(r=t.call(this)).iteration=e,r}return v(n,[{key:"render",value:function(e){return"for(".concat(this.iteration,")")+d(p(n.prototype),"render",this).call(this,e)}},{key:"optimizeNames",value:function(e,t){if(d(p(n.prototype),"optimizeNames",this).call(this,e,t))return this.iteration=W(this.iteration,e,t),this}},{key:"names",get:function(){return V(d(p(n.prototype),"names",this),this.iteration.names)}}]),n}(L),B=function(e){m(n,e);var t=g(n);function n(e,r,i,a){var o;return _(this,n),(o=t.call(this)).varKind=e,o.name=r,o.from=i,o.to=a,o}return v(n,[{key:"render",value:function(e){var t=e.es5?b.varKinds.var:this.varKind,r=this.name,i=this.from,a=this.to;return"for(".concat(t," ").concat(r,"=").concat(i,"; ").concat(r,"<").concat(a,"; ").concat(r,"++)")+d(p(n.prototype),"render",this).call(this,e)}},{key:"names",get:function(){var e=q(d(p(n.prototype),"names",this),this.from);return q(e,this.to)}}]),n}(L),U=function(e){m(n,e);var t=g(n);function n(e,r,i,a){var o;return _(this,n),(o=t.call(this)).loop=e,o.varKind=r,o.name=i,o.iterable=a,o}return v(n,[{key:"render",value:function(e){return"for(".concat(this.varKind," ").concat(this.name," ").concat(this.loop," ").concat(this.iterable,")")+d(p(n.prototype),"render",this).call(this,e)}},{key:"optimizeNames",value:function(e,t){if(d(p(n.prototype),"optimizeNames",this).call(this,e,t))return this.iterable=W(this.iterable,e,t),this}},{key:"names",get:function(){return V(d(p(n.prototype),"names",this),this.iterable.names)}}]),n}(L),G=function(e){m(n,e);var t=g(n);function n(e,r,i){var a;return _(this,n),(a=t.call(this)).name=e,a.args=r,a.async=i,a}return v(n,[{key:"render",value:function(e){var t=this.async?"async ":"";return"".concat(t,"function ").concat(this.name,"(").concat(this.args,")")+d(p(n.prototype),"render",this).call(this,e)}}]),n}(k);G.kind="func";var z=function(e){m(n,e);var t=g(n);function n(){return _(this,n),t.apply(this,arguments)}return v(n,[{key:"render",value:function(e){return"return "+d(p(n.prototype),"render",this).call(this,e)}}]),n}(A);z.kind="return";var j=function(e){m(n,e);var t=g(n);function n(){return _(this,n),t.apply(this,arguments)}return v(n,[{key:"render",value:function(e){var t="try"+d(p(n.prototype),"render",this).call(this,e);return this.catch&&(t+=this.catch.render(e)),this.finally&&(t+=this.finally.render(e)),t}},{key:"optimizeNodes",value:function(){var e,t;return d(p(n.prototype),"optimizeNodes",this).call(this),null===(e=this.catch)||void 0===e||e.optimizeNodes(),null===(t=this.finally)||void 0===t||t.optimizeNodes(),this}},{key:"optimizeNames",value:function(e,t){var r,i;return d(p(n.prototype),"optimizeNames",this).call(this,e,t),null===(r=this.catch)||void 0===r||r.optimizeNames(e,t),null===(i=this.finally)||void 0===i||i.optimizeNames(e,t),this}},{key:"names",get:function(){var e=d(p(n.prototype),"names",this);return this.catch&&V(e,this.catch.names),this.finally&&V(e,this.finally.names),e}}]),n}(k),H=function(e){m(n,e);var t=g(n);function n(e){var r;return _(this,n),(r=t.call(this)).error=e,r}return v(n,[{key:"render",value:function(e){return"catch(".concat(this.error,")")+d(p(n.prototype),"render",this).call(this,e)}}]),n}(k);H.kind="catch";var Z=function(e){m(n,e);var t=g(n);function n(){return _(this,n),t.apply(this,arguments)}return v(n,[{key:"render",value:function(e){return"finally"+d(p(n.prototype),"render",this).call(this,e)}}]),n}(k);Z.kind="finally";var Y=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};_(this,e),this._values={},this._blockStarts=[],this._constants={},this.opts=h(h({},n),{},{_n:n.lines?"\n":""}),this._extScope=t,this._scope=new b.Scope({parent:t}),this._nodes=[new D]}return v(e,[{key:"toString",value:function(){return this._root.render(this.opts)}},{key:"name",value:function(e){return this._scope.name(e)}},{key:"scopeName",value:function(e){return this._extScope.name(e)}},{key:"scopeValue",value:function(e,t){var n=this._extScope.value(e,t);return(this._values[n.prefix]||(this._values[n.prefix]=new Set)).add(n),n}},{key:"getScopeValue",value:function(e,t){return this._extScope.getValue(e,t)}},{key:"scopeRefs",value:function(e){return this._extScope.scopeRefs(e,this._values)}},{key:"scopeCode",value:function(){return this._extScope.scopeCode(this._values)}},{key:"_def",value:function(e,t,n,r){var i=this._scope.toName(t);return void 0!==n&&r&&(this._constants[i.str]=n),this._leafNode(new C(e,i,n)),i}},{key:"const",value:function(e,t,n){return this._def(b.varKinds.const,e,t,n)}},{key:"let",value:function(e,t,n){return this._def(b.varKinds.let,e,t,n)}},{key:"var",value:function(e,t,n){return this._def(b.varKinds.var,e,t,n)}},{key:"assign",value:function(e,t,n){return this._leafNode(new x(e,t,n))}},{key:"add",value:function(e,n){return this._leafNode(new w(e,t.operators.ADD,n))}},{key:"code",value:function(e){return"function"==typeof e?e():e!==y.nil&&this._leafNode(new I(e)),this}},{key:"object",value:function(){for(var e=["{"],t=arguments.length,n=new Array(t),r=0;r1&&e.push(","),e.push(s),(s!==l||this.opts.es5)&&(e.push(":"),(0,y.addCodeArg)(e,l))}return e.push("}"),new y._Code(e)}},{key:"if",value:function(e,t,n){if(this._blockNode(new P(e)),t&&n)this.code(t).else().code(n).endIf();else if(t)this.code(t).endIf();else if(n)throw new Error('CodeGen: "else" body without "then" body');return this}},{key:"elseIf",value:function(e){return this._elseNode(new P(e))}},{key:"else",value:function(){return this._elseNode(new M)}},{key:"endIf",value:function(){return this._endBlockNode(P,M)}},{key:"_for",value:function(e,t){return this._blockNode(e),t&&this.code(t).endFor(),this}},{key:"for",value:function(e,t){return this._for(new F(e),t)}},{key:"forRange",value:function(e,t,n,r){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:this.opts.es5?b.varKinds.var:b.varKinds.let,a=this._scope.toName(e);return this._for(new B(i,a,t,n),(function(){return r(a)}))}},{key:"forOf",value:function(e,t,n){var a=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:b.varKinds.const,s=this._scope.toName(e);if(this.opts.es5){var l=t instanceof y.Name?t:this.var("_arr",t);return this.forRange("_i",0,(0,y._)(r||(r=c(["",".length"])),l),(function(e){a.var(s,(0,y._)(i||(i=c(["","[","]"])),l,e)),n(s)}))}return this._for(new U("of",o,s,t),(function(){return n(s)}))}},{key:"forIn",value:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:this.opts.es5?b.varKinds.var:b.varKinds.const;if(this.opts.ownProperties)return this.forOf(e,(0,y._)(a||(a=c(["Object.keys(",")"])),t),n);var i=this._scope.toName(e);return this._for(new U("in",r,i,t),(function(){return n(i)}))}},{key:"endFor",value:function(){return this._endBlockNode(L)}},{key:"label",value:function(e){return this._leafNode(new O(e))}},{key:"break",value:function(e){return this._leafNode(new N(e))}},{key:"return",value:function(e){var t=new z;if(this._blockNode(t),this.code(e),1!==t.nodes.length)throw new Error('CodeGen: "return" should have one node');return this._endBlockNode(z)}},{key:"try",value:function(e,t,n){if(!t&&!n)throw new Error('CodeGen: "try" without "catch" and "finally"');var r=new j;if(this._blockNode(r),this.code(e),t){var i=this.name("e");this._currNode=r.catch=new H(i),t(i)}return n&&(this._currNode=r.finally=new Z,this.code(n)),this._endBlockNode(H,Z)}},{key:"throw",value:function(e){return this._leafNode(new R(e))}},{key:"block",value:function(e,t){return this._blockStarts.push(this._nodes.length),e&&this.code(e).endBlock(t),this}},{key:"endBlock",value:function(e){var t=this._blockStarts.pop();if(void 0===t)throw new Error("CodeGen: not in self-balancing block");var n=this._nodes.length-t;if(n<0||void 0!==e&&n!==e)throw new Error("CodeGen: wrong number of nodes: ".concat(n," vs ").concat(e," expected"));return this._nodes.length=t,this}},{key:"func",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:y.nil,n=arguments.length>2?arguments[2]:void 0,r=arguments.length>3?arguments[3]:void 0;return this._blockNode(new G(e,t,n)),r&&this.code(r).endFunc(),this}},{key:"endFunc",value:function(){return this._endBlockNode(G)}},{key:"optimize",value:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;e-- >0;)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}},{key:"_leafNode",value:function(e){return this._currNode.nodes.push(e),this}},{key:"_blockNode",value:function(e){this._currNode.nodes.push(e),this._nodes.push(e)}},{key:"_endBlockNode",value:function(e,t){var n=this._currNode;if(n instanceof e||t&&n instanceof t)return this._nodes.pop(),this;throw new Error('CodeGen: not in block "'.concat(t?"".concat(e.kind,"/").concat(t.kind):e.kind,'"'))}},{key:"_elseNode",value:function(e){var t=this._currNode;if(!(t instanceof P))throw new Error('CodeGen: "else" without "if"');return this._currNode=t.else=e,this}},{key:"_root",get:function(){return this._nodes[0]}},{key:"_currNode",get:function(){var e=this._nodes;return e[e.length-1]},set:function(e){var t=this._nodes;t[t.length-1]=e}}]),e}();function V(e,t){for(var n in t)e[n]=(e[n]||0)+(t[n]||0);return e}function q(e,t){return t instanceof y._CodeOrName?V(e,t.names):e}function W(e,t,n){return e instanceof y.Name?i(e):(r=e)instanceof y._Code&&r._items.some((function(e){return e instanceof y.Name&&1===t[e.str]&&void 0!==n[e.str]}))?new y._Code(e._items.reduce((function(e,t){return t instanceof y.Name&&(t=i(t)),t instanceof y._Code?e.push.apply(e,f(t._items)):e.push(t),e}),[])):e;var r;function i(e){var r=n[e.str];return void 0===r||1!==t[e.str]?e:(delete t[e.str],r)}}function $(e,t){for(var n in t)e[n]=(e[n]||0)-(t[n]||0)}function K(e){return"boolean"==typeof e||"number"==typeof e||null===e?!e:(0,y._)(o||(o=c(["!",""])),ee(e))}t.CodeGen=Y,t.not=K;var Q=J(t.operators.AND);t.and=function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&void 0!==arguments[0]?arguments[0]:{},n=t.prefixes,r=t.parent;d(this,e),this._names={},this._prefixes=n,this._parent=r}return u(e,[{key:"toName",value:function(e){return e instanceof g.Name?e:this.name(e)}},{key:"name",value:function(e){return new g.Name(this._newName(e))}},{key:"_newName",value:function(e){var t=this._names[e]||this._nameGroup(e);return"".concat(e).concat(t.index++)}},{key:"_nameGroup",value:function(e){var t,n;if((null===(n=null===(t=this._parent)||void 0===t?void 0:t._prefixes)||void 0===n?void 0:n.has(e))||this._prefixes&&!this._prefixes.has(e))throw new Error('CodeGen: prefix "'.concat(e,'" is not allowed in this scope'));return this._names[e]={prefix:e,index:0}}}]),e}();t.Scope=v;var y=function(e){p(n,e);var t=f(n);function n(e,r){var i;return d(this,n),(i=t.call(this,r)).prefix=e,i}return u(n,[{key:"setValue",value:function(e,t){var n=t.property,i=t.itemIndex;this.value=e,this.scopePath=(0,g._)(r||(r=c([".","[","]"])),new g.Name(n),i)}}]),n}(g.Name);t.ValueScopeName=y;var b=(0,g._)(i||(i=c(["\n"],["\\n"]))),E=function(e){p(r,e);var n=f(r);function r(e){var t;return d(this,r),(t=n.call(this,e))._values={},t._scope=e.scope,t.opts=l(l({},e),{},{_n:e.lines?b:g.nil}),t}return u(r,[{key:"get",value:function(){return this._scope}},{key:"name",value:function(e){return new y(e,this._newName(e))}},{key:"value",value:function(e,t){var n;if(void 0===t.ref)throw new Error("CodeGen: ref must be passed in value");var r=this.toName(e),i=r.prefix,a=null!==(n=t.key)&&void 0!==n?n:t.ref,o=this._values[i];if(o){var s=o.get(a);if(s)return s}else o=this._values[i]=new Map;o.set(a,r);var l=this._scope[i]||(this._scope[i]=[]),c=l.length;return l[c]=t.ref,r.setValue(t,{property:i,itemIndex:c}),r}},{key:"getValue",value:function(e,t){var n=this._values[e];if(n)return n.get(t)}},{key:"scopeRefs",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._values;return this._reduceValues(t,(function(t){if(void 0===t.scopePath)throw new Error('CodeGen: name "'.concat(t,'" has no value'));return(0,g._)(a||(a=c(["","",""])),e,t.scopePath)}))}},{key:"scopeCode",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._values,t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;return this._reduceValues(e,(function(e){if(void 0===e.value)throw new Error('CodeGen: name "'.concat(e,'" has no value'));return e.value.code}),t,n)}},{key:"_reduceValues",value:function(e,n){var r=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=arguments.length>3?arguments[3]:void 0,l=g.nil,u=function(u){var d=e[u];if(!d)return"continue";var p=i[u]=i[u]||new Map;d.forEach((function(e){if(!p.has(e)){p.set(e,m.Started);var i=n(e);if(i){var u=r.opts.es5?t.varKinds.var:t.varKinds.const;l=(0,g._)(o||(o=c(["",""," "," = ",";",""])),l,u,e,i,r.opts._n)}else{if(!(i=null===a||void 0===a?void 0:a(e)))throw new _(e);l=(0,g._)(s||(s=c(["","","",""])),l,i,r.opts._n)}p.set(e,m.Completed)}}))};for(var d in e)u(d);return l}}]),r}(v);t.ValueScope=E},76526:function(e,t,n){"use strict";var r,i,a,o,s,l,c,u,d,p,f,h,m,g,_,v,y,b,E,S,T,C,x,w,O,N=n(79769).default;Object.defineProperty(t,"__esModule",{value:!0}),t.extendErrors=t.resetErrorsCount=t.reportExtraError=t.reportError=t.keyword$DataError=t.keywordError=void 0;var R=n(63101),I=n(37349),A=n(93122);function k(e,t){var n=e.const("err",t);e.if((0,R._)(g||(g=N([""," === null"])),A.default.vErrors),(function(){return e.assign(A.default.vErrors,(0,R._)(_||(_=N(["[","]"])),n))}),(0,R._)(v||(v=N(["",".push(",")"])),A.default.vErrors,n)),e.code((0,R._)(y||(y=N(["","++"])),A.default.errors))}function D(e,t){var n=e.gen,r=e.validateName;e.schemaEnv.$async?n.throw((0,R._)(b||(b=N(["new ","(",")"])),e.ValidationError,t)):(n.assign((0,R._)(E||(E=N(["",".errors"])),r),t),n.return(!1))}t.keywordError={message:function(e){var t=e.keyword;return(0,R.str)(r||(r=N(['must pass "','" keyword validation'])),t)}},t.keyword$DataError={message:function(e){var t=e.keyword,n=e.schemaType;return n?(0,R.str)(i||(i=N(['"','" keyword must be '," ($data)"])),t,n):(0,R.str)(a||(a=N(['"','" keyword is invalid ($data)'])),t)}},t.reportError=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.keywordError,r=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0,a=e.it,s=a.gen,l=a.compositeRule,c=a.allErrors,u=P(e,n,r);(null!==i&&void 0!==i?i:l||c)?k(s,u):D(a,(0,R._)(o||(o=N(["[","]"])),u))},t.reportExtraError=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.keywordError,r=arguments.length>2?arguments[2]:void 0,i=e.it,a=i.gen,o=i.compositeRule,s=i.allErrors,l=P(e,n,r);k(a,l),o||s||D(i,A.default.vErrors)},t.resetErrorsCount=function(e,t){e.assign(A.default.errors,t),e.if((0,R._)(s||(s=N([""," !== null"])),A.default.vErrors),(function(){return e.if(t,(function(){return e.assign((0,R._)(l||(l=N(["",".length"])),A.default.vErrors),t)}),(function(){return e.assign(A.default.vErrors,null)}))}))},t.extendErrors=function(e){var t=e.gen,n=e.keyword,r=e.schemaValue,i=e.data,a=e.errsCount,o=e.it;if(void 0===a)throw new Error("ajv implementation error");var s=t.name("err");t.forRange("i",a,A.default.errors,(function(e){t.const(s,(0,R._)(c||(c=N(["","[","]"])),A.default.vErrors,e)),t.if((0,R._)(u||(u=N(["",".instancePath === undefined"])),s),(function(){return t.assign((0,R._)(d||(d=N(["",".instancePath"])),s),(0,R.strConcat)(A.default.instancePath,o.errorPath))})),t.assign((0,R._)(p||(p=N(["",".schemaPath"])),s),(0,R.str)(f||(f=N(["","/",""])),o.errSchemaPath,n)),o.opts.verbose&&(t.assign((0,R._)(h||(h=N(["",".schema"])),s),r),t.assign((0,R._)(m||(m=N(["",".data"])),s),i))}))};var M={keyword:new R.Name("keyword"),schemaPath:new R.Name("schemaPath"),params:new R.Name("params"),propertyName:new R.Name("propertyName"),message:new R.Name("message"),schema:new R.Name("schema"),parentSchema:new R.Name("parentSchema")};function P(e,t,n){return!1===e.it.createErrors?(0,R._)(S||(S=N(["{}"]))):function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=e.gen,i=e.it,a=[L(i,n),F(e,n)];return B(e,t,a),r.object.apply(r,a)}(e,t,n)}function L(e,t){var n=e.errorPath,r=t.instancePath,i=r?(0,R.str)(T||(T=N(["","",""])),n,(0,I.getErrorPath)(r,I.Type.Str)):n;return[A.default.instancePath,(0,R.strConcat)(A.default.instancePath,i)]}function F(e,t){var n=e.keyword,r=e.it.errSchemaPath,i=t.schemaPath,a=t.parentSchema?r:(0,R.str)(C||(C=N(["","/",""])),r,n);return i&&(a=(0,R.str)(x||(x=N(["","",""])),a,(0,I.getErrorPath)(i,I.Type.Str))),[M.schemaPath,a]}function B(e,t,n){var r=t.params,i=t.message,a=e.keyword,o=e.data,s=e.schemaValue,l=e.it,c=l.opts,u=l.propertyName,d=l.topSchemaRef,p=l.schemaPath;n.push([M.keyword,a],[M.params,"function"==typeof r?r(e):r||(0,R._)(w||(w=N(["{}"])))]),c.messages&&n.push([M.message,"function"==typeof i?i(e):i]),c.verbose&&n.push([M.schema,s],[M.parentSchema,(0,R._)(O||(O=N(["","",""])),d,p)],[A.default.data,o]),u&&n.push([M.propertyName,u])}},60733:function(e,t,n){"use strict";var r,i,a=n(68532).default,o=n(79769).default,s=n(7501).default,l=n(42081).default,c=n(78983).default;Object.defineProperty(t,"__esModule",{value:!0}),t.resolveSchema=t.getCompilingSchema=t.resolveRef=t.compileSchema=t.SchemaEnv=void 0;var u=n(63101),d=n(54599),p=n(93122),f=n(58187),h=n(37349),m=n(67687),g=l((function e(t){var n,r;c(this,e),this.refs={},this.dynamicAnchors={},"object"==s(t.schema)&&(r=t.schema),this.schema=t.schema,this.schemaId=t.schemaId,this.root=t.root||this,this.baseId=null!==(n=t.baseId)&&void 0!==n?n:(0,f.normalizeId)(null===r||void 0===r?void 0:r[t.schemaId||"$id"]),this.schemaPath=t.schemaPath,this.localRefs=t.localRefs,this.meta=t.meta,this.$async=null===r||void 0===r?void 0:r.$async,this.refs={}}));function _(e){var t=y.call(this,e);if(t)return t;var n,a=(0,f.getFullPath)(this.opts.uriResolver,e.root.baseId),s=this.opts.code,l=s.es5,c=s.lines,h=this.opts.ownProperties,g=new u.CodeGen(this.scope,{es5:l,lines:c,ownProperties:h});e.$async&&(n=g.scopeValue("Error",{ref:d.default,code:(0,u._)(r||(r=o(['require("ajv/dist/runtime/validation_error").default'])))}));var _=g.scopeName("validate");e.validateName=_;var v,b={gen:g,allErrors:this.opts.allErrors,data:p.default.data,parentData:p.default.parentData,parentDataProperty:p.default.parentDataProperty,dataNames:[p.default.data],dataPathArr:[u.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:g.scopeValue("schema",!0===this.opts.code.source?{ref:e.schema,code:(0,u.stringify)(e.schema)}:{ref:e.schema}),validateName:_,ValidationError:n,schema:e.schema,schemaEnv:e,rootId:a,baseId:e.baseId||a,schemaPath:u.nil,errSchemaPath:e.schemaPath||(this.opts.jtd?"":"#"),errorPath:(0,u._)(i||(i=o(['""']))),opts:this.opts,self:this};try{this._compilations.add(e),(0,m.validateFunctionCode)(b),g.optimize(this.opts.code.optimize);var E=g.toString();v="".concat(g.scopeRefs(p.default.scope),"return ").concat(E),this.opts.code.process&&(v=this.opts.code.process(v,e));var S=new Function("".concat(p.default.self),"".concat(p.default.scope),v)(this,this.scope.get());if(this.scope.value(_,{ref:S}),S.errors=null,S.schema=e.schema,S.schemaEnv=e,e.$async&&(S.$async=!0),!0===this.opts.code.source&&(S.source={validateName:_,validateCode:E,scopeValues:g._values}),this.opts.unevaluated){var T=b.props,C=b.items;S.evaluated={props:T instanceof u.Name?void 0:T,items:C instanceof u.Name?void 0:C,dynamicProps:T instanceof u.Name,dynamicItems:C instanceof u.Name},S.source&&(S.source.evaluated=(0,u.stringify)(S.evaluated))}return e.validate=S,e}catch(x){throw delete e.validate,delete e.validateName,v&&this.logger.error("Error compiling schema, function code:",v),x}finally{this._compilations.delete(e)}}function v(e){return(0,f.inlineRef)(e.schema,this.opts.inlineRefs)?e.schema:e.validate?e:_.call(this,e)}function y(e){var t,n,r,i=a(this._compilations);try{for(i.s();!(t=i.n()).done;){var o=t.value;if(r=e,(n=o).schema===r.schema&&n.root===r.root&&n.baseId===r.baseId)return o}}catch(s){i.e(s)}finally{i.f()}}function b(e,t){for(var n;"string"==typeof(n=this.refs[t]);)t=n;return n||this.schemas[t]||E.call(this,e,t)}function E(e,t){var n=this.opts.uriResolver.parse(t),r=(0,f._getFullPath)(this.opts.uriResolver,n),i=(0,f.getFullPath)(this.opts.uriResolver,e.baseId,void 0);if(Object.keys(e.schema).length>0&&r===i)return T.call(this,n,e);var a=(0,f.normalizeId)(r),o=this.refs[a]||this.schemas[a];if("string"==typeof o){var l=E.call(this,e,o);if("object"!==s(null===l||void 0===l?void 0:l.schema))return;return T.call(this,n,l)}if("object"===s(null===o||void 0===o?void 0:o.schema)){if(o.validate||_.call(this,o),a===(0,f.normalizeId)(t)){var c=o.schema,u=this.opts.schemaId,d=c[u];return d&&(i=(0,f.resolveUrl)(this.opts.uriResolver,i,d)),new g({schema:c,schemaId:u,root:e,baseId:i})}return T.call(this,n,o)}}t.SchemaEnv=g,t.compileSchema=_,t.resolveRef=function(e,t,n){var r;n=(0,f.resolveUrl)(this.opts.uriResolver,t,n);var i=e.refs[n];if(i)return i;var a=b.call(this,e,n);if(void 0===a){var o=null===(r=e.localRefs)||void 0===r?void 0:r[n],s=this.opts.schemaId;o&&(a=new g({schema:o,schemaId:s,root:e,baseId:t}))}return void 0!==a?e.refs[n]=v.call(this,a):void 0},t.getCompilingSchema=y,t.resolveSchema=E;var S=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function T(e,t){var n,r=t.baseId,i=t.schema,o=t.root;if("/"===(null===(n=e.fragment)||void 0===n?void 0:n[0])){var l,c,u=a(e.fragment.slice(1).split("/"));try{for(u.s();!(l=u.n()).done;){var d=l.value;if("boolean"===typeof i)return;var p=i[(0,h.unescapeFragment)(d)];if(void 0===p)return;var m="object"===s(i=p)&&i[this.opts.schemaId];!S.has(d)&&m&&(r=(0,f.resolveUrl)(this.opts.uriResolver,r,m))}}catch(y){u.e(y)}finally{u.f()}if("boolean"!=typeof i&&i.$ref&&!(0,h.schemaHasRulesButRef)(i,this.RULES)){var _=(0,f.resolveUrl)(this.opts.uriResolver,r,i.$ref);c=E.call(this,o,_)}var v=this.opts.schemaId;return(c=c||new g({schema:i,schemaId:v,root:o,baseId:r})).schema!==c.root.schema?c:void 0}}},93122:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(63101),i={data:new r.Name("data"),valCxt:new r.Name("valCxt"),instancePath:new r.Name("instancePath"),parentData:new r.Name("parentData"),parentDataProperty:new r.Name("parentDataProperty"),rootData:new r.Name("rootData"),dynamicAnchors:new r.Name("dynamicAnchors"),vErrors:new r.Name("vErrors"),errors:new r.Name("errors"),this:new r.Name("this"),self:new r.Name("self"),scope:new r.Name("scope"),json:new r.Name("json"),jsonPos:new r.Name("jsonPos"),jsonLen:new r.Name("jsonLen"),jsonPart:new r.Name("jsonPart")};t.default=i},32041:function(e,t,n){"use strict";var r=n(42081).default,i=n(78983).default,a=n(58724).default,o=n(40670).default,s=n(19952).default;Object.defineProperty(t,"__esModule",{value:!0});var l=n(58187),c=function(e){a(n,e);var t=o(n);function n(e,r,a,o){var s;return i(this,n),(s=t.call(this,o||"can't resolve reference ".concat(a," from id ").concat(r))).missingRef=(0,l.resolveUrl)(e,r,a),s.missingSchema=(0,l.normalizeId)((0,l.getFullPath)(e,s.missingRef)),s}return r(n)}(s(Error));t.default=c},58187:function(e,t,n){"use strict";var r=n(7501).default;Object.defineProperty(t,"__esModule",{value:!0}),t.getSchemaRefs=t.resolveUrl=t.normalizeId=t._getFullPath=t.getFullPath=t.inlineRef=void 0;var i=n(37349),a=n(47372),o=n(23297),s=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);t.inlineRef=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return"boolean"==typeof e||(!0===t?!c(e):!!t&&u(e)<=t)};var l=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function c(e){for(var t in e){if(l.has(t))return!0;var n=e[t];if(Array.isArray(n)&&n.some(c))return!0;if("object"==r(n)&&c(n))return!0}return!1}function u(e){var t=0;for(var n in e){if("$ref"===n)return 1/0;if(t++,!s.has(n)&&("object"==r(e[n])&&(0,i.eachItem)(e[n],(function(e){return t+=u(e)})),t===1/0))return 1/0}return t}function d(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0;!1!==n&&(t=h(t));var r=e.parse(t);return p(e,r)}function p(e,t){return e.serialize(t).split("#")[0]+"#"}t.getFullPath=d,t._getFullPath=p;var f=/#\/?$/;function h(e){return e?e.replace(f,""):""}t.normalizeId=h,t.resolveUrl=function(e,t,n){return n=h(n),e.resolve(t,n)};var m=/^[a-z_][-a-z0-9._]*$/i;t.getSchemaRefs=function(e,t){var n=this;if("boolean"==typeof e)return{};var i=this.opts,s=i.schemaId,l=i.uriResolver,c=h(e[s]||t),u={"":c},p=d(l,c,!1),f={},g=new Set;return o(e,{allKeys:!0},(function(e,t,i,a){if(void 0!==a){var o=p+t,l=u[a];"string"==typeof e[s]&&(l=c.call(n,e[s])),d.call(n,e.$anchor),d.call(n,e.$dynamicAnchor),u[t]=l}function c(t){var n=this.opts.uriResolver.resolve;if(t=h(l?n(l,t):t),g.has(t))throw v(t);g.add(t);var i=this.refs[t];return"string"==typeof i&&(i=this.refs[i]),"object"==r(i)?_(e,i.schema,t):t!==h(o)&&("#"===t[0]?(_(e,f[t],t),f[t]=e):this.refs[t]=o),t}function d(e){if("string"==typeof e){if(!m.test(e))throw new Error('invalid anchor "'.concat(e,'"'));c.call(this,"#".concat(e))}}})),f;function _(e,t,n){if(void 0!==t&&!a(e,t))throw v(n)}function v(e){return new Error('reference "'.concat(e,'" resolves to more than one schema'))}}},42944:function(e,t,n){"use strict";var r=n(80624).default;Object.defineProperty(t,"__esModule",{value:!0}),t.getRules=t.isJSONType=void 0;var i=new Set(["string","number","integer","boolean","null","object","array"]);t.isJSONType=function(e){return"string"==typeof e&&i.has(e)},t.getRules=function(){var e={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:r(r({},e),{},{integer:!0,boolean:!0,null:!0}),rules:[{rules:[]},e.number,e.string,e.array,e.object],post:{rules:[]},all:{},keywords:{}}}},37349:function(e,t,n){"use strict";var r,i,a,o,s,l,c,u,d,p,f,h,m,g,_,v,y,b,E=n(80624).default,S=n(79769).default,T=n(68532).default;Object.defineProperty(t,"__esModule",{value:!0}),t.checkStrictMode=t.getErrorPath=t.Type=t.useFunc=t.setEvaluated=t.evaluatedPropsToName=t.mergeEvaluated=t.eachItem=t.unescapeJsonPointer=t.escapeJsonPointer=t.escapeFragment=t.unescapeFragment=t.schemaRefOrVal=t.schemaHasRulesButRef=t.schemaHasRules=t.checkUnknownRules=t.alwaysValidSchema=t.toHash=void 0;var C=n(63101),x=n(59118);function w(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e.schema,n=e.opts,r=e.self;if(n.strictSchema&&"boolean"!==typeof t){var i=r.RULES.keywords;for(var a in t)i[a]||P(e,'unknown keyword: "'.concat(a,'"'))}}function O(e,t){if("boolean"==typeof e)return!e;for(var n in e)if(t[n])return!0;return!1}function N(e){return"number"==typeof e?"".concat(e):e.replace(/~/g,"~0").replace(/\//g,"~1")}function R(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}function I(e){var t=e.mergeNames,n=e.mergeToName,r=e.mergeValues,i=e.resultToName;return function(e,a,o,s){var l=void 0===o?a:o instanceof C.Name?(a instanceof C.Name?t(e,a,o):n(e,a,o),o):a instanceof C.Name?(n(e,o,a),a):r(a,o);return s!==C.Name||l instanceof C.Name?l:i(e,l)}}function A(e,t){if(!0===t)return e.var("props",!0);var n=e.var("props",(0,C._)(m||(m=S(["{}"]))));return void 0!==t&&k(e,n,t),n}function k(e,t,n){Object.keys(n).forEach((function(n){return e.assign((0,C._)(g||(g=S(["","",""])),t,(0,C.getProperty)(n)),!0)}))}t.toHash=function(e){var t,n={},r=T(e);try{for(r.s();!(t=r.n()).done;){n[t.value]=!0}}catch(i){r.e(i)}finally{r.f()}return n},t.alwaysValidSchema=function(e,t){return"boolean"==typeof t?t:0===Object.keys(t).length||(w(e,t),!O(t,e.self.RULES.all))},t.checkUnknownRules=w,t.schemaHasRules=O,t.schemaHasRulesButRef=function(e,t){if("boolean"==typeof e)return!e;for(var n in e)if("$ref"!==n&&t.all[n])return!0;return!1},t.schemaRefOrVal=function(e,t,n,a){var o=e.topSchemaRef,s=e.schemaPath;if(!a){if("number"==typeof t||"boolean"==typeof t)return t;if("string"==typeof t)return(0,C._)(r||(r=S(["",""])),t)}return(0,C._)(i||(i=S(["","","",""])),o,s,(0,C.getProperty)(n))},t.unescapeFragment=function(e){return R(decodeURIComponent(e))},t.escapeFragment=function(e){return encodeURIComponent(N(e))},t.escapeJsonPointer=N,t.unescapeJsonPointer=R,t.eachItem=function(e,t){if(Array.isArray(e)){var n,r=T(e);try{for(r.s();!(n=r.n()).done;){t(n.value)}}catch(i){r.e(i)}finally{r.f()}}else t(e)},t.mergeEvaluated={props:I({mergeNames:function(e,t,n){return e.if((0,C._)(a||(a=S([""," !== true && "," !== undefined"])),n,t),(function(){e.if((0,C._)(o||(o=S([""," === true"])),t),(function(){return e.assign(n,!0)}),(function(){return e.assign(n,(0,C._)(s||(s=S([""," || {}"])),n)).code((0,C._)(l||(l=S(["Object.assign(",", ",")"])),n,t))}))}))},mergeToName:function(e,t,n){return e.if((0,C._)(c||(c=S([""," !== true"])),n),(function(){!0===t?e.assign(n,!0):(e.assign(n,(0,C._)(u||(u=S([""," || {}"])),n)),k(e,n,t))}))},mergeValues:function(e,t){return!0===e||E(E({},e),t)},resultToName:A}),items:I({mergeNames:function(e,t,n){return e.if((0,C._)(d||(d=S([""," !== true && "," !== undefined"])),n,t),(function(){return e.assign(n,(0,C._)(p||(p=S([""," === true ? true : "," > "," ? "," : ",""])),t,n,t,n,t))}))},mergeToName:function(e,t,n){return e.if((0,C._)(f||(f=S([""," !== true"])),n),(function(){return e.assign(n,!0===t||(0,C._)(h||(h=S([""," > "," ? "," : ",""])),n,t,n,t))}))},mergeValues:function(e,t){return!0===e||Math.max(e,t)},resultToName:function(e,t){return e.var("items",t)}})},t.evaluatedPropsToName=A,t.setEvaluated=k;var D,M={};function P(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.opts.strictSchema;if(n){if(t="strict mode: ".concat(t),!0===n)throw new Error(t);e.self.logger.warn(t)}}t.useFunc=function(e,t){return e.scopeValue("func",{ref:t,code:M[t.code]||(M[t.code]=new x._Code(t.code))})},function(e){e[e.Num=0]="Num",e[e.Str=1]="Str"}(D=t.Type||(t.Type={})),t.getErrorPath=function(e,t,n){if(e instanceof C.Name){var r=t===D.Num;return n?r?(0,C._)(_||(_=S(['"[" + ',' + "]"'])),e):(0,C._)(v||(v=S(['"[\'" + ',' + "\']"'])),e):r?(0,C._)(y||(y=S(['"/" + ',""])),e):(0,C._)(b||(b=S(['"/" + ','.replace(/~/g, "~0").replace(/\\//g, "~1")'],['"/" + ','.replace(/~/g, "~0").replace(/\\\\//g, "~1")'])),e)}return n?(0,C.getProperty)(e).toString():"/"+N(e)},t.checkStrictMode=P},42560:function(e,t){"use strict";function n(e,t){return t.rules.some((function(t){return r(e,t)}))}function r(e,t){var n;return void 0!==e[t.keyword]||(null===(n=t.definition.implements)||void 0===n?void 0:n.some((function(t){return void 0!==e[t]})))}Object.defineProperty(t,"__esModule",{value:!0}),t.shouldUseRule=t.shouldUseGroup=t.schemaHasRulesForType=void 0,t.schemaHasRulesForType=function(e,t){var r=e.schema,i=e.self.RULES.types[t];return i&&!0!==i&&n(r,i)},t.shouldUseGroup=n,t.shouldUseRule=r},28729:function(e,t,n){"use strict";var r,i=n(79769).default,a=n(7501).default;Object.defineProperty(t,"__esModule",{value:!0}),t.boolOrEmptySchema=t.topBoolOrEmptySchema=void 0;var o=n(76526),s=n(63101),l=n(93122),c={message:"boolean schema is false"};function u(e,t){var n={gen:e.gen,keyword:"false schema",data:e.data,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:e};(0,o.reportError)(n,c,void 0,t)}t.topBoolOrEmptySchema=function(e){var t=e.gen,n=e.schema,o=e.validateName;!1===n?u(e,!1):"object"==a(n)&&!0===n.$async?t.return(l.default.data):(t.assign((0,s._)(r||(r=i(["",".errors"])),o),null),t.return(!0))},t.boolOrEmptySchema=function(e,t){var n=e.gen;!1===e.schema?(n.var(t,!1),u(e)):n.var(t,!0)}},98539:function(e,t,n){"use strict";var r,i,a,o,s,l,c,u,d,p,f,h,m,g,_,v,y,b,E,S,T,C,x,w,O,N,R,I,A,k,D,M,P,L=n(68532).default,F=n(79769).default;Object.defineProperty(t,"__esModule",{value:!0}),t.reportTypeError=t.checkDataTypes=t.checkDataType=t.coerceAndCheckDataType=t.getJSONTypes=t.getSchemaTypes=t.DataType=void 0;var B,U=n(42944),G=n(42560),z=n(76526),j=n(63101),H=n(37349);function Z(e){var t=Array.isArray(e)?e:e?[e]:[];if(t.every(U.isJSONType))return t;throw new Error("type must be JSONType or JSONType[]: "+t.join(","))}!function(e){e[e.Correct=0]="Correct",e[e.Wrong=1]="Wrong"}(B=t.DataType||(t.DataType={})),t.getSchemaTypes=function(e){var t=Z(e.type);if(t.includes("null")){if(!1===e.nullable)throw new Error("type: null contradicts nullable: false")}else{if(!t.length&&void 0!==e.nullable)throw new Error('"nullable" cannot be used without "type"');!0===e.nullable&&t.push("null")}return t},t.getJSONTypes=Z,t.coerceAndCheckDataType=function(e,t){var n=e.gen,x=e.data,w=e.opts,O=function(e,t){return t?e.filter((function(e){return Y.has(e)||"array"===t&&"array"===e})):[]}(t,w.coerceTypes),N=t.length>0&&!(0===O.length&&1===t.length&&(0,G.schemaHasRulesForType)(e,t[0]));if(N){var R=q(t,x,w.strictNumbers,B.Wrong);n.if(R,(function(){O.length?function(e,t,n){var x=e.gen,w=e.data,O=e.opts,N=x.let("dataType",(0,j._)(r||(r=F(["typeof ",""])),w)),R=x.let("coerced",(0,j._)(i||(i=F(["undefined"]))));"array"===O.coerceTypes&&x.if((0,j._)(a||(a=F([""," == 'object' && Array.isArray(",") && ",".length == 1"])),N,w,w),(function(){return x.assign(w,(0,j._)(o||(o=F(["","[0]"])),w)).assign(N,(0,j._)(s||(s=F(["typeof ",""])),w)).if(q(t,w,O.strictNumbers),(function(){return x.assign(R,w)}))}));x.if((0,j._)(l||(l=F([""," !== undefined"])),R));var I,A=L(n);try{for(A.s();!(I=A.n()).done;){var k=I.value;(Y.has(k)||"array"===k&&"array"===O.coerceTypes)&&D(k)}}catch(M){A.e(M)}finally{A.f()}function D(e){switch(e){case"string":return void x.elseIf((0,j._)(u||(u=F(["",' == "number" || ',' == "boolean"'])),N,N)).assign(R,(0,j._)(d||(d=F(['"" + ',""])),w)).elseIf((0,j._)(p||(p=F([""," === null"])),w)).assign(R,(0,j._)(f||(f=F(['""']))));case"number":return void x.elseIf((0,j._)(h||(h=F(["",' == "boolean" || '," === null\n || (",' == "string" && '," && "," == +",")"])),N,w,N,w,w,w)).assign(R,(0,j._)(m||(m=F(["+",""])),w));case"integer":return void x.elseIf((0,j._)(g||(g=F(["",' === "boolean" || '," === null\n || (",' === "string" && '," && "," == +"," && !("," % 1))"])),N,w,N,w,w,w,w)).assign(R,(0,j._)(_||(_=F(["+",""])),w));case"boolean":return void x.elseIf((0,j._)(v||(v=F(["",' === "false" || '," === 0 || "," === null"])),w,w,w)).assign(R,!1).elseIf((0,j._)(y||(y=F(["",' === "true" || '," === 1"])),w,w)).assign(R,!0);case"null":return x.elseIf((0,j._)(b||(b=F(["",' === "" || '," === 0 || "," === false"])),w,w,w)),void x.assign(R,null);case"array":x.elseIf((0,j._)(E||(E=F(["",' === "string" || ',' === "number"\n || ',' === "boolean" || '," === null"])),N,N,N,w)).assign(R,(0,j._)(S||(S=F(["[","]"])),w))}}x.else(),$(e),x.endIf(),x.if((0,j._)(c||(c=F([""," !== undefined"])),R),(function(){x.assign(w,R),function(e,t){var n=e.gen,r=e.parentData,i=e.parentDataProperty;n.if((0,j._)(T||(T=F([""," !== undefined"])),r),(function(){return n.assign((0,j._)(C||(C=F(["","[","]"])),r,i),t)}))}(e,R)}))}(e,t,O):$(e)}))}return N};var Y=new Set(["string","number","integer","boolean","null"]);function V(e,t,n){var r,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:B.Correct,a=i===B.Correct?j.operators.EQ:j.operators.NEQ;switch(e){case"null":return(0,j._)(x||(x=F([""," "," null"])),t,a);case"array":r=(0,j._)(w||(w=F(["Array.isArray(",")"])),t);break;case"object":r=(0,j._)(O||(O=F([""," && typeof ",' == "object" && !Array.isArray(',")"])),t,t,t);break;case"integer":r=o((0,j._)(N||(N=F(["!("," % 1) && !isNaN(",")"])),t,t));break;case"number":r=o();break;default:return(0,j._)(R||(R=F(["typeof "," "," ",""])),t,a,e)}return i===B.Correct?r:(0,j.not)(r);function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:j.nil;return(0,j.and)((0,j._)(I||(I=F(["typeof ",' == "number"'])),t),e,n?(0,j._)(A||(A=F(["isFinite(",")"])),t):j.nil)}}function q(e,t,n,r){if(1===e.length)return V(e[0],t,n,r);var i,a=(0,H.toHash)(e);if(a.array&&a.object){var o=(0,j._)(k||(k=F(["typeof ",' != "object"'])),t);i=a.null?o:(0,j._)(D||(D=F(["!"," || ",""])),t,o),delete a.null,delete a.array,delete a.object}else i=j.nil;for(var s in a.number&&delete a.integer,a)i=(0,j.and)(i,V(s,t,n,r));return i}t.checkDataType=V,t.checkDataTypes=q;var W={message:function(e){var t=e.schema;return"must be ".concat(t)},params:function(e){var t=e.schema,n=e.schemaValue;return"string"==typeof t?(0,j._)(M||(M=F(["{type: ","}"])),t):(0,j._)(P||(P=F(["{type: ","}"])),n)}};function $(e){var t=function(e){var t=e.gen,n=e.data,r=e.schema,i=(0,H.schemaRefOrVal)(e,r,"type");return{gen:t,keyword:"type",data:n,schema:r.type,schemaCode:i,schemaValue:i,parentSchema:r,params:{},it:e}}(e);(0,z.reportError)(t,W)}t.reportTypeError=$},95050:function(e,t,n){"use strict";var r,i,a,o,s=n(79769).default;Object.defineProperty(t,"__esModule",{value:!0}),t.assignDefaults=void 0;var l=n(63101),c=n(37349);function u(e,t,n){var u=e.gen,d=e.compositeRule,p=e.data,f=e.opts;if(void 0!==n){var h=(0,l._)(r||(r=s(["","",""])),p,(0,l.getProperty)(t));if(d)(0,c.checkStrictMode)(e,"default is ignored for: ".concat(h));else{var m=(0,l._)(i||(i=s([""," === undefined"])),h);"empty"===f.useDefaults&&(m=(0,l._)(a||(a=s([""," || "," === null || ",' === ""'])),m,h,h)),u.if(m,(0,l._)(o||(o=s([""," = ",""])),h,(0,l.stringify)(n)))}}}t.assignDefaults=function(e,t){var n=e.schema,r=n.properties,i=n.items;if("object"===t&&r)for(var a in r)u(e,a,r[a].default);else"array"===t&&Array.isArray(i)&&i.forEach((function(t,n){return u(e,n,t.default)}))}},67687:function(e,t,n){"use strict";var r,i,a,o,s,l,c,u,d,p,f,h,m,g,_,v,y,b,E,S,T,C,x,w,O,N,R,I,A,k,D,M,P,L,F,B,U,G,z,j=n(80624).default,H=n(78983).default,Z=n(42081).default,Y=n(68532).default,V=n(7501).default,q=n(79769).default;Object.defineProperty(t,"__esModule",{value:!0}),t.getData=t.KeywordCxt=t.validateFunctionCode=void 0;var W=n(28729),$=n(98539),K=n(42560),Q=n(98539),X=n(95050),J=n(77602),ee=n(61502),te=n(63101),ne=n(93122),re=n(58187),ie=n(37349),ae=n(76526);function oe(e,t){var n=e.gen,_=e.validateName,v=e.schema,y=e.schemaEnv,b=e.opts;b.code.es5?n.func(_,(0,te._)(r||(r=q(["",", ",""])),ne.default.data,ne.default.valCxt),y.$async,(function(){n.code((0,te._)(i||(i=q(['"use strict"; ',""])),se(v,b))),function(e,t){e.if(ne.default.valCxt,(function(){e.var(ne.default.instancePath,(0,te._)(l||(l=q(["",".",""])),ne.default.valCxt,ne.default.instancePath)),e.var(ne.default.parentData,(0,te._)(c||(c=q(["",".",""])),ne.default.valCxt,ne.default.parentData)),e.var(ne.default.parentDataProperty,(0,te._)(u||(u=q(["",".",""])),ne.default.valCxt,ne.default.parentDataProperty)),e.var(ne.default.rootData,(0,te._)(d||(d=q(["",".",""])),ne.default.valCxt,ne.default.rootData)),t.dynamicRef&&e.var(ne.default.dynamicAnchors,(0,te._)(p||(p=q(["",".",""])),ne.default.valCxt,ne.default.dynamicAnchors))}),(function(){e.var(ne.default.instancePath,(0,te._)(f||(f=q(['""'])))),e.var(ne.default.parentData,(0,te._)(h||(h=q(["undefined"])))),e.var(ne.default.parentDataProperty,(0,te._)(m||(m=q(["undefined"])))),e.var(ne.default.rootData,ne.default.data),t.dynamicRef&&e.var(ne.default.dynamicAnchors,(0,te._)(g||(g=q(["{}"]))))}))}(n,b),n.code(t)})):n.func(_,(0,te._)(a||(a=q(["",", ",""])),ne.default.data,function(e){return(0,te._)(o||(o=q(["{",'="", ',", ",", ","=","","}={}"])),ne.default.instancePath,ne.default.parentData,ne.default.parentDataProperty,ne.default.rootData,ne.default.data,e.dynamicRef?(0,te._)(s||(s=q([", ","={}"])),ne.default.dynamicAnchors):te.nil)}(b)),y.$async,(function(){return n.code(se(v,b)).code(t)}))}function se(e,t){var n="object"==V(e)&&e[t.schemaId];return n&&(t.code.source||t.code.process)?(0,te._)(C||(C=q(["/*# sourceURL="," */"])),n):te.nil}function le(e,t){ue(e)&&(de(e),ce(e))?function(e,t){var n=e.schema,r=e.gen,i=e.opts;i.$comment&&n.$comment&&fe(e);(function(e){var t=e.schema[e.opts.schemaId];t&&(e.baseId=(0,re.resolveUrl)(e.opts.uriResolver,e.baseId,t))})(e),function(e){if(e.schema.$async&&!e.schemaEnv.$async)throw new Error("async schema in sync schema")}(e);var a=r.const("_errs",ne.default.errors);pe(e,a),r.var(t,(0,te._)(x||(x=q([""," === ",""])),a,ne.default.errors))}(e,t):(0,W.boolOrEmptySchema)(e,t)}function ce(e){var t=e.schema,n=e.self;if("boolean"==typeof t)return!t;for(var r in t)if(n.RULES.all[r])return!0;return!1}function ue(e){return"boolean"!=typeof e.schema}function de(e){(0,ie.checkUnknownRules)(e),function(e){var t=e.schema,n=e.errSchemaPath,r=e.opts,i=e.self;t.$ref&&r.ignoreKeywordsWithRef&&(0,ie.schemaHasRulesButRef)(t,i.RULES)&&i.logger.warn('$ref: keywords ignored in schema at path "'.concat(n,'"'))}(e)}function pe(e,t){if(e.opts.jtd)return he(e,[],!1,t);var n=(0,$.getSchemaTypes)(e.schema);he(e,n,!(0,$.coerceAndCheckDataType)(e,n),t)}function fe(e){var t=e.gen,n=e.schemaEnv,r=e.schema,i=e.errSchemaPath,a=e.opts,o=r.$comment;if(!0===a.$comment)t.code((0,te._)(w||(w=q(["",".logger.log(",")"])),ne.default.self,o));else if("function"==typeof a.$comment){var s=(0,te.str)(O||(O=q(["","/$comment"])),i),l=t.scopeValue("root",{ref:n.root});t.code((0,te._)(N||(N=q(["",".opts.$comment(",", ",", ",".schema)"])),ne.default.self,o,s,l))}}function he(e,t,n,r){var i=e.gen,a=e.schema,o=e.data,s=e.allErrors,l=e.opts,c=e.self.RULES;function u(c){(0,K.shouldUseGroup)(a,c)&&(c.type?(i.if((0,Q.checkDataType)(c.type,o,l.strictNumbers)),me(e,c),1===t.length&&t[0]===c.type&&n&&(i.else(),(0,Q.reportTypeError)(e)),i.endIf()):me(e,c),s||i.if((0,te._)(P||(P=q([""," === ",""])),ne.default.errors,r||0)))}!a.$ref||!l.ignoreKeywordsWithRef&&(0,ie.schemaHasRulesButRef)(a,c)?(l.jtd||function(e,t){if(e.schemaEnv.meta||!e.opts.strictTypes)return;(function(e,t){if(!t.length)return;if(!e.dataTypes.length)return void(e.dataTypes=t);t.forEach((function(t){_e(e.dataTypes,t)||ve(e,'type "'.concat(t,'" not allowed by context "').concat(e.dataTypes.join(","),'"'))})),e.dataTypes=e.dataTypes.filter((function(e){return _e(t,e)}))})(e,t),e.opts.allowUnionTypes||function(e,t){t.length>1&&(2!==t.length||!t.includes("null"))&&ve(e,"use allowUnionTypes to allow union type keyword")}(e,t);!function(e,t){var n=e.self.RULES.all;for(var r in n){var i=n[r];if("object"==V(i)&&(0,K.shouldUseRule)(e.schema,i)){var a=i.definition.type;a.length&&!a.some((function(e){return ge(t,e)}))&&ve(e,'missing type "'.concat(a.join(","),'" for keyword "').concat(r,'"'))}}}(e,e.dataTypes)}(e,t),i.block((function(){var e,t=Y(c.rules);try{for(t.s();!(e=t.n()).done;){u(e.value)}}catch(n){t.e(n)}finally{t.f()}u(c.post)}))):i.block((function(){return be(e,"$ref",c.all.$ref.definition)}))}function me(e,t){var n=e.gen,r=e.schema;e.opts.useDefaults&&(0,X.assignDefaults)(e,t.type),n.block((function(){var n,i=Y(t.rules);try{for(i.s();!(n=i.n()).done;){var a=n.value;(0,K.shouldUseRule)(r,a)&&be(e,a.keyword,a.definition,t.type)}}catch(o){i.e(o)}finally{i.f()}}))}function ge(e,t){return e.includes(t)||"number"===t&&e.includes("integer")}function _e(e,t){return e.includes(t)||"integer"===t&&e.includes("number")}function ve(e,t){var n=e.schemaEnv.baseId+e.errSchemaPath;t+=' at "'.concat(n,'" (strictTypes)'),(0,ie.checkStrictMode)(e,t,e.opts.strictTypes)}t.validateFunctionCode=function(e){ue(e)&&(de(e),ce(e))?function(e){var t=e.schema,n=e.opts,r=e.gen;oe(e,(function(){n.$comment&&t.$comment&&fe(e),function(e){var t=e.schema,n=e.opts;void 0!==t.default&&n.useDefaults&&n.strictSchema&&(0,ie.checkStrictMode)(e,"default is ignored in the schema root")}(e),r.let(ne.default.vErrors,null),r.let(ne.default.errors,0),n.unevaluated&&function(e){var t=e.gen,n=e.validateName;e.evaluated=t.const("evaluated",(0,te._)(_||(_=q(["",".evaluated"])),n)),t.if((0,te._)(v||(v=q(["",".dynamicProps"])),e.evaluated),(function(){return t.assign((0,te._)(y||(y=q(["",".props"])),e.evaluated),(0,te._)(b||(b=q(["undefined"]))))})),t.if((0,te._)(E||(E=q(["",".dynamicItems"])),e.evaluated),(function(){return t.assign((0,te._)(S||(S=q(["",".items"])),e.evaluated),(0,te._)(T||(T=q(["undefined"]))))}))}(e),pe(e),function(e){var t=e.gen,n=e.schemaEnv,r=e.validateName,i=e.ValidationError,a=e.opts;n.$async?t.if((0,te._)(R||(R=q([""," === 0"])),ne.default.errors),(function(){return t.return(ne.default.data)}),(function(){return t.throw((0,te._)(I||(I=q(["new ","(",")"])),i,ne.default.vErrors))})):(t.assign((0,te._)(A||(A=q(["",".errors"])),r),ne.default.vErrors),a.unevaluated&&function(e){var t=e.gen,n=e.evaluated,r=e.props,i=e.items;r instanceof te.Name&&t.assign((0,te._)(D||(D=q(["",".props"])),n),r);i instanceof te.Name&&t.assign((0,te._)(M||(M=q(["",".items"])),n),i)}(e),t.return((0,te._)(k||(k=q([""," === 0"])),ne.default.errors)))}(e)}))}(e):oe(e,(function(){return(0,W.topBoolOrEmptySchema)(e)}))};var ye=function(){function e(t,n,r){if(H(this,e),(0,J.validateKeywordUsage)(t,n,r),this.gen=t.gen,this.allErrors=t.allErrors,this.keyword=r,this.data=t.data,this.schema=t.schema[r],this.$data=n.$data&&t.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,ie.schemaRefOrVal)(t,this.schema,r,this.$data),this.schemaType=n.schemaType,this.parentSchema=t.schema,this.params={},this.it=t,this.def=n,this.$data)this.schemaCode=t.gen.const("vSchema",Te(this.$data,t));else if(this.schemaCode=this.schemaValue,!(0,J.validSchemaType)(this.schema,n.schemaType,n.allowUndefined))throw new Error("".concat(r," value must be ").concat(JSON.stringify(n.schemaType)));("code"in n?n.trackErrors:!1!==n.errors)&&(this.errsCount=t.gen.const("_errs",ne.default.errors))}return Z(e,[{key:"result",value:function(e,t,n){this.failResult((0,te.not)(e),t,n)}},{key:"failResult",value:function(e,t,n){this.gen.if(e),n?n():this.error(),t?(this.gen.else(),t(),this.allErrors&&this.gen.endIf()):this.allErrors?this.gen.endIf():this.gen.else()}},{key:"pass",value:function(e,t){this.failResult((0,te.not)(e),void 0,t)}},{key:"fail",value:function(e){if(void 0===e)return this.error(),void(this.allErrors||this.gen.if(!1));this.gen.if(e),this.error(),this.allErrors?this.gen.endIf():this.gen.else()}},{key:"fail$data",value:function(e){if(!this.$data)return this.fail(e);var t=this.schemaCode;this.fail((0,te._)(L||(L=q([""," !== undefined && (",")"])),t,(0,te.or)(this.invalid$data(),e)))}},{key:"error",value:function(e,t,n){if(t)return this.setParams(t),this._error(e,n),void this.setParams({});this._error(e,n)}},{key:"_error",value:function(e,t){(e?ae.reportExtraError:ae.reportError)(this,this.def.error,t)}},{key:"$dataError",value:function(){(0,ae.reportError)(this,this.def.$dataError||ae.keyword$DataError)}},{key:"reset",value:function(){if(void 0===this.errsCount)throw new Error('add "trackErrors" to keyword definition');(0,ae.resetErrorsCount)(this.gen,this.errsCount)}},{key:"ok",value:function(e){this.allErrors||this.gen.if(e)}},{key:"setParams",value:function(e,t){t?Object.assign(this.params,e):this.params=e}},{key:"block$data",value:function(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:te.nil;this.gen.block((function(){n.check$data(e,r),t()}))}},{key:"check$data",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:te.nil,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:te.nil;if(this.$data){var n=this.gen,r=this.schemaCode,i=this.schemaType,a=this.def;n.if((0,te.or)((0,te._)(F||(F=q([""," === undefined"])),r),t)),e!==te.nil&&n.assign(e,!0),(i.length||a.validateSchema)&&(n.elseIf(this.invalid$data()),this.$dataError(),e!==te.nil&&n.assign(e,!1)),n.else()}}},{key:"invalid$data",value:function(){var e=this.gen,t=this.schemaCode,n=this.schemaType,r=this.def,i=this.it;return(0,te.or)(function(){if(n.length){if(!(t instanceof te.Name))throw new Error("ajv implementation error");var e=Array.isArray(n)?n:[n];return(0,te._)(B||(B=q(["",""])),(0,Q.checkDataTypes)(e,t,i.opts.strictNumbers,Q.DataType.Wrong))}return te.nil}(),function(){if(r.validateSchema){var n=e.scopeValue("validate$data",{ref:r.validateSchema});return(0,te._)(U||(U=q(["!","(",")"])),n,t)}return te.nil}())}},{key:"subschema",value:function(e,t){var n=(0,ee.getSubschema)(this.it,e);(0,ee.extendSubschemaData)(n,this.it,e),(0,ee.extendSubschemaMode)(n,e);var r=j(j(j({},this.it),n),{},{items:void 0,props:void 0});return le(r,t),r}},{key:"mergeEvaluated",value:function(e,t){var n=this.it,r=this.gen;n.opts.unevaluated&&(!0!==n.props&&void 0!==e.props&&(n.props=ie.mergeEvaluated.props(r,e.props,n.props,t)),!0!==n.items&&void 0!==e.items&&(n.items=ie.mergeEvaluated.items(r,e.items,n.items,t)))}},{key:"mergeValidEvaluated",value:function(e,t){var n=this,r=this.it,i=this.gen;if(r.opts.unevaluated&&(!0!==r.props||!0!==r.items))return i.if(t,(function(){return n.mergeEvaluated(e,te.Name)})),!0}}]),e}();function be(e,t,n,r){var i=new ye(e,n,t);"code"in n?n.code(i,r):i.$data&&n.validate?(0,J.funcKeywordCode)(i,n):"macro"in n?(0,J.macroKeywordCode)(i,n):(n.compile||n.validate)&&(0,J.funcKeywordCode)(i,n)}t.KeywordCxt=ye;var Ee=/^\/(?:[^~]|~0|~1)*$/,Se=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function Te(e,t){var n,r,i=t.dataLevel,a=t.dataNames,o=t.dataPathArr;if(""===e)return ne.default.rootData;if("/"===e[0]){if(!Ee.test(e))throw new Error("Invalid JSON-pointer: ".concat(e));n=e,r=ne.default.rootData}else{var s=Se.exec(e);if(!s)throw new Error("Invalid JSON-pointer: ".concat(e));var l=+s[1];if("#"===(n=s[2])){if(l>=i)throw new Error(h("property/index",l));return o[i-l]}if(l>i)throw new Error(h("data",l));if(r=a[i-l],!n)return r}var c,u=r,d=n.split("/"),p=Y(d);try{for(p.s();!(c=p.n()).done;){var f=c.value;f&&(r=(0,te._)(G||(G=q(["","",""])),r,(0,te.getProperty)((0,ie.unescapeJsonPointer)(f))),u=(0,te._)(z||(z=q([""," && ",""])),u,r))}}catch(m){p.e(m)}finally{p.f()}return u;function h(e,t){return"Cannot access ".concat(e," ").concat(t," levels up, current level is ").concat(i)}}t.getData=Te},77602:function(e,t,n){"use strict";var r,i,a,o,s,l,c,u,d,p,f=n(7501).default,h=n(79769).default;Object.defineProperty(t,"__esModule",{value:!0}),t.validateKeywordUsage=t.validSchemaType=t.funcKeywordCode=t.macroKeywordCode=void 0;var m=n(63101),g=n(93122),_=n(33103),v=n(76526);function y(e){var t=e.gen,n=e.data,r=e.it;t.if(r.parentData,(function(){return t.assign(n,(0,m._)(c||(c=h(["","[","]"])),r.parentData,r.parentDataProperty))}))}function b(e,t,n){if(void 0===n)throw new Error('keyword "'.concat(t,'" failed to compile'));return e.scopeValue("keyword","function"==typeof n?{ref:n}:{ref:n,code:(0,m.stringify)(n)})}t.macroKeywordCode=function(e,t){var n=e.gen,r=e.keyword,i=e.schema,a=e.parentSchema,o=e.it,s=t.macro.call(o.self,i,a,o),l=b(n,r,s);!1!==o.opts.validateSchema&&o.self.validateSchema(s,!0);var c=n.name("valid");e.subschema({schema:s,schemaPath:m.nil,errSchemaPath:"".concat(o.errSchemaPath,"/").concat(r),topSchemaRef:l,compositeRule:!0},c),e.pass(c,(function(){return e.error(!0)}))},t.funcKeywordCode=function(e,t){var n,c=e.gen,f=e.keyword,E=e.schema,S=e.parentSchema,T=e.$data,C=e.it;!function(e,t){var n=e.schemaEnv;if(t.async&&!n.$async)throw new Error("async keyword in sync schema")}(C,t);var x=!T&&t.compile?t.compile.call(C.self,E,S,C):t.validate,w=b(c,f,x),O=c.let("valid");function N(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.async?(0,m._)(s||(s=h(["await "]))):m.nil,r=C.opts.passContext?g.default.this:g.default.self,i=!("compile"in t&&!T||!1===t.schema);c.assign(O,(0,m._)(l||(l=h(["","",""])),n,(0,_.callValidateCode)(e,w,r,i)),t.modifying)}function R(e){var n;c.if((0,m.not)(null!==(n=t.valid)&&void 0!==n?n:O),e)}e.block$data(O,(function(){if(!1===t.errors)N(),t.modifying&&y(e),R((function(){return e.error()}));else{var n=t.async?function(){var e=c.let("ruleErrs",null);return c.try((function(){return N((0,m._)(r||(r=h(["await "]))))}),(function(t){return c.assign(O,!1).if((0,m._)(i||(i=h([""," instanceof ",""])),t,C.ValidationError),(function(){return c.assign(e,(0,m._)(a||(a=h(["",".errors"])),t))}),(function(){return c.throw(t)}))})),e}():function(){var e=(0,m._)(o||(o=h(["",".errors"])),w);return c.assign(e,null),N(m.nil),e}();t.modifying&&y(e),R((function(){return function(e,t){var n=e.gen;n.if((0,m._)(u||(u=h(["Array.isArray(",")"])),t),(function(){n.assign(g.default.vErrors,(0,m._)(d||(d=h([""," === null ? "," : ",".concat(",")"])),g.default.vErrors,t,g.default.vErrors,t)).assign(g.default.errors,(0,m._)(p||(p=h(["",".length"])),g.default.vErrors)),(0,v.extendErrors)(e)}),(function(){return e.error()}))}(e,n)}))}})),e.ok(null!==(n=t.valid)&&void 0!==n?n:O)},t.validSchemaType=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return!t.length||t.some((function(t){return"array"===t?Array.isArray(e):"object"===t?e&&"object"==f(e)&&!Array.isArray(e):f(e)==t||n&&"undefined"==typeof e}))},t.validateKeywordUsage=function(e,t,n){var r=e.schema,i=e.opts,a=e.self,o=e.errSchemaPath;if(Array.isArray(t.keyword)?!t.keyword.includes(n):t.keyword!==n)throw new Error("ajv implementation error");var s=t.dependencies;if(null===s||void 0===s?void 0:s.some((function(e){return!Object.prototype.hasOwnProperty.call(r,e)})))throw new Error("parent schema must have dependencies of ".concat(n,": ").concat(s.join(",")));if(t.validateSchema&&!t.validateSchema(r[n])){var l='keyword "'.concat(n,'" value is invalid at path "').concat(o,'": ')+a.errorsText(t.validateSchema.errors);if("log"!==i.validateSchema)throw new Error(l);a.logger.error(l)}}},61502:function(e,t,n){"use strict";var r,i,a,o,s,l=n(9833).default,c=n(79769).default;Object.defineProperty(t,"__esModule",{value:!0}),t.extendSubschemaMode=t.extendSubschemaData=t.getSubschema=void 0;var u=n(63101),d=n(37349);t.getSubschema=function(e,t){var n=t.keyword,a=t.schemaProp,o=t.schema,s=t.schemaPath,l=t.errSchemaPath,p=t.topSchemaRef;if(void 0!==n&&void 0!==o)throw new Error('both "keyword" and "schema" passed, only one allowed');if(void 0!==n){var f=e.schema[n];return void 0===a?{schema:f,schemaPath:(0,u._)(r||(r=c(["","",""])),e.schemaPath,(0,u.getProperty)(n)),errSchemaPath:"".concat(e.errSchemaPath,"/").concat(n)}:{schema:f[a],schemaPath:(0,u._)(i||(i=c(["","","",""])),e.schemaPath,(0,u.getProperty)(n),(0,u.getProperty)(a)),errSchemaPath:"".concat(e.errSchemaPath,"/").concat(n,"/").concat((0,d.escapeFragment)(a))}}if(void 0!==o){if(void 0===s||void 0===l||void 0===p)throw new Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:o,schemaPath:s,topSchemaRef:p,errSchemaPath:l}}throw new Error('either "keyword" or "schema" must be passed')},t.extendSubschemaData=function(e,t,n){var r=n.dataProp,i=n.dataPropType,p=n.data,f=n.dataTypes,h=n.propertyName;if(void 0!==p&&void 0!==r)throw new Error('both "data" and "dataProp" passed, only one allowed');var m=t.gen;if(void 0!==r){var g=t.errorPath,_=t.dataPathArr,v=t.opts;y(m.let("data",(0,u._)(a||(a=c(["","",""])),t.data,(0,u.getProperty)(r)),!0)),e.errorPath=(0,u.str)(o||(o=c(["","",""])),g,(0,d.getErrorPath)(r,i,v.jsPropertySyntax)),e.parentDataProperty=(0,u._)(s||(s=c(["",""])),r),e.dataPathArr=[].concat(l(_),[e.parentDataProperty])}function y(n){e.data=n,e.dataLevel=t.dataLevel+1,e.dataTypes=[],t.definedProperties=new Set,e.parentData=t.data,e.dataNames=[].concat(l(t.dataNames),[n])}void 0!==p&&(y(p instanceof u.Name?p:m.let("data",p,!0)),void 0!==h&&(e.propertyName=h)),f&&(e.dataTypes=f)},t.extendSubschemaMode=function(e,t){var n=t.jtdDiscriminator,r=t.jtdMetadata,i=t.compositeRule,a=t.createErrors,o=t.allErrors;void 0!==i&&(e.compositeRule=i),void 0!==a&&(e.createErrors=a),void 0!==o&&(e.allErrors=o),e.jtdDiscriminator=n,e.jtdMetadata=r}},20660:function(e,t,n){"use strict";var r=n(68532).default,i=n(21337).default,a=n(10029).default,o=n(7501).default,s=n(78983).default,l=n(42081).default,c=n(80624).default;Object.defineProperty(t,"__esModule",{value:!0}),t.CodeGen=t.Name=t.nil=t.stringify=t.str=t._=t.KeywordCxt=void 0;var u=n(67687);Object.defineProperty(t,"KeywordCxt",{enumerable:!0,get:function(){return u.KeywordCxt}});var d=n(63101);Object.defineProperty(t,"_",{enumerable:!0,get:function(){return d._}}),Object.defineProperty(t,"str",{enumerable:!0,get:function(){return d.str}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return d.stringify}}),Object.defineProperty(t,"nil",{enumerable:!0,get:function(){return d.nil}}),Object.defineProperty(t,"Name",{enumerable:!0,get:function(){return d.Name}}),Object.defineProperty(t,"CodeGen",{enumerable:!0,get:function(){return d.CodeGen}});var p=n(54599),f=n(32041),h=n(42944),m=n(60733),g=n(63101),_=n(58187),v=n(98539),y=n(37349),b=n(71143),E=n(67802),S=function(e,t){return new RegExp(e,t)};S.code="new RegExp";var T=["removeAdditional","useDefaults","coerceTypes"],C=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),x={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},w={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'};function O(e){var t,n,r,i,a,o,s,l,u,d,p,f,h,m,g,_,v,y,b,T,C,x,w,O,N,R=e.strict,I=null===(t=e.code)||void 0===t?void 0:t.optimize,A=!0===I||void 0===I?1:I||0,k=null!==(r=null===(n=e.code)||void 0===n?void 0:n.regExp)&&void 0!==r?r:S,D=null!==(i=e.uriResolver)&&void 0!==i?i:E.default;return{strictSchema:null===(o=null!==(a=e.strictSchema)&&void 0!==a?a:R)||void 0===o||o,strictNumbers:null===(l=null!==(s=e.strictNumbers)&&void 0!==s?s:R)||void 0===l||l,strictTypes:null!==(d=null!==(u=e.strictTypes)&&void 0!==u?u:R)&&void 0!==d?d:"log",strictTuples:null!==(f=null!==(p=e.strictTuples)&&void 0!==p?p:R)&&void 0!==f?f:"log",strictRequired:null!==(m=null!==(h=e.strictRequired)&&void 0!==h?h:R)&&void 0!==m&&m,code:e.code?c(c({},e.code),{},{optimize:A,regExp:k}):{optimize:A,regExp:k},loopRequired:null!==(g=e.loopRequired)&&void 0!==g?g:200,loopEnum:null!==(_=e.loopEnum)&&void 0!==_?_:200,meta:null===(v=e.meta)||void 0===v||v,messages:null===(y=e.messages)||void 0===y||y,inlineRefs:null===(b=e.inlineRefs)||void 0===b||b,schemaId:null!==(T=e.schemaId)&&void 0!==T?T:"$id",addUsedSchema:null===(C=e.addUsedSchema)||void 0===C||C,validateSchema:null===(x=e.validateSchema)||void 0===x||x,validateFormats:null===(w=e.validateFormats)||void 0===w||w,unicodeRegExp:null===(O=e.unicodeRegExp)||void 0===O||O,int32range:null===(N=e.int32range)||void 0===N||N,uriResolver:D}}var N=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};s(this,e),this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,t=this.opts=c(c({},t),O(t));var n=this.opts.code,r=n.es5,i=n.lines;this.scope=new g.ValueScope({scope:{},prefixes:C,es5:r,lines:i}),this.logger=L(t.logger);var a=t.validateFormats;t.validateFormats=!1,this.RULES=(0,h.getRules)(),R.call(this,x,t,"NOT SUPPORTED"),R.call(this,w,t,"DEPRECATED","warn"),this._metaOpts=M.call(this),t.formats&&k.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),t.keywords&&D.call(this,t.keywords),"object"==o(t.meta)&&this.addMetaSchema(t.meta),A.call(this),t.validateFormats=a}return l(e,[{key:"_addVocabularies",value:function(){this.addKeyword("$async")}},{key:"_addDefaultMetaSchema",value:function(){var e=this.opts,t=e.$data,n=e.meta,r=e.schemaId,i=b;"id"===r&&((i=c({},b)).id=i.$id,delete i.$id),n&&t&&this.addMetaSchema(i,i[r],!1)}},{key:"defaultMeta",value:function(){var e=this.opts,t=e.meta,n=e.schemaId;return this.opts.defaultMeta="object"==o(t)?t[n]||t:void 0}},{key:"validate",value:function(e,t){var n;if("string"==typeof e){if(!(n=this.getSchema(e)))throw new Error('no schema with key or ref "'.concat(e,'"'))}else n=this.compile(e);var r=n(t);return"$async"in n||(this.errors=n.errors),r}},{key:"compile",value:function(e,t){var n=this._addSchema(e,t);return n.validate||this._compileSchemaEnv(n)}},{key:"compileAsync",value:function(e,t){if("function"!=typeof this.opts.loadSchema)throw new Error("options.loadSchema should be a function");var n=this.opts.loadSchema;return r.call(this,e,t);function r(e,t){return o.apply(this,arguments)}function o(){return(o=a(i().mark((function e(t,n){var r;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,s.call(this,t.$schema);case 2:return r=this._addSchema(t,n),e.abrupt("return",r.validate||c.call(this,r));case 4:case"end":return e.stop()}}),e,this)})))).apply(this,arguments)}function s(e){return l.apply(this,arguments)}function l(){return(l=a(i().mark((function e(t){return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!t||this.getSchema(t)){e.next=3;break}return e.next=3,r.call(this,{$ref:t},!0);case 3:case"end":return e.stop()}}),e,this)})))).apply(this,arguments)}function c(e){return u.apply(this,arguments)}function u(){return(u=a(i().mark((function e(t){return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.abrupt("return",this._compileSchemaEnv(t));case 4:if(e.prev=4,e.t0=e.catch(0),e.t0 instanceof f.default){e.next=8;break}throw e.t0;case 8:return d.call(this,e.t0),e.next=11,p.call(this,e.t0.missingSchema);case 11:return e.abrupt("return",c.call(this,t));case 12:case"end":return e.stop()}}),e,this,[[0,4]])})))).apply(this,arguments)}function d(e){var t=e.missingSchema,n=e.missingRef;if(this.refs[t])throw new Error("AnySchema ".concat(t," is loaded but ").concat(n," cannot be resolved"))}function p(e){return h.apply(this,arguments)}function h(){return(h=a(i().mark((function e(n){var r;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,m.call(this,n);case 2:if(r=e.sent,this.refs[n]){e.next=6;break}return e.next=6,s.call(this,r.$schema);case 6:this.refs[n]||this.addSchema(r,n,t);case 7:case"end":return e.stop()}}),e,this)})))).apply(this,arguments)}function m(e){return g.apply(this,arguments)}function g(){return(g=a(i().mark((function e(t){var r;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(r=this._loading[t])){e.next=3;break}return e.abrupt("return",r);case 3:return e.prev=3,e.next=6,this._loading[t]=n(t);case 6:return e.abrupt("return",e.sent);case 7:return e.prev=7,delete this._loading[t],e.finish(7);case 10:case"end":return e.stop()}}),e,this,[[3,,7,10]])})))).apply(this,arguments)}}},{key:"addSchema",value:function(e,t,n){var i,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:this.opts.validateSchema;if(Array.isArray(e)){var s,l=r(e);try{for(l.s();!(s=l.n()).done;){var c=s.value;this.addSchema(c,void 0,n,a)}}catch(d){l.e(d)}finally{l.f()}return this}if("object"===o(e)){var u=this.opts.schemaId;if(void 0!==(i=e[u])&&"string"!=typeof i)throw new Error("schema ".concat(u," must be string"))}return t=(0,_.normalizeId)(t||i),this._checkUnique(t),this.schemas[t]=this._addSchema(e,n,t,a,!0),this}},{key:"addMetaSchema",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.opts.validateSchema;return this.addSchema(e,t,!0,n),this}},{key:"validateSchema",value:function(e,t){if("boolean"==typeof e)return!0;var n;if(void 0!==(n=e.$schema)&&"string"!=typeof n)throw new Error("$schema must be a string");if(!(n=n||this.opts.defaultMeta||this.defaultMeta()))return this.logger.warn("meta-schema not available"),this.errors=null,!0;var r=this.validate(n,e);if(!r&&t){var i="schema is invalid: "+this.errorsText();if("log"!==this.opts.validateSchema)throw new Error(i);this.logger.error(i)}return r}},{key:"getSchema",value:function(e){for(var t;"string"==typeof(t=I.call(this,e));)e=t;if(void 0===t){var n=this.opts.schemaId,r=new m.SchemaEnv({schema:{},schemaId:n});if(!(t=m.resolveSchema.call(this,r,e)))return;this.refs[e]=t}return t.validate||this._compileSchemaEnv(t)}},{key:"removeSchema",value:function(e){if(e instanceof RegExp)return this._removeAllSchemas(this.schemas,e),this._removeAllSchemas(this.refs,e),this;switch(o(e)){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":var t=I.call(this,e);return"object"==o(t)&&this._cache.delete(t.schema),delete this.schemas[e],delete this.refs[e],this;case"object":var n=e;this._cache.delete(n);var r=e[this.opts.schemaId];return r&&(r=(0,_.normalizeId)(r),delete this.schemas[r],delete this.refs[r]),this;default:throw new Error("ajv.removeSchema: invalid parameter")}}},{key:"addVocabulary",value:function(e){var t,n=r(e);try{for(n.s();!(t=n.n()).done;){var i=t.value;this.addKeyword(i)}}catch(a){n.e(a)}finally{n.f()}return this}},{key:"addKeyword",value:function(e,t){var n,r=this;if("string"==typeof e)n=e,"object"==o(t)&&(this.logger.warn("these parameters are deprecated, see docs for addKeyword"),t.keyword=n);else{if("object"!=o(e)||void 0!==t)throw new Error("invalid addKeywords parameters");if(n=(t=e).keyword,Array.isArray(n)&&!n.length)throw new Error("addKeywords: keyword must be string or non-empty array")}if(B.call(this,n,t),!t)return(0,y.eachItem)(n,(function(e){return U.call(r,e)})),this;z.call(this,t);var i=c(c({},t),{},{type:(0,v.getJSONTypes)(t.type),schemaType:(0,v.getJSONTypes)(t.schemaType)});return(0,y.eachItem)(n,0===i.type.length?function(e){return U.call(r,e,i)}:function(e){return i.type.forEach((function(t){return U.call(r,e,i,t)}))}),this}},{key:"getKeyword",value:function(e){var t=this.RULES.all[e];return"object"==o(t)?t.definition:!!t}},{key:"removeKeyword",value:function(e){var t=this.RULES;delete t.keywords[e],delete t.all[e];var n,i=r(t.rules);try{for(i.s();!(n=i.n()).done;){var a=n.value,o=a.rules.findIndex((function(t){return t.keyword===e}));o>=0&&a.rules.splice(o,1)}}catch(s){i.e(s)}finally{i.f()}return this}},{key:"addFormat",value:function(e,t){return"string"==typeof t&&(t=new RegExp(t)),this.formats[e]=t,this}},{key:"errorsText",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.errors,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.separator,r=void 0===n?", ":n,i=t.dataVar,a=void 0===i?"data":i;return e&&0!==e.length?e.map((function(e){return"".concat(a).concat(e.instancePath," ").concat(e.message)})).reduce((function(e,t){return e+r+t})):"No errors"}},{key:"$dataMetaSchema",value:function(e,t){var n=this.RULES.all;e=JSON.parse(JSON.stringify(e));var i,a=r(t);try{for(a.s();!(i=a.n()).done;){var s,l=i.value.split("/").slice(1),c=e,u=r(l);try{for(u.s();!(s=u.n()).done;){c=c[s.value]}}catch(m){u.e(m)}finally{u.f()}for(var d in n){var p=n[d];if("object"==o(p)){var f=p.definition.$data,h=c[d];f&&h&&(c[d]=H(h))}}}}catch(m){a.e(m)}finally{a.f()}return e}},{key:"_removeAllSchemas",value:function(e,t){for(var n in e){var r=e[n];t&&!t.test(n)||("string"==typeof r?delete e[n]:r&&!r.meta&&(this._cache.delete(r.schema),delete e[n]))}}},{key:"_addSchema",value:function(e,t,n){var r,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:this.opts.validateSchema,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:this.opts.addUsedSchema,s=this.opts.schemaId;if("object"==o(e))r=e[s];else{if(this.opts.jtd)throw new Error("schema must be object");if("boolean"!=typeof e)throw new Error("schema must be object or boolean")}var l=this._cache.get(e);if(void 0!==l)return l;n=(0,_.normalizeId)(r||n);var c=_.getSchemaRefs.call(this,e,n);return l=new m.SchemaEnv({schema:e,schemaId:s,meta:t,baseId:n,localRefs:c}),this._cache.set(l.schema,l),a&&!n.startsWith("#")&&(n&&this._checkUnique(n),this.refs[n]=l),i&&this.validateSchema(e,!0),l}},{key:"_checkUnique",value:function(e){if(this.schemas[e]||this.refs[e])throw new Error('schema with key or id "'.concat(e,'" already exists'))}},{key:"_compileSchemaEnv",value:function(e){if(e.meta?this._compileMetaSchema(e):m.compileSchema.call(this,e),!e.validate)throw new Error("ajv implementation error");return e.validate}},{key:"_compileMetaSchema",value:function(e){var t=this.opts;this.opts=this._metaOpts;try{m.compileSchema.call(this,e)}finally{this.opts=t}}}]),e}();function R(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"error";for(var i in e){var a=i;a in t&&this.logger[r]("".concat(n,": option ").concat(i,". ").concat(e[a]))}}function I(e){return e=(0,_.normalizeId)(e),this.schemas[e]||this.refs[e]}function A(){var e=this.opts.schemas;if(e)if(Array.isArray(e))this.addSchema(e);else for(var t in e)this.addSchema(e[t],t)}function k(){for(var e in this.opts.formats){var t=this.opts.formats[e];t&&this.addFormat(e,t)}}function D(e){if(Array.isArray(e))this.addVocabulary(e);else for(var t in this.logger.warn("keywords option as map is deprecated, pass array"),e){var n=e[t];n.keyword||(n.keyword=t),this.addKeyword(n)}}function M(){var e,t=c({},this.opts),n=r(T);try{for(n.s();!(e=n.n()).done;){delete t[e.value]}}catch(i){n.e(i)}finally{n.f()}return t}t.default=N,N.ValidationError=p.default,N.MissingRefError=f.default;var P={log:function(){},warn:function(){},error:function(){}};function L(e){if(!1===e)return P;if(void 0===e)return console;if(e.log&&e.warn&&e.error)return e;throw new Error("logger must implement log, warn and error methods")}var F=/^[a-z_$][a-z0-9_$:-]*$/i;function B(e,t){var n=this.RULES;if((0,y.eachItem)(e,(function(e){if(n.keywords[e])throw new Error("Keyword ".concat(e," is already defined"));if(!F.test(e))throw new Error("Keyword ".concat(e," has invalid name"))})),t&&t.$data&&!("code"in t)&&!("validate"in t))throw new Error('$data keyword must have "code" or "validate" function')}function U(e,t,n){var r,i=this,a=null===t||void 0===t?void 0:t.post;if(n&&a)throw new Error('keyword with "post" flag cannot have "type"');var o=this.RULES,s=a?o.post:o.rules.find((function(e){return e.type===n}));if(s||(s={type:n,rules:[]},o.rules.push(s)),o.keywords[e]=!0,t){var l={keyword:e,definition:c(c({},t),{},{type:(0,v.getJSONTypes)(t.type),schemaType:(0,v.getJSONTypes)(t.schemaType)})};t.before?G.call(this,s,l,t.before):s.rules.push(l),o.all[e]=l,null===(r=t.implements)||void 0===r||r.forEach((function(e){return i.addKeyword(e)}))}}function G(e,t,n){var r=e.rules.findIndex((function(e){return e.keyword===n}));r>=0?e.rules.splice(r,0,t):(e.rules.push(t),this.logger.warn("rule ".concat(n," is not defined")))}function z(e){var t=e.metaSchema;void 0!==t&&(e.$data&&this.opts.$data&&(t=H(t)),e.validateSchema=this.compile(t,!0))}var j={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function H(e){return{anyOf:[e,j]}}},73275:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(47372);r.code='require("ajv/dist/runtime/equal").default',t.default=r},67325:function(e,t){"use strict";function n(e){for(var t,n=e.length,r=0,i=0;i=55296&&t<=56319&&i8){var s=(0,h.schemaRefOrVal)(_,r.properties,"properties");i=(0,d.isOwnProperty)(t,s,n)}else i=b.length?p.or.apply(void 0,c(b.map((function(e){return(0,p._)(a||(a=u([""," === ",""])),n,e)})))):p.nil;return E.length&&(i=p.or.apply(void 0,[i].concat(c(E.map((function(t){return(0,p._)(o||(o=u(["",".test(",")"])),(0,d.usePattern)(e,t),n)})))))),(0,p.not)(i)}(n),(function(){return T(n)})):T(n)})),e.ok((0,p._)(i||(i=u([""," === ",""])),g,f.default.errors))}function S(e){t.code((0,p._)(s||(s=u(["delete ","[","]"])),m,e))}function T(r){if("all"===y.removeAdditional||y.removeAdditional&&!1===n)S(r);else{if(!1===n)return e.setParams({additionalProperty:r}),e.error(),void(v||t.break());if("object"==l(n)&&!(0,h.alwaysValidSchema)(_,n)){var i=t.name("valid");"failing"===y.removeAdditional?(C(r,i,!1),t.if((0,p.not)(i),(function(){e.reset(),S(r)}))):(C(r,i),v||t.if((0,p.not)(i),(function(){return t.break()})))}}}function C(t,n,r){var i={keyword:"additionalProperties",dataProp:t,dataPropType:h.Type.Str};!1===r&&Object.assign(i,{compositeRule:!0,createErrors:!1,allErrors:!1}),e.subschema(i,n)}}};t.default=m},31253:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(37349),i={keyword:"allOf",schemaType:"array",code:function(e){var t=e.gen,n=e.schema,i=e.it;if(!Array.isArray(n))throw new Error("ajv implementation error");var a=t.name("valid");n.forEach((function(t,n){if(!(0,r.alwaysValidSchema)(i,t)){var o=e.subschema({keyword:"allOf",schemaProp:n},a);e.ok(a),e.mergeEvaluated(o)}}))}};t.default=i},82395:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:n(33103).validateUnion,error:{message:"must match a schema in anyOf"}};t.default=r},31856:function(e,t,n){"use strict";var r,i,a,o,s,l,c,u,d,p,f,h,m=n(79769).default;Object.defineProperty(t,"__esModule",{value:!0});var g=n(63101),_=n(37349),v={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:{message:function(e){var t=e.params,n=t.min,a=t.max;return void 0===a?(0,g.str)(r||(r=m(["must contain at least "," valid item(s)"])),n):(0,g.str)(i||(i=m(["must contain at least "," and no more than "," valid item(s)"])),n,a)},params:function(e){var t=e.params,n=t.min,r=t.max;return void 0===r?(0,g._)(a||(a=m(["{minContains: ","}"])),n):(0,g._)(o||(o=m(["{minContains: ",", maxContains: ","}"])),n,r)}},code:function(e){var t,n,r=e.gen,i=e.schema,a=e.parentSchema,o=e.data,v=e.it,y=a.minContains,b=a.maxContains;v.opts.next?(t=void 0===y?1:y,n=b):t=1;var E=r.const("len",(0,g._)(s||(s=m(["",".length"])),o));if(e.setParams({min:t,max:n}),void 0!==n||0!==t){if(void 0!==n&&t>n)return(0,_.checkStrictMode)(v,'"minContains" > "maxContains" is always invalid'),void e.fail();if((0,_.alwaysValidSchema)(v,i)){var S=(0,g._)(l||(l=m([""," >= ",""])),E,t);return void 0!==n&&(S=(0,g._)(c||(c=m([""," && "," <= ",""])),S,E,n)),void e.pass(S)}v.items=!0;var T=r.name("valid");void 0===n&&1===t?x(T,(function(){return r.if(T,(function(){return r.break()}))})):0===t?(r.let(T,!0),void 0!==n&&r.if((0,g._)(u||(u=m(["",".length > 0"])),o),C)):(r.let(T,!1),C()),e.result(T,(function(){return e.reset()}))}else(0,_.checkStrictMode)(v,'"minContains" == 0 without "maxContains": "contains" keyword ignored');function C(){var e=r.name("_valid"),i=r.let("count",0);x(e,(function(){return r.if(e,(function(){return function(e){r.code((0,g._)(d||(d=m(["","++"])),e)),void 0===n?r.if((0,g._)(p||(p=m([""," >= ",""])),e,t),(function(){return r.assign(T,!0).break()})):(r.if((0,g._)(f||(f=m([""," > ",""])),e,n),(function(){return r.assign(T,!1).break()})),1===t?r.assign(T,!0):r.if((0,g._)(h||(h=m([""," >= ",""])),e,t),(function(){return r.assign(T,!0)})))}(i)}))}))}function x(t,n){r.forRange("i",0,E,(function(r){e.subschema({keyword:"contains",dataProp:r,dataPropType:_.Type.Num,compositeRule:!0},t),n()}))}}};t.default=v},71151:function(e,t,n){"use strict";var r,i,a,o=n(68532).default,s=n(40131).default,l=n(79769).default;Object.defineProperty(t,"__esModule",{value:!0}),t.validateSchemaDeps=t.validatePropertyDeps=t.error=void 0;var c=n(63101),u=n(37349),d=n(33103);t.error={message:function(e){var t=e.params,n=t.property,i=t.depsCount,a=t.deps,o=1===i?"property":"properties";return(0,c.str)(r||(r=l(["must have "," "," when property "," is present"])),o,a,n)},params:function(e){var t=e.params,n=t.property,r=t.depsCount,a=t.deps,o=t.missingProperty;return(0,c._)(i||(i=l(["{property: ",",\n missingProperty: ",",\n depsCount: ",",\n deps: ","}"])),n,o,r,a)}};var p={keyword:"dependencies",type:"object",schemaType:"object",error:t.error,code:function(e){var t=function(e){var t=e.schema,n={},r={};for(var i in t){if("__proto__"!==i)(Array.isArray(t[i])?n:r)[i]=t[i]}return[n,r]}(e),n=s(t,2),r=n[0],i=n[1];f(e,r),h(e,i)}};function f(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e.schema,n=e.gen,r=e.data,i=e.it;if(0!==Object.keys(t).length){var s=n.let("missing"),u=function(u){var p=t[u];if(0===p.length)return"continue";var f=(0,d.propertyInData)(n,r,u,i.opts.ownProperties);e.setParams({property:u,depsCount:p.length,deps:p.join(", ")}),i.allErrors?n.if(f,(function(){var t,n=o(p);try{for(n.s();!(t=n.n()).done;){var r=t.value;(0,d.checkReportMissingProp)(e,r)}}catch(i){n.e(i)}finally{n.f()}})):(n.if((0,c._)(a||(a=l([""," && (",")"])),f,(0,d.checkMissingProp)(e,p,s))),(0,d.reportMissingProp)(e,s),n.else())};for(var p in t)u(p)}}function h(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e.schema,n=e.gen,r=e.data,i=e.keyword,a=e.it,o=n.name("valid"),s=function(s){if((0,u.alwaysValidSchema)(a,t[s]))return"continue";n.if((0,d.propertyInData)(n,r,s,a.opts.ownProperties),(function(){var t=e.subschema({keyword:i,schemaProp:s},o);e.mergeValidEvaluated(t,o)}),(function(){return n.var(o,!0)})),e.ok(o)};for(var l in t)s(l)}t.validatePropertyDeps=f,t.validateSchemaDeps=h,t.default=p},38696:function(e,t,n){"use strict";var r,i,a,o=n(79769).default;Object.defineProperty(t,"__esModule",{value:!0});var s=n(63101),l=n(37349),c={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:{message:function(e){var t=e.params;return(0,s.str)(r||(r=o(['must match "','" schema'])),t.ifClause)},params:function(e){var t=e.params;return(0,s._)(i||(i=o(["{failingKeyword: ","}"])),t.ifClause)}},code:function(e){var t=e.gen,n=e.parentSchema,r=e.it;void 0===n.then&&void 0===n.else&&(0,l.checkStrictMode)(r,'"if" without "then" and "else" is ignored');var i=u(r,"then"),c=u(r,"else");if(i||c){var d=t.let("valid",!0),p=t.name("_valid");if(function(){var t=e.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},p);e.mergeEvaluated(t)}(),e.reset(),i&&c){var f=t.let("ifClause");e.setParams({ifClause:f}),t.if(p,h("then",f),h("else",f))}else i?t.if(p,h("then")):t.if((0,s.not)(p),h("else"));e.pass(d,(function(){return e.error(!0)}))}function h(n,r){return function(){var i=e.subschema({keyword:n},p);t.assign(d,p),e.mergeValidEvaluated(i,d),r?t.assign(r,(0,s._)(a||(a=o(["",""])),n)):e.setParams({ifClause:n})}}}};function u(e,t){var n=e.schema[t];return void 0!==n&&!(0,l.alwaysValidSchema)(e,n)}t.default=c},52273:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(66183),i=n(44257),a=n(51506),o=n(89028),s=n(31856),l=n(71151),c=n(97913),u=n(81858),d=n(30539),p=n(25557),f=n(56431),h=n(82395),m=n(56626),g=n(31253),_=n(38696),v=n(42241);t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=[f.default,h.default,m.default,g.default,_.default,v.default,c.default,u.default,l.default,d.default,p.default];return e?t.push(i.default,o.default):t.push(r.default,a.default),t.push(s.default),t}},51506:function(e,t,n){"use strict";var r,i,a=n(79769).default;Object.defineProperty(t,"__esModule",{value:!0}),t.validateTuple=void 0;var o=n(63101),s=n(37349),l=n(33103),c={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code:function(e){var t=e.schema,n=e.it;if(Array.isArray(t))return u(e,"additionalItems",t);n.items=!0,(0,s.alwaysValidSchema)(n,t)||e.ok((0,l.validateArray)(e))}};function u(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.schema,l=e.gen,c=e.parentSchema,u=e.data,d=e.keyword,p=e.it;m(c),p.opts.unevaluated&&n.length&&!0!==p.items&&(p.items=s.mergeEvaluated.items(l,n.length,p.items));var f=l.name("valid"),h=l.const("len",(0,o._)(r||(r=a(["",".length"])),u));function m(e){var r=p.opts,i=p.errSchemaPath,a=n.length,o=a===e.minItems&&(a===e.maxItems||!1===e[t]);if(r.strictTuples&&!o){var l='"'.concat(d,'" is ').concat(a,"-tuple, but minItems or maxItems/").concat(t,' are not specified or different at path "').concat(i,'"');(0,s.checkStrictMode)(p,l,r.strictTuples)}}n.forEach((function(t,n){(0,s.alwaysValidSchema)(p,t)||(l.if((0,o._)(i||(i=a([""," > ",""])),h,n),(function(){return e.subschema({keyword:d,schemaProp:n,dataProp:n},f)})),e.ok(f))}))}t.validateTuple=u,t.default=c},89028:function(e,t,n){"use strict";var r,i,a=n(79769).default;Object.defineProperty(t,"__esModule",{value:!0});var o=n(63101),s=n(37349),l=n(33103),c=n(66183),u={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:{message:function(e){var t=e.params.len;return(0,o.str)(r||(r=a(["must NOT have more than "," items"])),t)},params:function(e){var t=e.params.len;return(0,o._)(i||(i=a(["{limit: ","}"])),t)}},code:function(e){var t=e.schema,n=e.parentSchema,r=e.it,i=n.prefixItems;r.items=!0,(0,s.alwaysValidSchema)(r,t)||(i?(0,c.validateAdditionalItems)(e,i):e.ok((0,l.validateArray)(e)))}};t.default=u},56431:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(37349),i={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code:function(e){var t=e.gen,n=e.schema,i=e.it;if((0,r.alwaysValidSchema)(i,n))e.fail();else{var a=t.name("valid");e.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},a),e.failResult(a,(function(){return e.reset()}),(function(){return e.error()}))}},error:{message:"must NOT be valid"}};t.default=i},56626:function(e,t,n){"use strict";var r,i,a,o=n(79769).default;Object.defineProperty(t,"__esModule",{value:!0});var s=n(63101),l=n(37349),c={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:{message:"must match exactly one schema in oneOf",params:function(e){var t=e.params;return(0,s._)(r||(r=o(["{passingSchemas: ","}"])),t.passing)}},code:function(e){var t=e.gen,n=e.schema,r=e.parentSchema,c=e.it;if(!Array.isArray(n))throw new Error("ajv implementation error");if(!c.opts.discriminator||!r.discriminator){var u=n,d=t.let("valid",!1),p=t.let("passing",null),f=t.name("_valid");e.setParams({passing:p}),t.block((function(){u.forEach((function(n,r){var u;(0,l.alwaysValidSchema)(c,n)?t.var(f,!0):u=e.subschema({keyword:"oneOf",schemaProp:r,compositeRule:!0},f),r>0&&t.if((0,s._)(i||(i=o([""," && ",""])),f,d)).assign(d,!1).assign(p,(0,s._)(a||(a=o(["[",", ","]"])),p,r)).else(),t.if(f,(function(){t.assign(d,!0),t.assign(p,r),u&&e.mergeEvaluated(u,s.Name)}))}))})),e.result(d,(function(){return e.reset()}),(function(){return e.error(!0)}))}}};t.default=c},25557:function(e,t,n){"use strict";var r,i,a=n(79769).default,o=n(68532).default;Object.defineProperty(t,"__esModule",{value:!0});var s=n(33103),l=n(63101),c=n(37349),u=n(37349),d={keyword:"patternProperties",type:"object",schemaType:"object",code:function(e){var t=e.gen,n=e.schema,d=e.data,p=e.parentSchema,f=e.it,h=f.opts,m=(0,s.allSchemaProperties)(n),g=m.filter((function(e){return(0,c.alwaysValidSchema)(f,n[e])}));if(0!==m.length&&(g.length!==m.length||f.opts.unevaluated&&!0!==f.props)){var _=h.strictSchema&&!h.allowMatchingProperties&&p.properties,v=t.name("valid");!0===f.props||f.props instanceof l.Name||(f.props=(0,u.evaluatedPropsToName)(t,f.props));var y=f.props;!function(){var e,n=o(m);try{for(n.s();!(e=n.n()).done;){var r=e.value;_&&b(r),f.allErrors?E(r):(t.var(v,!0),E(r),t.if(v))}}catch(i){n.e(i)}finally{n.f()}}()}function b(e){for(var t in _)new RegExp(e).test(t)&&(0,c.checkStrictMode)(f,"property ".concat(t," matches pattern ").concat(e," (use allowMatchingProperties)"))}function E(n){t.forIn("key",d,(function(o){t.if((0,l._)(r||(r=a(["",".test(",")"])),(0,s.usePattern)(e,n),o),(function(){var r=g.includes(n);r||e.subschema({keyword:"patternProperties",schemaProp:n,dataProp:o,dataPropType:u.Type.Str},v),f.opts.unevaluated&&!0!==y?t.assign((0,l._)(i||(i=a(["","[","]"])),y,o),!0):r||f.allErrors||t.if((0,l.not)(v),(function(){return t.break()}))}))}))}}};t.default=d},44257:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(51506),i={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:function(e){return(0,r.validateTuple)(e,"items")}};t.default=i},30539:function(e,t,n){"use strict";var r=n(68532).default;Object.defineProperty(t,"__esModule",{value:!0});var i=n(67687),a=n(33103),o=n(37349),s=n(81858),l={keyword:"properties",type:"object",schemaType:"object",code:function(e){var t=e.gen,n=e.schema,l=e.parentSchema,c=e.data,u=e.it;"all"===u.opts.removeAdditional&&void 0===l.additionalProperties&&s.default.code(new i.KeywordCxt(u,s.default,"additionalProperties"));var d,p=(0,a.allSchemaProperties)(n),f=r(p);try{for(f.s();!(d=f.n()).done;){var h=d.value;u.definedProperties.add(h)}}catch(S){f.e(S)}finally{f.f()}u.opts.unevaluated&&p.length&&!0!==u.props&&(u.props=o.mergeEvaluated.props(t,(0,o.toHash)(p),u.props));var m=p.filter((function(e){return!(0,o.alwaysValidSchema)(u,n[e])}));if(0!==m.length){var g,_=t.name("valid"),v=r(m);try{for(v.s();!(g=v.n()).done;){var y=g.value;b(y)?E(y):(t.if((0,a.propertyInData)(t,c,y,u.opts.ownProperties)),E(y),u.allErrors||t.else().var(_,!0),t.endIf()),e.it.definedProperties.add(y),e.ok(_)}}catch(S){v.e(S)}finally{v.f()}}function b(e){return u.opts.useDefaults&&!u.compositeRule&&void 0!==n[e].default}function E(t){e.subschema({keyword:"properties",schemaProp:t,dataProp:t},_)}}};t.default=l},97913:function(e,t,n){"use strict";var r,i=n(79769).default;Object.defineProperty(t,"__esModule",{value:!0});var a=n(63101),o=n(37349),s={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:{message:"property name must be valid",params:function(e){var t=e.params;return(0,a._)(r||(r=i(["{propertyName: ","}"])),t.propertyName)}},code:function(e){var t=e.gen,n=e.schema,r=e.data,i=e.it;if(!(0,o.alwaysValidSchema)(i,n)){var s=t.name("valid");t.forIn("key",r,(function(n){e.setParams({propertyName:n}),e.subschema({keyword:"propertyNames",data:n,dataTypes:["string"],propertyName:n,compositeRule:!0},s),t.if((0,a.not)(s),(function(){e.error(!0),i.allErrors||t.break()}))})),e.ok(s)}}};t.default=s},42241:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(37349),i={keyword:["then","else"],schemaType:["object","boolean"],code:function(e){var t=e.keyword,n=e.parentSchema,i=e.it;void 0===n.if&&(0,r.checkStrictMode)(i,'"'.concat(t,'" without "if" is ignored'))}};t.default=i},33103:function(e,t,n){"use strict";var r,i,a,o,s,l,c,u,d,p,f,h,m,g,_,v=n(9833).default,y=n(79769).default;Object.defineProperty(t,"__esModule",{value:!0}),t.validateUnion=t.validateArray=t.usePattern=t.callValidateCode=t.schemaProperties=t.allSchemaProperties=t.noPropertyInData=t.propertyInData=t.isOwnProperty=t.hasPropFunc=t.reportMissingProp=t.checkMissingProp=t.checkReportMissingProp=void 0;var b=n(63101),E=n(37349),S=n(93122),T=n(37349);function C(e){return e.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:(0,b._)(a||(a=y(["Object.prototype.hasOwnProperty"])))})}function x(e,t,n){return(0,b._)(o||(o=y(["",".call(",", ",")"])),C(e),t,n)}function w(e,t,n,r){var i=(0,b._)(c||(c=y(["",""," === undefined"])),t,(0,b.getProperty)(n));return r?(0,b.or)(i,(0,b.not)(x(e,t,n))):i}function O(e){return e?Object.keys(e).filter((function(e){return"__proto__"!==e})):[]}t.checkReportMissingProp=function(e,t){var n=e.gen,i=e.data,a=e.it;n.if(w(n,i,t,a.opts.ownProperties),(function(){e.setParams({missingProperty:(0,b._)(r||(r=y(["",""])),t)},!0),e.error()}))},t.checkMissingProp=function(e,t,n){var r=e.gen,a=e.data,o=e.it.opts;return b.or.apply(void 0,v(t.map((function(e){return(0,b.and)(w(r,a,e,o.ownProperties),(0,b._)(i||(i=y([""," = ",""])),n,e))}))))},t.reportMissingProp=function(e,t){e.setParams({missingProperty:t},!0),e.error()},t.hasPropFunc=C,t.isOwnProperty=x,t.propertyInData=function(e,t,n,r){var i=(0,b._)(s||(s=y(["",""," !== undefined"])),t,(0,b.getProperty)(n));return r?(0,b._)(l||(l=y([""," && ",""])),i,x(e,t,n)):i},t.noPropertyInData=w,t.allSchemaProperties=O,t.schemaProperties=function(e,t){return O(t).filter((function(n){return!(0,E.alwaysValidSchema)(e,t[n])}))},t.callValidateCode=function(e,t,n,r){var i=e.schemaCode,a=e.data,o=e.it,s=o.gen,l=o.topSchemaRef,c=o.schemaPath,h=o.errorPath,m=e.it,g=r?(0,b._)(u||(u=y(["",", ",", ","",""])),i,a,l,c):a,_=[[S.default.instancePath,(0,b.strConcat)(S.default.instancePath,h)],[S.default.parentData,m.parentData],[S.default.parentDataProperty,m.parentDataProperty],[S.default.rootData,S.default.rootData]];m.opts.dynamicRef&&_.push([S.default.dynamicAnchors,S.default.dynamicAnchors]);var v=(0,b._)(d||(d=y(["",", ",""])),g,s.object.apply(s,_));return n!==b.nil?(0,b._)(p||(p=y(["",".call(",", ",")"])),t,n,v):(0,b._)(f||(f=y(["","(",")"])),t,v)};var N=(0,b._)(h||(h=y(["new RegExp"])));t.usePattern=function(e,t){var n=e.gen,r=e.it.opts,i=r.unicodeRegExp?"u":"",a=r.code.regExp,o=a(t,i);return n.scopeValue("pattern",{key:o.toString(),ref:o,code:(0,b._)(m||(m=y(["","(",", ",")"])),"new RegExp"===a.code?N:(0,T.useFunc)(n,a),t,i)})},t.validateArray=function(e){var t=e.gen,n=e.data,r=e.keyword,i=e.it,a=t.name("valid");if(i.allErrors){var o=t.let("valid",!0);return s((function(){return t.assign(o,!1)})),o}return t.var(a,!0),s((function(){return t.break()})),a;function s(i){var o=t.const("len",(0,b._)(g||(g=y(["",".length"])),n));t.forRange("i",0,o,(function(n){e.subschema({keyword:r,dataProp:n,dataPropType:E.Type.Num},a),t.if((0,b.not)(a),i)}))}},t.validateUnion=function(e){var t=e.gen,n=e.schema,r=e.keyword,i=e.it;if(!Array.isArray(n))throw new Error("ajv implementation error");if(!n.some((function(e){return(0,E.alwaysValidSchema)(i,e)}))||i.opts.unevaluated){var a=t.let("valid",!1),o=t.name("_valid");t.block((function(){return n.forEach((function(n,i){var s=e.subschema({keyword:r,schemaProp:i,compositeRule:!0},o);t.assign(a,(0,b._)(_||(_=y([""," || ",""])),a,o)),e.mergeValidEvaluated(s,o)||t.if((0,b.not)(a))}))})),e.result(a,(function(){return e.reset()}),(function(){return e.error(!0)}))}}},851:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={keyword:"id",code:function(){throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};t.default=n},89551:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(851),i=n(5670),a=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",r.default,i.default];t.default=a},5670:function(e,t,n){"use strict";var r,i,a,o,s,l,c,u,d,p=n(79769).default;Object.defineProperty(t,"__esModule",{value:!0}),t.callRef=t.getValidate=void 0;var f=n(32041),h=n(33103),m=n(63101),g=n(93122),_=n(60733),v=n(37349),y={keyword:"$ref",schemaType:"string",code:function(e){var t=e.gen,n=e.schema,i=e.it,a=i.baseId,o=i.schemaEnv,s=i.validateName,l=i.opts,c=i.self,u=o.root;if(("#"===n||"#/"===n)&&a===u.baseId)return function(){if(o===u)return E(e,s,o,o.$async);var n=t.scopeValue("root",{ref:u});return E(e,(0,m._)(r||(r=p(["",".validate"])),n),u,u.$async)}();var d=_.resolveRef.call(c,u,a,n);if(void 0===d)throw new f.default(i.opts.uriResolver,a,n);return d instanceof _.SchemaEnv?function(t){var n=b(e,t);E(e,n,t,t.$async)}(d):function(r){var i=t.scopeValue("schema",!0===l.code.source?{ref:r,code:(0,m.stringify)(r)}:{ref:r}),a=t.name("valid"),o=e.subschema({schema:r,dataTypes:[],schemaPath:m.nil,topSchemaRef:i,errSchemaPath:n},a);e.mergeEvaluated(o),e.ok(a)}(d)}};function b(e,t){var n=e.gen;return t.validate?n.scopeValue("validate",{ref:t.validate}):(0,m._)(i||(i=p(["",".validate"])),n.scopeValue("wrapper",{ref:t}))}function E(e,t,n,r){var i=e.gen,f=e.it,_=f.allErrors,y=f.schemaEnv,b=f.opts.passContext?g.default.this:m.nil;function E(e){var t=(0,m._)(s||(s=p(["",".errors"])),e);i.assign(g.default.vErrors,(0,m._)(l||(l=p([""," === null ? "," : ",".concat(",")"])),g.default.vErrors,t,g.default.vErrors,t)),i.assign(g.default.errors,(0,m._)(c||(c=p(["",".length"])),g.default.vErrors))}function S(e){var t;if(f.opts.unevaluated){var r=null===(t=null===n||void 0===n?void 0:n.validate)||void 0===t?void 0:t.evaluated;if(!0!==f.props)if(r&&!r.dynamicProps)void 0!==r.props&&(f.props=v.mergeEvaluated.props(i,r.props,f.props));else{var a=i.var("props",(0,m._)(u||(u=p(["",".evaluated.props"])),e));f.props=v.mergeEvaluated.props(i,a,f.props,m.Name)}if(!0!==f.items)if(r&&!r.dynamicItems)void 0!==r.items&&(f.items=v.mergeEvaluated.items(i,r.items,f.items));else{var o=i.var("items",(0,m._)(d||(d=p(["",".evaluated.items"])),e));f.items=v.mergeEvaluated.items(i,o,f.items,m.Name)}}}r?function(){if(!y.$async)throw new Error("async schema referenced by sync schema");var n=i.let("valid");i.try((function(){i.code((0,m._)(a||(a=p(["await ",""])),(0,h.callValidateCode)(e,t,b))),S(t),_||i.assign(n,!0)}),(function(e){i.if((0,m._)(o||(o=p(["!("," instanceof ",")"])),e,f.ValidationError),(function(){return i.throw(e)})),E(e),_||i.assign(n,!1)})),e.ok(n)}():e.result((0,h.callValidateCode)(e,t,b),(function(){return S(t)}),(function(){return E(t)}))}t.getValidate=b,t.callRef=E,t.default=y},49472:function(e,t,n){"use strict";var r,i,a,o,s=n(68532).default,l=n(7501).default,c=n(79769).default;Object.defineProperty(t,"__esModule",{value:!0});var u=n(63101),d=n(20820),p=n(60733),f=n(37349),h={keyword:"discriminator",type:"object",schemaType:"object",error:{message:function(e){var t=e.params,n=t.discrError,r=t.tagName;return n===d.DiscrError.Tag?'tag "'.concat(r,'" must be string'):'value of tag "'.concat(r,'" must be in oneOf')},params:function(e){var t=e.params,n=t.discrError,i=t.tag,a=t.tagName;return(0,u._)(r||(r=c(["{error: ",", tag: ",", tagValue: ","}"])),n,a,i)}},code:function(e){var t=e.gen,n=e.data,r=e.schema,h=e.parentSchema,m=e.it,g=h.oneOf;if(!m.opts.discriminator)throw new Error("discriminator: requires discriminator option");var _=r.propertyName;if("string"!=typeof _)throw new Error("discriminator: requires propertyName");if(r.mapping)throw new Error("discriminator: mapping is not supported");if(!g)throw new Error("discriminator: requires oneOf keyword");var v=t.let("valid",!1),y=t.const("tag",(0,u._)(i||(i=c(["","",""])),n,(0,u.getProperty)(_)));function b(n){var r=t.name("valid"),i=e.subschema({keyword:"oneOf",schemaProp:n},r);return e.mergeEvaluated(i,u.Name),r}t.if((0,u._)(a||(a=c(["typeof ",' == "string"'])),y),(function(){return function(){var n=function(){for(var e,t={},n=c(h),r=!0,i=0;i=m.opts.loopEnum,y=function(){return null!==g&&void 0!==g?g:g=(0,d.useFunc)(t,p.default)};if(v||r)_=t.let("valid"),e.block$data(_,(function(){t.assign(_,!1),t.forOf("v",h,(function(e){return t.if((0,u._)(i||(i=c(["","(",", ",")"])),y(),n,e),(function(){return t.assign(_,!0).break()}))}))}));else{if(!Array.isArray(f))throw new Error("ajv implementation error");var b=t.const("vSchema",h);_=u.or.apply(void 0,l(f.map((function(e,t){return function(e,t){var r=f[t];return"object"===s(r)&&null!==r?(0,u._)(a||(a=c(["","(",", ","[","])"])),y(),n,e,t):(0,u._)(o||(o=c([""," === ",""])),n,r)}(b,t)}))))}e.pass(_)}};t.default=f},40702:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(84691),i=n(73859),a=n(32372),o=n(14479),s=n(97932),l=n(82594),c=n(86877),u=n(25812),d=n(76977),p=n(24999),f=[r.default,i.default,a.default,o.default,s.default,l.default,c.default,u.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},d.default,p.default];t.default=f},86877:function(e,t,n){"use strict";var r,i,a,o=n(79769).default;Object.defineProperty(t,"__esModule",{value:!0});var s=n(63101),l={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:{message:function(e){var t=e.keyword,n=e.schemaCode,i="maxItems"===t?"more":"fewer";return(0,s.str)(r||(r=o(["must NOT have "," than "," items"])),i,n)},params:function(e){var t=e.schemaCode;return(0,s._)(i||(i=o(["{limit: ","}"])),t)}},code:function(e){var t=e.keyword,n=e.data,r=e.schemaCode,i="maxItems"===t?s.operators.GT:s.operators.LT;e.fail$data((0,s._)(a||(a=o(["",".length "," ",""])),n,i,r))}};t.default=l},32372:function(e,t,n){"use strict";var r,i,a,o,s,l=n(79769).default;Object.defineProperty(t,"__esModule",{value:!0});var c=n(63101),u=n(37349),d=n(67325),p={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:{message:function(e){var t=e.keyword,n=e.schemaCode,i="maxLength"===t?"more":"fewer";return(0,c.str)(r||(r=l(["must NOT have "," than "," characters"])),i,n)},params:function(e){var t=e.schemaCode;return(0,c._)(i||(i=l(["{limit: ","}"])),t)}},code:function(e){var t=e.keyword,n=e.data,r=e.schemaCode,i=e.it,p="maxLength"===t?c.operators.GT:c.operators.LT,f=!1===i.opts.unicode?(0,c._)(a||(a=l(["",".length"])),n):(0,c._)(o||(o=l(["","(",")"])),(0,u.useFunc)(e.gen,d.default),n);e.fail$data((0,c._)(s||(s=l([""," "," ",""])),f,p,r))}};t.default=p},84691:function(e,t,n){"use strict";var r,i,a,o=n(79769).default;Object.defineProperty(t,"__esModule",{value:!0});var s=n(63101),l=s.operators,c={maximum:{okStr:"<=",ok:l.LTE,fail:l.GT},minimum:{okStr:">=",ok:l.GTE,fail:l.LT},exclusiveMaximum:{okStr:"<",ok:l.LT,fail:l.GTE},exclusiveMinimum:{okStr:">",ok:l.GT,fail:l.LTE}},u={message:function(e){var t=e.keyword,n=e.schemaCode;return(0,s.str)(r||(r=o(["must be "," ",""])),c[t].okStr,n)},params:function(e){var t=e.keyword,n=e.schemaCode;return(0,s._)(i||(i=o(["{comparison: ",", limit: ","}"])),c[t].okStr,n)}},d={keyword:Object.keys(c),type:"number",schemaType:"number",$data:!0,error:u,code:function(e){var t=e.keyword,n=e.data,r=e.schemaCode;e.fail$data((0,s._)(a||(a=o([""," "," "," || isNaN(",")"])),n,c[t].fail,r,n))}};t.default=d},97932:function(e,t,n){"use strict";var r,i,a,o=n(79769).default;Object.defineProperty(t,"__esModule",{value:!0});var s=n(63101),l={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:{message:function(e){var t=e.keyword,n=e.schemaCode,i="maxProperties"===t?"more":"fewer";return(0,s.str)(r||(r=o(["must NOT have "," than "," properties"])),i,n)},params:function(e){var t=e.schemaCode;return(0,s._)(i||(i=o(["{limit: ","}"])),t)}},code:function(e){var t=e.keyword,n=e.data,r=e.schemaCode,i="maxProperties"===t?s.operators.GT:s.operators.LT;e.fail$data((0,s._)(a||(a=o(["Object.keys(",").length "," ",""])),n,i,r))}};t.default=l},73859:function(e,t,n){"use strict";var r,i,a,o,s,l=n(79769).default;Object.defineProperty(t,"__esModule",{value:!0});var c=n(63101),u={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:{message:function(e){var t=e.schemaCode;return(0,c.str)(r||(r=l(["must be multiple of ",""])),t)},params:function(e){var t=e.schemaCode;return(0,c._)(i||(i=l(["{multipleOf: ","}"])),t)}},code:function(e){var t=e.gen,n=e.data,r=e.schemaCode,i=e.it.opts.multipleOfPrecision,u=t.let("res"),d=i?(0,c._)(a||(a=l(["Math.abs(Math.round(",") - ",") > 1e-",""])),u,u,i):(0,c._)(o||(o=l([""," !== parseInt(",")"])),u,u);e.fail$data((0,c._)(s||(s=l(["("," === 0 || ("," = ","/",", ","))"])),r,u,n,r,d))}};t.default=u},14479:function(e,t,n){"use strict";var r,i,a,o,s=n(79769).default;Object.defineProperty(t,"__esModule",{value:!0});var l=n(33103),c=n(63101),u={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:{message:function(e){var t=e.schemaCode;return(0,c.str)(r||(r=s(['must match pattern "','"'])),t)},params:function(e){var t=e.schemaCode;return(0,c._)(i||(i=s(["{pattern: ","}"])),t)}},code:function(e){var t=e.data,n=e.$data,r=e.schema,i=e.schemaCode,u=e.it.opts.unicodeRegExp?"u":"",d=n?(0,c._)(a||(a=s(["(new RegExp(",", ","))"])),i,u):(0,l.usePattern)(e,r);e.fail$data((0,c._)(o||(o=s(["!",".test(",")"])),d,t))}};t.default=u},82594:function(e,t,n){"use strict";var r,i,a=n(68532).default,o=n(79769).default;Object.defineProperty(t,"__esModule",{value:!0});var s=n(33103),l=n(63101),c=n(37349),u={keyword:"required",type:"object",schemaType:"array",$data:!0,error:{message:function(e){var t=e.params.missingProperty;return(0,l.str)(r||(r=o(["must have required property '","'"])),t)},params:function(e){var t=e.params.missingProperty;return(0,l._)(i||(i=o(["{missingProperty: ","}"])),t)}},code:function(e){var t=e.gen,n=e.schema,r=e.schemaCode,i=e.data,o=e.$data,u=e.it,d=u.opts;if(o||0!==n.length){var p=n.length>=d.loopRequired;if(u.allErrors?function(){if(p||o)e.block$data(l.nil,b);else{var t,r=a(n);try{for(r.s();!(t=r.n()).done;){var i=t.value;(0,s.checkReportMissingProp)(e,i)}}catch(c){r.e(c)}finally{r.f()}}}():function(){var a=t.let("missing");if(p||o){var c=t.let("valid",!0);e.block$data(c,(function(){return function(n,a){e.setParams({missingProperty:n}),t.forOf(n,r,(function(){t.assign(a,(0,s.propertyInData)(t,i,n,d.ownProperties)),t.if((0,l.not)(a),(function(){e.error(),t.break()}))}),l.nil)}(a,c)})),e.ok(c)}else t.if((0,s.checkMissingProp)(e,n,a)),(0,s.reportMissingProp)(e,a),t.else()}(),d.strictRequired){var f,h=e.parentSchema.properties,m=e.it.definedProperties,g=a(n);try{for(g.s();!(f=g.n()).done;){var _=f.value;if(void 0===(null===h||void 0===h?void 0:h[_])&&!m.has(_)){var v=u.schemaEnv.baseId+u.errSchemaPath,y='required property "'.concat(_,'" is not defined at "').concat(v,'" (strictRequired)');(0,c.checkStrictMode)(u,y,u.opts.strictRequired)}}}catch(E){g.e(E)}finally{g.f()}}}function b(){t.forOf("prop",r,(function(n){e.setParams({missingProperty:n}),t.if((0,s.noPropertyInData)(t,i,n,d.ownProperties),(function(){return e.error()}))}))}}};t.default=u},25812:function(e,t,n){"use strict";var r,i,a,o,s,l,c,u,d,p,f,h,m,g,_,v,y,b=n(79769).default;Object.defineProperty(t,"__esModule",{value:!0});var E=n(98539),S=n(63101),T=n(37349),C=n(73275),x={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:{message:function(e){var t=e.params,n=t.i,i=t.j;return(0,S.str)(r||(r=b(["must NOT have duplicate items (items ## "," and "," are identical)"])),i,n)},params:function(e){var t=e.params,n=t.i,r=t.j;return(0,S._)(i||(i=b(["{i: ",", j: ","}"])),n,r)}},code:function(e){var t=e.gen,n=e.data,r=e.$data,i=e.schema,x=e.parentSchema,w=e.schemaCode,O=e.it;if(r||i){var N=t.let("valid"),R=x.items?(0,E.getSchemaTypes)(x.items):[];e.block$data(N,(function(){var r=t.let("i",(0,S._)(o||(o=b(["",".length"])),n)),i=t.let("j");e.setParams({i:r,j:i}),t.assign(N,!0),t.if((0,S._)(s||(s=b([""," > 1"])),r),(function(){return(R.length>0&&!R.some((function(e){return"object"===e||"array"===e}))?I:A)(r,i)}))}),(0,S._)(a||(a=b([""," === false"])),w)),e.ok(N)}function I(r,i){var a=t.name("item"),o=(0,E.checkDataTypes)(R,a,O.opts.strictNumbers,E.DataType.Wrong),s=t.const("indices",(0,S._)(l||(l=b(["{}"]))));t.for((0,S._)(c||(c=b([";","--;"])),r),(function(){t.let(a,(0,S._)(u||(u=b(["","[","]"])),n,r)),t.if(o,(0,S._)(d||(d=b(["continue"])))),R.length>1&&t.if((0,S._)(p||(p=b(["typeof ",' == "string"'])),a),(0,S._)(f||(f=b(["",' += "_"'])),a)),t.if((0,S._)(h||(h=b(["typeof ","[",'] == "number"'])),s,a),(function(){t.assign(i,(0,S._)(m||(m=b(["","[","]"])),s,a)),e.error(),t.assign(N,!1).break()})).code((0,S._)(g||(g=b(["","[","] = ",""])),s,a,r))}))}function A(r,i){var a=(0,T.useFunc)(t,C.default),o=t.name("outer");t.label(o).for((0,S._)(_||(_=b([";","--;"])),r),(function(){return t.for((0,S._)(v||(v=b([""," = ","; ","--;"])),i,r,i),(function(){return t.if((0,S._)(y||(y=b(["","(","[","], ","[","])"])),a,n,r,n,i),(function(){e.error(),t.assign(N,!1).break(o)}))}))}))}}};t.default=x},84219:function(e,t,n){"use strict";var r=n(90670);function i(){var e={},t=0,n=0,r=0;return{add:function(i,a){a||(a=i,i=0),i>n?n=i:i-1?i(n):n}},20654:function(e,t,n){"use strict";var r=n(47287),i=n(51815),a=i("%Function.prototype.apply%"),o=i("%Function.prototype.call%"),s=i("%Reflect.apply%",!0)||r.call(o,a),l=i("%Object.getOwnPropertyDescriptor%",!0),c=i("%Object.defineProperty%",!0),u=i("%Math.max%");if(c)try{c({},"a",{value:1})}catch(p){c=null}e.exports=function(e){var t=s(r,o,arguments);if(l&&c){var n=l(t,"length");n.configurable&&c(t,"length",{value:1+u(0,e.length-(arguments.length-1))})}return t};var d=function(){return s(r,a,arguments)};c?c(e.exports,"apply",{value:d}):e.exports.apply=d},71894:function(e,t,n){"use strict";var r,i=n(7501).default;!function(){var a={}.hasOwnProperty;function o(){for(var e=[],t=0;t1?a.bindSequence(e,s,t,n):(o=a.getKeyInfo(e,n),a.callbacks[o.key]=a.callbacks[o.key]||[],a.getMatches(o.key,o.modifiers,{type:o.action},r,e,i),a.callbacks[o.key][r?"unshift":"push"]({callback:t,modifiers:o.modifiers,action:o.action,seq:r,level:i,combo:e}))}},23363:function(e,t,n){"use strict";var r=n(85827).off;e.exports=function(){var e=this,t=e.element;r(t,"keypress",e.eventHandler),r(t,"keydown",e.eventHandler),r(t,"keyup",e.eventHandler)}},85827:function(e){"use strict";function t(e,t,n,r){return!e.addEventListener&&(t="on"+t),(e.addEventListener||e.attachEvent).call(e,t,n,r),n}e.exports=t,e.exports.on=t,e.exports.off=function(e,t,n,r){return!e.removeEventListener&&(t="on"+t),(e.removeEventListener||e.detachEvent).call(e,t,n,r),n}},25366:function(e,t,n){"use strict";e.exports=function(e,t,r,i){this.stopCallback(t,t.target||t.srcElement,r,i)||!1===e(t,r)&&(n(7422)(t),n(45314)(t))}},43475:function(e,t,n){"use strict";e.exports=function(e,t){var r,i,a,o,s,l,c=[];for(r=n(31304)(e),o=n(66995),s=n(52145),l=n(85644),a=0;a95&&r<112||e.hasOwnProperty(r)&&(t.REVERSE_MAP[e[r]]=r);return t.REVERSE_MAP}},75833:function(e,t,n){"use strict";e.exports=function(e,t,r){var i,a,o,s,l=this,c={},u=0,d=!1;for(i=l.getMatches(e,t,r),a=0;a-1)return!1;var n=t.tagName.toLowerCase();return"input"===n||"select"===n||"textarea"===n||t.isContentEditable}},89690:function(e){"use strict";e.exports=function(e,t){return this.directMap[e+":"+t]&&this.directMap[e+":"+t]({},e),this}},64626:function(e){"use strict";e.exports=function(e,t){return this.bind(e,(function(){}),t)}},94514:function(e){"use strict";e.exports=function(){this.instances.forEach((function(e){e.reset()}))}},42550:function(e,t,n){"use strict";e.exports=function(e){var t,r;if(t=n(55813),r=n(37972),"keypress"===e.type){var i=String.fromCharCode(e.which);return e.shiftKey||(i=i.toLowerCase()),i}return void 0!==t[e.which]?t[e.which]:void 0!==r[e.which]?r[e.which]:String.fromCharCode(e.which).toLowerCase()}},27759:function(e){"use strict";e.exports=function(e){var t=[];return e.shiftKey&&t.push("shift"),e.altKey&&t.push("alt"),e.ctrlKey&&t.push("ctrl"),e.metaKey&&t.push("meta"),t}},85644:function(e){"use strict";e.exports=function(e){return"shift"===e||"ctrl"===e||"alt"===e||"meta"===e}},31304:function(e){"use strict";e.exports=function(e){return"+"===e?["+"]:e.split("+")}},7422:function(e){"use strict";e.exports=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1}},52145:function(e){"use strict";e.exports={"~":"`","!":"1","@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=",":":";",'"':"'","<":",",">":".","?":"/","|":"\\"}},66995:function(e){"use strict";e.exports={option:"alt",command:"meta",return:"enter",escape:"esc",mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"meta":"ctrl"}},37972:function(e){"use strict";e.exports={106:"*",107:"plus",109:"minus",110:".",111:"/",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"}},55813:function(e){"use strict";e.exports={8:"backspace",9:"tab",13:"enter",16:"shift",17:"ctrl",18:"alt",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"ins",46:"del",91:"meta",93:"meta",173:"minus",187:"plus",189:"minus",224:"meta"};for(var t=1;t<20;++t)e.exports[111+t]="f"+t;for(t=0;t<=9;++t)e.exports[t+96]=t},45314:function(e){"use strict";e.exports=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}},45231:function(e,t,n){"use strict";var r,i,a;e=n.nmd(e);var o,s=n(7501).default;o=function(e){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===s(e)&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){var r=n(1),i=function(e){e&&e("layout","dagre",r)};"undefined"!==typeof cytoscape&&i(cytoscape),e.exports=i},function(e,t,n){function r(e){return r="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}var i=function(e){return"function"===typeof e},a=n(2),o=n(3),s=n(4);function l(e){this.options=o({},a,e)}l.prototype.run=function(){var e=this.options,t=e.cy,n=e.eles,a=function(e,t){return i(t)?t.apply(e,[e]):t},o=e.boundingBox||{x1:0,y1:0,w:t.width(),h:t.height()};void 0===o.x2&&(o.x2=o.x1+o.w),void 0===o.w&&(o.w=o.x2-o.x1),void 0===o.y2&&(o.y2=o.y1+o.h),void 0===o.h&&(o.h=o.y2-o.y1);var l=new s.graphlib.Graph({multigraph:!0,compound:!0}),c={},u=function(e,t){null!=t&&(c[e]=t)};u("nodesep",e.nodeSep),u("edgesep",e.edgeSep),u("ranksep",e.rankSep),u("rankdir",e.rankDir),u("align",e.align),u("ranker",e.ranker),u("acyclicer",e.acyclicer),l.setGraph(c),l.setDefaultEdgeLabel((function(){return{}})),l.setDefaultNodeLabel((function(){return{}}));var d=n.nodes();i(e.sort)&&(d=d.sort(e.sort));for(var p=0;p1?t-1:0),r=1;re.length)&&(t=e.length);for(var n=0,r=new Array(t);nt?1:0},J=null!=Object.assign?Object.assign.bind(Object):function(e){for(var t=arguments,n=1;n255)return;t.push(Math.floor(a))}var o=r[1]||r[2]||r[3],s=r[1]&&r[2]&&r[3];if(o&&!s)return;var l=n[4];if(void 0!==l){if((l=parseFloat(l))<0||l>1)return;t.push(l)}}return t}(e)||function(e){var t,n,r,i,a,o,s,l;function c(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var u=new RegExp("^"+K+"$").exec(e);if(u){if((n=parseInt(u[1]))<0?n=(360- -1*n%360)%360:n>360&&(n%=360),n/=360,(r=parseFloat(u[2]))<0||r>100)return;if(r/=100,(i=parseFloat(u[3]))<0||i>100)return;if(i/=100,void 0!==(a=u[4])&&((a=parseFloat(a))<0||a>1))return;if(0===r)o=s=l=Math.round(255*i);else{var d=i<.5?i*(1+r):i+r-i*r,p=2*i-d;o=Math.round(255*c(p,d,n+1/3)),s=Math.round(255*c(p,d,n)),l=Math.round(255*c(p,d,n-1/3))}t=[o,s,l,a]}return t}(e)},te={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},ne=function(e){for(var t=e.map,n=e.keys,r=n.length,i=0;i1&&void 0!==arguments[1]?arguments[1]:ce,r=n;!(t=e.next()).done;)r=r*ue+t.value|0;return r},fe=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ce;return t*ue+e|0},he=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:de;return(t<<5)+t+e|0},me=function(e){return 2097152*e[0]+e[1]},ge=function(e,t){return[fe(e[0],t[0]),he(e[1],t[1])]},_e=function(e,t){var n={value:0,done:!1},r=0,i=e.length;return pe({next:function(){return r=0&&(e[r]!==t||(e.splice(r,1),!n));r--);},Fe=function(e){e.splice(0,e.length)},Be=function(e,t,n){return n&&(t=Y(n,t)),e[t]},Ue=function(e,t,n,r){n&&(t=Y(n,t)),e[t]=r},Ge="undefined"!==typeof Map?Map:function(){function e(){g(this,e),this._obj={}}return v(e,[{key:"set",value:function(e,t){return this._obj[e]=t,this}},{key:"delete",value:function(e){return this._obj[e]=void 0,this}},{key:"clear",value:function(){this._obj={}}},{key:"has",value:function(e){return void 0!==this._obj[e]}},{key:"get",value:function(e){return this._obj[e]}}]),e}(),ze=function(){function e(t){if(g(this,e),this._obj=Object.create(null),this.size=0,null!=t){var n;n=null!=t.instanceString&&t.instanceString()===this.instanceString()?t.toArray():t;for(var r=0;r2&&void 0!==arguments[2])||arguments[2];if(void 0!==e&&void 0!==t&&B(e)){var r=t.group;if(null==r&&(r=t.data&&null!=t.data.source&&null!=t.data.target?"edges":"nodes"),"nodes"===r||"edges"===r){this.length=1,this[0]=this;var i=this._private={cy:e,single:!0,data:t.data||{},position:t.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:r,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!t.selected,selectable:void 0===t.selectable||!!t.selectable,locked:!!t.locked,grabbed:!1,grabbable:void 0===t.grabbable||!!t.grabbable,pannable:void 0===t.pannable?"edges"===r:!!t.pannable,active:!1,classes:new je,animation:{current:[],queue:[]},rscratch:{},scratch:t.scratch||{},edges:[],children:[],parent:t.parent&&t.parent.isNode()?t.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(null==i.position.x&&(i.position.x=0),null==i.position.y&&(i.position.y=0),t.renderedPosition){var a=t.renderedPosition,o=e.pan(),s=e.zoom();i.position={x:(a.x-o.x)/s,y:(a.y-o.y)/s}}var l=[];A(t.classes)?l=t.classes:R(t.classes)&&(l=t.classes.split(/\s+/));for(var c=0,u=l.length;c0;){var S=v.pop(),T=g(S),C=S.id();if(p[C]=T,T!==1/0)for(var x=S.neighborhood().intersect(h),w=0;w0)for(n.unshift(t);u[i];){var a=u[i];n.unshift(a.edge),n.unshift(a.node),i=(r=a.node).id()}return o.spawn(n)}}}},We={kruskal:function(e){e=e||function(e){return 1};for(var t=this.byGroup(),n=t.nodes,r=t.edges,i=n.length,a=new Array(i),o=n,s=function(e){for(var t=0;t0;){if(l=g.pop(),c=l.id(),_.delete(c),S++,c===p){for(var T=[],C=i,x=p,w=y[x];T.unshift(C),null!=w&&T.unshift(w),null!=(C=v[x]);)w=y[x=C.id()];return{found:!0,distance:f[c],path:this.spawn(T),steps:S}}m[c]=!0;for(var O=l._private.edges,N=0;Nw&&(f[x]=w,_[x]=C,v[x]=b),!i){var O=C*c+T;!i&&f[O]>w&&(f[O]=w,_[O]=T,v[O]=b)}}}for(var N=0;N1&&void 0!==arguments[1]?arguments[1]:a,r=v(e),i=[],o=r;;){if(null==o)return t.spawn();var l=_(o),c=l.edge,u=l.pred;if(i.unshift(o[0]),o.same(n)&&i.length>0)break;null!=c&&i.unshift(c),o=u}return s.spawn(i)},hasNegativeWeightCycle:h,negativeWeightCycles:m}}},tt=Math.sqrt(2),nt=function(e,t,n){0===n.length&&Ne("Karger-Stein must be run on a connected (sub)graph");for(var r=n[e],i=r[1],a=r[2],o=t[i],s=t[a],l=n,c=l.length-1;c>=0;c--){var u=l[c],d=u[1],p=u[2];(t[d]===o&&t[p]===s||t[d]===s&&t[p]===o)&&l.splice(c,1)}for(var f=0;fr;){var i=Math.floor(Math.random()*t.length);t=nt(i,e,t),n--}return t},it={kargerStein:function(){var e=this,t=this.byGroup(),n=t.nodes,r=t.edges;r.unmergeBy((function(e){return e.isLoop()}));var i=n.length,a=r.length,o=Math.ceil(Math.pow(Math.log(i)/Math.LN2,2)),s=Math.floor(i/tt);if(!(i<2)){for(var l=[],c=0;c0?1:e<0?-1:0},dt=function(e,t){return Math.sqrt(pt(e,t))},pt=function(e,t){var n=t.x-e.x,r=t.y-e.y;return n*n+r*r},ft=function(e){for(var t=e.length,n=0,r=0;r=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(null!=e.w&&null!=e.h&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},vt=function(e,t,n){e.x1=Math.min(e.x1,t),e.x2=Math.max(e.x2,t),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,n),e.y2=Math.max(e.y2,n),e.h=e.y2-e.y1},yt=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return e.x1-=t,e.x2+=t,e.y1-=t,e.y2+=t,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},bt=function(e){var t,n,r,i,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0];if(1===a.length)t=n=r=i=a[0];else if(2===a.length)t=r=a[0],i=n=a[1];else if(4===a.length){var o=b(a,4);t=o[0],n=o[1],r=o[2],i=o[3]}return e.x1-=i,e.x2+=n,e.y1-=t,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},Et=function(e,t){e.x1=t.x1,e.y1=t.y1,e.x2=t.x2,e.y2=t.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},St=function(e,t){return!(e.x1>t.x2)&&(!(t.x1>e.x2)&&(!(e.x2t.y2)&&!(t.y1>e.y2)))))))},Tt=function(e,t,n){return e.x1<=t&&t<=e.x2&&e.y1<=n&&n<=e.y2},Ct=function(e,t){return Tt(e,t.x1,t.y1)&&Tt(e,t.x2,t.y2)},xt=function(e,t,n,r,i,a,o){var s,l=Ht(i,a),c=i/2,u=a/2,d=r-u-o;if((s=Ft(e,t,n,r,n-c+l-o,d,n+c-l+o,d,!1)).length>0)return s;var p=n+c+o;if((s=Ft(e,t,n,r,p,r-u+l-o,p,r+u-l+o,!1)).length>0)return s;var f=r+u+o;if((s=Ft(e,t,n,r,n-c+l-o,f,n+c-l+o,f,!1)).length>0)return s;var h,m=n-c-o;if((s=Ft(e,t,n,r,m,r-u+l-o,m,r+u-l+o,!1)).length>0)return s;var g=n-c+l,_=r-u+l;if((h=Pt(e,t,n,r,g,_,l+o)).length>0&&h[0]<=g&&h[1]<=_)return[h[0],h[1]];var v=n+c-l,y=r-u+l;if((h=Pt(e,t,n,r,v,y,l+o)).length>0&&h[0]>=v&&h[1]<=y)return[h[0],h[1]];var b=n+c-l,E=r+u-l;if((h=Pt(e,t,n,r,b,E,l+o)).length>0&&h[0]>=b&&h[1]>=E)return[h[0],h[1]];var S=n-c+l,T=r+u-l;return(h=Pt(e,t,n,r,S,T,l+o)).length>0&&h[0]<=S&&h[1]>=T?[h[0],h[1]]:[]},wt=function(e,t,n,r,i,a,o){var s=o,l=Math.min(n,i),c=Math.max(n,i),u=Math.min(r,a),d=Math.max(r,a);return l-s<=e&&e<=c+s&&u-s<=t&&t<=d+s},Ot=function(e,t,n,r,i,a,o,s,l){var c=Math.min(n,o,i)-l,u=Math.max(n,o,i)+l,d=Math.min(r,s,a)-l,p=Math.max(r,s,a)+l;return!(eu||tp)},Nt=function(e,t,n,r,i,a,o,s){var l=[];!function(e,t,n,r,i){var a,o,s,l,c,u,d,p;0===e&&(e=1e-5),s=-27*(r/=e)+(t/=e)*(9*(n/=e)-t*t*2),a=(o=(3*n-t*t)/9)*o*o+(s/=54)*s,i[1]=0,d=t/3,a>0?(c=(c=s+Math.sqrt(a))<0?-Math.pow(-c,1/3):Math.pow(c,1/3),u=(u=s-Math.sqrt(a))<0?-Math.pow(-u,1/3):Math.pow(u,1/3),i[0]=-d+c+u,d+=(c+u)/2,i[4]=i[2]=-d,d=Math.sqrt(3)*(-u+c)/2,i[3]=d,i[5]=-d):(i[5]=i[3]=0,0===a?(p=s<0?-Math.pow(-s,1/3):Math.pow(s,1/3),i[0]=2*p-d,i[4]=i[2]=-(p+d)):(l=(o=-o)*o*o,l=Math.acos(s/Math.sqrt(l)),p=2*Math.sqrt(o),i[0]=-d+p*Math.cos(l/3),i[2]=-d+p*Math.cos((l+2*Math.PI)/3),i[4]=-d+p*Math.cos((l+4*Math.PI)/3)))}(1*n*n-4*n*i+2*n*o+4*i*i-4*i*o+o*o+r*r-4*r*a+2*r*s+4*a*a-4*a*s+s*s,9*n*i-3*n*n-3*n*o-6*i*i+3*i*o+9*r*a-3*r*r-3*r*s-6*a*a+3*a*s,3*n*n-6*n*i+n*o-n*e+2*i*i+2*i*e-o*e+3*r*r-6*r*a+r*s-r*t+2*a*a+2*a*t-s*t,1*n*i-n*n+n*e-i*e+r*a-r*r+r*t-a*t,l);for(var c=[],u=0;u<6;u+=2)Math.abs(l[u+1])<1e-7&&l[u]>=0&&l[u]<=1&&c.push(l[u]);c.push(1),c.push(0);for(var d,p,f,h=-1,m=0;m=0?fl?(e-i)*(e-i)+(t-a)*(t-a):c-d},It=function(e,t,n){for(var r,i,a,o,s=0,l=0;l=e&&e>=a||r<=e&&e<=a))continue;(e-r)/(a-r)*(o-i)+i>t&&s++}return s%2!==0},At=function(e,t,n,r,i,a,o,s,l){var c,u=new Array(n.length);null!=s[0]?(c=Math.atan(s[1]/s[0]),s[0]<0?c+=Math.PI/2:c=-c-Math.PI/2):c=s;for(var d,p=Math.cos(-c),f=Math.sin(-c),h=0;h0){var m=Dt(u,-l);d=kt(m)}else d=u;return It(e,t,d)},kt=function(e){for(var t,n,r,i,a,o,s,l,c=new Array(e.length/2),u=0;u=0&&h<=1&&g.push(h),m>=0&&m<=1&&g.push(m),0===g.length)return[];var _=g[0]*s[0]+e,v=g[0]*s[1]+t;return g.length>1?g[0]==g[1]?[_,v]:[_,v,g[1]*s[0]+e,g[1]*s[1]+t]:[_,v]},Lt=function(e,t,n){return t<=e&&e<=n||n<=e&&e<=t?e:e<=t&&t<=n||n<=t&&t<=e?t:n},Ft=function(e,t,n,r,i,a,o,s,l){var c=e-i,u=n-e,d=o-i,p=t-a,f=r-t,h=s-a,m=d*p-h*c,g=u*p-f*c,_=h*u-d*f;if(0!==_){var v=m/_,y=g/_,b=-.001;return b<=v&&v<=1.001&&b<=y&&y<=1.001||l?[e+v*u,t+v*f]:[]}return 0===m||0===g?Lt(e,n,o)===o?[o,s]:Lt(e,n,i)===i?[i,a]:Lt(i,o,n)===n?[n,r]:[]:[]},Bt=function(e,t,n,r,i,a,o,s){var l,c,u,d,p,f,h=[],m=new Array(n.length),g=!0;if(null==a&&(g=!1),g){for(var _=0;_0){var v=Dt(m,-s);c=kt(v)}else c=m}else c=n;for(var y=0;yc&&(c=t)},p=function(e){return l[e]},f=0;f0?b.edgesTo(y)[0]:y.edgesTo(b)[0];var S=r(E);y=y.id(),f[y]>f[_]+S&&(f[y]=f[_]+S,h.nodes.indexOf(y)<0?h.push(y):h.updateItem(y),c[y]=0,l[y]=[]),f[y]==f[_]+S&&(c[y]=c[y]+c[_],l[y].push(_))}else for(var T=0;T0;){for(var O=n.pop(),N=0;N0&&o.push(n[s]);0!==o.length&&i.push(r.collection(o))}return i}(u,l,t,r);return y=function(e){for(var t=0;t5&&void 0!==arguments[5]?arguments[5]:dn,o=r,s=0;s=2?_n(e,t,n,0,hn,mn):_n(e,t,n,0,fn)},squaredEuclidean:function(e,t,n){return _n(e,t,n,0,hn)},manhattan:function(e,t,n){return _n(e,t,n,0,fn)},max:function(e,t,n){return _n(e,t,n,-1/0,gn)}};function yn(e,t,n,r,i,a){var o;return o=I(e)?e:vn[e]||vn.euclidean,0===t&&I(e)?o(i,a):o(t,n,r,i,a)}vn["squared-euclidean"]=vn.squaredEuclidean,vn.squaredeuclidean=vn.squaredEuclidean;var bn=Pe({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),En=function(e){return bn(e)},Sn=function(e,t,n,r,i){var a="kMedoids"!==i?function(e){return n[e]}:function(e){return r[e](n)},o=n,s=t;return yn(e,r.length,a,(function(e){return r[e](t)}),o,s)},Tn=function(e,t,n){for(var r=n.length,i=new Array(r),a=new Array(r),o=new Array(t),s=null,l=0;ln)return!1}return!0},On=function(e,t,n){for(var r=0;ri&&(i=t[l][c],a=c);o[a].push(e[l])}for(var u=0;u=i.threshold||"dendrogram"===i.mode&&1===e.length)return!1;var f,h=t[o],m=t[r[o]];f="dendrogram"===i.mode?{left:h,right:m,key:h.key}:{value:h.value.concat(m.value),key:h.key},e[h.index]=f,e.splice(m.index,1),t[h.key]=f;for(var g=0;gn[m.key][_.key]&&(a=n[m.key][_.key])):"max"===i.linkage?(a=n[h.key][_.key],n[h.key][_.key]1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];r?e=e.slice(t,n):(n0&&e.splice(0,t));for(var o=0,s=e.length-1;s>=0;s--){var l=e[s];a?isFinite(l)||(e[s]=-1/0,o++):e.splice(s,1)}i&&e.sort((function(e,t){return e-t}));var c=e.length,u=Math.floor(c/2);return c%2!==0?e[u+1+o]:(e[u-1+o]+e[u+o])/2}(e):"mean"===t?function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=0,i=0,a=t;a1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=1/0,i=t;i1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=-1/0,i=t;io&&(a=l,o=t[i*e+l])}a>0&&r.push(a)}for(var c=0;c=w?(O=w,w=R,N=I):R>O&&(O=R);for(var A=0;A0?1:0;T[S%c.minIterations*t+B]=U,F+=U}if(F>0&&(S>=c.minIterations-1||S==c.maxIterations-1)){for(var G=0,z=0;z0&&r.push(i);return r}(t,a,o),Z=function(e,t,n){for(var r=Yn(e,t,n),i=0;il&&(s=c,l=u)}n[i]=a[s]}return Yn(e,t,n)}(t,r,H),Y={},V=0;V1||o>1)&&(c=!0),u[t]=[],e.outgoers().forEach((function(e){e.isEdge()&&u[t].push(e.id())}))}else d[t]=[void 0,e.target().id()]})):l.forEach((function(e){var t=e.id();e.isNode()?(e.degree(!0)%2&&(n?r?c=!0:r=t:n=t),u[t]=[],e.connectedEdges().forEach((function(e){return u[t].push(e.id())}))):d[t]=[e.source().id(),e.target().id()]}));var p={found:!1,trail:void 0};if(c)return p;if(r&&n)if(s){if(i&&r!=i)return p;i=r}else{if(i&&r!=i&&n!=i)return p;i||(i=r)}else i||(i=l[0].id());var f=function(e){for(var t,n,r,i=e,a=[e];u[i].length;)t=u[i].shift(),n=d[t][0],i!=(r=d[t][1])?(u[r]=u[r].filter((function(e){return e!=t})),i=r):s||i==n||(u[n]=u[n].filter((function(e){return e!=t})),i=n),a.unshift(t),a.unshift(i);return a},h=[],m=[];for(m=f(i);1!=m.length;)0==u[m[0]].length?(h.unshift(l.getElementById(m.shift())),h.unshift(l.getElementById(m.shift()))):m=f(m.shift()).concat(m);for(var g in h.unshift(l.getElementById(m.shift())),u)if(u[g].length)return p;return p.found=!0,p.trail=this.spawn(h,!0),p}},Kn=function(){var e=this,t={},n=0,r=0,i=[],a=[],o={},s=function s(l,c,u){l===u&&(r+=1),t[c]={id:n,low:n++,cutVertex:!1};var d,p,f,h,m=e.getElementById(c).connectedEdges().intersection(e);0===m.size()?i.push(e.spawn(e.getElementById(c))):m.forEach((function(n){d=n.source().id(),p=n.target().id(),(f=d===c?p:d)!==u&&(h=n.id(),o[h]||(o[h]=!0,a.push({x:c,y:f,edge:n})),f in t?t[c].low=Math.min(t[c].low,t[f].id):(s(l,f,c),t[c].low=Math.min(t[c].low,t[f].low),t[c].id<=t[f].low&&(t[c].cutVertex=!0,function(n,r){for(var o=a.length-1,s=[],l=e.spawn();a[o].x!=n||a[o].y!=r;)s.push(a.pop().edge),o--;s.push(a.pop().edge),s.forEach((function(n){var r=n.connectedNodes().intersection(e);l.merge(n),r.forEach((function(n){var r=n.id(),i=n.connectedEdges().intersection(e);l.merge(n),t[r].cutVertex?l.merge(i.filter((function(e){return e.isLoop()}))):l.merge(i)}))})),i.push(l)}(c,f))))}))};e.forEach((function(e){if(e.isNode()){var n=e.id();n in t||(r=0,s(n,n),t[n].cutVertex=r>1)}}));var l=Object.keys(t).filter((function(e){return t[e].cutVertex})).map((function(t){return e.getElementById(t)}));return{cut:e.spawn(l),components:i}},Qn=function(){var e=this,t={},n=0,r=[],i=[],a=e.spawn(e),o=function o(s){if(i.push(s),t[s]={index:n,low:n++,explored:!1},e.getElementById(s).connectedEdges().intersection(e).forEach((function(e){var n=e.target().id();n!==s&&(n in t||o(n),t[n].explored||(t[s].low=Math.min(t[s].low,t[n].low)))})),t[s].index===t[s].low){for(var l=e.spawn();;){var c=i.pop();if(l.merge(e.getElementById(c)),t[c].low=t[s].index,t[c].explored=!0,c===s)break}var u=l.edgesWith(l),d=l.merge(u);r.push(d),a=a.difference(d)}};return e.forEach((function(e){if(e.isNode()){var n=e.id();n in t||o(n)}})),{cut:a,components:r}},Xn={};[Ye,qe,We,Ke,Xe,et,it,qt,$t,Qt,Jt,un,Dn,zn,qn,$n,{hopcroftTarjanBiconnected:Kn,htbc:Kn,htb:Kn,hopcroftTarjanBiconnectedComponents:Kn},{tarjanStronglyConnected:Qn,tsc:Qn,tscc:Qn,tarjanStronglyConnectedComponents:Qn}].forEach((function(e){J(Xn,e)}));var Jn=function e(t){if(!(this instanceof e))return new e(t);this.id="Thenable/1.0.7",this.state=0,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},"function"===typeof t&&t.call(this,this.fulfill.bind(this),this.reject.bind(this))};Jn.prototype={fulfill:function(e){return er(this,1,"fulfillValue",e)},reject:function(e){return er(this,2,"rejectReason",e)},then:function(e,t){var n=this,r=new Jn;return n.onFulfilled.push(rr(e,r,"fulfill")),n.onRejected.push(rr(t,r,"reject")),tr(n),r.proxy}};var er=function(e,t,n,r){return 0===e.state&&(e.state=t,e[n]=r,tr(e)),e},tr=function(e){1===e.state?nr(e,"onFulfilled",e.fulfillValue):2===e.state&&nr(e,"onRejected",e.rejectReason)},nr=function(e,t,n){if(0!==e[t].length){var r=e[t];e[t]=[];var i=function(){for(var e=0;e0:void 0}},clearQueue:function(){return function(){var e=this,t=void 0!==e.length?e:[e];if(!(this._private.cy||this).styleEnabled())return this;for(var n=0;n0&&this.spawn(r).updateStyle().emit("class"),t},addClass:function(e){return this.toggleClass(e,!0)},hasClass:function(e){var t=this[0];return null!=t&&t._private.classes.has(e)},toggleClass:function(e,t){A(e)||(e=e.match(/\S+/g)||[]);for(var n=this,r=void 0===t,i=[],a=0,o=n.length;a0&&this.spawn(i).updateStyle().emit("class"),n},removeClass:function(e){return this.toggleClass(e,!1)},flashClass:function(e,t){var n=this;if(null==t)t=250;else if(0===t)return n;return n.addClass(e),setTimeout((function(){n.removeClass(e)}),t),n}};fr.className=fr.classNames=fr.classes;var hr={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:"\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'",number:q,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};hr.variable="(?:[\\w-.]|(?:\\\\"+hr.metaChar+"))+",hr.className="(?:[\\w-]|(?:\\\\"+hr.metaChar+"))+",hr.value=hr.string+"|"+hr.number,hr.id=hr.variable,function(){var e,t,n;for(e=hr.comparatorOp.split("|"),n=0;n=0||"="!==t&&(hr.comparatorOp+="|\\!"+t)}();var mr=0,gr=1,_r=2,vr=3,yr=4,br=5,Er=6,Sr=7,Tr=8,Cr=9,xr=10,wr=11,Or=12,Nr=13,Rr=14,Ir=15,Ar=16,kr=17,Dr=18,Mr=19,Pr=20,Lr=[{selector:":selected",matches:function(e){return e.selected()}},{selector:":unselected",matches:function(e){return!e.selected()}},{selector:":selectable",matches:function(e){return e.selectable()}},{selector:":unselectable",matches:function(e){return!e.selectable()}},{selector:":locked",matches:function(e){return e.locked()}},{selector:":unlocked",matches:function(e){return!e.locked()}},{selector:":visible",matches:function(e){return e.visible()}},{selector:":hidden",matches:function(e){return!e.visible()}},{selector:":transparent",matches:function(e){return e.transparent()}},{selector:":grabbed",matches:function(e){return e.grabbed()}},{selector:":free",matches:function(e){return!e.grabbed()}},{selector:":removed",matches:function(e){return e.removed()}},{selector:":inside",matches:function(e){return!e.removed()}},{selector:":grabbable",matches:function(e){return e.grabbable()}},{selector:":ungrabbable",matches:function(e){return!e.grabbable()}},{selector:":animated",matches:function(e){return e.animated()}},{selector:":unanimated",matches:function(e){return!e.animated()}},{selector:":parent",matches:function(e){return e.isParent()}},{selector:":childless",matches:function(e){return e.isChildless()}},{selector:":child",matches:function(e){return e.isChild()}},{selector:":orphan",matches:function(e){return e.isOrphan()}},{selector:":nonorphan",matches:function(e){return e.isChild()}},{selector:":compound",matches:function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()}},{selector:":loop",matches:function(e){return e.isLoop()}},{selector:":simple",matches:function(e){return e.isSimple()}},{selector:":active",matches:function(e){return e.active()}},{selector:":inactive",matches:function(e){return!e.active()}},{selector:":backgrounding",matches:function(e){return e.backgrounding()}},{selector:":nonbackgrounding",matches:function(e){return!e.backgrounding()}}].sort((function(e,t){return function(e,t){return-1*X(e,t)}(e.selector,t.selector)})),Fr=function(){for(var e,t={},n=0;n0&&c.edgeCount>0)return Ie("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(c.edgeCount>1)return Ie("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;1===c.edgeCount&&Ie("The selector `"+e+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},toString:function(){if(null!=this.toStringCache)return this.toStringCache;for(var e=function(e){return null==e?"":e},t=function(t){return R(t)?'"'+t+'"':e(t)},n=function(e){return" "+e+" "},r=function(r,a){var o=r.type,s=r.value;switch(o){case mr:var l=e(s);return l.substring(0,l.length-1);case vr:var c=r.field,u=r.operator;return"["+c+n(e(u))+t(s)+"]";case br:var d=r.operator,p=r.field;return"["+e(d)+p+"]";case yr:return"["+r.field+"]";case Er:var f=r.operator;return"[["+r.field+n(e(f))+t(s)+"]]";case Sr:return s;case Tr:return"#"+s;case Cr:return"."+s;case kr:case Ir:return i(r.parent,a)+n(">")+i(r.child,a);case Dr:case Ar:return i(r.ancestor,a)+" "+i(r.descendant,a);case Mr:var h=i(r.left,a),m=i(r.subject,a),g=i(r.right,a);return h+(h.length>0?" ":"")+m+g;case Pr:return""}},i=function(e,t){return e.checks.reduce((function(n,i,a){return n+(t===e&&0===a?"$":"")+r(i,t)}),"")},a="",o=0;o1&&o=0&&(t=t.replace("!",""),u=!0),t.indexOf("@")>=0&&(t=t.replace("@",""),c=!0),(o||l||c)&&(i=o||s?""+e:"",a=""+n),c&&(e=i=i.toLowerCase(),n=a=a.toLowerCase()),t){case"*=":r=i.indexOf(a)>=0;break;case"$=":r=i.indexOf(a,i.length-a.length)>=0;break;case"^=":r=0===i.indexOf(a);break;case"=":r=e===n;break;case">":d=!0,r=e>n;break;case">=":d=!0,r=e>=n;break;case"<":d=!0,r=e0;){var c=i.shift();t(c),a.add(c.id()),o&&r(i,a,c)}return e}function ri(e,t,n){if(n.isParent())for(var r=n._private.children,i=0;i1&&void 0!==arguments[1])||arguments[1];return ni(this,e,t,ri)},ti.forEachUp=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return ni(this,e,t,ii)},ti.forEachUpAndDown=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return ni(this,e,t,ai)},ti.ancestors=ti.parents,(Xr=Jr={data:dr.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:dr.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:dr.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:dr.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:dr.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:dr.removeData({field:"rscratch",triggerEvent:!1}),id:function(){var e=this[0];if(e)return e._private.data.id}}).attr=Xr.data,Xr.removeAttr=Xr.removeData;var oi,si,li=Jr,ci={};function ui(e){return function(t){var n=this;if(void 0===t&&(t=!0),0!==n.length&&n.isNode()&&!n.removed()){for(var r=0,i=n[0],a=i._private.edges,o=0;ot})),minIndegree:di("indegree",(function(e,t){return et})),minOutdegree:di("outdegree",(function(e,t){return et}))}),J(ci,{totalDegree:function(e){for(var t=0,n=this.nodes(),r=0;r0,u=c;c&&(l=l[0]);var d=u?l.position():{x:0,y:0};return i={x:s.x-d.x,y:s.y-d.y},void 0===e?i:i[e]}for(var p=0;p0,g=m;m&&(h=h[0]);var _=g?h.position():{x:0,y:0};void 0!==t?f.position(e,t+_[e]):void 0!==i&&f.position({x:i.x+_.x,y:i.y+_.y})}}else if(!a)return;return this}},oi.modelPosition=oi.point=oi.position,oi.modelPositions=oi.points=oi.positions,oi.renderedPoint=oi.renderedPosition,oi.relativePoint=oi.relativePosition;var hi,mi,gi=si;hi=mi={},mi.renderedBoundingBox=function(e){var t=this.boundingBox(e),n=this.cy(),r=n.zoom(),i=n.pan(),a=t.x1*r+i.x,o=t.x2*r+i.x,s=t.y1*r+i.y,l=t.y2*r+i.y;return{x1:a,x2:o,y1:s,y2:l,w:o-a,h:l-s}},mi.dirtyCompoundBoundsCache=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.cy();return t.styleEnabled()&&t.hasCompoundNodes()?(this.forEachUp((function(t){if(t.isParent()){var n=t._private;n.compoundBoundsClean=!1,n.bbCache=null,e||t.emitAndNotify("bounds")}})),this):this},mi.updateCompoundBounds=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.cy();if(!t.styleEnabled()||!t.hasCompoundNodes())return this;if(!e&&t.batching())return this;function n(e){if(e.isParent()){var t=e._private,n=e.children(),r="include"===e.pstyle("compound-sizing-wrt-labels").value,i={width:{val:e.pstyle("min-width").pfValue,left:e.pstyle("min-width-bias-left"),right:e.pstyle("min-width-bias-right")},height:{val:e.pstyle("min-height").pfValue,top:e.pstyle("min-height-bias-top"),bottom:e.pstyle("min-height-bias-bottom")}},a=n.boundingBox({includeLabels:r,includeOverlays:!1,useCache:!1}),o=t.position;0!==a.w&&0!==a.h||((a={w:e.pstyle("width").pfValue,h:e.pstyle("height").pfValue}).x1=o.x-a.w/2,a.x2=o.x+a.w/2,a.y1=o.y-a.h/2,a.y2=o.y+a.h/2);var s=i.width.left.value;"px"===i.width.left.units&&i.width.val>0&&(s=100*s/i.width.val);var l=i.width.right.value;"px"===i.width.right.units&&i.width.val>0&&(l=100*l/i.width.val);var c=i.height.top.value;"px"===i.height.top.units&&i.height.val>0&&(c=100*c/i.height.val);var u=i.height.bottom.value;"px"===i.height.bottom.units&&i.height.val>0&&(u=100*u/i.height.val);var d=_(i.width.val-a.w,s,l),p=d.biasDiff,f=d.biasComplementDiff,h=_(i.height.val-a.h,c,u),m=h.biasDiff,g=h.biasComplementDiff;t.autoPadding=function(e,t,n,r){if("%"!==n.units)return"px"===n.units?n.pfValue:0;switch(r){case"width":return e>0?n.pfValue*e:0;case"height":return t>0?n.pfValue*t:0;case"average":return e>0&&t>0?n.pfValue*(e+t)/2:0;case"min":return e>0&&t>0?e>t?n.pfValue*t:n.pfValue*e:0;case"max":return e>0&&t>0?e>t?n.pfValue*e:n.pfValue*t:0;default:return 0}}(a.w,a.h,e.pstyle("padding"),e.pstyle("padding-relative-to").value),t.autoWidth=Math.max(a.w,i.width.val),o.x=(-p+a.x1+a.x2+f)/2,t.autoHeight=Math.max(a.h,i.height.val),o.y=(-m+a.y1+a.y2+g)/2}function _(e,t,n){var r=0,i=0,a=t+n;return e>0&&a>0&&(r=t/a*e,i=n/a*e),{biasDiff:r,biasComplementDiff:i}}}for(var r=0;re.x2?r:e.x2,e.y1=ne.y2?i:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},yi=function(e,t){return null==t?e:vi(e,t.x1,t.y1,t.x2,t.y2)},bi=function(e,t,n){return Be(e,t,n)},Ei=function(e,t,n){if(!t.cy().headless()){var r,i,a=t._private,o=a.rstyle,s=o.arrowWidth/2;if("none"!==t.pstyle(n+"-arrow-shape").value){"source"===n?(r=o.srcX,i=o.srcY):"target"===n?(r=o.tgtX,i=o.tgtY):(r=o.midX,i=o.midY);var l=a.arrowBounds=a.arrowBounds||{},c=l[n]=l[n]||{};c.x1=r-s,c.y1=i-s,c.x2=r+s,c.y2=i+s,c.w=c.x2-c.x1,c.h=c.y2-c.y1,yt(c,1),vi(e,c.x1,c.y1,c.x2,c.y2)}}},Si=function(e,t,n){if(!t.cy().headless()){var r;r=n?n+"-":"";var i=t._private,a=i.rstyle;if(t.pstyle(r+"label").strValue){var o,s,l,c,u=t.pstyle("text-halign"),d=t.pstyle("text-valign"),p=bi(a,"labelWidth",n),f=bi(a,"labelHeight",n),h=bi(a,"labelX",n),m=bi(a,"labelY",n),g=t.pstyle(r+"text-margin-x").pfValue,_=t.pstyle(r+"text-margin-y").pfValue,v=t.isEdge(),y=t.pstyle(r+"text-rotation"),b=t.pstyle("text-outline-width").pfValue,E=t.pstyle("text-border-width").pfValue/2,S=t.pstyle("text-background-padding").pfValue,T=f,C=p,x=C/2,w=T/2;if(v)o=h-x,s=h+x,l=m-w,c=m+w;else{switch(u.value){case"left":o=h-C,s=h;break;case"center":o=h-x,s=h+x;break;case"right":o=h,s=h+C}switch(d.value){case"top":l=m-T,c=m;break;case"center":l=m-w,c=m+w;break;case"bottom":l=m,c=m+T}}o+=g-Math.max(b,E)-S-2,s+=g+Math.max(b,E)+S+2,l+=_-Math.max(b,E)-S-2,c+=_+Math.max(b,E)+S+2;var O=n||"main",N=i.labelBounds,R=N[O]=N[O]||{};R.x1=o,R.y1=l,R.x2=s,R.y2=c,R.w=s-o,R.h=c-l;var I=v&&"autorotate"===y.strValue,A=null!=y.pfValue&&0!==y.pfValue;if(I||A){var k=I?bi(i.rstyle,"labelAngle",n):y.pfValue,D=Math.cos(k),M=Math.sin(k),P=(o+s)/2,L=(l+c)/2;if(!v){switch(u.value){case"left":P=s;break;case"right":P=o}switch(d.value){case"top":L=c;break;case"bottom":L=l}}var F=function(e,t){return{x:(e-=P)*D-(t-=L)*M+P,y:e*M+t*D+L}},B=F(o,l),U=F(o,c),G=F(s,l),z=F(s,c);o=Math.min(B.x,U.x,G.x,z.x),s=Math.max(B.x,U.x,G.x,z.x),l=Math.min(B.y,U.y,G.y,z.y),c=Math.max(B.y,U.y,G.y,z.y)}var j=O+"Rot",H=N[j]=N[j]||{};H.x1=o,H.y1=l,H.x2=s,H.y2=c,H.w=s-o,H.h=c-l,vi(e,o,l,s,c),vi(i.labelBounds.all,o,l,s,c)}return e}},Ti=function(e){var t=0,n=function(e){return(e?1:0)<(r=N[1].x)){var R=n;n=r,r=R}if(i>(a=N[1].y)){var I=i;i=a,a=I}vi(p,n-T,i-T,r+T,a+T)}}else if("bezier"===O||"unbundled-bezier"===O||"segments"===O||"taxi"===O){var A;switch(O){case"bezier":case"unbundled-bezier":A=g.bezierPts;break;case"segments":case"taxi":A=g.linePts}if(null!=A)for(var k=0;k(r=P.x)){var L=n;n=r,r=L}if((i=M.y)>(a=P.y)){var F=i;i=a,a=F}vi(p,n-=T,i-=T,r+=T,a+=T)}if(u&&t.includeEdges&&m&&(Ei(p,e,"mid-source"),Ei(p,e,"mid-target"),Ei(p,e,"source"),Ei(p,e,"target")),u&&"yes"===e.pstyle("ghost").value){var B=e.pstyle("ghost-offset-x").pfValue,U=e.pstyle("ghost-offset-y").pfValue;vi(p,p.x1+B,p.y1+U,p.x2+B,p.y2+U)}var G=f.bodyBounds=f.bodyBounds||{};Et(G,p),bt(G,_),yt(G,1),u&&(n=p.x1,r=p.x2,i=p.y1,a=p.y2,vi(p,n-S,i-S,r+S,a+S));var z=f.overlayBounds=f.overlayBounds||{};Et(z,p),bt(z,_),yt(z,1);var j=f.labelBounds=f.labelBounds||{};null!=j.all?((l=j.all).x1=1/0,l.y1=1/0,l.x2=-1/0,l.y2=-1/0,l.w=0,l.h=0):j.all=_t(),u&&t.includeLabels&&(t.includeMainLabels&&Si(p,e,null),m&&(t.includeSourceLabels&&Si(p,e,"source"),t.includeTargetLabels&&Si(p,e,"target")))}return p.x1=_i(p.x1),p.y1=_i(p.y1),p.x2=_i(p.x2),p.y2=_i(p.y2),p.w=_i(p.x2-p.x1),p.h=_i(p.y2-p.y1),p.w>0&&p.h>0&&y&&(bt(p,_),yt(p,1)),p}(e,wi),r.bbCache=n,r.bbCachePosKey=o):n=r.bbCache,!a){var u=e.isNode();n=_t(),(t.includeNodes&&u||t.includeEdges&&!u)&&(t.includeOverlays?yi(n,r.overlayBounds):yi(n,r.bodyBounds)),t.includeLabels&&(t.includeMainLabels&&(!i||t.includeSourceLabels&&t.includeTargetLabels)?yi(n,r.labelBounds.all):(t.includeMainLabels&&yi(n,r.labelBounds.mainRot),t.includeSourceLabels&&yi(n,r.labelBounds.sourceRot),t.includeTargetLabels&&yi(n,r.labelBounds.targetRot))),n.w=n.x2-n.x1,n.h=n.y2-n.y1}return n},wi={includeNodes:!0,includeEdges:!0,includeLabels:!0,includeMainLabels:!0,includeSourceLabels:!0,includeTargetLabels:!0,includeOverlays:!0,includeUnderlays:!0,useCache:!0},Oi=Ti(wi),Ni=Pe(wi);mi.boundingBox=function(e){var t;if(1!==this.length||null==this[0]._private.bbCache||this[0]._private.styleDirty||void 0!==e&&void 0!==e.useCache&&!0!==e.useCache){t=_t();var n=Ni(e=e||wi),r=this;if(r.cy().styleEnabled())for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:Hi,t=arguments.length>1?arguments[1]:void 0,n=0;n=0;s--)o(s);return this},Yi.removeAllListeners=function(){return this.removeListener("*")},Yi.emit=Yi.trigger=function(e,t,n){var r=this.listeners,i=r.length;return this.emitting++,A(t)||(t=[t]),Wi(this,(function(e,a){null!=n&&(r=[{event:a.event,type:a.type,namespace:a.namespace,callback:n}],i=r.length);for(var o=function(n){var i=r[n];if(i.type===a.type&&(!i.namespace||i.namespace===a.namespace||".*"===i.namespace)&&e.eventMatches(e.context,i,a)){var o=[a];null!=t&&function(e,t){for(var n=0;n1&&!r){var i=this.length-1,a=this[i],o=a._private.data.id;this[i]=void 0,this[e]=a,n.set(o,{ele:a,index:e})}return this.length--,this},unmergeOne:function(e){e=e[0];var t=this._private,n=e._private.data.id,r=t.map.get(n);if(!r)return this;var i=r.index;return this.unmergeAt(i),this},unmerge:function(e){var t=this._private.cy;if(!e)return this;if(e&&R(e)){var n=e;e=t.mutableElements().filter(n)}for(var r=0;r=0;t--){e(this[t])&&this.unmergeAt(t)}return this},map:function(e,t){for(var n=[],r=this,i=0;ir&&(r=s,n=o)}return{value:r,ele:n}},min:function(e,t){for(var n,r=1/0,i=this,a=0;a=0&&i1&&void 0!==arguments[1])||arguments[1],n=this[0],r=n.cy();if(r.styleEnabled()&&n){this.cleanStyle();var i=n._private.style[e];return null!=i?i:t?r.style().getDefaultProperty(e):null}},numericStyle:function(e){var t=this[0];if(t.cy().styleEnabled()&&t){var n=t.pstyle(e);return void 0!==n.pfValue?n.pfValue:n.value}},numericStyleUnits:function(e){var t=this[0];if(t.cy().styleEnabled())return t?t.pstyle(e).units:void 0},renderedStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var n=this[0];return n?t.style().getRenderedStyle(n,e):void 0},style:function(e,t){var n=this.cy();if(!n.styleEnabled())return this;var r=n.style();if(k(e)){var i=e;r.applyBypass(this,i,false),this.emitAndNotify("style")}else if(R(e)){if(void 0===t){var a=this[0];return a?r.getStylePropertyValue(a,e):void 0}r.applyBypass(this,e,t,false),this.emitAndNotify("style")}else if(void 0===e){var o=this[0];return o?r.getRawStyle(o):void 0}return this},removeStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var n=t.style(),r=this;if(void 0===e)for(var i=0;i0&&t.push(u[0]),t.push(s[0])}return this.spawn(t,!0).filter(e)}),"neighborhood"),closedNeighborhood:function(e){return this.neighborhood().add(this).filter(e)},openNeighborhood:function(e){return this.neighborhood(e)}}),va.neighbourhood=va.neighborhood,va.closedNeighbourhood=va.closedNeighborhood,va.openNeighbourhood=va.openNeighborhood,J(va,{source:ei((function(e){var t,n=this[0];return n&&(t=n._private.source||n.cy().collection()),t&&e?t.filter(e):t}),"source"),target:ei((function(e){var t,n=this[0];return n&&(t=n._private.target||n.cy().collection()),t&&e?t.filter(e):t}),"target"),sources:Sa({attr:"source"}),targets:Sa({attr:"target"})}),J(va,{edgesWith:ei(Ta(),"edgesWith"),edgesTo:ei(Ta({thisIsSrc:!0}),"edgesTo")}),J(va,{connectedEdges:ei((function(e){for(var t=[],n=0;n0);return a},component:function(){var e=this[0];return e.cy().mutableElements().components(e)[0]}}),va.componentsOf=va.components;var xa=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(void 0!==e){var i=new Ge,a=!1;if(t){if(t.length>0&&k(t[0])&&!L(t[0])){a=!0;for(var o=[],s=new je,l=0,c=t.length;l0&&void 0!==arguments[0])||arguments[0],r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this,a=i.cy(),o=a._private,s=[],l=[],c=0,u=i.length;c0){for(var F=e.length===i.length?i:new xa(a,e),B=0;B0&&void 0!==arguments[0])||arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this,r=[],i={},a=n._private.cy;function o(e){for(var t=e._private.edges,n=0;n0&&(e?O.emitAndNotify("remove"):t&&O.emit("remove"));for(var N=0;Nd&&Math.abs(s.v)>d;);return a?function(e){return c[e*(c.length-1)|0]}:u}}(),Ra=function(e,t,n,r){var i=function(e,t,n,r){var i=4,a=.001,o=1e-7,s=10,l=11,c=1/(l-1),u="undefined"!==typeof Float32Array;if(4!==arguments.length)return!1;for(var d=0;d<4;++d)if("number"!==typeof arguments[d]||isNaN(arguments[d])||!isFinite(arguments[d]))return!1;e=Math.min(e,1),n=Math.min(n,1),e=Math.max(e,0),n=Math.max(n,0);var p=u?new Float32Array(l):new Array(l);function f(e,t){return 1-3*t+3*e}function h(e,t){return 3*t-6*e}function m(e){return 3*e}function g(e,t,n){return((f(t,n)*e+h(t,n))*e+m(t))*e}function _(e,t,n){return 3*f(t,n)*e*e+2*h(t,n)*e+m(t)}function v(t,r){for(var a=0;a0?i=l:r=l}while(Math.abs(a)>o&&++c=a?v(t,s):0===u?s:b(t,r,r+c)}var S=!1;function T(){S=!0,e===t&&n===r||y()}var C=function(i){return S||T(),e===t&&n===r?i:0===i?0:1===i?1:g(E(i),t,r)};C.getControlPoints=function(){return[{x:e,y:t},{x:n,y:r}]};var x="generateBezier("+[e,t,n,r]+")";return C.toString=function(){return x},C}(e,t,n,r);return function(e,t,n){return e+(t-e)*i(n)}},Ia={linear:function(e,t,n){return e+(t-e)*n},ease:Ra(.25,.1,.25,1),"ease-in":Ra(.42,0,1,1),"ease-out":Ra(0,0,.58,1),"ease-in-out":Ra(.42,0,.58,1),"ease-in-sine":Ra(.47,0,.745,.715),"ease-out-sine":Ra(.39,.575,.565,1),"ease-in-out-sine":Ra(.445,.05,.55,.95),"ease-in-quad":Ra(.55,.085,.68,.53),"ease-out-quad":Ra(.25,.46,.45,.94),"ease-in-out-quad":Ra(.455,.03,.515,.955),"ease-in-cubic":Ra(.55,.055,.675,.19),"ease-out-cubic":Ra(.215,.61,.355,1),"ease-in-out-cubic":Ra(.645,.045,.355,1),"ease-in-quart":Ra(.895,.03,.685,.22),"ease-out-quart":Ra(.165,.84,.44,1),"ease-in-out-quart":Ra(.77,0,.175,1),"ease-in-quint":Ra(.755,.05,.855,.06),"ease-out-quint":Ra(.23,1,.32,1),"ease-in-out-quint":Ra(.86,0,.07,1),"ease-in-expo":Ra(.95,.05,.795,.035),"ease-out-expo":Ra(.19,1,.22,1),"ease-in-out-expo":Ra(1,0,0,1),"ease-in-circ":Ra(.6,.04,.98,.335),"ease-out-circ":Ra(.075,.82,.165,1),"ease-in-out-circ":Ra(.785,.135,.15,.86),spring:function(e,t,n){if(0===n)return Ia.linear;var r=Na(e,t,n);return function(e,t,n){return e+(t-e)*r(n)}},"cubic-bezier":Ra};function Aa(e,t,n,r,i){if(1===r)return n;if(t===n)return n;var a=i(t,n,r);return null==e||((e.roundValue||e.color)&&(a=Math.round(a)),void 0!==e.min&&(a=Math.max(a,e.min)),void 0!==e.max&&(a=Math.min(a,e.max))),a}function ka(e,t){return null!=e.pfValue||null!=e.value?null==e.pfValue||null!=t&&"%"===t.type.units?e.value:e.pfValue:e}function Da(e,t,n,r,i){var a=null!=i?i.type:null;n<0?n=0:n>1&&(n=1);var o=ka(e,i),s=ka(t,i);if(D(o)&&D(s))return Aa(a,o,s,n,r);if(A(o)&&A(s)){for(var l=[],c=0;c0?("spring"===d&&p.push(o.duration),o.easingImpl=Ia[d].apply(null,p)):o.easingImpl=Ia[d]}var f,h=o.easingImpl;if(f=0===o.duration?1:(n-l)/o.duration,o.applying&&(f=o.progress),f<0?f=0:f>1&&(f=1),null==o.delay){var m=o.startPosition,g=o.position;if(g&&i&&!e.locked()){var _={};Pa(m.x,g.x)&&(_.x=Da(m.x,g.x,f,h)),Pa(m.y,g.y)&&(_.y=Da(m.y,g.y,f,h)),e.position(_)}var v=o.startPan,y=o.pan,b=a.pan,E=null!=y&&r;E&&(Pa(v.x,y.x)&&(b.x=Da(v.x,y.x,f,h)),Pa(v.y,y.y)&&(b.y=Da(v.y,y.y,f,h)),e.emit("pan"));var S=o.startZoom,T=o.zoom,C=null!=T&&r;C&&(Pa(S,T)&&(a.zoom=gt(a.minZoom,Da(S,T,f,h),a.maxZoom)),e.emit("zoom")),(E||C)&&e.emit("viewport");var x=o.style;if(x&&x.length>0&&i){for(var w=0;w=0;t--){(0,e[t])()}e.splice(0,e.length)},u=a.length-1;u>=0;u--){var d=a[u],p=d._private;p.stopped?(a.splice(u,1),p.hooked=!1,p.playing=!1,p.started=!1,c(p.frames)):(p.playing||p.applying)&&(p.playing&&p.applying&&(p.applying=!1),p.started||La(0,d,e),Ma(t,d,e,n),p.applying&&(p.applying=!1),c(p.frames),null!=p.step&&p.step(e),d.completed()&&(a.splice(u,1),p.hooked=!1,p.playing=!1,p.started=!1,c(p.completes)),s=!0)}return n||0!==a.length||0!==o.length||r.push(t),s}for(var a=!1,o=0;o0?t.notify("draw",n):t.notify("draw")),n.unmerge(r),t.emit("step")}var Ba={animate:dr.animate(),animation:dr.animation(),animated:dr.animated(),clearQueue:dr.clearQueue(),delay:dr.delay(),delayAnimation:dr.delayAnimation(),stop:dr.stop(),addToAnimationPool:function(e){this.styleEnabled()&&this._private.aniEles.merge(e)},stopAnimationLoop:function(){this._private.animationsRunning=!1},startAnimationLoop:function(){var e=this;if(e._private.animationsRunning=!0,e.styleEnabled()){var t=e.renderer();t&&t.beforeRender?t.beforeRender((function(t,n){Fa(n,e)}),t.beforeRenderPriorities.animations):function t(){e._private.animationsRunning&&se((function(n){Fa(n,e),t()}))}()}}},Ua={qualifierCompare:function(e,t){return null==e||null==t?null==e&&null==t:e.sameText(t)},eventMatches:function(e,t,n){var r=t.qualifier;return null==r||e!==n.target&&L(n.target)&&r.matches(n.target)},addEventFields:function(e,t){t.cy=e,t.target=e},callbackContext:function(e,t,n){return null!=t.qualifier?n.target:e}},Ga=function(e){return R(e)?new $r(e):e},za={createEmitter:function(){var e=this._private;return e.emitter||(e.emitter=new Zi(Ua,this)),this},emitter:function(){return this._private.emitter},on:function(e,t,n){return this.emitter().on(e,Ga(t),n),this},removeListener:function(e,t,n){return this.emitter().removeListener(e,Ga(t),n),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},one:function(e,t,n){return this.emitter().one(e,Ga(t),n),this},once:function(e,t,n){return this.emitter().one(e,Ga(t),n),this},emit:function(e,t){return this.emitter().emit(e,t),this},emitAndNotify:function(e,t){return this.emit(e),this.notify(e,t),this}};dr.eventAliasesOn(za);var ja={png:function(e){return e=e||{},this._private.renderer.png(e)},jpg:function(e){var t=this._private.renderer;return(e=e||{}).bg=e.bg||"#fff",t.jpg(e)}};ja.jpeg=ja.jpg;var Ha={layout:function(e){var t=this;if(null!=e)if(null!=e.name){var n=e.name,r=t.extension("layout",n);if(null!=r){var i;i=R(e.eles)?t.$(e.eles):null!=e.eles?e.eles:t.$();var a=new r(J({},e,{cy:t,eles:i}));return a}Ne("No such layout `"+n+"` found. Did you forget to import it and `cytoscape.use()` it?")}else Ne("A `name` must be specified to make a layout");else Ne("Layout options must be specified to make a layout")}};Ha.createLayout=Ha.makeLayout=Ha.layout;var Za={notify:function(e,t){var n=this._private;if(this.batching()){n.batchNotifications=n.batchNotifications||{};var r=n.batchNotifications[e]=n.batchNotifications[e]||this.collection();null!=t&&r.merge(t)}else if(n.notificationsEnabled){var i=this.renderer();!this.destroyed()&&i&&i.notify(e,t)}},notifications:function(e){var t=this._private;return void 0===e?t.notificationsEnabled:(t.notificationsEnabled=!!e,this)},noNotifications:function(e){this.notifications(!1),e(),this.notifications(!0)},batching:function(){return this._private.batchCount>0},startBatch:function(){var e=this._private;return null==e.batchCount&&(e.batchCount=0),0===e.batchCount&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},endBatch:function(){var e=this._private;if(0===e.batchCount)return this;if(e.batchCount--,0===e.batchCount){e.batchStyleEles.updateStyle();var t=this.renderer();Object.keys(e.batchNotifications).forEach((function(n){var r=e.batchNotifications[n];r.empty()?t.notify(n):t.notify(n,r)}))}return this},batch:function(e){return this.startBatch(),e(),this.endBatch(),this},batchData:function(e){var t=this;return this.batch((function(){for(var n=Object.keys(e),r=0;r0;)t.removeChild(t.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach((function(e){var t=e._private;t.rscratch={},t.rstyle={},t.animation.current=[],t.animation.queue=[]}))},onRender:function(e){return this.on("render",e)},offRender:function(e){return this.off("render",e)}};Va.invalidateDimensions=Va.resize;var qa={collection:function(e,t){return R(e)?this.$(e):P(e)?e.collection():A(e)?(t||(t={}),new xa(this,e,t.unique,t.removed)):new xa(this)},nodes:function(e){var t=this.$((function(e){return e.isNode()}));return e?t.filter(e):t},edges:function(e){var t=this.$((function(e){return e.isEdge()}));return e?t.filter(e):t},$:function(e){var t=this._private.elements;return e?t.filter(e):t.spawnSelf()},mutableElements:function(){return this._private.elements}};qa.elements=qa.filter=qa.$;var Wa={},$a="t";Wa.apply=function(e){for(var t=this,n=t._private.cy.collection(),r=0;r0;if(p||d&&f){var h=void 0;p&&f||p?h=c.properties:f&&(h=c.mappedProperties);for(var m=0;m1&&(g=1),s.color){var E=i.valueMin[0],S=i.valueMax[0],T=i.valueMin[1],C=i.valueMax[1],x=i.valueMin[2],w=i.valueMax[2],O=null==i.valueMin[3]?1:i.valueMin[3],N=null==i.valueMax[3]?1:i.valueMax[3],R=[Math.round(E+(S-E)*g),Math.round(T+(C-T)*g),Math.round(x+(w-x)*g),Math.round(O+(N-O)*g)];n={bypass:i.bypass,name:i.name,value:R,strValue:"rgb("+R[0]+", "+R[1]+", "+R[2]+")"}}else{if(!s.number)return!1;var I=i.valueMin+(i.valueMax-i.valueMin)*g;n=this.parse(i.name,I,i.bypass,p)}if(!n)return m(),!1;n.mapping=i,i=n;break;case o.data:for(var A=i.field.split("."),k=d.data,M=0;M0&&a>0){for(var s={},l=!1,c=0;c0?e.delayAnimation(o).play().promise().then(t):t()})).then((function(){return e.animation({style:s,duration:a,easing:e.pstyle("transition-timing-function").value,queue:!1}).play().promise()})).then((function(){n.removeBypasses(e,i),e.emitAndNotify("style"),r.transitioning=!1}))}else r.transitioning&&(this.removeBypasses(e,i),e.emitAndNotify("style"),r.transitioning=!1)},Wa.checkTrigger=function(e,t,n,r,i,a){var o=this.properties[t],s=i(o);null!=s&&s(n,r)&&a(o)},Wa.checkZOrderTrigger=function(e,t,n,r){var i=this;this.checkTrigger(e,t,n,r,(function(e){return e.triggersZOrder}),(function(){i._private.cy.notify("zorder",e)}))},Wa.checkBoundsTrigger=function(e,t,n,r){this.checkTrigger(e,t,n,r,(function(e){return e.triggersBounds}),(function(i){e.dirtyCompoundBoundsCache(),e.dirtyBoundingBoxCache(),!i.triggersBoundsOfParallelBeziers||("curve-style"!==t||"bezier"!==n&&"bezier"!==r)&&("display"!==t||"none"!==n&&"none"!==r)||e.parallelEdges().forEach((function(e){e.isBundledBezier()&&e.dirtyBoundingBoxCache()}))}))},Wa.checkTriggers=function(e,t,n,r){e.dirtyStyleCache(),this.checkZOrderTrigger(e,t,n,r),this.checkBoundsTrigger(e,t,n,r)};var Ka={applyBypass:function(e,t,n,r){var i=[];if("*"===t||"**"===t){if(void 0!==n)for(var a=0;at.length?a.substr(t.length):""}function s(){n=n.length>r.length?n.substr(r.length):""}for(a=a.replace(/[/][*](\s|.)+?[*][/]/g,"");;){if(a.match(/^\s*$/))break;var l=a.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!l){Ie("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+a);break}t=l[0];var c=l[1];if("core"!==c)if(new $r(c).invalid){Ie("Skipping parsing of block: Invalid selector found in string stylesheet: "+c),o();continue}var u=l[2],d=!1;n=u;for(var p=[];;){if(n.match(/^\s*$/))break;var f=n.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!f){Ie("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+u),d=!0;break}r=f[0];var h=f[1],m=f[2];if(this.properties[h])i.parse(h,m)?(p.push({name:h,val:m}),s()):(Ie("Skipping property: Invalid property definition in: "+r),s());else Ie("Skipping property: Invalid property name in: "+r),s()}if(d){o();break}i.selector(c);for(var g=0;g=7&&"d"===t[0]&&(c=new RegExp(s.data.regex).exec(t))){if(n)return!1;var p=s.data;return{name:e,value:c,strValue:""+t,mapped:p,field:c[1],bypass:n}}if(t.length>=10&&"m"===t[0]&&(u=new RegExp(s.mapData.regex).exec(t))){if(n)return!1;if(d.multiple)return!1;var f=s.mapData;if(!d.color&&!d.number)return!1;var h=this.parse(e,u[4]);if(!h||h.mapped)return!1;var m=this.parse(e,u[5]);if(!m||m.mapped)return!1;if(h.pfValue===m.pfValue||h.strValue===m.strValue)return Ie("`"+e+": "+t+"` is not a valid mapper because the output range is zero; converting to `"+e+": "+h.strValue+"`"),this.parse(e,h.strValue);if(d.color){var g=h.value,_=m.value;if(g[0]===_[0]&&g[1]===_[1]&&g[2]===_[2]&&(g[3]===_[3]||(null==g[3]||1===g[3])&&(null==_[3]||1===_[3])))return!1}return{name:e,value:u,strValue:""+t,mapped:f,field:u[1],fieldMin:parseFloat(u[2]),fieldMax:parseFloat(u[3]),valueMin:h.value,valueMax:m.value,bypass:n}}}if(d.multiple&&"multiple"!==r){var v;if(v=l?t.split(/\s+/):A(t)?t:[t],d.evenMultiple&&v.length%2!==0)return null;for(var y=[],b=[],E=[],S="",T=!1,C=0;C0?" ":"")+x.strValue}return d.validate&&!d.validate(y,b)?null:d.singleEnum&&T?1===y.length&&R(y[0])?{name:e,value:y[0],strValue:y[0],bypass:n}:null:{name:e,value:y,pfValue:E,strValue:S,bypass:n,units:b}}var w,O,N=function(){for(var r=0;rd.max||d.strictMax&&t===d.max))return null;var F={name:e,value:t,strValue:""+t+(k||""),units:k,bypass:n};return d.unitless||"px"!==k&&"em"!==k?F.pfValue=t:F.pfValue="px"!==k&&k?this.getEmSizeInPixels()*t:t,"ms"!==k&&"s"!==k||(F.pfValue="ms"===k?t:1e3*t),"deg"!==k&&"rad"!==k||(F.pfValue="rad"===k?t:(w=t,Math.PI*w/180)),"%"===k&&(F.pfValue=t/100),F}if(d.propList){var B=[],U=""+t;if("none"===U);else{for(var G=U.split(/\s*,\s*|\s+/),z=0;z0&&l>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0)return{zoom:o=(o=(o=Math.min((s-2*t)/n.w,(l-2*t)/n.h))>this._private.maxZoom?this._private.maxZoom:o)=n.minZoom&&(n.maxZoom=t),this},minZoom:function(e){return void 0===e?this._private.minZoom:this.zoomRange({min:e})},maxZoom:function(e){return void 0===e?this._private.maxZoom:this.zoomRange({max:e})},getZoomedViewport:function(e){var t,n,r=this._private,i=r.pan,a=r.zoom,o=!1;if(r.zoomingEnabled||(o=!0),D(e)?n=e:k(e)&&(n=e.level,null!=e.position?t=at(e.position,a,i):null!=e.renderedPosition&&(t=e.renderedPosition),null==t||r.panningEnabled||(o=!0)),n=(n=n>r.maxZoom?r.maxZoom:n)t.maxZoom||!t.zoomingEnabled?a=!0:(t.zoom=s,i.push("zoom"))}if(r&&(!a||!e.cancelOnFailedZoom)&&t.panningEnabled){var l=e.pan;D(l.x)&&(t.pan.x=l.x,o=!1),D(l.y)&&(t.pan.y=l.y,o=!1),o||i.push("pan")}return i.length>0&&(i.push("viewport"),this.emit(i.join(" ")),this.notify("viewport")),this},center:function(e){var t=this.getCenterPan(e);return t&&(this._private.pan=t,this.emit("pan viewport"),this.notify("viewport")),this},getCenterPan:function(e,t){if(this._private.panningEnabled){if(R(e)){var n=e;e=this.mutableElements().filter(n)}else P(e)||(e=this.mutableElements());if(0!==e.length){var r=e.boundingBox(),i=this.width(),a=this.height();return{x:(i-(t=void 0===t?this._private.zoom:t)*(r.x1+r.x2))/2,y:(a-t*(r.y1+r.y2))/2}}}},reset:function(){return this._private.panningEnabled&&this._private.zoomingEnabled?(this.viewport({pan:{x:0,y:0},zoom:1}),this):this},invalidateSize:function(){this._private.sizeCache=null},size:function(){var e=this._private,t=e.container;return e.sizeCache=e.sizeCache||(t?function(){var e=S.getComputedStyle(t),n=function(t){return parseFloat(e.getPropertyValue(t))};return{width:t.clientWidth-n("padding-left")-n("padding-right"),height:t.clientHeight-n("padding-top")-n("padding-bottom")}}():{width:1,height:1})},width:function(){return this.size().width},height:function(){return this.size().height},extent:function(){var e=this._private.pan,t=this._private.zoom,n=this.renderedExtent(),r={x1:(n.x1-e.x)/t,x2:(n.x2-e.x)/t,y1:(n.y1-e.y)/t,y2:(n.y2-e.y)/t};return r.w=r.x2-r.x1,r.h=r.y2-r.y1,r},renderedExtent:function(){var e=this.width(),t=this.height();return{x1:0,y1:0,x2:e,y2:t,w:e,h:t}},multiClickDebounceTime:function(e){return e?(this._private.multiClickDebounceTime=e,this):this._private.multiClickDebounceTime}};oo.centre=oo.center,oo.autolockNodes=oo.autolock,oo.autoungrabifyNodes=oo.autoungrabify;var so={data:dr.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:dr.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:dr.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:dr.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};so.attr=so.data,so.removeAttr=so.removeData;var lo=function(e){var t=this,n=(e=J({},e)).container;n&&!M(n)&&M(n[0])&&(n=n[0]);var r=n?n._cyreg:null;(r=r||{})&&r.cy&&(r.cy.destroy(),r={});var i=r.readies=r.readies||[];n&&(n._cyreg=r),r.cy=t;var a=void 0!==S&&void 0!==n&&!e.headless,o=e;o.layout=J({name:a?"grid":"null"},o.layout),o.renderer=J({name:a?"canvas":"null"},o.renderer);var s=function(e,t,n){return void 0!==t?t:void 0!==n?n:e},l=this._private={container:n,ready:!1,options:o,elements:new xa(this),listeners:[],aniEles:new xa(this),data:o.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:s(!0,o.zoomingEnabled),userZoomingEnabled:s(!0,o.userZoomingEnabled),panningEnabled:s(!0,o.panningEnabled),userPanningEnabled:s(!0,o.userPanningEnabled),boxSelectionEnabled:s(!0,o.boxSelectionEnabled),autolock:s(!1,o.autolock,o.autolockNodes),autoungrabify:s(!1,o.autoungrabify,o.autoungrabifyNodes),autounselectify:s(!1,o.autounselectify),styleEnabled:void 0===o.styleEnabled?a:o.styleEnabled,zoom:D(o.zoom)?o.zoom:1,pan:{x:k(o.pan)&&D(o.pan.x)?o.pan.x:0,y:k(o.pan)&&D(o.pan.y)?o.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:s(250,o.multiClickDebounceTime)};this.createEmitter(),this.selectionType(o.selectionType),this.zoomRange({min:o.minZoom,max:o.maxZoom});l.styleEnabled&&t.setStyle([]);var c=J({},o,o.renderer);t.initRenderer(c);!function(e,t){if(e.some(z))return ar.all(e).then(t);t(e)}([o.style,o.elements],(function(e){var n=e[0],a=e[1];l.styleEnabled&&t.style().append(n),function(e,n,r){t.notifications(!1);var i=t.mutableElements();i.length>0&&i.remove(),null!=e&&(k(e)||A(e))&&t.add(e),t.one("layoutready",(function(e){t.notifications(!0),t.emit(e),t.one("load",n),t.emitAndNotify("load")})).one("layoutstop",(function(){t.one("done",r),t.emit("done")}));var a=J({},t._private.options.layout);a.eles=t.elements(),t.layout(a).run()}(a,(function(){t.startAnimationLoop(),l.ready=!0,I(o.ready)&&t.on("ready",o.ready);for(var e=0;e0,c=_t(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(P(n.roots))e=n.roots;else if(A(n.roots)){for(var u=[],d=0;d0;){var I=w.shift(),k=x(I,O);if(k)I.outgoers().filter((function(e){return e.isNode()&&i.has(e)})).forEach(N);else if(null===k){Ie("Detected double maximal shift for node `"+I.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}C();var D=0;if(n.avoidOverlap)for(var M=0;M0&&_[0].length<=3?l/2:0),d=2*Math.PI/_[r].length*i;return 0===r&&1===_[0].length&&(u=1),{x:q+u*Math.cos(d),y:W+u*Math.sin(d)}}return{x:q+(i+1-(a+1)/2)*o,y:(r+1)*s}})),this};var mo={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function go(e){this.options=J({},mo,e)}go.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,i=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,a=r.nodes().not(":parent");t.sort&&(a=a.sort(t.sort));for(var o,s=_t(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),l=s.x1+s.w/2,c=s.y1+s.h/2,u=(void 0===t.sweep?2*Math.PI-2*Math.PI/a.length:t.sweep)/Math.max(1,a.length-1),d=0,p=0;p1&&t.avoidOverlap){d*=1.75;var g=Math.cos(u)-Math.cos(0),_=Math.sin(u)-Math.sin(0),v=Math.sqrt(d*d/(g*g+_*_));o=Math.max(v,o)}return r.nodes().layoutPositions(this,t,(function(e,n){var r=t.startAngle+n*u*(i?1:-1),a=o*Math.cos(r),s=o*Math.sin(r);return{x:l+a,y:c+s}})),this};var _o,vo={fit:!0,padding:30,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:function(e){return e.degree()},levelWidth:function(e){return e.maxDegree()/4},animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function yo(e){this.options=J({},vo,e)}yo.prototype.run=function(){for(var e=this.options,t=e,n=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,r=e.cy,i=t.eles,a=i.nodes().not(":parent"),o=_t(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),s=o.x1+o.w/2,l=o.y1+o.h/2,c=[],u=0,d=0;d0)Math.abs(v[0].value-b.value)>=g&&(v=[],_.push(v));v.push(b)}var E=u+t.minNodeSpacing;if(!t.avoidOverlap){var S=_.length>0&&_[0].length>1,T=(Math.min(o.w,o.h)/2-E)/(_.length+S?1:0);E=Math.min(E,T)}for(var C=0,x=0;x<_.length;x++){var w=_[x],O=void 0===t.sweep?2*Math.PI-2*Math.PI/w.length:t.sweep,N=w.dTheta=O/Math.max(1,w.length-1);if(w.length>1&&t.avoidOverlap){var R=Math.cos(N)-Math.cos(0),I=Math.sin(N)-Math.sin(0),A=Math.sqrt(E*E/(R*R+I*I));C=Math.max(A,C)}w.r=C,C+=E}if(t.equidistant){for(var k=0,D=0,M=0;M<_.length;M++){var P=_[M].r-D;k=Math.max(k,P)}D=0;for(var L=0;L<_.length;L++){var F=_[L];0===L&&(D=F.r),F.r=D,D+=k}}for(var B={},U=0;U<_.length;U++)for(var G=_[U],z=G.dTheta,j=G.r,H=0;H=e.numIter)&&(No(r,e),r.temperature=r.temperature*e.coolingFactor,!(r.temperature=e.animationThreshold&&a(),se(t)):(Go(r,e),s())}()}else{for(;c;)c=o(l),l++;Go(r,e),s()}return this},Eo.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this},Eo.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var So=function(e,t,n){for(var r=n.eles.edges(),i=n.eles.nodes(),a={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:i.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:r.size(),temperature:n.initialTemp,clientWidth:e.width(),clientHeight:e.width(),boundingBox:_t(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()})},o=n.eles.components(),s={},l=0;l0){a.graphSet.push(b);for(l=0;lr.count?0:r.graph},Co=function e(t,n,r,i){var a=i.graphSet[r];if(-10)var s=(c=r.nodeOverlap*o)*i/(m=Math.sqrt(i*i+a*a)),l=c*a/m;else{var c,u=Do(e,i,a),d=Do(t,-1*i,-1*a),p=d.x-u.x,f=d.y-u.y,h=p*p+f*f,m=Math.sqrt(h);s=(c=(e.nodeRepulsion+t.nodeRepulsion)/h)*p/m,l=c*f/m}e.isLocked||(e.offsetX-=s,e.offsetY-=l),t.isLocked||(t.offsetX+=s,t.offsetY+=l)}},ko=function(e,t,n,r){if(n>0)var i=e.maxX-t.minX;else i=t.maxX-e.minX;if(r>0)var a=e.maxY-t.minY;else a=t.maxY-e.minY;return i>=0&&a>=0?Math.sqrt(i*i+a*a):0},Do=function(e,t,n){var r=e.positionX,i=e.positionY,a=e.height||1,o=e.width||1,s=n/t,l=a/o,c={};return 0===t&&0n?(c.x=r,c.y=i+a/2,c):0t&&-1*l<=s&&s<=l?(c.x=r-o/2,c.y=i-o*n/2/t,c):0=l)?(c.x=r+a*t/2/n,c.y=i+a/2,c):0>n&&(s<=-1*l||s>=l)?(c.x=r-a*t/2/n,c.y=i-a/2,c):c},Mo=function(e,t){for(var n=0;n1){var h=t.gravity*d/f,m=t.gravity*p/f;u.offsetX+=h,u.offsetY+=m}}}}},Lo=function(e,t){var n=[],r=0,i=-1;for(n.push.apply(n,e.graphSet[0]),i+=e.graphSet[0].length;r<=i;){var a=n[r++],o=e.idToIndex[a],s=e.layoutNodes[o],l=s.children;if(0n)var i={x:n*e/r,y:n*t/r};else i={x:e,y:t};return i},Uo=function e(t,n){var r=t.parentId;if(null!=r){var i=n.layoutNodes[n.idToIndex[r]],a=!1;return(null==i.maxX||t.maxX+i.padRight>i.maxX)&&(i.maxX=t.maxX+i.padRight,a=!0),(null==i.minX||t.minX-i.padLefti.maxY)&&(i.maxY=t.maxY+i.padBottom,a=!0),(null==i.minY||t.minY-i.padToph&&(d+=f+t.componentSpacing,u=0,p=0,f=0)}}},zo={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:function(e){},sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function jo(e){this.options=J({},zo,e)}jo.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,i=r.nodes().not(":parent");t.sort&&(i=i.sort(t.sort));var a=_t(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()});if(0===a.h||0===a.w)r.nodes().layoutPositions(this,t,(function(e){return{x:a.x1,y:a.y1}}));else{var o=i.size(),s=Math.sqrt(o*a.h/a.w),l=Math.round(s),c=Math.round(a.w/a.h*s),u=function(e){if(null==e)return Math.min(l,c);Math.min(l,c)==l?l=e:c=e},d=function(e){if(null==e)return Math.max(l,c);Math.max(l,c)==l?l=e:c=e},p=t.rows,f=null!=t.cols?t.cols:t.columns;if(null!=p&&null!=f)l=p,c=f;else if(null!=p&&null==f)l=p,c=Math.ceil(o/l);else if(null==p&&null!=f)c=f,l=Math.ceil(o/c);else if(c*l>o){var h=u(),m=d();(h-1)*m>=o?u(h-1):(m-1)*h>=o&&d(m-1)}else for(;c*l=o?d(_+1):u(g+1)}var v=a.w/c,y=a.h/l;if(t.condense&&(v=0,y=0),t.avoidOverlap)for(var b=0;b=c&&(A=0,I++)},D={},M=0;M(r=Rt(e,t,b[E],b[E+1],b[E+2],b[E+3])))return g(n,r),!0}else if("bezier"===a.edgeType||"multibezier"===a.edgeType||"self"===a.edgeType||"compound"===a.edgeType)for(b=a.allpts,E=0;E+5(r=Nt(e,t,b[E],b[E+1],b[E+2],b[E+3],b[E+4],b[E+5])))return g(n,r),!0;v=v||i.source,y=y||i.target;var S=o.getArrowWidth(l,u),T=[{name:"source",x:a.arrowStartX,y:a.arrowStartY,angle:a.srcArrowAngle},{name:"target",x:a.arrowEndX,y:a.arrowEndY,angle:a.tgtArrowAngle},{name:"mid-source",x:a.midX,y:a.midY,angle:a.midsrcArrowAngle},{name:"mid-target",x:a.midX,y:a.midY,angle:a.midtgtArrowAngle}];for(E=0;E0&&(_(v),_(y))}function y(e,t,n){return Be(e,t,n)}function b(n,r){var i,a=n._private,o=h;i=r?r+"-":"",n.boundingBox();var s=a.labelBounds[r||"main"],l=n.pstyle(i+"label").value;if("yes"===n.pstyle("text-events").strValue&&l){var c=y(a.rscratch,"labelX",r),u=y(a.rscratch,"labelY",r),d=y(a.rscratch,"labelAngle",r),p=n.pstyle(i+"text-margin-x").pfValue,f=n.pstyle(i+"text-margin-y").pfValue,m=s.x1-o-p,_=s.x2+o-p,v=s.y1-o-f,b=s.y2+o-f;if(d){var E=Math.cos(d),S=Math.sin(d),T=function(e,t){return{x:(e-=c)*E-(t-=u)*S+c,y:e*S+t*E+u}},C=T(m,v),x=T(m,b),w=T(_,v),O=T(_,b),N=[C.x+p,C.y+f,w.x+p,w.y+f,O.x+p,O.y+f,x.x+p,x.y+f];if(It(e,t,N))return g(n),!0}else if(Tt(s,e,t))return g(n),!0}}n&&(l=l.interactive);for(var E=l.length-1;E>=0;E--){var S=l[E];S.isNode()?_(S)||b(S):v(S)||b(S)||b(S,"source")||b(S,"target")}return c},getAllInBox:function(e,t,n,r){for(var i,a,o=this.getCachedZSortedEles().interactive,s=[],l=Math.min(e,n),c=Math.max(e,n),u=Math.min(t,r),d=Math.max(t,r),p=_t({x1:e=l,y1:t=u,x2:n=c,y2:r=d}),f=0;f0?Math.max(e-t,0):Math.min(e+t,0)},O=w(C,S),N=w(x,T),R=!1;"auto"===g?m=Math.abs(O)>Math.abs(N)?i:r:g===l||g===s?(m=r,R=!0):g!==a&&g!==o||(m=i,R=!0);var I,A=m===r,k=A?N:O,D=A?x:C,M=ut(D),P=!1;(R&&(v||b)||!(g===s&&D<0||g===l&&D>0||g===a&&D>0||g===o&&D<0)||(k=(M*=-1)*Math.abs(k),P=!0),v)?I=(y<0?1+y:y)*k:I=(y<0?k:0)+y*M;var L=function(e){return Math.abs(e)=Math.abs(k)},F=L(I),B=L(Math.abs(k)-Math.abs(I));if((F||B)&&!P)if(A){var U=Math.abs(D)<=d/2,G=Math.abs(C)<=p/2;if(U){var z=(c.x1+c.x2)/2,j=c.y1,H=c.y2;n.segpts=[z,j,z,H]}else if(G){var Z=(c.y1+c.y2)/2,Y=c.x1,V=c.x2;n.segpts=[Y,Z,V,Z]}else n.segpts=[c.x1,c.y2]}else{var q=Math.abs(D)<=u/2,W=Math.abs(x)<=f/2;if(q){var $=(c.y1+c.y2)/2,K=c.x1,Q=c.x2;n.segpts=[K,$,Q,$]}else if(W){var X=(c.x1+c.x2)/2,J=c.y1,ee=c.y2;n.segpts=[X,J,X,ee]}else n.segpts=[c.x2,c.y1]}else if(A){var te=c.y1+I+(h?d/2*M:0),ne=c.x1,re=c.x2;n.segpts=[ne,te,re,te]}else{var ie=c.x1+I+(h?u/2*M:0),ae=c.y1,oe=c.y2;n.segpts=[ie,ae,ie,oe]}},ns.tryToCorrectInvalidPoints=function(e,t){var n=e._private.rscratch;if("bezier"===n.edgeType){var r=t.srcPos,i=t.tgtPos,a=t.srcW,o=t.srcH,s=t.tgtW,l=t.tgtH,c=t.srcShape,u=t.tgtShape,d=!D(n.startX)||!D(n.startY),p=!D(n.arrowStartX)||!D(n.arrowStartY),f=!D(n.endX)||!D(n.endY),h=!D(n.arrowEndX)||!D(n.arrowEndY),m=3*(this.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.arrowShapeWidth),g=dt({x:n.ctrlpts[0],y:n.ctrlpts[1]},{x:n.startX,y:n.startY}),_=gp.poolIndex()){var f=d;d=p,p=f}var h=s.srcPos=d.position(),m=s.tgtPos=p.position(),g=s.srcW=d.outerWidth(),_=s.srcH=d.outerHeight(),v=s.tgtW=p.outerWidth(),y=s.tgtH=p.outerHeight(),b=s.srcShape=n.nodeShapes[t.getNodeShape(d)],E=s.tgtShape=n.nodeShapes[t.getNodeShape(p)];s.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var S=0;S0){var j=c,H=pt(j,st(t)),Z=pt(j,st(z)),Y=H;if(Z2)pt(j,{x:z[2],y:z[3]})0){var ie=u,ae=pt(ie,st(t)),oe=pt(ie,st(re)),se=ae;if(oe2)pt(ie,{x:re[2],y:re[3]})=c||v){u={cp:m,segment:_};break}}if(u)break}var y=u.cp,b=u.segment,E=(c-p)/b.length,S=b.t1-b.t0,T=s?b.t0+S*E:b.t1-S*E;T=gt(0,T,1),t=mt(y.p0,y.p1,y.p2,T),i=function(e,t,n,r){var i=gt(0,r-.001,1),a=gt(0,r+.001,1),o=mt(e,t,n,i),s=mt(e,t,n,a);return cs(o,s)}(y.p0,y.p1,y.p2,T);break;case"straight":case"segments":case"haystack":for(var C,x,w,O,N=0,R=r.allpts.length,I=0;I+3=c));I+=2);var A=(c-x)/C;A=gt(0,A,1),t=function(e,t,n,r){var i=t.x-e.x,a=t.y-e.y,o=dt(e,t),s=i/o,l=a/o;return n=null==n?0:n,r=null!=r?r:n*o,{x:e.x+s*r,y:e.y+l*r}}(w,O,A),i=cs(w,O)}o("labelX",n,t.x),o("labelY",n,t.y),o("labelAutoAngle",n,i)}};c("source"),c("target"),this.applyLabelDimensions(e)}},ss.applyLabelDimensions=function(e){this.applyPrefixedLabelDimensions(e),e.isEdge()&&(this.applyPrefixedLabelDimensions(e,"source"),this.applyPrefixedLabelDimensions(e,"target"))},ss.applyPrefixedLabelDimensions=function(e,t){var n=e._private,r=this.getLabelText(e,t),i=this.calculateLabelDimensions(e,r),a=e.pstyle("line-height").pfValue,o=e.pstyle("text-wrap").strValue,s=Be(n.rscratch,"labelWrapCachedLines",t)||[],l="wrap"!==o?1:Math.max(s.length,1),c=i.height/l,u=c*a,d=i.width,p=i.height+(l-1)*(a-1)*c;Ue(n.rstyle,"labelWidth",t,d),Ue(n.rscratch,"labelWidth",t,d),Ue(n.rstyle,"labelHeight",t,p),Ue(n.rscratch,"labelHeight",t,p),Ue(n.rscratch,"labelLineHeight",t,u)},ss.getLabelText=function(e,t){var n=e._private,r=t?t+"-":"",i=e.pstyle(r+"label").strValue,a=e.pstyle("text-transform").value,o=function(e,r){return r?(Ue(n.rscratch,e,t,r),r):Be(n.rscratch,e,t)};if(!i)return"";"none"==a||("uppercase"==a?i=i.toUpperCase():"lowercase"==a&&(i=i.toLowerCase()));var s=e.pstyle("text-wrap").value;if("wrap"===s){var l=o("labelKey");if(null!=l&&o("labelWrapKey")===l)return o("labelWrapCachedText");for(var c=i.split("\n"),u=e.pstyle("text-max-width").pfValue,d="anywhere"===e.pstyle("text-overflow-wrap").value,p=[],f=/[\s\u200b]+/,h=d?"":" ",m=0;mu){for(var y=g.split(f),b="",E=0;EC)break;x+=i[O],O===i.length-1&&(w=!0)}return w||(x+="\u2026"),x}return i},ss.getLabelJustification=function(e){var t=e.pstyle("text-justification").strValue,n=e.pstyle("text-halign").strValue;if("auto"!==t)return t;if(!e.isNode())return"center";switch(n){case"left":return"right";case"right":return"left";default:return"center"}},ss.calculateLabelDimensions=function(e,t){var n=_e(t,e._private.labelDimsKey),r=this.labelDimCache||(this.labelDimCache=[]),i=r[n];if(null!=i)return i;var a=e.pstyle("font-style").strValue,o=e.pstyle("font-size").pfValue,s=e.pstyle("font-family").strValue,l=e.pstyle("font-weight").strValue,c=this.labelCalcCanvas,u=this.labelCalcCanvasContext;if(!c){c=this.labelCalcCanvas=document.createElement("canvas"),u=this.labelCalcCanvasContext=c.getContext("2d");var d=c.style;d.position="absolute",d.left="-9999px",d.top="-9999px",d.zIndex="-1",d.visibility="hidden",d.pointerEvents="none"}u.font="".concat(a," ").concat(l," ").concat(o,"px ").concat(s);for(var p=0,f=0,h=t.split("\n"),m=0;m1&&void 0!==arguments[1])||arguments[1];if(t.merge(e),n)for(var r=0;r=e.desktopTapThreshold2}var w=r(t);g&&(e.hoverData.tapholdCancelled=!0);a=!0,n(m,["mousemove","vmousemove","tapdrag"],t,{x:u[0],y:u[1]});var O=function(){e.data.bgActivePosistion=void 0,e.hoverData.selecting||o.emit({originalEvent:t,type:"boxstart",position:{x:u[0],y:u[1]}}),h[4]=1,e.hoverData.selecting=!0,e.redrawHint("select",!0),e.redraw()};if(3===e.hoverData.which){if(g){var N={originalEvent:t,type:"cxtdrag",position:{x:u[0],y:u[1]}};v?v.emit(N):o.emit(N),e.hoverData.cxtDragged=!0,e.hoverData.cxtOver&&m===e.hoverData.cxtOver||(e.hoverData.cxtOver&&e.hoverData.cxtOver.emit({originalEvent:t,type:"cxtdragout",position:{x:u[0],y:u[1]}}),e.hoverData.cxtOver=m,m&&m.emit({originalEvent:t,type:"cxtdragover",position:{x:u[0],y:u[1]}}))}}else if(e.hoverData.dragging){if(a=!0,o.panningEnabled()&&o.userPanningEnabled()){var R;if(e.hoverData.justStartedPan){var I=e.hoverData.mdownPos;R={x:(u[0]-I[0])*s,y:(u[1]-I[1])*s},e.hoverData.justStartedPan=!1}else R={x:y[0]*s,y:y[1]*s};o.panBy(R),o.emit("dragpan"),e.hoverData.dragged=!0}u=e.projectIntoViewport(t.clientX,t.clientY)}else if(1!=h[4]||null!=v&&!v.pannable()){if(v&&v.pannable()&&v.active()&&v.unactivate(),v&&v.grabbed()||m==_||(_&&n(_,["mouseout","tapdragout"],t,{x:u[0],y:u[1]}),m&&n(m,["mouseover","tapdragover"],t,{x:u[0],y:u[1]}),e.hoverData.last=m),v)if(g){if(o.boxSelectionEnabled()&&w)v&&v.grabbed()&&(d(b),v.emit("freeon"),b.emit("free"),e.dragData.didDrag&&(v.emit("dragfreeon"),b.emit("dragfree"))),O();else if(v&&v.grabbed()&&e.nodeIsDraggable(v)){var A=!e.dragData.didDrag;A&&e.redrawHint("eles",!0),e.dragData.didDrag=!0,e.hoverData.draggingEles||l(b,{inDragLayer:!0});var k={x:0,y:0};if(D(y[0])&&D(y[1])&&(k.x+=y[0],k.y+=y[1],A)){var M=e.hoverData.dragDelta;M&&D(M[0])&&D(M[1])&&(k.x+=M[0],k.y+=M[1])}e.hoverData.draggingEles=!0,b.silentShift(k).emit("position drag"),e.redrawHint("drag",!0),e.redraw()}}else!function(){var t=e.hoverData.dragDelta=e.hoverData.dragDelta||[];0===t.length?(t.push(y[0]),t.push(y[1])):(t[0]+=y[0],t[1]+=y[1])}();a=!0}else if(g){if(e.hoverData.dragging||!o.boxSelectionEnabled()||!w&&o.panningEnabled()&&o.userPanningEnabled()){if(!e.hoverData.selecting&&o.panningEnabled()&&o.userPanningEnabled()){i(v,e.hoverData.downs)&&(e.hoverData.dragging=!0,e.hoverData.justStartedPan=!0,h[4]=0,e.data.bgActivePosistion=st(p),e.redrawHint("select",!0),e.redraw())}}else O();v&&v.pannable()&&v.active()&&v.unactivate()}return h[2]=u[0],h[3]=u[1],a?(t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),!1):void 0}}),!1),e.registerBinding(window,"mouseup",(function(i){if(e.hoverData.capture){e.hoverData.capture=!1;var a=e.cy,o=e.projectIntoViewport(i.clientX,i.clientY),s=e.selection,l=e.findNearestElement(o[0],o[1],!0,!1),c=e.dragData.possibleDragElements,u=e.hoverData.down,p=r(i);if(e.data.bgActivePosistion&&(e.redrawHint("select",!0),e.redraw()),e.hoverData.tapholdCancelled=!0,e.data.bgActivePosistion=void 0,u&&u.unactivate(),3===e.hoverData.which){var f={originalEvent:i,type:"cxttapend",position:{x:o[0],y:o[1]}};if(u?u.emit(f):a.emit(f),!e.hoverData.cxtDragged){var h={originalEvent:i,type:"cxttap",position:{x:o[0],y:o[1]}};u?u.emit(h):a.emit(h)}e.hoverData.cxtDragged=!1,e.hoverData.which=null}else if(1===e.hoverData.which){if(n(l,["mouseup","tapend","vmouseup"],i,{x:o[0],y:o[1]}),e.dragData.didDrag||e.hoverData.dragged||e.hoverData.selecting||e.hoverData.isOverThresholdDrag||(n(u,["click","tap","vclick"],i,{x:o[0],y:o[1]}),y=!1,i.timeStamp-b<=a.multiClickDebounceTime()?(v&&clearTimeout(v),y=!0,b=null,n(u,["dblclick","dbltap","vdblclick"],i,{x:o[0],y:o[1]})):(v=setTimeout((function(){y||n(u,["oneclick","onetap","voneclick"],i,{x:o[0],y:o[1]})}),a.multiClickDebounceTime()),b=i.timeStamp)),null!=u||e.dragData.didDrag||e.hoverData.selecting||e.hoverData.dragged||r(i)||(a.$(t).unselect(["tapunselect"]),c.length>0&&e.redrawHint("eles",!0),e.dragData.possibleDragElements=c=a.collection()),l!=u||e.dragData.didDrag||e.hoverData.selecting||null!=l&&l._private.selectable&&(e.hoverData.dragging||("additive"===a.selectionType()||p?l.selected()?l.unselect(["tapunselect"]):l.select(["tapselect"]):p||(a.$(t).unmerge(l).unselect(["tapunselect"]),l.select(["tapselect"]))),e.redrawHint("eles",!0)),e.hoverData.selecting){var m=a.collection(e.getAllInBox(s[0],s[1],s[2],s[3]));e.redrawHint("select",!0),m.length>0&&e.redrawHint("eles",!0),a.emit({type:"boxend",originalEvent:i,position:{x:o[0],y:o[1]}});var g=function(e){return e.selectable()&&!e.selected()};"additive"===a.selectionType()||p||a.$(t).unmerge(m).unselect(),m.emit("box").stdFilter(g).select().emit("boxselect"),e.redraw()}if(e.hoverData.dragging&&(e.hoverData.dragging=!1,e.redrawHint("select",!0),e.redrawHint("eles",!0),e.redraw()),!s[4]){e.redrawHint("drag",!0),e.redrawHint("eles",!0);var _=u&&u.grabbed();d(c),_&&(u.emit("freeon"),c.emit("free"),e.dragData.didDrag&&(u.emit("dragfreeon"),c.emit("dragfree")))}}s[4]=0,e.hoverData.down=null,e.hoverData.cxtStarted=!1,e.hoverData.draggingEles=!1,e.hoverData.selecting=!1,e.hoverData.isOverThresholdDrag=!1,e.dragData.didDrag=!1,e.hoverData.dragged=!1,e.hoverData.dragDelta=[],e.hoverData.mdownPos=null,e.hoverData.mdownGPos=null}}),!1);var S,T,C,x,w,O,N,R,I,A,k,M,P,L=function(t){if(!e.scrollingPage){var n=e.cy,r=n.zoom(),i=n.pan(),a=e.projectIntoViewport(t.clientX,t.clientY),o=[a[0]*r+i.x,a[1]*r+i.y];if(e.hoverData.draggingEles||e.hoverData.dragging||e.hoverData.cxtStarted||0!==e.selection[4])t.preventDefault();else if(n.panningEnabled()&&n.userPanningEnabled()&&n.zoomingEnabled()&&n.userZoomingEnabled()){var s;t.preventDefault(),e.data.wheelZooming=!0,clearTimeout(e.data.wheelTimeout),e.data.wheelTimeout=setTimeout((function(){e.data.wheelZooming=!1,e.redrawHint("eles",!0),e.redraw()}),150),s=null!=t.deltaY?t.deltaY/-250:null!=t.wheelDeltaY?t.wheelDeltaY/1e3:t.wheelDelta/1e3,s*=e.wheelSensitivity,1===t.deltaMode&&(s*=33);var l=n.zoom()*Math.pow(10,s);"gesturechange"===t.type&&(l=e.gestureStartZoom*t.scale),n.zoom({level:l,renderedPosition:{x:o[0],y:o[1]}}),n.emit("gesturechange"===t.type?"pinchzoom":"scrollzoom")}}};e.registerBinding(e.container,"wheel",L,!0),e.registerBinding(window,"scroll",(function(t){e.scrollingPage=!0,clearTimeout(e.scrollingPageTimeout),e.scrollingPageTimeout=setTimeout((function(){e.scrollingPage=!1}),250)}),!0),e.registerBinding(e.container,"gesturestart",(function(t){e.gestureStartZoom=e.cy.zoom(),e.hasTouchStarted||t.preventDefault()}),!0),e.registerBinding(e.container,"gesturechange",(function(t){e.hasTouchStarted||L(t)}),!0),e.registerBinding(e.container,"mouseout",(function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseout",position:{x:n[0],y:n[1]}})}),!1),e.registerBinding(e.container,"mouseover",(function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseover",position:{x:n[0],y:n[1]}})}),!1);var F,B,U,G,z,j,H,Z=function(e,t,n,r){return Math.sqrt((n-e)*(n-e)+(r-t)*(r-t))},Y=function(e,t,n,r){return(n-e)*(n-e)+(r-t)*(r-t)};if(e.registerBinding(e.container,"touchstart",F=function(t){if(e.hasTouchStarted=!0,E(t)){f(),e.touchData.capture=!0,e.data.bgActivePosistion=void 0;var r=e.cy,i=e.touchData.now,a=e.touchData.earlier;if(t.touches[0]){var s=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);i[0]=s[0],i[1]=s[1]}if(t.touches[1]){s=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY);i[2]=s[0],i[3]=s[1]}if(t.touches[2]){s=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);i[4]=s[0],i[5]=s[1]}if(t.touches[1]){e.touchData.singleTouchMoved=!0,d(e.dragData.touchDragEles);var u=e.findContainerClientCoords();I=u[0],A=u[1],k=u[2],M=u[3],S=t.touches[0].clientX-I,T=t.touches[0].clientY-A,C=t.touches[1].clientX-I,x=t.touches[1].clientY-A,P=0<=S&&S<=k&&0<=C&&C<=k&&0<=T&&T<=M&&0<=x&&x<=M;var p=r.pan(),h=r.zoom();w=Z(S,T,C,x),O=Y(S,T,C,x),R=[((N=[(S+C)/2,(T+x)/2])[0]-p.x)/h,(N[1]-p.y)/h];if(O<4e4&&!t.touches[2]){var m=e.findNearestElement(i[0],i[1],!0,!0),g=e.findNearestElement(i[2],i[3],!0,!0);return m&&m.isNode()?(m.activate().emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start=m):g&&g.isNode()?(g.activate().emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start=g):r.emit({originalEvent:t,type:"cxttapstart",position:{x:i[0],y:i[1]}}),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!0,e.touchData.cxtDragged=!1,e.data.bgActivePosistion=void 0,void e.redraw()}}if(t.touches[2])r.boxSelectionEnabled()&&t.preventDefault();else if(t.touches[1]);else if(t.touches[0]){var _=e.findNearestElements(i[0],i[1],!0,!0),v=_[0];if(null!=v&&(v.activate(),e.touchData.start=v,e.touchData.starts=_,e.nodeIsGrabbable(v))){var y=e.dragData.touchDragEles=r.collection(),b=null;e.redrawHint("eles",!0),e.redrawHint("drag",!0),v.selected()?(b=r.$((function(t){return t.selected()&&e.nodeIsGrabbable(t)})),l(b,{addToList:y})):c(v,{addToList:y}),o(v);var D=function(e){return{originalEvent:t,type:e,position:{x:i[0],y:i[1]}}};v.emit(D("grabon")),b?b.forEach((function(e){e.emit(D("grab"))})):v.emit(D("grab"))}n(v,["touchstart","tapstart","vmousedown"],t,{x:i[0],y:i[1]}),null==v&&(e.data.bgActivePosistion={x:s[0],y:s[1]},e.redrawHint("select",!0),e.redraw()),e.touchData.singleTouchMoved=!1,e.touchData.singleTouchStartTime=+new Date,clearTimeout(e.touchData.tapholdTimeout),e.touchData.tapholdTimeout=setTimeout((function(){!1!==e.touchData.singleTouchMoved||e.pinching||e.touchData.selecting||n(e.touchData.start,["taphold"],t,{x:i[0],y:i[1]})}),e.tapholdDuration)}if(t.touches.length>=1){for(var L=e.touchData.startPosition=[],F=0;F=e.touchTapThreshold2}if(r&&e.touchData.cxt){t.preventDefault();var b=t.touches[0].clientX-I,N=t.touches[0].clientY-A,k=t.touches[1].clientX-I,M=t.touches[1].clientY-A,L=Y(b,N,k,M);if(L/O>=2.25||L>=22500){e.touchData.cxt=!1,e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var F={originalEvent:t,type:"cxttapend",position:{x:s[0],y:s[1]}};e.touchData.start?(e.touchData.start.unactivate().emit(F),e.touchData.start=null):o.emit(F)}}if(r&&e.touchData.cxt){F={originalEvent:t,type:"cxtdrag",position:{x:s[0],y:s[1]}};e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.touchData.start?e.touchData.start.emit(F):o.emit(F),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxtDragged=!0;var B=e.findNearestElement(s[0],s[1],!0,!0);e.touchData.cxtOver&&B===e.touchData.cxtOver||(e.touchData.cxtOver&&e.touchData.cxtOver.emit({originalEvent:t,type:"cxtdragout",position:{x:s[0],y:s[1]}}),e.touchData.cxtOver=B,B&&B.emit({originalEvent:t,type:"cxtdragover",position:{x:s[0],y:s[1]}}))}else if(r&&t.touches[2]&&o.boxSelectionEnabled())t.preventDefault(),e.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,e.touchData.selecting||o.emit({originalEvent:t,type:"boxstart",position:{x:s[0],y:s[1]}}),e.touchData.selecting=!0,e.touchData.didSelect=!0,a[4]=1,a&&0!==a.length&&void 0!==a[0]?(a[2]=(s[0]+s[2]+s[4])/3,a[3]=(s[1]+s[3]+s[5])/3):(a[0]=(s[0]+s[2]+s[4])/3,a[1]=(s[1]+s[3]+s[5])/3,a[2]=(s[0]+s[2]+s[4])/3+1,a[3]=(s[1]+s[3]+s[5])/3+1),e.redrawHint("select",!0),e.redraw();else if(r&&t.touches[1]&&!e.touchData.didSelect&&o.zoomingEnabled()&&o.panningEnabled()&&o.userZoomingEnabled()&&o.userPanningEnabled()){if(t.preventDefault(),e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),ee=e.dragData.touchDragEles){e.redrawHint("drag",!0);for(var U=0;U0&&!e.hoverData.draggingEles&&!e.swipePanning&&null!=e.data.bgActivePosistion&&(e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.redraw())}},!1),e.registerBinding(window,"touchcancel",U=function(t){var n=e.touchData.start;e.touchData.capture=!1,n&&n.unactivate()}),e.registerBinding(window,"touchend",G=function(r){var i=e.touchData.start;if(e.touchData.capture){0===r.touches.length&&(e.touchData.capture=!1),r.preventDefault();var a=e.selection;e.swipePanning=!1,e.hoverData.draggingEles=!1;var o,s=e.cy,l=s.zoom(),c=e.touchData.now,u=e.touchData.earlier;if(r.touches[0]){var p=e.projectIntoViewport(r.touches[0].clientX,r.touches[0].clientY);c[0]=p[0],c[1]=p[1]}if(r.touches[1]){p=e.projectIntoViewport(r.touches[1].clientX,r.touches[1].clientY);c[2]=p[0],c[3]=p[1]}if(r.touches[2]){p=e.projectIntoViewport(r.touches[2].clientX,r.touches[2].clientY);c[4]=p[0],c[5]=p[1]}if(i&&i.unactivate(),e.touchData.cxt){if(o={originalEvent:r,type:"cxttapend",position:{x:c[0],y:c[1]}},i?i.emit(o):s.emit(o),!e.touchData.cxtDragged){var f={originalEvent:r,type:"cxttap",position:{x:c[0],y:c[1]}};i?i.emit(f):s.emit(f)}return e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!1,e.touchData.start=null,void e.redraw()}if(!r.touches[2]&&s.boxSelectionEnabled()&&e.touchData.selecting){e.touchData.selecting=!1;var h=s.collection(e.getAllInBox(a[0],a[1],a[2],a[3]));a[0]=void 0,a[1]=void 0,a[2]=void 0,a[3]=void 0,a[4]=0,e.redrawHint("select",!0),s.emit({type:"boxend",originalEvent:r,position:{x:c[0],y:c[1]}});h.emit("box").stdFilter((function(e){return e.selectable()&&!e.selected()})).select().emit("boxselect"),h.nonempty()&&e.redrawHint("eles",!0),e.redraw()}if(null!=i&&i.unactivate(),r.touches[2])e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);else if(r.touches[1]);else if(r.touches[0]);else if(!r.touches[0]){e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var m=e.dragData.touchDragEles;if(null!=i){var g=i._private.grabbed;d(m),e.redrawHint("drag",!0),e.redrawHint("eles",!0),g&&(i.emit("freeon"),m.emit("free"),e.dragData.didDrag&&(i.emit("dragfreeon"),m.emit("dragfree"))),n(i,["touchend","tapend","vmouseup","tapdragout"],r,{x:c[0],y:c[1]}),i.unactivate(),e.touchData.start=null}else{var _=e.findNearestElement(c[0],c[1],!0,!0);n(_,["touchend","tapend","vmouseup","tapdragout"],r,{x:c[0],y:c[1]})}var v=e.touchData.startPosition[0]-c[0],y=v*v,b=e.touchData.startPosition[1]-c[1],E=(y+b*b)*l*l;e.touchData.singleTouchMoved||(i||s.$(":selected").unselect(["tapunselect"]),n(i,["tap","vclick"],r,{x:c[0],y:c[1]}),z=!1,r.timeStamp-H<=s.multiClickDebounceTime()?(j&&clearTimeout(j),z=!0,H=null,n(i,["dbltap","vdblclick"],r,{x:c[0],y:c[1]})):(j=setTimeout((function(){z||n(i,["onetap","voneclick"],r,{x:c[0],y:c[1]})}),s.multiClickDebounceTime()),H=r.timeStamp)),null!=i&&!e.dragData.didDrag&&i._private.selectable&&E2){for(var N=[c[0],c[1]],R=Math.pow(N[0]-e,2)+Math.pow(N[1]-t,2),I=1;I0)return m[0]}return null},p=Object.keys(u),f=0;f0?l:xt(i,a,e,t,n,r,o)},checkPoint:function(e,t,n,r,i,a,o){var s=Ht(r,i),l=2*s;if(At(e,t,this.points,a,o,r,i-l,[0,-1],n))return!0;if(At(e,t,this.points,a,o,r-l,i,[0,-1],n))return!0;var c=r/2+2*n,u=i/2+2*n;return!!It(e,t,[a-c,o-u,a-c,o,a+c,o,a+c,o-u])||(!!Mt(e,t,l,l,a+r/2-s,o+i/2-s,n)||!!Mt(e,t,l,l,a-r/2+s,o+i/2-s,n))}}},_s.registerNodeShapes=function(){var e=this.nodeShapes={},t=this;this.generateEllipse(),this.generatePolygon("triangle",Gt(3,0)),this.generateRoundPolygon("round-triangle",Gt(3,0)),this.generatePolygon("rectangle",Gt(4,0)),e.square=e.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();var n=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",n),this.generateRoundPolygon("round-diamond",n),this.generatePolygon("pentagon",Gt(5,0)),this.generateRoundPolygon("round-pentagon",Gt(5,0)),this.generatePolygon("hexagon",Gt(6,0)),this.generateRoundPolygon("round-hexagon",Gt(6,0)),this.generatePolygon("heptagon",Gt(7,0)),this.generateRoundPolygon("round-heptagon",Gt(7,0)),this.generatePolygon("octagon",Gt(8,0)),this.generateRoundPolygon("round-octagon",Gt(8,0));var r=new Array(20),i=jt(5,0),a=jt(5,Math.PI/5),o=.5*(3-Math.sqrt(5));o*=1.57;for(var s=0;s=e.deqFastCost*m)break}else if(i){if(f>=e.deqCost*l||f>=e.deqAvgCost*s)break}else if(h>=e.deqNoDrawCost*Ss)break;var g=e.deq(t,d,u);if(!(g.length>0))break;for(var _=0;_0&&(e.onDeqd(t,c),!i&&e.shouldRedraw(t,c,d,u)&&r())}),i(t))}}},Cs=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:xe;g(this,e),this.idsByKey=new Ge,this.keyForId=new Ge,this.cachesByLvl=new Ge,this.lvls=[],this.getKey=t,this.doesEleInvalidateKey=n}return v(e,[{key:"getIdsFor",value:function(e){null==e&&Ne("Can not get id list for null key");var t=this.idsByKey,n=this.idsByKey.get(e);return n||(n=new je,t.set(e,n)),n}},{key:"addIdForKey",value:function(e,t){null!=e&&this.getIdsFor(e).add(t)}},{key:"deleteIdForKey",value:function(e,t){null!=e&&this.getIdsFor(e).delete(t)}},{key:"getNumberOfIdsForKey",value:function(e){return null==e?0:this.getIdsFor(e).size}},{key:"updateKeyMappingFor",value:function(e){var t=e.id(),n=this.keyForId.get(t),r=this.getKey(e);this.deleteIdForKey(n,t),this.addIdForKey(r,t),this.keyForId.set(t,r)}},{key:"deleteKeyMappingFor",value:function(e){var t=e.id(),n=this.keyForId.get(t);this.deleteIdForKey(n,t),this.keyForId.delete(t)}},{key:"keyHasChangedFor",value:function(e){var t=e.id();return this.keyForId.get(t)!==this.getKey(e)}},{key:"isInvalid",value:function(e){return this.keyHasChangedFor(e)||this.doesEleInvalidateKey(e)}},{key:"getCachesAt",value:function(e){var t=this.cachesByLvl,n=this.lvls,r=t.get(e);return r||(r=new Ge,t.set(e,r),n.push(e)),r}},{key:"getCache",value:function(e,t){return this.getCachesAt(t).get(e)}},{key:"get",value:function(e,t){var n=this.getKey(e),r=this.getCache(n,t);return null!=r&&this.updateKeyMappingFor(e),r}},{key:"getForCachedKey",value:function(e,t){var n=this.keyForId.get(e.id());return this.getCache(n,t)}},{key:"hasCache",value:function(e,t){return this.getCachesAt(t).has(e)}},{key:"has",value:function(e,t){var n=this.getKey(e);return this.hasCache(n,t)}},{key:"setCache",value:function(e,t,n){n.key=e,this.getCachesAt(t).set(e,n)}},{key:"set",value:function(e,t,n){var r=this.getKey(e);this.setCache(r,t,n),this.updateKeyMappingFor(e)}},{key:"deleteCache",value:function(e,t){this.getCachesAt(t).delete(e)}},{key:"delete",value:function(e,t){var n=this.getKey(e);this.deleteCache(n,t)}},{key:"invalidateKey",value:function(e){var t=this;this.lvls.forEach((function(n){return t.deleteCache(e,n)}))}},{key:"invalidate",value:function(e){var t=e.id(),n=this.keyForId.get(t);this.deleteKeyMappingFor(e);var r=this.doesEleInvalidateKey(e);return r&&this.invalidateKey(n),r||0===this.getNumberOfIdsForKey(n)}}]),e}(),xs={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},ws=Pe({getKey:null,doesEleInvalidateKey:xe,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:Ce,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),Os=function(e,t){var n=this;n.renderer=e,n.onDequeues=[];var r=ws(t);J(n,r),n.lookup=new Cs(r.getKey,r.doesEleInvalidateKey),n.setupDequeueing()},Ns=Os.prototype;Ns.reasons=xs,Ns.getTextureQueue=function(e){var t=this;return t.eleImgCaches=t.eleImgCaches||{},t.eleImgCaches[e]=t.eleImgCaches[e]||[]},Ns.getRetiredTextureQueue=function(e){var t=this.eleImgCaches.retired=this.eleImgCaches.retired||{};return t[e]=t[e]||[]},Ns.getElementQueue=function(){return this.eleCacheQueue=this.eleCacheQueue||new d.default((function(e,t){return t.reqs-e.reqs}))},Ns.getElementKeyToQueue=function(){return this.eleKeyToCacheQueue=this.eleKeyToCacheQueue||{}},Ns.getElement=function(e,t,n,r,i){var a=this,o=this.renderer,s=o.cy.zoom(),l=this.lookup;if(!t||0===t.w||0===t.h||isNaN(t.w)||isNaN(t.h)||!e.visible()||e.removed())return null;if(!a.allowEdgeTxrCaching&&e.isEdge()||!a.allowParentTxrCaching&&e.isParent())return null;if(null==r&&(r=Math.ceil(ct(s*n))),r<-4)r=-4;else if(s>=7.99||r>3)return null;var c=Math.pow(2,r),u=t.h*c,d=t.w*c,p=o.eleTextBiggerThanMin(e,c);if(!this.isVisible(e,p))return null;var f,h=l.get(e,r);if(h&&h.invalidated&&(h.invalidated=!1,h.texture.invalidatedWidth-=h.width),h)return h;if(f=u<=25?25:u<=50?50:50*Math.ceil(u/50),u>1024||d>1024)return null;var m=a.getTextureQueue(f),g=m[m.length-2],_=function(){return a.recycleTexture(f,d)||a.addTexture(f,d)};g||(g=m[m.length-1]),g||(g=_()),g.width-g.usedWidthr;O--)x=a.getElement(e,t,n,O,xs.downscale);w()}else{var N;if(!b&&!E&&!S)for(var R=r-1;R>=-4;R--){var I=l.get(e,R);if(I){N=I;break}}if(y(N))return a.queueElement(e,r),N;g.context.translate(g.usedWidth,0),g.context.scale(c,c),this.drawElement(g.context,e,t,p,!1),g.context.scale(1/c,1/c),g.context.translate(-g.usedWidth,0)}return h={x:g.usedWidth,texture:g,level:r,scale:c,width:d,height:u,scaledLabelShown:p},g.usedWidth+=Math.ceil(d+8),g.eleCaches.push(h),l.set(e,r,h),a.checkTextureFullness(g),h},Ns.invalidateElements=function(e){for(var t=0;t=.2*e.width&&this.retireTexture(e)},Ns.checkTextureFullness=function(e){var t=this.getTextureQueue(e.height);e.usedWidth/e.width>.8&&e.fullnessChecks>=10?Le(t,e):e.fullnessChecks++},Ns.retireTexture=function(e){var t=e.height,n=this.getTextureQueue(t),r=this.lookup;Le(n,e),e.retired=!0;for(var i=e.eleCaches,a=0;a=t)return a.retired=!1,a.usedWidth=0,a.invalidatedWidth=0,a.fullnessChecks=0,Fe(a.eleCaches),a.context.setTransform(1,0,0,1,0,0),a.context.clearRect(0,0,a.width,a.height),Le(r,a),n.push(a),a}},Ns.queueElement=function(e,t){var n=this.getElementQueue(),r=this.getElementKeyToQueue(),i=this.getKey(e),a=r[i];if(a)a.level=Math.max(a.level,t),a.eles.merge(e),a.reqs++,n.updateItem(a);else{var o={eles:e.spawn().merge(e),level:t,reqs:1,key:i};n.push(o),r[i]=o}},Ns.dequeue=function(e){for(var t=this,n=t.getElementQueue(),r=t.getElementKeyToQueue(),i=[],a=t.lookup,o=0;o<1&&n.size()>0;o++){var s=n.pop(),l=s.key,c=s.eles[0],u=a.hasCache(c,s.level);if(r[l]=null,!u){i.push(s);var d=t.getBoundingBox(c);t.getElement(c,d,e,s.level,xs.dequeue)}}return i},Ns.removeFromQueue=function(e){var t=this.getElementQueue(),n=this.getElementKeyToQueue(),r=this.getKey(e),i=n[r];null!=i&&(1===i.eles.length?(i.reqs=Te,t.updateItem(i),t.pop(),n[r]=null):i.eles.unmerge(e))},Ns.onDequeue=function(e){this.onDequeues.push(e)},Ns.offDequeue=function(e){Le(this.onDequeues,e)},Ns.setupDequeueing=Ts({deqRedrawThreshold:100,deqCost:.15,deqAvgCost:.1,deqNoDrawCost:.9,deqFastCost:.9,deq:function(e,t,n){return e.dequeue(t,n)},onDeqd:function(e,t){for(var n=0;n=3.99||n>2)return null;r.validateLayersElesOrdering(n,e);var o,s,l=r.layersByLevel,c=Math.pow(2,n),u=l[n]=l[n]||[];if(r.levelIsComplete(n,e))return u;!function(){var t=function(t){if(r.validateLayersElesOrdering(t,e),r.levelIsComplete(t,e))return s=l[t],!0},i=function(e){if(!s)for(var r=n+e;-4<=r&&r<=2&&!t(r);r+=e);};i(1),i(-1);for(var a=u.length-1;a>=0;a--){var o=u[a];o.invalid&&Le(u,o)}}();var d=function(t){var i=(t=t||{}).after;if(function(){if(!o){o=_t();for(var t=0;t16e6)return null;var a=r.makeLayer(o,n);if(null!=i){var s=u.indexOf(i)+1;u.splice(s,0,a)}else(void 0===t.insert||t.insert)&&u.unshift(a);return a};if(r.skipping&&!a)return null;for(var p=null,f=e.length/1,h=!a,m=0;m=f||!Ct(p.bb,g.boundingBox()))&&!(p=d({insert:!0,after:p})))return null;s||h?r.queueLayer(p,g):r.drawEleInLayer(p,g,n,t),p.eles.push(g),v[n]=p}}return s||(h?null:u)},Is.getEleLevelForLayerLevel=function(e,t){return e},Is.drawEleInLayer=function(e,t,n,r){var i=this.renderer,a=e.context,o=t.boundingBox();0!==o.w&&0!==o.h&&t.visible()&&(n=this.getEleLevelForLayerLevel(n,r),i.setImgSmoothing(a,!1),i.drawCachedElement(a,t,null,null,n,true),i.setImgSmoothing(a,!0))},Is.levelIsComplete=function(e,t){var n=this.layersByLevel[e];if(!n||0===n.length)return!1;for(var r=0,i=0;i0)return!1;if(a.invalid)return!1;r+=a.eles.length}return r===t.length},Is.validateLayersElesOrdering=function(e,t){var n=this.layersByLevel[e];if(n)for(var r=0;r0){e=!0;break}}return e},Is.invalidateElements=function(e){var t=this;0!==e.length&&(t.lastInvalidationTime=le(),0!==e.length&&t.haveLayers()&&t.updateElementsInLayers(e,(function(e,n,r){t.invalidateLayer(e)})))},Is.invalidateLayer=function(e){if(this.lastInvalidationTime=le(),!e.invalid){var t=e.level,n=e.eles,r=this.layersByLevel[t];Le(r,e),e.elesQueue=[],e.invalid=!0,e.replacement&&(e.replacement.invalid=!0);for(var i=0;i3&&void 0!==arguments[3])||arguments[3],i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],o=this,s=t._private.rscratch;if((!a||t.visible())&&!s.badLine&&null!=s.allpts&&!isNaN(s.allpts[0])){var l;n&&(l=n,e.translate(-l.x1,-l.y1));var c=a?t.pstyle("opacity").value:1,u=a?t.pstyle("line-opacity").value:1,d=t.pstyle("curve-style").value,p=t.pstyle("line-style").value,f=t.pstyle("width").pfValue,h=t.pstyle("line-cap").value,m=c*u,g=c*u,_=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:m;"straight-triangle"===d?(o.eleStrokeStyle(e,t,n),o.drawEdgeTrianglePath(t,e,s.allpts)):(e.lineWidth=f,e.lineCap=h,o.eleStrokeStyle(e,t,n),o.drawEdgePath(t,e,s.allpts,p),e.lineCap="butt")},v=function(){i&&o.drawEdgeOverlay(e,t)},y=function(){i&&o.drawEdgeUnderlay(e,t)},b=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:g;o.drawArrowheads(e,t,n)},E=function(){o.drawElementText(e,t,null,r)};e.lineJoin="round";var S="yes"===t.pstyle("ghost").value;if(S){var T=t.pstyle("ghost-offset-x").pfValue,C=t.pstyle("ghost-offset-y").pfValue,x=t.pstyle("ghost-opacity").value,w=m*x;e.translate(T,C),_(w),b(w),e.translate(-T,-C)}y(),_(),b(),v(),E(),n&&e.translate(l.x1,l.y1)}}},Ws=function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(t,n){if(n.visible()){var r=n.pstyle("".concat(e,"-opacity")).value;if(0!==r){var i=this,a=i.usePaths(),o=n._private.rscratch,s=2*n.pstyle("".concat(e,"-padding")).pfValue,l=n.pstyle("".concat(e,"-color")).value;t.lineWidth=s,"self"!==o.edgeType||a?t.lineCap="round":t.lineCap="butt",i.colorStrokeStyle(t,l[0],l[1],l[2],r),i.drawEdgePath(n,t,o.allpts,"solid")}}}};qs.drawEdgeOverlay=Ws("overlay"),qs.drawEdgeUnderlay=Ws("underlay"),qs.drawEdgePath=function(e,t,n,r){var i,a=e._private.rscratch,o=t,s=!1,l=this.usePaths(),c=e.pstyle("line-dash-pattern").pfValue,u=e.pstyle("line-dash-offset").pfValue;if(l){var d=n.join("$");a.pathCacheKey&&a.pathCacheKey===d?(i=t=a.pathCache,s=!0):(i=t=new Path2D,a.pathCacheKey=d,a.pathCache=i)}if(o.setLineDash)switch(r){case"dotted":o.setLineDash([1,1]);break;case"dashed":o.setLineDash(c),o.lineDashOffset=u;break;case"solid":o.setLineDash([])}if(!s&&!a.badLine)switch(t.beginPath&&t.beginPath(),t.moveTo(n[0],n[1]),a.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var p=2;p+35&&void 0!==arguments[5]?arguments[5]:5;e.beginPath(),e.moveTo(t+a,n),e.lineTo(t+r-a,n),e.quadraticCurveTo(t+r,n,t+r,n+a),e.lineTo(t+r,n+i-a),e.quadraticCurveTo(t+r,n+i,t+r-a,n+i),e.lineTo(t+a,n+i),e.quadraticCurveTo(t,n+i,t,n+i-a),e.lineTo(t,n+a),e.quadraticCurveTo(t,n,t+a,n),e.closePath(),e.fill()}Ks.eleTextBiggerThanMin=function(e,t){if(!t){var n=e.cy().zoom(),r=this.getPixelRatio(),i=Math.ceil(ct(n*r));t=Math.pow(2,i)}return!(e.pstyle("font-size").pfValue*t5&&void 0!==arguments[5])||arguments[5],o=this;if(null==r){if(a&&!o.eleTextBiggerThanMin(t))return}else if(!1===r)return;if(t.isNode()){var s=t.pstyle("label");if(!s||!s.value)return;var l=o.getLabelJustification(t);e.textAlign=l,e.textBaseline="bottom"}else{var c=t.element()._private.rscratch.badLine,u=t.pstyle("label"),d=t.pstyle("source-label"),p=t.pstyle("target-label");if(c||(!u||!u.value)&&(!d||!d.value)&&(!p||!p.value))return;e.textAlign="center",e.textBaseline="bottom"}var f,h=!n;n&&(f=n,e.translate(-f.x1,-f.y1)),null==i?(o.drawText(e,t,null,h,a),t.isEdge()&&(o.drawText(e,t,"source",h,a),o.drawText(e,t,"target",h,a))):o.drawText(e,t,i,h,a),n&&e.translate(f.x1,f.y1)},Ks.getFontCache=function(e){var t;this.fontCaches=this.fontCaches||[];for(var n=0;n2&&void 0!==arguments[2])||arguments[2],r=t.pstyle("font-style").strValue,i=t.pstyle("font-size").pfValue+"px",a=t.pstyle("font-family").strValue,o=t.pstyle("font-weight").strValue,s=n?t.effectiveOpacity()*t.pstyle("text-opacity").value:1,l=t.pstyle("text-outline-opacity").value*s,c=t.pstyle("color").value,u=t.pstyle("text-outline-color").value;e.font=r+" "+o+" "+i+" "+a,e.lineJoin="round",this.colorFillStyle(e,c[0],c[1],c[2],s),this.colorStrokeStyle(e,u[0],u[1],u[2],l)},Ks.getTextAngle=function(e,t){var n=e._private.rscratch,r=t?t+"-":"",i=e.pstyle(r+"text-rotation"),a=Be(n,"labelAngle",t);return"autorotate"===i.strValue?e.isEdge()?a:0:"none"===i.strValue?0:i.pfValue},Ks.drawText=function(e,t,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=t._private,o=a.rscratch,s=i?t.effectiveOpacity():1;if(!i||0!==s&&0!==t.pstyle("text-opacity").value){"main"===n&&(n=null);var l,c,u=Be(o,"labelX",n),d=Be(o,"labelY",n),p=this.getLabelText(t,n);if(null!=p&&""!==p&&!isNaN(u)&&!isNaN(d)){this.setupTextStyle(e,t,i);var f,h=n?n+"-":"",m=Be(o,"labelWidth",n),g=Be(o,"labelHeight",n),_=t.pstyle(h+"text-margin-x").pfValue,v=t.pstyle(h+"text-margin-y").pfValue,y=t.isEdge(),b=t.pstyle("text-halign").value,E=t.pstyle("text-valign").value;switch(y&&(b="center",E="center"),u+=_,d+=v,0!==(f=r?this.getTextAngle(t,n):0)&&(l=u,c=d,e.translate(l,c),e.rotate(f),u=0,d=0),E){case"top":break;case"center":d+=g/2;break;case"bottom":d+=g}var S=t.pstyle("text-background-opacity").value,T=t.pstyle("text-border-opacity").value,C=t.pstyle("text-border-width").pfValue,x=t.pstyle("text-background-padding").pfValue;if(S>0||C>0&&T>0){var w=u-x;switch(b){case"left":w-=m;break;case"center":w-=m/2}var O=d-g-x,N=m+2*x,R=g+2*x;if(S>0){var I=e.fillStyle,A=t.pstyle("text-background-color").value;e.fillStyle="rgba("+A[0]+","+A[1]+","+A[2]+","+S*s+")";var k=t.pstyle("text-background-shape").strValue;0===k.indexOf("round")?Qs(e,w,O,N,R,2):e.fillRect(w,O,N,R),e.fillStyle=I}if(C>0&&T>0){var D=e.strokeStyle,M=e.lineWidth,P=t.pstyle("text-border-color").value,L=t.pstyle("text-border-style").value;if(e.strokeStyle="rgba("+P[0]+","+P[1]+","+P[2]+","+T*s+")",e.lineWidth=C,e.setLineDash)switch(L){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"double":e.lineWidth=C/4,e.setLineDash([]);break;case"solid":e.setLineDash([])}if(e.strokeRect(w,O,N,R),"double"===L){var F=C/2;e.strokeRect(w+F,O+F,N-2*F,R-2*F)}e.setLineDash&&e.setLineDash([]),e.lineWidth=M,e.strokeStyle=D}}var B=2*t.pstyle("text-outline-width").pfValue;if(B>0&&(e.lineWidth=B),"wrap"===t.pstyle("text-wrap").value){var U=Be(o,"labelWrapCachedLines",n),G=Be(o,"labelLineHeight",n),z=m/2,j=this.getLabelJustification(t);switch("auto"===j||("left"===b?"left"===j?u+=-m:"center"===j&&(u+=-z):"center"===b?"left"===j?u+=-z:"right"===j&&(u+=z):"right"===b&&("center"===j?u+=z:"right"===j&&(u+=m))),E){case"top":case"center":case"bottom":d-=(U.length-1)*G}for(var H=0;H0&&e.strokeText(U[H],u,d),e.fillText(U[H],u,d),d+=G}else B>0&&e.strokeText(p,u,d),e.fillText(p,u,d);0!==f&&(e.rotate(-f),e.translate(-l,-c))}}};var Xs={drawNode:function(e,t,n){var r,i,a=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],l=this,c=t._private,u=c.rscratch,d=t.position();if(D(d.x)&&D(d.y)&&(!s||t.visible())){var p,f,h=s?t.effectiveOpacity():1,m=l.usePaths(),g=!1,_=t.padding();r=t.width()+2*_,i=t.height()+2*_,n&&(f=n,e.translate(-f.x1,-f.y1));for(var v=t.pstyle("background-image"),y=v.value,b=new Array(y.length),E=new Array(y.length),S=0,T=0;T0&&void 0!==arguments[0]?arguments[0]:R;l.eleFillStyle(e,t,n)},P=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:k;l.colorStrokeStyle(e,I[0],I[1],I[2],t)},L=t.pstyle("shape").strValue,F=t.pstyle("shape-polygon-points").pfValue;if(m){e.translate(d.x,d.y);var B=l.nodePathCache=l.nodePathCache||[],U=ve("polygon"===L?L+","+F.join(","):L,""+i,""+r),G=B[U];null!=G?(p=G,g=!0,u.pathCache=p):(p=new Path2D,B[U]=u.pathCache=p)}var z=function(){if(!g){var n=d;m&&(n={x:0,y:0}),l.nodeShapes[l.getNodeShape(t)].draw(p||e,n.x,n.y,r,i)}m?e.fill(p):e.fill()},j=function(){for(var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:h,r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=c.backgrounding,a=0,o=0;o0&&void 0!==arguments[0]&&arguments[0],a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:h;l.hasPie(t)&&(l.drawPie(e,t,a),n&&(m||l.nodeShapes[l.getNodeShape(t)].draw(e,d.x,d.y,r,i)))},Z=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:h,n=(O>0?O:-O)*t,r=O>0?0:255;0!==O&&(l.colorFillStyle(e,r,r,r,n),m?e.fill(p):e.fill())},Y=function(){if(N>0){if(e.lineWidth=N,e.lineCap="butt",e.setLineDash)switch(A){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"solid":case"double":e.setLineDash([])}if(m?e.stroke(p):e.stroke(),"double"===A){e.lineWidth=N/3;var t=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",m?e.stroke(p):e.stroke(),e.globalCompositeOperation=t}e.setLineDash&&e.setLineDash([])}},V=function(){o&&l.drawNodeOverlay(e,t,d,r,i)},q=function(){o&&l.drawNodeUnderlay(e,t,d,r,i)},W=function(){l.drawElementText(e,t,null,a)},$="yes"===t.pstyle("ghost").value;if($){var K=t.pstyle("ghost-offset-x").pfValue,Q=t.pstyle("ghost-offset-y").pfValue,X=t.pstyle("ghost-opacity").value,J=X*h;e.translate(K,Q),M(X*R),z(),j(J,!0),P(X*k),Y(),H(0!==O||0!==N),j(J,!1),Z(J),e.translate(-K,-Q)}m&&e.translate(-d.x,-d.y),q(),m&&e.translate(d.x,d.y),M(),z(),j(h,!0),P(),Y(),H(0!==O||0!==N),j(h,!1),Z(),m&&e.translate(-d.x,-d.y),W(),V(),n&&e.translate(f.x1,f.y1)}}},Js=function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(t,n,r,i,a){if(n.visible()){var o=n.pstyle("".concat(e,"-padding")).pfValue,s=n.pstyle("".concat(e,"-opacity")).value,l=n.pstyle("".concat(e,"-color")).value,c=n.pstyle("".concat(e,"-shape")).value;if(s>0){if(r=r||n.position(),null==i||null==a){var u=n.padding();i=n.width()+2*u,a=n.height()+2*u}this.colorFillStyle(t,l[0],l[1],l[2],s),this.nodeShapes[c].draw(t,r.x,r.y,i+2*o,a+2*o),t.fill()}}}};Xs.drawNodeOverlay=Js("overlay"),Xs.drawNodeUnderlay=Js("underlay"),Xs.hasPie=function(e){return(e=e[0])._private.hasPie},Xs.drawPie=function(e,t,n,r){t=t[0],r=r||t.position();var i=t.cy().style(),a=t.pstyle("pie-size"),o=r.x,s=r.y,l=t.width(),c=t.height(),u=Math.min(l,c)/2,d=0;this.usePaths()&&(o=0,s=0),"%"===a.units?u*=a.pfValue:void 0!==a.pfValue&&(u=a.pfValue/2);for(var p=1;p<=i.pieBackgroundN;p++){var f=t.pstyle("pie-"+p+"-background-size").value,h=t.pstyle("pie-"+p+"-background-color").value,m=t.pstyle("pie-"+p+"-background-opacity").value*n,g=f/100;g+d>1&&(g=1-d);var _=1.5*Math.PI+2*Math.PI*d,v=_+2*Math.PI*g;0===f||d>=1||d+g>1||(e.beginPath(),e.moveTo(o,s),e.arc(o,s,u,_,v),e.closePath(),this.colorFillStyle(e,h[0],h[1],h[2],m),e.fill(),d+=g)}};var el={};el.getPixelRatio=function(){var e=this.data.contexts[0];if(null!=this.forcedPixelRatio)return this.forcedPixelRatio;var t=e.backingStorePixelRatio||e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1;return(window.devicePixelRatio||1)/t},el.paintCache=function(e){for(var t,n=this.paintCaches=this.paintCaches||[],r=!0,i=0;io.minMbLowQualFrames&&(o.motionBlurPxRatio=o.mbPxRBlurry)),o.clearingMotionBlur&&(o.motionBlurPxRatio=1),o.textureDrawLastFrame&&!d&&(u[o.NODE]=!0,u[o.SELECT_BOX]=!0);var v=l.style(),y=l.zoom(),b=void 0!==i?i:y,E=l.pan(),S={x:E.x,y:E.y},T={zoom:y,pan:{x:E.x,y:E.y}},C=o.prevViewport;void 0===C||T.zoom!==C.zoom||T.pan.x!==C.pan.x||T.pan.y!==C.pan.y||m&&!h||(o.motionBlurPxRatio=1),a&&(S=a),b*=s,S.x*=s,S.y*=s;var x=o.getCachedZSortedEles();function w(e,t,n,r,i){var a=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",o.colorFillStyle(e,255,255,255,o.motionBlurTransparency),e.fillRect(t,n,r,i),e.globalCompositeOperation=a}function O(e,r){var s,l,u,d;o.clearingMotionBlur||e!==c.bufferContexts[o.MOTIONBLUR_BUFFER_NODE]&&e!==c.bufferContexts[o.MOTIONBLUR_BUFFER_DRAG]?(s=S,l=b,u=o.canvasWidth,d=o.canvasHeight):(s={x:E.x*f,y:E.y*f},l=y*f,u=o.canvasWidth*f,d=o.canvasHeight*f),e.setTransform(1,0,0,1,0,0),"motionBlur"===r?w(e,0,0,u,d):t||void 0!==r&&!r||e.clearRect(0,0,u,d),n||(e.translate(s.x,s.y),e.scale(l,l)),a&&e.translate(a.x,a.y),i&&e.scale(i,i)}if(d||(o.textureDrawLastFrame=!1),d){if(o.textureDrawLastFrame=!0,!o.textureCache){o.textureCache={},o.textureCache.bb=l.mutableElements().boundingBox(),o.textureCache.texture=o.data.bufferCanvases[o.TEXTURE_BUFFER];var N=o.data.bufferContexts[o.TEXTURE_BUFFER];N.setTransform(1,0,0,1,0,0),N.clearRect(0,0,o.canvasWidth*o.textureMult,o.canvasHeight*o.textureMult),o.render({forcedContext:N,drawOnlyNodeLayer:!0,forcedPxRatio:s*o.textureMult}),(T=o.textureCache.viewport={zoom:l.zoom(),pan:l.pan(),width:o.canvasWidth,height:o.canvasHeight}).mpan={x:(0-T.pan.x)/T.zoom,y:(0-T.pan.y)/T.zoom}}u[o.DRAG]=!1,u[o.NODE]=!1;var R=c.contexts[o.NODE],I=o.textureCache.texture;T=o.textureCache.viewport;R.setTransform(1,0,0,1,0,0),p?w(R,0,0,T.width,T.height):R.clearRect(0,0,T.width,T.height);var A=v.core("outside-texture-bg-color").value,k=v.core("outside-texture-bg-opacity").value;o.colorFillStyle(R,A[0],A[1],A[2],k),R.fillRect(0,0,T.width,T.height);y=l.zoom();O(R,!1),R.clearRect(T.mpan.x,T.mpan.y,T.width/T.zoom/s,T.height/T.zoom/s),R.drawImage(I,T.mpan.x,T.mpan.y,T.width/T.zoom/s,T.height/T.zoom/s)}else o.textureOnViewport&&!t&&(o.textureCache=null);var D=l.extent(),M=o.pinching||o.hoverData.dragging||o.swipePanning||o.data.wheelZooming||o.hoverData.draggingEles||o.cy.animated(),P=o.hideEdgesOnViewport&&M,L=[];if(L[o.NODE]=!u[o.NODE]&&p&&!o.clearedForMotionBlur[o.NODE]||o.clearingMotionBlur,L[o.NODE]&&(o.clearedForMotionBlur[o.NODE]=!0),L[o.DRAG]=!u[o.DRAG]&&p&&!o.clearedForMotionBlur[o.DRAG]||o.clearingMotionBlur,L[o.DRAG]&&(o.clearedForMotionBlur[o.DRAG]=!0),u[o.NODE]||n||r||L[o.NODE]){var F=p&&!L[o.NODE]&&1!==f;O(R=t||(F?o.data.bufferContexts[o.MOTIONBLUR_BUFFER_NODE]:c.contexts[o.NODE]),p&&!F?"motionBlur":void 0),P?o.drawCachedNodes(R,x.nondrag,s,D):o.drawLayeredElements(R,x.nondrag,s,D),o.debug&&o.drawDebugPoints(R,x.nondrag),n||p||(u[o.NODE]=!1)}if(!r&&(u[o.DRAG]||n||L[o.DRAG])){F=p&&!L[o.DRAG]&&1!==f;O(R=t||(F?o.data.bufferContexts[o.MOTIONBLUR_BUFFER_DRAG]:c.contexts[o.DRAG]),p&&!F?"motionBlur":void 0),P?o.drawCachedNodes(R,x.drag,s,D):o.drawCachedElements(R,x.drag,s,D),o.debug&&o.drawDebugPoints(R,x.drag),n||p||(u[o.DRAG]=!1)}if(o.showFps||!r&&u[o.SELECT_BOX]&&!n){if(O(R=t||c.contexts[o.SELECT_BOX]),1==o.selection[4]&&(o.hoverData.selecting||o.touchData.selecting)){y=o.cy.zoom();var B=v.core("selection-box-border-width").value/y;R.lineWidth=B,R.fillStyle="rgba("+v.core("selection-box-color").value[0]+","+v.core("selection-box-color").value[1]+","+v.core("selection-box-color").value[2]+","+v.core("selection-box-opacity").value+")",R.fillRect(o.selection[0],o.selection[1],o.selection[2]-o.selection[0],o.selection[3]-o.selection[1]),B>0&&(R.strokeStyle="rgba("+v.core("selection-box-border-color").value[0]+","+v.core("selection-box-border-color").value[1]+","+v.core("selection-box-border-color").value[2]+","+v.core("selection-box-opacity").value+")",R.strokeRect(o.selection[0],o.selection[1],o.selection[2]-o.selection[0],o.selection[3]-o.selection[1]))}if(c.bgActivePosistion&&!o.hoverData.selecting){y=o.cy.zoom();var U=c.bgActivePosistion;R.fillStyle="rgba("+v.core("active-bg-color").value[0]+","+v.core("active-bg-color").value[1]+","+v.core("active-bg-color").value[2]+","+v.core("active-bg-opacity").value+")",R.beginPath(),R.arc(U.x,U.y,v.core("active-bg-size").pfValue/y,0,2*Math.PI),R.fill()}var G=o.lastRedrawTime;if(o.showFps&&G){G=Math.round(G);var z=Math.round(1e3/G);R.setTransform(1,0,0,1,0,0),R.fillStyle="rgba(255, 0, 0, 0.75)",R.strokeStyle="rgba(255, 0, 0, 0.75)",R.lineWidth=1,R.fillText("1 frame = "+G+" ms = "+z+" fps",0,20);R.strokeRect(0,30,250,20),R.fillRect(0,30,250*Math.min(z/60,1),20)}n||(u[o.SELECT_BOX]=!1)}if(p&&1!==f){var j=c.contexts[o.NODE],H=o.data.bufferCanvases[o.MOTIONBLUR_BUFFER_NODE],Z=c.contexts[o.DRAG],Y=o.data.bufferCanvases[o.MOTIONBLUR_BUFFER_DRAG],V=function(e,t,n){e.setTransform(1,0,0,1,0,0),n||!_?e.clearRect(0,0,o.canvasWidth,o.canvasHeight):w(e,0,0,o.canvasWidth,o.canvasHeight);var r=f;e.drawImage(t,0,0,o.canvasWidth*r,o.canvasHeight*r,0,0,o.canvasWidth,o.canvasHeight)};(u[o.NODE]||L[o.NODE])&&(V(j,H,L[o.NODE]),u[o.NODE]=!1),(u[o.DRAG]||L[o.DRAG])&&(V(Z,Y,L[o.DRAG]),u[o.DRAG]=!1)}o.prevViewport=T,o.clearingMotionBlur&&(o.clearingMotionBlur=!1,o.motionBlurCleared=!0,o.motionBlur=!0),p&&(o.motionBlurTimeout=setTimeout((function(){o.motionBlurTimeout=null,o.clearedForMotionBlur[o.NODE]=!1,o.clearedForMotionBlur[o.DRAG]=!1,o.motionBlur=!1,o.clearingMotionBlur=!d,o.mbFrames=0,u[o.NODE]=!0,u[o.DRAG]=!0,o.redraw()}),100)),t||l.emit("render")};for(var tl={drawPolygonPath:function(e,t,n,r,i,a){var o=r/2,s=i/2;e.beginPath&&e.beginPath(),e.moveTo(t+o*a[0],n+s*a[1]);for(var l=1;l0&&a>0){p.clearRect(0,0,i,a),p.globalCompositeOperation="source-over";var f=this.getCachedZSortedEles();if(e.full)p.translate(-n.x1*l,-n.y1*l),p.scale(l,l),this.drawElements(p,f),p.scale(1/l,1/l),p.translate(n.x1*l,n.y1*l);else{var h=t.pan(),m={x:h.x*l,y:h.y*l};l*=t.zoom(),p.translate(m.x,m.y),p.scale(l,l),this.drawElements(p,f),p.scale(1/l,1/l),p.translate(-m.x,-m.y)}e.bg&&(p.globalCompositeOperation="destination-over",p.fillStyle=e.bg,p.rect(0,0,i,a),p.fill())}return d},ll.png=function(e){return ul(e,this.bufferCanvasImage(e),"image/png")},ll.jpg=function(e){return ul(e,this.bufferCanvasImage(e),"image/jpeg")};var dl={nodeShapeImpl:function(e,t,n,r,i,a,o){switch(e){case"ellipse":return this.drawEllipsePath(t,n,r,i,a);case"polygon":return this.drawPolygonPath(t,n,r,i,a,o);case"round-polygon":return this.drawRoundPolygonPath(t,n,r,i,a,o);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(t,n,r,i,a);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(t,n,r,i,a);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(t,n,r,i,a);case"barrel":return this.drawBarrelPath(t,n,r,i,a)}}},pl=hl,fl=hl.prototype;function hl(e){var t=this;t.data={canvases:new Array(fl.CANVAS_LAYERS),contexts:new Array(fl.CANVAS_LAYERS),canvasNeedsRedraw:new Array(fl.CANVAS_LAYERS),bufferCanvases:new Array(fl.BUFFER_COUNT),bufferContexts:new Array(fl.CANVAS_LAYERS)};var n="-webkit-tap-highlight-color",r="rgba(0,0,0,0)";t.data.canvasContainer=document.createElement("div");var i=t.data.canvasContainer.style;t.data.canvasContainer.style[n]=r,i.position="relative",i.zIndex="0",i.overflow="hidden";var a=e.cy.container();a.appendChild(t.data.canvasContainer),a.style[n]=r;var o={"-webkit-user-select":"none","-moz-user-select":"-moz-none","user-select":"none","-webkit-tap-highlight-color":"rgba(0,0,0,0)","outline-style":"none"};T&&T.userAgent.match(/msie|trident|edge/i)&&(o["-ms-touch-action"]="none",o["touch-action"]="none");for(var s=0;s=s&&(n=i=s):(n>s&&(n=s),i=d&&(n=i=d):(n>d&&(n=d),i=o)&&(n=o)}}catch(d){a.e(d)}finally{a.f()}}else{var s,l=-1,c=(0,r.Z)(e);try{for(c.s();!(s=c.n()).done;){var u=s.value;null!=(u=t(u,++l,e))&&(n=u)&&(n=u)}}catch(d){c.e(d)}finally{c.f()}}return n}},11915:function(e,t,n){"use strict";function r(e,t,n){e.prototype=t.prototype=n,n.constructor=e}function i(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function a(){}n.d(t,{ZP:function(){return E},B8:function(){return x}});var o=.7,s=1/o,l="\\s*([+-]?\\d+)\\s*",c="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",u="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",d=/^#([0-9a-f]{3,8})$/,p=new RegExp("^rgb\\("+[l,l,l]+"\\)$"),f=new RegExp("^rgb\\("+[u,u,u]+"\\)$"),h=new RegExp("^rgba\\("+[l,l,l,c]+"\\)$"),m=new RegExp("^rgba\\("+[u,u,u,c]+"\\)$"),g=new RegExp("^hsl\\("+[c,u,u]+"\\)$"),_=new RegExp("^hsla\\("+[c,u,u,c]+"\\)$"),v={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function y(){return this.rgb().formatHex()}function b(){return this.rgb().formatRgb()}function E(e){var t,n;return e=(e+"").trim().toLowerCase(),(t=d.exec(e))?(n=t[1].length,t=parseInt(t[1],16),6===n?S(t):3===n?new w(t>>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1):8===n?T(t>>24&255,t>>16&255,t>>8&255,(255&t)/255):4===n?T(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|240&t,((15&t)<<4|15&t)/255):null):(t=p.exec(e))?new w(t[1],t[2],t[3],1):(t=f.exec(e))?new w(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=h.exec(e))?T(t[1],t[2],t[3],t[4]):(t=m.exec(e))?T(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=g.exec(e))?I(t[1],t[2]/100,t[3]/100,1):(t=_.exec(e))?I(t[1],t[2]/100,t[3]/100,t[4]):v.hasOwnProperty(e)?S(v[e]):"transparent"===e?new w(NaN,NaN,NaN,0):null}function S(e){return new w(e>>16&255,e>>8&255,255&e,1)}function T(e,t,n,r){return r<=0&&(e=t=n=NaN),new w(e,t,n,r)}function C(e){return e instanceof a||(e=E(e)),e?new w((e=e.rgb()).r,e.g,e.b,e.opacity):new w}function x(e,t,n,r){return 1===arguments.length?C(e):new w(e,t,n,null==r?1:r)}function w(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}function O(){return"#"+R(this.r)+R(this.g)+R(this.b)}function N(){var e=this.opacity;return(1===(e=isNaN(e)?1:Math.max(0,Math.min(1,e)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===e?")":", "+e+")")}function R(e){return((e=Math.max(0,Math.min(255,Math.round(e)||0)))<16?"0":"")+e.toString(16)}function I(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new k(e,t,n,r)}function A(e){if(e instanceof k)return new k(e.h,e.s,e.l,e.opacity);if(e instanceof a||(e=E(e)),!e)return new k;if(e instanceof k)return e;var t=(e=e.rgb()).r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),o=Math.max(t,n,r),s=NaN,l=o-i,c=(o+i)/2;return l?(s=t===o?(n-r)/l+6*(n0&&c<1?0:s,new k(s,l,c,e.opacity)}function k(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function D(e,t,n){return 255*(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)}r(a,E,{copy:function(e){return Object.assign(new this.constructor,this,e)},displayable:function(){return this.rgb().displayable()},hex:y,formatHex:y,formatHsl:function(){return A(this).formatHsl()},formatRgb:b,toString:b}),r(w,x,i(a,{brighter:function(e){return e=null==e?s:Math.pow(s,e),new w(this.r*e,this.g*e,this.b*e,this.opacity)},darker:function(e){return e=null==e?o:Math.pow(o,e),new w(this.r*e,this.g*e,this.b*e,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:O,formatHex:O,formatRgb:N,toString:N})),r(k,(function(e,t,n,r){return 1===arguments.length?A(e):new k(e,t,n,null==r?1:r)}),i(a,{brighter:function(e){return e=null==e?s:Math.pow(s,e),new k(this.h,this.s,this.l*e,this.opacity)},darker:function(e){return e=null==e?o:Math.pow(o,e),new k(this.h,this.s,this.l*e,this.opacity)},rgb:function(){var e=this.h%360+360*(this.h<0),t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new w(D(e>=240?e-240:e+120,i,r),D(e,i,r),D(e<120?e+240:e-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var e=this.opacity;return(1===(e=isNaN(e)?1:Math.max(0,Math.min(1,e)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===e?")":", "+e+")")}}))},97503:function(e,t,n){"use strict";function r(e){return+e}n.d(t,{G:function(){return r}})},16507:function(e,t,n){"use strict";n.d(t,{SE:function(){return r}});(function e(t){function n(e){return Math.pow(e,t)}return t=+t,n.exponent=e,n})(3),function e(t){function n(e){return 1-Math.pow(1-e,t)}return t=+t,n.exponent=e,n}(3);var r=function e(t){function n(e){return((e*=2)<=1?Math.pow(e,t):2-Math.pow(2-e,t))/2}return t=+t,n.exponent=e,n}(3)},65133:function(e,t,n){"use strict";function r(e){var t=0,n=e.children,r=n&&n.length;if(r)for(;--r>=0;)t+=n[r].value;else t=1;e.value=t}function i(e,t){var n,r,i,o,c,u=new l(e),d=+e.value&&(u.value=e.value),p=[u];for(null==t&&(t=a);n=p.pop();)if(d&&(n.value=+n.data.value),(i=t(n.data))&&(c=i.length))for(n.children=new Array(c),o=c-1;o>=0;--o)p.push(r=n.children[o]=new l(i[o])),r.parent=n,r.depth=n.depth+1;return u.eachBefore(s)}function a(e){return e.children}function o(e){e.data=e.data.data}function s(e){var t=0;do{e.height=t}while((e=e.parent)&&e.height<++t)}function l(e){this.data=e,this.depth=this.height=0,this.parent=null}n.d(t,{ZP:function(){return i}}),l.prototype=i.prototype={constructor:l,count:function(){return this.eachAfter(r)},each:function(e){var t,n,r,i,a=this,o=[a];do{for(t=o.reverse(),o=[];a=t.pop();)if(e(a),n=a.children)for(r=0,i=n.length;r=0;--n)i.push(t[n]);return this},sum:function(e){return this.eachAfter((function(t){for(var n=+e(t.data)||0,r=t.children,i=r&&r.length;--i>=0;)n+=r[i].value;t.value=n}))},sort:function(e){return this.eachBefore((function(t){t.children&&t.children.sort(e)}))},path:function(e){for(var t=this,n=function(e,t){if(e===t)return e;var n=e.ancestors(),r=t.ancestors(),i=null;e=n.pop(),t=r.pop();for(;e===t;)i=e,e=n.pop(),t=r.pop();return i}(t,e),r=[t];t!==n;)t=t.parent,r.push(t);for(var i=r.length;e!==n;)r.splice(i,0,e),e=e.parent;return r},ancestors:function(){for(var e=this,t=[e];e=e.parent;)t.push(e);return t},descendants:function(){var e=[];return this.each((function(t){e.push(t)})),e},leaves:function(){var e=[];return this.eachBefore((function(t){t.children||e.push(t)})),e},links:function(){var e=this,t=[];return e.each((function(n){n!==e&&t.push({source:n.parent,target:n})})),t},copy:function(){return i(this).eachBefore(o)}}},9339:function(e,t,n){"use strict";function r(e){e.x0=Math.round(e.x0),e.y0=Math.round(e.y0),e.x1=Math.round(e.x1),e.y1=Math.round(e.y1)}function i(){var e=1,t=1,n=0,i=!1;function a(a){var o=a.height+1;return a.x0=a.y0=n,a.x1=e,a.y1=t/o,a.eachBefore(function(e,t){return function(r){r.children&&function(e,t,n,r,i){for(var a,o=e.children,s=-1,l=o.length,c=e.value&&(r-t)/e.value;++s=1?(n=1,t-1):Math.floor(n*t),a=e[r],o=e[r+1],s=r>0?e[r-1]:2*a-o,l=rl&&(s=t.slice(l,s),u[c]?u[c]+=s:u[++c]=s),(n=n[0])===(o=o[0])?u[c]?u[c]+=o:u[++c]=o:(u[++c]=null,d.push({i:c,x:(0,r.Z)(n,o)})),l=a.lastIndex;return li)if(Math.abs(p*c-u*d)>i&&o){var h=r-s,m=a-l,g=c*c+u*u,_=h*h+m*m,v=Math.sqrt(g),y=Math.sqrt(f),b=o*Math.tan((n-Math.acos((g+f-_)/(2*v*y)))/2),E=b/y,S=b/v;Math.abs(E-1)>i&&(this._+="L"+(e+E*d)+","+(t+E*p)),this._+="A"+o+","+o+",0,0,"+ +(p*h>d*m)+","+(this._x1=e+S*c)+","+(this._y1=t+S*u)}else this._+="L"+(this._x1=e)+","+(this._y1=t);else;},arc:function(e,t,o,s,l,c){e=+e,t=+t,c=!!c;var u=(o=+o)*Math.cos(s),d=o*Math.sin(s),p=e+u,f=t+d,h=1^c,m=c?s-l:l-s;if(o<0)throw new Error("negative radius: "+o);null===this._x1?this._+="M"+p+","+f:(Math.abs(this._x1-p)>i||Math.abs(this._y1-f)>i)&&(this._+="L"+p+","+f),o&&(m<0&&(m=m%r+r),m>a?this._+="A"+o+","+o+",0,1,"+h+","+(e-u)+","+(t-d)+"A"+o+","+o+",0,1,"+h+","+(this._x1=p)+","+(this._y1=f):m>i&&(this._+="A"+o+","+o+",0,"+ +(m>=n)+","+h+","+(this._x1=e+o*Math.cos(l))+","+(this._y1=t+o*Math.sin(l))))},rect:function(e,t,n,r){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}},t.Z=s},97715:function(e,t,n){"use strict";function r(e,t){return et?1:e>=t?0:NaN}function i(e){var t=e,n=e;function i(e,t,r,i){for(null==r&&(r=0),null==i&&(i=e.length);r>>1;n(e[a],t)<0?r=a+1:i=a}return r}return 1===e.length&&(t=function(t,n){return e(t)-n},n=function(e){return function(t,n){return r(e(t),n)}}(e)),{left:i,center:function(e,n,r,a){null==r&&(r=0),null==a&&(a=e.length);var o=i(e,n,r,a-1);return o>r&&t(e[o-1],n)>-t(e[o],n)?o-1:o},right:function(e,t,r,i){for(null==r&&(r=0),null==i&&(i=e.length);r>>1;n(e[a],t)>0?i=a:r=a+1}return r}}}n.d(t,{JG:function(){return _},ZP:function(){return y},yR:function(){return f},l4:function(){return v}});n(11092),n(60726);var a=i(r),o=a.right,s=(a.left,i((function(e){return null===e?NaN:+e})).center,o),l=n(57281),c=n(15638);function u(e,t){return e=+e,t=+t,function(n){return Math.round(e*(1-n)+t*n)}}function d(e){return+e}var p=[0,1];function f(e){return e}function h(e,t){return(t-=e=+e)?function(n){return(n-e)/t}:(n=isNaN(t)?NaN:.5,function(){return n});var n}function m(e,t,n){var r=e[0],i=e[1],a=t[0],o=t[1];return it&&(n=e,e=t,t=n),function(n){return Math.max(e,Math.min(t,n))}}(o[0],o[e-1])),r=e>2?g:m,i=a=null,y}function y(t){return null==t||isNaN(t=+t)?n:(i||(i=r(o.map(e),s,h)))(e(_(t)))}return y.invert=function(n){return _(t((a||(a=r(s,o.map(e),c.Z)))(n)))},y.domain=function(e){return arguments.length?(o=Array.from(e,d),v()):o.slice()},y.range=function(e){return arguments.length?(s=Array.from(e),v()):s.slice()},y.rangeRound=function(e){return s=Array.from(e),h=u,v()},y.clamp=function(e){return arguments.length?(_=!!e||f,v()):_!==f},y.interpolate=function(e){return arguments.length?(h=e,v()):h},y.unknown=function(e){return arguments.length?(n=e,y):n},function(n,r){return e=n,t=r,v()}}function y(){return v()(f,f)}},69793:function(e,t,n){"use strict";function r(e,t){switch(arguments.length){case 0:break;case 1:this.range(e);break;default:this.range(t).domain(e)}return this}n.d(t,{o:function(){return r}})},80229:function(e,t,n){"use strict";n.d(t,{Z:function(){return w},Q:function(){return x}});var r=Math.sqrt(50),i=Math.sqrt(10),a=Math.sqrt(2);function o(e,t,n){var o=(t-e)/Math.max(0,n),s=Math.floor(Math.log(o)/Math.LN10),l=o/Math.pow(10,s);return s>=0?(l>=r?10:l>=i?5:l>=a?2:1)*Math.pow(10,s):-Math.pow(10,-s)/(l>=r?10:l>=i?5:l>=a?2:1)}var s,l=n(97715),c=n(69793),u=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function d(e){if(!(t=u.exec(e)))throw new Error("invalid format: "+e);var t;return new p({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}function p(e){this.fill=void 0===e.fill?" ":e.fill+"",this.align=void 0===e.align?">":e.align+"",this.sign=void 0===e.sign?"-":e.sign+"",this.symbol=void 0===e.symbol?"":e.symbol+"",this.zero=!!e.zero,this.width=void 0===e.width?void 0:+e.width,this.comma=!!e.comma,this.precision=void 0===e.precision?void 0:+e.precision,this.trim=!!e.trim,this.type=void 0===e.type?"":e.type+""}function f(e,t){if((n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var n,r=e.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+e.slice(n+1)]}function h(e){return(e=f(Math.abs(e)))?e[1]:NaN}function m(e,t){var n=f(e,t);if(!n)return e+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}d.prototype=p.prototype,p.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var g={"%":function(e,t){return(100*e).toFixed(t)},b:function(e){return Math.round(e).toString(2)},c:function(e){return e+""},d:function(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)},e:function(e,t){return e.toExponential(t)},f:function(e,t){return e.toFixed(t)},g:function(e,t){return e.toPrecision(t)},o:function(e){return Math.round(e).toString(8)},p:function(e,t){return m(100*e,t)},r:m,s:function(e,t){var n=f(e,t);if(!n)return e+"";var r=n[0],i=n[1],a=i-(s=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=r.length;return a===o?r:a>o?r+new Array(a-o+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+f(e,Math.max(0,t+a-1))[0]},X:function(e){return Math.round(e).toString(16).toUpperCase()},x:function(e){return Math.round(e).toString(16)}};function _(e){return e}var v,y,b,E=Array.prototype.map,S=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"];function T(e){var t,n,r=void 0===e.grouping||void 0===e.thousands?_:(t=E.call(e.grouping,Number),n=e.thousands+"",function(e,r){for(var i=e.length,a=[],o=0,s=t[0],l=0;i>0&&s>0&&(l+s+1>r&&(s=Math.max(1,r-l)),a.push(e.substring(i-=s,i+s)),!((l+=s+1)>r));)s=t[o=(o+1)%t.length];return a.reverse().join(n)}),i=void 0===e.currency?"":e.currency[0]+"",a=void 0===e.currency?"":e.currency[1]+"",o=void 0===e.decimal?".":e.decimal+"",l=void 0===e.numerals?_:function(e){return function(t){return t.replace(/[0-9]/g,(function(t){return e[+t]}))}}(E.call(e.numerals,String)),c=void 0===e.percent?"%":e.percent+"",u=void 0===e.minus?"\u2212":e.minus+"",p=void 0===e.nan?"NaN":e.nan+"";function f(e){var t=(e=d(e)).fill,n=e.align,f=e.sign,h=e.symbol,m=e.zero,_=e.width,v=e.comma,y=e.precision,b=e.trim,E=e.type;"n"===E?(v=!0,E="g"):g[E]||(void 0===y&&(y=12),b=!0,E="g"),(m||"0"===t&&"="===n)&&(m=!0,t="0",n="=");var T="$"===h?i:"#"===h&&/[boxX]/.test(E)?"0"+E.toLowerCase():"",C="$"===h?a:/[%p]/.test(E)?c:"",x=g[E],w=/[defgprs%]/.test(E);function O(e){var i,a,c,d=T,h=C;if("c"===E)h=x(e)+h,e="";else{var g=(e=+e)<0||1/e<0;if(e=isNaN(e)?p:x(Math.abs(e),y),b&&(e=function(e){e:for(var t,n=e.length,r=1,i=-1;r0&&(i=0)}return i>0?e.slice(0,i)+e.slice(t+1):e}(e)),g&&0===+e&&"+"!==f&&(g=!1),d=(g?"("===f?f:u:"-"===f||"("===f?"":f)+d,h=("s"===E?S[8+s/3]:"")+h+(g&&"("===f?")":""),w)for(i=-1,a=e.length;++i(c=e.charCodeAt(i))||c>57){h=(46===c?o+e.slice(i+1):e.slice(i))+h,e=e.slice(0,i);break}}v&&!m&&(e=r(e,1/0));var O=d.length+e.length+h.length,N=O<_?new Array(_-O+1).join(t):"";switch(v&&m&&(e=r(N+e,N.length?_-h.length:1/0),N=""),n){case"<":e=d+e+h+N;break;case"=":e=d+N+e+h;break;case"^":e=N.slice(0,O=N.length>>1)+d+e+h+N.slice(O);break;default:e=N+d+e+h}return l(e)}return y=void 0===y?6:/[gprs]/.test(E)?Math.max(1,Math.min(21,y)):Math.max(0,Math.min(20,y)),O.toString=function(){return e+""},O}return{format:f,formatPrefix:function(e,t){var n=f(((e=d(e)).type="f",e)),r=3*Math.max(-8,Math.min(8,Math.floor(h(t)/3))),i=Math.pow(10,-r),a=S[8+r/3];return function(e){return n(i*e)+a}}}}function C(e,t,n,o){var s,l=function(e,t,n){var o=Math.abs(t-e)/Math.max(0,n),s=Math.pow(10,Math.floor(Math.log(o)/Math.LN10)),l=o/s;return l>=r?s*=10:l>=i?s*=5:l>=a&&(s*=2),t0)return[e];if((r=t0){var c=Math.round(e/s),u=Math.round(t/s);for(c*st&&--u,a=new Array(i=u-c+1);++lt&&--p,a=new Array(i=p-d+1);++l0;){if((i=o(c,u,n))===r)return a[s]=c,a[l]=u,t(a);if(i>0)c=Math.floor(c/i)*i,u=Math.ceil(u/i)*i;else{if(!(i<0))break;c=Math.ceil(c*i)/i,u=Math.floor(u*i)/i}r=i}return e},e}function w(){var e=(0,l.ZP)();return e.copy=function(){return(0,l.JG)(e,w())},c.o.apply(e,arguments),x(e)}v=T({thousands:",",grouping:[3],currency:["$",""]}),y=v.format,b=v.formatPrefix},58414:function(e,t,n){"use strict";n.d(t,{_b:function(){return d}});var r=n(80229),i=n(97715),a=n(69793);function o(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function s(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function l(e){return e<0?-e*e:e*e}function c(e){var t=e(i.yR,i.yR),n=1;function a(){return 1===n?e(i.yR,i.yR):.5===n?e(s,l):e(o(n),o(1/n))}return t.exponent=function(e){return arguments.length?(n=+e,a()):n},(0,r.Q)(t)}function u(){var e=c((0,i.l4)());return e.copy=function(){return(0,i.JG)(e,u()).exponent(e.exponent())},a.o.apply(e,arguments),e}function d(){return u.apply(null,arguments).exponent(.5)}},17922:function(e,t,n){"use strict";function r(e){return function(){return this.matches(e)}}n.d(t,{Z:function(){return r}})},91965:function(e,t,n){"use strict";n.d(t,{Z:function(){return i}});var r=n(94249);function i(e){var t=e+="",n=t.indexOf(":");return n>=0&&"xmlns"!==(t=e.slice(0,n))&&(e=e.slice(n+1)),r.Z.hasOwnProperty(t)?{space:r.Z[t],local:e}:e}},94249:function(e,t,n){"use strict";n.d(t,{P:function(){return r}});var r="http://www.w3.org/1999/xhtml";t.Z={svg:"http://www.w3.org/2000/svg",xhtml:r,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"}},54315:function(e,t,n){"use strict";n.d(t,{Z:function(){return i}});var r=n(63954);function i(e){return"string"===typeof e?new r.Y1([[document.querySelector(e)]],[document.documentElement]):new r.Y1([[e]],r.Jz)}},63954:function(e,t,n){"use strict";n.d(t,{Y1:function(){return X},ZP:function(){return ee},Jz:function(){return Q}});var r=n(90574);var i=n(45513);var a=n(17922);function o(e){return new Array(e.length)}function s(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}s.prototype={constructor:s,appendChild:function(e){return this._parent.insertBefore(e,this._next)},insertBefore:function(e,t){return this._parent.insertBefore(e,t)},querySelector:function(e){return this._parent.querySelector(e)},querySelectorAll:function(e){return this._parent.querySelectorAll(e)}};function l(e,t,n,r,i,a){for(var o,l=0,c=t.length,u=a.length;lt?1:e>=t?0:NaN}var d=n(91965);function p(e){return function(){this.removeAttribute(e)}}function f(e){return function(){this.removeAttributeNS(e.space,e.local)}}function h(e,t){return function(){this.setAttribute(e,t)}}function m(e,t){return function(){this.setAttributeNS(e.space,e.local,t)}}function g(e,t){return function(){var n=t.apply(this,arguments);null==n?this.removeAttribute(e):this.setAttribute(e,n)}}function _(e,t){return function(){var n=t.apply(this,arguments);null==n?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,n)}}var v=n(81353);function y(e){return function(){delete this[e]}}function b(e,t){return function(){this[e]=t}}function E(e,t){return function(){var n=t.apply(this,arguments);null==n?delete this[e]:this[e]=n}}function S(e){return e.trim().split(/^|\s+/)}function T(e){return e.classList||new C(e)}function C(e){this._node=e,this._names=S(e.getAttribute("class")||"")}function x(e,t){for(var n=T(e),r=-1,i=t.length;++r=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};var B=n(94249);function U(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===B.P&&t.documentElement.namespaceURI===B.P?t.createElement(e):t.createElementNS(n,e)}}function G(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function z(e){var t=(0,d.Z)(e);return(t.local?G:U)(t)}function j(){return null}function H(){var e=this.parentNode;e&&e.removeChild(this)}function Z(){var e=this.cloneNode(!1),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function Y(){var e=this.cloneNode(!0),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}var V=n(73210),q=n(5885);function W(e,t,n){var r=(0,q.Z)(e),i=r.CustomEvent;"function"===typeof i?i=new i(t,n):(i=r.document.createEvent("Event"),n?(i.initEvent(t,n.bubbles,n.cancelable),i.detail=n.detail):i.initEvent(t,!1,!1)),e.dispatchEvent(i)}function $(e,t){return function(){return W(this,e,t)}}function K(e,t){return function(){return W(this,e,t.apply(this,arguments))}}var Q=[null];function X(e,t){this._groups=e,this._parents=t}function J(){return new X([[document.documentElement]],Q)}X.prototype=J.prototype={constructor:X,select:function(e){"function"!==typeof e&&(e=(0,r.Z)(e));for(var t=this._groups,n=t.length,i=new Array(n),a=0;a=T&&(T=S+1);!(E=y[T])&&++T<_;);b._next=E||null}}return(s=new X(s,i))._enter=u,s._exit=d,s},enter:function(){return new X(this._enter||this._groups.map(o),this._parents)},exit:function(){return new X(this._exit||this._groups.map(o),this._parents)},join:function(e,t,n){var r=this.enter(),i=this,a=this.exit();return r="function"===typeof e?e(r):r.append(e+""),null!=t&&(i=t(i)),null==n?a.remove():n(a),r&&i?r.merge(i).order():i},merge:function(e){for(var t=this._groups,n=e._groups,r=t.length,i=n.length,a=Math.min(r,i),o=new Array(r),s=0;s=0;)(r=i[a])&&(o&&4^r.compareDocumentPosition(o)&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(e){function t(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}e||(e=u);for(var n=this._groups,r=n.length,i=new Array(r),a=0;a1?this.each((null==t?y:"function"===typeof t?E:b)(e,t)):this.node()[e]},classed:function(e,t){var n=S(e+"");if(arguments.length<2){for(var r=T(this.node()),i=-1,a=n.length;++i=0&&(t=e.slice(n+1),e=e.slice(0,n)),{type:e,name:t}}))}function l(e){return function(){var t=this.__on;if(t){for(var n,r=0,i=-1,a=t.length;r1?this.each((null==t?i:"function"===typeof t?o:a)(e,t,null==n?"":n)):l(this.node(),e)}function l(e,t){return e.style.getPropertyValue(t)||(0,r.Z)(e).getComputedStyle(e,null).getPropertyValue(t)}},90574:function(e,t,n){"use strict";function r(){}function i(e){return null==e?r:function(){return this.querySelector(e)}}n.d(t,{Z:function(){return i}})},45513:function(e,t,n){"use strict";function r(){return[]}function i(e){return null==e?r:function(){return this.querySelectorAll(e)}}n.d(t,{Z:function(){return i}})},5885:function(e,t,n){"use strict";function r(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView}n.d(t,{Z:function(){return r}})},56794:function(e,t,n){"use strict";n.d(t,{Z:function(){return x}});var r=n(99769),i=n(7666),a=Math.abs,o=Math.atan2,s=Math.cos,l=Math.max,c=Math.min,u=Math.sin,d=Math.sqrt,p=1e-12,f=Math.PI,h=f/2,m=2*f;function g(e){return e>1?0:e<-1?f:Math.acos(e)}function _(e){return e>=1?h:e<=-1?-h:Math.asin(e)}function v(e){return e.innerRadius}function y(e){return e.outerRadius}function b(e){return e.startAngle}function E(e){return e.endAngle}function S(e){return e&&e.padAngle}function T(e,t,n,r,i,a,o,s){var l=n-e,c=r-t,u=o-i,d=s-a,f=d*l-u*c;if(!(f*fk*k+D*D&&(w=N,O=R),{cx:w,cy:O,x01:-p,y01:-f,x11:w*(i/T-1),y11:O*(i/T-1)}}function x(){var e=v,t=y,n=(0,i.Z)(0),l=null,x=b,w=E,O=S,N=null;function R(){var i,v,y=+e.apply(this,arguments),b=+t.apply(this,arguments),E=x.apply(this,arguments)-h,S=w.apply(this,arguments)-h,R=a(S-E),I=S>E;if(N||(N=i=(0,r.Z)()),bp)if(R>m-p)N.moveTo(b*s(E),b*u(E)),N.arc(0,0,b,E,S,!I),y>p&&(N.moveTo(y*s(S),y*u(S)),N.arc(0,0,y,S,E,I));else{var A,k,D=E,M=S,P=E,L=S,F=R,B=R,U=O.apply(this,arguments)/2,G=U>p&&(l?+l.apply(this,arguments):d(y*y+b*b)),z=c(a(b-y)/2,+n.apply(this,arguments)),j=z,H=z;if(G>p){var Z=_(G/y*u(U)),Y=_(G/b*u(U));(F-=2*Z)>p?(P+=Z*=I?1:-1,L-=Z):(F=0,P=L=(E+S)/2),(B-=2*Y)>p?(D+=Y*=I?1:-1,M-=Y):(B=0,D=M=(E+S)/2)}var V=b*s(D),q=b*u(D),W=y*s(L),$=y*u(L);if(z>p){var K,Q=b*s(M),X=b*u(M),J=y*s(P),ee=y*u(P);if(Rp?H>p?(A=C(J,ee,V,q,b,H,I),k=C(Q,X,W,$,b,H,I),N.moveTo(A.cx+A.x01,A.cy+A.y01),Hp&&F>p?j>p?(A=C(W,$,Q,X,y,-j,I),k=C(V,q,J,ee,y,-j,I),N.lineTo(A.cx+A.x01,A.cy+A.y01),j=0&&(n=e.slice(r+1),e=e.slice(0,r)),e&&!t.hasOwnProperty(e))throw new Error("unknown type: "+e);return{type:e,name:n}}))}function l(e,t){for(var n,r=0,i=e.length;r0)for(var n,r,i=new Array(n),a=0;a=0&&t._call.call(null,e),t=t._next;--h}()}finally{h=0,function(){var e,t,n=u,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),e=n,n=n._next):(t=n._next,n._next=null,n=e?e._next=t:u=t);d=e,N(r)}(),v=0}}function O(){var e=b.now(),t=e-_;t>1e3&&(y-=t,_=e)}function N(e){h||(m&&(m=clearTimeout(m)),e-v>24?(e<1/0&&(m=setTimeout(w,e-b.now()-y)),g&&(g=clearInterval(g))):(g||(_=b.now(),g=setInterval(O,1e3)),h=1,E(w)))}function R(e,t,n){var r=new C;return t=null==t?0:+t,r.restart((function(n){r.stop(),e(n+t)}),t,n),r}C.prototype=x.prototype={constructor:C,restart:function(e,t,n){if("function"!==typeof e)throw new TypeError("callback is not a function");n=(null==n?S():+n)+(null==t?0:+t),this._next||d===this||(d?d._next=this:u=this,d=this),this._call=e,this._time=n,N()},stop:function(){this._call&&(this._call=null,this._time=1/0,N())}};var I=p("start","end","cancel","interrupt"),A=[];function k(e,t,n,r,i,a){var o=e.__transition;if(o){if(n in o)return}else e.__transition={};!function(e,t,n){var r,i=e.__transition;function a(e){n.state=1,n.timer.restart(o,n.delay,n.time),n.delay<=e&&o(e-n.delay)}function o(a){var c,u,d,p;if(1!==n.state)return l();for(c in i)if((p=i[c]).name===n.name){if(3===p.state)return R(o);4===p.state?(p.state=6,p.timer.stop(),p.on.call("interrupt",e,e.__data__,p.index,p.group),delete i[c]):+c0)throw new Error("too late; already scheduled");return n}function M(e,t){var n=P(e,t);if(n.state>3)throw new Error("too late; already running");return n}function P(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}var L,F,B,U,G=n(15638),z=180/Math.PI,j={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function H(e,t,n,r,i,a){var o,s,l;return(o=Math.sqrt(e*e+t*t))&&(e/=o,t/=o),(l=e*n+t*r)&&(n-=e*l,r-=t*l),(s=Math.sqrt(n*n+r*r))&&(n/=s,r/=s,l/=s),e*r180?t+=360:t-e>180&&(e+=360),a.push({i:n.push(i(n)+"rotate(",null,r)-2,x:(0,G.Z)(e,t)})):t&&n.push(i(n)+"rotate("+t+r)}(a.rotate,o.rotate,s,l),function(e,t,n,a){e!==t?a.push({i:n.push(i(n)+"skewX(",null,r)-2,x:(0,G.Z)(e,t)}):t&&n.push(i(n)+"skewX("+t+r)}(a.skewX,o.skewX,s,l),function(e,t,n,r,a,o){if(e!==n||t!==r){var s=a.push(i(a)+"scale(",null,",",null,")");o.push({i:s-4,x:(0,G.Z)(e,n)},{i:s-2,x:(0,G.Z)(t,r)})}else 1===n&&1===r||a.push(i(a)+"scale("+n+","+r+")")}(a.scaleX,a.scaleY,o.scaleX,o.scaleY,s,l),a=o=null,function(e){for(var t,n=-1,r=l.length;++n=0&&(e=e.slice(0,t)),!e||"start"===e}))}(t)?D:M;return function(){var o=a(this,e),s=o.on;s!==r&&(i=(r=s).copy()).on(t,n),o.on=i}}var ve=n(90574);var ye=n(45513);var be=r.ZP.prototype.constructor;var Ee=n(81353);function Se(e){return function(){this.style.removeProperty(e)}}function Te(e,t,n){return function(r){this.style.setProperty(e,t.call(this,r),n)}}function Ce(e,t,n){var r,i;function a(){var a=t.apply(this,arguments);return a!==i&&(r=(i=a)&&Te(e,a,n)),r}return a._value=t,a}function xe(e){return function(t){this.textContent=e.call(this,t)}}function we(e){var t,n;function r(){var r=e.apply(this,arguments);return r!==n&&(t=(n=r)&&xe(r)),t}return r._value=e,r}var Oe=0;function Ne(e,t,n,r){this._groups=e,this._parents=t,this._name=n,this._id=r}function Re(e){return(0,r.ZP)().transition(e)}function Ie(){return++Oe}var Ae=r.ZP.prototype;Ne.prototype=Re.prototype={constructor:Ne,select:function(e){var t=this._name,n=this._id;"function"!==typeof e&&(e=(0,ve.Z)(e));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o2&&n.state<5,n.state=6,n.timer.stop(),n.on.call(r?"interrupt":"cancel",e,e.__data__,n.index,n.group),delete a[i]):o=!1;o&&delete e.__transition}}(this,e)}))},r.ZP.prototype.transition=function(e){var t,n;e instanceof Ne?(t=e._id,e=e._name):(t=Ie(),(n=ke).time=S(),e=null==e?null:e+"");for(var r=this._groups,i=r.length,a=0;a0;--l)if(r=t[l].dequeue()){i=i.concat(s(e,t,n,r,!0));break}}return i}(n.graph,n.buckets,n.zeroIdx);return r.flatten(r.map(c,(function(t){return e.outEdges(t.v,t.w)})),!0)};var o=r.constant(1);function s(e,t,n,i,a){var o=a?[]:void 0;return r.forEach(e.inEdges(i.v),(function(r){var i=e.edge(r),s=e.node(r.v);a&&o.push({v:r.v,w:r.w}),s.out-=i,l(t,n,s)})),r.forEach(e.outEdges(i.v),(function(r){var i=e.edge(r),a=r.w,o=e.node(a);o.in-=i,l(t,n,o)})),e.removeNode(i.v),o}function l(e,t,n){n.out?n.in?e[n.out-n.in+t].enqueue(n):e[e.length-1].enqueue(n):e[0].enqueue(n)}},22832:function(e,t,n){"use strict";var r=n(61471),i=n(92848),a=n(12876),o=n(82842),s=n(11195).normalizeRanks,l=n(67662),c=n(11195).removeEmptyRanks,u=n(10527),d=n(96169),p=n(40386),f=n(21673),h=n(72045),m=n(11195),g=n(41931).Graph;e.exports=function(e,t){var n=t&&t.debugTiming?m.time:m.notime;n("layout",(function(){var t=n(" buildLayoutGraph",(function(){return function(e){var t=new g({multigraph:!0,compound:!0}),n=w(e.graph());return t.setGraph(r.merge({},v,x(n,_),r.pick(n,y))),r.forEach(e.nodes(),(function(n){var i=w(e.node(n));t.setNode(n,r.defaults(x(i,b),E)),t.setParent(n,e.parent(n))})),r.forEach(e.edges(),(function(n){var i=w(e.edge(n));t.setEdge(n,r.merge({},T,x(i,S),r.pick(i,C)))})),t}(e)}));n(" runLayout",(function(){!function(e,t){t(" makeSpaceForEdgeLabels",(function(){!function(e){var t=e.graph();t.ranksep/=2,r.forEach(e.edges(),(function(n){var r=e.edge(n);r.minlen*=2,"c"!==r.labelpos.toLowerCase()&&("TB"===t.rankdir||"BT"===t.rankdir?r.width+=r.labeloffset:r.height+=r.labeloffset)}))}(e)})),t(" removeSelfEdges",(function(){!function(e){r.forEach(e.edges(),(function(t){if(t.v===t.w){var n=e.node(t.v);n.selfEdges||(n.selfEdges=[]),n.selfEdges.push({e:t,label:e.edge(t)}),e.removeEdge(t)}}))}(e)})),t(" acyclic",(function(){i.run(e)})),t(" nestingGraph.run",(function(){u.run(e)})),t(" rank",(function(){o(m.asNonCompoundGraph(e))})),t(" injectEdgeLabelProxies",(function(){!function(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);if(n.width&&n.height){var r=e.node(t.v),i={rank:(e.node(t.w).rank-r.rank)/2+r.rank,e:t};m.addDummyNode(e,"edge-proxy",i,"_ep")}}))}(e)})),t(" removeEmptyRanks",(function(){c(e)})),t(" nestingGraph.cleanup",(function(){u.cleanup(e)})),t(" normalizeRanks",(function(){s(e)})),t(" assignRankMinMax",(function(){!function(e){var t=0;r.forEach(e.nodes(),(function(n){var i=e.node(n);i.borderTop&&(i.minRank=e.node(i.borderTop).rank,i.maxRank=e.node(i.borderBottom).rank,t=r.max(t,i.maxRank))})),e.graph().maxRank=t}(e)})),t(" removeEdgeLabelProxies",(function(){!function(e){r.forEach(e.nodes(),(function(t){var n=e.node(t);"edge-proxy"===n.dummy&&(e.edge(n.e).labelRank=n.rank,e.removeNode(t))}))}(e)})),t(" normalize.run",(function(){a.run(e)})),t(" parentDummyChains",(function(){l(e)})),t(" addBorderSegments",(function(){d(e)})),t(" order",(function(){f(e)})),t(" insertSelfEdges",(function(){!function(e){var t=m.buildLayerMatrix(e);r.forEach(t,(function(t){var n=0;r.forEach(t,(function(t,i){var a=e.node(t);a.order=i+n,r.forEach(a.selfEdges,(function(t){m.addDummyNode(e,"selfedge",{width:t.label.width,height:t.label.height,rank:a.rank,order:i+ ++n,e:t.e,label:t.label},"_se")})),delete a.selfEdges}))}))}(e)})),t(" adjustCoordinateSystem",(function(){p.adjust(e)})),t(" position",(function(){h(e)})),t(" positionSelfEdges",(function(){!function(e){r.forEach(e.nodes(),(function(t){var n=e.node(t);if("selfedge"===n.dummy){var r=e.node(n.e.v),i=r.x+r.width/2,a=r.y,o=n.x-i,s=r.height/2;e.setEdge(n.e,n.label),e.removeNode(t),n.label.points=[{x:i+2*o/3,y:a-s},{x:i+5*o/6,y:a-s},{x:i+o,y:a},{x:i+5*o/6,y:a+s},{x:i+2*o/3,y:a+s}],n.label.x=n.x,n.label.y=n.y}}))}(e)})),t(" removeBorderNodes",(function(){!function(e){r.forEach(e.nodes(),(function(t){if(e.children(t).length){var n=e.node(t),i=e.node(n.borderTop),a=e.node(n.borderBottom),o=e.node(r.last(n.borderLeft)),s=e.node(r.last(n.borderRight));n.width=Math.abs(s.x-o.x),n.height=Math.abs(a.y-i.y),n.x=o.x+n.width/2,n.y=i.y+n.height/2}})),r.forEach(e.nodes(),(function(t){"border"===e.node(t).dummy&&e.removeNode(t)}))}(e)})),t(" normalize.undo",(function(){a.undo(e)})),t(" fixupEdgeLabelCoords",(function(){!function(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);if(r.has(n,"x"))switch("l"!==n.labelpos&&"r"!==n.labelpos||(n.width-=n.labeloffset),n.labelpos){case"l":n.x-=n.width/2+n.labeloffset;break;case"r":n.x+=n.width/2+n.labeloffset}}))}(e)})),t(" undoCoordinateSystem",(function(){p.undo(e)})),t(" translateGraph",(function(){!function(e){var t=Number.POSITIVE_INFINITY,n=0,i=Number.POSITIVE_INFINITY,a=0,o=e.graph(),s=o.marginx||0,l=o.marginy||0;function c(e){var r=e.x,o=e.y,s=e.width,l=e.height;t=Math.min(t,r-s/2),n=Math.max(n,r+s/2),i=Math.min(i,o-l/2),a=Math.max(a,o+l/2)}r.forEach(e.nodes(),(function(t){c(e.node(t))})),r.forEach(e.edges(),(function(t){var n=e.edge(t);r.has(n,"x")&&c(n)})),t-=s,i-=l,r.forEach(e.nodes(),(function(n){var r=e.node(n);r.x-=t,r.y-=i})),r.forEach(e.edges(),(function(n){var a=e.edge(n);r.forEach(a.points,(function(e){e.x-=t,e.y-=i})),r.has(a,"x")&&(a.x-=t),r.has(a,"y")&&(a.y-=i)})),o.width=n-t+s,o.height=a-i+l}(e)})),t(" assignNodeIntersects",(function(){!function(e){r.forEach(e.edges(),(function(t){var n,r,i=e.edge(t),a=e.node(t.v),o=e.node(t.w);i.points?(n=i.points[0],r=i.points[i.points.length-1]):(i.points=[],n=o,r=a),i.points.unshift(m.intersectRect(a,n)),i.points.push(m.intersectRect(o,r))}))}(e)})),t(" reversePoints",(function(){!function(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);n.reversed&&n.points.reverse()}))}(e)})),t(" acyclic.undo",(function(){i.undo(e)}))}(t,n)})),n(" updateInputGraph",(function(){!function(e,t){r.forEach(e.nodes(),(function(n){var r=e.node(n),i=t.node(n);r&&(r.x=i.x,r.y=i.y,t.children(n).length&&(r.width=i.width,r.height=i.height))})),r.forEach(e.edges(),(function(n){var i=e.edge(n),a=t.edge(n);i.points=a.points,r.has(a,"x")&&(i.x=a.x,i.y=a.y)})),e.graph().width=t.graph().width,e.graph().height=t.graph().height}(e,t)}))}))};var _=["nodesep","edgesep","ranksep","marginx","marginy"],v={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},y=["acyclicer","ranker","rankdir","align"],b=["width","height"],E={width:0,height:0},S=["minlen","weight","width","height","labeloffset"],T={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},C=["labelpos"];function x(e,t){return r.mapValues(r.pick(e,t),Number)}function w(e){var t={};return r.forEach(e,(function(e,n){t[n.toLowerCase()]=e})),t}},61471:function(e,t,n){"use strict";var r;try{r={cloneDeep:n(37411),constant:n(92897),defaults:n(30144),each:n(33001),filter:n(11501),find:n(53929),flatten:n(86066),forEach:n(99058),forIn:n(83833),has:n(36776),isUndefined:n(35968),last:n(57735),map:n(19525),mapValues:n(2186),max:n(41208),merge:n(9783),min:n(60379),minBy:n(67655),now:n(29586),pick:n(39636),range:n(13489),reduce:n(44673),sortBy:n(21409),uniqueId:n(81026),values:n(3002),zipObject:n(5485)}}catch(i){}r||(r=window._),e.exports=r},10527:function(e,t,n){"use strict";var r=n(61471),i=n(11195);function a(e,t,n,o,s,l,c){var u=e.children(c);if(u.length){var d=i.addBorderNode(e,"_bt"),p=i.addBorderNode(e,"_bb"),f=e.node(c);e.setParent(d,c),f.borderTop=d,e.setParent(p,c),f.borderBottom=p,r.forEach(u,(function(r){a(e,t,n,o,s,l,r);var i=e.node(r),u=i.borderTop?i.borderTop:r,f=i.borderBottom?i.borderBottom:r,h=i.borderTop?o:2*o,m=u!==f?1:s-l[c]+1;e.setEdge(d,u,{weight:h,minlen:m,nestingEdge:!0}),e.setEdge(f,p,{weight:h,minlen:m,nestingEdge:!0})})),e.parent(c)||e.setEdge(t,d,{weight:0,minlen:s+l[c]})}else c!==t&&e.setEdge(t,c,{weight:0,minlen:n})}e.exports={run:function(e){var t=i.addDummyNode(e,"root",{},"_root"),n=function(e){var t={};function n(i,a){var o=e.children(i);o&&o.length&&r.forEach(o,(function(e){n(e,a+1)})),t[i]=a}return r.forEach(e.children(),(function(e){n(e,1)})),t}(e),o=r.max(r.values(n))-1,s=2*o+1;e.graph().nestingRoot=t,r.forEach(e.edges(),(function(t){e.edge(t).minlen*=s}));var l=function(e){return r.reduce(e.edges(),(function(t,n){return t+e.edge(n).weight}),0)}(e)+1;r.forEach(e.children(),(function(r){a(e,t,s,l,o,n,r)})),e.graph().nodeRankFactor=s},cleanup:function(e){var t=e.graph();e.removeNode(t.nestingRoot),delete t.nestingRoot,r.forEach(e.edges(),(function(t){e.edge(t).nestingEdge&&e.removeEdge(t)}))}}},12876:function(e,t,n){"use strict";var r=n(61471),i=n(11195);e.exports={run:function(e){e.graph().dummyChains=[],r.forEach(e.edges(),(function(t){!function(e,t){var n,r,a,o=t.v,s=e.node(o).rank,l=t.w,c=e.node(l).rank,u=t.name,d=e.edge(t),p=d.labelRank;if(c===s+1)return;for(e.removeEdge(t),a=0,++s;s0;)t%2&&(n+=l[t+1]),l[t=t-1>>1]+=e.weight;c+=e.weight*n}))),c}e.exports=function(e,t){for(var n=0,r=1;r=2),s=u.buildLayerMatrix(e);var g=a(e,s);g=e.barycenter)&&function(e,t){var n=0,r=0;e.weight&&(n+=e.barycenter*e.weight,r+=e.weight);t.weight&&(n+=t.barycenter*t.weight,r+=t.weight);e.vs=t.vs.concat(e.vs),e.barycenter=n/r,e.weight=r,e.i=Math.min(t.i,e.i),t.merged=!0}(e,t)}}function i(t){return function(n){n.in.push(t),0===--n.indegree&&e.push(n)}}for(;e.length;){var a=e.pop();t.push(a),r.forEach(a.in.reverse(),n(a)),r.forEach(a.out,i(a))}return r.map(r.filter(t,(function(e){return!e.merged})),(function(e){return r.pick(e,["vs","i","barycenter","weight"])}))}(r.filter(n,(function(e){return!e.indegree})))}},40604:function(e,t,n){"use strict";var r=n(61471),i=n(32796),a=n(51384),o=n(90962);e.exports=function e(t,n,s,l){var c=t.children(n),u=t.node(n),d=u?u.borderLeft:void 0,p=u?u.borderRight:void 0,f={};d&&(c=r.filter(c,(function(e){return e!==d&&e!==p})));var h=i(t,c);r.forEach(h,(function(n){if(t.children(n.v).length){var i=e(t,n.v,s,l);f[n.v]=i,r.has(i,"barycenter")&&(a=n,o=i,r.isUndefined(a.barycenter)?(a.barycenter=o.barycenter,a.weight=o.weight):(a.barycenter=(a.barycenter*a.weight+o.barycenter*o.weight)/(a.weight+o.weight),a.weight+=o.weight))}var a,o}));var m=a(h,s);!function(e,t){r.forEach(e,(function(e){e.vs=r.flatten(e.vs.map((function(e){return t[e]?t[e].vs:e})),!0)}))}(m,f);var g=o(m,l);if(d&&(g.vs=r.flatten([d,g.vs,p],!0),t.predecessors(d).length)){var _=t.node(t.predecessors(d)[0]),v=t.node(t.predecessors(p)[0]);r.has(g,"barycenter")||(g.barycenter=0,g.weight=0),g.barycenter=(g.barycenter*g.weight+_.order+v.order)/(g.weight+2),g.weight+=2}return g}},90962:function(e,t,n){"use strict";var r=n(61471),i=n(11195);function a(e,t,n){for(var i;t.length&&(i=r.last(t)).i<=n;)t.pop(),e.push(i.vs),n++;return n}e.exports=function(e,t){var n=i.partition(e,(function(e){return r.has(e,"barycenter")})),o=n.lhs,s=r.sortBy(n.rhs,(function(e){return-e.i})),l=[],c=0,u=0,d=0;o.sort((p=!!t,function(e,t){return e.barycentert.barycenter?1:p?t.i-e.i:e.i-t.i})),d=a(l,s,d),r.forEach(o,(function(e){d+=e.vs.length,l.push(e.vs),c+=e.barycenter*e.weight,u+=e.weight,d=a(l,s,d)}));var p;var f={vs:r.flatten(l,!0)};u&&(f.barycenter=c/u,f.weight=u);return f}},67662:function(e,t,n){"use strict";var r=n(61471);e.exports=function(e){var t=function(e){var t={},n=0;function i(a){var o=n;r.forEach(e.children(a),i),t[a]={low:o,lim:n++}}return r.forEach(e.children(),i),t}(e);r.forEach(e.graph().dummyChains,(function(n){for(var r=e.node(n),i=r.edgeObj,a=function(e,t,n,r){var i,a,o=[],s=[],l=Math.min(t[n].low,t[r].low),c=Math.max(t[n].lim,t[r].lim);i=n;do{i=e.parent(i),o.push(i)}while(i&&(t[i].low>l||c>t[i].lim));a=i,i=r;for(;(i=e.parent(i))!==a;)s.push(i);return{path:o.concat(s.reverse()),lca:a}}(e,t,i.v,i.w),o=a.path,s=a.lca,l=0,c=o[l],u=!0;n!==i.w;){if(r=e.node(n),u){for(;(c=o[l])!==s&&e.node(c).maxRanks)&&l(n,t,c)}))}))}return r.reduce(t,(function(t,n){var a,o=-1,s=0;return r.forEach(n,(function(r,l){if("border"===e.node(r).dummy){var c=e.predecessors(r);c.length&&(a=e.node(c[0]).order,i(n,s,l,o,a),s=l,o=a)}i(n,s,n.length,a,t.length)})),n})),n}function l(e,t,n){if(t>n){var r=t;t=n,n=r}var i=e[t];i||(e[t]=i={}),i[n]=!0}function c(e,t,n){if(t>n){var i=t;t=n,n=i}return r.has(e[t],n)}function u(e,t,n,i){var a={},o={},s={};return r.forEach(t,(function(e){r.forEach(e,(function(e,t){a[e]=e,o[e]=e,s[e]=t}))})),r.forEach(t,(function(e){var t=-1;r.forEach(e,(function(e){var l=i(e);if(l.length){l=r.sortBy(l,(function(e){return s[e]}));for(var u=(l.length-1)/2,d=Math.floor(u),p=Math.ceil(u);d<=p;++d){var f=l[d];o[e]===e&&tl.lim&&(c=l,u=!0);var d=r.filter(t.edges(),(function(t){return u===v(e,e.node(t.v),c)&&u!==v(e,e.node(t.w),c)}));return r.minBy(d,(function(e){return a(t,e)}))}function _(e,t,n,i){var a=n.v,o=n.w;e.removeEdge(a,o),e.setEdge(i.v,i.w,{}),f(e),d(e,t),function(e,t){var n=r.find(e.nodes(),(function(e){return!t.node(e).parent})),i=s(e,n);i=i.slice(1),r.forEach(i,(function(n){var r=e.node(n).parent,i=t.edge(n,r),a=!1;i||(i=t.edge(r,n),a=!0),t.node(n).rank=t.node(r).rank+(a?i.minlen:-i.minlen)}))}(e,t)}function v(e,t,n){return n.low<=t.lim&&t.lim<=n.lim}e.exports=u,u.initLowLimValues=f,u.initCutValues=d,u.calcCutValue=p,u.leaveEdge=m,u.enterEdge=g,u.exchangeEdges=_},23700:function(e,t,n){"use strict";var r=n(61471);e.exports={longestPath:function(e){var t={};r.forEach(e.sources(),(function n(i){var a=e.node(i);if(r.has(t,i))return a.rank;t[i]=!0;var o=r.min(r.map(e.outEdges(i),(function(t){return n(t.w)-e.edge(t).minlen})));return o!==Number.POSITIVE_INFINITY&&void 0!==o&&null!==o||(o=0),a.rank=o}))},slack:function(e,t){return e.node(t.w).rank-e.node(t.v).rank-e.edge(t).minlen}}},11195:function(e,t,n){"use strict";var r=n(61471),i=n(41931).Graph;function a(e,t,n,i){var a;do{a=r.uniqueId(i)}while(e.hasNode(a));return n.dummy=t,e.setNode(a,n),a}function o(e){return r.max(r.map(e.nodes(),(function(t){var n=e.node(t).rank;if(!r.isUndefined(n))return n})))}e.exports={addDummyNode:a,simplify:function(e){var t=(new i).setGraph(e.graph());return r.forEach(e.nodes(),(function(n){t.setNode(n,e.node(n))})),r.forEach(e.edges(),(function(n){var r=t.edge(n.v,n.w)||{weight:0,minlen:1},i=e.edge(n);t.setEdge(n.v,n.w,{weight:r.weight+i.weight,minlen:Math.max(r.minlen,i.minlen)})})),t},asNonCompoundGraph:function(e){var t=new i({multigraph:e.isMultigraph()}).setGraph(e.graph());return r.forEach(e.nodes(),(function(n){e.children(n).length||t.setNode(n,e.node(n))})),r.forEach(e.edges(),(function(n){t.setEdge(n,e.edge(n))})),t},successorWeights:function(e){var t=r.map(e.nodes(),(function(t){var n={};return r.forEach(e.outEdges(t),(function(t){n[t.w]=(n[t.w]||0)+e.edge(t).weight})),n}));return r.zipObject(e.nodes(),t)},predecessorWeights:function(e){var t=r.map(e.nodes(),(function(t){var n={};return r.forEach(e.inEdges(t),(function(t){n[t.v]=(n[t.v]||0)+e.edge(t).weight})),n}));return r.zipObject(e.nodes(),t)},intersectRect:function(e,t){var n,r,i=e.x,a=e.y,o=t.x-i,s=t.y-a,l=e.width/2,c=e.height/2;if(!o&&!s)throw new Error("Not possible to find intersection inside of the rectangle");Math.abs(s)*l>Math.abs(o)*c?(s<0&&(c=-c),n=c*o/s,r=c):(o<0&&(l=-l),n=l,r=l*s/o);return{x:i+n,y:a+r}},buildLayerMatrix:function(e){var t=r.map(r.range(o(e)+1),(function(){return[]}));return r.forEach(e.nodes(),(function(n){var i=e.node(n),a=i.rank;r.isUndefined(a)||(t[a][i.order]=n)})),t},normalizeRanks:function(e){var t=r.min(r.map(e.nodes(),(function(t){return e.node(t).rank})));r.forEach(e.nodes(),(function(n){var i=e.node(n);r.has(i,"rank")&&(i.rank-=t)}))},removeEmptyRanks:function(e){var t=r.min(r.map(e.nodes(),(function(t){return e.node(t).rank}))),n=[];r.forEach(e.nodes(),(function(r){var i=e.node(r).rank-t;n[i]||(n[i]=[]),n[i].push(r)}));var i=0,a=e.graph().nodeRankFactor;r.forEach(n,(function(t,n){r.isUndefined(t)&&n%a!==0?--i:i&&r.forEach(t,(function(t){e.node(t).rank+=i}))}))},addBorderNode:function(e,t,n,r){var i={width:0,height:0};arguments.length>=4&&(i.rank=n,i.order=r);return a(e,"border",i,t)},maxRank:o,partition:function(e,t){var n={lhs:[],rhs:[]};return r.forEach(e,(function(e){t(e)?n.lhs.push(e):n.rhs.push(e)})),n},time:function(e,t){var n=r.now();try{return t()}finally{console.log(e+" time: "+(r.now()-n)+"ms")}},notime:function(e,t){return t()}}},79889:function(e){"use strict";e.exports="0.8.5"},49108:function(e,t,n){"use strict";var r=n(7501).default,i=n(28474),a=n(10996),o=n(10480),s=n(34344),l=n(63725),c=n(64146),u=n(17946),d=n(18542),p=n(51815),f=n(45165),h=n(80573),m=n(35089),g=n(39262),_=n(50314),v=n(97426),y=f("ArrayBuffer.prototype.byteLength",!0);function b(e){if(!e||"object"!==r(e)||!y)return!1;try{return y(e),!0}catch(t){return!1}}var E=f("Date.prototype.getTime"),S=Object.getPrototypeOf,T=f("Object.prototype.toString"),C=p("%Set%",!0),x=f("Map.prototype.has",!0),w=f("Map.prototype.get",!0),O=f("Map.prototype.size",!0),N=f("Set.prototype.add",!0),R=f("Set.prototype.delete",!0),I=f("Set.prototype.has",!0),A=f("Set.prototype.size",!0);function k(e,t,n,r){for(var i,a=m(e);(i=a.next())&&!i.done;)if(F(t,i.value,n,r))return R(e,i.value),!0;return!1}function D(e){return"undefined"===typeof e?null:"object"!==r(e)?"symbol"!==r(e)&&("string"!==typeof e&&"number"!==typeof e||+e===+e):void 0}function M(e,t,n,r,i,a){var o=D(n);if(null!=o)return o;var s=w(t,o),l=v({},i,{strict:!1});return!("undefined"===typeof s&&!x(t,o)||!F(r,s,l,a))&&(!x(e,o)&&F(r,s,l,a))}function P(e,t,n){var r=D(n);return null!=r?r:I(t,r)&&!I(e,r)}function L(e,t,n,r,i,a){for(var o,s,l=m(e);(o=l.next())&&!o.done;)if(F(n,s=o.value,i,a)&&F(r,w(t,s),i,a))return R(e,s),!0;return!1}function F(e,t,n,p){var f=n||{};if(f.strict?o(e,t):e===t)return!0;if(d(e)!==d(t))return!1;if(!e||!t||"object"!==r(e)&&"object"!==r(t))return f.strict?o(e,t):e==t;var g,R=p.has(e),D=p.has(t);if(R&&D){if(p.get(e)===p.get(t))return!0}else g={};return R||p.set(e,g),D||p.set(t,g),function(e,t,n,o){var d,p;if(r(e)!==r(t))return!1;if(null==e||null==t)return!1;if(T(e)!==T(t))return!1;if(a(e)!==a(t))return!1;var f=c(e),g=c(t);if(f!==g)return!1;var R=e instanceof Error,D=t instanceof Error;if(R!==D)return!1;if((R||D)&&(e.name!==t.name||e.message!==t.message))return!1;var U=s(e),G=s(t);if(U!==G)return!1;if((U||G)&&(e.source!==t.source||l(e)!==l(t)))return!1;var z=u(e),j=u(t);if(z!==j)return!1;if((z||j)&&E(e)!==E(t))return!1;if(n.strict&&S&&S(e)!==S(t))return!1;if(_(e)!==_(t))return!1;var H=B(e),Z=B(t);if(H!==Z)return!1;if(H||Z){if(e.length!==t.length)return!1;for(d=0;d=0;d--)if(q[d]!=W[d])return!1;for(d=q.length-1;d>=0;d--)if(!F(e[p=q[d]],t[p],n,o))return!1;var $=h(e),K=h(t);if($!==K)return!1;if("Set"===$||"Set"===K)return function(e,t,n,i){if(A(e)!==A(t))return!1;var a,o,s,l=m(e),c=m(t);for(;(a=l.next())&&!a.done;)if(a.value&&"object"===r(a.value))s||(s=new C),N(s,a.value);else if(!I(t,a.value)){if(n.strict)return!1;if(!P(e,t,a.value))return!1;s||(s=new C),N(s,a.value)}if(s){for(;(o=c.next())&&!o.done;)if(o.value&&"object"===r(o.value)){if(!k(s,o.value,n.strict,i))return!1}else if(!n.strict&&!I(e,o.value)&&!k(s,o.value,n.strict,i))return!1;return 0===A(s)}return!0}(e,t,n,o);if("Map"===$)return function(e,t,n,i){if(O(e)!==O(t))return!1;var a,o,s,l,c,u,d=m(e),p=m(t);for(;(a=d.next())&&!a.done;)if(l=a.value[0],c=a.value[1],l&&"object"===r(l))s||(s=new C),N(s,l);else if("undefined"===typeof(u=w(t,l))&&!x(t,l)||!F(c,u,n,i)){if(n.strict)return!1;if(!M(e,t,l,c,n,i))return!1;s||(s=new C),N(s,l)}if(s){for(;(o=p.next())&&!o.done;)if(l=o.value[0],u=o.value[1],l&&"object"===r(l)){if(!L(s,e,l,u,n,i))return!1}else if(!n.strict&&(!e.has(l)||!F(w(e,l),u,n,i))&&!L(s,e,l,u,v({},n,{strict:!1}),i))return!1;return 0===A(s)}return!0}(e,t,n,o);return!0}(e,t,f,p)}function B(e){return!(!e||"object"!==r(e)||"number"!==typeof e.length)&&("function"===typeof e.copy&&"function"===typeof e.slice&&(!(e.length>0&&"number"!==typeof e[0])&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))))}e.exports=function(e,t,n){return F(e,t,n,g())}},75093:function(e,t,n){"use strict";var r=n(7501).default,i=n(28474),a="function"===typeof Symbol&&"symbol"===r(Symbol("foo")),o=Object.prototype.toString,s=Array.prototype.concat,l=Object.defineProperty,c=n(79179)(),u=l&&c,d=function(e,t,n,r){var i;(!(t in e)||"function"===typeof(i=r)&&"[object Function]"===o.call(i)&&r())&&(u?l(e,t,{configurable:!0,enumerable:!1,value:n,writable:!0}):e[t]=n)},p=function(e,t){var n=arguments.length>2?arguments[2]:{},r=i(t);a&&(r=s.call(r,Object.getOwnPropertySymbols(t)));for(var o=0;ot.length?e:t,l=e.length>t.length?t:e,c=s.indexOf(l);if(-1!=c)return o=[new i.Diff(1,s.substring(0,c)),new i.Diff(0,l),new i.Diff(1,s.substring(c+l.length))],e.length>t.length&&(o[0][0]=o[2][0]=a),o;if(1==l.length)return[new i.Diff(a,e),new i.Diff(1,t)];var u=this.diff_halfMatch_(e,t);if(u){var d=u[0],p=u[1],f=u[2],h=u[3],m=u[4],g=this.diff_main(d,f,n,r),_=this.diff_main(p,h,n,r);return g.concat([new i.Diff(0,m)],_)}return n&&e.length>100&&t.length>100?this.diff_lineMode_(e,t,r):this.diff_bisect_(e,t,r)},i.prototype.diff_lineMode_=function(e,t,n){var r=this.diff_linesToChars_(e,t);e=r.chars1,t=r.chars2;var o=r.lineArray,s=this.diff_main(e,t,!1,n);this.diff_charsToLines_(s,o),this.diff_cleanupSemantic(s),s.push(new i.Diff(0,""));for(var l=0,c=0,u=0,d="",p="";l=1&&u>=1){s.splice(l-c-u,c+u),l=l-c-u;for(var f=this.diff_main(d,p,!1,n),h=f.length-1;h>=0;h--)s.splice(l,0,f[h]);l+=f.length}u=0,c=0,d="",p=""}l++}return s.pop(),s},i.prototype.diff_bisect_=function(e,t,n){for(var r=e.length,o=t.length,s=Math.ceil((r+o)/2),l=s,c=2*s,u=new Array(c),d=new Array(c),p=0;pn);y++){for(var b=-y+m;b<=y-g;b+=2){for(var E=l+b,S=(O=b==-y||b!=y&&u[E-1]r)g+=2;else if(S>o)m+=2;else if(h){if((x=l+f-b)>=0&&x=(C=r-d[x]))return this.diff_bisectSplit_(e,t,O,S,n)}}for(var T=-y+_;T<=y-v;T+=2){for(var C,x=l+T,w=(C=T==-y||T!=y&&d[x-1]r)v+=2;else if(w>o)_+=2;else if(!h){if((E=l+f-T)>=0&&E=(C=r-C))return this.diff_bisectSplit_(e,t,O,S,n)}}}}return[new i.Diff(a,e),new i.Diff(1,t)]},i.prototype.diff_bisectSplit_=function(e,t,n,r,i){var a=e.substring(0,n),o=t.substring(0,r),s=e.substring(n),l=t.substring(r),c=this.diff_main(a,o,!1,i),u=this.diff_main(s,l,!1,i);return c.concat(u)},i.prototype.diff_linesToChars_=function(e,t){var n=[],r={};function i(e){for(var t="",i=0,o=-1,s=n.length;or?e=e.substring(n-r):nt.length?e:t,r=e.length>t.length?t:e;if(n.length<4||2*r.length=e.length?[r,a,o,s,u]:null}var o,s,l,c,u,d=a(n,r,Math.ceil(n.length/4)),p=a(n,r,Math.ceil(n.length/2));return d||p?(o=p?d&&d[4].length>p[4].length?d:p:d,e.length>t.length?(s=o[0],l=o[1],c=o[2],u=o[3]):(c=o[0],u=o[1],s=o[2],l=o[3]),[s,l,c,u,o[4]]):null},i.prototype.diff_cleanupSemantic=function(e){for(var t=!1,n=[],r=0,o=null,s=0,l=0,c=0,u=0,d=0;s0?n[r-1]:-1,l=0,c=0,u=0,d=0,o=null,t=!0)),s++;for(t&&this.diff_cleanupMerge(e),this.diff_cleanupSemanticLossless(e),s=1;s=m?(h>=p.length/2||h>=f.length/2)&&(e.splice(s,0,new i.Diff(0,f.substring(0,h))),e[s-1][1]=p.substring(0,p.length-h),e[s+1][1]=f.substring(h),s++):(m>=p.length/2||m>=f.length/2)&&(e.splice(s,0,new i.Diff(0,p.substring(0,m))),e[s-1][0]=1,e[s-1][1]=f.substring(0,f.length-m),e[s+1][0]=a,e[s+1][1]=p.substring(m),s++),s++}s++}},i.prototype.diff_cleanupSemanticLossless=function(e){function t(e,t){if(!e||!t)return 6;var n=e.charAt(e.length-1),r=t.charAt(0),a=n.match(i.nonAlphaNumericRegex_),o=r.match(i.nonAlphaNumericRegex_),s=a&&n.match(i.whitespaceRegex_),l=o&&r.match(i.whitespaceRegex_),c=s&&n.match(i.linebreakRegex_),u=l&&r.match(i.linebreakRegex_),d=c&&e.match(i.blanklineEndRegex_),p=u&&t.match(i.blanklineStartRegex_);return d||p?5:c||u?4:a&&!s&&l?3:s||l?2:a||o?1:0}for(var n=1;n=p&&(p=f,c=r,u=a,d=o)}e[n-1][1]!=c&&(c?e[n-1][1]=c:(e.splice(n-1,1),n--),e[n][1]=u,d?e[n+1][1]=d:(e.splice(n+1,1),n--))}n++}},i.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/,i.whitespaceRegex_=/\s/,i.linebreakRegex_=/[\r\n]/,i.blanklineEndRegex_=/\n\r?\n$/,i.blanklineStartRegex_=/^\r?\n\r?\n/,i.prototype.diff_cleanupEfficiency=function(e){for(var t=!1,n=[],r=0,o=null,s=0,l=!1,c=!1,u=!1,d=!1;s0?n[r-1]:-1,u=d=!1),t=!0)),s++;t&&this.diff_cleanupMerge(e)},i.prototype.diff_cleanupMerge=function(e){e.push(new i.Diff(0,""));for(var t,n=0,r=0,o=0,s="",l="";n1?(0!==r&&0!==o&&(0!==(t=this.diff_commonPrefix(l,s))&&(n-r-o>0&&0==e[n-r-o-1][0]?e[n-r-o-1][1]+=l.substring(0,t):(e.splice(0,0,new i.Diff(0,l.substring(0,t))),n++),l=l.substring(t),s=s.substring(t)),0!==(t=this.diff_commonSuffix(l,s))&&(e[n][1]=l.substring(l.length-t)+e[n][1],l=l.substring(0,l.length-t),s=s.substring(0,s.length-t))),n-=r+o,e.splice(n,r+o),s.length&&(e.splice(n,0,new i.Diff(a,s)),n++),l.length&&(e.splice(n,0,new i.Diff(1,l)),n++),n++):0!==n&&0==e[n-1][0]?(e[n-1][1]+=e[n][1],e.splice(n,1)):n++,o=0,r=0,s="",l=""}""===e[e.length-1][1]&&e.pop();var c=!1;for(n=1;nt));n++)o=r,s=i;return e.length!=n&&e[n][0]===a?s:s+(t-o)},i.prototype.diff_prettyHtml=function(e){for(var t=[],n=/&/g,r=//g,o=/\n/g,s=0;s");switch(l){case 1:t[s]=''+c+"";break;case a:t[s]=''+c+"";break;case 0:t[s]=""+c+""}}return t.join("")},i.prototype.diff_text1=function(e){for(var t=[],n=0;nthis.Match_MaxBits)throw new Error("Pattern too long for this browser.");var r=this.match_alphabet_(t),i=this;function a(e,r){var a=e/t.length,o=Math.abs(n-r);return i.Match_Distance?a+o/i.Match_Distance:o?1:a}var o=this.Match_Threshold,s=e.indexOf(t,n);-1!=s&&(o=Math.min(a(0,s),o),-1!=(s=e.lastIndexOf(t,n+t.length))&&(o=Math.min(a(0,s),o)));var l,c,u=1<=h;_--){var v=r[e.charAt(_-1)];if(g[_]=0===f?(g[_+1]<<1|1)&v:(g[_+1]<<1|1)&v|(d[_+1]|d[_])<<1|1|d[_+1],g[_]&u){var y=a(f,_-1);if(y<=o){if(o=y,!((s=_-1)>n))break;h=Math.max(1,2*n-s)}}}if(a(f+1,n)>o)break;d=g}return s},i.prototype.match_alphabet_=function(e){for(var t={},n=0;n2&&(this.diff_cleanupSemantic(s),this.diff_cleanupEfficiency(s));else if(e&&"object"==r(e)&&"undefined"==typeof t&&"undefined"==typeof n)s=e,o=this.diff_text1(s);else if("string"==typeof e&&t&&"object"==r(t)&&"undefined"==typeof n)o=e,s=t;else{if("string"!=typeof e||"string"!=typeof t||!n||"object"!=r(n))throw new Error("Unknown call format to patch_make.");o=e,s=n}if(0===s.length)return[];for(var l=[],c=new i.patch_obj,u=0,d=0,p=0,f=o,h=o,m=0;m=2*this.Patch_Margin&&u&&(this.patch_addContext_(c,f),l.push(c),c=new i.patch_obj,u=0,f=h,d=p)}1!==g&&(d+=_.length),g!==a&&(p+=_.length)}return u&&(this.patch_addContext_(c,f),l.push(c)),l},i.prototype.patch_deepCopy=function(e){for(var t=[],n=0;nthis.Match_MaxBits?-1!=(s=this.match_main(t,u.substring(0,this.Match_MaxBits),c))&&(-1==(d=this.match_main(t,u.substring(u.length-this.Match_MaxBits),c+u.length-this.Match_MaxBits))||s>=d)&&(s=-1):s=this.match_main(t,u,c),-1==s)i[o]=!1,r-=e[o].length2-e[o].length1;else if(i[o]=!0,r=s-c,u==(l=-1==d?t.substring(s,s+u.length):t.substring(s,d+this.Match_MaxBits)))t=t.substring(0,s)+this.diff_text2(e[o].diffs)+t.substring(s+u.length);else{var p=this.diff_main(u,l,!1);if(u.length>this.Match_MaxBits&&this.diff_levenshtein(p)/u.length>this.Patch_DeleteThreshold)i[o]=!1;else{this.diff_cleanupSemanticLossless(p);for(var f,h=0,m=0;mo[0][1].length){var s=t-o[0][1].length;o[0][1]=n.substring(o[0][1].length)+o[0][1],a.start1-=s,a.start2-=s,a.length1+=s,a.length2+=s}if(0==(o=(a=e[e.length-1]).diffs).length||0!=o[o.length-1][0])o.push(new i.Diff(0,n)),a.length1+=t,a.length2+=t;else if(t>o[o.length-1][1].length){s=t-o[o.length-1][1].length;o[o.length-1][1]+=n.substring(0,s),a.length1+=s,a.length2+=s}return n},i.prototype.patch_splitMax=function(e){for(var t=this.Match_MaxBits,n=0;n2*t?(c.length1+=p.length,o+=p.length,u=!1,c.diffs.push(new i.Diff(d,p)),r.diffs.shift()):(p=p.substring(0,t-c.length1-this.Patch_Margin),c.length1+=p.length,o+=p.length,0===d?(c.length2+=p.length,s+=p.length):u=!1,c.diffs.push(new i.Diff(d,p)),p==r.diffs[0][1]?r.diffs.shift():r.diffs[0][1]=r.diffs[0][1].substring(p.length))}l=(l=this.diff_text2(c.diffs)).substring(l.length-this.Patch_Margin);var f=this.diff_text1(r.diffs).substring(0,this.Patch_Margin);""!==f&&(c.length1+=f.length,c.length2+=f.length,0!==c.diffs.length&&0===c.diffs[c.diffs.length-1][0]?c.diffs[c.diffs.length-1][1]+=f:c.diffs.push(new i.Diff(0,f))),u||e.splice(++n,0,c)}}},i.prototype.patch_toText=function(e){for(var t=[],n=0;n4?e:undefined}())},t.isLegacyOpera=function(){return!!window.opera}},44942:function(e){"use strict";(e.exports={}).forEach=function(e,t){for(var n=0;n div::-webkit-scrollbar { "+c(["display: none"])+" }\n\n",o+="."+a+" { "+c(["-webkit-animation-duration: 0.1s","animation-duration: 0.1s","-webkit-animation-name: "+i,"animation-name: "+i])+" }\n",o+="@-webkit-keyframes "+i+" { 0% { opacity: 1; } 50% { opacity: 0; } 100% { opacity: 1; } }\n",r(o+="@keyframes "+i+" { 0% { opacity: 1; } 50% { opacity: 0; } 100% { opacity: 1; } }")}}(e,"erd_scroll_detection_scrollbar_style",s)}function c(t){var n=e.important?" !important; ":"; ";return(t.join(n)+n).trim()}function u(e,n,r){if(e.addEventListener)e.addEventListener(n,r);else{if(!e.attachEvent)return t.error("[scroll] Don't know how to add event listeners.");e.attachEvent("on"+n,r)}}function d(e,n,r){if(e.removeEventListener)e.removeEventListener(n,r);else{if(!e.detachEvent)return t.error("[scroll] Don't know how to remove event listeners.");e.detachEvent("on"+n,r)}}function p(e){return i(e).container.childNodes[0].childNodes[0].childNodes[0]}function f(e){return i(e).container.childNodes[0].childNodes[0].childNodes[1]}return l(window.document),{makeDetectable:function(e,l,d){function h(){if(e.debug){var n=Array.prototype.slice.call(arguments);if(n.unshift(a.get(l),"Scroll: "),t.log.apply)t.log.apply(null,n);else for(var r=0;r=3&&(a=n),"[object Array]"===i.call(e)?o(e,t,a):"string"===typeof e?s(e,t,a):l(e,t,a)}},80472:function(e){"use strict";var t="Function.prototype.bind called on incompatible ",n=Array.prototype.slice,r=Object.prototype.toString,i="[object Function]";e.exports=function(e){var a=this;if("function"!==typeof a||r.call(a)!==i)throw new TypeError(t+a);for(var o,s=n.call(arguments,1),l=function(){if(this instanceof o){var t=a.apply(this,s.concat(n.call(arguments)));return Object(t)===t?t:this}return a.apply(e,s.concat(n.call(arguments)))},c=Math.max(0,a.length-s.length),u=[],d=0;d1&&"boolean"!==typeof t)throw new s('"allowMissing" argument must be a boolean');if(null===x(/^%?[^%]*%?$/,e))throw new a("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var n=N(e),r=n.length>0?n[0]:"",i=R("%"+r+"%",t),o=i.name,l=i.value,u=!1,d=i.alias;d&&(r=d[0],S(n,E([0,1],d)));for(var p=1,f=!0;p=n.length){var v=c(l,h);l=(f=!!v)&&"get"in v&&!("originalValue"in v.get)?v.get:l[h]}else f=b(l,h),l=l[h];f&&!u&&(g[o]=l)}}return l}},78399:function(e,t,n){"use strict";var r=n(51815)("%Object.getOwnPropertyDescriptor%",!0);if(r)try{r([],"length")}catch(i){r=null}e.exports=r},35390:function(e,t,n){"use strict";var r=n(96985);e.exports={Graph:r.Graph,json:n(80016),alg:n(35209),version:r.version}},43174:function(e,t,n){"use strict";var r=n(51790);e.exports=function(e){var t,n={},i=[];function a(i){r.has(n,i)||(n[i]=!0,t.push(i),r.each(e.successors(i),a),r.each(e.predecessors(i),a))}return r.each(e.nodes(),(function(e){t=[],a(e),t.length&&i.push(t)})),i}},70130:function(e,t,n){"use strict";var r=n(51790);function i(e,t,n,a,o,s){r.has(a,t)||(a[t]=!0,n||s.push(t),r.each(o(t),(function(t){i(e,t,n,a,o,s)})),n&&s.push(t))}e.exports=function(e,t,n){r.isArray(t)||(t=[t]);var a=(e.isDirected()?e.successors:e.neighbors).bind(e),o=[],s={};return r.each(t,(function(t){if(!e.hasNode(t))throw new Error("Graph does not have node: "+t);i(e,t,"post"===n,s,a,o)})),o}},29670:function(e,t,n){"use strict";var r=n(44765),i=n(51790);e.exports=function(e,t,n){return i.transform(e.nodes(),(function(i,a){i[a]=r(e,a,t,n)}),{})}},44765:function(e,t,n){"use strict";var r=n(51790),i=n(27840);e.exports=function(e,t,n,r){return function(e,t,n,r){var a,o,s={},l=new i,c=function(e){var t=e.v!==a?e.v:e.w,r=s[t],i=n(e),c=o.distance+i;if(i<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+e+" Weight: "+i);c0&&(a=l.removeMin(),(o=s[a]).distance!==Number.POSITIVE_INFINITY);)r(a).forEach(c);return s}(e,String(t),n||a,r||function(t){return e.outEdges(t)})};var a=r.constant(1)},20920:function(e,t,n){"use strict";var r=n(51790),i=n(30656);e.exports=function(e){return r.filter(i(e),(function(t){return t.length>1||1===t.length&&e.hasEdge(t[0],t[0])}))}},23520:function(e,t,n){"use strict";var r=n(51790);e.exports=function(e,t,n){return function(e,t,n){var r={},i=e.nodes();return i.forEach((function(e){r[e]={},r[e][e]={distance:0},i.forEach((function(t){e!==t&&(r[e][t]={distance:Number.POSITIVE_INFINITY})})),n(e).forEach((function(n){var i=n.v===e?n.w:n.v,a=t(n);r[e][i]={distance:a,predecessor:e}}))})),i.forEach((function(e){var t=r[e];i.forEach((function(n){var a=r[n];i.forEach((function(n){var r=a[e],i=t[n],o=a[n],s=r.distance+i.distance;s0;){if(n=l.removeMin(),r.has(s,n))o.setEdge(n,s[n]);else{if(u)throw new Error("Input graph is not connected: "+e);u=!0}e.nodeEdges(n).forEach(c)}return o}},30656:function(e,t,n){"use strict";var r=n(51790);e.exports=function(e){var t=0,n=[],i={},a=[];function o(s){var l=i[s]={onStack:!0,lowlink:t,index:t++};if(n.push(s),e.successors(s).forEach((function(e){r.has(i,e)?i[e].onStack&&(l.lowlink=Math.min(l.lowlink,i[e].index)):(o(e),l.lowlink=Math.min(l.lowlink,i[e].lowlink))})),l.lowlink===l.index){var c,u=[];do{c=n.pop(),i[c].onStack=!1,u.push(c)}while(s!==c);a.push(u)}}return e.nodes().forEach((function(e){r.has(i,e)||o(e)})),a}},32182:function(e,t,n){"use strict";var r=n(51790);function i(e){var t={},n={},i=[];if(r.each(e.sinks(),(function o(s){if(r.has(n,s))throw new a;r.has(t,s)||(n[s]=!0,t[s]=!0,r.each(e.predecessors(s),o),delete n[s],i.push(s))})),r.size(t)!==e.nodeCount())throw new a;return i}function a(){}e.exports=i,i.CycleException=a,a.prototype=new Error},27840:function(e,t,n){"use strict";var r=n(51790);function i(){this._arr=[],this._keyIndices={}}e.exports=i,i.prototype.size=function(){return this._arr.length},i.prototype.keys=function(){return this._arr.map((function(e){return e.key}))},i.prototype.has=function(e){return r.has(this._keyIndices,e)},i.prototype.priority=function(e){var t=this._keyIndices[e];if(void 0!==t)return this._arr[t].priority},i.prototype.min=function(){if(0===this.size())throw new Error("Queue underflow");return this._arr[0].key},i.prototype.add=function(e,t){var n=this._keyIndices;if(e=String(e),!r.has(n,e)){var i=this._arr,a=i.length;return n[e]=a,i.push({key:e,priority:t}),this._decrease(a),!0}return!1},i.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var e=this._arr.pop();return delete this._keyIndices[e.key],this._heapify(0),e.key},i.prototype.decrease=function(e,t){var n=this._keyIndices[e];if(t>this._arr[n].priority)throw new Error("New priority is greater than current priority. Key: "+e+" Old: "+this._arr[n].priority+" New: "+t);this._arr[n].priority=t,this._decrease(n)},i.prototype._heapify=function(e){var t=this._arr,n=2*e,r=n+1,i=e;n>1].priorityo){var s=a;a=o,o=s}return a+"\x01"+o+"\x01"+(i.isUndefined(r)?"\0":r)}function u(e,t,n,r){var i=""+t,a=""+n;if(!e&&i>a){var o=i;i=a,a=o}var s={v:i,w:a};return r&&(s.name=r),s}function d(e,t){return c(e,t.v,t.w,t.name)}o.prototype._nodeCount=0,o.prototype._edgeCount=0,o.prototype.isDirected=function(){return this._isDirected},o.prototype.isMultigraph=function(){return this._isMultigraph},o.prototype.isCompound=function(){return this._isCompound},o.prototype.setGraph=function(e){return this._label=e,this},o.prototype.graph=function(){return this._label},o.prototype.setDefaultNodeLabel=function(e){return i.isFunction(e)||(e=i.constant(e)),this._defaultNodeLabelFn=e,this},o.prototype.nodeCount=function(){return this._nodeCount},o.prototype.nodes=function(){return i.keys(this._nodes)},o.prototype.sources=function(){var e=this;return i.filter(this.nodes(),(function(t){return i.isEmpty(e._in[t])}))},o.prototype.sinks=function(){var e=this;return i.filter(this.nodes(),(function(t){return i.isEmpty(e._out[t])}))},o.prototype.setNodes=function(e,t){var n=arguments,r=this;return i.each(e,(function(e){n.length>1?r.setNode(e,t):r.setNode(e)})),this},o.prototype.setNode=function(e,t){return i.has(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=t),this):(this._nodes[e]=arguments.length>1?t:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=a,this._children[e]={},this._children[a][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)},o.prototype.node=function(e){return this._nodes[e]},o.prototype.hasNode=function(e){return i.has(this._nodes,e)},o.prototype.removeNode=function(e){var t=this;if(i.has(this._nodes,e)){var n=function(e){t.removeEdge(t._edgeObjs[e])};delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],i.each(this.children(e),(function(e){t.setParent(e)})),delete this._children[e]),i.each(i.keys(this._in[e]),n),delete this._in[e],delete this._preds[e],i.each(i.keys(this._out[e]),n),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this},o.prototype.setParent=function(e,t){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(i.isUndefined(t))t=a;else{for(var n=t+="";!i.isUndefined(n);n=this.parent(n))if(n===e)throw new Error("Setting "+t+" as parent of "+e+" would create a cycle");this.setNode(t)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=t,this._children[t][e]=!0,this},o.prototype._removeFromParentsChildList=function(e){delete this._children[this._parent[e]][e]},o.prototype.parent=function(e){if(this._isCompound){var t=this._parent[e];if(t!==a)return t}},o.prototype.children=function(e){if(i.isUndefined(e)&&(e=a),this._isCompound){var t=this._children[e];if(t)return i.keys(t)}else{if(e===a)return this.nodes();if(this.hasNode(e))return[]}},o.prototype.predecessors=function(e){var t=this._preds[e];if(t)return i.keys(t)},o.prototype.successors=function(e){var t=this._sucs[e];if(t)return i.keys(t)},o.prototype.neighbors=function(e){var t=this.predecessors(e);if(t)return i.union(t,this.successors(e))},o.prototype.isLeaf=function(e){return 0===(this.isDirected()?this.successors(e):this.neighbors(e)).length},o.prototype.filterNodes=function(e){var t=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});t.setGraph(this.graph());var n=this;i.each(this._nodes,(function(n,r){e(r)&&t.setNode(r,n)})),i.each(this._edgeObjs,(function(e){t.hasNode(e.v)&&t.hasNode(e.w)&&t.setEdge(e,n.edge(e))}));var r={};function a(e){var i=n.parent(e);return void 0===i||t.hasNode(i)?(r[e]=i,i):i in r?r[i]:a(i)}return this._isCompound&&i.each(t.nodes(),(function(e){t.setParent(e,a(e))})),t},o.prototype.setDefaultEdgeLabel=function(e){return i.isFunction(e)||(e=i.constant(e)),this._defaultEdgeLabelFn=e,this},o.prototype.edgeCount=function(){return this._edgeCount},o.prototype.edges=function(){return i.values(this._edgeObjs)},o.prototype.setPath=function(e,t){var n=this,r=arguments;return i.reduce(e,(function(e,i){return r.length>1?n.setEdge(e,i,t):n.setEdge(e,i),i})),this},o.prototype.setEdge=function(){var e,t,n,a,o=!1,l=arguments[0];"object"===r(l)&&null!==l&&"v"in l?(e=l.v,t=l.w,n=l.name,2===arguments.length&&(a=arguments[1],o=!0)):(e=l,t=arguments[1],n=arguments[3],arguments.length>2&&(a=arguments[2],o=!0)),e=""+e,t=""+t,i.isUndefined(n)||(n=""+n);var d=c(this._isDirected,e,t,n);if(i.has(this._edgeLabels,d))return o&&(this._edgeLabels[d]=a),this;if(!i.isUndefined(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(e),this.setNode(t),this._edgeLabels[d]=o?a:this._defaultEdgeLabelFn(e,t,n);var p=u(this._isDirected,e,t,n);return e=p.v,t=p.w,Object.freeze(p),this._edgeObjs[d]=p,s(this._preds[t],e),s(this._sucs[e],t),this._in[t][d]=p,this._out[e][d]=p,this._edgeCount++,this},o.prototype.edge=function(e,t,n){var r=1===arguments.length?d(this._isDirected,arguments[0]):c(this._isDirected,e,t,n);return this._edgeLabels[r]},o.prototype.hasEdge=function(e,t,n){var r=1===arguments.length?d(this._isDirected,arguments[0]):c(this._isDirected,e,t,n);return i.has(this._edgeLabels,r)},o.prototype.removeEdge=function(e,t,n){var r=1===arguments.length?d(this._isDirected,arguments[0]):c(this._isDirected,e,t,n),i=this._edgeObjs[r];return i&&(e=i.v,t=i.w,delete this._edgeLabels[r],delete this._edgeObjs[r],l(this._preds[t],e),l(this._sucs[e],t),delete this._in[t][r],delete this._out[e][r],this._edgeCount--),this},o.prototype.inEdges=function(e,t){var n=this._in[e];if(n){var r=i.values(n);return t?i.filter(r,(function(e){return e.v===t})):r}},o.prototype.outEdges=function(e,t){var n=this._out[e];if(n){var r=i.values(n);return t?i.filter(r,(function(e){return e.w===t})):r}},o.prototype.nodeEdges=function(e,t){var n=this.inEdges(e,t);if(n)return n.concat(this.outEdges(e,t))}},96985:function(e,t,n){"use strict";e.exports={Graph:n(16378),version:n(45292)}},80016:function(e,t,n){"use strict";var r=n(51790),i=n(16378);function a(e){return r.map(e.nodes(),(function(t){var n=e.node(t),i=e.parent(t),a={v:t};return r.isUndefined(n)||(a.value=n),r.isUndefined(i)||(a.parent=i),a}))}function o(e){return r.map(e.edges(),(function(t){var n=e.edge(t),i={v:t.v,w:t.w};return r.isUndefined(t.name)||(i.name=t.name),r.isUndefined(n)||(i.value=n),i}))}e.exports={write:function(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:a(e),edges:o(e)};r.isUndefined(e.graph())||(t.value=r.clone(e.graph()));return t},read:function(e){var t=new i(e.options).setGraph(e.value);return r.each(e.nodes,(function(e){t.setNode(e.v,e.value),e.parent&&t.setParent(e.v,e.parent)})),r.each(e.edges,(function(e){t.setEdge({v:e.v,w:e.w,name:e.name},e.value)})),t}}},51790:function(e,t,n){"use strict";var r;try{r={clone:n(49364),constant:n(92897),each:n(33001),filter:n(11501),has:n(36776),isArray:n(44505),isEmpty:n(63112),isFunction:n(88837),isUndefined:n(35968),keys:n(3439),map:n(19525),reduce:n(44673),size:n(27226),transform:n(21114),union:n(94298),values:n(3002)}}catch(i){}r||(r=window._),e.exports=r},45292:function(e){"use strict";e.exports="2.1.8"},70470:function(e){"use strict";var t="undefined"!==typeof BigInt&&BigInt;e.exports=function(){return"function"===typeof t&&"function"===typeof BigInt&&"bigint"===typeof t(42)&&"bigint"===typeof BigInt(42)}},79179:function(e,t,n){"use strict";var r=n(51815)("%Object.defineProperty%",!0),i=function(){if(r)try{return r({},"a",{value:1}),!0}catch(e){return!1}return!1};i.hasArrayLengthDefineBug=function(){if(!i())return null;try{return 1!==r([],"length",{value:1}).length}catch(e){return!0}},e.exports=i},21816:function(e,t,n){"use strict";var r=n(7501).default,i="undefined"!==typeof Symbol&&Symbol,a=n(74149);e.exports=function(){return"function"===typeof i&&("function"===typeof Symbol&&("symbol"===r(i("foo"))&&("symbol"===r(Symbol("bar"))&&a())))}},74149:function(e,t,n){"use strict";var r=n(7501).default;e.exports=function(){if("function"!==typeof Symbol||"function"!==typeof Object.getOwnPropertySymbols)return!1;if("symbol"===r(Symbol.iterator))return!0;var e={},t=Symbol("test"),n=Object(t);if("string"===typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;for(t in e[t]=42,e)return!1;if("function"===typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"===typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var i=Object.getOwnPropertySymbols(e);if(1!==i.length||i[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"===typeof Object.getOwnPropertyDescriptor){var a=Object.getOwnPropertyDescriptor(e,t);if(42!==a.value||!0!==a.enumerable)return!1}return!0}},26108:function(e,t,n){"use strict";var r=n(74149);e.exports=function(){return r()&&!!Symbol.toStringTag}},83222:function(e,t,n){"use strict";var r=n(47287);e.exports=r.call(Function.call,Object.prototype.hasOwnProperty)},16235:function(e,t,n){"use strict";e.exports=n(99638)},99638:function(e,t,n){"use strict";var r,i,a;n(7501).default;(function(){var n,o,s,l,c,u,d,p,f,h,m,g,_,v,y;s=Math.floor,h=Math.min,o=function(e,t){return et?1:0},f=function(e,t,n,r,i){var a;if(null==n&&(n=0),null==i&&(i=o),n<0)throw new Error("lo must be non-negative");for(null==r&&(r=e.length);nn;0<=n?t++:t--)c.push(t);return c}.apply(this).reverse(),l=[],r=0,i=a.length;rm;0<=m?++u:--u)g.push(c(e,n));return g},v=function(e,t,n,r){var i,a,s;for(null==r&&(r=o),i=e[n];n>t&&r(i,a=e[s=n-1>>1])<0;)e[n]=a,n=s;return e[n]=i},y=function(e,t,n){var r,i,a,s,l;for(null==n&&(n=o),i=e.length,l=t,a=e[t],r=2*t+1;r/g,">").replace(/"/g,""").replace(/'/g,"'")}function m(e){var t=Object.create(null);for(var n in e)t[n]=e[n];for(var r=arguments.length,i=new Array(r>1?r-1:0),a=1;a")}},{key:"value",value:function(){return this.buffer}},{key:"span",value:function(e){this.buffer+='')}}]),e}(),v=function(e){a(n,e);var t=o(n);function n(e){var r;return s(this,n),(r=t.call(this)).options=e,r}return l(n,[{key:"addKeyword",value:function(e,t){""!==e&&(this.openNode(t),this.addText(e),this.closeNode())}},{key:"addText",value:function(e){""!==e&&this.add(e)}},{key:"addSublanguage",value:function(e,t){var n=e.root;n.kind=t,n.sublanguage=!0,this.add(n)}},{key:"toHTML",value:function(){return new _(this,this.options).value()}},{key:"finalize",value:function(){return!0}}]),n}(function(){function e(){s(this,e),this.rootNode={children:[]},this.stack=[this.rootNode]}return l(e,[{key:"top",get:function(){return this.stack[this.stack.length-1]}},{key:"root",get:function(){return this.rootNode}},{key:"add",value:function(e){this.top.children.push(e)}},{key:"openNode",value:function(e){var t={kind:e,children:[]};this.add(t),this.stack.push(t)}},{key:"closeNode",value:function(){if(this.stack.length>1)return this.stack.pop()}},{key:"closeAllNodes",value:function(){for(;this.closeNode(););}},{key:"toJSON",value:function(){return JSON.stringify(this.rootNode,null,4)}},{key:"walk",value:function(e){return this.constructor._walk(e,this.rootNode)}}],[{key:"_walk",value:function(e,t){var n=this;return"string"===typeof t?e.addText(t):t.children&&(e.openNode(t),t.children.forEach((function(t){return n._walk(e,t)})),e.closeNode(t)),e}},{key:"_collapse",value:function(t){"string"!==typeof t&&t.children&&(t.children.every((function(e){return"string"===typeof e}))?t.children=[t.children.join("")]:t.children.forEach((function(t){e._collapse(t)})))}}]),e}());function y(e){return e?"string"===typeof e?e:e.source:null}function b(){for(var e=arguments.length,t=new Array(e),n=0;n2&&void 0!==arguments[2]?arguments[2]:{},r=m({className:"comment",begin:e,end:t,contains:[]},n);return r.contains.push(A),r.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),r},D=k("//","$"),M=k("/\\*","\\*/"),P=k("#","$"),L={className:"number",begin:x,relevance:0},F={className:"number",begin:w,relevance:0},B={className:"number",begin:O,relevance:0},U={className:"number",begin:x+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},G={begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[N,{begin:/\[/,end:/\]/,relevance:0,contains:[N]}]}]},z={className:"title",begin:T,relevance:0},j={className:"title",begin:C,relevance:0},H={begin:"\\.\\s*"+C,relevance:0},Z=Object.freeze({__proto__:null,MATCH_NOTHING_RE:/\b\B/,IDENT_RE:T,UNDERSCORE_IDENT_RE:C,NUMBER_RE:x,C_NUMBER_RE:w,BINARY_NUMBER_RE:O,RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=/^#![ ]*\//;return e.binary&&(e.begin=b(t,/.*\b/,e.binary,/\b.*/)),m({className:"meta",begin:t,end:/$/,relevance:0,"on:begin":function(e,t){0!==e.index&&t.ignoreMatch()}},e)},BACKSLASH_ESCAPE:N,APOS_STRING_MODE:R,QUOTE_STRING_MODE:I,PHRASAL_WORDS_MODE:A,COMMENT:k,C_LINE_COMMENT_MODE:D,C_BLOCK_COMMENT_MODE:M,HASH_COMMENT_MODE:P,NUMBER_MODE:L,C_NUMBER_MODE:F,BINARY_NUMBER_MODE:B,CSS_NUMBER_MODE:U,REGEXP_MODE:G,TITLE_MODE:z,UNDERSCORE_TITLE_MODE:j,METHOD_GUARD:H,END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":function(e,t){t.data._beginMatch=e[1]},"on:end":function(e,t){t.data._beginMatch!==e[1]&&t.ignoreMatch()}})}});function Y(e,t){"."===e.input[e.index-1]&&t.ignoreMatch()}function V(e,t){t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",e.__beforeBegin=Y,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,void 0===e.relevance&&(e.relevance=0))}function q(e,t){Array.isArray(e.illegal)&&(e.illegal=E.apply(void 0,i(e.illegal)))}function W(e,t){if(e.match){if(e.begin||e.end)throw new Error("begin & end are not supported with match");e.begin=e.match,delete e.match}}function $(e,t){void 0===e.relevance&&(e.relevance=1)}var K=["of","and","for","in","not","or","if","then","parent","list","value"],Q="keyword";function X(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Q,r={};return"string"===typeof e?i(n,e.split(" ")):Array.isArray(e)?i(n,e):Object.keys(e).forEach((function(n){Object.assign(r,X(e[n],t,n))})),r;function i(e,n){t&&(n=n.map((function(e){return e.toLowerCase()}))),n.forEach((function(t){var n=t.split("|");r[n[0]]=[e,J(n[0],n[1])]}))}}function J(e,t){return t?Number(t):function(e){return K.includes(e.toLowerCase())}(e)?0:1}function ee(e,t){t.plugins;function n(t,n){return new RegExp(y(t),"m"+(e.case_insensitive?"i":"")+(n?"g":""))}var a=function(){function e(){s(this,e),this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}return l(e,[{key:"addRule",value:function(e,t){t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]),this.matchAt+=function(e){return new RegExp(e.toString()+"|").exec("").length-1}(e)+1}},{key:"compile",value:function(){0===this.regexes.length&&(this.exec=function(){return null});var e=this.regexes.map((function(e){return e[1]}));this.matcherRe=n(function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"|",n=0;return e.map((function(e){for(var t=n+=1,r=y(e),i="";r.length>0;){var a=S.exec(r);if(!a){i+=r;break}i+=r.substring(0,a.index),r=r.substring(a.index+a[0].length),"\\"===a[0][0]&&a[1]?i+="\\"+String(Number(a[1])+t):(i+=a[0],"("===a[0]&&n++)}return i})).map((function(e){return"(".concat(e,")")})).join(t)}(e),!0),this.lastIndex=0}},{key:"exec",value:function(e){this.matcherRe.lastIndex=this.lastIndex;var t=this.matcherRe.exec(e);if(!t)return null;var n=t.findIndex((function(e,t){return t>0&&void 0!==e})),r=this.matchIndexes[n];return t.splice(0,n),Object.assign(t,r)}}]),e}(),o=function(){function e(){s(this,e),this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}return l(e,[{key:"getMatcher",value:function(e){if(this.multiRegexes[e])return this.multiRegexes[e];var t=new a;return this.rules.slice(e).forEach((function(e){var n=r(e,2),i=n[0],a=n[1];return t.addRule(i,a)})),t.compile(),this.multiRegexes[e]=t,t}},{key:"resumingScanAtSamePosition",value:function(){return 0!==this.regexIndex}},{key:"considerAll",value:function(){this.regexIndex=0}},{key:"addRule",value:function(e,t){this.rules.push([e,t]),"begin"===t.type&&this.count++}},{key:"exec",value:function(e){var t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex;var n=t.exec(e);if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{var r=this.getMatcher(0);r.lastIndex=this.lastIndex+1,n=r.exec(e)}return n&&(this.regexIndex+=n.position+1,this.regexIndex===this.count&&this.considerAll()),n}}]),e}();if(e.compilerExtensions||(e.compilerExtensions=[]),e.contains&&e.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return e.classNameAliases=m(e.classNameAliases||{}),function t(r,a){var s,l=r;if(r.isCompiled)return l;[W].forEach((function(e){return e(r,a)})),e.compilerExtensions.forEach((function(e){return e(r,a)})),r.__beforeBegin=null,[V,q,$].forEach((function(e){return e(r,a)})),r.isCompiled=!0;var u=null;if("object"===c(r.keywords)&&(u=r.keywords.$pattern,delete r.keywords.$pattern),r.keywords&&(r.keywords=X(r.keywords,e.case_insensitive)),r.lexemes&&u)throw new Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");return u=u||r.lexemes||/\w+/,l.keywordPatternRe=n(u,!0),a&&(r.begin||(r.begin=/\B|\b/),l.beginRe=n(r.begin),r.endSameAsBegin&&(r.end=r.begin),r.end||r.endsWithParent||(r.end=/\B|\b/),r.end&&(l.endRe=n(r.end)),l.terminatorEnd=y(r.end)||"",r.endsWithParent&&a.terminatorEnd&&(l.terminatorEnd+=(r.end?"|":"")+a.terminatorEnd)),r.illegal&&(l.illegalRe=n(r.illegal)),r.contains||(r.contains=[]),r.contains=(s=[]).concat.apply(s,i(r.contains.map((function(e){return function(e){e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((function(t){return m(e,{variants:null},t)})));if(e.cachedVariants)return e.cachedVariants;if(te(e))return m(e,{starts:e.starts?m(e.starts):null});if(Object.isFrozen(e))return m(e);return e}("self"===e?r:e)})))),r.contains.forEach((function(e){t(e,l)})),r.starts&&t(r.starts,a),l.matcher=function(e){var t=new o;return e.contains.forEach((function(e){return t.addRule(e.begin,{rule:e,type:"begin"})})),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:"end"}),e.illegal&&t.addRule(e.illegal,{type:"illegal"}),t}(l),l}(e)}function te(e){return!!e&&(e.endsWithParent||te(e.starts))}function ne(e){var t={props:["language","code","autodetect"],data:function(){return{detectedLanguage:"",unknownLanguage:!1}},computed:{className:function(){return this.unknownLanguage?"":"hljs "+this.detectedLanguage},highlighted:function(){if(!this.autoDetect&&!e.getLanguage(this.language))return console.warn('The language "'.concat(this.language,'" you specified could not be found.')),this.unknownLanguage=!0,h(this.code);var t={};return this.autoDetect?(t=e.highlightAuto(this.code),this.detectedLanguage=t.language):(t=e.highlight(this.language,this.code,this.ignoreIllegals),this.detectedLanguage=this.language),t.value},autoDetect:function(){return!this.language||(e=this.autodetect,Boolean(e||""===e));var e},ignoreIllegals:function(){return!0}},render:function(e){return e("pre",{},[e("code",{class:this.className,domProps:{innerHTML:this.highlighted}})])}};return{Component:t,VuePlugin:{install:function(e){e.component("highlightjs",t)}}}}var re={"after:highlightElement":function(e){var t=e.el,n=e.result,r=e.text,i=ae(t);if(i.length){var a=document.createElement("div");a.innerHTML=n.value,n.value=function(e,t,n){var r=0,i="",a=[];function o(){return e.length&&t.length?e[0].offset!==t[0].offset?e[0].offset"}function l(e){i+=""}function c(e){("start"===e.event?s:l)(e.node)}for(;e.length||t.length;){var u=o();if(i+=h(n.substring(r,u[0].offset)),r=u[0].offset,u===e){a.reverse().forEach(l);do{c(u.splice(0,1)[0]),u=o()}while(u===e&&u.length&&u[0].offset===r);a.reverse().forEach(s)}else"start"===u[0].event?a.push(u[0].node):a.pop(),c(u.splice(0,1)[0])}return i+h(n.substr(r))}(i,ae(a),r)}}};function ie(e){return e.nodeName.toLowerCase()}function ae(e){var t=[];return function e(n,r){for(var i=n.firstChild;i;i=i.nextSibling)3===i.nodeType?r+=i.nodeValue.length:1===i.nodeType&&(t.push({event:"start",offset:r,node:i}),r=e(i,r),ie(i).match(/br|hr|img|input/)||t.push({event:"stop",offset:r,node:i}));return r}(e,0),t}var oe={},se=function(e){console.error(e)},le=function(e){for(var t,n=arguments.length,r=new Array(n>1?n-1:0),i=1;i]+>|\t|)+|\n)/gm,s="Could not find the language '{}', did you forget to load/include a language module?",l={disableAutodetect:!0,name:"Plain text",contains:[]},u={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:v};function p(e){return u.noHighlightRe.test(e)}function h(e,t,n,r){var i="",a="";"object"===c(t)?(i=e,n=t.ignoreIllegals,a=t.language,r=void 0):(ce("10.7.0","highlight(lang, code, ...args) has been deprecated."),ce("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),a=e,i=t);var o={code:i,language:a};O("before:highlight",o);var s=o.result?o.result:m(o.language,o.code,n,r);return s.code=o.code,O("after:highlight",s),s}function m(e,n,o,l){function c(e,t){var n=S.case_insensitive?t[0].toLowerCase():t[0];return Object.prototype.hasOwnProperty.call(e.keywords,n)&&e.keywords[n]}function d(){null!=w.subLanguage?function(){if(""!==R){var e=null;if("string"===typeof w.subLanguage){if(!t[w.subLanguage])return void N.addText(R);e=m(w.subLanguage,R,!0,O[w.subLanguage]),O[w.subLanguage]=e.top}else e=g(R,w.subLanguage.length?w.subLanguage:null);w.relevance>0&&(I+=e.relevance),N.addSublanguage(e.emitter,e.language)}}():function(){if(w.keywords){var e=0;w.keywordPatternRe.lastIndex=0;for(var t=w.keywordPatternRe.exec(R),n="";t;){n+=R.substring(e,t.index);var i=c(w,t);if(i){var a=r(i,2),o=a[0],s=a[1];if(N.addText(n),n="",I+=s,o.startsWith("_"))n+=t[0];else{var l=S.classNameAliases[o]||o;N.addKeyword(t[0],l)}}else n+=t[0];e=w.keywordPatternRe.lastIndex,t=w.keywordPatternRe.exec(R)}n+=R.substr(e),N.addText(n)}else N.addText(R)}(),R=""}function p(e){return e.className&&N.openNode(S.classNameAliases[e.className]||e.className),w=Object.create(e,{parent:{value:w}})}function h(e,t,n){var r=function(e,t){var n=e&&e.exec(t);return n&&0===n.index}(e.endRe,n);if(r){if(e["on:end"]){var i=new f(e);e["on:end"](t,i),i.isMatchIgnored&&(r=!1)}if(r){for(;e.endsParent&&e.parent;)e=e.parent;return e}}if(e.endsWithParent)return h(e.parent,t,n)}function _(e){return 0===w.matcher.regexIndex?(R+=e[0],1):(D=!0,0)}function v(e){for(var t=e[0],n=e.rule,r=new f(n),i=0,a=[n.__beforeBegin,n["on:begin"]];i")+'"');throw l.mode=w,l}if("end"===r.type){var c=y(r);if(c!==pe)return c}if("illegal"===r.type&&""===i)return 1;if(k>1e5&&k>3*r.index)throw new Error("potential infinite loop, way more iterations than matches");return R+=i,i.length}var S=C(e);if(!S)throw se(s.replace("{}",e)),new Error('Unknown language: "'+e+'"');var T=ee(S,{plugins:i}),x="",w=l||T,O={},N=new u.__emitter(u);!function(){for(var e=[],t=w;t!==S;t=t.parent)t.className&&e.unshift(t.className);e.forEach((function(e){return N.openNode(e)}))}();var R="",I=0,A=0,k=0,D=!1;try{for(w.matcher.considerAll();;){k++,D?D=!1:w.matcher.considerAll(),w.matcher.lastIndex=A;var M=w.matcher.exec(n);if(!M)break;var P=E(n.substring(A,M.index),M);A=M.index+P}return E(n.substr(A)),N.closeAllNodes(),N.finalize(),x=N.toHTML(),{relevance:Math.floor(I),value:x,language:e,illegal:!1,emitter:N,top:w}}catch(L){if(L.message&&L.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:L.message,context:n.slice(A-100,A+100),mode:L.mode},sofar:x,relevance:0,value:ue(n),emitter:N};if(a)return{illegal:!1,relevance:0,value:ue(n),emitter:N,language:e,top:w,errorRaised:L};throw L}}function g(e,n){n=n||u.languages||Object.keys(t);var i=function(e){var t={relevance:0,emitter:new u.__emitter(u),value:ue(e),illegal:!1,top:l};return t.emitter.addText(e),t}(e),a=n.filter(C).filter(w).map((function(t){return m(t,e,!1)}));a.unshift(i);var o=a.sort((function(e,t){if(e.relevance!==t.relevance)return t.relevance-e.relevance;if(e.language&&t.language){if(C(e.language).supersetOf===t.language)return 1;if(C(t.language).supersetOf===e.language)return-1}return 0})),s=r(o,2),c=s[0],d=s[1],p=c;return p.second_best=d,p}var _={"before:highlightElement":function(e){var t=e.el;u.useBR&&(t.innerHTML=t.innerHTML.replace(/\n/g,"").replace(//g,"\n"))},"after:highlightElement":function(e){var t=e.result;u.useBR&&(t.value=t.value.replace(/\n/g,"
    "))}},y=/^(<[^>]+>|\t)+/gm,b={"after:highlightElement":function(e){var t=e.result;u.tabReplace&&(t.value=t.value.replace(y,(function(e){return e.replace(/\t/g,u.tabReplace)})))}};function E(e){var t=function(e){var t=e.className+" ";t+=e.parentNode?e.parentNode.className:"";var n=u.languageDetectRe.exec(t);if(n){var r=C(n[1]);return r||(le(s.replace("{}",n[1])),le("Falling back to no-highlight mode for this block.",e)),r?n[1]:"no-highlight"}return t.split(/\s+/).find((function(e){return p(e)||C(e)}))}(e);if(!p(t)){O("before:highlightElement",{el:e,language:t});var r=e.textContent,i=t?h(r,{language:t,ignoreIllegals:!0}):g(r);O("after:highlightElement",{el:e,result:i,text:r}),e.innerHTML=i.value,function(e,t,r){var i=t?n[t]:r;e.classList.add("hljs"),i&&e.classList.add(i)}(e,t,i.language),e.result={language:i.language,re:i.relevance,relavance:i.relevance},i.second_best&&(e.second_best={language:i.second_best.language,re:i.second_best.relevance,relavance:i.second_best.relevance})}}var S=!1;function T(){"loading"!==document.readyState?document.querySelectorAll("pre code").forEach(E):S=!0}function C(e){return e=(e||"").toLowerCase(),t[e]||t[n[e]]}function x(e,t){var r=t.languageName;"string"===typeof e&&(e=[e]),e.forEach((function(e){n[e.toLowerCase()]=r}))}function w(e){var t=C(e);return t&&!t.disableAutodetect}function O(e,t){var n=e;i.forEach((function(e){e[n]&&e[n](t)}))}for(var N in"undefined"!==typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(function(){S&&T()}),!1),Object.assign(e,{highlight:h,highlightAuto:g,highlightAll:T,fixMarkup:function(e){return ce("10.2.0","fixMarkup will be removed entirely in v11.0"),ce("10.2.0","Please see https://github.com/highlightjs/highlight.js/issues/2534"),t=e,u.tabReplace||u.useBR?t.replace(o,(function(e){return"\n"===e?u.useBR?"
    ":e:u.tabReplace?e.replace(/\t/g,u.tabReplace):e})):t;var t},highlightElement:E,highlightBlock:function(e){return ce("10.7.0","highlightBlock will be removed entirely in v12.0"),ce("10.7.0","Please use highlightElement now."),E(e)},configure:function(e){e.useBR&&(ce("10.3.0","'useBR' will be removed entirely in v11.0"),ce("10.3.0","Please see https://github.com/highlightjs/highlight.js/issues/2559")),u=de(u,e)},initHighlighting:function e(){e.called||(e.called=!0,ce("10.6.0","initHighlighting() is deprecated. Use highlightAll() instead."),document.querySelectorAll("pre code").forEach(E))},initHighlightingOnLoad:function(){ce("10.6.0","initHighlightingOnLoad() is deprecated. Use highlightAll() instead."),S=!0},registerLanguage:function(n,r){var i=null;try{i=r(e)}catch(o){if(se("Language definition for '{}' could not be registered.".replace("{}",n)),!a)throw o;se(o),i=l}i.name||(i.name=n),t[n]=i,i.rawDefinition=r.bind(null,e),i.aliases&&x(i.aliases,{languageName:n})},unregisterLanguage:function(e){delete t[e];for(var r=0,i=Object.keys(n);r|$)",illegal:a,contains:[{beginKeywords:"loop for declare others",endsParent:!0},{className:"keyword",beginKeywords:"not null constant access function procedure in out aliased exception"},{className:"type",begin:i,endsParent:!0,relevance:0}]};return{name:"Ada",case_insensitive:!0,keywords:{keyword:"abort else new return abs elsif not reverse abstract end accept entry select access exception of separate aliased exit or some all others subtype and for out synchronized array function overriding at tagged generic package task begin goto pragma terminate body private then if procedure type case in protected constant interface is raise use declare range delay limited record when delta loop rem while digits renames with do mod requeue xor",literal:"True False"},contains:[o,{className:"string",begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{className:"string",begin:/'.'/},{className:"number",begin:r,relevance:0},{className:"symbol",begin:"'"+i},{className:"title",begin:"(\\bwith\\s+)?(\\bprivate\\s+)?\\bpackage\\s+(\\bbody\\s+)?",end:"(is|$)",keywords:"package body",excludeBegin:!0,excludeEnd:!0,illegal:a},{begin:"(\\b(with|overriding)\\s+)?\\b(function|procedure)\\s+",end:"(\\bis|\\bwith|\\brenames|\\)\\s*;)",keywords:"overriding function procedure with is renames return",returnBegin:!0,contains:[o,{className:"title",begin:"(\\bwith\\s+)?\\b(function|procedure)\\s+",end:"(\\(|\\s+|$)",excludeBegin:!0,excludeEnd:!0,illegal:a},s,{className:"type",begin:"\\breturn\\s+",end:"(\\s+|;|$)",keywords:"return",excludeBegin:!0,excludeEnd:!0,endsParent:!0,illegal:a}]},{className:"type",begin:"\\b(sub)?type\\s+",end:"\\s+",keywords:"type",excludeBegin:!0,illegal:a},s]}}},28292:function(e){"use strict";e.exports=function(e){var t={className:"built_in",begin:"\\b(void|bool|int|int8|int16|int32|int64|uint|uint8|uint16|uint32|uint64|string|ref|array|double|float|auto|dictionary)"},n={className:"symbol",begin:"[a-zA-Z0-9_]+@"},r={className:"keyword",begin:"<",end:">",contains:[t,n]};return t.contains=[r],n.contains=[r],{name:"AngelScript",aliases:["asc"],keywords:"for in|0 break continue while do|0 return if else case switch namespace is cast or and xor not get|0 in inout|10 out override set|0 private public const default|0 final shared external mixin|10 enum typedef funcdef this super import from interface abstract|0 try catch protected explicit property",illegal:"(^using\\s+[A-Za-z0-9_\\.]+;$|\\bfunction\\s*[^\\(])",contains:[{className:"string",begin:"'",end:"'",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE],relevance:0},{className:"string",begin:'"""',end:'"""'},{className:"string",begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE],relevance:0},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"string",begin:"^\\s*\\[",end:"\\]"},{beginKeywords:"interface namespace",end:/\{/,illegal:"[;.\\-]",contains:[{className:"symbol",begin:"[a-zA-Z0-9_]+"}]},{beginKeywords:"class",end:/\{/,illegal:"[;.\\-]",contains:[{className:"symbol",begin:"[a-zA-Z0-9_]+",contains:[{begin:"[:,]\\s*",contains:[{className:"symbol",begin:"[a-zA-Z0-9_]+"}]}]}]},t,n,{className:"literal",begin:"\\b(null|true|false)"},{className:"number",relevance:0,begin:"(-?)(\\b0[xXbBoOdD][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?f?|\\.\\d+f?)([eE][-+]?\\d+f?)?)"}]}}},16944:function(e){"use strict";e.exports=function(e){var t={className:"number",begin:/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d{1,5})?/};return{name:"Apache config",aliases:["apacheconf"],case_insensitive:!0,contains:[e.HASH_COMMENT_MODE,{className:"section",begin:/<\/?/,end:/>/,contains:[t,{className:"number",begin:/:\d{1,5}/},e.inherit(e.QUOTE_STRING_MODE,{relevance:0})]},{className:"attribute",begin:/\w+/,relevance:0,keywords:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{end:/$/,relevance:0,keywords:{literal:"on off all deny allow"},contains:[{className:"meta",begin:/\s\[/,end:/\]$/},{className:"variable",begin:/[\$%]\{/,end:/\}/,contains:["self",{className:"number",begin:/[$%]\d+/}]},t,{className:"number",begin:/\d+/},e.QUOTE_STRING_MODE]}}],illegal:/\S/}}},76733:function(e){"use strict";function t(e){return e?"string"===typeof e?e:e.source:null}function n(){for(var e=arguments.length,n=new Array(e),r=0;r|=>|\[\[/}}},16949:function(e){"use strict";e.exports=function(e){var t="[A-Za-z_][0-9A-Za-z_]*",n={keyword:"if for while var new function do return void else break",literal:"BackSlash DoubleQuote false ForwardSlash Infinity NaN NewLine null PI SingleQuote Tab TextFormatting true undefined",built_in:"Abs Acos Angle Attachments Area AreaGeodetic Asin Atan Atan2 Average Bearing Boolean Buffer BufferGeodetic Ceil Centroid Clip Console Constrain Contains Cos Count Crosses Cut Date DateAdd DateDiff Day Decode DefaultValue Dictionary Difference Disjoint Distance DistanceGeodetic Distinct DomainCode DomainName Equals Exp Extent Feature FeatureSet FeatureSetByAssociation FeatureSetById FeatureSetByPortalItem FeatureSetByRelationshipName FeatureSetByTitle FeatureSetByUrl Filter First Floor Geometry GroupBy Guid HasKey Hour IIf IndexOf Intersection Intersects IsEmpty IsNan IsSelfIntersecting Length LengthGeodetic Log Max Mean Millisecond Min Minute Month MultiPartToSinglePart Multipoint NextSequenceValue Now Number OrderBy Overlaps Point Polygon Polyline Portal Pow Random Relate Reverse RingIsClockWise Round Second SetGeometry Sin Sort Sqrt Stdev Sum SymmetricDifference Tan Text Timestamp Today ToLocal Top Touches ToUTC TrackCurrentTime TrackGeometryWindow TrackIndex TrackStartTime TrackWindow TypeOf Union UrlEncode Variance Weekday When Within Year "},r={className:"number",variants:[{begin:"\\b(0[bB][01]+)"},{begin:"\\b(0[oO][0-7]+)"},{begin:e.C_NUMBER_RE}],relevance:0},i={className:"subst",begin:"\\$\\{",end:"\\}",keywords:n,contains:[]},a={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,i]};i.contains=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,r,e.REGEXP_MODE];var o=i.contains.concat([e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]);return{name:"ArcGIS Arcade",keywords:n,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"symbol",begin:"\\$[datastore|feature|layer|map|measure|sourcefeature|sourcelayer|targetfeature|targetlayer|value|view]+"},r,{begin:/[{,]\s*/,relevance:0,contains:[{begin:t+"\\s*:",returnBegin:!0,relevance:0,contains:[{className:"attr",begin:t,relevance:0}]}]},{begin:"("+e.RE_STARTERS_RE+"|\\b(return)\\b)\\s*",keywords:"return",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.REGEXP_MODE,{className:"function",begin:"(\\(.*?\\)|"+t+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:t},{begin:/\(\s*\)/},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,contains:o}]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:t}),{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:o}],illegal:/\[|%/},{begin:/\$[(.]/}],illegal:/#(?!!)/}}},46482:function(e){"use strict";function t(e){return e?"string"===typeof e?e:e.source:null}function n(e){return r("(",e,")?")}function r(){for(var e=arguments.length,n=new Array(e),r=0;r]+>")+")",l={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},c={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},u={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},d={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(c,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/},i,e.C_BLOCK_COMMENT_MODE]},p={className:"title",begin:n(o)+e.IDENT_RE,relevance:0},f=n(o)+e.IDENT_RE+"\\s*\\(",h={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_t short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"_Bool _Complex _Imaginary",_relevance_hints:["asin","atan2","atan","calloc","ceil","cosh","cos","exit","exp","fabs","floor","fmod","fprintf","fputs","free","frexp","auto_ptr","deque","list","queue","stack","vector","map","set","pair","bitset","multiset","multimap","unordered_set","fscanf","future","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","tolower","toupper","labs","ldexp","log10","log","malloc","realloc","memchr","memcmp","memcpy","memset","modf","pow","printf","putchar","puts","scanf","sinh","sin","snprintf","sprintf","sqrt","sscanf","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","tanh","tan","unordered_map","unordered_multiset","unordered_multimap","priority_queue","make_pair","array","shared_ptr","abort","terminate","abs","acos","vfprintf","vprintf","vsprintf","endl","initializer_list","unique_ptr","complex","imaginary","std","string","wstring","cin","cout","cerr","clog","stdin","stdout","stderr","stringstream","istringstream","ostringstream"],literal:"true false nullptr NULL"},m={className:"function.dispatch",relevance:0,keywords:h,begin:r(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!while)/,e.IDENT_RE,(t=/\s*\(/,r("(?=",t,")")))},g=[m,d,l,i,e.C_BLOCK_COMMENT_MODE,u,c],_={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:h,contains:g.concat([{begin:/\(/,end:/\)/,keywords:h,contains:g.concat(["self"]),relevance:0}]),relevance:0},v={className:"function",begin:"("+s+"[\\*&\\s]+)+"+f,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:h,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:h,relevance:0},{begin:f,returnBegin:!0,contains:[p],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[c,u]},{className:"params",begin:/\(/,end:/\)/,keywords:h,relevance:0,contains:[i,e.C_BLOCK_COMMENT_MODE,c,u,l,{begin:/\(/,end:/\)/,keywords:h,relevance:0,contains:["self",i,e.C_BLOCK_COMMENT_MODE,c,u,l]}]},l,i,e.C_BLOCK_COMMENT_MODE,d]};return{name:"C++",aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:h,illegal:"",keywords:h,contains:["self",l]},{begin:e.IDENT_RE+"::",keywords:h},{className:"class",beginKeywords:"enum class struct union",end:/[{;:<>=]/,contains:[{beginKeywords:"final class struct"},e.TITLE_MODE]}]),exports:{preprocessor:d,strings:c,keywords:h}}}(e),l=s.keywords;return l.keyword+=" "+t,l.literal+=" "+o,l.built_in+=" "+i,l._+=" "+a,s.name="Arduino",s.aliases=["ino"],s.supersetOf="cpp",s}},77709:function(e){"use strict";e.exports=function(e){var t={variants:[e.COMMENT("^[ \\t]*(?=#)","$",{relevance:0,excludeBegin:!0}),e.COMMENT("[;@]","$",{relevance:0}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]};return{name:"ARM Assembly",case_insensitive:!0,aliases:["arm"],keywords:{$pattern:"\\.?"+e.IDENT_RE,meta:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ",built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 pc lr sp ip sl sb fp a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 {PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @"},contains:[{className:"keyword",begin:"\\b(adc|(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|wfe|wfi|yield)(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?[sptrx]?(?=\\s)"},t,e.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",relevance:0},{className:"title",begin:"\\|",end:"\\|",illegal:"\\n",relevance:0},{className:"number",variants:[{begin:"[#$=]?0x[0-9a-f]+"},{begin:"[#$=]?0b[01]+"},{begin:"[#$=]\\d+"},{begin:"\\b\\d+"}],relevance:0},{className:"symbol",variants:[{begin:"^[ \\t]*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{begin:"^[a-z_\\.\\$][a-z0-9_\\.\\$]+"},{begin:"[=#]\\w+"}],relevance:0}]}}},26566:function(e){"use strict";function t(e){return e?"string"===typeof e?e:e.source:null}function n(){for(var e=arguments.length,n=new Array(e),r=0;r",subLanguage:"xml",relevance:0}],relevance:10},{className:"bullet",begin:"^(\\*+|-+|\\.+|[^\\n]+?::)\\s+"},{className:"symbol",begin:"^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\s+",relevance:10}].concat([{begin:/\\[*_`]/},{begin:/\\\\\*{2}[^\n]*?\*{2}/},{begin:/\\\\_{2}[^\n]*_{2}/},{begin:/\\\\`{2}[^\n]*`{2}/},{begin:/[:;}][*_`](?![*_`])/}],t,r,[{className:"string",variants:[{begin:"``.+?''"},{begin:"`.+?'"}]},{className:"code",begin:/`{2}/,end:/(\n{2}|`{2})/},{className:"code",begin:"(`.+?`|\\+.+?\\+)",relevance:0},{className:"code",begin:"^[ \\t]",end:"$",relevance:0},{begin:"^'{3,}[ \\t]*$",relevance:10},{begin:"(link:)?(http|https|ftp|file|irc|image:?):\\S+?\\[[^[]*?\\]",returnBegin:!0,contains:[{begin:"(link|image:?):",relevance:0},{className:"link",begin:"\\w",end:"[^\\[]+",relevance:0},{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0,relevance:0}],relevance:10}])}}},65022:function(e){"use strict";function t(e){return e?"string"===typeof e?e:e.source:null}function n(){for(var e=arguments.length,n=new Array(e),r=0;r"},{begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]}]}]},r,t]},{className:"symbol",begin:"@[A-z0-9_]+"},{className:"function",beginKeywords:"Func",end:"$",illegal:"\\$|\\[|%",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",contains:[n,r,i]}]}]}}},17664:function(e){"use strict";e.exports=function(e){return{name:"AVR Assembly",case_insensitive:!0,keywords:{$pattern:"\\.?"+e.IDENT_RE,keyword:"adc add adiw and andi asr bclr bld brbc brbs brcc brcs break breq brge brhc brhs brid brie brlo brlt brmi brne brpl brsh brtc brts brvc brvs bset bst call cbi cbr clc clh cli cln clr cls clt clv clz com cp cpc cpi cpse dec eicall eijmp elpm eor fmul fmuls fmulsu icall ijmp in inc jmp ld ldd ldi lds lpm lsl lsr mov movw mul muls mulsu neg nop or ori out pop push rcall ret reti rjmp rol ror sbc sbr sbrc sbrs sec seh sbi sbci sbic sbis sbiw sei sen ser ses set sev sez sleep spm st std sts sub subi swap tst wdr",built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16 r17 r18 r19 r20 r21 r22 r23 r24 r25 r26 r27 r28 r29 r30 r31 x|0 xh xl y|0 yh yl z|0 zh zl ucsr1c udr1 ucsr1a ucsr1b ubrr1l ubrr1h ucsr0c ubrr0h tccr3c tccr3a tccr3b tcnt3h tcnt3l ocr3ah ocr3al ocr3bh ocr3bl ocr3ch ocr3cl icr3h icr3l etimsk etifr tccr1c ocr1ch ocr1cl twcr twdr twar twsr twbr osccal xmcra xmcrb eicra spmcsr spmcr portg ddrg ping portf ddrf sreg sph spl xdiv rampz eicrb eimsk gimsk gicr eifr gifr timsk tifr mcucr mcucsr tccr0 tcnt0 ocr0 assr tccr1a tccr1b tcnt1h tcnt1l ocr1ah ocr1al ocr1bh ocr1bl icr1h icr1l tccr2 tcnt2 ocr2 ocdr wdtcr sfior eearh eearl eedr eecr porta ddra pina portb ddrb pinb portc ddrc pinc portd ddrd pind spdr spsr spcr udr0 ucsr0a ucsr0b ubrr0l acsr admux adcsr adch adcl porte ddre pine pinf",meta:".byte .cseg .db .def .device .dseg .dw .endmacro .equ .eseg .exit .include .list .listmac .macro .nolist .org .set"},contains:[e.C_BLOCK_COMMENT_MODE,e.COMMENT(";","$",{relevance:0}),e.C_NUMBER_MODE,e.BINARY_NUMBER_MODE,{className:"number",begin:"\\b(\\$[a-zA-Z0-9]+|0o[0-7]+)"},e.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",illegal:"[^\\\\][^']"},{className:"symbol",begin:"^[A-Za-z0-9_.$]+:"},{className:"meta",begin:"#",end:"$"},{className:"subst",begin:"@[0-9]+"}]}}},61477:function(e){"use strict";e.exports=function(e){return{name:"Awk",keywords:{keyword:"BEGIN END if else while do for in break continue delete next nextfile function func exit|10"},contains:[{className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{(.*?)\}/}]},{className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/(u|b)?r?'''/,end:/'''/,relevance:10},{begin:/(u|b)?r?"""/,end:/"""/,relevance:10},{begin:/(u|r|ur)'/,end:/'/,relevance:10},{begin:/(u|r|ur)"/,end:/"/,relevance:10},{begin:/(b|br)'/,end:/'/},{begin:/(b|br)"/,end:/"/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},e.REGEXP_MODE,e.HASH_COMMENT_MODE,e.NUMBER_MODE]}}},49945:function(e){"use strict";e.exports=function(e){return{name:"X++",aliases:["x++"],keywords:{keyword:["abstract","as","asc","avg","break","breakpoint","by","byref","case","catch","changecompany","class","client","client","common","const","continue","count","crosscompany","delegate","delete_from","desc","display","div","do","edit","else","eventhandler","exists","extends","final","finally","firstfast","firstonly","firstonly1","firstonly10","firstonly100","firstonly1000","flush","for","forceliterals","forcenestedloop","forceplaceholders","forceselectorder","forupdate","from","generateonly","group","hint","if","implements","in","index","insert_recordset","interface","internal","is","join","like","maxof","minof","mod","namespace","new","next","nofetch","notexists","optimisticlock","order","outer","pessimisticlock","print","private","protected","public","readonly","repeatableread","retry","return","reverse","select","server","setting","static","sum","super","switch","this","throw","try","ttsabort","ttsbegin","ttscommit","unchecked","update_recordset","using","validtimestate","void","where","while"],built_in:["anytype","boolean","byte","char","container","date","double","enum","guid","int","int64","long","real","short","str","utcdatetime","var"],literal:["default","false","null","true"]},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,{className:"meta",begin:"#",end:"$"},{className:"class",beginKeywords:"class interface",end:/\{/,excludeEnd:!0,illegal:":",contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]}]}}},35870:function(e){"use strict";function t(e){return e?"string"===typeof e?e:e.source:null}function n(){for(var e=arguments.length,n=new Array(e),r=0;r/},{begin:/::=/,end:/$/,contains:[{begin://},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]}]}}},2414:function(e){"use strict";e.exports=function(e){var t={className:"literal",begin:/[+-]/,relevance:0};return{name:"Brainfuck",aliases:["bf"],contains:[e.COMMENT("[^\\[\\]\\.,\\+\\-<> \r\n]","[\\[\\]\\.,\\+\\-<> \r\n]",{returnEnd:!0,relevance:0}),{className:"title",begin:"[\\[\\]]",relevance:0},{className:"string",begin:"[\\.,]",relevance:0},{begin:/(?:\+\+|--)/,contains:[t]},t]}}},63753:function(e){"use strict";function t(e){return e?"string"===typeof e?e:e.source:null}function n(e){return r("(",e,")?")}function r(){for(var e=arguments.length,n=new Array(e),r=0;r]+>")+")",l={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},c={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},u={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},d={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(c,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/},i,e.C_BLOCK_COMMENT_MODE]},p={className:"title",begin:n(o)+e.IDENT_RE,relevance:0},f=n(o)+e.IDENT_RE+"\\s*\\(",h={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_t short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"_Bool _Complex _Imaginary",_relevance_hints:["asin","atan2","atan","calloc","ceil","cosh","cos","exit","exp","fabs","floor","fmod","fprintf","fputs","free","frexp","auto_ptr","deque","list","queue","stack","vector","map","set","pair","bitset","multiset","multimap","unordered_set","fscanf","future","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","tolower","toupper","labs","ldexp","log10","log","malloc","realloc","memchr","memcmp","memcpy","memset","modf","pow","printf","putchar","puts","scanf","sinh","sin","snprintf","sprintf","sqrt","sscanf","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","tanh","tan","unordered_map","unordered_multiset","unordered_multimap","priority_queue","make_pair","array","shared_ptr","abort","terminate","abs","acos","vfprintf","vprintf","vsprintf","endl","initializer_list","unique_ptr","complex","imaginary","std","string","wstring","cin","cout","cerr","clog","stdin","stdout","stderr","stringstream","istringstream","ostringstream"],literal:"true false nullptr NULL"},m={className:"function.dispatch",relevance:0,keywords:h,begin:r(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!while)/,e.IDENT_RE,(t=/\s*\(/,r("(?=",t,")")))},g=[m,d,l,i,e.C_BLOCK_COMMENT_MODE,u,c],_={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:h,contains:g.concat([{begin:/\(/,end:/\)/,keywords:h,contains:g.concat(["self"]),relevance:0}]),relevance:0},v={className:"function",begin:"("+s+"[\\*&\\s]+)+"+f,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:h,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:h,relevance:0},{begin:f,returnBegin:!0,contains:[p],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[c,u]},{className:"params",begin:/\(/,end:/\)/,keywords:h,relevance:0,contains:[i,e.C_BLOCK_COMMENT_MODE,c,u,l,{begin:/\(/,end:/\)/,keywords:h,relevance:0,contains:["self",i,e.C_BLOCK_COMMENT_MODE,c,u,l]}]},l,i,e.C_BLOCK_COMMENT_MODE,d]};return{name:"C++",aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:h,illegal:"",keywords:h,contains:["self",l]},{begin:e.IDENT_RE+"::",keywords:h},{className:"class",beginKeywords:"enum class struct union",end:/[{;:<>=]/,contains:[{beginKeywords:"final class struct"},e.TITLE_MODE]}]),exports:{preprocessor:d,strings:c,keywords:h}}}(e);return a.disableAutodetect=!0,a.aliases=[],e.getLanguage("c")||(t=a.aliases).push.apply(t,["c","h"]),e.getLanguage("cpp")||(i=a.aliases).push.apply(i,["cc","c++","h++","hpp","hh","hxx","cxx"]),a}},60519:function(e){"use strict";function t(e){return e?"string"===typeof e?e:e.source:null}function n(e){return function(){for(var e=arguments.length,n=new Array(e),r=0;r]+>")+")",o={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},s={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},l={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},c={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(s,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/},t,e.C_BLOCK_COMMENT_MODE]},u={className:"title",begin:n(i)+e.IDENT_RE,relevance:0},d=n(i)+e.IDENT_RE+"\\s*\\(",p={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_t short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary",literal:"true false nullptr NULL"},f=[c,o,t,e.C_BLOCK_COMMENT_MODE,l,s],h={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:p,contains:f.concat([{begin:/\(/,end:/\)/,keywords:p,contains:f.concat(["self"]),relevance:0}]),relevance:0},m={className:"function",begin:"("+a+"[\\*&\\s]+)+"+d,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:p,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:r,keywords:p,relevance:0},{begin:d,returnBegin:!0,contains:[u],relevance:0},{className:"params",begin:/\(/,end:/\)/,keywords:p,relevance:0,contains:[t,e.C_BLOCK_COMMENT_MODE,s,l,o,{begin:/\(/,end:/\)/,keywords:p,relevance:0,contains:["self",t,e.C_BLOCK_COMMENT_MODE,s,l,o]}]},o,t,e.C_BLOCK_COMMENT_MODE,c]};return{name:"C",aliases:["h"],keywords:p,disableAutodetect:!0,illegal:"",keywords:p,contains:["self",o]},{begin:e.IDENT_RE+"::",keywords:p},{className:"class",beginKeywords:"enum class struct union",end:/[{;:<>=]/,contains:[{beginKeywords:"final class struct"},e.TITLE_MODE]}]),exports:{preprocessor:c,strings:s,keywords:p}}}},15812:function(e){"use strict";e.exports=function(e){var t="div mod in and or not xor asserterror begin case do downto else end exit for if of repeat then to until while with var",n=[e.C_LINE_COMMENT_MODE,e.COMMENT(/\{/,/\}/,{relevance:0}),e.COMMENT(/\(\*/,/\*\)/,{relevance:10})],r={className:"string",begin:/'/,end:/'/,contains:[{begin:/''/}]},i={className:"string",begin:/(#\d+)+/},a={className:"function",beginKeywords:"procedure",end:/[:;]/,keywords:"procedure|10",contains:[e.TITLE_MODE,{className:"params",begin:/\(/,end:/\)/,keywords:t,contains:[r,i]}].concat(n)},o={className:"class",begin:"OBJECT (Table|Form|Report|Dataport|Codeunit|XMLport|MenuSuite|Page|Query) (\\d+) ([^\\r\\n]+)",returnBegin:!0,contains:[e.TITLE_MODE,a]};return{name:"C/AL",case_insensitive:!0,keywords:{keyword:t,literal:"false true"},illegal:/\/\*/,contains:[r,i,{className:"number",begin:"\\b\\d+(\\.\\d+)?(DT|D|T)",relevance:0},{className:"string",begin:'"',end:'"'},e.NUMBER_MODE,o,a]}}},26337:function(e){"use strict";e.exports=function(e){return{name:"Cap\u2019n Proto",aliases:["capnp"],keywords:{keyword:"struct enum interface union group import using const annotation extends in of on as with from fixed",built_in:"Void Bool Int8 Int16 Int32 Int64 UInt8 UInt16 UInt32 UInt64 Float32 Float64 Text Data AnyPointer AnyStruct Capability List",literal:"true false"},contains:[e.QUOTE_STRING_MODE,e.NUMBER_MODE,e.HASH_COMMENT_MODE,{className:"meta",begin:/@0x[\w\d]{16};/,illegal:/\n/},{className:"symbol",begin:/@\d+\b/},{className:"class",beginKeywords:"struct enum",end:/\{/,illegal:/\n/,contains:[e.inherit(e.TITLE_MODE,{starts:{endsWithParent:!0,excludeEnd:!0}})]},{className:"class",beginKeywords:"interface",end:/\{/,illegal:/\n/,contains:[e.inherit(e.TITLE_MODE,{starts:{endsWithParent:!0,excludeEnd:!0}})]}]}}},39195:function(e){"use strict";e.exports=function(e){var t="assembly module package import alias class interface object given value assign void function new of extends satisfies abstracts in out return break continue throw assert dynamic if else switch case for while try catch finally then let this outer super is exists nonempty",n={className:"subst",excludeBegin:!0,excludeEnd:!0,begin:/``/,end:/``/,keywords:t,relevance:10},r=[{className:"string",begin:'"""',end:'"""',relevance:10},{className:"string",begin:'"',end:'"',contains:[n]},{className:"string",begin:"'",end:"'"},{className:"number",begin:"#[0-9a-fA-F_]+|\\$[01_]+|[0-9_]+(?:\\.[0-9_](?:[eE][+-]?\\d+)?)?[kMGTPmunpf]?",relevance:0}];return n.contains=r,{name:"Ceylon",keywords:{keyword:t+" shared abstract formal default actual variable late native deprecated final sealed annotation suppressWarnings small",meta:"doc by license see throws tagged"},illegal:"\\$[^01]|#[^0-9a-fA-F]",contains:[e.C_LINE_COMMENT_MODE,e.COMMENT("/\\*","\\*/",{contains:["self"]}),{className:"meta",begin:'@[a-z]\\w*(?::"[^"]*")?'}].concat(r)}}},43638:function(e){"use strict";e.exports=function(e){return{name:"Clean",aliases:["icl","dcl"],keywords:{keyword:"if let in with where case of class instance otherwise implementation definition system module from import qualified as special code inline foreign export ccall stdcall generic derive infix infixl infixr",built_in:"Int Real Char Bool",literal:"True False"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,{begin:"->|<-[|:]?|#!?|>>=|\\{\\||\\|\\}|:==|=:|<>"}]}}},41035:function(e){"use strict";e.exports=function(e){return{name:"Clojure REPL",contains:[{className:"meta",begin:/^([\w.-]+|\s*#_)?=>/,starts:{end:/$/,subLanguage:"clojure"}}]}}},54698:function(e){"use strict";e.exports=function(e){var t="a-zA-Z_\\-!.?+*=<>&#'",n="["+t+"]["+t+"0-9/;:]*",r="def defonce defprotocol defstruct defmulti defmethod defn- defn defmacro deftype defrecord",i={$pattern:n,"builtin-name":r+" cond apply if-not if-let if not not= =|0 <|0 >|0 <=|0 >=|0 ==|0 +|0 /|0 *|0 -|0 rem quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last drop-while while intern condp case reduced cycle split-at split-with repeat replicate iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter monitor-exit macroexpand macroexpand-1 for dosync and or when when-not when-let comp juxt partial sequence memoize constantly complement identity assert peek pop doto proxy first rest cons cast coll last butlast sigs reify second ffirst fnext nfirst nnext meta with-meta ns in-ns create-ns import refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize"},a={begin:n,relevance:0},o={className:"number",begin:"[-+]?\\d+(\\.\\d+)?",relevance:0},s=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),l=e.COMMENT(";","$",{relevance:0}),c={className:"literal",begin:/\b(true|false|nil)\b/},u={begin:"[\\[\\{]",end:"[\\]\\}]"},d={className:"comment",begin:"\\^"+n},p=e.COMMENT("\\^\\{","\\}"),f={className:"symbol",begin:"[:]{1,2}"+n},h={begin:"\\(",end:"\\)"},m={endsWithParent:!0,relevance:0},g={keywords:i,className:"name",begin:n,relevance:0,starts:m},_=[h,s,d,p,l,f,u,o,c,a],v={beginKeywords:r,lexemes:n,end:'(\\[|#|\\d|"|:|\\{|\\)|\\(|$)',contains:[{className:"title",begin:n,relevance:0,excludeEnd:!0,endsParent:!0}].concat(_)};return h.contains=[e.COMMENT("comment",""),v,g,m],m.contains=_,u.contains=_,p.contains=[u],{name:"Clojure",aliases:["clj"],illegal:/\S/,contains:[h,s,d,p,l,f,u,o,c]}}},8913:function(e){"use strict";e.exports=function(e){return{name:"CMake",aliases:["cmake.in"],case_insensitive:!0,keywords:{keyword:"break cmake_host_system_information cmake_minimum_required cmake_parse_arguments cmake_policy configure_file continue elseif else endforeach endfunction endif endmacro endwhile execute_process file find_file find_library find_package find_path find_program foreach function get_cmake_property get_directory_property get_filename_component get_property if include include_guard list macro mark_as_advanced math message option return separate_arguments set_directory_properties set_property set site_name string unset variable_watch while add_compile_definitions add_compile_options add_custom_command add_custom_target add_definitions add_dependencies add_executable add_library add_link_options add_subdirectory add_test aux_source_directory build_command create_test_sourcelist define_property enable_language enable_testing export fltk_wrap_ui get_source_file_property get_target_property get_test_property include_directories include_external_msproject include_regular_expression install link_directories link_libraries load_cache project qt_wrap_cpp qt_wrap_ui remove_definitions set_source_files_properties set_target_properties set_tests_properties source_group target_compile_definitions target_compile_features target_compile_options target_include_directories target_link_directories target_link_libraries target_link_options target_sources try_compile try_run ctest_build ctest_configure ctest_coverage ctest_empty_binary_directory ctest_memcheck ctest_read_custom_files ctest_run_script ctest_sleep ctest_start ctest_submit ctest_test ctest_update ctest_upload build_name exec_program export_library_dependencies install_files install_programs install_targets load_command make_directory output_required_files remove subdir_depends subdirs use_mangled_mesa utility_source variable_requires write_file qt5_use_modules qt5_use_package qt5_wrap_cpp on off true false and or not command policy target test exists is_newer_than is_directory is_symlink is_absolute matches less greater equal less_equal greater_equal strless strgreater strequal strless_equal strgreater_equal version_less version_greater version_equal version_less_equal version_greater_equal in_list defined"},contains:[{className:"variable",begin:/\$\{/,end:/\}/},e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE]}}},23386:function(e){"use strict";var t=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],r=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer","BigInt64Array","BigUint64Array","BigInt"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);e.exports=function(e){var i,a={keyword:t.concat(["then","unless","until","loop","by","when","and","or","is","isnt","not"]).filter((i=["var","const","let","function","static"],function(e){return!i.includes(e)})),literal:n.concat(["yes","no","on","off"]),built_in:r.concat(["npm","print"])},o="[A-Za-z$_][0-9A-Za-z$_]*",s={className:"subst",begin:/#\{/,end:/\}/,keywords:a},l=[e.BINARY_NUMBER_MODE,e.inherit(e.C_NUMBER_MODE,{starts:{end:"(\\s*/)?",relevance:0}}),{className:"string",variants:[{begin:/'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[e.BACKSLASH_ESCAPE]},{begin:/"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,s]},{begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s]}]},{className:"regexp",variants:[{begin:"///",end:"///",contains:[s,e.HASH_COMMENT_MODE]},{begin:"//[gim]{0,3}(?=\\W)",relevance:0},{begin:/\/(?![ *]).*?(?![\\]).\/[gim]{0,3}(?=\W)/}]},{begin:"@"+o},{subLanguage:"javascript",excludeBegin:!0,excludeEnd:!0,variants:[{begin:"```",end:"```"},{begin:"`",end:"`"}]}];s.contains=l;var c=e.inherit(e.TITLE_MODE,{begin:o}),u="(\\(.*\\)\\s*)?\\B[-=]>",d={className:"params",begin:"\\([^\\(]",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:a,contains:["self"].concat(l)}]};return{name:"CoffeeScript",aliases:["coffee","cson","iced"],keywords:a,illegal:/\/\*/,contains:l.concat([e.COMMENT("###","###"),e.HASH_COMMENT_MODE,{className:"function",begin:"^\\s*"+o+"\\s*=\\s*"+u,end:"[-=]>",returnBegin:!0,contains:[c,d]},{begin:/[:\(,=]\s*/,relevance:0,contains:[{className:"function",begin:u,end:"[-=]>",returnBegin:!0,contains:[d]}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[c]},c]},{begin:o+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}},97881:function(e){"use strict";e.exports=function(e){return{name:"Coq",keywords:{keyword:"_|0 as at cofix else end exists exists2 fix for forall fun if IF in let match mod Prop return Set then Type using where with Abort About Add Admit Admitted All Arguments Assumptions Axiom Back BackTo Backtrack Bind Blacklist Canonical Cd Check Class Classes Close Coercion Coercions CoFixpoint CoInductive Collection Combined Compute Conjecture Conjectures Constant constr Constraint Constructors Context Corollary CreateHintDb Cut Declare Defined Definition Delimit Dependencies Dependent Derive Drop eauto End Equality Eval Example Existential Existentials Existing Export exporting Extern Extract Extraction Fact Field Fields File Fixpoint Focus for From Function Functional Generalizable Global Goal Grab Grammar Graph Guarded Heap Hint HintDb Hints Hypotheses Hypothesis ident Identity If Immediate Implicit Import Include Inductive Infix Info Initial Inline Inspect Instance Instances Intro Intros Inversion Inversion_clear Language Left Lemma Let Libraries Library Load LoadPath Local Locate Ltac ML Mode Module Modules Monomorphic Morphism Next NoInline Notation Obligation Obligations Opaque Open Optimize Options Parameter Parameters Parametric Path Paths pattern Polymorphic Preterm Print Printing Program Projections Proof Proposition Pwd Qed Quit Rec Record Recursive Redirect Relation Remark Remove Require Reserved Reset Resolve Restart Rewrite Right Ring Rings Save Scheme Scope Scopes Script Search SearchAbout SearchHead SearchPattern SearchRewrite Section Separate Set Setoid Show Solve Sorted Step Strategies Strategy Structure SubClass Table Tables Tactic Term Test Theorem Time Timeout Transparent Type Typeclasses Types Undelimit Undo Unfocus Unfocused Unfold Universe Universes Unset Unshelve using Variable Variables Variant Verbose Visibility where with",built_in:"abstract absurd admit after apply as assert assumption at auto autorewrite autounfold before bottom btauto by case case_eq cbn cbv change classical_left classical_right clear clearbody cofix compare compute congruence constr_eq constructor contradict contradiction cut cutrewrite cycle decide decompose dependent destruct destruction dintuition discriminate discrR do double dtauto eapply eassumption eauto ecase econstructor edestruct ediscriminate eelim eexact eexists einduction einjection eleft elim elimtype enough equality erewrite eright esimplify_eq esplit evar exact exactly_once exfalso exists f_equal fail field field_simplify field_simplify_eq first firstorder fix fold fourier functional generalize generalizing gfail give_up has_evar hnf idtac in induction injection instantiate intro intro_pattern intros intuition inversion inversion_clear is_evar is_var lapply lazy left lia lra move native_compute nia nsatz omega once pattern pose progress proof psatz quote record red refine reflexivity remember rename repeat replace revert revgoals rewrite rewrite_strat right ring ring_simplify rtauto set setoid_reflexivity setoid_replace setoid_rewrite setoid_symmetry setoid_transitivity shelve shelve_unifiable simpl simple simplify_eq solve specialize split split_Rabs split_Rmult stepl stepr subst sum swap symmetry tactic tauto time timeout top transitivity trivial try tryif unfold unify until using vm_compute with"},contains:[e.QUOTE_STRING_MODE,e.COMMENT("\\(\\*","\\*\\)"),e.C_NUMBER_MODE,{className:"type",excludeBegin:!0,begin:"\\|\\s*",end:"\\w+"},{begin:/[-=]>/}]}}},72406:function(e){"use strict";e.exports=function(e){return{name:"Cach\xe9 Object Script",case_insensitive:!0,aliases:["cls"],keywords:"property parameter class classmethod clientmethod extends as break catch close continue do d|0 else elseif for goto halt hang h|0 if job j|0 kill k|0 lock l|0 merge new open quit q|0 read r|0 return set s|0 tcommit throw trollback try tstart use view while write w|0 xecute x|0 zkill znspace zn ztrap zwrite zw zzdump zzwrite print zbreak zinsert zload zprint zremove zsave zzprint mv mvcall mvcrt mvdim mvprint zquit zsync ascii",contains:[{className:"number",begin:"\\b(\\d+(\\.\\d*)?|\\.\\d+)",relevance:0},{className:"string",variants:[{begin:'"',end:'"',contains:[{begin:'""',relevance:0}]}]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"comment",begin:/;/,end:"$",relevance:0},{className:"built_in",begin:/(?:\$\$?|\.\.)\^?[a-zA-Z]+/},{className:"built_in",begin:/\$\$\$[a-zA-Z]+/},{className:"built_in",begin:/%[a-z]+(?:\.[a-z]+)*/},{className:"symbol",begin:/\^%?[a-zA-Z][\w]*/},{className:"keyword",begin:/##class|##super|#define|#dim/},{begin:/&sql\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,subLanguage:"sql"},{begin:/&(js|jscript|javascript)/,excludeBegin:!0,excludeEnd:!0,subLanguage:"javascript"},{begin:/&html<\s*\s*>/,subLanguage:"xml"}]}}},66734:function(e){"use strict";function t(e){return e?"string"===typeof e?e:e.source:null}function n(e){return r("(",e,")?")}function r(){for(var e=arguments.length,n=new Array(e),r=0;r]+>")+")",l={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},c={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},u={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},d={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(c,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/},i,e.C_BLOCK_COMMENT_MODE]},p={className:"title",begin:n(o)+e.IDENT_RE,relevance:0},f=n(o)+e.IDENT_RE+"\\s*\\(",h={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_t short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"_Bool _Complex _Imaginary",_relevance_hints:["asin","atan2","atan","calloc","ceil","cosh","cos","exit","exp","fabs","floor","fmod","fprintf","fputs","free","frexp","auto_ptr","deque","list","queue","stack","vector","map","set","pair","bitset","multiset","multimap","unordered_set","fscanf","future","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","tolower","toupper","labs","ldexp","log10","log","malloc","realloc","memchr","memcmp","memcpy","memset","modf","pow","printf","putchar","puts","scanf","sinh","sin","snprintf","sprintf","sqrt","sscanf","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","tanh","tan","unordered_map","unordered_multiset","unordered_multimap","priority_queue","make_pair","array","shared_ptr","abort","terminate","abs","acos","vfprintf","vprintf","vsprintf","endl","initializer_list","unique_ptr","complex","imaginary","std","string","wstring","cin","cout","cerr","clog","stdin","stdout","stderr","stringstream","istringstream","ostringstream"],literal:"true false nullptr NULL"},m={className:"function.dispatch",relevance:0,keywords:h,begin:r(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!while)/,e.IDENT_RE,(t=/\s*\(/,r("(?=",t,")")))},g=[m,d,l,i,e.C_BLOCK_COMMENT_MODE,u,c],_={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:h,contains:g.concat([{begin:/\(/,end:/\)/,keywords:h,contains:g.concat(["self"]),relevance:0}]),relevance:0},v={className:"function",begin:"("+s+"[\\*&\\s]+)+"+f,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:h,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:h,relevance:0},{begin:f,returnBegin:!0,contains:[p],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[c,u]},{className:"params",begin:/\(/,end:/\)/,keywords:h,relevance:0,contains:[i,e.C_BLOCK_COMMENT_MODE,c,u,l,{begin:/\(/,end:/\)/,keywords:h,relevance:0,contains:["self",i,e.C_BLOCK_COMMENT_MODE,c,u,l]}]},l,i,e.C_BLOCK_COMMENT_MODE,d]};return{name:"C++",aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:h,illegal:"",keywords:h,contains:["self",l]},{begin:e.IDENT_RE+"::",keywords:h},{className:"class",beginKeywords:"enum class struct union",end:/[{;:<>=]/,contains:[{beginKeywords:"final class struct"},e.TITLE_MODE]}]),exports:{preprocessor:d,strings:c,keywords:h}}}},7682:function(e){"use strict";e.exports=function(e){var t="group clone ms master location colocation order fencing_topology rsc_ticket acl_target acl_group user role tag xml";return{name:"crmsh",aliases:["crm","pcmk"],case_insensitive:!0,keywords:{keyword:"params meta operations op rule attributes utilization read write deny defined not_defined in_range date spec in ref reference attribute type xpath version and or lt gt tag lte gte eq ne \\ number string",literal:"Master Started Slave Stopped start promote demote stop monitor true false"},contains:[e.HASH_COMMENT_MODE,{beginKeywords:"node",starts:{end:"\\s*([\\w_-]+:)?",starts:{className:"title",end:"\\s*[\\$\\w_][\\w_-]*"}}},{beginKeywords:"primitive rsc_template",starts:{className:"title",end:"\\s*[\\$\\w_][\\w_-]*",starts:{end:"\\s*@?[\\w_][\\w_\\.:-]*"}}},{begin:"\\b("+t.split(" ").join("|")+")\\s+",keywords:t,starts:{className:"title",end:"[\\$\\w_][\\w_-]*"}},{beginKeywords:"property rsc_defaults op_defaults",starts:{className:"title",end:"\\s*([\\w_-]+:)?"}},e.QUOTE_STRING_MODE,{className:"meta",begin:"(ocf|systemd|service|lsb):[\\w_:-]+",relevance:0},{className:"number",begin:"\\b\\d+(\\.\\d+)?(ms|s|h|m)?",relevance:0},{className:"literal",begin:"[-]?(infinity|inf)",relevance:0},{className:"attr",begin:/([A-Za-z$_#][\w_-]+)=/,relevance:0},{className:"tag",begin:"",relevance:0}]}}},25842:function(e){"use strict";e.exports=function(e){var t="(_?[ui](8|16|32|64|128))?",n="[a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|[=!]~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~|]|//|//=|&[-+*]=?|&\\*\\*|\\[\\][=?]?",r="[A-Za-z_]\\w*(::\\w+)*(\\?|!)?",i={$pattern:"[a-zA-Z_]\\w*[!?=]?",keyword:"abstract alias annotation as as? asm begin break case class def do else elsif end ensure enum extend for fun if include instance_sizeof is_a? lib macro module next nil? of out pointerof private protected rescue responds_to? return require select self sizeof struct super then type typeof union uninitialized unless until verbatim when while with yield __DIR__ __END_LINE__ __FILE__ __LINE__",literal:"false nil true"},a={className:"subst",begin:/#\{/,end:/\}/,keywords:i},o={className:"template-variable",variants:[{begin:"\\{\\{",end:"\\}\\}"},{begin:"\\{%",end:"%\\}"}],keywords:i};function s(e,t){var n=[{begin:e,end:t}];return n[0].contains=n,n}var l={className:"string",contains:[e.BACKSLASH_ESCAPE,a],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:"%[Qwi]?\\(",end:"\\)",contains:s("\\(","\\)")},{begin:"%[Qwi]?\\[",end:"\\]",contains:s("\\[","\\]")},{begin:"%[Qwi]?\\{",end:/\}/,contains:s(/\{/,/\}/)},{begin:"%[Qwi]?<",end:">",contains:s("<",">")},{begin:"%[Qwi]?\\|",end:"\\|"},{begin:/<<-\w+$/,end:/^\s*\w+$/}],relevance:0},c={className:"string",variants:[{begin:"%q\\(",end:"\\)",contains:s("\\(","\\)")},{begin:"%q\\[",end:"\\]",contains:s("\\[","\\]")},{begin:"%q\\{",end:/\}/,contains:s(/\{/,/\}/)},{begin:"%q<",end:">",contains:s("<",">")},{begin:"%q\\|",end:"\\|"},{begin:/<<-'\w+'$/,end:/^\s*\w+$/}],relevance:0},u={begin:"(?!%\\})("+e.RE_STARTERS_RE+"|\\n|\\b(case|if|select|unless|until|when|while)\\b)\\s*",keywords:"case if select unless until when while",contains:[{className:"regexp",contains:[e.BACKSLASH_ESCAPE,a],variants:[{begin:"//[a-z]*",relevance:0},{begin:"/(?!\\/)",end:"/[a-z]*"}]}],relevance:0},d=[o,l,c,{className:"regexp",contains:[e.BACKSLASH_ESCAPE,a],variants:[{begin:"%r\\(",end:"\\)",contains:s("\\(","\\)")},{begin:"%r\\[",end:"\\]",contains:s("\\[","\\]")},{begin:"%r\\{",end:/\}/,contains:s(/\{/,/\}/)},{begin:"%r<",end:">",contains:s("<",">")},{begin:"%r\\|",end:"\\|"}],relevance:0},u,{className:"meta",begin:"@\\[",end:"\\]",contains:[e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"})]},e.HASH_COMMENT_MODE,{className:"class",beginKeywords:"class module struct",end:"$|;",illegal:/=/,contains:[e.HASH_COMMENT_MODE,e.inherit(e.TITLE_MODE,{begin:r}),{begin:"<"}]},{className:"class",beginKeywords:"lib enum union",end:"$|;",illegal:/=/,contains:[e.HASH_COMMENT_MODE,e.inherit(e.TITLE_MODE,{begin:r})]},{beginKeywords:"annotation",end:"$|;",illegal:/=/,contains:[e.HASH_COMMENT_MODE,e.inherit(e.TITLE_MODE,{begin:r})],relevance:2},{className:"function",beginKeywords:"def",end:/\B\b/,contains:[e.inherit(e.TITLE_MODE,{begin:n,endsParent:!0})]},{className:"function",beginKeywords:"fun macro",end:/\B\b/,contains:[e.inherit(e.TITLE_MODE,{begin:n,endsParent:!0})],relevance:2},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol",begin:":",contains:[l,{begin:n}],relevance:0},{className:"number",variants:[{begin:"\\b0b([01_]+)"+t},{begin:"\\b0o([0-7_]+)"+t},{begin:"\\b0x([A-Fa-f0-9_]+)"+t},{begin:"\\b([1-9][0-9_]*[0-9]|[0-9])(\\.[0-9][0-9_]*)?([eE]_?[-+]?[0-9_]*)?(_?f(32|64))?(?!_)"},{begin:"\\b([1-9][0-9_]*|0)"+t}],relevance:0}];return a.contains=d,o.contains=d.slice(1),{name:"Crystal",aliases:["cr"],keywords:i,contains:d}}},63186:function(e){"use strict";e.exports=function(e){var t={keyword:["abstract","as","base","break","case","class","const","continue","do","else","event","explicit","extern","finally","fixed","for","foreach","goto","if","implicit","in","interface","internal","is","lock","namespace","new","operator","out","override","params","private","protected","public","readonly","record","ref","return","sealed","sizeof","stackalloc","static","struct","switch","this","throw","try","typeof","unchecked","unsafe","using","virtual","void","volatile","while"].concat(["add","alias","and","ascending","async","await","by","descending","equals","from","get","global","group","init","into","join","let","nameof","not","notnull","on","or","orderby","partial","remove","select","set","unmanaged","value|0","var","when","where","with","yield"]),built_in:["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"],literal:["default","false","null","true"]},n=e.inherit(e.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),r={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},i={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},a=e.inherit(i,{illegal:/\n/}),o={className:"subst",begin:/\{/,end:/\}/,keywords:t},s=e.inherit(o,{illegal:/\n/}),l={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},e.BACKSLASH_ESCAPE,s]},c={className:"string",begin:/\$@"/,end:'"',contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},o]},u=e.inherit(c,{illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},s]});o.contains=[c,l,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,r,e.C_BLOCK_COMMENT_MODE],s.contains=[u,l,a,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,r,e.inherit(e.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];var d={variants:[c,l,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},p={begin:"<",end:">",contains:[{beginKeywords:"in out"},n]},f=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",h={begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],keywords:t,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:"\x3c!--|--\x3e"},{begin:""}]}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},d,r,{beginKeywords:"class interface",relevance:0,end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"},n,p,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[n,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[n,p,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"meta-string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+f+"\\s+)+"+e.IDENT_RE+"\\s*(<.+>\\s*)?\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:t,contains:[{beginKeywords:["public","private","protected","static","internal","protected","abstract","async","extern","override","unsafe","virtual","new","sealed","partial"].join(" "),relevance:0},{begin:e.IDENT_RE+"\\s*(<.+>\\s*)?\\(",returnBegin:!0,contains:[e.TITLE_MODE,p],relevance:0},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,relevance:0,contains:[d,r,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},h]}}},49142:function(e){"use strict";e.exports=function(e){return{name:"CSP",case_insensitive:!1,keywords:{$pattern:"[a-zA-Z][a-zA-Z0-9_-]*",keyword:"base-uri child-src connect-src default-src font-src form-action frame-ancestors frame-src img-src media-src object-src plugin-types report-uri sandbox script-src style-src"},contains:[{className:"string",begin:"'",end:"'"},{className:"attribute",begin:"^Content",end:":",excludeEnd:!0}]}}},56497:function(e){"use strict";var t=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],n=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],r=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],i=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],a=["align-content","align-items","align-self","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","auto","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","clip-path","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-variant","font-variant-ligatures","font-variation-settings","font-weight","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inherit","initial","justify-content","left","letter-spacing","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","mask","max-height","max-width","min-height","min-width","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","perspective","perspective-origin","pointer-events","position","quotes","resize","right","src","tab-size","table-layout","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-indent","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","white-space","widows","width","word-break","word-spacing","word-wrap","z-index"].reverse();function o(e){return e?"string"===typeof e?e:e.source:null}function s(e){return function(){for(var e=arguments.length,t=new Array(e),n=0;n"}]}}},69706:function(e){"use strict";e.exports=function(e){var t="exports register file shl array record property for mod while set ally label uses raise not stored class safecall var interface or private static exit index inherited to else stdcall override shr asm far resourcestring finalization packed virtual out and protected library do xorwrite goto near function end div overload object unit begin string on inline repeat until destructor write message program with read initialization except default nil if case cdecl in downto threadvar of try pascal const external constructor type public then implementation finally published procedure absolute reintroduce operator as is abstract alias assembler bitpacked break continue cppdecl cvar enumerator experimental platform deprecated unimplemented dynamic export far16 forward generic helper implements interrupt iochecks local name nodefault noreturn nostackframe oldfpccall otherwise saveregisters softfloat specialize strict unaligned varargs ",n=[e.C_LINE_COMMENT_MODE,e.COMMENT(/\{/,/\}/,{relevance:0}),e.COMMENT(/\(\*/,/\*\)/,{relevance:10})],r={className:"meta",variants:[{begin:/\{\$/,end:/\}/},{begin:/\(\*\$/,end:/\*\)/}]},i={className:"string",begin:/'/,end:/'/,contains:[{begin:/''/}]},a={className:"string",begin:/(#\d+)+/},o={begin:e.IDENT_RE+"\\s*=\\s*class\\s*\\(",returnBegin:!0,contains:[e.TITLE_MODE]},s={className:"function",beginKeywords:"function constructor destructor procedure",end:/[:;]/,keywords:"function constructor|10 destructor|10 procedure|10",contains:[e.TITLE_MODE,{className:"params",begin:/\(/,end:/\)/,keywords:t,contains:[i,a,r].concat(n)},r].concat(n)};return{name:"Delphi",aliases:["dpr","dfm","pas","pascal","freepascal","lazarus","lpr","lfm"],case_insensitive:!0,keywords:t,illegal:/"|\$[G-Zg-z]|\/\*|<\/|\|/,contains:[i,a,e.NUMBER_MODE,{className:"number",relevance:0,variants:[{begin:"\\$[0-9A-Fa-f]+"},{begin:"&[0-7]+"},{begin:"%[01]+"}]},o,s,r].concat(n)}}},48249:function(e){"use strict";e.exports=function(e){return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,variants:[{begin:/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/},{begin:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{begin:/^--- +\d+,\d+ +----$/}]},{className:"comment",variants:[{begin:/Index: /,end:/$/},{begin:/^index/,end:/$/},{begin:/={3,}/,end:/$/},{begin:/^-{3}/,end:/$/},{begin:/^\*{3} /,end:/$/},{begin:/^\+{3}/,end:/$/},{begin:/^\*{15}$/},{begin:/^diff --git/,end:/$/}]},{className:"addition",begin:/^\+/,end:/$/},{className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,end:/$/}]}}},38859:function(e){"use strict";e.exports=function(e){var t={begin:/\|[A-Za-z]+:?/,keywords:{name:"truncatewords removetags linebreaksbr yesno get_digit timesince random striptags filesizeformat escape linebreaks length_is ljust rjust cut urlize fix_ampersands title floatformat capfirst pprint divisibleby add make_list unordered_list urlencode timeuntil urlizetrunc wordcount stringformat linenumbers slice date dictsort dictsortreversed default_if_none pluralize lower join center default truncatewords_html upper length phone2numeric wordwrap time addslashes slugify first escapejs force_escape iriencode last safe safeseq truncatechars localize unlocalize localtime utc timezone"},contains:[e.QUOTE_STRING_MODE,e.APOS_STRING_MODE]};return{name:"Django",aliases:["jinja"],case_insensitive:!0,subLanguage:"xml",contains:[e.COMMENT(/\{%\s*comment\s*%\}/,/\{%\s*endcomment\s*%\}/),e.COMMENT(/\{#/,/#\}/),{className:"template-tag",begin:/\{%/,end:/%\}/,contains:[{className:"name",begin:/\w+/,keywords:{name:"comment endcomment load templatetag ifchanged endifchanged if endif firstof for endfor ifnotequal endifnotequal widthratio extends include spaceless endspaceless regroup ifequal endifequal ssi now with cycle url filter endfilter debug block endblock else autoescape endautoescape csrf_token empty elif endwith static trans blocktrans endblocktrans get_static_prefix get_media_prefix plural get_current_language language get_available_languages get_current_language_bidi get_language_info get_language_info_list localize endlocalize localtime endlocaltime timezone endtimezone get_current_timezone verbatim"},starts:{endsWithParent:!0,keywords:"in by as",contains:[t],relevance:0}}]},{className:"template-variable",begin:/\{\{/,end:/\}\}/,contains:[t]}]}}},62872:function(e){"use strict";e.exports=function(e){return{name:"DNS Zone",aliases:["bind","zone"],keywords:{keyword:"IN A AAAA AFSDB APL CAA CDNSKEY CDS CERT CNAME DHCID DLV DNAME DNSKEY DS HIP IPSECKEY KEY KX LOC MX NAPTR NS NSEC NSEC3 NSEC3PARAM PTR RRSIG RP SIG SOA SRV SSHFP TA TKEY TLSA TSIG TXT"},contains:[e.COMMENT(";","$",{relevance:0}),{className:"meta",begin:/^\$(TTL|GENERATE|INCLUDE|ORIGIN)\b/},{className:"number",begin:"((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))\\b"},{className:"number",begin:"((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\b"},e.inherit(e.NUMBER_MODE,{begin:/\b\d+[dhwm]?/})]}}},78642:function(e){"use strict";e.exports=function(e){return{name:"Dockerfile",aliases:["docker"],case_insensitive:!0,keywords:"from maintainer expose env arg user onbuild stopsignal",contains:[e.HASH_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{beginKeywords:"run cmd entrypoint volume add copy workdir label healthcheck shell",starts:{end:/[^\\]$/,subLanguage:"bash"}}],illegal:"",illegal:"\\n"}]},t,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},i={className:"variable",begin:/&[a-z\d_]*\b/},a={className:"meta-keyword",begin:"/[a-z][a-z\\d-]*/"},o={className:"symbol",begin:"^\\s*[a-zA-Z_][a-zA-Z\\d_]*:"},s={className:"params",begin:"<",end:">",contains:[n,i]},l={className:"class",begin:/[a-zA-Z_][a-zA-Z\d_@]*\s\{/,end:/[{;=]/,returnBegin:!0,excludeEnd:!0};return{name:"Device Tree",keywords:"",contains:[{className:"class",begin:"/\\s*\\{",end:/\};/,relevance:10,contains:[i,a,o,l,s,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,t]},i,a,o,l,s,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,t,r,{begin:e.IDENT_RE+"::",keywords:""}]}}},85889:function(e){"use strict";e.exports=function(e){return{name:"Dust",aliases:["dst"],case_insensitive:!0,subLanguage:"xml",contains:[{className:"template-tag",begin:/\{[#\/]/,end:/\}/,illegal:/;/,contains:[{className:"name",begin:/[a-zA-Z\.-]+/,starts:{endsWithParent:!0,relevance:0,contains:[e.QUOTE_STRING_MODE]}}]},{className:"template-variable",begin:/\{/,end:/\}/,illegal:/;/,keywords:"if eq ne lt lte gt gte select default math sep"}]}}},47063:function(e){"use strict";e.exports=function(e){var t=e.COMMENT(/\(\*/,/\*\)/);return{name:"Extended Backus-Naur Form",illegal:/\S/,contains:[t,{className:"attribute",begin:/^[ ]*[a-zA-Z]+([\s_-]+[a-zA-Z]+)*/},{begin:/=/,end:/[.;]/,contains:[t,{className:"meta",begin:/\?.*\?/},{className:"string",variants:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{begin:"`",end:"`"}]}]}]}}},76674:function(e){"use strict";e.exports=function(e){var t="[a-zA-Z_][a-zA-Z0-9_.]*(!|\\?)?",n={$pattern:t,keyword:"and false then defined module in return redo retry end for true self when next until do begin unless nil break not case cond alias while ensure or include use alias fn quote require import with|0"},r={className:"subst",begin:/#\{/,end:/\}/,keywords:n},i={className:"number",begin:"(\\b0o[0-7_]+)|(\\b0b[01_]+)|(\\b0x[0-9a-fA-F_]+)|(-?\\b[1-9][0-9_]*(\\.[0-9_]+([eE][-+]?[0-9]+)?)?)",relevance:0},a="[/|([{<\"']",o={className:"string",begin:"~[a-z](?="+a+")",contains:[{endsParent:!0,contains:[{contains:[e.BACKSLASH_ESCAPE,r],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/},{begin:/\//,end:/\//},{begin:/\|/,end:/\|/},{begin:/\(/,end:/\)/},{begin:/\[/,end:/\]/},{begin:/\{/,end:/\}/},{begin://}]}]}]},s={className:"string",begin:"~[A-Z](?="+a+")",contains:[{begin:/"/,end:/"/},{begin:/'/,end:/'/},{begin:/\//,end:/\//},{begin:/\|/,end:/\|/},{begin:/\(/,end:/\)/},{begin:/\[/,end:/\]/},{begin:/\{/,end:/\}/},{begin://}]},l={className:"string",contains:[e.BACKSLASH_ESCAPE,r],variants:[{begin:/"""/,end:/"""/},{begin:/'''/,end:/'''/},{begin:/~S"""/,end:/"""/,contains:[]},{begin:/~S"/,end:/"/,contains:[]},{begin:/~S'''/,end:/'''/,contains:[]},{begin:/~S'/,end:/'/,contains:[]},{begin:/'/,end:/'/},{begin:/"/,end:/"/}]},c={className:"function",beginKeywords:"def defp defmacro",end:/\B\b/,contains:[e.inherit(e.TITLE_MODE,{begin:t,endsParent:!0})]},u=e.inherit(c,{className:"class",beginKeywords:"defimpl defmodule defprotocol defrecord",end:/\bdo\b|$|;/}),d=[l,s,o,e.HASH_COMMENT_MODE,u,c,{begin:"::"},{className:"symbol",begin:":(?![\\s:])",contains:[l,{begin:"[a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?"}],relevance:0},{className:"symbol",begin:t+":(?!:)",relevance:0},i,{className:"variable",begin:"(\\$\\W)|((\\$|@@?)(\\w+))"},{begin:"->"},{begin:"("+e.RE_STARTERS_RE+")\\s*",contains:[e.HASH_COMMENT_MODE,{begin:/\/: (?=\d+\s*[,\]])/,relevance:0,contains:[i]},{className:"regexp",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,r],variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}],relevance:0}];return r.contains=d,{name:"Elixir",keywords:n,contains:d}}},68515:function(e){"use strict";e.exports=function(e){var t={variants:[e.COMMENT("--","$"),e.COMMENT(/\{-/,/-\}/,{contains:["self"]})]},n={className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},r={begin:"\\(",end:"\\)",illegal:'"',contains:[{className:"type",begin:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},t]};return{name:"Elm",keywords:"let in if then else case of where module import exposing type alias as infix infixl infixr port effect command subscription",contains:[{beginKeywords:"port effect module",end:"exposing",keywords:"port effect module where command subscription exposing",contains:[r,t],illegal:"\\W\\.|;"},{begin:"import",end:"$",keywords:"import as exposing",contains:[r,t],illegal:"\\W\\.|;"},{begin:"type",end:"$",keywords:"type alias",contains:[n,r,{begin:/\{/,end:/\}/,contains:r.contains},t]},{beginKeywords:"infix infixl infixr",end:"$",contains:[e.C_NUMBER_MODE,t]},{begin:"port",end:"$",keywords:"port",contains:[t]},{className:"string",begin:"'\\\\?.",end:"'",illegal:"."},e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,n,e.inherit(e.TITLE_MODE,{begin:"^[_a-z][\\w']*"}),t,{begin:"->|<-"}],illegal:/;/}}},75634:function(e){"use strict";e.exports=function(e){return{name:"ERB",subLanguage:"xml",contains:[e.COMMENT("<%#","%>"),{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0}]}}},1260:function(e){"use strict";function t(e){return e?"string"===typeof e?e:e.source:null}function n(){for(var e=arguments.length,n=new Array(e),r=0;r ",relevance:10},e.COMMENT("%","$"),{className:"number",begin:"\\b(\\d+(_\\d+)*#[a-fA-F0-9]+(_[a-fA-F0-9]+)*|\\d+(_\\d+)*(\\.\\d+(_\\d+)*)?([eE][-+]?\\d+)?)",relevance:0},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{begin:n(/\?(::)?/,/([A-Z]\w*)/,/((::)[A-Z]\w*)*/)},{begin:"->"},{begin:"ok"},{begin:"!"},{begin:"(\\b[a-z'][a-zA-Z0-9_']*:[a-z'][a-zA-Z0-9_']*)|(\\b[a-z'][a-zA-Z0-9_']*)",relevance:0},{begin:"[A-Z][a-zA-Z0-9_']*",relevance:0}]}}},20148:function(e){"use strict";e.exports=function(e){var t="[a-z'][a-zA-Z0-9_']*",n="("+t+":"+t+"|"+t+")",r={keyword:"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor",literal:"false true"},i=e.COMMENT("%","$"),a={className:"number",begin:"\\b(\\d+(_\\d+)*#[a-fA-F0-9]+(_[a-fA-F0-9]+)*|\\d+(_\\d+)*(\\.\\d+(_\\d+)*)?([eE][-+]?\\d+)?)",relevance:0},o={begin:"fun\\s+"+t+"/\\d+"},s={begin:n+"\\(",end:"\\)",returnBegin:!0,relevance:0,contains:[{begin:n,relevance:0},{begin:"\\(",end:"\\)",endsWithParent:!0,returnEnd:!0,relevance:0}]},l={begin:/\{/,end:/\}/,relevance:0},c={begin:"\\b_([A-Z][A-Za-z0-9_]*)?",relevance:0},u={begin:"[A-Z][a-zA-Z0-9_]*",relevance:0},d={begin:"#"+e.UNDERSCORE_IDENT_RE,relevance:0,returnBegin:!0,contains:[{begin:"#"+e.UNDERSCORE_IDENT_RE,relevance:0},{begin:/\{/,end:/\}/,relevance:0}]},p={beginKeywords:"fun receive if try case",end:"end",keywords:r};p.contains=[i,o,e.inherit(e.APOS_STRING_MODE,{className:""}),p,s,e.QUOTE_STRING_MODE,a,l,c,u,d];var f=[i,o,p,s,e.QUOTE_STRING_MODE,a,l,c,u,d];s.contains[1].contains=f,l.contains=f,d.contains[1].contains=f;var h={className:"params",begin:"\\(",end:"\\)",contains:f};return{name:"Erlang",aliases:["erl"],keywords:r,illegal:"(",returnBegin:!0,illegal:"\\(|#|//|/\\*|\\\\|:|;",contains:[h,e.inherit(e.TITLE_MODE,{begin:t})],starts:{end:";|\\.",keywords:r,contains:f}},i,{begin:"^-",end:"\\.",relevance:0,excludeEnd:!0,returnBegin:!0,keywords:{$pattern:"-"+e.IDENT_RE,keyword:["-module","-record","-undef","-export","-ifdef","-ifndef","-author","-copyright","-doc","-vsn","-import","-include","-include_lib","-compile","-define","-else","-endif","-file","-behaviour","-behavior","-spec"].map((function(e){return"".concat(e,"|1.5")})).join(" ")},contains:[h]},a,e.QUOTE_STRING_MODE,d,c,u,l,{begin:/\.$/}]}}},80256:function(e){"use strict";e.exports=function(e){return{name:"Excel formulae",aliases:["xlsx","xls"],case_insensitive:!0,keywords:{$pattern:/[a-zA-Z][\w\.]*/,built_in:"ABS ACCRINT ACCRINTM ACOS ACOSH ACOT ACOTH AGGREGATE ADDRESS AMORDEGRC AMORLINC AND ARABIC AREAS ASC ASIN ASINH ATAN ATAN2 ATANH AVEDEV AVERAGE AVERAGEA AVERAGEIF AVERAGEIFS BAHTTEXT BASE BESSELI BESSELJ BESSELK BESSELY BETADIST BETA.DIST BETAINV BETA.INV BIN2DEC BIN2HEX BIN2OCT BINOMDIST BINOM.DIST BINOM.DIST.RANGE BINOM.INV BITAND BITLSHIFT BITOR BITRSHIFT BITXOR CALL CEILING CEILING.MATH CEILING.PRECISE CELL CHAR CHIDIST CHIINV CHITEST CHISQ.DIST CHISQ.DIST.RT CHISQ.INV CHISQ.INV.RT CHISQ.TEST CHOOSE CLEAN CODE COLUMN COLUMNS COMBIN COMBINA COMPLEX CONCAT CONCATENATE CONFIDENCE CONFIDENCE.NORM CONFIDENCE.T CONVERT CORREL COS COSH COT COTH COUNT COUNTA COUNTBLANK COUNTIF COUNTIFS COUPDAYBS COUPDAYS COUPDAYSNC COUPNCD COUPNUM COUPPCD COVAR COVARIANCE.P COVARIANCE.S CRITBINOM CSC CSCH CUBEKPIMEMBER CUBEMEMBER CUBEMEMBERPROPERTY CUBERANKEDMEMBER CUBESET CUBESETCOUNT CUBEVALUE CUMIPMT CUMPRINC DATE DATEDIF DATEVALUE DAVERAGE DAY DAYS DAYS360 DB DBCS DCOUNT DCOUNTA DDB DEC2BIN DEC2HEX DEC2OCT DECIMAL DEGREES DELTA DEVSQ DGET DISC DMAX DMIN DOLLAR DOLLARDE DOLLARFR DPRODUCT DSTDEV DSTDEVP DSUM DURATION DVAR DVARP EDATE EFFECT ENCODEURL EOMONTH ERF ERF.PRECISE ERFC ERFC.PRECISE ERROR.TYPE EUROCONVERT EVEN EXACT EXP EXPON.DIST EXPONDIST FACT FACTDOUBLE FALSE|0 F.DIST FDIST F.DIST.RT FILTERXML FIND FINDB F.INV F.INV.RT FINV FISHER FISHERINV FIXED FLOOR FLOOR.MATH FLOOR.PRECISE FORECAST FORECAST.ETS FORECAST.ETS.CONFINT FORECAST.ETS.SEASONALITY FORECAST.ETS.STAT FORECAST.LINEAR FORMULATEXT FREQUENCY F.TEST FTEST FV FVSCHEDULE GAMMA GAMMA.DIST GAMMADIST GAMMA.INV GAMMAINV GAMMALN GAMMALN.PRECISE GAUSS GCD GEOMEAN GESTEP GETPIVOTDATA GROWTH HARMEAN HEX2BIN HEX2DEC HEX2OCT HLOOKUP HOUR HYPERLINK HYPGEOM.DIST HYPGEOMDIST IF IFERROR IFNA IFS IMABS IMAGINARY IMARGUMENT IMCONJUGATE IMCOS IMCOSH IMCOT IMCSC IMCSCH IMDIV IMEXP IMLN IMLOG10 IMLOG2 IMPOWER IMPRODUCT IMREAL IMSEC IMSECH IMSIN IMSINH IMSQRT IMSUB IMSUM IMTAN INDEX INDIRECT INFO INT INTERCEPT INTRATE IPMT IRR ISBLANK ISERR ISERROR ISEVEN ISFORMULA ISLOGICAL ISNA ISNONTEXT ISNUMBER ISODD ISREF ISTEXT ISO.CEILING ISOWEEKNUM ISPMT JIS KURT LARGE LCM LEFT LEFTB LEN LENB LINEST LN LOG LOG10 LOGEST LOGINV LOGNORM.DIST LOGNORMDIST LOGNORM.INV LOOKUP LOWER MATCH MAX MAXA MAXIFS MDETERM MDURATION MEDIAN MID MIDBs MIN MINIFS MINA MINUTE MINVERSE MIRR MMULT MOD MODE MODE.MULT MODE.SNGL MONTH MROUND MULTINOMIAL MUNIT N NA NEGBINOM.DIST NEGBINOMDIST NETWORKDAYS NETWORKDAYS.INTL NOMINAL NORM.DIST NORMDIST NORMINV NORM.INV NORM.S.DIST NORMSDIST NORM.S.INV NORMSINV NOT NOW NPER NPV NUMBERVALUE OCT2BIN OCT2DEC OCT2HEX ODD ODDFPRICE ODDFYIELD ODDLPRICE ODDLYIELD OFFSET OR PDURATION PEARSON PERCENTILE.EXC PERCENTILE.INC PERCENTILE PERCENTRANK.EXC PERCENTRANK.INC PERCENTRANK PERMUT PERMUTATIONA PHI PHONETIC PI PMT POISSON.DIST POISSON POWER PPMT PRICE PRICEDISC PRICEMAT PROB PRODUCT PROPER PV QUARTILE QUARTILE.EXC QUARTILE.INC QUOTIENT RADIANS RAND RANDBETWEEN RANK.AVG RANK.EQ RANK RATE RECEIVED REGISTER.ID REPLACE REPLACEB REPT RIGHT RIGHTB ROMAN ROUND ROUNDDOWN ROUNDUP ROW ROWS RRI RSQ RTD SEARCH SEARCHB SEC SECH SECOND SERIESSUM SHEET SHEETS SIGN SIN SINH SKEW SKEW.P SLN SLOPE SMALL SQL.REQUEST SQRT SQRTPI STANDARDIZE STDEV STDEV.P STDEV.S STDEVA STDEVP STDEVPA STEYX SUBSTITUTE SUBTOTAL SUM SUMIF SUMIFS SUMPRODUCT SUMSQ SUMX2MY2 SUMX2PY2 SUMXMY2 SWITCH SYD T TAN TANH TBILLEQ TBILLPRICE TBILLYIELD T.DIST T.DIST.2T T.DIST.RT TDIST TEXT TEXTJOIN TIME TIMEVALUE T.INV T.INV.2T TINV TODAY TRANSPOSE TREND TRIM TRIMMEAN TRUE|0 TRUNC T.TEST TTEST TYPE UNICHAR UNICODE UPPER VALUE VAR VAR.P VAR.S VARA VARP VARPA VDB VLOOKUP WEBSERVICE WEEKDAY WEEKNUM WEIBULL WEIBULL.DIST WORKDAY WORKDAY.INTL XIRR XNPV XOR YEAR YEARFRAC YIELD YIELDDISC YIELDMAT Z.TEST ZTEST"},contains:[{begin:/^=/,end:/[^=]/,returnEnd:!0,illegal:/=/,relevance:10},{className:"symbol",begin:/\b[A-Z]{1,2}\d+\b/,end:/[^\d]/,excludeEnd:!0,relevance:0},{className:"symbol",begin:/[A-Z]{0,2}\d*:[A-Z]{0,2}\d*/,relevance:0},e.BACKSLASH_ESCAPE,e.QUOTE_STRING_MODE,{className:"number",begin:e.NUMBER_RE+"(%)?",relevance:0},e.COMMENT(/\bN\(/,/\)/,{excludeBegin:!0,excludeEnd:!0,illegal:/\n/})]}}},35984:function(e){"use strict";e.exports=function(e){return{name:"FIX",contains:[{begin:/[^\u2401\u0001]+/,end:/[\u2401\u0001]/,excludeEnd:!0,returnBegin:!0,returnEnd:!1,contains:[{begin:/([^\u2401\u0001=]+)/,end:/=([^\u2401\u0001=]+)/,returnEnd:!0,returnBegin:!1,className:"attr"},{begin:/=/,end:/([\u2401\u0001])/,excludeEnd:!0,excludeBegin:!0,className:"string"}]}],case_insensitive:!0}}},8043:function(e){"use strict";e.exports=function(e){var t={className:"function",beginKeywords:"def",end:/[:={\[(\n;]/,excludeEnd:!0,contains:[{className:"title",relevance:0,begin:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/}]};return{name:"Flix",keywords:{literal:"true false",keyword:"case class def else enum if impl import in lat rel index let match namespace switch type yield with"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"string",begin:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},{className:"string",variants:[{begin:'"',end:'"'}]},t,e.C_NUMBER_MODE]}}},82761:function(e){"use strict";function t(e){return e?"string"===typeof e?e:e.source:null}function n(){for(var e=arguments.length,n=new Array(e),r=0;r",contains:[e.inherit(e.TITLE_MODE,{begin:/'[a-zA-Z0-9_]+/})]};return{name:"F#",aliases:["fs"],keywords:"abstract and as assert base begin class default delegate do done downcast downto elif else end exception extern false finally for fun function global if in inherit inline interface internal lazy let match member module mutable namespace new null of open or override private public rec return sig static struct then to true try type upcast use val void when while with yield",illegal:/\/\*/,contains:[{className:"keyword",begin:/\b(yield|return|let|do)!/},{className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},{className:"string",begin:'"""',end:'"""'},e.COMMENT("\\(\\*(\\s)","\\*\\)",{contains:["self"]}),{className:"class",beginKeywords:"type",end:"\\(|=|$",excludeEnd:!0,contains:[e.UNDERSCORE_TITLE_MODE,t]},{className:"meta",begin:"\\[<",end:">\\]",relevance:10},{className:"symbol",begin:"\\B('[A-Za-z])\\b",contains:[e.BACKSLASH_ESCAPE]},e.C_LINE_COMMENT_MODE,e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),e.C_NUMBER_MODE]}}},68972:function(e){"use strict";function t(e){return e?"string"===typeof e?e:e.source:null}function n(){for(var e=arguments.length,n=new Array(e),r=0;r<:,()$[\]_.{}!+%^-]+/,l={begin:/[a-z][a-z0-9_]*(\([a-z0-9_, ]*\))?[ \t]+/,excludeBegin:!0,end:"$",endsWithParent:!0,contains:[a,o,{className:"comment",begin:n(s,(t=n(/[ ]+/,s),n("(",t,")*"))),relevance:0}]};return{name:"GAMS",aliases:["gms"],case_insensitive:!0,keywords:r,contains:[e.COMMENT(/^\$ontext/,/^\$offtext/),{className:"meta",begin:"^\\$[a-z0-9]+",end:"$",returnBegin:!0,contains:[{className:"meta-keyword",begin:"^\\$[a-z0-9]+"}]},e.COMMENT("^\\*","$"),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{beginKeywords:"set sets parameter parameters variable variables scalar scalars equation equations",end:";",contains:[e.COMMENT("^\\*","$"),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,o,l]},{beginKeywords:"table",end:";",returnBegin:!0,contains:[{beginKeywords:"table",end:"$",contains:[l]},e.COMMENT("^\\*","$"),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_NUMBER_MODE]},{className:"function",begin:/^[a-z][a-z0-9_,\-+' ()$]+\.{2}/,returnBegin:!0,contains:[{className:"title",begin:/^[a-z0-9_]+/},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0},i]},e.C_NUMBER_MODE,i]}}},10508:function(e){"use strict";e.exports=function(e){var t={keyword:"bool break call callexe checkinterrupt clear clearg closeall cls comlog compile continue create debug declare delete disable dlibrary dllcall do dos ed edit else elseif enable end endfor endif endp endo errorlog errorlogat expr external fn for format goto gosub graph if keyword let lib library line load loadarray loadexe loadf loadk loadm loadp loads loadx local locate loopnextindex lprint lpwidth lshow matrix msym ndpclex new open output outwidth plot plotsym pop prcsn print printdos proc push retp return rndcon rndmod rndmult rndseed run save saveall screen scroll setarray show sparse stop string struct system trace trap threadfor threadendfor threadbegin threadjoin threadstat threadend until use while winprint ne ge le gt lt and xor or not eq eqv",built_in:"abs acf aconcat aeye amax amean AmericanBinomCall AmericanBinomCall_Greeks AmericanBinomCall_ImpVol AmericanBinomPut AmericanBinomPut_Greeks AmericanBinomPut_ImpVol AmericanBSCall AmericanBSCall_Greeks AmericanBSCall_ImpVol AmericanBSPut AmericanBSPut_Greeks AmericanBSPut_ImpVol amin amult annotationGetDefaults annotationSetBkd annotationSetFont annotationSetLineColor annotationSetLineStyle annotationSetLineThickness annualTradingDays arccos arcsin areshape arrayalloc arrayindex arrayinit arraytomat asciiload asclabel astd astds asum atan atan2 atranspose axmargin balance band bandchol bandcholsol bandltsol bandrv bandsolpd bar base10 begwind besselj bessely beta box boxcox cdfBeta cdfBetaInv cdfBinomial cdfBinomialInv cdfBvn cdfBvn2 cdfBvn2e cdfCauchy cdfCauchyInv cdfChic cdfChii cdfChinc cdfChincInv cdfExp cdfExpInv cdfFc cdfFnc cdfFncInv cdfGam cdfGenPareto cdfHyperGeo cdfLaplace cdfLaplaceInv cdfLogistic cdfLogisticInv cdfmControlCreate cdfMvn cdfMvn2e cdfMvnce cdfMvne cdfMvt2e cdfMvtce cdfMvte cdfN cdfN2 cdfNc cdfNegBinomial cdfNegBinomialInv cdfNi cdfPoisson cdfPoissonInv cdfRayleigh cdfRayleighInv cdfTc cdfTci cdfTnc cdfTvn cdfWeibull cdfWeibullInv cdir ceil ChangeDir chdir chiBarSquare chol choldn cholsol cholup chrs close code cols colsf combinate combinated complex con cond conj cons ConScore contour conv convertsatostr convertstrtosa corrm corrms corrvc corrx corrxs cos cosh counts countwts crossprd crout croutp csrcol csrlin csvReadM csvReadSA cumprodc cumsumc curve cvtos datacreate datacreatecomplex datalist dataload dataloop dataopen datasave date datestr datestring datestrymd dayinyr dayofweek dbAddDatabase dbClose dbCommit dbCreateQuery dbExecQuery dbGetConnectOptions dbGetDatabaseName dbGetDriverName dbGetDrivers dbGetHostName dbGetLastErrorNum dbGetLastErrorText dbGetNumericalPrecPolicy dbGetPassword dbGetPort dbGetTableHeaders dbGetTables dbGetUserName dbHasFeature dbIsDriverAvailable dbIsOpen dbIsOpenError dbOpen dbQueryBindValue dbQueryClear dbQueryCols dbQueryExecPrepared dbQueryFetchAllM dbQueryFetchAllSA dbQueryFetchOneM dbQueryFetchOneSA dbQueryFinish dbQueryGetBoundValue dbQueryGetBoundValues dbQueryGetField dbQueryGetLastErrorNum dbQueryGetLastErrorText dbQueryGetLastInsertID dbQueryGetLastQuery dbQueryGetPosition dbQueryIsActive dbQueryIsForwardOnly dbQueryIsNull dbQueryIsSelect dbQueryIsValid dbQueryPrepare dbQueryRows dbQuerySeek dbQuerySeekFirst dbQuerySeekLast dbQuerySeekNext dbQuerySeekPrevious dbQuerySetForwardOnly dbRemoveDatabase dbRollback dbSetConnectOptions dbSetDatabaseName dbSetHostName dbSetNumericalPrecPolicy dbSetPort dbSetUserName dbTransaction DeleteFile delif delrows denseToSp denseToSpRE denToZero design det detl dfft dffti diag diagrv digamma doswin DOSWinCloseall DOSWinOpen dotfeq dotfeqmt dotfge dotfgemt dotfgt dotfgtmt dotfle dotflemt dotflt dotfltmt dotfne dotfnemt draw drop dsCreate dstat dstatmt dstatmtControlCreate dtdate dtday dttime dttodtv dttostr dttoutc dtvnormal dtvtodt dtvtoutc dummy dummybr dummydn eig eigh eighv eigv elapsedTradingDays endwind envget eof eqSolve eqSolvemt eqSolvemtControlCreate eqSolvemtOutCreate eqSolveset erf erfc erfccplx erfcplx error etdays ethsec etstr EuropeanBinomCall EuropeanBinomCall_Greeks EuropeanBinomCall_ImpVol EuropeanBinomPut EuropeanBinomPut_Greeks EuropeanBinomPut_ImpVol EuropeanBSCall EuropeanBSCall_Greeks EuropeanBSCall_ImpVol EuropeanBSPut EuropeanBSPut_Greeks EuropeanBSPut_ImpVol exctsmpl exec execbg exp extern eye fcheckerr fclearerr feq feqmt fflush fft ffti fftm fftmi fftn fge fgemt fgets fgetsa fgetsat fgetst fgt fgtmt fileinfo filesa fle flemt floor flt fltmt fmod fne fnemt fonts fopen formatcv formatnv fputs fputst fseek fstrerror ftell ftocv ftos ftostrC gamma gammacplx gammaii gausset gdaAppend gdaCreate gdaDStat gdaDStatMat gdaGetIndex gdaGetName gdaGetNames gdaGetOrders gdaGetType gdaGetTypes gdaGetVarInfo gdaIsCplx gdaLoad gdaPack gdaRead gdaReadByIndex gdaReadSome gdaReadSparse gdaReadStruct gdaReportVarInfo gdaSave gdaUpdate gdaUpdateAndPack gdaVars gdaWrite gdaWrite32 gdaWriteSome getarray getdims getf getGAUSShome getmatrix getmatrix4D getname getnamef getNextTradingDay getNextWeekDay getnr getorders getpath getPreviousTradingDay getPreviousWeekDay getRow getscalar3D getscalar4D getTrRow getwind glm gradcplx gradMT gradMTm gradMTT gradMTTm gradp graphprt graphset hasimag header headermt hess hessMT hessMTg hessMTgw hessMTm hessMTmw hessMTT hessMTTg hessMTTgw hessMTTm hessMTw hessp hist histf histp hsec imag indcv indexcat indices indices2 indicesf indicesfn indnv indsav integrate1d integrateControlCreate intgrat2 intgrat3 inthp1 inthp2 inthp3 inthp4 inthpControlCreate intquad1 intquad2 intquad3 intrleav intrleavsa intrsect intsimp inv invpd invswp iscplx iscplxf isden isinfnanmiss ismiss key keyav keyw lag lag1 lagn lapEighb lapEighi lapEighvb lapEighvi lapgEig lapgEigh lapgEighv lapgEigv lapgSchur lapgSvdcst lapgSvds lapgSvdst lapSvdcusv lapSvds lapSvdusv ldlp ldlsol linSolve listwise ln lncdfbvn lncdfbvn2 lncdfmvn lncdfn lncdfn2 lncdfnc lnfact lngammacplx lnpdfmvn lnpdfmvt lnpdfn lnpdft loadd loadstruct loadwind loess loessmt loessmtControlCreate log loglog logx logy lower lowmat lowmat1 ltrisol lu lusol machEpsilon make makevars makewind margin matalloc matinit mattoarray maxbytes maxc maxindc maxv maxvec mbesselei mbesselei0 mbesselei1 mbesseli mbesseli0 mbesseli1 meanc median mergeby mergevar minc minindc minv miss missex missrv moment momentd movingave movingaveExpwgt movingaveWgt nextindex nextn nextnevn nextwind ntos null null1 numCombinations ols olsmt olsmtControlCreate olsqr olsqr2 olsqrmt ones optn optnevn orth outtyp pacf packedToSp packr parse pause pdfCauchy pdfChi pdfExp pdfGenPareto pdfHyperGeo pdfLaplace pdfLogistic pdfn pdfPoisson pdfRayleigh pdfWeibull pi pinv pinvmt plotAddArrow plotAddBar plotAddBox plotAddHist plotAddHistF plotAddHistP plotAddPolar plotAddScatter plotAddShape plotAddTextbox plotAddTS plotAddXY plotArea plotBar plotBox plotClearLayout plotContour plotCustomLayout plotGetDefaults plotHist plotHistF plotHistP plotLayout plotLogLog plotLogX plotLogY plotOpenWindow plotPolar plotSave plotScatter plotSetAxesPen plotSetBar plotSetBarFill plotSetBarStacked plotSetBkdColor plotSetFill plotSetGrid plotSetLegend plotSetLineColor plotSetLineStyle plotSetLineSymbol plotSetLineThickness plotSetNewWindow plotSetTitle plotSetWhichYAxis plotSetXAxisShow plotSetXLabel plotSetXRange plotSetXTicInterval plotSetXTicLabel plotSetYAxisShow plotSetYLabel plotSetYRange plotSetZAxisShow plotSetZLabel plotSurface plotTS plotXY polar polychar polyeval polygamma polyint polymake polymat polymroot polymult polyroot pqgwin previousindex princomp printfm printfmt prodc psi putarray putf putvals pvCreate pvGetIndex pvGetParNames pvGetParVector pvLength pvList pvPack pvPacki pvPackm pvPackmi pvPacks pvPacksi pvPacksm pvPacksmi pvPutParVector pvTest pvUnpack QNewton QNewtonmt QNewtonmtControlCreate QNewtonmtOutCreate QNewtonSet QProg QProgmt QProgmtInCreate qqr qqre qqrep qr qre qrep qrsol qrtsol qtyr qtyre qtyrep quantile quantiled qyr qyre qyrep qz rank rankindx readr real reclassify reclassifyCuts recode recserar recsercp recserrc rerun rescale reshape rets rev rfft rffti rfftip rfftn rfftnp rfftp rndBernoulli rndBeta rndBinomial rndCauchy rndChiSquare rndCon rndCreateState rndExp rndGamma rndGeo rndGumbel rndHyperGeo rndi rndKMbeta rndKMgam rndKMi rndKMn rndKMnb rndKMp rndKMu rndKMvm rndLaplace rndLCbeta rndLCgam rndLCi rndLCn rndLCnb rndLCp rndLCu rndLCvm rndLogNorm rndMTu rndMVn rndMVt rndn rndnb rndNegBinomial rndp rndPoisson rndRayleigh rndStateSkip rndu rndvm rndWeibull rndWishart rotater round rows rowsf rref sampleData satostrC saved saveStruct savewind scale scale3d scalerr scalinfnanmiss scalmiss schtoc schur searchsourcepath seekr select selif seqa seqm setdif setdifsa setvars setvwrmode setwind shell shiftr sin singleindex sinh sleep solpd sortc sortcc sortd sorthc sorthcc sortind sortindc sortmc sortr sortrc spBiconjGradSol spChol spConjGradSol spCreate spDenseSubmat spDiagRvMat spEigv spEye spLDL spline spLU spNumNZE spOnes spreadSheetReadM spreadSheetReadSA spreadSheetWrite spScale spSubmat spToDense spTrTDense spTScalar spZeros sqpSolve sqpSolveMT sqpSolveMTControlCreate sqpSolveMTlagrangeCreate sqpSolveMToutCreate sqpSolveSet sqrt statements stdc stdsc stocv stof strcombine strindx strlen strput strrindx strsect strsplit strsplitPad strtodt strtof strtofcplx strtriml strtrimr strtrunc strtruncl strtruncpad strtruncr submat subscat substute subvec sumc sumr surface svd svd1 svd2 svdcusv svds svdusv sysstate tab tan tanh tempname time timedt timestr timeutc title tkf2eps tkf2ps tocart todaydt toeplitz token topolar trapchk trigamma trimr trunc type typecv typef union unionsa uniqindx uniqindxsa unique uniquesa upmat upmat1 upper utctodt utctodtv utrisol vals varCovMS varCovXS varget vargetl varmall varmares varput varputl vartypef vcm vcms vcx vcxs vec vech vecr vector vget view viewxyz vlist vnamecv volume vput vread vtypecv wait waitc walkindex where window writer xlabel xlsGetSheetCount xlsGetSheetSize xlsGetSheetTypes xlsMakeRange xlsReadM xlsReadSA xlsWrite xlsWriteM xlsWriteSA xpnd xtics xy xyz ylabel ytics zeros zeta zlabel ztics cdfEmpirical dot h5create h5open h5read h5readAttribute h5write h5writeAttribute ldl plotAddErrorBar plotAddSurface plotCDFEmpirical plotSetColormap plotSetContourLabels plotSetLegendFont plotSetTextInterpreter plotSetXTicCount plotSetYTicCount plotSetZLevels powerm strjoin sylvester strtrim",literal:"DB_AFTER_LAST_ROW DB_ALL_TABLES DB_BATCH_OPERATIONS DB_BEFORE_FIRST_ROW DB_BLOB DB_EVENT_NOTIFICATIONS DB_FINISH_QUERY DB_HIGH_PRECISION DB_LAST_INSERT_ID DB_LOW_PRECISION_DOUBLE DB_LOW_PRECISION_INT32 DB_LOW_PRECISION_INT64 DB_LOW_PRECISION_NUMBERS DB_MULTIPLE_RESULT_SETS DB_NAMED_PLACEHOLDERS DB_POSITIONAL_PLACEHOLDERS DB_PREPARED_QUERIES DB_QUERY_SIZE DB_SIMPLE_LOCKING DB_SYSTEM_TABLES DB_TABLES DB_TRANSACTIONS DB_UNICODE DB_VIEWS __STDIN __STDOUT __STDERR __FILE_DIR"},n=e.COMMENT("@","@"),r={className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"define definecs|10 undef ifdef ifndef iflight ifdllcall ifmac ifos2win ifunix else endif lineson linesoff srcfile srcline"},contains:[{begin:/\\\n/,relevance:0},{beginKeywords:"include",end:"$",keywords:{"meta-keyword":"include"},contains:[{className:"meta-string",begin:'"',end:'"',illegal:"\\n"}]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n]},i={begin:/\bstruct\s+/,end:/\s/,keywords:"struct",contains:[{className:"type",begin:e.UNDERSCORE_IDENT_RE,relevance:0}]},a=[{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,endsWithParent:!0,relevance:0,contains:[{className:"literal",begin:/\.\.\./},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,n,i]}],o={className:"title",begin:e.UNDERSCORE_IDENT_RE,relevance:0},s=function(t,r,i){var s=e.inherit({className:"function",beginKeywords:t,end:r,excludeEnd:!0,contains:[].concat(a)},i||{});return s.contains.push(o),s.contains.push(e.C_NUMBER_MODE),s.contains.push(e.C_BLOCK_COMMENT_MODE),s.contains.push(n),s},l={className:"built_in",begin:"\\b("+t.built_in.split(" ").join("|")+")\\b"},c={className:"string",begin:'"',end:'"',contains:[e.BACKSLASH_ESCAPE],relevance:0},u={begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,keywords:t,relevance:0,contains:[{beginKeywords:t.keyword},l,{className:"built_in",begin:e.UNDERSCORE_IDENT_RE,relevance:0}]},d={begin:/\(/,end:/\)/,relevance:0,keywords:{built_in:t.built_in,literal:t.literal},contains:[e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,n,l,u,c,"self"]};return u.contains.push(d),{name:"GAUSS",aliases:["gss"],case_insensitive:!0,keywords:t,illegal:/(\{[%#]|[%#]\}| <- )/,contains:[e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,c,r,{className:"keyword",begin:/\bexternal (matrix|string|array|sparse matrix|struct|proc|keyword|fn)/},s("proc keyword",";"),s("fn","="),{beginKeywords:"for threadfor",end:/;/,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE,n,d]},{variants:[{begin:e.UNDERSCORE_IDENT_RE+"\\."+e.UNDERSCORE_IDENT_RE},{begin:e.UNDERSCORE_IDENT_RE+"\\s*="}],relevance:0},u,i]}}},51233:function(e){"use strict";e.exports=function(e){var t={$pattern:"[A-Z_][A-Z0-9_.]*",keyword:"IF DO WHILE ENDWHILE CALL ENDIF SUB ENDSUB GOTO REPEAT ENDREPEAT EQ LT GT NE GE LE OR XOR"},n=e.inherit(e.C_NUMBER_MODE,{begin:"([-+]?((\\.\\d+)|(\\d+)(\\.\\d*)?))|"+e.C_NUMBER_RE}),r=[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.COMMENT(/\(/,/\)/),n,e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),{className:"name",begin:"([G])([0-9]+\\.?[0-9]?)"},{className:"name",begin:"([M])([0-9]+\\.?[0-9]?)"},{className:"attr",begin:"(VC|VS|#)",end:"(\\d+)"},{className:"attr",begin:"(VZOFX|VZOFY|VZOFZ)"},{className:"built_in",begin:"(ATAN|ABS|ACOS|ASIN|SIN|COS|EXP|FIX|FUP|ROUND|LN|TAN)(\\[)",contains:[n],end:"\\]"},{className:"symbol",variants:[{begin:"N",end:"\\d+",illegal:"\\W"}]}];return{name:"G-code (ISO 6983)",aliases:["nc"],case_insensitive:!0,keywords:t,contains:[{className:"meta",begin:"%"},{className:"meta",begin:"([O])([0-9]+)"}].concat(r)}}},22434:function(e){"use strict";e.exports=function(e){return{name:"Gherkin",aliases:["feature"],keywords:"Feature Background Ability Business Need Scenario Scenarios Scenario Outline Scenario Template Examples Given And Then But When",contains:[{className:"symbol",begin:"\\*",relevance:0},{className:"meta",begin:"@[^@\\s]+"},{begin:"\\|",end:"\\|\\w*$",contains:[{className:"string",begin:"[^|]+"}]},{className:"variable",begin:"<",end:">"},e.HASH_COMMENT_MODE,{className:"string",begin:'"""',end:'"""'},e.QUOTE_STRING_MODE]}}},29769:function(e){"use strict";e.exports=function(e){return{name:"GLSL",keywords:{keyword:"break continue discard do else for if return while switch case default attribute binding buffer ccw centroid centroid varying coherent column_major const cw depth_any depth_greater depth_less depth_unchanged early_fragment_tests equal_spacing flat fractional_even_spacing fractional_odd_spacing highp in index inout invariant invocations isolines layout line_strip lines lines_adjacency local_size_x local_size_y local_size_z location lowp max_vertices mediump noperspective offset origin_upper_left out packed patch pixel_center_integer point_mode points precise precision quads r11f_g11f_b10f r16 r16_snorm r16f r16i r16ui r32f r32i r32ui r8 r8_snorm r8i r8ui readonly restrict rg16 rg16_snorm rg16f rg16i rg16ui rg32f rg32i rg32ui rg8 rg8_snorm rg8i rg8ui rgb10_a2 rgb10_a2ui rgba16 rgba16_snorm rgba16f rgba16i rgba16ui rgba32f rgba32i rgba32ui rgba8 rgba8_snorm rgba8i rgba8ui row_major sample shared smooth std140 std430 stream triangle_strip triangles triangles_adjacency uniform varying vertices volatile writeonly",type:"atomic_uint bool bvec2 bvec3 bvec4 dmat2 dmat2x2 dmat2x3 dmat2x4 dmat3 dmat3x2 dmat3x3 dmat3x4 dmat4 dmat4x2 dmat4x3 dmat4x4 double dvec2 dvec3 dvec4 float iimage1D iimage1DArray iimage2D iimage2DArray iimage2DMS iimage2DMSArray iimage2DRect iimage3D iimageBuffer iimageCube iimageCubeArray image1D image1DArray image2D image2DArray image2DMS image2DMSArray image2DRect image3D imageBuffer imageCube imageCubeArray int isampler1D isampler1DArray isampler2D isampler2DArray isampler2DMS isampler2DMSArray isampler2DRect isampler3D isamplerBuffer isamplerCube isamplerCubeArray ivec2 ivec3 ivec4 mat2 mat2x2 mat2x3 mat2x4 mat3 mat3x2 mat3x3 mat3x4 mat4 mat4x2 mat4x3 mat4x4 sampler1D sampler1DArray sampler1DArrayShadow sampler1DShadow sampler2D sampler2DArray sampler2DArrayShadow sampler2DMS sampler2DMSArray sampler2DRect sampler2DRectShadow sampler2DShadow sampler3D samplerBuffer samplerCube samplerCubeArray samplerCubeArrayShadow samplerCubeShadow image1D uimage1DArray uimage2D uimage2DArray uimage2DMS uimage2DMSArray uimage2DRect uimage3D uimageBuffer uimageCube uimageCubeArray uint usampler1D usampler1DArray usampler2D usampler2DArray usampler2DMS usampler2DMSArray usampler2DRect usampler3D samplerBuffer usamplerCube usamplerCubeArray uvec2 uvec3 uvec4 vec2 vec3 vec4 void",built_in:"gl_MaxAtomicCounterBindings gl_MaxAtomicCounterBufferSize gl_MaxClipDistances gl_MaxClipPlanes gl_MaxCombinedAtomicCounterBuffers gl_MaxCombinedAtomicCounters gl_MaxCombinedImageUniforms gl_MaxCombinedImageUnitsAndFragmentOutputs gl_MaxCombinedTextureImageUnits gl_MaxComputeAtomicCounterBuffers gl_MaxComputeAtomicCounters gl_MaxComputeImageUniforms gl_MaxComputeTextureImageUnits gl_MaxComputeUniformComponents gl_MaxComputeWorkGroupCount gl_MaxComputeWorkGroupSize gl_MaxDrawBuffers gl_MaxFragmentAtomicCounterBuffers gl_MaxFragmentAtomicCounters gl_MaxFragmentImageUniforms gl_MaxFragmentInputComponents gl_MaxFragmentInputVectors gl_MaxFragmentUniformComponents gl_MaxFragmentUniformVectors gl_MaxGeometryAtomicCounterBuffers gl_MaxGeometryAtomicCounters gl_MaxGeometryImageUniforms gl_MaxGeometryInputComponents gl_MaxGeometryOutputComponents gl_MaxGeometryOutputVertices gl_MaxGeometryTextureImageUnits gl_MaxGeometryTotalOutputComponents gl_MaxGeometryUniformComponents gl_MaxGeometryVaryingComponents gl_MaxImageSamples gl_MaxImageUnits gl_MaxLights gl_MaxPatchVertices gl_MaxProgramTexelOffset gl_MaxTessControlAtomicCounterBuffers gl_MaxTessControlAtomicCounters gl_MaxTessControlImageUniforms gl_MaxTessControlInputComponents gl_MaxTessControlOutputComponents gl_MaxTessControlTextureImageUnits gl_MaxTessControlTotalOutputComponents gl_MaxTessControlUniformComponents gl_MaxTessEvaluationAtomicCounterBuffers gl_MaxTessEvaluationAtomicCounters gl_MaxTessEvaluationImageUniforms gl_MaxTessEvaluationInputComponents gl_MaxTessEvaluationOutputComponents gl_MaxTessEvaluationTextureImageUnits gl_MaxTessEvaluationUniformComponents gl_MaxTessGenLevel gl_MaxTessPatchComponents gl_MaxTextureCoords gl_MaxTextureImageUnits gl_MaxTextureUnits gl_MaxVaryingComponents gl_MaxVaryingFloats gl_MaxVaryingVectors gl_MaxVertexAtomicCounterBuffers gl_MaxVertexAtomicCounters gl_MaxVertexAttribs gl_MaxVertexImageUniforms gl_MaxVertexOutputComponents gl_MaxVertexOutputVectors gl_MaxVertexTextureImageUnits gl_MaxVertexUniformComponents gl_MaxVertexUniformVectors gl_MaxViewports gl_MinProgramTexelOffset gl_BackColor gl_BackLightModelProduct gl_BackLightProduct gl_BackMaterial gl_BackSecondaryColor gl_ClipDistance gl_ClipPlane gl_ClipVertex gl_Color gl_DepthRange gl_EyePlaneQ gl_EyePlaneR gl_EyePlaneS gl_EyePlaneT gl_Fog gl_FogCoord gl_FogFragCoord gl_FragColor gl_FragCoord gl_FragData gl_FragDepth gl_FrontColor gl_FrontFacing gl_FrontLightModelProduct gl_FrontLightProduct gl_FrontMaterial gl_FrontSecondaryColor gl_GlobalInvocationID gl_InstanceID gl_InvocationID gl_Layer gl_LightModel gl_LightSource gl_LocalInvocationID gl_LocalInvocationIndex gl_ModelViewMatrix gl_ModelViewMatrixInverse gl_ModelViewMatrixInverseTranspose gl_ModelViewMatrixTranspose gl_ModelViewProjectionMatrix gl_ModelViewProjectionMatrixInverse gl_ModelViewProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixTranspose gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_Normal gl_NormalMatrix gl_NormalScale gl_NumSamples gl_NumWorkGroups gl_ObjectPlaneQ gl_ObjectPlaneR gl_ObjectPlaneS gl_ObjectPlaneT gl_PatchVerticesIn gl_Point gl_PointCoord gl_PointSize gl_Position gl_PrimitiveID gl_PrimitiveIDIn gl_ProjectionMatrix gl_ProjectionMatrixInverse gl_ProjectionMatrixInverseTranspose gl_ProjectionMatrixTranspose gl_SampleID gl_SampleMask gl_SampleMaskIn gl_SamplePosition gl_SecondaryColor gl_TessCoord gl_TessLevelInner gl_TessLevelOuter gl_TexCoord gl_TextureEnvColor gl_TextureMatrix gl_TextureMatrixInverse gl_TextureMatrixInverseTranspose gl_TextureMatrixTranspose gl_Vertex gl_VertexID gl_ViewportIndex gl_WorkGroupID gl_WorkGroupSize gl_in gl_out EmitStreamVertex EmitVertex EndPrimitive EndStreamPrimitive abs acos acosh all any asin asinh atan atanh atomicAdd atomicAnd atomicCompSwap atomicCounter atomicCounterDecrement atomicCounterIncrement atomicExchange atomicMax atomicMin atomicOr atomicXor barrier bitCount bitfieldExtract bitfieldInsert bitfieldReverse ceil clamp cos cosh cross dFdx dFdy degrees determinant distance dot equal exp exp2 faceforward findLSB findMSB floatBitsToInt floatBitsToUint floor fma fract frexp ftransform fwidth greaterThan greaterThanEqual groupMemoryBarrier imageAtomicAdd imageAtomicAnd imageAtomicCompSwap imageAtomicExchange imageAtomicMax imageAtomicMin imageAtomicOr imageAtomicXor imageLoad imageSize imageStore imulExtended intBitsToFloat interpolateAtCentroid interpolateAtOffset interpolateAtSample inverse inversesqrt isinf isnan ldexp length lessThan lessThanEqual log log2 matrixCompMult max memoryBarrier memoryBarrierAtomicCounter memoryBarrierBuffer memoryBarrierImage memoryBarrierShared min mix mod modf noise1 noise2 noise3 noise4 normalize not notEqual outerProduct packDouble2x32 packHalf2x16 packSnorm2x16 packSnorm4x8 packUnorm2x16 packUnorm4x8 pow radians reflect refract round roundEven shadow1D shadow1DLod shadow1DProj shadow1DProjLod shadow2D shadow2DLod shadow2DProj shadow2DProjLod sign sin sinh smoothstep sqrt step tan tanh texelFetch texelFetchOffset texture texture1D texture1DLod texture1DProj texture1DProjLod texture2D texture2DLod texture2DProj texture2DProjLod texture3D texture3DLod texture3DProj texture3DProjLod textureCube textureCubeLod textureGather textureGatherOffset textureGatherOffsets textureGrad textureGradOffset textureLod textureLodOffset textureOffset textureProj textureProjGrad textureProjGradOffset textureProjLod textureProjLodOffset textureProjOffset textureQueryLevels textureQueryLod textureSize transpose trunc uaddCarry uintBitsToFloat umulExtended unpackDouble2x32 unpackHalf2x16 unpackSnorm2x16 unpackSnorm4x8 unpackUnorm2x16 unpackUnorm4x8 usubBorrow",literal:"true false"},illegal:'"',contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,{className:"meta",begin:"#",end:"$"}]}}},65971:function(e){"use strict";e.exports=function(e){return{name:"GML",case_insensitive:!1,keywords:{keyword:"begin end if then else while do for break continue with until repeat exit and or xor not return mod div switch case default var globalvar enum function constructor delete #macro #region #endregion",built_in:"is_real is_string is_array is_undefined is_int32 is_int64 is_ptr is_vec3 is_vec4 is_matrix is_bool is_method is_struct is_infinity is_nan is_numeric typeof variable_global_exists variable_global_get variable_global_set variable_instance_exists variable_instance_get variable_instance_set variable_instance_get_names variable_struct_exists variable_struct_get variable_struct_get_names variable_struct_names_count variable_struct_remove variable_struct_set array_delete array_insert array_length array_length_1d array_length_2d array_height_2d array_equals array_create array_copy array_pop array_push array_resize array_sort random random_range irandom irandom_range random_set_seed random_get_seed randomize randomise choose abs round floor ceil sign frac sqrt sqr exp ln log2 log10 sin cos tan arcsin arccos arctan arctan2 dsin dcos dtan darcsin darccos darctan darctan2 degtorad radtodeg power logn min max mean median clamp lerp dot_product dot_product_3d dot_product_normalised dot_product_3d_normalised dot_product_normalized dot_product_3d_normalized math_set_epsilon math_get_epsilon angle_difference point_distance_3d point_distance point_direction lengthdir_x lengthdir_y real string int64 ptr string_format chr ansi_char ord string_length string_byte_length string_pos string_copy string_char_at string_ord_at string_byte_at string_set_byte_at string_delete string_insert string_lower string_upper string_repeat string_letters string_digits string_lettersdigits string_replace string_replace_all string_count string_hash_to_newline clipboard_has_text clipboard_set_text clipboard_get_text date_current_datetime date_create_datetime date_valid_datetime date_inc_year date_inc_month date_inc_week date_inc_day date_inc_hour date_inc_minute date_inc_second date_get_year date_get_month date_get_week date_get_day date_get_hour date_get_minute date_get_second date_get_weekday date_get_day_of_year date_get_hour_of_year date_get_minute_of_year date_get_second_of_year date_year_span date_month_span date_week_span date_day_span date_hour_span date_minute_span date_second_span date_compare_datetime date_compare_date date_compare_time date_date_of date_time_of date_datetime_string date_date_string date_time_string date_days_in_month date_days_in_year date_leap_year date_is_today date_set_timezone date_get_timezone game_set_speed game_get_speed motion_set motion_add place_free place_empty place_meeting place_snapped move_random move_snap move_towards_point move_contact_solid move_contact_all move_outside_solid move_outside_all move_bounce_solid move_bounce_all move_wrap distance_to_point distance_to_object position_empty position_meeting path_start path_end mp_linear_step mp_potential_step mp_linear_step_object mp_potential_step_object mp_potential_settings mp_linear_path mp_potential_path mp_linear_path_object mp_potential_path_object mp_grid_create mp_grid_destroy mp_grid_clear_all mp_grid_clear_cell mp_grid_clear_rectangle mp_grid_add_cell mp_grid_get_cell mp_grid_add_rectangle mp_grid_add_instances mp_grid_path mp_grid_draw mp_grid_to_ds_grid collision_point collision_rectangle collision_circle collision_ellipse collision_line collision_point_list collision_rectangle_list collision_circle_list collision_ellipse_list collision_line_list instance_position_list instance_place_list point_in_rectangle point_in_triangle point_in_circle rectangle_in_rectangle rectangle_in_triangle rectangle_in_circle instance_find instance_exists instance_number instance_position instance_nearest instance_furthest instance_place instance_create_depth instance_create_layer instance_copy instance_change instance_destroy position_destroy position_change instance_id_get instance_deactivate_all instance_deactivate_object instance_deactivate_region instance_activate_all instance_activate_object instance_activate_region room_goto room_goto_previous room_goto_next room_previous room_next room_restart game_end game_restart game_load game_save game_save_buffer game_load_buffer event_perform event_user event_perform_object event_inherited show_debug_message show_debug_overlay debug_event debug_get_callstack alarm_get alarm_set font_texture_page_size keyboard_set_map keyboard_get_map keyboard_unset_map keyboard_check keyboard_check_pressed keyboard_check_released keyboard_check_direct keyboard_get_numlock keyboard_set_numlock keyboard_key_press keyboard_key_release keyboard_clear io_clear mouse_check_button mouse_check_button_pressed mouse_check_button_released mouse_wheel_up mouse_wheel_down mouse_clear draw_self draw_sprite draw_sprite_pos draw_sprite_ext draw_sprite_stretched draw_sprite_stretched_ext draw_sprite_tiled draw_sprite_tiled_ext draw_sprite_part draw_sprite_part_ext draw_sprite_general draw_clear draw_clear_alpha draw_point draw_line draw_line_width draw_rectangle draw_roundrect draw_roundrect_ext draw_triangle draw_circle draw_ellipse draw_set_circle_precision draw_arrow draw_button draw_path draw_healthbar draw_getpixel draw_getpixel_ext draw_set_colour draw_set_color draw_set_alpha draw_get_colour draw_get_color draw_get_alpha merge_colour make_colour_rgb make_colour_hsv colour_get_red colour_get_green colour_get_blue colour_get_hue colour_get_saturation colour_get_value merge_color make_color_rgb make_color_hsv color_get_red color_get_green color_get_blue color_get_hue color_get_saturation color_get_value merge_color screen_save screen_save_part draw_set_font draw_set_halign draw_set_valign draw_text draw_text_ext string_width string_height string_width_ext string_height_ext draw_text_transformed draw_text_ext_transformed draw_text_colour draw_text_ext_colour draw_text_transformed_colour draw_text_ext_transformed_colour draw_text_color draw_text_ext_color draw_text_transformed_color draw_text_ext_transformed_color draw_point_colour draw_line_colour draw_line_width_colour draw_rectangle_colour draw_roundrect_colour draw_roundrect_colour_ext draw_triangle_colour draw_circle_colour draw_ellipse_colour draw_point_color draw_line_color draw_line_width_color draw_rectangle_color draw_roundrect_color draw_roundrect_color_ext draw_triangle_color draw_circle_color draw_ellipse_color draw_primitive_begin draw_vertex draw_vertex_colour draw_vertex_color draw_primitive_end sprite_get_uvs font_get_uvs sprite_get_texture font_get_texture texture_get_width texture_get_height texture_get_uvs draw_primitive_begin_texture draw_vertex_texture draw_vertex_texture_colour draw_vertex_texture_color texture_global_scale surface_create surface_create_ext surface_resize surface_free surface_exists surface_get_width surface_get_height surface_get_texture surface_set_target surface_set_target_ext surface_reset_target surface_depth_disable surface_get_depth_disable draw_surface draw_surface_stretched draw_surface_tiled draw_surface_part draw_surface_ext draw_surface_stretched_ext draw_surface_tiled_ext draw_surface_part_ext draw_surface_general surface_getpixel surface_getpixel_ext surface_save surface_save_part surface_copy surface_copy_part application_surface_draw_enable application_get_position application_surface_enable application_surface_is_enabled display_get_width display_get_height display_get_orientation display_get_gui_width display_get_gui_height display_reset display_mouse_get_x display_mouse_get_y display_mouse_set display_set_ui_visibility window_set_fullscreen window_get_fullscreen window_set_caption window_set_min_width window_set_max_width window_set_min_height window_set_max_height window_get_visible_rects window_get_caption window_set_cursor window_get_cursor window_set_colour window_get_colour window_set_color window_get_color window_set_position window_set_size window_set_rectangle window_center window_get_x window_get_y window_get_width window_get_height window_mouse_get_x window_mouse_get_y window_mouse_set window_view_mouse_get_x window_view_mouse_get_y window_views_mouse_get_x window_views_mouse_get_y audio_listener_position audio_listener_velocity audio_listener_orientation audio_emitter_position audio_emitter_create audio_emitter_free audio_emitter_exists audio_emitter_pitch audio_emitter_velocity audio_emitter_falloff audio_emitter_gain audio_play_sound audio_play_sound_on audio_play_sound_at audio_stop_sound audio_resume_music audio_music_is_playing audio_resume_sound audio_pause_sound audio_pause_music audio_channel_num audio_sound_length audio_get_type audio_falloff_set_model audio_play_music audio_stop_music audio_master_gain audio_music_gain audio_sound_gain audio_sound_pitch audio_stop_all audio_resume_all audio_pause_all audio_is_playing audio_is_paused audio_exists audio_sound_set_track_position audio_sound_get_track_position audio_emitter_get_gain audio_emitter_get_pitch audio_emitter_get_x audio_emitter_get_y audio_emitter_get_z audio_emitter_get_vx audio_emitter_get_vy audio_emitter_get_vz audio_listener_set_position audio_listener_set_velocity audio_listener_set_orientation audio_listener_get_data audio_set_master_gain audio_get_master_gain audio_sound_get_gain audio_sound_get_pitch audio_get_name audio_sound_set_track_position audio_sound_get_track_position audio_create_stream audio_destroy_stream audio_create_sync_group audio_destroy_sync_group audio_play_in_sync_group audio_start_sync_group audio_stop_sync_group audio_pause_sync_group audio_resume_sync_group audio_sync_group_get_track_pos audio_sync_group_debug audio_sync_group_is_playing audio_debug audio_group_load audio_group_unload audio_group_is_loaded audio_group_load_progress audio_group_name audio_group_stop_all audio_group_set_gain audio_create_buffer_sound audio_free_buffer_sound audio_create_play_queue audio_free_play_queue audio_queue_sound audio_get_recorder_count audio_get_recorder_info audio_start_recording audio_stop_recording audio_sound_get_listener_mask audio_emitter_get_listener_mask audio_get_listener_mask audio_sound_set_listener_mask audio_emitter_set_listener_mask audio_set_listener_mask audio_get_listener_count audio_get_listener_info audio_system show_message show_message_async clickable_add clickable_add_ext clickable_change clickable_change_ext clickable_delete clickable_exists clickable_set_style show_question show_question_async get_integer get_string get_integer_async get_string_async get_login_async get_open_filename get_save_filename get_open_filename_ext get_save_filename_ext show_error highscore_clear highscore_add highscore_value highscore_name draw_highscore sprite_exists sprite_get_name sprite_get_number sprite_get_width sprite_get_height sprite_get_xoffset sprite_get_yoffset sprite_get_bbox_left sprite_get_bbox_right sprite_get_bbox_top sprite_get_bbox_bottom sprite_save sprite_save_strip sprite_set_cache_size sprite_set_cache_size_ext sprite_get_tpe sprite_prefetch sprite_prefetch_multi sprite_flush sprite_flush_multi sprite_set_speed sprite_get_speed_type sprite_get_speed font_exists font_get_name font_get_fontname font_get_bold font_get_italic font_get_first font_get_last font_get_size font_set_cache_size path_exists path_get_name path_get_length path_get_time path_get_kind path_get_closed path_get_precision path_get_number path_get_point_x path_get_point_y path_get_point_speed path_get_x path_get_y path_get_speed script_exists script_get_name timeline_add timeline_delete timeline_clear timeline_exists timeline_get_name timeline_moment_clear timeline_moment_add_script timeline_size timeline_max_moment object_exists object_get_name object_get_sprite object_get_solid object_get_visible object_get_persistent object_get_mask object_get_parent object_get_physics object_is_ancestor room_exists room_get_name sprite_set_offset sprite_duplicate sprite_assign sprite_merge sprite_add sprite_replace sprite_create_from_surface sprite_add_from_surface sprite_delete sprite_set_alpha_from_sprite sprite_collision_mask font_add_enable_aa font_add_get_enable_aa font_add font_add_sprite font_add_sprite_ext font_replace font_replace_sprite font_replace_sprite_ext font_delete path_set_kind path_set_closed path_set_precision path_add path_assign path_duplicate path_append path_delete path_add_point path_insert_point path_change_point path_delete_point path_clear_points path_reverse path_mirror path_flip path_rotate path_rescale path_shift script_execute object_set_sprite object_set_solid object_set_visible object_set_persistent object_set_mask room_set_width room_set_height room_set_persistent room_set_background_colour room_set_background_color room_set_view room_set_viewport room_get_viewport room_set_view_enabled room_add room_duplicate room_assign room_instance_add room_instance_clear room_get_camera room_set_camera asset_get_index asset_get_type file_text_open_from_string file_text_open_read file_text_open_write file_text_open_append file_text_close file_text_write_string file_text_write_real file_text_writeln file_text_read_string file_text_read_real file_text_readln file_text_eof file_text_eoln file_exists file_delete file_rename file_copy directory_exists directory_create directory_destroy file_find_first file_find_next file_find_close file_attributes filename_name filename_path filename_dir filename_drive filename_ext filename_change_ext file_bin_open file_bin_rewrite file_bin_close file_bin_position file_bin_size file_bin_seek file_bin_write_byte file_bin_read_byte parameter_count parameter_string environment_get_variable ini_open_from_string ini_open ini_close ini_read_string ini_read_real ini_write_string ini_write_real ini_key_exists ini_section_exists ini_key_delete ini_section_delete ds_set_precision ds_exists ds_stack_create ds_stack_destroy ds_stack_clear ds_stack_copy ds_stack_size ds_stack_empty ds_stack_push ds_stack_pop ds_stack_top ds_stack_write ds_stack_read ds_queue_create ds_queue_destroy ds_queue_clear ds_queue_copy ds_queue_size ds_queue_empty ds_queue_enqueue ds_queue_dequeue ds_queue_head ds_queue_tail ds_queue_write ds_queue_read ds_list_create ds_list_destroy ds_list_clear ds_list_copy ds_list_size ds_list_empty ds_list_add ds_list_insert ds_list_replace ds_list_delete ds_list_find_index ds_list_find_value ds_list_mark_as_list ds_list_mark_as_map ds_list_sort ds_list_shuffle ds_list_write ds_list_read ds_list_set ds_map_create ds_map_destroy ds_map_clear ds_map_copy ds_map_size ds_map_empty ds_map_add ds_map_add_list ds_map_add_map ds_map_replace ds_map_replace_map ds_map_replace_list ds_map_delete ds_map_exists ds_map_find_value ds_map_find_previous ds_map_find_next ds_map_find_first ds_map_find_last ds_map_write ds_map_read ds_map_secure_save ds_map_secure_load ds_map_secure_load_buffer ds_map_secure_save_buffer ds_map_set ds_priority_create ds_priority_destroy ds_priority_clear ds_priority_copy ds_priority_size ds_priority_empty ds_priority_add ds_priority_change_priority ds_priority_find_priority ds_priority_delete_value ds_priority_delete_min ds_priority_find_min ds_priority_delete_max ds_priority_find_max ds_priority_write ds_priority_read ds_grid_create ds_grid_destroy ds_grid_copy ds_grid_resize ds_grid_width ds_grid_height ds_grid_clear ds_grid_set ds_grid_add ds_grid_multiply ds_grid_set_region ds_grid_add_region ds_grid_multiply_region ds_grid_set_disk ds_grid_add_disk ds_grid_multiply_disk ds_grid_set_grid_region ds_grid_add_grid_region ds_grid_multiply_grid_region ds_grid_get ds_grid_get_sum ds_grid_get_max ds_grid_get_min ds_grid_get_mean ds_grid_get_disk_sum ds_grid_get_disk_min ds_grid_get_disk_max ds_grid_get_disk_mean ds_grid_value_exists ds_grid_value_x ds_grid_value_y ds_grid_value_disk_exists ds_grid_value_disk_x ds_grid_value_disk_y ds_grid_shuffle ds_grid_write ds_grid_read ds_grid_sort ds_grid_set ds_grid_get effect_create_below effect_create_above effect_clear part_type_create part_type_destroy part_type_exists part_type_clear part_type_shape part_type_sprite part_type_size part_type_scale part_type_orientation part_type_life part_type_step part_type_death part_type_speed part_type_direction part_type_gravity part_type_colour1 part_type_colour2 part_type_colour3 part_type_colour_mix part_type_colour_rgb part_type_colour_hsv part_type_color1 part_type_color2 part_type_color3 part_type_color_mix part_type_color_rgb part_type_color_hsv part_type_alpha1 part_type_alpha2 part_type_alpha3 part_type_blend part_system_create part_system_create_layer part_system_destroy part_system_exists part_system_clear part_system_draw_order part_system_depth part_system_position part_system_automatic_update part_system_automatic_draw part_system_update part_system_drawit part_system_get_layer part_system_layer part_particles_create part_particles_create_colour part_particles_create_color part_particles_clear part_particles_count part_emitter_create part_emitter_destroy part_emitter_destroy_all part_emitter_exists part_emitter_clear part_emitter_region part_emitter_burst part_emitter_stream external_call external_define external_free window_handle window_device matrix_get matrix_set matrix_build_identity matrix_build matrix_build_lookat matrix_build_projection_ortho matrix_build_projection_perspective matrix_build_projection_perspective_fov matrix_multiply matrix_transform_vertex matrix_stack_push matrix_stack_pop matrix_stack_multiply matrix_stack_set matrix_stack_clear matrix_stack_top matrix_stack_is_empty browser_input_capture os_get_config os_get_info os_get_language os_get_region os_lock_orientation display_get_dpi_x display_get_dpi_y display_set_gui_size display_set_gui_maximise display_set_gui_maximize device_mouse_dbclick_enable display_set_timing_method display_get_timing_method display_set_sleep_margin display_get_sleep_margin virtual_key_add virtual_key_hide virtual_key_delete virtual_key_show draw_enable_drawevent draw_enable_swf_aa draw_set_swf_aa_level draw_get_swf_aa_level draw_texture_flush draw_flush gpu_set_blendenable gpu_set_ztestenable gpu_set_zfunc gpu_set_zwriteenable gpu_set_lightingenable gpu_set_fog gpu_set_cullmode gpu_set_blendmode gpu_set_blendmode_ext gpu_set_blendmode_ext_sepalpha gpu_set_colorwriteenable gpu_set_colourwriteenable gpu_set_alphatestenable gpu_set_alphatestref gpu_set_alphatestfunc gpu_set_texfilter gpu_set_texfilter_ext gpu_set_texrepeat gpu_set_texrepeat_ext gpu_set_tex_filter gpu_set_tex_filter_ext gpu_set_tex_repeat gpu_set_tex_repeat_ext gpu_set_tex_mip_filter gpu_set_tex_mip_filter_ext gpu_set_tex_mip_bias gpu_set_tex_mip_bias_ext gpu_set_tex_min_mip gpu_set_tex_min_mip_ext gpu_set_tex_max_mip gpu_set_tex_max_mip_ext gpu_set_tex_max_aniso gpu_set_tex_max_aniso_ext gpu_set_tex_mip_enable gpu_set_tex_mip_enable_ext gpu_get_blendenable gpu_get_ztestenable gpu_get_zfunc gpu_get_zwriteenable gpu_get_lightingenable gpu_get_fog gpu_get_cullmode gpu_get_blendmode gpu_get_blendmode_ext gpu_get_blendmode_ext_sepalpha gpu_get_blendmode_src gpu_get_blendmode_dest gpu_get_blendmode_srcalpha gpu_get_blendmode_destalpha gpu_get_colorwriteenable gpu_get_colourwriteenable gpu_get_alphatestenable gpu_get_alphatestref gpu_get_alphatestfunc gpu_get_texfilter gpu_get_texfilter_ext gpu_get_texrepeat gpu_get_texrepeat_ext gpu_get_tex_filter gpu_get_tex_filter_ext gpu_get_tex_repeat gpu_get_tex_repeat_ext gpu_get_tex_mip_filter gpu_get_tex_mip_filter_ext gpu_get_tex_mip_bias gpu_get_tex_mip_bias_ext gpu_get_tex_min_mip gpu_get_tex_min_mip_ext gpu_get_tex_max_mip gpu_get_tex_max_mip_ext gpu_get_tex_max_aniso gpu_get_tex_max_aniso_ext gpu_get_tex_mip_enable gpu_get_tex_mip_enable_ext gpu_push_state gpu_pop_state gpu_get_state gpu_set_state draw_light_define_ambient draw_light_define_direction draw_light_define_point draw_light_enable draw_set_lighting draw_light_get_ambient draw_light_get draw_get_lighting shop_leave_rating url_get_domain url_open url_open_ext url_open_full get_timer achievement_login achievement_logout achievement_post achievement_increment achievement_post_score achievement_available achievement_show_achievements achievement_show_leaderboards achievement_load_friends achievement_load_leaderboard achievement_send_challenge achievement_load_progress achievement_reset achievement_login_status achievement_get_pic achievement_show_challenge_notifications achievement_get_challenges achievement_event achievement_show achievement_get_info cloud_file_save cloud_string_save cloud_synchronise ads_enable ads_disable ads_setup ads_engagement_launch ads_engagement_available ads_engagement_active ads_event ads_event_preload ads_set_reward_callback ads_get_display_height ads_get_display_width ads_move ads_interstitial_available ads_interstitial_display device_get_tilt_x device_get_tilt_y device_get_tilt_z device_is_keypad_open device_mouse_check_button device_mouse_check_button_pressed device_mouse_check_button_released device_mouse_x device_mouse_y device_mouse_raw_x device_mouse_raw_y device_mouse_x_to_gui device_mouse_y_to_gui iap_activate iap_status iap_enumerate_products iap_restore_all iap_acquire iap_consume iap_product_details iap_purchase_details facebook_init facebook_login facebook_status facebook_graph_request facebook_dialog facebook_logout facebook_launch_offerwall facebook_post_message facebook_send_invite facebook_user_id facebook_accesstoken facebook_check_permission facebook_request_read_permissions facebook_request_publish_permissions gamepad_is_supported gamepad_get_device_count gamepad_is_connected gamepad_get_description gamepad_get_button_threshold gamepad_set_button_threshold gamepad_get_axis_deadzone gamepad_set_axis_deadzone gamepad_button_count gamepad_button_check gamepad_button_check_pressed gamepad_button_check_released gamepad_button_value gamepad_axis_count gamepad_axis_value gamepad_set_vibration gamepad_set_colour gamepad_set_color os_is_paused window_has_focus code_is_compiled http_get http_get_file http_post_string http_request json_encode json_decode zip_unzip load_csv base64_encode base64_decode md5_string_unicode md5_string_utf8 md5_file os_is_network_connected sha1_string_unicode sha1_string_utf8 sha1_file os_powersave_enable analytics_event analytics_event_ext win8_livetile_tile_notification win8_livetile_tile_clear win8_livetile_badge_notification win8_livetile_badge_clear win8_livetile_queue_enable win8_secondarytile_pin win8_secondarytile_badge_notification win8_secondarytile_delete win8_livetile_notification_begin win8_livetile_notification_secondary_begin win8_livetile_notification_expiry win8_livetile_notification_tag win8_livetile_notification_text_add win8_livetile_notification_image_add win8_livetile_notification_end win8_appbar_enable win8_appbar_add_element win8_appbar_remove_element win8_settingscharm_add_entry win8_settingscharm_add_html_entry win8_settingscharm_add_xaml_entry win8_settingscharm_set_xaml_property win8_settingscharm_get_xaml_property win8_settingscharm_remove_entry win8_share_image win8_share_screenshot win8_share_file win8_share_url win8_share_text win8_search_enable win8_search_disable win8_search_add_suggestions win8_device_touchscreen_available win8_license_initialize_sandbox win8_license_trial_version winphone_license_trial_version winphone_tile_title winphone_tile_count winphone_tile_back_title winphone_tile_back_content winphone_tile_back_content_wide winphone_tile_front_image winphone_tile_front_image_small winphone_tile_front_image_wide winphone_tile_back_image winphone_tile_back_image_wide winphone_tile_background_colour winphone_tile_background_color winphone_tile_icon_image winphone_tile_small_icon_image winphone_tile_wide_content winphone_tile_cycle_images winphone_tile_small_background_image physics_world_create physics_world_gravity physics_world_update_speed physics_world_update_iterations physics_world_draw_debug physics_pause_enable physics_fixture_create physics_fixture_set_kinematic physics_fixture_set_density physics_fixture_set_awake physics_fixture_set_restitution physics_fixture_set_friction physics_fixture_set_collision_group physics_fixture_set_sensor physics_fixture_set_linear_damping physics_fixture_set_angular_damping physics_fixture_set_circle_shape physics_fixture_set_box_shape physics_fixture_set_edge_shape physics_fixture_set_polygon_shape physics_fixture_set_chain_shape physics_fixture_add_point physics_fixture_bind physics_fixture_bind_ext physics_fixture_delete physics_apply_force physics_apply_impulse physics_apply_angular_impulse physics_apply_local_force physics_apply_local_impulse physics_apply_torque physics_mass_properties physics_draw_debug physics_test_overlap physics_remove_fixture physics_set_friction physics_set_density physics_set_restitution physics_get_friction physics_get_density physics_get_restitution physics_joint_distance_create physics_joint_rope_create physics_joint_revolute_create physics_joint_prismatic_create physics_joint_pulley_create physics_joint_wheel_create physics_joint_weld_create physics_joint_friction_create physics_joint_gear_create physics_joint_enable_motor physics_joint_get_value physics_joint_set_value physics_joint_delete physics_particle_create physics_particle_delete physics_particle_delete_region_circle physics_particle_delete_region_box physics_particle_delete_region_poly physics_particle_set_flags physics_particle_set_category_flags physics_particle_draw physics_particle_draw_ext physics_particle_count physics_particle_get_data physics_particle_get_data_particle physics_particle_group_begin physics_particle_group_circle physics_particle_group_box physics_particle_group_polygon physics_particle_group_add_point physics_particle_group_end physics_particle_group_join physics_particle_group_delete physics_particle_group_count physics_particle_group_get_data physics_particle_group_get_mass physics_particle_group_get_inertia physics_particle_group_get_centre_x physics_particle_group_get_centre_y physics_particle_group_get_vel_x physics_particle_group_get_vel_y physics_particle_group_get_ang_vel physics_particle_group_get_x physics_particle_group_get_y physics_particle_group_get_angle physics_particle_set_group_flags physics_particle_get_group_flags physics_particle_get_max_count physics_particle_get_radius physics_particle_get_density physics_particle_get_damping physics_particle_get_gravity_scale physics_particle_set_max_count physics_particle_set_radius physics_particle_set_density physics_particle_set_damping physics_particle_set_gravity_scale network_create_socket network_create_socket_ext network_create_server network_create_server_raw network_connect network_connect_raw network_send_packet network_send_raw network_send_broadcast network_send_udp network_send_udp_raw network_set_timeout network_set_config network_resolve network_destroy buffer_create buffer_write buffer_read buffer_seek buffer_get_surface buffer_set_surface buffer_delete buffer_exists buffer_get_type buffer_get_alignment buffer_poke buffer_peek buffer_save buffer_save_ext buffer_load buffer_load_ext buffer_load_partial buffer_copy buffer_fill buffer_get_size buffer_tell buffer_resize buffer_md5 buffer_sha1 buffer_base64_encode buffer_base64_decode buffer_base64_decode_ext buffer_sizeof buffer_get_address buffer_create_from_vertex_buffer buffer_create_from_vertex_buffer_ext buffer_copy_from_vertex_buffer buffer_async_group_begin buffer_async_group_option buffer_async_group_end buffer_load_async buffer_save_async gml_release_mode gml_pragma steam_activate_overlay steam_is_overlay_enabled steam_is_overlay_activated steam_get_persona_name steam_initialised steam_is_cloud_enabled_for_app steam_is_cloud_enabled_for_account steam_file_persisted steam_get_quota_total steam_get_quota_free steam_file_write steam_file_write_file steam_file_read steam_file_delete steam_file_exists steam_file_size steam_file_share steam_is_screenshot_requested steam_send_screenshot steam_is_user_logged_on steam_get_user_steam_id steam_user_owns_dlc steam_user_installed_dlc steam_set_achievement steam_get_achievement steam_clear_achievement steam_set_stat_int steam_set_stat_float steam_set_stat_avg_rate steam_get_stat_int steam_get_stat_float steam_get_stat_avg_rate steam_reset_all_stats steam_reset_all_stats_achievements steam_stats_ready steam_create_leaderboard steam_upload_score steam_upload_score_ext steam_download_scores_around_user steam_download_scores steam_download_friends_scores steam_upload_score_buffer steam_upload_score_buffer_ext steam_current_game_language steam_available_languages steam_activate_overlay_browser steam_activate_overlay_user steam_activate_overlay_store steam_get_user_persona_name steam_get_app_id steam_get_user_account_id steam_ugc_download steam_ugc_create_item steam_ugc_start_item_update steam_ugc_set_item_title steam_ugc_set_item_description steam_ugc_set_item_visibility steam_ugc_set_item_tags steam_ugc_set_item_content steam_ugc_set_item_preview steam_ugc_submit_item_update steam_ugc_get_item_update_progress steam_ugc_subscribe_item steam_ugc_unsubscribe_item steam_ugc_num_subscribed_items steam_ugc_get_subscribed_items steam_ugc_get_item_install_info steam_ugc_get_item_update_info steam_ugc_request_item_details steam_ugc_create_query_user steam_ugc_create_query_user_ex steam_ugc_create_query_all steam_ugc_create_query_all_ex steam_ugc_query_set_cloud_filename_filter steam_ugc_query_set_match_any_tag steam_ugc_query_set_search_text steam_ugc_query_set_ranked_by_trend_days steam_ugc_query_add_required_tag steam_ugc_query_add_excluded_tag steam_ugc_query_set_return_long_description steam_ugc_query_set_return_total_only steam_ugc_query_set_allow_cached_response steam_ugc_send_query shader_set shader_get_name shader_reset shader_current shader_is_compiled shader_get_sampler_index shader_get_uniform shader_set_uniform_i shader_set_uniform_i_array shader_set_uniform_f shader_set_uniform_f_array shader_set_uniform_matrix shader_set_uniform_matrix_array shader_enable_corner_id texture_set_stage texture_get_texel_width texture_get_texel_height shaders_are_supported vertex_format_begin vertex_format_end vertex_format_delete vertex_format_add_position vertex_format_add_position_3d vertex_format_add_colour vertex_format_add_color vertex_format_add_normal vertex_format_add_texcoord vertex_format_add_textcoord vertex_format_add_custom vertex_create_buffer vertex_create_buffer_ext vertex_delete_buffer vertex_begin vertex_end vertex_position vertex_position_3d vertex_colour vertex_color vertex_argb vertex_texcoord vertex_normal vertex_float1 vertex_float2 vertex_float3 vertex_float4 vertex_ubyte4 vertex_submit vertex_freeze vertex_get_number vertex_get_buffer_size vertex_create_buffer_from_buffer vertex_create_buffer_from_buffer_ext push_local_notification push_get_first_local_notification push_get_next_local_notification push_cancel_local_notification skeleton_animation_set skeleton_animation_get skeleton_animation_mix skeleton_animation_set_ext skeleton_animation_get_ext skeleton_animation_get_duration skeleton_animation_get_frames skeleton_animation_clear skeleton_skin_set skeleton_skin_get skeleton_attachment_set skeleton_attachment_get skeleton_attachment_create skeleton_collision_draw_set skeleton_bone_data_get skeleton_bone_data_set skeleton_bone_state_get skeleton_bone_state_set skeleton_get_minmax skeleton_get_num_bounds skeleton_get_bounds skeleton_animation_get_frame skeleton_animation_set_frame draw_skeleton draw_skeleton_time draw_skeleton_instance draw_skeleton_collision skeleton_animation_list skeleton_skin_list skeleton_slot_data layer_get_id layer_get_id_at_depth layer_get_depth layer_create layer_destroy layer_destroy_instances layer_add_instance layer_has_instance layer_set_visible layer_get_visible layer_exists layer_x layer_y layer_get_x layer_get_y layer_hspeed layer_vspeed layer_get_hspeed layer_get_vspeed layer_script_begin layer_script_end layer_shader layer_get_script_begin layer_get_script_end layer_get_shader layer_set_target_room layer_get_target_room layer_reset_target_room layer_get_all layer_get_all_elements layer_get_name layer_depth layer_get_element_layer layer_get_element_type layer_element_move layer_force_draw_depth layer_is_draw_depth_forced layer_get_forced_depth layer_background_get_id layer_background_exists layer_background_create layer_background_destroy layer_background_visible layer_background_change layer_background_sprite layer_background_htiled layer_background_vtiled layer_background_stretch layer_background_yscale layer_background_xscale layer_background_blend layer_background_alpha layer_background_index layer_background_speed layer_background_get_visible layer_background_get_sprite layer_background_get_htiled layer_background_get_vtiled layer_background_get_stretch layer_background_get_yscale layer_background_get_xscale layer_background_get_blend layer_background_get_alpha layer_background_get_index layer_background_get_speed layer_sprite_get_id layer_sprite_exists layer_sprite_create layer_sprite_destroy layer_sprite_change layer_sprite_index layer_sprite_speed layer_sprite_xscale layer_sprite_yscale layer_sprite_angle layer_sprite_blend layer_sprite_alpha layer_sprite_x layer_sprite_y layer_sprite_get_sprite layer_sprite_get_index layer_sprite_get_speed layer_sprite_get_xscale layer_sprite_get_yscale layer_sprite_get_angle layer_sprite_get_blend layer_sprite_get_alpha layer_sprite_get_x layer_sprite_get_y layer_tilemap_get_id layer_tilemap_exists layer_tilemap_create layer_tilemap_destroy tilemap_tileset tilemap_x tilemap_y tilemap_set tilemap_set_at_pixel tilemap_get_tileset tilemap_get_tile_width tilemap_get_tile_height tilemap_get_width tilemap_get_height tilemap_get_x tilemap_get_y tilemap_get tilemap_get_at_pixel tilemap_get_cell_x_at_pixel tilemap_get_cell_y_at_pixel tilemap_clear draw_tilemap draw_tile tilemap_set_global_mask tilemap_get_global_mask tilemap_set_mask tilemap_get_mask tilemap_get_frame tile_set_empty tile_set_index tile_set_flip tile_set_mirror tile_set_rotate tile_get_empty tile_get_index tile_get_flip tile_get_mirror tile_get_rotate layer_tile_exists layer_tile_create layer_tile_destroy layer_tile_change layer_tile_xscale layer_tile_yscale layer_tile_blend layer_tile_alpha layer_tile_x layer_tile_y layer_tile_region layer_tile_visible layer_tile_get_sprite layer_tile_get_xscale layer_tile_get_yscale layer_tile_get_blend layer_tile_get_alpha layer_tile_get_x layer_tile_get_y layer_tile_get_region layer_tile_get_visible layer_instance_get_instance instance_activate_layer instance_deactivate_layer camera_create camera_create_view camera_destroy camera_apply camera_get_active camera_get_default camera_set_default camera_set_view_mat camera_set_proj_mat camera_set_update_script camera_set_begin_script camera_set_end_script camera_set_view_pos camera_set_view_size camera_set_view_speed camera_set_view_border camera_set_view_angle camera_set_view_target camera_get_view_mat camera_get_proj_mat camera_get_update_script camera_get_begin_script camera_get_end_script camera_get_view_x camera_get_view_y camera_get_view_width camera_get_view_height camera_get_view_speed_x camera_get_view_speed_y camera_get_view_border_x camera_get_view_border_y camera_get_view_angle camera_get_view_target view_get_camera view_get_visible view_get_xport view_get_yport view_get_wport view_get_hport view_get_surface_id view_set_camera view_set_visible view_set_xport view_set_yport view_set_wport view_set_hport view_set_surface_id gesture_drag_time gesture_drag_distance gesture_flick_speed gesture_double_tap_time gesture_double_tap_distance gesture_pinch_distance gesture_pinch_angle_towards gesture_pinch_angle_away gesture_rotate_time gesture_rotate_angle gesture_tap_count gesture_get_drag_time gesture_get_drag_distance gesture_get_flick_speed gesture_get_double_tap_time gesture_get_double_tap_distance gesture_get_pinch_distance gesture_get_pinch_angle_towards gesture_get_pinch_angle_away gesture_get_rotate_time gesture_get_rotate_angle gesture_get_tap_count keyboard_virtual_show keyboard_virtual_hide keyboard_virtual_status keyboard_virtual_height",literal:"self other all noone global local undefined pointer_invalid pointer_null path_action_stop path_action_restart path_action_continue path_action_reverse true false pi GM_build_date GM_version GM_runtime_version timezone_local timezone_utc gamespeed_fps gamespeed_microseconds ev_create ev_destroy ev_step ev_alarm ev_keyboard ev_mouse ev_collision ev_other ev_draw ev_draw_begin ev_draw_end ev_draw_pre ev_draw_post ev_keypress ev_keyrelease ev_trigger ev_left_button ev_right_button ev_middle_button ev_no_button ev_left_press ev_right_press ev_middle_press ev_left_release ev_right_release ev_middle_release ev_mouse_enter ev_mouse_leave ev_mouse_wheel_up ev_mouse_wheel_down ev_global_left_button ev_global_right_button ev_global_middle_button ev_global_left_press ev_global_right_press ev_global_middle_press ev_global_left_release ev_global_right_release ev_global_middle_release ev_joystick1_left ev_joystick1_right ev_joystick1_up ev_joystick1_down ev_joystick1_button1 ev_joystick1_button2 ev_joystick1_button3 ev_joystick1_button4 ev_joystick1_button5 ev_joystick1_button6 ev_joystick1_button7 ev_joystick1_button8 ev_joystick2_left ev_joystick2_right ev_joystick2_up ev_joystick2_down ev_joystick2_button1 ev_joystick2_button2 ev_joystick2_button3 ev_joystick2_button4 ev_joystick2_button5 ev_joystick2_button6 ev_joystick2_button7 ev_joystick2_button8 ev_outside ev_boundary ev_game_start ev_game_end ev_room_start ev_room_end ev_no_more_lives ev_animation_end ev_end_of_path ev_no_more_health ev_close_button ev_user0 ev_user1 ev_user2 ev_user3 ev_user4 ev_user5 ev_user6 ev_user7 ev_user8 ev_user9 ev_user10 ev_user11 ev_user12 ev_user13 ev_user14 ev_user15 ev_step_normal ev_step_begin ev_step_end ev_gui ev_gui_begin ev_gui_end ev_cleanup ev_gesture ev_gesture_tap ev_gesture_double_tap ev_gesture_drag_start ev_gesture_dragging ev_gesture_drag_end ev_gesture_flick ev_gesture_pinch_start ev_gesture_pinch_in ev_gesture_pinch_out ev_gesture_pinch_end ev_gesture_rotate_start ev_gesture_rotating ev_gesture_rotate_end ev_global_gesture_tap ev_global_gesture_double_tap ev_global_gesture_drag_start ev_global_gesture_dragging ev_global_gesture_drag_end ev_global_gesture_flick ev_global_gesture_pinch_start ev_global_gesture_pinch_in ev_global_gesture_pinch_out ev_global_gesture_pinch_end ev_global_gesture_rotate_start ev_global_gesture_rotating ev_global_gesture_rotate_end vk_nokey vk_anykey vk_enter vk_return vk_shift vk_control vk_alt vk_escape vk_space vk_backspace vk_tab vk_pause vk_printscreen vk_left vk_right vk_up vk_down vk_home vk_end vk_delete vk_insert vk_pageup vk_pagedown vk_f1 vk_f2 vk_f3 vk_f4 vk_f5 vk_f6 vk_f7 vk_f8 vk_f9 vk_f10 vk_f11 vk_f12 vk_numpad0 vk_numpad1 vk_numpad2 vk_numpad3 vk_numpad4 vk_numpad5 vk_numpad6 vk_numpad7 vk_numpad8 vk_numpad9 vk_divide vk_multiply vk_subtract vk_add vk_decimal vk_lshift vk_lcontrol vk_lalt vk_rshift vk_rcontrol vk_ralt mb_any mb_none mb_left mb_right mb_middle c_aqua c_black c_blue c_dkgray c_fuchsia c_gray c_green c_lime c_ltgray c_maroon c_navy c_olive c_purple c_red c_silver c_teal c_white c_yellow c_orange fa_left fa_center fa_right fa_top fa_middle fa_bottom pr_pointlist pr_linelist pr_linestrip pr_trianglelist pr_trianglestrip pr_trianglefan bm_complex bm_normal bm_add bm_max bm_subtract bm_zero bm_one bm_src_colour bm_inv_src_colour bm_src_color bm_inv_src_color bm_src_alpha bm_inv_src_alpha bm_dest_alpha bm_inv_dest_alpha bm_dest_colour bm_inv_dest_colour bm_dest_color bm_inv_dest_color bm_src_alpha_sat tf_point tf_linear tf_anisotropic mip_off mip_on mip_markedonly audio_falloff_none audio_falloff_inverse_distance audio_falloff_inverse_distance_clamped audio_falloff_linear_distance audio_falloff_linear_distance_clamped audio_falloff_exponent_distance audio_falloff_exponent_distance_clamped audio_old_system audio_new_system audio_mono audio_stereo audio_3d cr_default cr_none cr_arrow cr_cross cr_beam cr_size_nesw cr_size_ns cr_size_nwse cr_size_we cr_uparrow cr_hourglass cr_drag cr_appstart cr_handpoint cr_size_all spritespeed_framespersecond spritespeed_framespergameframe asset_object asset_unknown asset_sprite asset_sound asset_room asset_path asset_script asset_font asset_timeline asset_tiles asset_shader fa_readonly fa_hidden fa_sysfile fa_volumeid fa_directory fa_archive ds_type_map ds_type_list ds_type_stack ds_type_queue ds_type_grid ds_type_priority ef_explosion ef_ring ef_ellipse ef_firework ef_smoke ef_smokeup ef_star ef_spark ef_flare ef_cloud ef_rain ef_snow pt_shape_pixel pt_shape_disk pt_shape_square pt_shape_line pt_shape_star pt_shape_circle pt_shape_ring pt_shape_sphere pt_shape_flare pt_shape_spark pt_shape_explosion pt_shape_cloud pt_shape_smoke pt_shape_snow ps_distr_linear ps_distr_gaussian ps_distr_invgaussian ps_shape_rectangle ps_shape_ellipse ps_shape_diamond ps_shape_line ty_real ty_string dll_cdecl dll_stdcall matrix_view matrix_projection matrix_world os_win32 os_windows os_macosx os_ios os_android os_symbian os_linux os_unknown os_winphone os_tizen os_win8native os_wiiu os_3ds os_psvita os_bb10 os_ps4 os_xboxone os_ps3 os_xbox360 os_uwp os_tvos os_switch browser_not_a_browser browser_unknown browser_ie browser_firefox browser_chrome browser_safari browser_safari_mobile browser_opera browser_tizen browser_edge browser_windows_store browser_ie_mobile device_ios_unknown device_ios_iphone device_ios_iphone_retina device_ios_ipad device_ios_ipad_retina device_ios_iphone5 device_ios_iphone6 device_ios_iphone6plus device_emulator device_tablet display_landscape display_landscape_flipped display_portrait display_portrait_flipped tm_sleep tm_countvsyncs of_challenge_win of_challen ge_lose of_challenge_tie leaderboard_type_number leaderboard_type_time_mins_secs cmpfunc_never cmpfunc_less cmpfunc_equal cmpfunc_lessequal cmpfunc_greater cmpfunc_notequal cmpfunc_greaterequal cmpfunc_always cull_noculling cull_clockwise cull_counterclockwise lighttype_dir lighttype_point iap_ev_storeload iap_ev_product iap_ev_purchase iap_ev_consume iap_ev_restore iap_storeload_ok iap_storeload_failed iap_status_uninitialised iap_status_unavailable iap_status_loading iap_status_available iap_status_processing iap_status_restoring iap_failed iap_unavailable iap_available iap_purchased iap_canceled iap_refunded fb_login_default fb_login_fallback_to_webview fb_login_no_fallback_to_webview fb_login_forcing_webview fb_login_use_system_account fb_login_forcing_safari phy_joint_anchor_1_x phy_joint_anchor_1_y phy_joint_anchor_2_x phy_joint_anchor_2_y phy_joint_reaction_force_x phy_joint_reaction_force_y phy_joint_reaction_torque phy_joint_motor_speed phy_joint_angle phy_joint_motor_torque phy_joint_max_motor_torque phy_joint_translation phy_joint_speed phy_joint_motor_force phy_joint_max_motor_force phy_joint_length_1 phy_joint_length_2 phy_joint_damping_ratio phy_joint_frequency phy_joint_lower_angle_limit phy_joint_upper_angle_limit phy_joint_angle_limits phy_joint_max_length phy_joint_max_torque phy_joint_max_force phy_debug_render_aabb phy_debug_render_collision_pairs phy_debug_render_coms phy_debug_render_core_shapes phy_debug_render_joints phy_debug_render_obb phy_debug_render_shapes phy_particle_flag_water phy_particle_flag_zombie phy_particle_flag_wall phy_particle_flag_spring phy_particle_flag_elastic phy_particle_flag_viscous phy_particle_flag_powder phy_particle_flag_tensile phy_particle_flag_colourmixing phy_particle_flag_colormixing phy_particle_group_flag_solid phy_particle_group_flag_rigid phy_particle_data_flag_typeflags phy_particle_data_flag_position phy_particle_data_flag_velocity phy_particle_data_flag_colour phy_particle_data_flag_color phy_particle_data_flag_category achievement_our_info achievement_friends_info achievement_leaderboard_info achievement_achievement_info achievement_filter_all_players achievement_filter_friends_only achievement_filter_favorites_only achievement_type_achievement_challenge achievement_type_score_challenge achievement_pic_loaded achievement_show_ui achievement_show_profile achievement_show_leaderboard achievement_show_achievement achievement_show_bank achievement_show_friend_picker achievement_show_purchase_prompt network_socket_tcp network_socket_udp network_socket_bluetooth network_type_connect network_type_disconnect network_type_data network_type_non_blocking_connect network_config_connect_timeout network_config_use_non_blocking_socket network_config_enable_reliable_udp network_config_disable_reliable_udp buffer_fixed buffer_grow buffer_wrap buffer_fast buffer_vbuffer buffer_network buffer_u8 buffer_s8 buffer_u16 buffer_s16 buffer_u32 buffer_s32 buffer_u64 buffer_f16 buffer_f32 buffer_f64 buffer_bool buffer_text buffer_string buffer_surface_copy buffer_seek_start buffer_seek_relative buffer_seek_end buffer_generalerror buffer_outofspace buffer_outofbounds buffer_invalidtype text_type button_type input_type ANSI_CHARSET DEFAULT_CHARSET EASTEUROPE_CHARSET RUSSIAN_CHARSET SYMBOL_CHARSET SHIFTJIS_CHARSET HANGEUL_CHARSET GB2312_CHARSET CHINESEBIG5_CHARSET JOHAB_CHARSET HEBREW_CHARSET ARABIC_CHARSET GREEK_CHARSET TURKISH_CHARSET VIETNAMESE_CHARSET THAI_CHARSET MAC_CHARSET BALTIC_CHARSET OEM_CHARSET gp_face1 gp_face2 gp_face3 gp_face4 gp_shoulderl gp_shoulderr gp_shoulderlb gp_shoulderrb gp_select gp_start gp_stickl gp_stickr gp_padu gp_padd gp_padl gp_padr gp_axislh gp_axislv gp_axisrh gp_axisrv ov_friends ov_community ov_players ov_settings ov_gamegroup ov_achievements lb_sort_none lb_sort_ascending lb_sort_descending lb_disp_none lb_disp_numeric lb_disp_time_sec lb_disp_time_ms ugc_result_success ugc_filetype_community ugc_filetype_microtrans ugc_visibility_public ugc_visibility_friends_only ugc_visibility_private ugc_query_RankedByVote ugc_query_RankedByPublicationDate ugc_query_AcceptedForGameRankedByAcceptanceDate ugc_query_RankedByTrend ugc_query_FavoritedByFriendsRankedByPublicationDate ugc_query_CreatedByFriendsRankedByPublicationDate ugc_query_RankedByNumTimesReported ugc_query_CreatedByFollowedUsersRankedByPublicationDate ugc_query_NotYetRated ugc_query_RankedByTotalVotesAsc ugc_query_RankedByVotesUp ugc_query_RankedByTextSearch ugc_sortorder_CreationOrderDesc ugc_sortorder_CreationOrderAsc ugc_sortorder_TitleAsc ugc_sortorder_LastUpdatedDesc ugc_sortorder_SubscriptionDateDesc ugc_sortorder_VoteScoreDesc ugc_sortorder_ForModeration ugc_list_Published ugc_list_VotedOn ugc_list_VotedUp ugc_list_VotedDown ugc_list_WillVoteLater ugc_list_Favorited ugc_list_Subscribed ugc_list_UsedOrPlayed ugc_list_Followed ugc_match_Items ugc_match_Items_Mtx ugc_match_Items_ReadyToUse ugc_match_Collections ugc_match_Artwork ugc_match_Videos ugc_match_Screenshots ugc_match_AllGuides ugc_match_WebGuides ugc_match_IntegratedGuides ugc_match_UsableInGame ugc_match_ControllerBindings vertex_usage_position vertex_usage_colour vertex_usage_color vertex_usage_normal vertex_usage_texcoord vertex_usage_textcoord vertex_usage_blendweight vertex_usage_blendindices vertex_usage_psize vertex_usage_tangent vertex_usage_binormal vertex_usage_fog vertex_usage_depth vertex_usage_sample vertex_type_float1 vertex_type_float2 vertex_type_float3 vertex_type_float4 vertex_type_colour vertex_type_color vertex_type_ubyte4 layerelementtype_undefined layerelementtype_background layerelementtype_instance layerelementtype_oldtilemap layerelementtype_sprite layerelementtype_tilemap layerelementtype_particlesystem layerelementtype_tile tile_rotate tile_flip tile_mirror tile_index_mask kbv_type_default kbv_type_ascii kbv_type_url kbv_type_email kbv_type_numbers kbv_type_phone kbv_type_phone_name kbv_returnkey_default kbv_returnkey_go kbv_returnkey_google kbv_returnkey_join kbv_returnkey_next kbv_returnkey_route kbv_returnkey_search kbv_returnkey_send kbv_returnkey_yahoo kbv_returnkey_done kbv_returnkey_continue kbv_returnkey_emergency kbv_autocapitalize_none kbv_autocapitalize_words kbv_autocapitalize_sentences kbv_autocapitalize_characters",symbol:"argument_relative argument argument0 argument1 argument2 argument3 argument4 argument5 argument6 argument7 argument8 argument9 argument10 argument11 argument12 argument13 argument14 argument15 argument_count x|0 y|0 xprevious yprevious xstart ystart hspeed vspeed direction speed friction gravity gravity_direction path_index path_position path_positionprevious path_speed path_scale path_orientation path_endaction object_index id solid persistent mask_index instance_count instance_id room_speed fps fps_real current_time current_year current_month current_day current_weekday current_hour current_minute current_second alarm timeline_index timeline_position timeline_speed timeline_running timeline_loop room room_first room_last room_width room_height room_caption room_persistent score lives health show_score show_lives show_health caption_score caption_lives caption_health event_type event_number event_object event_action application_surface gamemaker_pro gamemaker_registered gamemaker_version error_occurred error_last debug_mode keyboard_key keyboard_lastkey keyboard_lastchar keyboard_string mouse_x mouse_y mouse_button mouse_lastbutton cursor_sprite visible sprite_index sprite_width sprite_height sprite_xoffset sprite_yoffset image_number image_index image_speed depth image_xscale image_yscale image_angle image_alpha image_blend bbox_left bbox_right bbox_top bbox_bottom layer background_colour background_showcolour background_color background_showcolor view_enabled view_current view_visible view_xview view_yview view_wview view_hview view_xport view_yport view_wport view_hport view_angle view_hborder view_vborder view_hspeed view_vspeed view_object view_surface_id view_camera game_id game_display_name game_project_name game_save_id working_directory temp_directory program_directory browser_width browser_height os_type os_device os_browser os_version display_aa async_load delta_time webgl_enabled event_data iap_data phy_rotation phy_position_x phy_position_y phy_angular_velocity phy_linear_velocity_x phy_linear_velocity_y phy_speed_x phy_speed_y phy_speed phy_angular_damping phy_linear_damping phy_bullet phy_fixed_rotation phy_active phy_mass phy_inertia phy_com_x phy_com_y phy_dynamic phy_kinematic phy_sleeping phy_collision_points phy_collision_x phy_collision_y phy_col_normal_x phy_col_normal_y phy_position_xprevious phy_position_yprevious"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE]}}},39282:function(e){"use strict";e.exports=function(e){var t={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",literal:"true false iota nil",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{name:"Go",aliases:["golang"],keywords:t,illegal:"1&&void 0!==arguments[1]?arguments[1]:{};return t.variants=e,t}e.exports=function(e){var t="[A-Za-z0-9_$]+",i=r([e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]})]),a={className:"regexp",begin:/~?\/[^\/\n]+\//,contains:[e.BACKSLASH_ESCAPE]},o=r([e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]),s=r([{begin:/"""/,end:/"""/},{begin:/'''/,end:/'''/},{begin:"\\$/",end:"/\\$",relevance:10},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE],{className:"string"});return{name:"Groovy",keywords:{built_in:"this super",literal:"true false null",keyword:"byte short char int long boolean float double void def as in assert trait abstract static volatile transient public private protected synchronized final class interface enum if else for while switch case break default continue throw throws try catch finally implements extends new import package return instanceof"},contains:[e.SHEBANG({binary:"groovy",relevance:10}),i,s,a,o,{className:"class",beginKeywords:"class interface trait enum",end:/\{/,illegal:":",contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{className:"meta",begin:"@[A-Za-z]+",relevance:0},{className:"attr",begin:t+"[ \t]*:",relevance:0},{begin:/\?/,end:/:/,relevance:0,contains:[i,s,a,o,"self"]},{className:"symbol",begin:"^[ \t]*"+n(t+":"),excludeBegin:!0,end:t+":",relevance:0}],illegal:/#|<\//}}},48953:function(e){"use strict";e.exports=function(e){return{name:"HAML",case_insensitive:!0,contains:[{className:"meta",begin:"^!!!( (5|1\\.1|Strict|Frameset|Basic|Mobile|RDFa|XML\\b.*))?$",relevance:10},e.COMMENT("^\\s*(!=#|=#|-#|/).*$",!1,{relevance:0}),{begin:"^\\s*(-|=|!=)(?!#)",starts:{end:"\\n",subLanguage:"ruby"}},{className:"tag",begin:"^\\s*%",contains:[{className:"selector-tag",begin:"\\w+"},{className:"selector-id",begin:"#[\\w-]+"},{className:"selector-class",begin:"\\.[\\w-]+"},{begin:/\{\s*/,end:/\s*\}/,contains:[{begin:":\\w+\\s*=>",end:",\\s+",returnBegin:!0,endsWithParent:!0,contains:[{className:"attr",begin:":\\w+"},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{begin:"\\w+",relevance:0}]}]},{begin:"\\(\\s*",end:"\\s*\\)",excludeEnd:!0,contains:[{begin:"\\w+\\s*=",end:"\\s+",returnBegin:!0,endsWithParent:!0,contains:[{className:"attr",begin:"\\w+",relevance:0},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{begin:"\\w+",relevance:0}]}]}]},{begin:"^\\s*[=~]\\s*"},{begin:/#\{/,starts:{end:/\}/,subLanguage:"ruby"}}]}}},77290:function(e){"use strict";function t(e){return e?"string"===typeof e?e:e.source:null}function n(){for(var e=arguments.length,n=new Array(e),r=0;r@\[\\\]^`{|}~]+/,o=function(){for(var e=arguments.length,n=new Array(e),r=0;r|<-"}]}}},23116:function(e){"use strict";e.exports=function(e){return{name:"Haxe",aliases:["hx"],keywords:{keyword:"break case cast catch continue default do dynamic else enum extern for function here if import in inline never new override package private get set public return static super switch this throw trace try typedef untyped using var while Int Float String Bool Dynamic Void Array ",built_in:"trace this",literal:"true false null _"},contains:[{className:"string",begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE,{className:"subst",begin:"\\$\\{",end:"\\}"},{className:"subst",begin:"\\$",end:/\W\}/}]},e.QUOTE_STRING_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,{className:"meta",begin:"@:",end:"$"},{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elseif end error"}},{className:"type",begin:":[ \t]*",end:"[^A-Za-z0-9_ \t\\->]",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:":[ \t]*",end:"\\W",excludeBegin:!0,excludeEnd:!0},{className:"type",begin:"new *",end:"\\W",excludeBegin:!0,excludeEnd:!0},{className:"class",beginKeywords:"enum",end:"\\{",contains:[e.TITLE_MODE]},{className:"class",beginKeywords:"abstract",end:"[\\{$]",contains:[{className:"type",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"type",begin:"from +",end:"\\W",excludeBegin:!0,excludeEnd:!0},{className:"type",begin:"to +",end:"\\W",excludeBegin:!0,excludeEnd:!0},e.TITLE_MODE],keywords:{keyword:"abstract from to"}},{className:"class",begin:"\\b(class|interface) +",end:"[\\{$]",excludeEnd:!0,keywords:"class interface",contains:[{className:"keyword",begin:"\\b(extends|implements) +",keywords:"extends implements",contains:[{className:"type",begin:e.IDENT_RE,relevance:0}]},e.TITLE_MODE]},{className:"function",beginKeywords:"function",end:"\\(",excludeEnd:!0,illegal:"\\S",contains:[e.TITLE_MODE]}],illegal:/<\//}}},90201:function(e){"use strict";e.exports=function(e){return{name:"HSP",case_insensitive:!0,keywords:{$pattern:/[\w._]+/,keyword:"goto gosub return break repeat loop continue wait await dim sdim foreach dimtype dup dupptr end stop newmod delmod mref run exgoto on mcall assert logmes newlab resume yield onexit onerror onkey onclick oncmd exist delete mkdir chdir dirlist bload bsave bcopy memfile if else poke wpoke lpoke getstr chdpm memexpand memcpy memset notesel noteadd notedel noteload notesave randomize noteunsel noteget split strrep setease button chgdisp exec dialog mmload mmplay mmstop mci pset pget syscolor mes print title pos circle cls font sysfont objsize picload color palcolor palette redraw width gsel gcopy gzoom gmode bmpsave hsvcolor getkey listbox chkbox combox input mesbox buffer screen bgscr mouse objsel groll line clrobj boxf objprm objmode stick grect grotate gsquare gradf objimage objskip objenable celload celdiv celput newcom querycom delcom cnvstow comres axobj winobj sendmsg comevent comevarg sarrayconv callfunc cnvwtos comevdisp libptr system hspstat hspver stat cnt err strsize looplev sublev iparam wparam lparam refstr refdval int rnd strlen length length2 length3 length4 vartype gettime peek wpeek lpeek varptr varuse noteinfo instr abs limit getease str strmid strf getpath strtrim sin cos tan atan sqrt double absf expf logf limitf powf geteasef mousex mousey mousew hwnd hinstance hdc ginfo objinfo dirinfo sysinfo thismod __hspver__ __hsp30__ __date__ __time__ __line__ __file__ _debug __hspdef__ and or xor not screen_normal screen_palette screen_hide screen_fixedsize screen_tool screen_frame gmode_gdi gmode_mem gmode_rgb0 gmode_alpha gmode_rgb0alpha gmode_add gmode_sub gmode_pixela ginfo_mx ginfo_my ginfo_act ginfo_sel ginfo_wx1 ginfo_wy1 ginfo_wx2 ginfo_wy2 ginfo_vx ginfo_vy ginfo_sizex ginfo_sizey ginfo_winx ginfo_winy ginfo_mesx ginfo_mesy ginfo_r ginfo_g ginfo_b ginfo_paluse ginfo_dispx ginfo_dispy ginfo_cx ginfo_cy ginfo_intid ginfo_newid ginfo_sx ginfo_sy objinfo_mode objinfo_bmscr objinfo_hwnd notemax notesize dir_cur dir_exe dir_win dir_sys dir_cmdline dir_desktop dir_mydoc dir_tv font_normal font_bold font_italic font_underline font_strikeout font_antialias objmode_normal objmode_guifont objmode_usefont gsquare_grad msgothic msmincho do until while wend for next _break _continue switch case default swbreak swend ddim ldim alloc m_pi rad2deg deg2rad ease_linear ease_quad_in ease_quad_out ease_quad_inout ease_cubic_in ease_cubic_out ease_cubic_inout ease_quartic_in ease_quartic_out ease_quartic_inout ease_bounce_in ease_bounce_out ease_bounce_inout ease_shake_in ease_shake_out ease_shake_inout ease_loop"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{className:"string",begin:/\{"/,end:/"\}/,contains:[e.BACKSLASH_ESCAPE]},e.COMMENT(";","$",{relevance:0}),{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"addion cfunc cmd cmpopt comfunc const defcfunc deffunc define else endif enum epack func global if ifdef ifndef include modcfunc modfunc modinit modterm module pack packopt regcmd runtime undef usecom uselib"},contains:[e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"}),e.NUMBER_MODE,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"symbol",begin:"^\\*(\\w+|@)"},e.NUMBER_MODE,e.C_NUMBER_MODE]}}},32766:function(e){"use strict";function t(e){return e?"string"===typeof e?e:e.source:null}function n(){for(var e=arguments.length,n=new Array(e),r=0;r@\[\\\]^`{|}~]+/,o=function(){for(var e=arguments.length,n=new Array(e),r=0;r >= >> >>= @ @= ^ ^= abs accumulate all and any ap-compose ap-dotimes ap-each ap-each-while ap-filter ap-first ap-if ap-last ap-map ap-map-when ap-pipe ap-reduce ap-reject apply as-> ascii assert assoc bin break butlast callable calling-module-name car case cdr chain chr coll? combinations compile compress cond cons cons? continue count curry cut cycle dec def default-method defclass defmacro defmacro-alias defmacro/g! defmain defmethod defmulti defn defn-alias defnc defnr defreader defseq del delattr delete-route dict-comp dir disassemble dispatch-reader-macro distinct divmod do doto drop drop-last drop-while empty? end-sequence eval eval-and-compile eval-when-compile even? every? except exec filter first flatten float? fn fnc fnr for for* format fraction genexpr gensym get getattr global globals group-by hasattr hash hex id identity if if* if-not if-python2 import in inc input instance? integer integer-char? integer? interleave interpose is is-coll is-cons is-empty is-even is-every is-float is-instance is-integer is-integer-char is-iterable is-iterator is-keyword is-neg is-none is-not is-numeric is-odd is-pos is-string is-symbol is-zero isinstance islice issubclass iter iterable? iterate iterator? keyword keyword? lambda last len let lif lif-not list* list-comp locals loop macro-error macroexpand macroexpand-1 macroexpand-all map max merge-with method-decorator min multi-decorator multicombinations name neg? next none? nonlocal not not-in not? nth numeric? oct odd? open or ord partition permutations pos? post-route postwalk pow prewalk print product profile/calls profile/cpu put-route quasiquote quote raise range read read-str recursive-replace reduce remove repeat repeatedly repr require rest round route route-with-methods rwm second seq set-comp setattr setv some sorted string string? sum switch symbol? take take-nth take-while tee try unless unquote unquote-splicing vars walk when while with with* with-decorator with-gensyms xi xor yield yield-from zero? zip zip-longest | |= ~"},i={begin:n,relevance:0},a={className:"number",begin:"[-+]?\\d+(\\.\\d+)?",relevance:0},o=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),s=e.COMMENT(";","$",{relevance:0}),l={className:"literal",begin:/\b([Tt]rue|[Ff]alse|nil|None)\b/},c={begin:"[\\[\\{]",end:"[\\]\\}]"},u={className:"comment",begin:"\\^"+n},d=e.COMMENT("\\^\\{","\\}"),p={className:"symbol",begin:"[:]{1,2}"+n},f={begin:"\\(",end:"\\)"},h={endsWithParent:!0,relevance:0},m={className:"name",relevance:0,keywords:r,begin:n,starts:h},g=[f,o,u,d,s,p,c,a,l,i];return f.contains=[e.COMMENT("comment",""),m,h],h.contains=g,c.contains=g,{name:"Hy",aliases:["hylang"],illegal:/\S/,contains:[e.SHEBANG(),f,o,u,d,s,p,c,a,l]}}},1391:function(e){"use strict";e.exports=function(e){return{name:"Inform 7",aliases:["i7"],case_insensitive:!0,keywords:{keyword:"thing room person man woman animal container supporter backdrop door scenery open closed locked inside gender is are say understand kind of rule"},contains:[{className:"string",begin:'"',end:'"',relevance:0,contains:[{className:"subst",begin:"\\[",end:"\\]"}]},{className:"section",begin:/^(Volume|Book|Part|Chapter|Section|Table)\b/,end:"$"},{begin:/^(Check|Carry out|Report|Instead of|To|Rule|When|Before|After)\b/,end:":",contains:[{begin:"\\(This",end:"\\)"}]},{className:"comment",begin:"\\[",end:"\\]",contains:["self"]}]}}},53602:function(e){"use strict";function t(e){return e?"string"===typeof e?e:e.source:null}function n(){for(var e=arguments.length,n=new Array(e),r=0;r)?",r="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",a={className:"meta",begin:"@"+t,contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},o=i;return{name:"Java",aliases:["jsp"],keywords:r,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{begin:/import java\.[a-z]+\./,keywords:"import",relevance:2},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"class",beginKeywords:"class interface enum",end:/[{;=]/,excludeEnd:!0,relevance:1,keywords:"class interface enum",illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"new throw return else",relevance:0},{className:"class",begin:"record\\s+"+e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,excludeEnd:!0,end:/[{;=]/,keywords:r,contains:[{beginKeywords:"record"},{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,keywords:r,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"function",begin:"("+n+"\\s+)+"+e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:r,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,keywords:r,relevance:0,contains:[a,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,o,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},o,a]}}},44006:function(e){"use strict";var t="[A-Za-z$_][0-9A-Za-z$_]*",n=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],r=["true","false","null","undefined","NaN","Infinity"],i=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer","BigInt64Array","BigUint64Array","BigInt"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);function a(e){return e?"string"===typeof e?e:e.source:null}function o(e){return s("(?=",e,")")}function s(){for(var e=arguments.length,t=new Array(e),n=0;n",c="",u={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:function(e,t){var n=e[0].length+e.index,r=e.input[n];"<"!==r?">"===r&&(function(e,t){var n=t.after,r="",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:d,contains:T}]}]},{begin:/,/,relevance:0},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:l,end:c},{begin:u.begin,"on:begin":u.isTrulyOpeningTag,end:u.end}],subLanguage:"xml",contains:[{begin:u.begin,end:u.end,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/[{;]/,excludeEnd:!0,keywords:d,contains:["self",e.inherit(e.TITLE_MODE,{begin:a}),C],illegal:/%/},{beginKeywords:"while if switch catch for"},{className:"function",begin:e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,contains:[C,e.inherit(e.TITLE_MODE,{begin:a})]},{variants:[{begin:"\\."+a},{begin:"\\$"+a}],relevance:0},{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"[\]]/,contains:[{beginKeywords:"extends"},e.UNDERSCORE_TITLE_MODE]},{begin:/\b(?=constructor)/,end:/[{;]/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:a}),"self",C]},{begin:"(get|set)\\s+(?="+a+"\\()",end:/\{/,keywords:"get set",contains:[e.inherit(e.TITLE_MODE,{begin:a}),{begin:/\(\)/},C]},{begin:/\$[(.]/}]}}},82961:function(e){"use strict";e.exports=function(e){var t={className:"params",begin:/\(/,end:/\)/,contains:[{begin:/[\w-]+ *=/,returnBegin:!0,relevance:0,contains:[{className:"attr",begin:/[\w-]+/}]}],relevance:0};return{name:"JBoss CLI",aliases:["wildfly-cli"],keywords:{$pattern:"[a-z-]+",keyword:"alias batch cd clear command connect connection-factory connection-info data-source deploy deployment-info deployment-overlay echo echo-dmr help history if jdbc-driver-info jms-queue|20 jms-topic|20 ls patch pwd quit read-attribute read-operation reload rollout-plan run-batch set shutdown try unalias undeploy unset version xa-data-source",literal:"true false"},contains:[e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,{className:"params",begin:/--[\w\-=\/]+/},{className:"function",begin:/:[\w\-.]+/,relevance:0},{className:"string",begin:/\B([\/.])[\w\-.\/=]+/},t]}}},21792:function(e){"use strict";e.exports=function(e){var t={literal:"true false null"},n=[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],r=[e.QUOTE_STRING_MODE,e.C_NUMBER_MODE],i={end:",",endsWithParent:!0,excludeEnd:!0,contains:r,keywords:t},a={begin:/\{/,end:/\}/,contains:[{className:"attr",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE],illegal:"\\n"},e.inherit(i,{begin:/:/})].concat(n),illegal:"\\S"},o={begin:"\\[",end:"\\]",contains:[e.inherit(i)],illegal:"\\S"};return r.push(a,o),n.forEach((function(e){r.push(e)})),{name:"JSON",contains:r,keywords:t,illegal:"\\S"}}},33967:function(e){"use strict";e.exports=function(e){return{name:"Julia REPL",contains:[{className:"meta",begin:/^julia>/,relevance:10,starts:{end:/^(?![ ]{6})/,subLanguage:"julia"},aliases:["jldoctest"]}]}}},18770:function(e){"use strict";e.exports=function(e){var t="[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*",n={$pattern:t,keyword:["baremodule","begin","break","catch","ccall","const","continue","do","else","elseif","end","export","false","finally","for","function","global","if","import","in","isa","let","local","macro","module","quote","return","true","try","using","where","while"],literal:["ARGS","C_NULL","DEPOT_PATH","ENDIAN_BOM","ENV","Inf","Inf16","Inf32","Inf64","InsertionSort","LOAD_PATH","MergeSort","NaN","NaN16","NaN32","NaN64","PROGRAM_FILE","QuickSort","RoundDown","RoundFromZero","RoundNearest","RoundNearestTiesAway","RoundNearestTiesUp","RoundToZero","RoundUp","VERSION|0","devnull","false","im","missing","nothing","pi","stderr","stdin","stdout","true","undef","\u03c0","\u212f"],built_in:["AbstractArray","AbstractChannel","AbstractChar","AbstractDict","AbstractDisplay","AbstractFloat","AbstractIrrational","AbstractMatrix","AbstractRange","AbstractSet","AbstractString","AbstractUnitRange","AbstractVecOrMat","AbstractVector","Any","ArgumentError","Array","AssertionError","BigFloat","BigInt","BitArray","BitMatrix","BitSet","BitVector","Bool","BoundsError","CapturedException","CartesianIndex","CartesianIndices","Cchar","Cdouble","Cfloat","Channel","Char","Cint","Cintmax_t","Clong","Clonglong","Cmd","Colon","Complex","ComplexF16","ComplexF32","ComplexF64","CompositeException","Condition","Cptrdiff_t","Cshort","Csize_t","Cssize_t","Cstring","Cuchar","Cuint","Cuintmax_t","Culong","Culonglong","Cushort","Cvoid","Cwchar_t","Cwstring","DataType","DenseArray","DenseMatrix","DenseVecOrMat","DenseVector","Dict","DimensionMismatch","Dims","DivideError","DomainError","EOFError","Enum","ErrorException","Exception","ExponentialBackOff","Expr","Float16","Float32","Float64","Function","GlobalRef","HTML","IO","IOBuffer","IOContext","IOStream","IdDict","IndexCartesian","IndexLinear","IndexStyle","InexactError","InitError","Int","Int128","Int16","Int32","Int64","Int8","Integer","InterruptException","InvalidStateException","Irrational","KeyError","LinRange","LineNumberNode","LinearIndices","LoadError","MIME","Matrix","Method","MethodError","Missing","MissingException","Module","NTuple","NamedTuple","Nothing","Number","OrdinalRange","OutOfMemoryError","OverflowError","Pair","PartialQuickSort","PermutedDimsArray","Pipe","ProcessFailedException","Ptr","QuoteNode","Rational","RawFD","ReadOnlyMemoryError","Real","ReentrantLock","Ref","Regex","RegexMatch","RoundingMode","SegmentationFault","Set","Signed","Some","StackOverflowError","StepRange","StepRangeLen","StridedArray","StridedMatrix","StridedVecOrMat","StridedVector","String","StringIndexError","SubArray","SubString","SubstitutionString","Symbol","SystemError","Task","TaskFailedException","Text","TextDisplay","Timer","Tuple","Type","TypeError","TypeVar","UInt","UInt128","UInt16","UInt32","UInt64","UInt8","UndefInitializer","UndefKeywordError","UndefRefError","UndefVarError","Union","UnionAll","UnitRange","Unsigned","Val","Vararg","VecElement","VecOrMat","Vector","VersionNumber","WeakKeyDict","WeakRef"]},r={keywords:n,illegal:/<\//},i={className:"subst",begin:/\$\(/,end:/\)/,keywords:n},a={className:"variable",begin:"\\$"+t},o={className:"string",contains:[e.BACKSLASH_ESCAPE,i,a],variants:[{begin:/\w*"""/,end:/"""\w*/,relevance:10},{begin:/\w*"/,end:/"\w*/}]},s={className:"string",contains:[e.BACKSLASH_ESCAPE,i,a],begin:"`",end:"`"},l={className:"meta",begin:"@"+t};return r.name="Julia",r.contains=[{className:"number",begin:/(\b0x[\d_]*(\.[\d_]*)?|0x\.\d[\d_]*)p[-+]?\d+|\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\b\d[\d_]*(\.[\d_]*)?|\.\d[\d_]*)([eEfF][-+]?\d+)?/,relevance:0},{className:"string",begin:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},o,s,l,{className:"comment",variants:[{begin:"#=",end:"=#",relevance:10},{begin:"#",end:"$"}]},e.HASH_COMMENT_MODE,{className:"keyword",begin:"\\b(((abstract|primitive)\\s+)type|(mutable\\s+)?struct)\\b"},{begin:/<:/}],i.contains=r.contains,r}},50624:function(e){"use strict";var t="[0-9](_*[0-9])*",n="\\.(".concat(t,")"),r="[0-9a-fA-F](_*[0-9a-fA-F])*",i={className:"number",variants:[{begin:"(\\b(".concat(t,")((").concat(n,")|\\.)?|(").concat(n,"))")+"[eE][+-]?(".concat(t,")[fFdD]?\\b")},{begin:"\\b(".concat(t,")((").concat(n,")[fFdD]?\\b|\\.([fFdD]\\b)?)")},{begin:"(".concat(n,")[fFdD]?\\b")},{begin:"\\b(".concat(t,")[fFdD]\\b")},{begin:"\\b0[xX]((".concat(r,")\\.?|(").concat(r,")?\\.(").concat(r,"))")+"[pP][+-]?(".concat(t,")[fFdD]?\\b")},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:"\\b0[xX](".concat(r,")[lL]?\\b")},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};e.exports=function(e){var t={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},n={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@"},r={className:"subst",begin:/\$\{/,end:/\}/,contains:[e.C_NUMBER_MODE]},a={className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},o={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[a,r]},{begin:"'",end:"'",illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,a,r]}]};r.contains.push(o);var s={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?"},l={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[e.inherit(o,{className:"meta-string"})]}]},c=i,u=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),d={variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},p=d;return p.variants[1].contains=[d],d.variants[1].contains=[p],{name:"Kotlin",aliases:["kt","kts"],keywords:t,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,u,{className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},n,s,l,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:t,relevance:5,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:t,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[d,e.C_LINE_COMMENT_MODE,u],relevance:0},e.C_LINE_COMMENT_MODE,u,s,l,o,e.C_NUMBER_MODE]},u]},{className:"class",beginKeywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,]|$/,excludeBegin:!0,returnEnd:!0},s,l]},o,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},c]}}},92236:function(e){"use strict";e.exports=function(e){var t="[a-zA-Z_][\\w.]*",n="<\\?(lasso(script)?|=)",r="\\]|\\?>",i={$pattern:t+"|&[lg]t;",literal:"true false none minimal full all void and or not bw nbw ew new cn ncn lt lte gt gte eq neq rx nrx ft",built_in:"array date decimal duration integer map pair string tag xml null boolean bytes keyword list locale queue set stack staticarray local var variable global data self inherited currentcapture givenblock",keyword:"cache database_names database_schemanames database_tablenames define_tag define_type email_batch encode_set html_comment handle handle_error header if inline iterate ljax_target link link_currentaction link_currentgroup link_currentrecord link_detail link_firstgroup link_firstrecord link_lastgroup link_lastrecord link_nextgroup link_nextrecord link_prevgroup link_prevrecord log loop namespace_using output_none portal private protect records referer referrer repeating resultset rows search_args search_arguments select sort_args sort_arguments thread_atomic value_list while abort case else fail_if fail_ifnot fail if_empty if_false if_null if_true loop_abort loop_continue loop_count params params_up return return_value run_children soap_definetag soap_lastrequest soap_lastresponse tag_name ascending average by define descending do equals frozen group handle_failure import in into join let match max min on order parent protected provide public require returnhome skip split_thread sum take thread to trait type where with yield yieldhome"},a=e.COMMENT("\x3c!--","--\x3e",{relevance:0}),o={className:"meta",begin:"\\[noprocess\\]",starts:{end:"\\[/noprocess\\]",returnEnd:!0,contains:[a]}},s={className:"meta",begin:"\\[/noprocess|"+n},l={className:"symbol",begin:"'"+t+"'"},c=[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.inherit(e.C_NUMBER_MODE,{begin:e.C_NUMBER_RE+"|(-?infinity|NaN)\\b"}),e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),{className:"string",begin:"`",end:"`"},{variants:[{begin:"[#$]"+t},{begin:"#",end:"\\d+",illegal:"\\W"}]},{className:"type",begin:"::\\s*",end:t,illegal:"\\W"},{className:"params",variants:[{begin:"-(?!infinity)"+t,relevance:0},{begin:"(\\.\\.\\.)"}]},{begin:/(->|\.)\s*/,relevance:0,contains:[l]},{className:"class",beginKeywords:"define",returnEnd:!0,end:"\\(|=>",contains:[e.inherit(e.TITLE_MODE,{begin:t+"(=(?!>))?|[-+*/%](?!>)"})]}];return{name:"Lasso",aliases:["ls","lassoscript"],case_insensitive:!0,keywords:i,contains:[{className:"meta",begin:r,relevance:0,starts:{end:"\\[|"+n,returnEnd:!0,relevance:0,contains:[a]}},o,s,{className:"meta",begin:"\\[no_square_brackets",starts:{end:"\\[/no_square_brackets\\]",keywords:i,contains:[{className:"meta",begin:r,relevance:0,starts:{end:"\\[noprocess\\]|"+n,returnEnd:!0,contains:[a]}},o,s].concat(c)}},{className:"meta",begin:"\\[",relevance:0},{className:"meta",begin:"^#!",end:"lasso9$",relevance:10}].concat(c)}}},82973:function(e,t,n){"use strict";var r=n(9833).default;function i(e){return e?"string"===typeof e?e:e.source:null}function a(){for(var e=arguments.length,t=new Array(e),n=0;n0&&void 0!==arguments[0]?arguments[0]:"string";return e.END_SAME_AS_BEGIN({className:t,begin:/(.|\r?\n)/,end:/(.|\r?\n)/,excludeBegin:!0,excludeEnd:!0,endsParent:!0})},g=function(e){return{className:"string",end:"(?=\\\\end\\{"+e+"\\})"}},_=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"string";return{relevance:0,begin:/\{/,starts:{endsParent:!0,contains:[{className:e,end:/(?=\})/,endsParent:!0,contains:[{begin:/\{/,end:/\}/,relevance:0,contains:["self"]}]}]}}},v=[].concat(r(["verb","lstinline"].map((function(e){return f(e,{contains:[m()]})}))),[f("mint",p(u,{contains:[m()]})),f("mintinline",p(u,{contains:[_(),m()]})),f("url",{contains:[_("link"),_("link")]}),f("hyperref",{contains:[_("link")]}),f("href",p(d,{contains:[_("link")]}))],r((t=[]).concat.apply(t,r(["","\\*"].map((function(e){return[h("verbatim"+e,g("verbatim"+e)),h("filecontents"+e,p(u,g("filecontents"+e)))].concat(r(["","B","L"].map((function(t){return h(t+"Verbatim"+e,p(d,g(t+"Verbatim"+e)))}))))}))))),[h("minted",p(d,p(u,g("minted"))))]);return{name:"LaTeX",aliases:["tex"],contains:[].concat(r(v),i)}}},70173:function(e){"use strict";e.exports=function(e){return{name:"LDIF",contains:[{className:"attribute",begin:"^dn",end:": ",excludeEnd:!0,starts:{end:"$",relevance:0},relevance:10},{className:"attribute",begin:"^\\w",end:": ",excludeEnd:!0,starts:{end:"$",relevance:0}},{className:"literal",begin:"^-",end:"$"},e.HASH_COMMENT_MODE]}}},58482:function(e){"use strict";e.exports=function(e){return{name:"Leaf",contains:[{className:"function",begin:"#+[A-Za-z_0-9]*\\(",end:/ \{/,returnBegin:!0,excludeEnd:!0,contains:[{className:"keyword",begin:"#+"},{className:"title",begin:"[A-Za-z_][A-Za-z_0-9]*"},{className:"params",begin:"\\(",end:"\\)",endsParent:!0,contains:[{className:"string",begin:'"',end:'"'},{className:"variable",begin:"[A-Za-z_][A-Za-z_0-9]*"}]}]}]}}},24266:function(e){"use strict";var t=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],n=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],r=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],i=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],a=["align-content","align-items","align-self","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","auto","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","clip-path","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-variant","font-variant-ligatures","font-variation-settings","font-weight","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inherit","initial","justify-content","left","letter-spacing","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","mask","max-height","max-width","min-height","min-width","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","perspective","perspective-origin","pointer-events","position","quotes","resize","right","src","tab-size","table-layout","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-indent","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","white-space","widows","width","word-break","word-spacing","word-wrap","z-index"].reverse(),o=r.concat(i);e.exports=function(e){var s=function(e){return{IMPORTANT:{className:"meta",begin:"!important"},HEXCOLOR:{className:"number",begin:"#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})"},ATTRIBUTE_SELECTOR_MODE:{className:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]}}}(e),l=o,c="[\\w-]+",u="("+c+"|@\\{"+c+"\\})",d=[],p=[],f=function(e){return{className:"string",begin:"~?"+e+".*?"+e}},h=function(e,t,n){return{className:e,begin:t,relevance:n}},m={$pattern:/[a-z-]+/,keyword:"and or not only",attribute:n.join(" ")},g={begin:"\\(",end:"\\)",contains:p,keywords:m,relevance:0};p.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,f("'"),f('"'),e.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},s.HEXCOLOR,g,h("variable","@@?"+c,10),h("variable","@\\{"+c+"\\}"),h("built_in","~?`[^`]*?`"),{className:"attribute",begin:c+"\\s*:",end:":",returnBegin:!0,excludeEnd:!0},s.IMPORTANT);var _=p.concat({begin:/\{/,end:/\}/,contains:d}),v={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(p)},y={begin:u+"\\s*:",returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/},{className:"attribute",begin:"\\b("+a.join("|")+")\\b",end:/(?=:)/,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:p}}]},b={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",keywords:m,returnEnd:!0,contains:p,relevance:0}},E={className:"variable",variants:[{begin:"@"+c+"\\s*:",relevance:15},{begin:"@"+c}],starts:{end:"[;}]",returnEnd:!0,contains:_}},S={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:u,end:/\{/}],returnBegin:!0,returnEnd:!0,illegal:"[<='$\"]",relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,v,h("keyword","all\\b"),h("variable","@\\{"+c+"\\}"),{begin:"\\b("+t.join("|")+")\\b",className:"selector-tag"},h("selector-tag",u+"%?",0),h("selector-id","#"+u),h("selector-class","\\."+u,0),h("selector-tag","&",0),s.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",begin:":("+r.join("|")+")"},{className:"selector-pseudo",begin:"::("+i.join("|")+")"},{begin:"\\(",end:"\\)",contains:_},{begin:"!important"}]},T={begin:c+":(:)?"+"(".concat(l.join("|"),")"),returnBegin:!0,contains:[S]};return d.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,b,E,T,y,S),{name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:d}}},69879:function(e){"use strict";e.exports=function(e){var t="[a-zA-Z_\\-+\\*\\/<=>&#][a-zA-Z0-9_\\-+*\\/<=>&#!]*",n="\\|[^]*?\\|",r="(-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s|D|E|F|L|S)(\\+|-)?\\d+)?",i={className:"literal",begin:"\\b(t{1}|nil)\\b"},a={className:"number",variants:[{begin:r,relevance:0},{begin:"#(b|B)[0-1]+(/[0-1]+)?"},{begin:"#(o|O)[0-7]+(/[0-7]+)?"},{begin:"#(x|X)[0-9a-fA-F]+(/[0-9a-fA-F]+)?"},{begin:"#(c|C)\\("+r+" +"+r,end:"\\)"}]},o=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),s=e.COMMENT(";","$",{relevance:0}),l={begin:"\\*",end:"\\*"},c={className:"symbol",begin:"[:&]"+t},u={begin:t,relevance:0},d={begin:n},p={contains:[a,o,l,c,{begin:"\\(",end:"\\)",contains:["self",i,o,a,u]},u],variants:[{begin:"['`]\\(",end:"\\)"},{begin:"\\(quote ",end:"\\)",keywords:{name:"quote"}},{begin:"'"+n}]},f={variants:[{begin:"'"+t},{begin:"#'"+t+"(::"+t+")*"}]},h={begin:"\\(\\s*",end:"\\)"},m={endsWithParent:!0,relevance:0};return h.contains=[{className:"name",variants:[{begin:t,relevance:0},{begin:n}]},m],m.contains=[p,f,h,i,a,o,s,l,c,d,u],{name:"Lisp",illegal:/\S/,contains:[a,e.SHEBANG(),i,o,s,p,f,h,u]}}},7550:function(e){"use strict";e.exports=function(e){var t={className:"variable",variants:[{begin:"\\b([gtps][A-Z]{1}[a-zA-Z0-9]*)(\\[.+\\])?(?:\\s*?)"},{begin:"\\$_[A-Z]+"}],relevance:0},n=[e.C_BLOCK_COMMENT_MODE,e.HASH_COMMENT_MODE,e.COMMENT("--","$"),e.COMMENT("[^:]//","$")],r=e.inherit(e.TITLE_MODE,{variants:[{begin:"\\b_*rig[A-Z][A-Za-z0-9_\\-]*"},{begin:"\\b_[a-z0-9\\-]+"}]}),i=e.inherit(e.TITLE_MODE,{begin:"\\b([A-Za-z0-9_\\-]+)\\b"});return{name:"LiveCode",case_insensitive:!1,keywords:{keyword:"$_COOKIE $_FILES $_GET $_GET_BINARY $_GET_RAW $_POST $_POST_BINARY $_POST_RAW $_SESSION $_SERVER codepoint codepoints segment segments codeunit codeunits sentence sentences trueWord trueWords paragraph after byte bytes english the until http forever descending using line real8 with seventh for stdout finally element word words fourth before black ninth sixth characters chars stderr uInt1 uInt1s uInt2 uInt2s stdin string lines relative rel any fifth items from middle mid at else of catch then third it file milliseconds seconds second secs sec int1 int1s int4 int4s internet int2 int2s normal text item last long detailed effective uInt4 uInt4s repeat end repeat URL in try into switch to words https token binfile each tenth as ticks tick system real4 by dateItems without char character ascending eighth whole dateTime numeric short first ftp integer abbreviated abbr abbrev private case while if div mod wrap and or bitAnd bitNot bitOr bitXor among not in a an within contains ends with begins the keys of keys",literal:"SIX TEN FORMFEED NINE ZERO NONE SPACE FOUR FALSE COLON CRLF PI COMMA ENDOFFILE EOF EIGHT FIVE QUOTE EMPTY ONE TRUE RETURN CR LINEFEED RIGHT BACKSLASH NULL SEVEN TAB THREE TWO six ten formfeed nine zero none space four false colon crlf pi comma endoffile eof eight five quote empty one true return cr linefeed right backslash null seven tab three two RIVERSION RISTATE FILE_READ_MODE FILE_WRITE_MODE FILE_WRITE_MODE DIR_WRITE_MODE FILE_READ_UMASK FILE_WRITE_UMASK DIR_READ_UMASK DIR_WRITE_UMASK",built_in:"put abs acos aliasReference annuity arrayDecode arrayEncode asin atan atan2 average avg avgDev base64Decode base64Encode baseConvert binaryDecode binaryEncode byteOffset byteToNum cachedURL cachedURLs charToNum cipherNames codepointOffset codepointProperty codepointToNum codeunitOffset commandNames compound compress constantNames cos date dateFormat decompress difference directories diskSpace DNSServers exp exp1 exp2 exp10 extents files flushEvents folders format functionNames geometricMean global globals hasMemory harmonicMean hostAddress hostAddressToName hostName hostNameToAddress isNumber ISOToMac itemOffset keys len length libURLErrorData libUrlFormData libURLftpCommand libURLLastHTTPHeaders libURLLastRHHeaders libUrlMultipartFormAddPart libUrlMultipartFormData libURLVersion lineOffset ln ln1 localNames log log2 log10 longFilePath lower macToISO matchChunk matchText matrixMultiply max md5Digest median merge messageAuthenticationCode messageDigest millisec millisecs millisecond milliseconds min monthNames nativeCharToNum normalizeText num number numToByte numToChar numToCodepoint numToNativeChar offset open openfiles openProcesses openProcessIDs openSockets paragraphOffset paramCount param params peerAddress pendingMessages platform popStdDev populationStandardDeviation populationVariance popVariance processID random randomBytes replaceText result revCreateXMLTree revCreateXMLTreeFromFile revCurrentRecord revCurrentRecordIsFirst revCurrentRecordIsLast revDatabaseColumnCount revDatabaseColumnIsNull revDatabaseColumnLengths revDatabaseColumnNames revDatabaseColumnNamed revDatabaseColumnNumbered revDatabaseColumnTypes revDatabaseConnectResult revDatabaseCursors revDatabaseID revDatabaseTableNames revDatabaseType revDataFromQuery revdb_closeCursor revdb_columnbynumber revdb_columncount revdb_columnisnull revdb_columnlengths revdb_columnnames revdb_columntypes revdb_commit revdb_connect revdb_connections revdb_connectionerr revdb_currentrecord revdb_cursorconnection revdb_cursorerr revdb_cursors revdb_dbtype revdb_disconnect revdb_execute revdb_iseof revdb_isbof revdb_movefirst revdb_movelast revdb_movenext revdb_moveprev revdb_query revdb_querylist revdb_recordcount revdb_rollback revdb_tablenames revGetDatabaseDriverPath revNumberOfRecords revOpenDatabase revOpenDatabases revQueryDatabase revQueryDatabaseBlob revQueryResult revQueryIsAtStart revQueryIsAtEnd revUnixFromMacPath revXMLAttribute revXMLAttributes revXMLAttributeValues revXMLChildContents revXMLChildNames revXMLCreateTreeFromFileWithNamespaces revXMLCreateTreeWithNamespaces revXMLDataFromXPathQuery revXMLEvaluateXPath revXMLFirstChild revXMLMatchingNode revXMLNextSibling revXMLNodeContents revXMLNumberOfChildren revXMLParent revXMLPreviousSibling revXMLRootNode revXMLRPC_CreateRequest revXMLRPC_Documents revXMLRPC_Error revXMLRPC_GetHost revXMLRPC_GetMethod revXMLRPC_GetParam revXMLText revXMLRPC_Execute revXMLRPC_GetParamCount revXMLRPC_GetParamNode revXMLRPC_GetParamType revXMLRPC_GetPath revXMLRPC_GetPort revXMLRPC_GetProtocol revXMLRPC_GetRequest revXMLRPC_GetResponse revXMLRPC_GetSocket revXMLTree revXMLTrees revXMLValidateDTD revZipDescribeItem revZipEnumerateItems revZipOpenArchives round sampVariance sec secs seconds sentenceOffset sha1Digest shell shortFilePath sin specialFolderPath sqrt standardDeviation statRound stdDev sum sysError systemVersion tan tempName textDecode textEncode tick ticks time to tokenOffset toLower toUpper transpose truewordOffset trunc uniDecode uniEncode upper URLDecode URLEncode URLStatus uuid value variableNames variance version waitDepth weekdayNames wordOffset xsltApplyStylesheet xsltApplyStylesheetFromFile xsltLoadStylesheet xsltLoadStylesheetFromFile add breakpoint cancel clear local variable file word line folder directory URL close socket process combine constant convert create new alias folder directory decrypt delete variable word line folder directory URL dispatch divide do encrypt filter get include intersect kill libURLDownloadToFile libURLFollowHttpRedirects libURLftpUpload libURLftpUploadFile libURLresetAll libUrlSetAuthCallback libURLSetDriver libURLSetCustomHTTPHeaders libUrlSetExpect100 libURLSetFTPListCommand libURLSetFTPMode libURLSetFTPStopTime libURLSetStatusCallback load extension loadedExtensions multiply socket prepare process post seek rel relative read from process rename replace require resetAll resolve revAddXMLNode revAppendXML revCloseCursor revCloseDatabase revCommitDatabase revCopyFile revCopyFolder revCopyXMLNode revDeleteFolder revDeleteXMLNode revDeleteAllXMLTrees revDeleteXMLTree revExecuteSQL revGoURL revInsertXMLNode revMoveFolder revMoveToFirstRecord revMoveToLastRecord revMoveToNextRecord revMoveToPreviousRecord revMoveToRecord revMoveXMLNode revPutIntoXMLNode revRollBackDatabase revSetDatabaseDriverPath revSetXMLAttribute revXMLRPC_AddParam revXMLRPC_DeleteAllDocuments revXMLAddDTD revXMLRPC_Free revXMLRPC_FreeAll revXMLRPC_DeleteDocument revXMLRPC_DeleteParam revXMLRPC_SetHost revXMLRPC_SetMethod revXMLRPC_SetPort revXMLRPC_SetProtocol revXMLRPC_SetSocket revZipAddItemWithData revZipAddItemWithFile revZipAddUncompressedItemWithData revZipAddUncompressedItemWithFile revZipCancel revZipCloseArchive revZipDeleteItem revZipExtractItemToFile revZipExtractItemToVariable revZipSetProgressCallback revZipRenameItem revZipReplaceItemWithData revZipReplaceItemWithFile revZipOpenArchive send set sort split start stop subtract symmetric union unload vectorDotProduct wait write"},contains:[t,{className:"keyword",begin:"\\bend\\sif\\b"},{className:"function",beginKeywords:"function",end:"$",contains:[t,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE,r]},{className:"function",begin:"\\bend\\s+",end:"$",keywords:"end",contains:[i,r],relevance:0},{beginKeywords:"command on",end:"$",contains:[t,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE,r]},{className:"meta",variants:[{begin:"<\\?(rev|lc|livecode)",relevance:10},{begin:"<\\?"},{begin:"\\?>"}]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE,r].concat(n),illegal:";$|^\\[|^=|&|\\{"}}},65727:function(e){"use strict";var t=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],r=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer","BigInt64Array","BigUint64Array","BigInt"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);e.exports=function(e){var i={keyword:t.concat(["then","unless","until","loop","of","by","when","and","or","is","isnt","not","it","that","otherwise","from","to","til","fallthrough","case","enum","native","list","map","__hasProp","__extends","__slice","__bind","__indexOf"]),literal:n.concat(["yes","no","on","off","it","that","void"]),built_in:r.concat(["npm","print"])},a="[A-Za-z$_](?:-[0-9A-Za-z$_]|[0-9A-Za-z$_])*",o=e.inherit(e.TITLE_MODE,{begin:a}),s={className:"subst",begin:/#\{/,end:/\}/,keywords:i},l={className:"subst",begin:/#[A-Za-z$_]/,end:/(?:-[0-9A-Za-z$_]|[0-9A-Za-z$_])*/,keywords:i},c=[e.BINARY_NUMBER_MODE,{className:"number",begin:"(\\b0[xX][a-fA-F0-9_]+)|(\\b\\d(\\d|_\\d)*(\\.(\\d(\\d|_\\d)*)?)?(_*[eE]([-+]\\d(_\\d|\\d)*)?)?[_a-z]*)",relevance:0,starts:{end:"(\\s*/)?",relevance:0}},{className:"string",variants:[{begin:/'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[e.BACKSLASH_ESCAPE]},{begin:/"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,s,l]},{begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s,l]},{begin:/\\/,end:/(\s|$)/,excludeEnd:!0}]},{className:"regexp",variants:[{begin:"//",end:"//[gim]*",contains:[s,e.HASH_COMMENT_MODE]},{begin:/\/(?![ *])(\\.|[^\\\n])*?\/[gim]*(?=\W)/}]},{begin:"@"+a},{begin:"``",end:"``",excludeBegin:!0,excludeEnd:!0,subLanguage:"javascript"}];s.contains=c;var u={className:"params",begin:"\\(",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:i,contains:["self"].concat(c)}]};return{name:"LiveScript",aliases:["ls"],keywords:i,illegal:/\/\*/,contains:c.concat([e.COMMENT("\\/\\*","\\*\\/"),e.HASH_COMMENT_MODE,{begin:"(#=>|=>|\\|>>|-?->|!->)"},{className:"function",contains:[o,u],returnBegin:!0,variants:[{begin:"("+a+"\\s*(?:=|:=)\\s*)?(\\(.*\\)\\s*)?\\B->\\*?",end:"->\\*?"},{begin:"("+a+"\\s*(?:=|:=)\\s*)?!?(\\(.*\\)\\s*)?\\B[-~]{1,2}>\\*?",end:"[-~]{1,2}>\\*?"},{begin:"("+a+"\\s*(?:=|:=)\\s*)?(\\(.*\\)\\s*)?\\B!?[-~]{1,2}>\\*?",end:"!?[-~]{1,2}>\\*?"}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[o]},o]},{begin:a+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}},44372:function(e){"use strict";function t(e){return e?"string"===typeof e?e:e.source:null}function n(){for(var e=arguments.length,n=new Array(e),r=0;r